[MŪZIKAS ATSKAŅOŠANA]
RUNĀTĀJS: Labi.
Tātad parunāsim par citu lietu, kas ir raksturīga tikai C, proti,
datu tipi un mainīgie.
Kad es saku, ka tas ir unikāls tikai C, es tiešām domāju tikai tādā
kontekstā, ka, ja esat programmētājs jau ļoti ilgu laiku un ja esat
izmantojis modernās programmēšanas valodas jūs, iespējams, neesat
strādājis ar datu tipiem, .
Mūsdienu valodās, piemēram, PHP un JavaScript, kuras mēs arī redzēsim
nedaudz vēlāk kursa laikā, jums faktiski nav jānorāda mainīgā datu
veids, kad to izmantojat.
Jūs vienkārši deklarējat to un sākat to lietot.
Ja tas ir vesels skaitlis, tas zina, ka tas ir vesels skaitlis.
Ja tā ir rakstzīme, tā zina, ka tā ir rakstzīme.
Ja tas ir vārds, tas zina, ka tā ir tā saucamā virkne, .
Bet valodā C, kas ir vecāka valoda, mums ir jānorāda katra mainīgā,
ko izveidojam, datu tips kad šo mainīgo izmantojam pirmo reizi.
Tātad C nāk ar dažiem iebūvētiem datu tipiem.
Un iepazīsimies ar dažiem no tiem.
Pēc tam mēs arī nedaudz parunāsim par dažiem datu tipiem, ko esam
jums uzrakstījuši , lai jūs varētu tos izmantot CS50.
Pirmais ir int.
Int datu tips tiek izmantots mainīgajiem, kas glabās veselu skaitļu
vērtības.
Tātad 1, 2, 3, negatīvs 1, 2, 3 utt.
Veselie skaitļi, kas jums jāpatur prātā, piedaloties viktorīnu,
vienmēr aizņem četrus baitus atmiņas, kas ir 32 biti.
Vienā baitā ir astoņi biti.
Tātad tas nozīmē, ka vērtību diapazonu, ko var saglabāt vesels
skaitlis, ierobežo tas, kas var iekļauties 32 bitu vērtībā.
Kā izrādās, jau sen tika nolemts, ka mēs šo 32 bitu diapazonu
sadalīsim negatīvos veselos skaitļos un pozitīvos veselos skaitļos,
katram iegūstot pusi no diapazona.
Tātad vērtību diapazons, ko mēs attēlojam ar veselu skaitli, ir no
negatīva 2 līdz 31. pakāpei līdz 2 līdz 31. pakāpei mīnus 1, jo jums
ir nepieciešama arī vieta 0.
Tātad būtībā puse no iespējamām vērtībām, ko varat iekļaut int, ir
negatīvas, bet puse ir pozitīvas.
Un aptuveni šeit tas ir apmēram negatīvi 2 miljardi līdz aptuveni
pozitīvi 2 miljardi.
Dod vai ņem pāris simtus miljonu.
Tātad tas ir tas, ko jūs varat ievietot veselā skaitļa mainīgajā.
Tagad mums ir arī kaut kas, ko sauc par bezzīmes veselu skaitli.
Tagad bezzīmes ints nav atsevišķs mainīgā tips.
Drīzāk bezzīmes ir tas, ko sauc par kvalifikatoru.
Tas nedaudz maina veselā skaitļa datu tipu.
Un šajā gadījumā, ko nozīmē bezzīmes — un jūs varat izmantot arī
citus bezzīmes datu tipus, taču vesels skaitlis nav vienīgais.
Tas faktiski divkāršo pozitīvo vērtību diapazonu, ko vesels skaitlis
var iegūt uz tā rēķina, ka vairs nevarēsit pieņemt negatīvas
vērtības.
Tātad ja jums ir skaitļi, par kuriem jūs zināt, ka tie būs lielāki
par 2 miljardiem, bet mazāki par 4 miljardiem, piemēram, tas ir no 2
līdz 32. pakāpei, ja zināt, ka jūsu vērtība nekad nebūs negatīva,
iespējams, vēlēsities izmantot bezzīmes int. . .
Jūs CS50 laiku pa laikam būsiet izmantojis bezzīmes mainīgos , tāpēc
es to pieminu šeit.
Bet atkal, vērtību diapazons, ko varat attēlot ar bezzīmju veselu
skaitli kā t regulāru veselu skaitli, ir no 0 līdz 2 līdz 32. pakāpei
mīnus 1 jeb aptuveni no 0 līdz 4 miljardiem.
Tātad jūs faktiski divkāršojāt pozitīvo diapazonu, ko varat ievietot,
bet esat atteicies no visām negatīvajām vērtībām.
Turklāt bezzīmju nav vienīgais kvalifikators, ko mēs varam redzēt
mainīgajiem datu tipiem.
Ir arī lietas, ko sauc par short un long un const.
Const mēs redzēsim nedaudz vēlāk kursa laikā.
Short un long, mēs, iespējams, neizmantosim.
Bet tikai ziniet, ka ir arī citi kvalifikatori.
Bezzīmess nav vienīgais.
Bet tas ir vienīgais, par kuru mēs šobrīd runāsim.
Tātad viss kārtībā.
Tātad mēs esam aptvēruši veselus skaitļus.
Ko tālāk?
Chars.
Tātad chars tiek izmantoti mainīgajiem lielumiem, kuros tiks glabātas
atsevišķas rakstzīmes.
Char ir saīsinājums vārdam character.
Un dažreiz jūs varat dzirdēt, ka cilvēki to izrunā kā car.
Tātad rakstzīmes vienmēr aizņem vienu baitu atmiņas, kas ir tikai 8
biti.
Tātad tas nozīmē, ka tās var ietilpt tikai vērtību diapazonā no
negatīva 2 līdz septītajai pakāpei vai negatīva 128 līdz 2 līdz 7.
pakāpei mīnus 1, vai 127.
Pateicoties ASCII, jau sen tika izlemts, kā ar dažādām rakstzīmēm,
kuras visas pastāv mūsu tastatūrā, attēlot šos pozitīvos skaitļus no
0 līdz 127 , .
ā mēs redzēsim vēlāk kursa gaitā, un jūs, iespējams, kādā brīdī
iegaumēsit, piemēram, lielo burtu A — rakstzīmju lielo A —, attēlo ar
skaitli 65.
Un iemesls tam ir tāpēc, ka tas ir tas, ko tam ir piešķīris ASCII
standarts.
A mazais burts ir 97.
Rakstzīme 0, kad jūs faktiski ierakstāt rakstzīmi, nevis apzīmējat
skaitli nulle, ir 48.
Laika gaitā Jūs iemācīsities dažus no tiem.
Un CS50 tie noteikti būs nepieciešami nedaudz vēlāk .
Nākamais lielākais datu tips ir peldošā komata skaitļi.
Tātad peldošā komata skaitļus sauc arī par reāliem skaitļiem.
Tie būtībā ir skaitļi, kuros ir komats.
Peldošā komata vērtības, tāpat kā veseli skaitļi, ietver
4 baituatmiņu.
Tagad šeit nav diagrammas.
Nav skaitļu līnijas, jo float vērtību diapazona aprakstīšana nav īsti
skaidra vai intuitīva.
Pietiek teikt, ka jums ir jāstrādā ar 32 bitiem.
Un, ja jums ir skaitlis, piemēram, pi, kuram ir vesela skaitļa daļa 3
un peldošā komata daļa vai decimāldaļa 0,14159 utt., jums ir jāspēj
attēlot to visu — veselo skaitļu daļu un decimāldaļu .
Tātad ko tas, jūsuprāt, varētu nozīmēt?
Viena lieta ir tāda, ka, ja decimāldaļa kļūst arvien garāka, ja man
ir ļoti liela vesela skaitļa daļa, ar decimāldaļu es, iespējams,
nevarēšu būt tik precīzs .
Un tas tiešām ir float ierobežojums.
Float ir precizitātes problēma.
Mums ir tikai 32 biti, ar kuriem strādāt, tāpēc mēs varam būt tik
precīzi ar savu decimāldaļu.
Mēs nevaram noteikti decimāldaļas precizitāti līdz 100 vai 200
cipariem, jo mums ir tikai 32 biti, ar kuriem strādāt.
Tātad tas ir float ierobežojums.
Tagad, par laimi, ir vēl viens datu tips, ko sauc par double, kas
nedaudz risina šo problēmu.
Doubles, tāpat kā floats, tiek izmantoti arī reālu skaitļu vai
peldošā komata vērtību glabāšanai.
Atšķirība ir tāda, ka doubles ir dubultā precizitāte.
Tajos var ietilpt 64 biti datu jeb astoņi baiti.
Ko tas nozīmē?
Tas nozīmē, ka mēs varam būt daudz precīzāki ar decimālpunktu.
Tā vietā, lai pi būtu līdz septiņām vietām, iespējams, ar float, mēs
varētu palielināt līdz 30 vietām.
Ja tas ir svarīgi, float vietā, iespējams, vēlēsities izmantot double.
Būtībā, ja strādājat ar kaut ko , kur ir svarīgi izmantot ļoti garu
ciparu aiz komata un lielu precizitāti, iespējams, labāk izmantot
double overfloat.
Tagad lielākajai daļai jūsu darba CS50 ar float vajadzētu pietikt.
Taču ziniet, ka doubles pastāv kā veids, kā zināmā mērā tikt galā ar
precizitātes problēmu, piešķirot jums papildu 32 bitus, kuros strādāt
ar saviem skaitļiem.
Šis nav datu tips.
Šis ir tips.
Un to sauc par void.
Un es par to runāju šeit, jo mēs, iespējams, to CS50 esam jau
redzējuši dažas reizes .
Un jūs varētu domāt, par ko tas viss ir.
Tātad void ir tips.
Tas pastāv.
Bet tas nav datu tips.
Mēs nevaram izveidot tipa mainīgo void un piešķirt tam vērtību.
Bet, piemēram, funkcijām var būt nederīgs void atgriešanas tips.
Būtībā, ja redzat funkciju, kurai ir void atgriešanas tips, tas
nozīmē, ka tā neatgriež vērtību.
Vai varat iedomāties kādu līdzīgu funkciju, ko līdz šim esam
izmantojuši CS50 un kas neatgriež vērtību?
Printf ir viena.
Printf jums faktiski neatgriež neko.
Tas kaut ko ievada ekrānā, un būtībā tas ir blakusefekts tam, ko dara
printf.
Bet tas nedod jums atpakaļ vērtību .
Jūs neuztverat rezultātu un saglabājat to kādā mainīgajā, lai to
izmantotu vēlāk.
Tas vienkārši ievada kaut ko uz ekrāna, un jūs esat pabeidzis.
Tātad mēs sakām, ka printf ir void funkcija.
Tā neko neatdod.
Funkcijas perimetru saraksts var būt arī void.
Un arī jūs to diezgan daudz esat redzējuši CS50.
Int main void.
Vai tas kaut ko atgādina?
Būtībā tas nozīmē, ka main neņem nekādus parametrus.
Nav neviena argumenta, kas tiktu nodots main.
Tagad vēlāk mēs redzēsim, ka ir veids, kā argumentus nodot main, bet
līdz šim tas, ko mēs esam redzējuši, ir main void.
Main vienkārši nepieņem nekādus argumentus.
Un tāpēc mēs to precizējam, sakot voidu.
Mēs tikai ļoti skaidri runājam par to, ka tam nav nepieciešami nekādi
argumenti.
Tāpēc pagaidām pietiek pateikt, ka void būtībā vajadzētu būt tikai
vietturim, lai jūs varētu domāt par neko.
Tas īsti neko nedara.
Šeit nav atgriešanās vērtības.
Šeit nav parametru.
Tas ir void.
Tas ir nedaudz sarežģītāk.
Bet ar to vajadzētu pietikt lielākaji kursa daļai.
Un, cerams, tagad jums ir mazliet vairāk priekšstata par to, kas ir
void.
Tātad šie ir pieci tipi, ar kuriem jūs saskarsities un kas ir
iebūvēti C.
Bet CS50 mums ir arī bibliotēka.
CS50.h, ko varat iekļaut.
Un kas nodrošinās jums divus papildu tipus, kurus, iespējams, varēsit
izmantot savos uzdevumos vai vienkārši strādājot ar programmēšanu.
Pirmais no tiem ir bool.
Būla datu tips, bool, tiek izmantots mainīgajiem, kas glabā Būla
vērtību.
Ja kādreiz esat dzirdējis šo terminu, iespējams, zināt, ka Būla
vērtība var saturēt tikai divas dažādas atšķirīgas vērtības.
Patiess un nepatiess.
Tagad tas šķiet diezgan būtiski, vai ne?
Tas ir sava veida pārsteigums, ka tas nepastāv C versijā, jo tas ir
iebūvēts.
Un daudzās mūsdienu valodās, protams, Būla ir standarta noklusējuma
datu tips.
Bet C valodā tie patiesībā nav.
Bet mēs to esam izveidojuši jums.
Tātad ja jums kādreiz ir jāizveido mainīgais, kura tips ir bool,
programmas sākumā noteikti pieslēdziet #include CS50.h, un jūs
varēsiet izveidot bool tipa mainīgos.
Ja aizmirstat pieslēgt #include CS50.h un sākat lietot Būla tipa
mainīgos, programmas kompilēšanas laikā var rasties dažas problēmas.
Tāpēc vienkārši uzmanieties.
Un varbūt jūs varat vienkārši novērst problēmas, iekļaujot CS50.h.
Otrs galvenais datu tips, ko mēs jums nodrošinām CS50 bibliotēkā, ir
virkne.
Tātad kas ir virkne?
Virknes patiesībā ir tikai vārdi.
Tās ir rakstzīmju kolekcijas.
Tie ir vārdi.
Tie ir teikumi.
Tās ir rindkopas.
Var būt pat veselas grāmatas.
Ļoti īsas līdz ļoti garas rakstzīmju sērijas.
Ja jums ir jāizmanto virknes, piemēram, lai glabātu vārdu, programmas
sākumā noteikti iekļaujiet CS50.h, lai varētu izmantot virknes tipu.
Un tad jūs varat izveidot mainīgos, kuru datu tips ir virkne.
Vēlāk kursā mēs redzēsim, ka arī tas nav viss stāsts.
Mēs saskarsimies ar lietām, ko sauc par struktūrām, kas vienā vienībā
ļauj grupēt to, kas var būt vesels skaitlis un virkne.
Un mēs to varam izmantot kādam nolūkam, kas varētu noderēt vēlāk
kursa laikā.
Mēs arī uzzināsim par definētajiem tipiem, kas ļauj jums izveidot
savus datu tipus.
Mums par to pagaidām nav jāuztraucas.
Bet tikai ziniet, ka tas ir kaut kas pie apvāršņa, ka visā šajā tipu
lietā ir daudz vairāk, nekā es jums tagad stāstu.
Tagad, kad esam mazliet uzzinājuši par pamata datu tipiem un CS50
datu tipiem, parunāsim par to, kā strādāt ar mainīgajiem un izveidot
tos, izmantojot šos datu tipus mūsu programmās.
Ja vēlaties izveidot mainīgo, viss, kas jums jādara, ir divas lietas.
Pirmkārt, jums ir jāpiešķir tam tips.
Otra lieta, kas jums jādara, ir jādot tai nosaukumu.
Kad esat to izdarījis un ievadījis semikolu šīs rindas beigās, esat
izveidojis mainīgo.
Tātad šeit ir divi piemēri.
Int numurs; char burts;.
Ko es te esmu izdarījis?
Esmu izveidojis divus mainīgos.
Pirmkārt, mainīgā nosaukums ir skaitlis.
Un skaitlis spēj saturēt veselu skaitļu tipa vērtības, jo tā tips ir
int.
Burts ir vēl viens mainīgais, kurš var saturēt rakstzīmes, jo tā datu
tips ir char.
Diezgan vienkārši, vai ne?
Ja atrodaties situācijā, kad jāizveido vairāki viena veida mainīgie,
tipa nosaukums jānorāda tikai vienreiz.
Pēc tam vienkārši uzskaitiet tik daudz šāda tipa mainīgo, cik
nepieciešams.
Tāpēc es varētu, piemēram, šajā trešajā koda rindā teikt int height;,
new line.
Int width;.
Un tas arī derētu.
Es joprojām iegūtu divus mainīgos lielumus, ko sauc par height un
width, no kuriem katrs ir vesels skaitlis.
Bet man ir atļauts, lietas C sintaksi, konsolidēt to vienā rindā.
Int height, width; Tas ir viens un tas pats.
Esmu izveidojis divus mainīgos, vienu sauc par height, otru sauc par
width, un abi spēj saturēt vesela skaitļa tipa vērtības.
Līdzīgi šeit es varu izveidot trīs peldošā komata vērtības vienlaikus.
Es varbūt varu izveidot mainīgo, ko sauc par kvadrātsakni no 2 — kas,
iespējams, galu galā saglabās peldošo komatu — šo kvadrātsakne no 2
attēlojumu — kvadrātsakni no 3 un pi.
Es būtu varējis to izdarīt trīs atsevišķās rindās.
Float, kvadrātsakne no 2; Float kvadrātsakne no 3; Float pi; un tas
arī derētu.
Bet atkal es varu to vienkārši apvienot vienā koda rindā.
Padara lietas mazliet īsākas, ne tik neveiklas.
Tagad kopumā ir labs dizains deklarēt mainīgo tikai tad, kad tas ir
nepieciešams.
Un mēs par to nedaudz vairāk runāsim vēlāk kursa laikā, kad
apspriedīsim darbības redzamības apgabalu.
Tāpēc nav obligāti jāizveido visi mainīgie programmas sākumā, ko daži
cilvēki varētu būt darījuši pagātnē, un kas noteikti bija ļoti
izplatīta kodēšanas prakse pirms daudziem gadiem, strādājot ar C.
Iespējams, vēlēsities izveidot mainīgo tieši tad, kad tas ir
nepieciešams.
Viss kārtībā.
Tāpēc mēs esam izveidojuši mainīgos.
Kā mēs tos izmantojam?
Pēc mainīgā deklarēšanas mums vairs nav jānorāda šī mainīgā datu tips.
Faktiski, ja jūs to darīsit, viss varētu beigties ar dīvainām sekām,
kuras mēs pagaidām noklusēsim.
Bet pietiks ar to, ka sāks notikt dīvainas lietas, ja netīšām
atkārtoti deklarēsit mainīgos ar tādu pašu nosaukumu.
Tātad šeit man ir četras koda rindiņas.
Un man ir daži komentāri, kas tikai norāda, kas notiek katrā rindā,
lai palīdzētu jums orientēties notiekošajā.
Tātad int number;.
Jūs to redzējāt iepriekš.
Tā ir mainīga deklarācija.
Tagad esmu izveidojis mainīgo, ko sauc par numuru, kas spēj saturēt
vesela skaitļa vērtības.
Esmu to deklarējis.
Nākamajā rindā es piešķiru skaitlim vērtību.
Number equals 17.
Kas tur notiek?
Es ievietoju skaitli 17 šī mainīgā iekšpusē.
Tātad ja es vēlāk ievadīšu numura saturu, viņi man pateiks, ka tas ir
17.
Tāpēc esmu deklarējis mainīgo un pēc tam to piešķīris.
Mēs varam atkārtot procesu vēlreiz ar char letter;.
Tā ir deklarācija.
Letter vienāds ar lielo H.
Tas ir arī diezgan vienkāršs uzdevums.
Tagad šis process varētu šķist muļķīgs.
Kāpēc mēs to darām divās koda rindās?
Vai ir kāds labāks veids, kā to izdarīt?
Patiesībā ir.
Dažreiz jūs varat redzēt to, ko sauc par inicializāciju.
Tas notiek, kad deklarējat mainīgo un vienlaikus piešķirat vērtību.
Tā patiesībā ir diezgan izplatīta darbība.
Kad veidojat mainīgo, parasti vēlaties, lai tam būtu kāda
pamatvērtība.
Pat ja tā ir 0 vai kaut kas cits.
Jūs vienkārši piešķirat tam vērtību.
Varat inicializēt mainīgo.
Int number ir vienāds ar 17 ir tāds pats kā pirmajās divās koda
rindiņās augstāk.
Char letter ir vienāds ar h ir tāds pats kā trešā un ceturtā koda
rindiņa iepriekš.
Vissvarīgākais šeit, kad mēs deklarējam un piešķiram mainīgos, ir pēc
tam, kad esam to deklarējuši. Ievērojiet, ka es vairs neizmantoju
datu tipu.
Es nesaku, piemēram, int number ir vienāds ar 17 otrajā koda rindā.
Es tikai saku, ka number ir vienāds ar 17.
Atkal , atkārtota mainīgā deklarēšana pēc tam, kad tas jau ir
deklarēts, var radīt dīvainas sekas.
Tāpēc esietuzmanīgi.
Es esmu Dags Loids.
Un šis ir CS50.