1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [GLASBA] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. Malan: V redu, to je CS50. 5 00:00:16,240 --> 00:00:18,010 In to je en teden. 6 00:00:18,010 --> 00:00:22,050 Tako opozarjajo, da je zadnji čas v nič tednu smo se osredotočili na računsko razmišljanje. 7 00:00:22,050 --> 00:00:25,440 In smo prešli iz tega, da Scratch, grafično programiranje 8 00:00:25,440 --> 00:00:27,360 jezik od naših prijateljev v Media Lab MIT. 9 00:00:27,360 --> 00:00:31,730 >> In z nič, pa smo raziskati ideje, kot so funkcije, in pogoje, 10 00:00:31,730 --> 00:00:35,210 in zank, in spremenljivke, in celo dogodki, in niti, in še več. 11 00:00:35,210 --> 00:00:37,880 In danes, si bomo še naprej uporabljajo te ideje, 12 00:00:37,880 --> 00:00:40,630 in res jih vzeli za odobrena, vendar jih prevesti 13 00:00:40,630 --> 00:00:44,220 v drug jezik, znan kot C. Now, C je bolj tradicionalna jezik. 14 00:00:44,220 --> 00:00:46,020 To je nižja stopnja jezik, če hočete. 15 00:00:46,020 --> 00:00:47,300 >> To je zgolj tekstovno. 16 00:00:47,300 --> 00:00:49,910 In tako na prvi pogled, da je vse bo videti precej skrivnosten 17 00:00:49,910 --> 00:00:51,430 če ste nikoli programirano prej. 18 00:00:51,430 --> 00:00:53,530 Bomo imeli podpičji in oklepaji, 19 00:00:53,530 --> 00:00:55,150 in zaviti oklepaji, in še več. 20 00:00:55,150 --> 00:00:57,240 Toda zavedati, da je tudi čeprav sintaksa je 21 00:00:57,240 --> 00:01:00,600 o tem, da si malo poznajo za večino od vas, glejte mimo tega. 22 00:01:00,600 --> 00:01:03,220 In skušamo videti ideje da so, res, pozna, 23 00:01:03,220 --> 00:01:06,750 ker tukaj v tednu od kar bomo začeli storiti je, za primerjavo, 24 00:01:06,750 --> 00:01:08,980 najprej, Scratch primerjavi C. 25 00:01:08,980 --> 00:01:12,350 >> Tako, na primer, se spomni, da ko smo izveden prvi od naših programov 26 00:01:12,350 --> 00:01:16,220 Zadnjič, ko smo imeli blok, ki je preučevala malo nekaj podobnega this-- kadar 27 00:01:16,220 --> 00:01:19,990 kliknili zelene zastave, nato pa smo imeli enega ali več kosov sestavljanke pod njo, 28 00:01:19,990 --> 00:01:22,150 V tem primeru, pravijo, zdravo svet. 29 00:01:22,150 --> 00:01:24,870 Torej, seveda, v nič, ko kliknem, da zeleno zastavo 30 00:01:24,870 --> 00:01:27,390 teči svoj program, tako govoriti, to so 31 00:01:27,390 --> 00:01:29,520 bloki, ki se izvršijo, ali teči. 32 00:01:29,520 --> 00:01:32,230 In, še posebej, Scratch je dejal, zdravo, svet. 33 00:01:32,230 --> 00:01:35,377 >> Zdaj, lahko bi bili določeni z drugimi besedami tukaj. 34 00:01:35,377 --> 00:01:37,960 Ampak bomo videli, da je res, veliko teh blocks-- in vsekakor, 35 00:01:37,960 --> 00:01:41,880 v C lahko veliko functions-- biti parametriziramo ali po meri 36 00:01:41,880 --> 00:01:43,150 narediti različne stvari. 37 00:01:43,150 --> 00:01:45,520 V resnici, v C, če mi želite spremeniti, zdaj, 38 00:01:45,520 --> 00:01:47,567 To Scratch programa na ta drugi jezik, 39 00:01:47,567 --> 00:01:49,650 bomo napisati malo kaj takega. 40 00:01:49,650 --> 00:01:52,540 >> Zagotovo obstaja nekaj ne poznajo sintaksa je najbolj verjetno, int, 41 00:01:52,540 --> 00:01:54,380 in oklepaji in neveljavne. 42 00:01:54,380 --> 00:01:57,740 Toda printf-- čeprav bi jih mislim, da bi bilo samo za tiskanje. 43 00:01:57,740 --> 00:02:00,120 Toda print pomeni tiskanje oblikovano, saj bomo kmalu videli. 44 00:02:00,120 --> 00:02:02,140 To bo dobesedno tiskanje na zaslonu karkoli 45 00:02:02,140 --> 00:02:05,990 je znotraj teh oklepajev, kar Seveda je v tem primeru, zdravo svet. 46 00:02:05,990 --> 00:02:09,290 >> Vendar boste opazili kakšno drugo sintaksa, nekatere dvojne kotacije, 47 00:02:09,290 --> 00:02:11,890 da oklepaju na koncu semi-debelega črevesa in podobno. 48 00:02:11,890 --> 00:02:15,027 Tako da je malo nad glavo, tako rekoč, tako kognitivno 49 00:02:15,027 --> 00:02:17,860 in skladenjsko, da bomo morali zapomniti kmalu. 50 00:02:17,860 --> 00:02:20,720 Toda zavedati, da s prakso, To se bo začelo, da skoči ven na vas. 51 00:02:20,720 --> 00:02:24,920 >> V resnici pa se osredotočajo na to ena Funkcija specifically-- v tem primeru, 52 00:02:24,920 --> 00:02:26,290 Pozdravi svet. 53 00:02:26,290 --> 00:02:27,560 Tako pravijo, je funkcija. 54 00:02:27,560 --> 00:02:31,320 Zdravo svet je njen parameter, ali argument, njena prilagoditev. 55 00:02:31,320 --> 00:02:34,320 >> In enakovrednost v C je prav bo to eno vrstico tukaj, 56 00:02:34,320 --> 00:02:38,710 kjer je printf enaka, recimo, dvojno kotirajo niz, zdravo 57 00:02:38,710 --> 00:02:41,470 svet je enaka, seveda, s tem, kar je v belem polju tam. 58 00:02:41,470 --> 00:02:45,680 In poševnica nazaj n, čeprav nekoliko čudno in odsotno iz nič, 59 00:02:45,680 --> 00:02:49,380 preprosto se dogaja, da imajo za posledico, da bomo videli v računalniku, kot je moj Mac ali PC, 60 00:02:49,380 --> 00:02:51,660 za samo premikanje kazalko v naslednjo vrstico. 61 00:02:51,660 --> 00:02:53,970 To je kot hitting Enter na tipkovnici. 62 00:02:53,970 --> 00:02:55,580 >> Torej bomo spet videli, da kmalu. 63 00:02:55,580 --> 00:02:58,640 Ampak najprej, pa si poglej tole Drugi primer v primeru zank. 64 00:02:58,640 --> 00:03:02,830 Imeli smo te za vedno zanko zadnji čas, ki je bila serija koščke 65 00:03:02,830 --> 00:03:05,490 da je storil nekaj, kar dobesedno forever-- v tem primeru, 66 00:03:05,490 --> 00:03:08,360 pravijo, zdravo svet, zdravo svet, Zdravo svet, zdravo svet. 67 00:03:08,360 --> 00:03:10,350 Torej, to je neskončna zanka z zasnovo. 68 00:03:10,350 --> 00:03:14,580 >> V C, če želimo, da izvajanje tega Isto idejo, bomo morda le to. 69 00:03:14,580 --> 00:03:19,570 Medtem ko je res, world-- printf zdravo zdaj medtem ko je le pomensko, vrsta 70 00:03:19,570 --> 00:03:23,090 pričara idejo o tem spet nekaj, in še enkrat in še enkrat, 71 00:03:23,090 --> 00:03:23,980 in za koliko časa? 72 00:03:23,980 --> 00:03:27,990 No, true-- odpoklic, ki Res je samo ali ena. 73 00:03:27,990 --> 00:03:30,660 >> In res je, seveda, vedno res. 74 00:03:30,660 --> 00:03:33,060 Torej, to je nekako nesmiselno Izjava samo reči res. 75 00:03:33,060 --> 00:03:36,890 Vendar je res, da je to namerno, ker če res je le vedno drži, 76 00:03:36,890 --> 00:03:40,850 kot sicer res samo pomeni, če malo posredno 77 00:03:40,850 --> 00:03:44,070 da naslednjih vrstic kode med temi zavitimi oklepaji 78 00:03:44,070 --> 00:03:48,320 bi samo izvršiti še enkrat in še enkrat, in še enkrat in nikoli ustaviti. 79 00:03:48,320 --> 00:03:50,230 >> Toda, če želite, da zanka ustavi, kot smo 80 00:03:50,230 --> 00:03:54,500 si zadnjič z nekaj podobnega To ponovite naslednje 50-krat, 81 00:03:54,500 --> 00:03:57,700 v C lahko storijo enako s tem, kar je imenuje za loop-- ključno besedo 82 00:03:57,700 --> 00:03:59,330 niso hkrati, vendar. 83 00:03:59,330 --> 00:04:03,290 In potem imamo nekaj novih sintakso, z int i enak 0, i manj kot 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 In bomo prišli nazaj na to. 86 00:04:05,430 --> 00:04:09,660 Ampak to je samo, kako bi prevesti niz Scratch blokov 87 00:04:09,660 --> 00:04:13,079 za sklop C vrstic kode. 88 00:04:13,079 --> 00:04:14,450 >> Medtem, menijo spremenljivke. 89 00:04:14,450 --> 00:04:16,540 In, v resnici, smo pravkar videl enega pred nekaj trenutki. 90 00:04:16,540 --> 00:04:21,220 In v primeru Scratch, če bomo želel razglasi spremenljivko i 91 00:04:21,220 --> 00:04:24,590 na i pa celo, samo številka, in želimo, da ga je do neke vrednosti, 92 00:04:24,590 --> 00:04:28,410 želimo uporabiti to oranžno blok here-- i nastavljen na 0. 93 00:04:28,410 --> 00:04:30,800 >> In bomo videli danes, naprej, tako kot prejšnji teden, 94 00:04:30,800 --> 00:04:33,850 programerji storiti skoraj vedno začnemo iz nič, res 95 00:04:33,850 --> 00:04:34,950 po dogovoru. 96 00:04:34,950 --> 00:04:37,250 Pa tudi zato, ker odpokliče Naša razprava o binarni, 97 00:04:37,250 --> 00:04:39,990 najmanjše število, ki ga lahko predstavljata s poljubnim številom bitov 98 00:04:39,990 --> 00:04:41,640 je le, da bo treba 0. sama. 99 00:04:41,640 --> 00:04:45,190 In tako bomo običajno začnejo inicializacijo tudi naše spremenljivke na 0. 100 00:04:45,190 --> 00:04:47,710 >> In v C, da storijo enako, bomo rekli int 101 00:04:47,710 --> 00:04:50,110 za celo število, i samo po dogovoru. 102 00:04:50,110 --> 00:04:53,390 Lahko bi poklical ta spremenljivka kaj hočem, tako kot v Scratch. 103 00:04:53,390 --> 00:04:57,770 In potem je enak 0 samo dodeli vrednost 0 desne 104 00:04:57,770 --> 00:05:01,319 in ga postavi v spremenljivko, ali Posoda za shranjevanje je na levi strani. 105 00:05:01,319 --> 00:05:04,360 In podpičjem kot bomo see-- in smo videli nekaj teh already-- 106 00:05:04,360 --> 00:05:06,530 pomeni le konec misli. 107 00:05:06,530 --> 00:05:09,430 Nadaljujemo za nekaj drugega na progah, ki sledijo. 108 00:05:09,430 --> 00:05:11,330 >> Zdaj, kaj logičnih izrazov? 109 00:05:11,330 --> 00:05:14,320 Spomnimo se, da v nič, to so izrazi 110 00:05:14,320 --> 00:05:16,740 ki so bodisi true ali false-- vprašanja 111 00:05:16,740 --> 00:05:18,910 Res, da so bodisi resnična ali neresnična. 112 00:05:18,910 --> 00:05:21,960 Torej, v primeru Scratch, bomo morda zastaviti preprosto vprašanje, kot je ta, 113 00:05:21,960 --> 00:05:24,586 je i manj kot 50? 114 00:05:24,586 --> 00:05:25,710 Tako i, spet je celo število. 115 00:05:25,710 --> 00:05:27,210 Mogoče smo jo uporabljajo v programu Scratch 116 00:05:27,210 --> 00:05:29,310 slediti rezultatom ali nekaj takega. 117 00:05:29,310 --> 00:05:33,810 Torej, to sintakso tukaj v Scratch samo pomeni, je i manj kot 50? 118 00:05:33,810 --> 00:05:37,330 No, na srečo, kar je preprosto v C. In za prevajanje, 119 00:05:37,330 --> 00:05:41,780 to bi preprosto rekel, da sem manj od 50, s pomočjo znane tipke 120 00:05:41,780 --> 00:05:42,850 na tipkovnici. 121 00:05:42,850 --> 00:05:45,141 >> Medtem, če si hotel reči nekaj bolj splošno, 122 00:05:45,141 --> 00:05:49,890 kot dobro, je x manjši kot y, kjer je vsak x in y sta sami spremenljivke? 123 00:05:49,890 --> 00:05:52,280 To lahko storimo isto stvar V C, dokler smo jih 124 00:05:52,280 --> 00:05:53,942 ustvaril te spremenljivke že. 125 00:05:53,942 --> 00:05:55,650 In bomo videli, kako storiti, da kmalu. 126 00:05:55,650 --> 00:05:58,590 Mi bi preprosto rekli x manj kot y. 127 00:05:58,590 --> 00:06:00,530 >> Torej ste se začne z vidim nekaj podobnosti. 128 00:06:00,530 --> 00:06:03,490 In tisti ljudje, ki so postavili Scratch je zagotovo 129 00:06:03,490 --> 00:06:05,250 navdihnila nekatere od teh osnovnih idej. 130 00:06:05,250 --> 00:06:10,350 In boste videli te vrste sintaksa v mnogih languages-- 131 00:06:10,350 --> 00:06:12,160 ne samo Scratch, ne Samo C, vendar Python 132 00:06:12,160 --> 00:06:14,790 in JavaScript ter drugi jeziki še. 133 00:06:14,790 --> 00:06:18,270 >> Oglejmo si še en konstrukt iz C, pojem pogoj, 134 00:06:18,270 --> 00:06:20,370 delaš nekaj pogojno. 135 00:06:20,370 --> 00:06:22,720 Če je nekaj res, to storite. 136 00:06:22,720 --> 00:06:24,457 Če je nekaj drugega res, to. 137 00:06:24,457 --> 00:06:27,040 To je neke vrste programiranja ekvivalent odcepu. 138 00:06:27,040 --> 00:06:29,730 Mogoče je dvosmeren vilice tripotni vilice ali več. 139 00:06:29,730 --> 00:06:32,800 In v Scratch, lahko imamo videl nekaj takega. 140 00:06:32,800 --> 00:06:34,010 >> Torej, ta je velik. 141 00:06:34,010 --> 00:06:36,750 Vendar menijo, da je relativno preprostost logike. 142 00:06:36,750 --> 00:06:44,010 Če je x manjši kot y, potem pravijo x manj kot y, drugega, če je x večji od y, 143 00:06:44,010 --> 00:06:46,230 Nato pravijo x večji od y. 144 00:06:46,230 --> 00:06:48,300 In potem, logično, če misliš, da nazaj v Scratch 145 00:06:48,300 --> 00:06:52,610 ali pa samo svoj človeška intuicija, tudi, če je x ni večji od y, x 146 00:06:52,610 --> 00:06:57,000 ni manjša od y, potem seveda x bo enaka y. 147 00:06:57,000 --> 00:06:59,690 Torej, v tem primeru, ki ga gnezdenje te praske bloki, 148 00:06:59,690 --> 00:07:02,580 lahko dosežemo tri Tako vilice na cesti? 149 00:07:02,580 --> 00:07:04,980 >> Medtem, če želimo to, da v C, je nedvomno 150 00:07:04,980 --> 00:07:08,420 izgleda malo simpler-- vsaj ko boste dobili seznanjeni s sintakso. 151 00:07:08,420 --> 00:07:12,050 Če je x manjši kot y printf x manjša od y. 152 00:07:12,050 --> 00:07:16,140 Drugega, če je x večji od y, printf x večji od y. 153 00:07:16,140 --> 00:07:21,210 Drugega printf x je enak y-- in še enkrat, s tistimi, poševnica nazaj konča tik 154 00:07:21,210 --> 00:07:24,160 za tiste nove linije, tako da, če ste dejansko tekel te vrste programa 155 00:07:24,160 --> 00:07:25,940 da bi samo premaknete kazalec na koncu 156 00:07:25,940 --> 00:07:28,100 na naslednji vrstici zaslona. 157 00:07:28,100 --> 00:07:31,270 >> Zdaj, medtem Scratch imel drugo bolj prefinjene funkcije, le 158 00:07:31,270 --> 00:07:34,320 od katerih so nekatere bomo najprej preiti na svetu C. 159 00:07:34,320 --> 00:07:37,010 In eden izmed njih je bil imenuje seznam v Scratch. 160 00:07:37,010 --> 00:07:39,100 In to je bil poseben tip spremenljivke, ki 161 00:07:39,100 --> 00:07:42,840 dovoljeno, da shranite več stvari v nazaj, nazaj, nazaj, nazaj. 162 00:07:42,840 --> 00:07:45,540 >> V C nima Seznami po sebi, ampak nekaj 163 00:07:45,540 --> 00:07:48,090 da so bolj splošno imenuje nizi, čeprav bomo 164 00:07:48,090 --> 00:07:50,590 prišel nazaj kasneje ta semester da gledamo na nekaj 165 00:07:50,590 --> 00:07:52,780 imenuje seznam, ali res povezan seznam. 166 00:07:52,780 --> 00:07:55,510 Ampak za zdaj, v katerem je protivrednost v C za nas 167 00:07:55,510 --> 00:07:57,345 se bo nekaj imenujemo matrika. 168 00:07:57,345 --> 00:07:59,740 In množica je preprosto posebna vrsta spremenljivke 169 00:07:59,740 --> 00:08:03,160 ki vam omogoča shranjevanje podatkov nazaj, nazaj, nazaj, na hrbet. 170 00:08:03,160 --> 00:08:05,840 >> In res, v nič, če smo želeli dostop 171 00:08:05,840 --> 00:08:09,030 Prvi element matrike ali list-- in bom ga poklical, 172 00:08:09,030 --> 00:08:13,600 Po dogovoru argv, argument vektor, ampak več o tem kmalu. 173 00:08:13,600 --> 00:08:17,090 Če želim, da bi dobili na prvem elementu argv, v svetu Scratch 174 00:08:17,090 --> 00:08:20,930 vi dejansko ne običajno začetek štetja od 1. 175 00:08:20,930 --> 00:08:22,850 >> In tako sem lahko dobil 1. točke argv. 176 00:08:22,850 --> 00:08:26,310 To je samo, kako MIT izvajati pojem seznamov. 177 00:08:26,310 --> 00:08:29,860 Toda v C, vam bom bolj enostavno samo reči, argv, 178 00:08:29,860 --> 00:08:32,758 kar je spet ime moje list-- ali mora biti jasno, array. 179 00:08:32,758 --> 00:08:34,549 In če želim prva elementi, bom 180 00:08:34,549 --> 00:08:37,890 za uporabo oglatih oklepajev, ki vas morda ne pogosto uporablja pod tipkovnico. 181 00:08:37,890 --> 00:08:40,150 >> Toda 0 pomeni le, daj mi prvi. 182 00:08:40,150 --> 00:08:42,160 Tako občasno in kot čas teče, bomo 183 00:08:42,160 --> 00:08:44,570 za začetek, da se te dihotomijo med nič in C, 184 00:08:44,570 --> 00:08:46,070 pri čemer Scratch uporablja. 185 00:08:46,070 --> 00:08:47,670 Mi v C uporabite 0 tukaj. 186 00:08:47,670 --> 00:08:49,420 Pa boste hitro videli, ko boste razumeli 187 00:08:49,420 --> 00:08:52,920 temelj vsakega jezika, da te stvari začnejo, da bi dobili toliko bolj 188 00:08:52,920 --> 00:08:56,860 seznanjeni s prakso in prakso. 189 00:08:56,860 --> 00:08:59,700 >> Torej, kaj je dejansko videti sedaj na programu. 190 00:08:59,700 --> 00:09:04,031 Tu je prva izmed naših C izvorna koda za popolne programe. 191 00:09:04,031 --> 00:09:06,280 In program bomo ponuditi za plačilo 192 00:09:06,280 --> 00:09:09,340 je tista, ki je enakovreden omenjenem Scratch kosu. 193 00:09:09,340 --> 00:09:13,210 >> Torej, tukaj imamo kaj verjetno najenostavnejši C program 194 00:09:13,210 --> 00:09:15,410 lahko pišete, da dejansko naredi nekaj. 195 00:09:15,410 --> 00:09:18,250 Zdaj bomo pogledali preteklost, za zdaj, je vključiti, 196 00:09:18,250 --> 00:09:21,190 standardna io.h, in to kot nosilci in int in neveljavno, 197 00:09:21,190 --> 00:09:22,840 in zaviti oklepaji in podobno. 198 00:09:22,840 --> 00:09:25,390 >> In kaj je samo osredotočiti na kaj, vsaj intuitivno, 199 00:09:25,390 --> 00:09:26,860 lahko skoči ven na vas že. 200 00:09:26,860 --> 00:09:30,300 Dejstvo je, glavno, da ne nujno, da vedo, kaj je to, 201 00:09:30,300 --> 00:09:34,580 vendar podobno kot Scratch je bilo, da je pri zelena zastava kliknili kos sestavljanke, 202 00:09:34,580 --> 00:09:39,070 tako da ne C kot programskega jezika imajo glavni del kode, ki 203 00:09:39,070 --> 00:09:43,380 dobi izvaja privzeto. In, seveda, to je dobesedno dogaja, da se imenuje glavni. 204 00:09:43,380 --> 00:09:44,720 >> Tako da glavna funkcija. 205 00:09:44,720 --> 00:09:48,720 In to je posebna funkcija, ki obstaja v C, da ko zaženete program, 206 00:09:48,720 --> 00:09:52,720 je glavno, da dobi, ki jih vodijo privzeto. V svetu Scratch, 207 00:09:52,720 --> 00:09:56,970 to je ponavadi, ko zelena zastava kliknil, ki sem jih vodijo privzeto. 208 00:09:56,970 --> 00:10:01,130 >> Medtem, to smo že videli, printf ali tiskanje oblikovano, da je 209 00:10:01,130 --> 00:10:05,620 bo funkcija, ki prihaja z C, skupaj z cel kup drugih, 210 00:10:05,620 --> 00:10:10,140 da bo od časa in časa Ponovno, da narediti točno 211 00:10:10,140 --> 00:10:12,450 kot pove že ime, natisniti nekaj. 212 00:10:12,450 --> 00:10:13,500 Kaj želimo natisniti? 213 00:10:13,500 --> 00:10:15,770 No, bomo videli, da ki ga obdaja znakov 214 00:10:15,770 --> 00:10:18,680 kot these-- Hello World, poševnica nazaj n v dvojnih narekovajih, 215 00:10:18,680 --> 00:10:23,040 lahko rečemo printf točno Kaj natisniti na zaslonu. 216 00:10:23,040 --> 00:10:26,430 >> Ampak da narediti da, žal 217 00:10:26,430 --> 00:10:30,010 morali vzeti nekaj, kar je že Grobni za nas ljudi, 218 00:10:30,010 --> 00:10:34,510 ampak vsaj to je nekoliko readable-- oster vključujejo standardno io.h, int, 219 00:10:34,510 --> 00:10:39,340 Glavno, nična, printf, vse čarobno zaklinjanjem smo pravkar videli na zaslonu. 220 00:10:39,340 --> 00:10:42,470 Vendar smo dejansko morali iti še bolj skrivnostne. 221 00:10:42,470 --> 00:10:47,140 Najprej smo morali prevesti kodo da smo napisali v strojno kodo. 222 00:10:47,140 --> 00:10:51,370 In odpoklic iz prejšnjega tedna, da stroji, vsaj tisti vemo tod 223 00:10:51,370 --> 00:10:54,450 Na koncu dneva le razumeti ničle in narave. 224 00:10:54,450 --> 00:10:58,100 >> In moj Bog, če bi moral napisati to ničle in tisti dejansko programa, 225 00:10:58,100 --> 00:11:01,260 da bi se zelo, zelo hitro vzemite zabavo iz nič. 226 00:11:01,260 --> 00:11:05,150 Ampak se je izkazalo, na zadnji teden, da so ti vzorci ničel in enic 227 00:11:05,150 --> 00:11:06,400 samo še poseben pomen. 228 00:11:06,400 --> 00:11:08,500 V določenih kontekstih, morda pomenijo številke. 229 00:11:08,500 --> 00:11:11,840 >> V nekaterih kontekstih, bi lahko pomenilo pisma, ali barve ali poljubno število 230 00:11:11,840 --> 00:11:14,710 drugih odvzemov tam na. 231 00:11:14,710 --> 00:11:18,450 Toda tako kot je v računalniku CPU, centralna procesna enota, 232 00:11:18,450 --> 00:11:20,390 ali možgani v notranjosti računalnika. 233 00:11:20,390 --> 00:11:22,240 To je običajno Intel notri, ker je to 234 00:11:22,240 --> 00:11:24,900 eden od največjih podjetij ki omogoča procesorjev za računalnike. 235 00:11:24,900 --> 00:11:28,910 >> No, Intel procesorjev in drugi Preprosto so se odločili vnaprej 236 00:11:28,910 --> 00:11:33,970 da so nekateri vzorci ničle in tisti pomenijo določene stvari. 237 00:11:33,970 --> 00:11:37,040 Nekateri vzorci ničel in enic bo pomenilo, natisnete na zaslon, 238 00:11:37,040 --> 00:11:39,710 ali dodajanje teh dveh številk ali odštejemo teh dveh številk, 239 00:11:39,710 --> 00:11:43,310 ali premakniti ta podatek iz spomin mojega računalnika tukaj, 240 00:11:43,310 --> 00:11:47,870 ali poljubno število drugih zelo nizki ravni, toda na koncu je koristno, operacije. 241 00:11:47,870 --> 00:11:53,022 Ampak, na srečo, mi, ljudje ne bodo da je treba vedeti to raven podrobnosti. 242 00:11:53,022 --> 00:11:56,230 Dejansko, tako kot zadnjič, kjer smo odvzete še enkrat in še enkrat in še enkrat, 243 00:11:56,230 --> 00:11:58,930 stavba iz zelo nizki ravni primitivnih kot ničel in enic 244 00:11:58,930 --> 00:12:01,160 višjih konceptov ravni kot številk in črk, 245 00:12:01,160 --> 00:12:04,330 in barve, in še več, tako da lahko mi kot programerje 246 00:12:04,330 --> 00:12:07,080 stojijo na ramenih drugi, ki so prišli pred nami 247 00:12:07,080 --> 00:12:11,260 in uporabo programske opreme, da je druga ljudje so napisali pred us-- 248 00:12:11,260 --> 00:12:14,340 in sicer programi imenuje prevajalniki. 249 00:12:14,340 --> 00:12:17,770 >> C je jezik, ki se običajno zbirajo, 250 00:12:17,770 --> 00:12:22,130 kar pomeni, da pretvori iz Izvorna koda za strojno kodo. 251 00:12:22,130 --> 00:12:25,230 Še posebej, kaj to pomeni je, da če imaš svoj vir 252 00:12:25,230 --> 00:12:29,530 Koda, ki ste sami napisali, kot smo prej bo čez nekaj trenutkov na zaslonu, 253 00:12:29,530 --> 00:12:33,140 in ga želite spremeniti končno stroj code-- 254 00:12:33,140 --> 00:12:37,100 tiste ničle in tiste, ki samo vaš Mac ali osebni računalnik 255 00:12:37,100 --> 00:12:41,230 understands-- imaš prvi krme, da izvorne kode v kot 256 00:12:41,230 --> 00:12:46,340 vhod za poseben Program se imenuje prevajalnik, 257 00:12:46,340 --> 00:12:48,974 izhod, ki smo Videli je strojni kodi. 258 00:12:48,974 --> 00:12:51,890 In res, zadnjič, ko smo se pogovarjali o, res, na koncu dneva, 259 00:12:51,890 --> 00:12:52,610 reševanje problema. 260 00:12:52,610 --> 00:12:53,360 Imaš vložke. 261 00:12:53,360 --> 00:12:54,318 In imaš izhode. 262 00:12:54,318 --> 00:12:56,560 In imaš neko algoritma v sredini. 263 00:12:56,560 --> 00:12:59,830 >> Algoritmi lahko zagotovo izvajajo v programski opremi, 264 00:12:59,830 --> 00:13:02,900 kot smo videli pri psevdokoda zadnjem tednu in kot bomo videli v dejansko kodo 265 00:13:02,900 --> 00:13:03,490 ta teden. 266 00:13:03,490 --> 00:13:06,430 In tako prevajalnik res samo ima nabor algoritmov znotraj 267 00:13:06,430 --> 00:13:10,060 za to, da vedo, kako pretvorbo posebne besede, 268 00:13:10,060 --> 00:13:12,180 kot glavno in printf, in drugi, ki smo pravkar 269 00:13:12,180 --> 00:13:17,620 videli v vzorcih ničel in Tisti, ki Intel znotraj in drugih procesorjev 270 00:13:17,620 --> 00:13:20,020 dejansko razume. 271 00:13:20,020 --> 00:13:22,460 Torej, kako bomo to naredili? 272 00:13:22,460 --> 00:13:24,470 Kje bomo dobili prevajalnik? 273 00:13:24,470 --> 00:13:26,400 >> Večina nas ima tu Mac ali PC. 274 00:13:26,400 --> 00:13:29,152 In ti teče Mac OS, ali Windows ali Linux ali Solaris, 275 00:13:29,152 --> 00:13:30,860 ali poljubno število drugih operacijski sistemi. 276 00:13:30,860 --> 00:13:32,568 In, seveda, smo lahko iti ven na spletu 277 00:13:32,568 --> 00:13:35,710 in prenos prevajalnik za vaš Mac ali osebni računalnik 278 00:13:35,710 --> 00:13:37,360 za svoj operacijski sistem. 279 00:13:37,360 --> 00:13:39,617 Vendar pa bi bili vsi na različnih strani, tako rekoč. 280 00:13:39,617 --> 00:13:41,450 Imeli bi nekoliko različne konfiguracije. 281 00:13:41,450 --> 00:13:43,210 In stvari ne delujejo vsi enaki. 282 00:13:43,210 --> 00:13:45,280 In res, v teh dneh mnogi od nas ne uporabljajo 283 00:13:45,280 --> 00:13:47,516 programska oprema, ki deluje le na naših prenosnih računalnikov. 284 00:13:47,516 --> 00:13:49,390 Namesto tega bomo uporabili nekaj kot brskalnik, ki 285 00:13:49,390 --> 00:13:52,930 nam omogoča dostop do web-based aplikacije v oblaku. 286 00:13:52,930 --> 00:13:55,630 In kasneje ta semester, bomo naredili točno to. 287 00:13:55,630 --> 00:13:59,660 Bomo napisali aplikacij ali Programska oprema code-- uporabo ne C, 288 00:13:59,660 --> 00:14:02,860 ampak druge jezike, kot so Python in JavaScript--, ki delujejo v oblaku. 289 00:14:02,860 --> 00:14:05,860 >> In za to smo sami med semestrom 290 00:14:05,860 --> 00:14:11,890 bo dejansko uporabite oblaku- okolju znan kot CS50 IDE. 291 00:14:11,890 --> 00:14:16,030 To je spletno programiranje okolje, ali celostni razvoj 292 00:14:16,030 --> 00:14:20,610 okolje, IDE, ki je zgrajen na vrhu nekaterih odprtokodna programska oprema se imenuje Cloud 9. 293 00:14:20,610 --> 00:14:22,966 In smo naredili nekaj pedagoško poenostavitve njo 294 00:14:22,966 --> 00:14:25,840 tako skriti določene funkcije v v prvih tednih, ki jih ne potrebujejo, 295 00:14:25,840 --> 00:14:27,770 po katerem lahko razkrivajo jih in ne najbolj 296 00:14:27,770 --> 00:14:29,400 kaj želite z okoljem. 297 00:14:29,400 --> 00:14:32,470 >> In to nam omogoča tudi, da vnaprej namestiti določeno programsko opremo. 298 00:14:32,470 --> 00:14:35,330 Stvari, kot so tako imenovani CS50 Knjižnica, ki ga bomo kmalu videli 299 00:14:35,330 --> 00:14:39,210 nam zagotavlja v C z nekaterimi dodatne funkcionalnosti. 300 00:14:39,210 --> 00:14:44,392 Torej, če greš v končno CS50.io, boste pozvani, da se prijavite, 301 00:14:44,392 --> 00:14:46,350 in ko boste to storili, in ustvariti račun za brezplačno, 302 00:14:46,350 --> 00:14:52,150 boste lahko za dostop do okolje, ki izgleda precej takole. 303 00:14:52,150 --> 00:14:53,760 >> Zdaj, to je v privzeti način. 304 00:14:53,760 --> 00:14:55,650 Vse je lepo in svetlo na zaslonu. 305 00:14:55,650 --> 00:14:57,941 Mnogi od nas imajo navado delajo na CS50 kos, ki je 306 00:14:57,941 --> 00:14:59,150 precej pozno v noč. 307 00:14:59,150 --> 00:15:02,400 In tako nekateri od vas morda raje da se spremeni v nočni način, tako rekoč. 308 00:15:02,400 --> 00:15:05,550 >> Ampak, navsezadnje, kaj ste videli v CS50 IDE 309 00:15:05,550 --> 00:15:08,340 je tri ločene areas-- območje na levi Kam 310 00:15:08,340 --> 00:15:12,604 vaše datoteke se bodo v oblak, območje v zgornjem desnem 311 00:15:12,604 --> 00:15:14,270 kjer kodo bo mogoče urejati. 312 00:15:14,270 --> 00:15:16,650 Boste mogli odpreti Posamezne kartice za kateri koli program 313 00:15:16,650 --> 00:15:19,670 da ste napisali ta semester znotraj te zgornjem desnem kotu. 314 00:15:19,670 --> 00:15:23,070 In potem najbolj arcanely, in še močno, 315 00:15:23,070 --> 00:15:26,610 se bo ta stvar Na Dno znan kot terminala okno. 316 00:15:26,610 --> 00:15:29,450 >> To je stara šola Line Interface ukaz, 317 00:15:29,450 --> 00:15:32,240 ali CLI, ki omogoča da se izvajanje ukazov 318 00:15:32,240 --> 00:15:35,260 o computer-- v tem primeru, računalnik v cloud-- 319 00:15:35,260 --> 00:15:39,090 za stvari kot sestaviti kodo iz izvorne kode za strojno kodo, 320 00:15:39,090 --> 00:15:43,600 teči svoje programe, ali pa, da začnete spletni strežnik, ali za dostop do baze podatkov, 321 00:15:43,600 --> 00:15:47,454 in poljubno število drugih tehnik da bomo začeli uporabljati kmalu. 322 00:15:47,454 --> 00:15:49,370 Ampak do tja, smo dogaja, da dejansko imajo 323 00:15:49,370 --> 00:15:51,240 da gredo na spletu in začnite igrati. 324 00:15:51,240 --> 00:15:54,399 In za to, kaj je prva začeti krpanje z glavno, 325 00:15:54,399 --> 00:15:55,940 in pisati glavni del programa. 326 00:15:55,940 --> 00:15:59,170 In kaj je uporabljati to funkcijo printf, ki smo jo uporabili prej, 327 00:15:59,170 --> 00:16:01,050 samo nekaj reči. 328 00:16:01,050 --> 00:16:04,910 >> Torej, tukaj sem že znotraj CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Sem prijavljeni vnaprej. 330 00:16:05,930 --> 00:16:07,360 In sem full pregledani okno. 331 00:16:07,360 --> 00:16:09,670 In tako na koncu, si Tudi v prihodnjih težav 332 00:16:09,670 --> 00:16:12,960 bodo sledile podobne korake, ki bo zagotovila spletne dokumentacije. 333 00:16:12,960 --> 00:16:16,360 Torej vam ni treba skrbeti za absorbira vsako malo tehnično korak 334 00:16:16,360 --> 00:16:17,730 da jaz danes tukaj. 335 00:16:17,730 --> 00:16:19,222 >> Pa boste dobili zaslon, kot je ta. 336 00:16:19,222 --> 00:16:20,430 Slučajno sem v nočni način. 337 00:16:20,430 --> 00:16:22,944 In lahko polepšajo vse up onemogočite nočni način. 338 00:16:22,944 --> 00:16:24,860 In na koncu izmed dan, boste videli 339 00:16:24,860 --> 00:16:30,090 ti trije glavni areas-- datoteke brskalnika na levi strani, oznake, zavihki do vrha, 340 00:16:30,090 --> 00:16:32,430 in terminal okno na dnu. 341 00:16:32,430 --> 00:16:34,890 >> Naj gredo naprej in pisati svoj prvi program. 342 00:16:34,890 --> 00:16:42,300 Bom preemptively pojdite na File, Shranite in shranim sliko kot hello.c. 343 00:16:42,300 --> 00:16:46,850 Dejansko, po dogovoru, vsak program smo pisanjem, ki je napisana v jeziku C 344 00:16:46,850 --> 00:16:49,739 morajo biti poimenovane nekaj dot c, po dogovoru. 345 00:16:49,739 --> 00:16:53,030 Torej bom to ime hello.c, ker Rad bi samo pozdravi svetu. 346 00:16:53,030 --> 00:16:54,820 Zdaj bom za povečavo ven in kliknite Shrani. 347 00:16:54,820 --> 00:16:58,180 In vse, kar sem zdaj tukaj je zanka v katerem lahko začnem pisati kodo. 348 00:16:58,180 --> 00:16:59,490 >> To ne bo zbrati. 349 00:16:59,490 --> 00:17:00,300 To ne pomeni nič. 350 00:17:00,300 --> 00:17:02,750 In tudi če sem pretvori to ničel in enic, 351 00:17:02,750 --> 00:17:05,390 CPU se dogaja, da imajo ne vem, kaj se dogaja okoli. 352 00:17:05,390 --> 00:17:14,170 Ampak, če pišem vrstice, ki se ujemajo z conventions-- počutje C C je, 353 00:17:14,170 --> 00:17:20,150 še enkrat, to language-- s sintakso, kot so to, printf zdravo world-- in sem 354 00:17:20,150 --> 00:17:22,210 gotten všeč tem časom. 355 00:17:22,210 --> 00:17:24,510 Torej, jaz ne mislim, da je morebitne tiskovne napake. 356 00:17:24,510 --> 00:17:27,910 >> Ampak, vedno je prva Ko boste to storili, boste. 357 00:17:27,910 --> 00:17:31,090 In kar sem na tem, da narediti zelo morda tudi ne dela za vas prvič. 358 00:17:31,090 --> 00:17:33,610 In to je popolnoma v redu, ker zdaj vas 359 00:17:33,610 --> 00:17:37,662 morda le videli cel kup novosti, čez čas, ko se navadim 360 00:17:37,662 --> 00:17:39,870 s tem okolju, in ta jezik, in drugi, 361 00:17:39,870 --> 00:17:42,370 boste začeli videti stvari, ki so bodisi pravilni ali nepravilni. 362 00:17:42,370 --> 00:17:44,369 >> In to je tisto, kar je poučevanje fantje in seveda 363 00:17:44,369 --> 00:17:48,780 pomočniki dobili tako dobri v daljšem časovnem obdobju, ki je madeži napake ali napake v kodi. 364 00:17:48,780 --> 00:17:52,110 Ampak trdim, da obstaja ni napake v tej kodi. 365 00:17:52,110 --> 00:17:53,990 Zato sem zdaj želite zagnati ta program. 366 00:17:53,990 --> 00:17:57,440 >> Zdaj pa na svojem Mac ali PC, da sem v navado ikon dvojnim klikom 367 00:17:57,440 --> 00:17:59,350 ko hočem zagnati nek program. 368 00:17:59,350 --> 00:18:01,080 Ampak to še ni model tukaj. 369 00:18:01,080 --> 00:18:04,570 V tem okolju, ki je CS50 IDE. 370 00:18:04,570 --> 00:18:07,192 Mi smo z uporabo delovati sistem, imenovan Linux. 371 00:18:07,192 --> 00:18:09,900 Linux spominja drugo operacijskega sistema, na splošno znani 372 00:18:09,900 --> 00:18:10,850 kot Unix. 373 00:18:10,850 --> 00:18:16,340 In je Linux še posebej znana imajo Command Line okolje, CLI. 374 00:18:16,340 --> 00:18:20,070 Zdaj smo z uporabo specifičnega okus Linuxa imenovano Ubuntu. 375 00:18:20,070 --> 00:18:22,770 In Ubuntu je preprosto nekatere različice Linux. 376 00:18:22,770 --> 00:18:27,900 >> Toda ti Linux je v teh dneh, dejansko prihajajo z grafičnimi vmesniki. 377 00:18:27,900 --> 00:18:30,360 In ena se zgodi, da uporabljali tukaj je spletna. 378 00:18:30,360 --> 00:18:32,735 Torej, to lahko videti celo malo drugačna od nečesa 379 00:18:32,735 --> 00:18:35,310 sami morda videli ali vodijo v preteklosti. 380 00:18:35,310 --> 00:18:37,910 >> Tako da sem šel naprej zdaj in naredite naslednje. 381 00:18:37,910 --> 00:18:40,950 Sem shranil to datoteko kot hello.c. 382 00:18:40,950 --> 00:18:47,350 Bom, da gredo naprej in Tip clanghello.c Torej Jek 383 00:18:47,350 --> 00:18:49,850 za jezik C je prevajalnik. 384 00:18:49,850 --> 00:18:51,952 To je vnaprej nameščen v CS50 IDE. 385 00:18:51,952 --> 00:18:54,910 In lahko popolnoma prenesete in namestiti to na svoj Mac ali PC. 386 00:18:54,910 --> 00:18:57,910 >> Ampak, še enkrat, ti ne bi imeli vsi pre-konfiguracijo naredil za vas. 387 00:18:57,910 --> 00:19:00,940 Za zdaj sem samo tekoč teči clanghello.c. 388 00:19:00,940 --> 00:19:03,240 In zdaj opazil to sintakso Tukaj bo sčasoma 389 00:19:03,240 --> 00:19:06,930 zavedati, pomeni le, da sem v mapo ali imenik imenuje Workspace. 390 00:19:06,930 --> 00:19:11,030 Ta znak za dolar je le konvencija smisla, vnesite vaše ukaze tukaj. 391 00:19:11,030 --> 00:19:14,560 >> To je tisto, kar se imenuje hitro, samo po dogovoru je znak za dolar. 392 00:19:14,560 --> 00:19:19,130 In če grem naprej zdaj in kliknite Vnesite, nič ne kaže, da se je zgodilo. 393 00:19:19,130 --> 00:19:20,930 Ampak to je pravzaprav dobra stvar. 394 00:19:20,930 --> 00:19:23,650 Manj se to zgodi na zaslon, bolj verjetno 395 00:19:23,650 --> 00:19:26,710 koda je pravilna, vsaj skladenjsko. 396 00:19:26,710 --> 00:19:29,120 >> Torej, če želim teči to Program, kaj naj storim? 397 00:19:29,120 --> 00:19:33,770 No, se izkaže, da je Privzeto ime po dogovoru 398 00:19:33,770 --> 00:19:38,854 za programe, če ne določite ime za vaš program je samo a.out. 399 00:19:38,854 --> 00:19:41,270 In ta sintaksa preveč, boste spoznati kmalu. 400 00:19:41,270 --> 00:19:47,500 >> Dot poševnica samo pomeni, hej, CS50 IDE, zaženite program, imenovan a.out 401 00:19:47,500 --> 00:19:49,400 da je v moji trenutni imenik. 402 00:19:49,400 --> 00:19:51,520 Ta pika pomeni trenutni imenik. 403 00:19:51,520 --> 00:19:55,040 In bomo videli, kaj drugih takih zaporedij znakov pomeni kmalu. 404 00:19:55,040 --> 00:19:58,430 >> Torej, gremo, Enter, zdravo svet. 405 00:19:58,430 --> 00:20:00,080 In boste opazili, da to, kar se je zgodilo? 406 00:20:00,080 --> 00:20:01,580 Ne le, da je tiskanje Hello World. 407 00:20:01,580 --> 00:20:05,990 Prav tako preselil It kazalko v naslednjo vrstico. 408 00:20:05,990 --> 00:20:07,160 >> In zakaj je bilo to? 409 00:20:07,160 --> 00:20:12,400 Kaj je koda, ki smo pisali pred da je zagotovljeno, da je kazalec bi 410 00:20:12,400 --> 00:20:14,882 gredo na naslednjo vrstico? 411 00:20:14,882 --> 00:20:16,840 Hecno približno računalnik pa je samo še 412 00:20:16,840 --> 00:20:18,570 storiti dobesedno tisto, kar je povedal, da storiti. 413 00:20:18,570 --> 00:20:26,050 >> Torej, če je povedal, da printf zdravo, vejica, prostor, svet, blizu citat, 414 00:20:26,050 --> 00:20:29,090 to je dobesedno samo še tiskanje teh znakov. 415 00:20:29,090 --> 00:20:31,980 Ampak sem imel poseben znak na koncu, odpoklic, poševnica nazaj n. 416 00:20:31,980 --> 00:20:34,230 In to je tisto, kar zagotovi da znak šla 417 00:20:34,230 --> 00:20:36,570 na naslednji vrstici zaslona. 418 00:20:36,570 --> 00:20:38,097 >> Dejstvo je, da mi gre in to. 419 00:20:38,097 --> 00:20:39,430 Naj gredo naprej in izbrisati. 420 00:20:39,430 --> 00:20:41,180 Zdaj, opazili, da vrh mojega zaslona obstaja 421 00:20:41,180 --> 00:20:42,890 malo rdeča luč v zavihek kaže, 422 00:20:42,890 --> 00:20:45,047 hej, ste ne shranijo datoteke. 423 00:20:45,047 --> 00:20:47,880 Tako da sem šel naprej z nadzorom S ali ukaz S, shranite datoteko. 424 00:20:47,880 --> 00:20:51,130 Zdaj goes-- je šlo za moment-- zeleno. 425 00:20:51,130 --> 00:20:53,760 In zdaj je nazaj le da blizu ikona. 426 00:20:53,760 --> 00:21:01,860 >> Če bi zdaj spet teči clanghello.c, Enter, pika slash, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 boste videli, da je še vedno delal. 428 00:21:04,110 --> 00:21:06,020 Ampak to je verjetno malo buggy. 429 00:21:06,020 --> 00:21:08,714 Zdaj, moj prompt-- delovni prostor, in potem to znak za dolar, 430 00:21:08,714 --> 00:21:10,880 in potem moj dejanski prompt-- je vse na isti liniji. 431 00:21:10,880 --> 00:21:14,540 Torej, to zagotovo estetsko napako, čeprav to ni ravno logično napako. 432 00:21:14,540 --> 00:21:16,250 >> Torej bom razveljaviti, kar sem storil. 433 00:21:16,250 --> 00:21:18,560 Bom ponovila a.out. 434 00:21:18,560 --> 00:21:22,710 Obvestilo sem doda Znak za novo vrstico nazaj. 435 00:21:22,710 --> 00:21:24,280 Sem shranili datoteko. 436 00:21:24,280 --> 00:21:31,630 >> Torej bom a.out ponovi, in-- prekleto, napako, napako pomeni napako. 437 00:21:31,630 --> 00:21:35,020 Torej napaka je, da čeprav dodal sem poševnico n tam, 438 00:21:35,020 --> 00:21:41,180 ponovno shraniti, ponovno tekel program, obnašanje je bilo enako. 439 00:21:41,180 --> 00:21:42,640 Zakaj bi to bilo? 440 00:21:42,640 --> 00:21:43,910 >> Mi manjka korak, kajne? 441 00:21:43,910 --> 00:21:47,620 To je ključni korak prej, je bila, da imate to-- ko spremenite izvorno kodo, 442 00:21:47,620 --> 00:21:49,610 Izkazalo se tudi prost je skozi prevajalnik 443 00:21:49,610 --> 00:21:51,102 še enkrat, tako da boste dobili novo strojno kodo. 444 00:21:51,102 --> 00:21:52,810 In strojni kodi, ničle in tisti, 445 00:21:52,810 --> 00:21:56,260 se bo skoraj identična, vendar ni povsem tako, saj se moramo, 446 00:21:56,260 --> 00:21:57,510 Seveda, da je nova proga. 447 00:21:57,510 --> 00:22:02,640 >> Torej, da popraviti to, bom potreboval za ponovno clanghello.c, vstop, pika 448 00:22:02,640 --> 00:22:03,800 poševnica a.out. 449 00:22:03,800 --> 00:22:08,402 In zdaj, zdravo svet se je vrnil , kjer sem pričakoval, da bo. 450 00:22:08,402 --> 00:22:09,610 Torej, to je vse lepo in prav. 451 00:22:09,610 --> 00:22:13,150 Toda a.out je precej neumno ime za Program, čeprav se zgodi, da bo, 452 00:22:13,150 --> 00:22:16,530 zaradi zgodovinskih razlogov default-- pomeni sestavljanje izhode. 453 00:22:16,530 --> 00:22:20,780 >> Ampak naj gredo naprej tukaj in to naredili drugače. 454 00:22:20,780 --> 00:22:24,760 Hočem Pozdravljen, svet dejansko se imenuje zdravo. 455 00:22:24,760 --> 00:22:28,320 Torej, če bi bila ikona na mojem namizje, ne bi bilo a.out. 456 00:22:28,320 --> 00:22:29,730 To bi lahko imenovali zdravo. 457 00:22:29,730 --> 00:22:33,660 >> Tako, da to stori, se izkaže da Jek, kot mnogi programi, 458 00:22:33,660 --> 00:22:37,980 podpira argumente ukazne vrstice, ali zastave ali stikala, 459 00:22:37,980 --> 00:22:39,600 ki preprosto vpliva na njegovo obnašanje. 460 00:22:39,600 --> 00:22:45,160 Natančneje, Jek podpira dash O zastave, ki nato prevzame drugo besedo. 461 00:22:45,160 --> 00:22:48,190 V tem primeru bom samovoljno, vendar je smiselno, da pokličete zdravo. 462 00:22:48,190 --> 00:22:50,710 Vendar sem lahko rečejo karkoli Hočem, razen a.out, ki 463 00:22:50,710 --> 00:22:52,390 bi raje poleg točke. 464 00:22:52,390 --> 00:22:55,640 >> In potem samo navesti ime datoteke mi želijo zbrati. 465 00:22:55,640 --> 00:22:59,190 Zdaj, čeprav na začetku ukaza Še vedno imajo Jek, 466 00:22:59,190 --> 00:23:01,410 Na koncu ukaza Še vedno imam ime datoteke, 467 00:23:01,410 --> 00:23:05,520 Zdaj so te ukazno vrstico argumenti, te oznake, ki pravijo, 468 00:23:05,520 --> 00:23:11,180 oh, mimogrede, izhod-o, datoteka imenovano zdravo, ni privzeta a.out. 469 00:23:11,180 --> 00:23:13,810 >> Torej, če sem udaril Enter zdaj, nič Zdi se, da se je zgodilo. 470 00:23:13,810 --> 00:23:17,900 In še zdaj ne morem storiti dot poševnica zdravo. 471 00:23:17,900 --> 00:23:19,089 Torej, to je isti program. 472 00:23:19,089 --> 00:23:21,380 Ničle in med njimi so identična ob koncu dneva. 473 00:23:21,380 --> 00:23:24,210 >> Ampak oni so v dveh drugačna files-- a.out, 474 00:23:24,210 --> 00:23:26,490 kar je prva različica in samo neumno imenom, 475 00:23:26,490 --> 00:23:30,250 in zdaj zdravo, ki je veliko bolj prepričljiv ime za program. 476 00:23:30,250 --> 00:23:33,195 Ampak, iskreno, sem nikoli bo to še enkrat spomnim, 477 00:23:33,195 --> 00:23:34,070 in spet in spet. 478 00:23:34,070 --> 00:23:36,411 In, pravzaprav, kot smo napisali bolj zapletene programe, 479 00:23:36,411 --> 00:23:38,160 ukazi, s katerimi boste bodo morali napisati 480 00:23:38,160 --> 00:23:40,920 bodo dobili še bolj zapleteno vedno. 481 00:23:40,920 --> 00:23:41,940 >> In zato ni treba skrbeti. 482 00:23:41,940 --> 00:23:46,220 Izkazalo se je, da ljudje pred nam so ugotovili, da preveč 483 00:23:46,220 --> 00:23:47,530 imel ta popolnoma enak problem. 484 00:23:47,530 --> 00:23:50,900 Tudi oni niso imeli da bi tip precej dolge, Skrivnosten ukazov, 485 00:23:50,900 --> 00:23:52,200 kaj šele, da se jih spomnimo. 486 00:23:52,200 --> 00:23:56,070 In tako so se ljudje pred nami je druge programe, da bi bilo lažje 487 00:23:56,070 --> 00:23:57,670 sestaviti svojo programsko opremo. 488 00:23:57,670 --> 00:24:01,609 >> In seveda ena takšna Program se imenuje Znamka. 489 00:24:01,609 --> 00:24:03,150 Tako da sem šel naprej in to. 490 00:24:03,150 --> 00:24:05,691 Bom razveljaviti vse, kar sem Samo niti na naslednji način. 491 00:24:05,691 --> 00:24:07,690 Naj tip LS. 492 00:24:07,690 --> 00:24:10,980 In boste opazili tri things-- a.out in zvezda, zdravo 493 00:24:10,980 --> 00:24:12,810 in zvezda, in hello.c. 494 00:24:12,810 --> 00:24:14,730 Upajmo, to naj se malo intuitivno, 495 00:24:14,730 --> 00:24:18,220 če že ni bilo nič v tem delovnem prostoru. 496 00:24:18,220 --> 00:24:21,240 Nič ni bilo, da sem imel ustvarjen, dokler ne bomo začeli razred. 497 00:24:21,240 --> 00:24:22,840 >> In sem ustvaril hello.c. 498 00:24:22,840 --> 00:24:24,544 Nato sem ga sestavila, in ga poimenoval a.out. 499 00:24:24,544 --> 00:24:27,460 In potem sem še enkrat zbrati nekoliko drugače in ga poimenoval zdravo. 500 00:24:27,460 --> 00:24:32,830 Torej imam tri datoteke v tem imeniku, V tej mapi Workspace. 501 00:24:32,830 --> 00:24:35,005 Zdaj pa vidim, da je tudi če sem pomanjšavo pravzaprav. 502 00:24:35,005 --> 00:24:37,530 >> Če bi pomanjšati tu in poglej to zgornjem desnem 503 00:24:37,530 --> 00:24:39,940 kotiček, kot je bilo obljubljeno levo na desni strani zaslona 504 00:24:39,940 --> 00:24:42,990 se vedno dogaja, da ti pokažem kaj je v računu, kar je 505 00:24:42,990 --> 00:24:44,790 notranjost CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 In tam je tri datoteke tam. 507 00:24:46,680 --> 00:24:49,070 >> Torej, želim, da se znebite a.out in zdravo. 508 00:24:49,070 --> 00:24:51,275 In kot ste morda zamisliti intuitivno, vas 509 00:24:51,275 --> 00:24:53,400 lahko razvrstimo kontrolnega klik ali desni klik na to. 510 00:24:53,400 --> 00:24:54,590 In ta mali meni izskoči. 511 00:24:54,590 --> 00:24:57,170 Lahko prenesete datoteko, zaženite je, predogled, osvežitev, preimenovati, 512 00:24:57,170 --> 00:24:57,700 ali kaj ne. 513 00:24:57,700 --> 00:25:00,260 >> In lahko sem samo izbrisati, in bi šel proč. 514 00:25:00,260 --> 00:25:05,260 Ampak kaj je stvari z ukazom linija za zdaj, tako da se udobno 515 00:25:05,260 --> 00:25:07,010 s tem, in naredite naslednje. 516 00:25:07,010 --> 00:25:12,345 Bom, da gredo naprej in odstranite a.out z vnosom dobesedno rma.out. 517 00:25:12,345 --> 00:25:14,890 Izkazalo se je, ukaz za odstranitev ali izbris nekaj, 518 00:25:14,890 --> 00:25:16,280 ni odstraniti ali izbrisati. 519 00:25:16,280 --> 00:25:21,260 >> To je bolj na kratko RM, samo, da shranite si nekaj tipkanja, in pritisnite tipko Enter. 520 00:25:21,260 --> 00:25:24,707 Zdaj bomo nekoliko cryptically odstraniti redno datoteke a.out. 521 00:25:24,707 --> 00:25:27,040 Res ne vem, kakšna nepravilna datoteka bo še. 522 00:25:27,040 --> 00:25:28,660 Ampak jaz ne želim, da ga odstranite. 523 00:25:28,660 --> 00:25:30,150 >> Torej bom y tipa za yes. 524 00:25:30,150 --> 00:25:31,940 Ali sem lahko tip ven, in pritisnite tipko Enter. 525 00:25:31,940 --> 00:25:33,440 In še enkrat, nič ne zgodi. 526 00:25:33,440 --> 00:25:35,840 Ampak to je na splošno dobra stvar. 527 00:25:35,840 --> 00:25:40,490 >> Če bi ta čas tip LS, kaj naj vidim? 528 00:25:40,490 --> 00:25:44,930 Upajmo, samo zdravo in hello.c. 529 00:25:44,930 --> 00:25:47,286 Zdaj, kot stran, boste Opazili to zvezdo, zvezdico, 530 00:25:47,286 --> 00:25:48,660 da je na koncu svojih programov. 531 00:25:48,660 --> 00:25:50,201 In oni so prav tako prikazuje v zeleno. 532 00:25:50,201 --> 00:25:53,970 To je samo način CS50 IDE za vas cluing v dejstvu, 533 00:25:53,970 --> 00:25:55,280 da to ni izvorno kodo. 534 00:25:55,280 --> 00:25:58,880 To je izvedljivo, A loven program, ki lahko dejansko vodijo 535 00:25:58,880 --> 00:26:01,020 s tem dot poševnica, in potem je ime. 536 00:26:01,020 --> 00:26:05,860 >> Zdaj pa grem naprej in odstranite to, rm zdravo, Enter, odstranite redni 537 00:26:05,860 --> 00:26:08,010 datoteko zdravo, ja. 538 00:26:08,010 --> 00:26:11,180 In zdaj, če sem tip LS, smo nazaj na hello.c. 539 00:26:11,180 --> 00:26:13,917 Poskusi, da ne izbrisati svoj dejanska izvorna koda. 540 00:26:13,917 --> 00:26:16,250 Čeprav obstajajo funkcije vgrajen v CS50 IDE kjer 541 00:26:16,250 --> 00:26:19,870 lahko greš skozi zgodovino revizije in nazaj v času, če vas slučajno 542 00:26:19,870 --> 00:26:23,660 kaj izbrisati, ali se zaveda kot na te pozive DA ali NE, 543 00:26:23,660 --> 00:26:25,381 o tem, kaj si dejansko želijo narediti. 544 00:26:25,381 --> 00:26:27,380 In če grem na vrh levem kotu tukaj, 545 00:26:27,380 --> 00:26:30,696 vse, kar ostane, je hello.c. 546 00:26:30,696 --> 00:26:32,570 Torej je grozde drugi ukazi, ki jih 547 00:26:32,570 --> 00:26:37,550 lahko izvaja v svetu Linuxa, ena, ki je, spet narediti. 548 00:26:37,550 --> 00:26:40,180 In bomo narediti Moj program je sedaj, kot sledi. 549 00:26:40,180 --> 00:26:43,270 >> Namesto početje Jek, namesto da bi Jek-o, 550 00:26:43,270 --> 00:26:45,860 Bom preprosto dobesedno tip, da zdravo. 551 00:26:45,860 --> 00:26:49,630 In sedaj opazili, sem ne tipkate da hello.c. 552 00:26:49,630 --> 00:26:50,910 Jaz sem tipkanje, da zdravo. 553 00:26:50,910 --> 00:26:54,840 >> In ta program Poskrbite, da prihaja z CS50 IDE, in še več 554 00:26:54,840 --> 00:26:57,090 na splošno z Linuxom, je program, ki je 555 00:26:57,090 --> 00:26:59,120 dogaja, da program, imenovan Pozdravljeni. 556 00:26:59,120 --> 00:27:03,680 In to se dogaja, da prevzame po dogovoru da če se lahko na ta program, 557 00:27:03,680 --> 00:27:09,030 to bo treba iz vira koda datoteka konča v dot c, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Torej, če sem udaril Enter zdaj, sporoča, da ukaz, da dobi izvrši 559 00:27:12,210 --> 00:27:14,340 je pravzaprav še dlje Prej kot prej. 560 00:27:14,340 --> 00:27:16,670 In to zato, ker smo jih prednastavljena CS50 IDE, da imajo 561 00:27:16,670 --> 00:27:19,878 nekatere dodatne funkcije, zgrajena po tem, da ne potrebujemo samo še, ampak kmalu bo. 562 00:27:19,878 --> 00:27:23,470 Vendar pa je ključna stvar za uresničitev Zdaj imam program Hello. 563 00:27:23,470 --> 00:27:27,080 >> Če bi še enkrat tipa LS, I Na programu je zdravo. 564 00:27:27,080 --> 00:27:32,070 In sem lahko teči z dot poševnica a.out, ne, 565 00:27:32,070 --> 00:27:35,590 ker celotno točko tega Vaja je bila pika poševnica zdravo. 566 00:27:35,590 --> 00:27:38,089 In zdaj imam Pozdravljen, svet. 567 00:27:38,089 --> 00:27:39,880 Tako napreduje, smo skoraj vedno samo 568 00:27:39,880 --> 00:27:42,088 dogaja, da pripravijo svoje programe uporabi ukaz make. 569 00:27:42,088 --> 00:27:45,300 In potem bomo jih vodijo dot poševnica in ime programa. 570 00:27:45,300 --> 00:27:49,610 Ampak se zavedaš, kaj Poskrbite počne za vi, je, da je sam ni prevajalnik. 571 00:27:49,610 --> 00:27:53,310 To je samo program, priročno da ve, kako sprožiti prevajalnik 572 00:27:53,310 --> 00:27:56,470 teči, tako da lahko sami uporabljati. 573 00:27:56,470 --> 00:28:00,220 >> Kaj obstajajo drugi ukazi v Linux, in v zameno CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Kmalu bomo videli, da je Ukaz CD, Change Directory. 575 00:28:03,107 --> 00:28:05,190 To vam omogoča, v Vaše vmesnik z ukazno vrstico 576 00:28:05,190 --> 00:28:07,610 , da se premaknete naprej in nazaj, in odprla različne mape 577 00:28:07,610 --> 00:28:08,860 ne da bi z miško. 578 00:28:08,860 --> 00:28:12,470 >> LS smo jih videli, ki stoji na seznam datoteke v trenutnem imeniku. 579 00:28:12,470 --> 00:28:14,650 Naj Dir, lahko verjetno začeli sklepati 580 00:28:14,650 --> 00:28:18,150 kaj to pomeni now-- da imenik, Če želite ustvariti mapo. 581 00:28:18,150 --> 00:28:21,270 RM za nedosegljive, RM Dir za odstranite directory-- in ti, 582 00:28:21,270 --> 00:28:24,160 spet so v ukazni vrstici ekvivalenti kaj vas 583 00:28:24,160 --> 00:28:26,945 mogoče storiti v CS50 IDE z miško. 584 00:28:26,945 --> 00:28:28,820 Vendar boste kmalu našli da je včasih prav 585 00:28:28,820 --> 00:28:30,610 veliko hitreje storiti stvari s tipkovnico, 586 00:28:30,610 --> 00:28:33,690 in na koncu veliko močnejši. 587 00:28:33,690 --> 00:28:36,440 >> Ampak to je težko trditi, da kaj smo počeli doslej 588 00:28:36,440 --> 00:28:39,990 je vse, kar močna, ko so vse smo že rekli, je, zdravo svet. 589 00:28:39,990 --> 00:28:43,740 In v resnici, sem hardcoded besede Zdravo svet v mojem programu. 590 00:28:43,740 --> 00:28:45,530 Zaenkrat še ni dinamičnost. 591 00:28:45,530 --> 00:28:49,320 Scratch je red velikosti bolj zanimivo prejšnji teden. 592 00:28:49,320 --> 00:28:51,220 >> In tako da je tja. 593 00:28:51,220 --> 00:28:55,310 Oglejmo korak v smeri, ki jo Tako nekaterih od teh funkcij. 594 00:28:55,310 --> 00:28:59,470 Torej ne samo, C prihajajo z printf, in grozde drugih funkcij 595 00:28:59,470 --> 00:29:01,850 nekateri od njih bomo videli sčasoma pa ne 596 00:29:01,850 --> 00:29:05,760 bi bilo vse tako enostavno ven skozi vrata v pridobivanje uporabnik vložek. 597 00:29:05,760 --> 00:29:08,140 >> Dejansko je eden od slabosti jezikov, kot so C, 598 00:29:08,140 --> 00:29:10,140 in celo Java in še drugi je, da ne 599 00:29:10,140 --> 00:29:15,860 bi bilo enostavno samo dobil stvari, kot so cela števila od uporabnikov, ali strune, besed, 600 00:29:15,860 --> 00:29:19,970 in stavkov, kaj šele stvari, kot so plavajočo vejico ali realna števila 601 00:29:19,970 --> 00:29:23,240 s pikami, in res dolge številke, kot bomo kmalu videli. 602 00:29:23,240 --> 00:29:27,000 Torej ta seznam funkcij tukaj, ti tako kot drugi Scratch koščke 603 00:29:27,000 --> 00:29:31,090 da smo vnaprej nameščen v CS50 IDE, da bomo uporabili za nekaj tednov 604 00:29:31,090 --> 00:29:34,010 kot usposabljanje kolesa vrst, in jih na koncu vzlet, in poglejte 605 00:29:34,010 --> 00:29:37,210 Pod pokrovom, morda, na kako se te stvari izvajajo. 606 00:29:37,210 --> 00:29:40,460 >> Ampak za to, kaj je dejansko napisati program. 607 00:29:40,460 --> 00:29:41,770 Naj gredo naprej zdaj. 608 00:29:41,770 --> 00:29:44,750 In bom ustvariti novo datoteko s klikom na to malo plus, 609 00:29:44,750 --> 00:29:45,970 in kliknete nove datoteke. 610 00:29:45,970 --> 00:29:49,250 >> Bom rešil to naslednji en kot, recimo, string.c, 611 00:29:49,250 --> 00:29:50,750 ker sem rad igral z vrvicami. 612 00:29:50,750 --> 00:29:53,990 In niz v C je prav zaporedje znakov. 613 00:29:53,990 --> 00:29:56,090 Torej, zdaj gremo naprej in naredite naslednje. 614 00:29:56,090 --> 00:30:01,204 >> Vključujejo standardno IO.h-- in Izkazalo se standardni IO, 615 00:30:01,204 --> 00:30:03,360 IO pomeni le vhod in izhod. 616 00:30:03,360 --> 00:30:05,920 Tako se izkaže, da Ta vrstica je tu kaj 617 00:30:05,920 --> 00:30:08,140 se nam sosednji uporabiti printf. 618 00:30:08,140 --> 00:30:10,410 Printf, seveda, proizvaja izhod. 619 00:30:10,410 --> 00:30:15,000 Tako da se lahko uporabi printf, se izkaže ven moraš imeti to vrstico kode 620 00:30:15,000 --> 00:30:16,040 na vrhu datoteke. 621 00:30:16,040 --> 00:30:18,456 >> In bomo prišli nazaj na to, kar ki v resnici pomeni kmalu. 622 00:30:18,456 --> 00:30:20,400 Izkazalo se je, da je v vsak program C pišem, 623 00:30:20,400 --> 00:30:23,640 Moram se začne z kodo, ki izgleda takole. 624 00:30:23,640 --> 00:30:26,860 In boste opazili CS50 IDE, in drugi celostni razvoj 625 00:30:26,860 --> 00:30:30,050 okolja, kot je to, bodo poskušali po svojih najboljših močeh 626 00:30:30,050 --> 00:30:31,780 lahko, da konča svoje misli. 627 00:30:31,780 --> 00:30:35,930 Dejstvo je, malo prej, če bi razveljavili kaj sem naredil, sem zadeti nastopiti. 628 00:30:35,930 --> 00:30:39,160 >> potem sem udaril odprto Curly brace, udaril znova Enter. 629 00:30:39,160 --> 00:30:40,430 In končal misel. 630 00:30:40,430 --> 00:30:45,140 To mi je dal novo linijo, zamaknjeni nič manj za lepe slogovnih razlogov, bomo videli. 631 00:30:45,140 --> 00:30:48,559 In nato samodejno mi je dal da zavit oklepaj, da končam misel. 632 00:30:48,559 --> 00:30:50,600 Zdaj, to ni vedno ugibati, kaj želite storiti. 633 00:30:50,600 --> 00:30:53,620 Ampak v veliki meri, da naredi vam prihranimo nekaj tipkanja. 634 00:30:53,620 --> 00:30:59,560 Torej, pred nekaj trenutki smo izvedli to program-- zdravo, svet, nato pa ga zbirajo, 635 00:30:59,560 --> 00:31:00,460 in nato tekel. 636 00:31:00,460 --> 00:31:01,867 Vendar ni dinamičnost tukaj. 637 00:31:01,867 --> 00:31:03,700 Kaj pa, če smo želeli narediti nekaj drugačnega? 638 00:31:03,700 --> 00:31:07,630 No, kaj pa če sem hotel, da dejansko dobili niz s strani uporabnika? 639 00:31:07,630 --> 00:31:11,250 Bom uporabiti kos sestavljanke imenuje točno that-- dobili niz. 640 00:31:11,250 --> 00:31:15,860 >> Izkazalo se je, v C, če ne želite, da se zagotovi prispevek k puzzle kos, 641 00:31:15,860 --> 00:31:19,360 ali natančneje do funkcije, ki jih dobesedno pač oklepaj, 642 00:31:19,360 --> 00:31:20,430 blizu oklepaj. 643 00:31:20,430 --> 00:31:25,540 Tako je, kot da obstaja no belo polje na vrsto v. 644 00:31:25,540 --> 00:31:27,720 Say blok pred imel malo belo škatlo. 645 00:31:27,720 --> 00:31:29,660 Nimamo to belo polje zdaj. 646 00:31:29,660 --> 00:31:33,310 >> Toda, ko sem poklical get niz, sem želijo dati rezultat nekje. 647 00:31:33,310 --> 00:31:37,680 Tako zelo pogosta paradigma v C je klic funkcije, kot so get niz tukaj, 648 00:31:37,680 --> 00:31:41,070 in nato shranite njegovo vrnitev vrednosti. 649 00:31:41,070 --> 00:31:44,450 To je posledica njene napora v nekaj. 650 00:31:44,450 --> 00:31:47,630 >> In kaj je gradnjo v programiranju, 651 00:31:47,630 --> 00:31:53,450 bodisi v Scratch ali zdaj C, da smo lahko uporabite za dejansko shranjevanje kaj? 652 00:31:53,450 --> 00:31:55,990 Pozval, da spremenljivka, kajne? 653 00:31:55,990 --> 00:32:00,320 In v nič, ne bomo res vseeno, kaj se dogaja v spremenljivke. 654 00:32:00,320 --> 00:32:02,170 >> Toda v tem primeru, smo dejansko storili. 655 00:32:02,170 --> 00:32:03,719 Bom povedal niz. 656 00:32:03,719 --> 00:32:05,510 In potem sem lahko pokličete to kaj hočem. 657 00:32:05,510 --> 00:32:08,340 Bom, da ga pokličete ime, dobi dobili niz. 658 00:32:08,340 --> 00:32:10,250 >> In zdaj tudi če ste malo nov to, 659 00:32:10,250 --> 00:32:11,984 opazili, da sem manjka nekaj podrobnosti. 660 00:32:11,984 --> 00:32:13,150 Jaz pozabljam podpičjem. 661 00:32:13,150 --> 00:32:14,400 Moram končati to misel. 662 00:32:14,400 --> 00:32:17,480 Torej bom premakniti svoj kazalec, in udaril podpičjem tam. 663 00:32:17,480 --> 00:32:19,130 In kaj sem naredil? 664 00:32:19,130 --> 00:32:21,440 V tej vrstici kode, Številka 5 v trenutku, 665 00:32:21,440 --> 00:32:23,799 Kličem get niz z brez vložkov. 666 00:32:23,799 --> 00:32:26,090 Torej ni malo belo polje, kot je Shrani blok. 667 00:32:26,090 --> 00:32:28,590 >> Pravim samo, hej, računalnik, daj mi niz. 668 00:32:28,590 --> 00:32:31,390 Enačaj ni res enako znamenje, per se. 669 00:32:31,390 --> 00:32:33,790 To je naloga subjekt, kar pomeni, 670 00:32:33,790 --> 00:32:37,860 hej, računalnik, premaknite vrednost desne čez levo. 671 00:32:37,860 --> 00:32:40,480 In v levo, sem naslednje. 672 00:32:40,480 --> 00:32:43,580 >> Hej, računalnik, daj mi string-- zaporedje znakov. 673 00:32:43,580 --> 00:32:45,637 In praviš niza ime. 674 00:32:45,637 --> 00:32:47,220 In nimam niti, da ga pokličete Ime. 675 00:32:47,220 --> 00:32:49,970 >> Lahko bi ga poklical, konvencionalno, nekaj podobnega S, 676 00:32:49,970 --> 00:32:52,900 podobno kot smo včasih sem imenujemo spremenljivka i. 677 00:32:52,900 --> 00:32:54,829 Toda zdaj moram nekaj storiti z njim. 678 00:32:54,829 --> 00:32:57,370 To bi bilo precej neumno poskusite zbiranje to kodo, ki teče 679 00:32:57,370 --> 00:32:59,410 ta program, čeprav Dobivam niz, 680 00:32:59,410 --> 00:33:01,580 ker je to še vedno samo reči zdravo svet. 681 00:33:01,580 --> 00:33:06,140 >> Toda kaj, če ne želim, da se to spremeni. 682 00:33:06,140 --> 00:33:07,940 Zakaj ne bi to storim? 683 00:33:07,940 --> 00:33:11,632 Odstotek je, vejica s. 684 00:33:11,632 --> 00:33:13,090 In to je še vedno nekoliko skrivnosten. 685 00:33:13,090 --> 00:33:15,560 >> Torej, dovolite mi, da moje spremenljivke bolj jasno. 686 00:33:15,560 --> 00:33:17,510 Naj naštejemo to ime spremenljivke. 687 00:33:17,510 --> 00:33:20,230 In da vidimo, če ne moremo draži narazen, kaj se dogaja. 688 00:33:20,230 --> 00:33:22,770 >> Torej, na pete, sem dobili niz. 689 00:33:22,770 --> 00:33:25,620 In sem shranjevanje ta niz, kar je uporabnik vtipka 690 00:33:25,620 --> 00:33:28,430 na svoji tipkovnici, v spremenljivko z imenom ime. 691 00:33:28,430 --> 00:33:30,590 In se izkaže, da printf ne samo 692 00:33:30,590 --> 00:33:34,220 da en argument v double citati, en vhod v dvojnih narekovajih. 693 00:33:34,220 --> 00:33:39,100 >> To lahko traja dva ali tri, ali več, kot da je drugi ali tretji ali četrti, 694 00:33:39,100 --> 00:33:42,320 so vsa imena spremenljivk, ali posebej vrednosti, 695 00:33:42,320 --> 00:33:48,610 ki jo želite priključiti na, dinamično, da je niz v narekovajih. 696 00:33:48,610 --> 00:33:52,110 Z drugimi besedami, kaj bi bilo narobe s tem? 697 00:33:52,110 --> 00:33:57,920 Če sem rekel zdravo ime, poševnica nazaj n, rešil datoteke, zbrati svojo kodo, 698 00:33:57,920 --> 00:34:01,660 in tekel to, kaj bi se zgodilo? 699 00:34:01,660 --> 00:34:05,139 >> To je samo reči, zdravo ime, dobesedno N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 ki je nekako neumno, saj ni nič drugačen od sveta. 701 00:34:07,900 --> 00:34:10,400 Torej, kaj v narekovajih je kar dobesedno dobi natisnjeno. 702 00:34:10,400 --> 00:34:12,520 Torej, če želim imeti ogrado tam, 703 00:34:12,520 --> 00:34:14,422 Pravzaprav je treba uporabiti nekaj posebnega sintakso. 704 00:34:14,422 --> 00:34:17,380 In se izkaže, če ste prebrali Dokumentacija za funkcijo printf, 705 00:34:17,380 --> 00:34:21,320 to vam bo povedal, da je če uporabljate odstotkov s, 706 00:34:21,320 --> 00:34:23,920 lahko nadomestite vrednost, kot sledi. 707 00:34:23,920 --> 00:34:27,190 >> Po vejico po tem dvojni narekovaj, preprosto 708 00:34:27,190 --> 00:34:29,179 napisati ime spremenljivka, ki jo želite 709 00:34:29,179 --> 00:34:33,790 priključite v tej obliki koda, ali format določilo, 710 00:34:33,790 --> 00:34:35,469 odstotkov je za godala. 711 00:34:35,469 --> 00:34:39,190 In zdaj, če sem rešil datoteke, Grem nazaj na moj terminal. 712 00:34:39,190 --> 00:34:42,870 In sem tip Naj String, ker, še enkrat, ime tega 713 00:34:42,870 --> 00:34:45,510 datoteka, ki sem se odločil pred string.c. 714 00:34:45,510 --> 00:34:48,510 >> Tako bom rekel, narediti String, vnesite. 715 00:34:48,510 --> 00:34:51,550 Oh moj bog, poglej vse napake smo naredili že. 716 00:34:51,550 --> 00:34:55,540 In to is-- kaj, to je res kot šest, sedem programa vrstice? 717 00:34:55,540 --> 00:34:57,790 Torej, to je, če je lahko zelo hitro dobili prepričljivo. 718 00:34:57,790 --> 00:35:00,890 >> Ta terminal okno ima Zdaj samo izpljune 719 00:35:00,890 --> 00:35:03,230 veliko število sporočil o napakah. 720 00:35:03,230 --> 00:35:07,560 Zagotovo, nimam več napako sporočila, kot sem jih vrstic kode. 721 00:35:07,560 --> 00:35:08,680 Torej, kaj se dogaja? 722 00:35:08,680 --> 00:35:10,920 >> No, najboljša strategija storiti kadarkoli 723 00:35:10,920 --> 00:35:13,710 se srečujejo velika seznam napak, kot je ta, 724 00:35:13,710 --> 00:35:16,690 se pomaknete nazaj, poglej za ukaz si tekel, kar v mojem primeru 725 00:35:16,690 --> 00:35:18,020 je, da niz. 726 00:35:18,020 --> 00:35:21,630 Poglej, kaj make storil, in to je to dolgo Jek ukaz, ni nič takega ni. 727 00:35:21,630 --> 00:35:22,950 >> Toda rdeča je slaba. 728 00:35:22,950 --> 00:35:24,750 Green je hotel biti nežen in koristno. 729 00:35:24,750 --> 00:35:26,140 Vendar je še vedno slabo, v tem primeru. 730 00:35:26,140 --> 00:35:27,510 Ampak, če je to slabo? 731 00:35:27,510 --> 00:35:31,450 >> String.c, linija pet, karakter pet. 732 00:35:31,450 --> 00:35:32,930 Torej je to samo skupna konvencija. 733 00:35:32,930 --> 00:35:36,060 Nekaj ​​debelo črevo kaj pomeni številka vrstice in število znakov. 734 00:35:36,060 --> 00:35:41,080 Napaka, uporaba črno identifikator niz. 735 00:35:41,080 --> 00:35:42,900 Ali ste mislili standardna? 736 00:35:42,900 --> 00:35:45,530 >> Torej, žal, Jek se trudi, da je koristno. 737 00:35:45,530 --> 00:35:46,850 Ampak to je narobe, v tem primeru. 738 00:35:46,850 --> 00:35:49,350 Ne, Jek, nisem mislil standardnega IO. 739 00:35:49,350 --> 00:35:51,070 Mislil sem, da je na liniji, ja. 740 00:35:51,070 --> 00:35:53,420 >> Toda linija pet je tale tukaj. 741 00:35:53,420 --> 00:35:57,040 In Zvoka ne razumeti S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 To je neprijavljeno identifikator, A Beseda je samo še nikoli ni videl. 743 00:36:01,490 --> 00:36:05,730 In to zato, ker C, jezik smo pisno kodo v trenutku, 744 00:36:05,730 --> 00:36:08,070 nima spremenljivke, imenovane strune. 745 00:36:08,070 --> 00:36:11,380 >> Ne, privzeto, podpore nekaj, kar se imenuje niz. 746 00:36:11,380 --> 00:36:16,750 To je CS50 kos žargonu, vendar zelo konvencionalno. 747 00:36:16,750 --> 00:36:18,600 Ampak to lahko določi, kakor sledi. 748 00:36:18,600 --> 00:36:22,090 >> Če dodam eno vrstico kode na vrh tega programa 749 00:36:22,090 --> 00:36:27,890 vključujejo CS50.h, kar je še ena datoteka nekje v notranjosti CS50 IDE, nekje 750 00:36:27,890 --> 00:36:30,820 na trdem disku, tako rekoč, operacijskega sistema Ubuntu 751 00:36:30,820 --> 00:36:33,590 da tečem, da je datoteka, ki je 752 00:36:33,590 --> 00:36:38,740 bo naučiti delovati Sistem kaj niz je, samo 753 00:36:38,740 --> 00:36:41,930 kot standardni io.h je datoteka v operacijskem sistemu, ki je 754 00:36:41,930 --> 00:36:44,430 bo naučil, kaj printf je. 755 00:36:44,430 --> 00:36:46,810 >> Dejansko bi gotten zelo podobno sporočilo 756 00:36:46,810 --> 00:36:50,600 če bi IO priznal standarda IO.h in poskušal uporabiti printf. 757 00:36:50,600 --> 00:36:53,632 Tako da sem šel naprej in samo Prevzemite nadzor L, da počistite svoj zaslon. 758 00:36:53,632 --> 00:36:56,340 Ali lahko napišete jasno in da bo samo jasno terminalsko okno. 759 00:36:56,340 --> 00:36:58,020 Ampak še vedno lahko pomikate nazaj v preteklost. 760 00:36:58,020 --> 00:37:01,100 >> In bom za ponovno narediti String. 761 00:37:01,100 --> 00:37:03,660 Cross moji prsti tokrat Enter. 762 00:37:03,660 --> 00:37:05,380 Oh moj bog, je delovalo. 763 00:37:05,380 --> 00:37:09,280 to mi kaže dolgo Grobni ukaz to je tisto, zaradi česar nastaja z Jek, 764 00:37:09,280 --> 00:37:10,460 vendar ni sporočil o napakah. 765 00:37:10,460 --> 00:37:12,460 Tako spoznali, čeprav lahko dobite popolnoma 766 00:37:12,460 --> 00:37:14,480 preobremenjeni z Število sporočil o napakah, 767 00:37:14,480 --> 00:37:17,540 je lahko samo to nadležno kaskadno učinek, kjer Zvoka ne razume 768 00:37:17,540 --> 00:37:19,620 ena stvar, ki jo pomeni potem ne razume naslednje besede, 769 00:37:19,620 --> 00:37:20,560 ali naslednjo vrstico. 770 00:37:20,560 --> 00:37:22,850 In tako je samo dušilke na svojo kodo. 771 00:37:22,850 --> 00:37:24,440 Toda fix je lahko preprosta. 772 00:37:24,440 --> 00:37:27,822 In tako vedno osredotočiti na prva linija proizvodnje. 773 00:37:27,822 --> 00:37:29,530 In če ne razumem, samo poglej 774 00:37:29,530 --> 00:37:32,480 ključne besede, ki bi lahko namige in številko vrstice, 775 00:37:32,480 --> 00:37:34,650 in znak, kjer da napaka morda. 776 00:37:34,650 --> 00:37:40,328 >> Zdaj pa mi gredo naprej in tip dot poševnica, niz, vnesite. 777 00:37:40,328 --> 00:37:44,340 Hm, to ni pozdravljanja ničesar. 778 00:37:44,340 --> 00:37:46,210 Zakaj? 779 00:37:46,210 --> 00:37:48,170 No, spomnim, kjer se izvaja? 780 00:37:48,170 --> 00:37:53,730 >> To je verjetno zaljubljen v trenutku v zanko, če hočete, na vrstnim šestvaljnikom, 781 00:37:53,730 --> 00:37:56,950 ker Get String z zasnovo, osebje CS50 napisal, 782 00:37:56,950 --> 00:38:00,350 je dobesedno mišljeno samo sedeti tam čaka, in čaka, 783 00:38:00,350 --> 00:38:01,850 in čaka na vrvico. 784 00:38:01,850 --> 00:38:03,792 Vsi mislimo z vrvico je človeški vložek. 785 00:38:03,792 --> 00:38:04,500 Torej, veste kaj? 786 00:38:04,500 --> 00:38:05,166 Naj gredo naprej. 787 00:38:05,166 --> 00:38:08,704 In samo na muhavosti, naj me vpišite svoje ime, Davida, vnesite. 788 00:38:08,704 --> 00:38:10,120 Zdaj imam bolj dinamičen program. 789 00:38:10,120 --> 00:38:11,240 To je dejal, zdravo David. 790 00:38:11,240 --> 00:38:16,280 >> Če grem naprej in ponovno zagnati to, naj poskusim povedati ime Zamila, vnesite. 791 00:38:16,280 --> 00:38:17,940 In zdaj imamo dinamičen program. 792 00:38:17,940 --> 00:38:19,380 Nisem težko kodirane svet. 793 00:38:19,380 --> 00:38:21,760 Nisem težko kodirane ime ali David, ali Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Zdaj je bolj kot programi vemo, kje, če bo prispevek, 795 00:38:25,350 --> 00:38:27,870 proizvaja nekoliko drugačen izhod. 796 00:38:27,870 --> 00:38:31,020 Zdaj, to ni najboljša uporabniška izkušnja, ali UX. 797 00:38:31,020 --> 00:38:33,000 Vodim program. 798 00:38:33,000 --> 00:38:35,830 >> Ne vem, kaj moram storiti, če sem dejansko poglej 799 00:38:35,830 --> 00:38:37,290 ali pa se spomnimo, da izvorne kode. 800 00:38:37,290 --> 00:38:39,640 Torej, kaj je, da uporabniku doživeli malo bolje 801 00:38:39,640 --> 00:38:41,240 z najenostavnejši stvari. 802 00:38:41,240 --> 00:38:44,782 Naj grem nazaj v ta Program in enostavno reči printf. 803 00:38:44,782 --> 00:38:48,870 >> In mi gredo naprej in povedati ime, debelo črevo, in prostor, in nato podpičjem. 804 00:38:48,870 --> 00:38:51,170 In samo za brcne, ne zračnost n. 805 00:38:51,170 --> 00:38:52,980 In to je namerno, ker nočem 806 00:38:52,980 --> 00:38:54,590 poziv, da se premaknete v naslednjo vrstico. 807 00:38:54,590 --> 00:38:58,800 >> Rad bi, namesto da bi to storili, bi niz da prevedem kodo v nov stroj 808 00:38:58,800 --> 00:39:00,980 Koda dot poševnica niz. 809 00:39:00,980 --> 00:39:02,460 Ah, to je precej lepši. 810 00:39:02,460 --> 00:39:05,780 Zdaj pa zares ve, kaj računalnik želi od mene, da ga ime. 811 00:39:05,780 --> 00:39:10,020 >> Tako da sem šel naprej in tip v Robu, vstopijo in zdravo, Rob. 812 00:39:10,020 --> 00:39:13,640 Torej, zavedati, da je to še vedno na koncu na dan, samo program devet linije. 813 00:39:13,640 --> 00:39:15,090 Ampak smo izvedli te otroške korake. 814 00:39:15,090 --> 00:39:18,380 >> Napisali smo eno vrstico, s katero smo bili seznanjeni, printf, zdravo svet. 815 00:39:18,380 --> 00:39:19,980 Potem smo undid malo da. 816 00:39:19,980 --> 00:39:21,560 In smo dejansko uporablja get niz. 817 00:39:21,560 --> 00:39:23,362 In sva vrgla, da je vrednost v spremenljivki. 818 00:39:23,362 --> 00:39:26,070 In potem smo šli naprej in izboljšati nadalje s tretjo linijo. 819 00:39:26,070 --> 00:39:29,220 In ta ponavljajoči postopek pisanje programske opreme je resnično ključnega pomena. 820 00:39:29,220 --> 00:39:33,420 V CS50, in v življenju nasploh, vam na splošno ne bi smeli sesti, 821 00:39:33,420 --> 00:39:36,800 imajo program v mislih, in poskusite pisanje cela prekleta stvar naenkrat. 822 00:39:36,800 --> 00:39:40,810 >> To bo neizogibno povzročilo način več napak kot mi sami videli tukaj. 823 00:39:40,810 --> 00:39:44,070 Tudi jaz, na ta dan, ki se nenehno še druge neumne napake, 824 00:39:44,070 --> 00:39:47,480 dejansko težje napake da jih je težje razbrati. 825 00:39:47,480 --> 00:39:52,095 Ampak ti bo več napak več vrstic kode pišete vse naenkrat. 826 00:39:52,095 --> 00:39:54,220 In zato je ta praksa, napisati malo kodo 827 00:39:54,220 --> 00:39:57,930 da ste zadovoljni s, pripravijo da, prost dostop, je na splošno testiranje, 828 00:39:57,930 --> 00:40:01,370 nato pa on--, da tako kot smo ohranili plastenje in plastenje prejšnji teden, 829 00:40:01,370 --> 00:40:04,190 gradnjo iz nekaj zelo enostavno za nekaj bolj zapletenega, 830 00:40:04,190 --> 00:40:05,200 storijo enako tukaj. 831 00:40:05,200 --> 00:40:08,500 Ne sedite, in poskusite napisati celoten problem. 832 00:40:08,500 --> 00:40:10,780 Pravzaprav bi te otroške korake. 833 00:40:10,780 --> 00:40:15,100 >> Zdaj, strune niso vsi da je koristno sami sebi. 834 00:40:15,100 --> 00:40:18,210 Mi bi v resnici, v najboljšem primeru, kot je na nekaj drugega v naši orodij. 835 00:40:18,210 --> 00:40:20,990 Torej, kaj je dejansko naredil točno to. 836 00:40:20,990 --> 00:40:24,900 >> Naj gredo naprej zdaj in bič gor nekoliko drugačno programa. 837 00:40:24,900 --> 00:40:28,320 In bomo to imenujemo int.c, za celo število. 838 00:40:28,320 --> 00:40:30,870 Bom, podobno, vključujejo CS550.h. 839 00:40:30,870 --> 00:40:33,060 Bom vključujejo standardno IO. 840 00:40:33,060 --> 00:40:36,630 In to se dogaja, da je precej pogosti V teh prvih nekaj dneh razreda. 841 00:40:36,630 --> 00:40:39,050 >> In bom pripravljen sam z glavno funkcijo. 842 00:40:39,050 --> 00:40:43,370 In zdaj namesto da bi dobili niz, gremo naprej in se int. 843 00:40:43,370 --> 00:40:49,285 Recimo i in poklical dobil int, blizu parens, podpičjem. 844 00:40:49,285 --> 00:40:51,410 In zdaj naredimo kaj z njim, printf. 845 00:40:51,410 --> 00:40:56,190 >> Recimo nekaj takega zdravo, poševnica nazaj n, vejica i. 846 00:40:56,190 --> 00:41:00,010 Tako da sem precej posnemanjem kar sem pred nekaj trenutki. 847 00:41:00,010 --> 00:41:01,660 Imam ogrado tukaj. 848 00:41:01,660 --> 00:41:05,150 Sem vejico i tukaj, ker želim da se priključim v to ogrado. 849 00:41:05,150 --> 00:41:07,250 >> Torej, gremo naprej in poskusiti pripravo tega programa. 850 00:41:07,250 --> 00:41:10,060 Datoteka se imenuje int.c. 851 00:41:10,060 --> 00:41:12,920 Tako da sem hotel reči, da int, vnesite. 852 00:41:12,920 --> 00:41:16,420 Oh moj bog, vendar ni nič takega, kajne? 853 00:41:16,420 --> 00:41:17,230 Tam je napaka. 854 00:41:17,230 --> 00:41:19,810 >> Tam je skladenjska napaka Tukaj tako da program ne more 855 00:41:19,810 --> 00:41:25,460 je treba urediti znotraj int.c, črte sedem, znak 27, format error 856 00:41:25,460 --> 00:41:28,400 določa tip char zvezda, karkoli že to je. 857 00:41:28,400 --> 00:41:30,020 Ampak tip argument je int. 858 00:41:30,020 --> 00:41:33,110 >> Torej tudi tu, ne bomo to-- čeprav je danes veliko materiala, 859 00:41:33,110 --> 00:41:35,710 bomo, da vas preplavijo z absolutno vsak element C, 860 00:41:35,710 --> 00:41:38,070 in programiranje na splošno, v samo teh prvih nekaj tednih. 861 00:41:38,070 --> 00:41:40,400 Tako da se pogosto dogaja, da se žargon s katerimi niste seznanjeni. 862 00:41:40,400 --> 00:41:43,350 In v resnici, znak zvezda je nekaj bomo vrnili 863 00:41:43,350 --> 00:41:44,830 v tednu ali dveh v času. 864 00:41:44,830 --> 00:41:47,530 >> Ampak za zdaj, da vidimo, če bomo lahko razčleniti besede, ki jih poznate. 865 00:41:47,530 --> 00:41:50,750 Formats-- tako smo slišali format določilo, format code prej. 866 00:41:50,750 --> 00:41:51,840 To je znano. 867 00:41:51,840 --> 00:41:53,840 Type-- vendar argument je tipa int. 868 00:41:53,840 --> 00:41:55,980 Čakaj malo, i int. 869 00:41:55,980 --> 00:41:59,230 >> Mogoče odstotkov je dejansko ima nekaj definiran pomen. 870 00:41:59,230 --> 00:42:00,230 In, seveda, to počne. 871 00:42:00,230 --> 00:42:03,101 Celo, če hočeš printf, da ga nadomesti, 872 00:42:03,101 --> 00:42:05,350 si dejansko morali uporabiti drugačna oblika določilo. 873 00:42:05,350 --> 00:42:06,890 In ne veš, to če nekdo povedal, 874 00:42:06,890 --> 00:42:07,973 ali pa je to že počel. 875 00:42:07,973 --> 00:42:10,490 Toda odstotkov i kaj lahko pogosto uporabljeni 876 00:42:10,490 --> 00:42:12,240 v printf za priklopom na celo število. 877 00:42:12,240 --> 00:42:14,920 Lahko uporabite tudi odstotkov d za decimalno celo število. 878 00:42:14,920 --> 00:42:16,490 Ampak jaz je lepo in enostavno tukaj. 879 00:42:16,490 --> 00:42:17,590 Torej bomo šli s tem. 880 00:42:17,590 --> 00:42:21,160 >> Zdaj pa mi gredo naprej in ponovitev make int Enter. 881 00:42:21,160 --> 00:42:23,328 To je dobro, brez napak. 882 00:42:23,328 --> 00:42:27,260 Dot poševnica int-- OK, slab uporabniško izkušnjo, ker nisem sam povedal 883 00:42:27,260 --> 00:42:27,760 kaj storiti. 884 00:42:27,760 --> 00:42:28,426 Ampak to je v redu. 885 00:42:28,426 --> 00:42:29,480 Bom lov na hitro. 886 00:42:29,480 --> 00:42:36,260 >> In zdaj mi gredo naprej in tip v Davida, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, tako da je to dobra stvar. 888 00:42:37,820 --> 00:42:41,710 Tokrat sem z funkcijo, puzzle kos, ki se imenuje get int. 889 00:42:41,710 --> 00:42:44,230 In se izkaže out-- in bomo glej to kasneje v term-- 890 00:42:44,230 --> 00:42:47,730 osebje CS50 je izvajala priti niti na tak način, 891 00:42:47,730 --> 00:42:50,350 da bo le fizično dobili niz za vas. 892 00:42:50,350 --> 00:42:54,340 >> Izvedla je get int v tak način, le da bo 893 00:42:54,340 --> 00:42:55,590 dobili celo za vas. 894 00:42:55,590 --> 00:42:57,830 In če vas je človek, ne sodelujejo, je 895 00:42:57,830 --> 00:43:00,590 dobesedno le, da bo pravijo retry, retry, retry, 896 00:43:00,590 --> 00:43:05,200 dobesedno sedel tam zanka, dokler si zavezati z nekaj čarobno številko, 897 00:43:05,200 --> 00:43:07,670 kot 50, in hello 50. 898 00:43:07,670 --> 00:43:11,440 >> Ali pa, če bomo to še enkrat teči in tip v 42, zdravo 42. 899 00:43:11,440 --> 00:43:15,750 In tako funkcija get int znotraj te puzzle kosa 900 00:43:15,750 --> 00:43:19,050 Dovolj je logika, dovolj misel, da ugotovimo, kaj je beseda? 901 00:43:19,050 --> 00:43:20,330 In kakšna je številka? 902 00:43:20,330 --> 00:43:23,165 Sprejemamo samo, končno tudi številke. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> Tako se izkaže, da je to ni vse, da izrazna. 905 00:43:30,230 --> 00:43:30,910 do sedaj. 906 00:43:30,910 --> 00:43:33,690 Torej, yay, zadnjič, ko smo precej hitro odšel 907 00:43:33,690 --> 00:43:38,320 v izvedbenih igre in animacije, in umetniška dela v nič. 908 00:43:38,320 --> 00:43:42,260 In tu smo pri čemer vsebina Hello svetu in hello 50. 909 00:43:42,260 --> 00:43:43,696 >> To pa še ni vse, da je navdihujoča. 910 00:43:43,696 --> 00:43:46,070 In, seveda, ti najprej nekaj Primeri bo trajalo nekaj časa 911 00:43:46,070 --> 00:43:47,510 na ploščadi v razburjenje. 912 00:43:47,510 --> 00:43:49,854 Vendar imamo še veliko več nadzorovati zdaj, v resnici. 913 00:43:49,854 --> 00:43:51,770 In bomo zelo hiter začetek plastenje 914 00:43:51,770 --> 00:43:53,870 na vrhu teh osnovnih gradnikov. 915 00:43:53,870 --> 00:43:56,370 >> Ampak najprej, kaj je razumeti kaj omejitve so. 916 00:43:56,370 --> 00:43:58,620 V bistvu, ena od stvari Scratch ne enostavno 917 00:43:58,620 --> 00:44:00,990 nam storiti, je res videti pod pokrovom, 918 00:44:00,990 --> 00:44:03,740 in razumeti, kaj Računalnik je, kaj lahko stori, 919 00:44:03,740 --> 00:44:05,250 in kakšne so njegove omejitve so. 920 00:44:05,250 --> 00:44:08,580 In res, da je pomanjkanje razumevanje, potencialno dolgoročno 921 00:44:08,580 --> 00:44:12,520 lahko privede do lastnega mistakes-- pisno bugs, pisanje negotov programske opreme, ki 922 00:44:12,520 --> 00:44:13,880 dobi kramp na nek način. 923 00:44:13,880 --> 00:44:17,130 >> Tako da je lahko nekaj korakov v smeri razumevanju to malo bolje 924 00:44:17,130 --> 00:44:19,710 način, pravijo, naslednji primer. 925 00:44:19,710 --> 00:44:23,550 Bom, da gredo naprej in izvajanje resnično hitro program, imenovan Adder. 926 00:44:23,550 --> 00:44:25,134 Kot, kaj je dodati nekaj številk skupaj. 927 00:44:25,134 --> 00:44:27,800 In bom kodo nekaj kotičkov tukaj, in samo kopiraj in prilepi 928 00:44:27,800 --> 00:44:30,270 kjer sem bil prej, samo tako da lahko grem prej. 929 00:44:30,270 --> 00:44:33,090 Zdaj imam osnovnih začetkov programa imenovanega Adder. 930 00:44:33,090 --> 00:44:34,670 >> In gremo naprej in to. 931 00:44:34,670 --> 00:44:38,680 Bom, da gredo naprej in recimo, intx dobi dobili int. 932 00:44:38,680 --> 00:44:39,430 In veste kaj? 933 00:44:39,430 --> 00:44:40,990 Naredimo boljšo uporabniško izkušnjo. 934 00:44:40,990 --> 00:44:45,740 >> Torej, recimo x, in učinkovito pozove uporabnika, da nam x. 935 00:44:45,740 --> 00:44:50,600 In potem mi gredo naprej in rekli, printf kaj pa je y, tokrat pričakoval 936 00:44:50,600 --> 00:44:53,140 dve vrednosti od uporabnika. 937 00:44:53,140 --> 00:44:59,759 In potem pa pojdi naprej in recimo, printf, vsota x in y je. 938 00:44:59,759 --> 00:45:01,300 In zdaj ne želim narediti odstotkov s. 939 00:45:01,300 --> 00:45:09,080 Hočem narediti odstotkov i, poševnica nazaj n in nato plug vsota vrednosti. 940 00:45:09,080 --> 00:45:10,620 >> Torej, kako lahko greste o tem? 941 00:45:10,620 --> 00:45:11,270 Veš kaj? 942 00:45:11,270 --> 00:45:12,840 Vem, kako uporabljati spremenljivk. 943 00:45:12,840 --> 00:45:15,140 Naj samo razglasi novega, int z. 944 00:45:15,140 --> 00:45:16,770 >> In bom si ugibati tukaj. 945 00:45:16,770 --> 00:45:21,470 Če so enake znake v to jezik, morda sem lahko samo naredi x plus y, 946 00:45:21,470 --> 00:45:23,660 tako dolgo, kot sem na koncu moje Mislil s podpičjem? 947 00:45:23,660 --> 00:45:28,170 Sedaj lahko grem nazaj dol, priključite z, končati to misel s podpičjem. 948 00:45:28,170 --> 00:45:33,160 In da vidimo zdaj, če ti zaporedja lines-- x je dobil int. 949 00:45:33,160 --> 00:45:34,770 Y je dobil int. 950 00:45:34,770 --> 00:45:37,980 >> Dodamo X in Y, shranjevanje vrednosti v z-- tako da, še enkrat, ne pozabite enačaj 951 00:45:37,980 --> 00:45:38,560 ni enaka. 952 00:45:38,560 --> 00:45:41,100 To je naloga od desne proti levi. 953 00:45:41,100 --> 00:45:45,180 In kaj je izpisal, da je vsota x in y ne dobesedno zf 954 00:45:45,180 --> 00:45:46,830 ampak kaj je znotraj z. 955 00:45:46,830 --> 00:45:50,090 Torej, kaj je narediti Adder - lepo, brez napak tokrat. 956 00:45:50,090 --> 00:45:53,030 Dot poševnica Adder, vstop, x se bo 1. 957 00:45:53,030 --> 00:45:55,380 >> Y se bo 2. 958 00:45:55,380 --> 00:45:58,964 In vsota x in y je 3. 959 00:45:58,964 --> 00:46:00,130 Tako, da je vse v redu in prav. 960 00:46:00,130 --> 00:46:03,260 >> Tako bi si lahko predstavljate, da je matematika morajo delovati v programu, kot je ta. 961 00:46:03,260 --> 00:46:04,040 Ampak veš kaj? 962 00:46:04,040 --> 00:46:06,904 Je to spremenljivka, linija 12, čeprav je to potrebno? 963 00:46:06,904 --> 00:46:09,820 Saj ni treba, da bi dobili v navado za samo shranjevanje stvari v spremenljivkah 964 00:46:09,820 --> 00:46:10,980 samo zato, ker lahko. 965 00:46:10,980 --> 00:46:13,550 In v resnici, da je na splošno premišljeno slaba zasnova 966 00:46:13,550 --> 00:46:18,100 Če ste ustvarili spremenljivke, ki se imenuje z V tem primeru shranjevanje nekaj v njej, 967 00:46:18,100 --> 00:46:21,390 in nato takoj ki ga uporablja, vendar nikoli več. 968 00:46:21,390 --> 00:46:24,700 Zakaj dati nekaj ime kot vz če ste dobesedno 969 00:46:24,700 --> 00:46:26,770 gre za uporabo, da stvar samo enkrat, in zato 970 00:46:26,770 --> 00:46:29,380 proksimalno, kjer ste ustvarili je na prvem mestu, 971 00:46:29,380 --> 00:46:31,052 tako blizu v smislu vrstic kode? 972 00:46:31,052 --> 00:46:31,760 Torej, veste kaj? 973 00:46:31,760 --> 00:46:34,480 Izkazalo se je, da je C precej fleksibilna. 974 00:46:34,480 --> 00:46:36,586 Če bi dejansko želijo plug-in vrednot tukaj, 975 00:46:36,586 --> 00:46:38,210 Ne potrebujem, da razglasi novo spremenljivko. 976 00:46:38,210 --> 00:46:41,680 Jaz lahko samo plug-x plus y, ker C razume 977 00:46:41,680 --> 00:46:43,390 aritmetično in matematičnih operaterjev. 978 00:46:43,390 --> 00:46:47,140 >> Tako da lahko preprosto reči, to stori matematike, x plus y, ne glede na te vrednosti, 979 00:46:47,140 --> 00:46:50,780 vtič nastalo celo v tem nizu. 980 00:46:50,780 --> 00:46:53,730 Torej je to lahko, čeprav le eno vrstico krajši, 981 00:46:53,730 --> 00:46:58,480 boljši design, boljši program zato, ker je manj kodo, zato 982 00:46:58,480 --> 00:46:59,921 manj razumem. 983 00:46:59,921 --> 00:47:01,920 In to je tudi samo čistejši, v kolikor nismo 984 00:47:01,920 --> 00:47:04,620 uvajanje novih besed, Novi simboli, kot z, 985 00:47:04,620 --> 00:47:07,510 čeprav v resnici ne služijo veliko namenom. 986 00:47:07,510 --> 00:47:12,890 >> Žal matematike ni vse, da se zanesljive včasih. 987 00:47:12,890 --> 00:47:15,270 Gremo naprej in to. 988 00:47:15,270 --> 00:47:18,200 Bom, da gredo naprej zdaj in naredite naslednje. 989 00:47:18,200 --> 00:47:27,650 >> Naredimo printf, odstotni i, plus odstotkov i, mora biti odstotkov i, poševnica nazaj n. 990 00:47:27,650 --> 00:47:32,240 In bom naredil this-- xyx plus y. 991 00:47:32,240 --> 00:47:34,821 Tako da sem le, da bo na novo to nekoliko drugače tukaj. 992 00:47:34,821 --> 00:47:36,320 Naj pač preverjanje hitro duševno zdravje. 993 00:47:36,320 --> 00:47:37,986 Še enkrat, kaj je ne dobijo pred sebe. 994 00:47:37,986 --> 00:47:41,420 Naj seštevalnik, pika poševnica seštevalnika. 995 00:47:41,420 --> 00:47:44,950 x je 1, y 2, 1 plus 2 je 3. 996 00:47:44,950 --> 00:47:45,870 Torej, to je dobro. 997 00:47:45,870 --> 00:47:49,060 Ampak kaj je zapletlo to zdaj malo, in ustvariti novo datoteko. 998 00:47:49,060 --> 00:47:53,350 >> Bom poklical ta, pravijo, Ints, plural cela števila. 999 00:47:53,350 --> 00:47:55,980 Naj začnem, kjer sem bil pred nekaj trenutki. 1000 00:47:55,980 --> 00:47:57,770 Toda zdaj naredimo nekaj drugih linij. 1001 00:47:57,770 --> 00:48:03,430 Naj gredo naprej in naredite naslednje, printf, odstotek i, minus odstotkov i, 1002 00:48:03,430 --> 00:48:08,959 je odstotek i, vejico x, vejica yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Tako da sem malo delal drugačna math tam. 1004 00:48:10,750 --> 00:48:11,624 Naredimo še eno. 1005 00:48:11,624 --> 00:48:16,610 Torej odstotkov i krat odstotkov i odstotkov i, poševnica nazaj n. 1006 00:48:16,610 --> 00:48:21,430 Oglejmo plug-x in y in x-krat y. 1007 00:48:21,430 --> 00:48:24,530 Bomo uporabili zvezdico na računalnik za čas. 1008 00:48:24,530 --> 00:48:26,390 >> Ne uporabljate x. x spremenljivka ime tukaj. 1009 00:48:26,390 --> 00:48:28,270 Uporabite zvezdo za razmnoževanje. 1010 00:48:28,270 --> 00:48:29,020 Naredimo še eno. 1011 00:48:29,020 --> 00:48:34,580 Printf odstotkov I, razdeli z odstotnim i je odstotkov i 1012 00:48:34,580 --> 00:48:40,460 poševnica nazaj n. xy, deljeno s y-- tako da uporabite poševnico v C 1013 00:48:40,460 --> 00:48:41,502 storiti delitev. 1014 00:48:41,502 --> 00:48:42,460 In kaj je naredil eno drugo. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Preostanek odstotkov i, razdeljen ga odstotkov i, je odstotkov i. 1017 00:48:55,240 --> 00:48:59,550 xy-- in zdaj preostanek je tisto, kar je ostalo več. 1018 00:48:59,550 --> 00:49:02,980 Ko poskusite tako, da se imenovalec v števcu 1019 00:49:02,980 --> 00:49:05,570 koliko je ostala, da si ne bi mogla deliti ven? 1020 00:49:05,570 --> 00:49:07,910 >> Torej ni res, nujno, simbol 1021 00:49:07,910 --> 00:49:09,470 smo se uporablja v osnovni šoli za to. 1022 00:49:09,470 --> 00:49:13,830 Vendar pa obstaja v C. Lahko pravijo x modulo y, kjer je 1023 00:49:13,830 --> 00:49:18,000 to znak za odstotek v tem context-- zamenjati, ko ste notri 1024 00:49:18,000 --> 00:49:20,170 dvojnih narekovajev, znotraj z printf, odstotka 1025 00:49:20,170 --> 00:49:21,830 Uporablja se kot format določilo. 1026 00:49:21,830 --> 00:49:25,420 >> Ko uporabljate odstotkov zunaj da se v matematičnem izrazu, 1027 00:49:25,420 --> 00:49:29,910 je upravljavec modulo za modularno arithmetic-- za naše namene 1028 00:49:29,910 --> 00:49:33,650 tukaj, pomeni le, kaj je Preostanek x deljeno s y? 1029 00:49:33,650 --> 00:49:36,130 Tako x deljeno z y x poševnica y. 1030 00:49:36,130 --> 00:49:38,220 Kaj je preostanek x deljeno s y? 1031 00:49:38,220 --> 00:49:41,780 To je x mod y, kot bi programer povedati. 1032 00:49:41,780 --> 00:49:48,300 >> Torej, če sem naredila nobene napake sem, naj me iti naprej in se Ints, plural, lepo, 1033 00:49:48,300 --> 00:49:50,010 in pika poševnica Ints. 1034 00:49:50,010 --> 00:49:55,270 In gremo naprej in storiti, recimo, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 V redu, 1 plus 10 je 11, check. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 negativen 9, preveriti. 1037 00:50:01,240 --> 00:50:03,420 >> 1 krat 10 je 10, check. 1038 00:50:03,420 --> 00:50:07,090 1 deljeno z 10 is-- OK, bomo preskočili, da je eden. 1039 00:50:07,090 --> 00:50:09,480 Preostanek 1 deljeno z 10 je 1. 1040 00:50:09,480 --> 00:50:10,680 To je pravilno. 1041 00:50:10,680 --> 00:50:12,630 Ampak tam je napaka tukaj. 1042 00:50:12,630 --> 00:50:15,390 >> Torej, tisti, ki sem dal moj predati, ni pravilna. 1043 00:50:15,390 --> 00:50:16,670 Mislim, da je blizu 0. 1044 00:50:16,670 --> 00:50:20,670 1 deljeno z 10, saj veš, če smo rezanje nekaj vogali, seveda, to je nič. 1045 00:50:20,670 --> 00:50:28,050 Vendar pa bi bilo res 1/10, 0.1 ali 0.10, 0,1000, ali tako naprej. 1046 00:50:28,050 --> 00:50:30,600 >> To ne bi smelo biti res nič. 1047 00:50:30,600 --> 00:50:35,990 No, izkaže se, da je računalnik gre dobesedno tisto, kar smo povedali, da storiti. 1048 00:50:35,990 --> 00:50:39,460 Delamo matematiko kot x deljeno s y. 1049 00:50:39,460 --> 00:50:44,680 In tako x in y, na progah kode prej, so cela števila. 1050 00:50:44,680 --> 00:50:50,440 >> Poleg tega so na liniji 15, smo povedal printf, hej, printf plug-in 1051 00:50:50,440 --> 00:50:54,230 celo število, plug-in celo število, plug-in v integer-- posebej 1052 00:50:54,230 --> 00:50:57,580 x, potem y in nato x deljeno s y. sta x in y Ints. 1053 00:50:57,580 --> 00:50:59,060 Mi smo dobro tam. 1054 00:50:59,060 --> 00:51:01,250 >> Toda kaj je x deljeno s x? 1055 00:51:01,250 --> 00:51:06,790 x deljeno s moral y, matematično, 1/10, 0,1, 1056 00:51:06,790 --> 00:51:11,600 kar je realno število, realno število ob potencialno decimalno vejico. 1057 00:51:11,600 --> 00:51:13,230 To ni celo število. 1058 00:51:13,230 --> 00:51:18,290 >> Toda kaj je najbližje celo do 1/10 ali 0,1? 1059 00:51:18,290 --> 00:51:21,114 Ja, nekako je nič. 1060 00:51:21,114 --> 00:51:22,030 0.1 je tako veliko. 1061 00:51:22,030 --> 00:51:22,890 In 1, je to veliko. 1062 00:51:22,890 --> 00:51:25,870 Tako 1/10 bliže 0, kot je na enega. 1063 00:51:25,870 --> 00:51:30,800 >> In kaj C počne za us-- vrste, saj smo povedali to-- 1064 00:51:30,800 --> 00:51:32,600 je skrajšano, da je celo število. 1065 00:51:32,600 --> 00:51:40,540 To je pri vrednosti, ki je spet naj bi bilo nekaj podobnega 0.1000, 1066 00:51:40,540 --> 00:51:41,800 0 in tako naprej. 1067 00:51:41,800 --> 00:51:45,320 In to je med krčenjem vse decimalno vejico 1068 00:51:45,320 --> 00:51:47,510 tako da vse to stvari, ker ne 1069 00:51:47,510 --> 00:51:51,910 prilega v pojmu celo število, ki je le nekaj kot negativna 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 gor in dol, da odvrže vse decimalno vejico, ker ste 1071 00:51:55,830 --> 00:51:59,020 ni mogoče vgraditi decimalno vejico v celo po definiciji. 1072 00:51:59,020 --> 00:52:01,290 >> Torej je odgovor tukaj ni nič. 1073 00:52:01,290 --> 00:52:02,600 Torej, kako popraviti to? 1074 00:52:02,600 --> 00:52:04,400 Potrebujemo še eno rešitev, vse skupaj. 1075 00:52:04,400 --> 00:52:06,880 In to lahko storimo, kot sledi. 1076 00:52:06,880 --> 00:52:12,820 >> Naj gredo naprej in ustvariti novo datoteko, ta se imenuje floats.c. 1077 00:52:12,820 --> 00:52:16,500 In jo shranite tukaj v Enako imenik, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 In mi gredo naprej in kopiranje nekaj te kode od prej. 1080 00:52:23,260 --> 00:52:27,690 >> Toda namesto da bi dobili int, kaj je to. 1081 00:52:27,690 --> 00:52:31,037 Daj mi plavajočo vejico vrednost imenovano x. kjer plavajočo vejico 1082 00:52:31,037 --> 00:52:33,370 vrednost je le dobesedno nekaj s plavajočo vejico. 1083 00:52:33,370 --> 00:52:34,410 To lahko premikate levo, desno. 1084 00:52:34,410 --> 00:52:35,530 To je realno število. 1085 00:52:35,530 --> 00:52:38,050 >> In naj me pokliče, ne dobili int, ampak dobil plovec, 1086 00:52:38,050 --> 00:52:41,420 ki je bila tudi med menija možnosti v knjižnici C250. 1087 00:52:41,420 --> 00:52:43,220 Spremenimo y, da likvidna sredstva. 1088 00:52:43,220 --> 00:52:45,000 Torej, to postane dobil plovec. 1089 00:52:45,000 --> 00:52:47,620 >> In zdaj, ne želimo, da bi zapolnili v ints. 1090 00:52:47,620 --> 00:52:53,130 Izkazalo se je, da moramo uporabiti odstotkov f za plovcem, odstotka f za float, 1091 00:52:53,130 --> 00:52:54,560 in zdaj ga shranite. 1092 00:52:54,560 --> 00:53:01,220 In zdaj, pesti, da boje, lepo, pika poševnica plava. 1093 00:53:01,220 --> 00:53:04,280 x se bo ena 1. y Se bo 10 znova. 1094 00:53:04,280 --> 00:53:08,240 >> In, lepo, OK moj dodatek je pravilna. 1095 00:53:08,240 --> 00:53:10,240 Upal sem več, ampak sem pozabil napisati. 1096 00:53:10,240 --> 00:53:13,250 Torej, pojdimo in popraviti to logično napako. 1097 00:53:13,250 --> 00:53:16,280 >> Gremo naprej in zgrabi naslednje. 1098 00:53:16,280 --> 00:53:18,080 Bomo pač malo kopiraj in prilepi. 1099 00:53:18,080 --> 00:53:20,080 In bom povedal minus. 1100 00:53:20,080 --> 00:53:21,890 >> In bom povedal krat. 1101 00:53:21,890 --> 00:53:24,060 In bom reči deljena. 1102 00:53:24,060 --> 00:53:28,240 In ne bom storiti modulo, ki ni tako germane tukaj 1103 00:53:28,240 --> 00:53:33,690 deljeno z f in časi plus-- OK, kaj je to ponovi. 1104 00:53:33,690 --> 00:53:44,210 >> Znamka boje, pika poševnica boje, in 1, 10, in-- lepo, no, OK. 1105 00:53:44,210 --> 00:53:45,250 Tako da sem idiot. 1106 00:53:45,250 --> 00:53:47,000 Torej, to je zelo pogosta v računalništvu 1107 00:53:47,000 --> 00:53:49,780 da neumne napake, kot je ta. 1108 00:53:49,780 --> 00:53:53,100 >> Za pedagoške namene, kaj sem res hotel narediti 1109 00:53:53,100 --> 00:53:57,410 je spremeniti znanost tukaj na plus, da minus, na čase, 1110 00:53:57,410 --> 00:54:01,140 in razdeliti, kot si upamo opazili pri tej vaji. 1111 00:54:01,140 --> 00:54:04,700 Torej, zdaj pa je ponovno zbere to Program, ali dot Slash boje. 1112 00:54:04,700 --> 00:54:07,950 >> In tretjič, kaj je vidim, če izpolnjuje moja pričakovanja. 1113 00:54:07,950 --> 00:54:21,480 1, 10, začne, ja, OK, 1.000, deljeno s 10.000 je 0,100000. 1114 00:54:21,480 --> 00:54:24,952 In se je izkazalo, da lahko nadzorujete, koliko Številke so po teh pikami. 1115 00:54:24,952 --> 00:54:25,660 Dejansko bo. 1116 00:54:25,660 --> 00:54:26,790 Vrnili se bomo na to. 1117 00:54:26,790 --> 00:54:28,440 >> Toda zdaj, v resnici, matematika je pravilna. 1118 00:54:28,440 --> 00:54:30,090 Torej, še enkrat, kaj je takeaway tukaj? 1119 00:54:30,090 --> 00:54:33,050 Izkazalo se je, da je v C Ne šele strings-- in dejansko 1120 00:54:33,050 --> 00:54:36,120 obstajajo ni res, ker smo dodamo tiste s knjižnico CS50. 1121 00:54:36,120 --> 00:54:37,710 Vendar pa obstajajo ne samo Ints. 1122 00:54:37,710 --> 00:54:38,990 >> Obstajajo tudi plava. 1123 00:54:38,990 --> 00:54:42,810 In se izkaže, kup drugih podatkov vrste tudi, da bomo uporabili kmalu. 1124 00:54:42,810 --> 00:54:46,270 Izkazalo se je, če hočeš eno samo značaja, ni niz znakov, 1125 00:54:46,270 --> 00:54:47,610 lahko uporabite samo char. 1126 00:54:47,610 --> 00:54:52,350 >> Izkazalo se je, da če hočeš bool, logično vrednost true ali false le, 1127 00:54:52,350 --> 00:54:56,840 zahvaljujoč knjižnici CS50, ki smo jih doda C podatkovni tip bool kot dobro. 1128 00:54:56,840 --> 00:54:59,180 Ampak to je tudi predstaviti številne druge jezike, kot dobro. 1129 00:54:59,180 --> 00:55:04,130 In se izkaže, da včasih ti Potrebujemo večje število pa prihajajo privzeto 1130 00:55:04,130 --> 00:55:05,210 z ints in plovci. 1131 00:55:05,210 --> 00:55:10,590 >> In, v resnici dvojni je številka ki uporablja ne 32 bitov, ampak 64 bitov. 1132 00:55:10,590 --> 00:55:14,990 In dolgo dolgo je številka, ki uporablja ne 32, bitov pa 64 bitov, 1133 00:55:14,990 --> 00:55:19,190 oziroma za plavajočo vejico vrednote in cela števila, v tem zaporedju. 1134 00:55:19,190 --> 00:55:22,780 Torej, kaj je pravzaprav zdaj videti v akciji. 1135 00:55:22,780 --> 00:55:26,150 >> Bom, da gredo naprej tukaj in bič gor en drug program. 1136 00:55:26,150 --> 00:55:32,020 Tukaj bom, da gredo naprej in ne vključujejo CS50.h. 1137 00:55:32,020 --> 00:55:34,910 In mi gre, vsebuje standardne IO.h. 1138 00:55:34,910 --> 00:55:37,320 >> In boste opazili nekaj funky se dogaja tukaj. 1139 00:55:37,320 --> 00:55:40,592 To ni barvno kodiranje stvari na enak način, kot je to storila prej. 1140 00:55:40,592 --> 00:55:43,550 In se je izkazalo, da je zato, ker I niso dale stvar ime datoteke. 1141 00:55:43,550 --> 00:55:47,270 >> Bom poklical tole sizeof.c, in pritisnite Shrani. 1142 00:55:47,270 --> 00:55:51,039 In opazil, kaj se dogaja z mojim zelo bela številka zoper to črno ozadje. 1143 00:55:51,039 --> 00:55:52,830 Zdaj, vsaj tam je nekaj vijolične tam. 1144 00:55:52,830 --> 00:55:54,490 In to je sintaksa poudaril. 1145 00:55:54,490 --> 00:55:57,700 >> To je zato, ker, preprosto, Sem povedal IDE kakšno vrsto datoteke 1146 00:55:57,700 --> 00:56:01,060 je, tako da mu daje ime in natančneje razširitev datoteke. 1147 00:56:01,060 --> 00:56:03,620 Zdaj pa gremo naprej in to. 1148 00:56:03,620 --> 00:56:08,910 Bom, da gredo naprej in zelo preprosto natisnete following-- bool 1149 00:56:08,910 --> 00:56:11,080 je odstotkov LU. 1150 00:56:11,080 --> 00:56:12,950 >> Vrnili se bomo na da je vsak trenutek. 1151 00:56:12,950 --> 00:56:15,840 In potem bom velikost tiska bool. 1152 00:56:15,840 --> 00:56:18,170 In sedaj, samo, da shranite sem nekaj časa, da sem 1153 00:56:18,170 --> 00:56:20,280 storili celoto kup teh naenkrat. 1154 00:56:20,280 --> 00:56:24,620 In, še posebej, bom spremenite v char in char. 1155 00:56:24,620 --> 00:56:27,760 Tale, bom za spremembo za dvojno in dvojno. 1156 00:56:27,760 --> 00:56:31,440 >> Tale, bom za spremembo s plovcem in likvidna sredstva. 1157 00:56:31,440 --> 00:56:35,670 Ta je, da bom spremeni v int in notr. 1158 00:56:35,670 --> 00:56:38,660 In to, jaz grem spremeniti, da dolgo dolgo. 1159 00:56:38,660 --> 00:56:40,840 In to je še vedno ob Dolgo, dolgo dolgo. 1160 00:56:40,840 --> 00:56:44,572 >> In potem, na koncu, sem dal Sam eno preveč, niz. 1161 00:56:44,572 --> 00:56:47,030 Izkazalo se je, da je v C, tam je posebno operator imenuje 1162 00:56:47,030 --> 00:56:50,260 velikost, ki je dobesedno bo, ko teče, 1163 00:56:50,260 --> 00:56:52,099 povej nam velikost Vsaka izmed teh spremenljivk. 1164 00:56:52,099 --> 00:56:53,890 In to je način, zdaj moremo povezati nazaj 1165 00:56:53,890 --> 00:56:57,140 razprave prejšnji teden podatkov in zastopanja. 1166 00:56:57,140 --> 00:57:00,330 >> Naj gredo naprej in pripravijo velikost pik velikosti poševnico za. 1167 00:57:00,330 --> 00:57:01,210 In poglejmo. 1168 00:57:01,210 --> 00:57:05,210 Izkazalo se je, da je v C, zlasti na CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 še posebej na operacijski sistem Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 ki je 64-bitni operacijski Sistem v tem primeru 1171 00:57:11,100 --> 00:57:14,189 bool bo uporablja en bajt prostora. 1172 00:57:14,189 --> 00:57:16,480 To je, kako se meri velikost, Ne v bitih, ampak v bajtov. 1173 00:57:16,480 --> 00:57:18,690 In opozarjajo, da je en bajt osem bitov. 1174 00:57:18,690 --> 00:57:22,030 Torej bool, čeprav vas Tehnično potrebujemo samo 0 ali 1, 1175 00:57:22,030 --> 00:57:24,092 da je malo potratno kako smo ga izvajali. 1176 00:57:24,092 --> 00:57:26,800 To se dejansko dogaja za uporabo celoto byte-- tako da vse ničle, so morda 1177 00:57:26,800 --> 00:57:31,050 vsi tisti, ali nekaj takega, ali pa samo en 1 med osem bitov. 1178 00:57:31,050 --> 00:57:34,962 >> Char, medtem, ki se uporablja za znak kot ASCII znaki na prejšnji teden, 1179 00:57:34,962 --> 00:57:36,170 se bo en znak. 1180 00:57:36,170 --> 00:57:42,340 In to synchs z našim pojmom da bi bilo ne več kot 256 bits-- precej, 1181 00:57:42,340 --> 00:57:45,360 synchs up s čemer ni več kot 8 bitov, ki so 1182 00:57:45,360 --> 00:57:47,450 nam daje tudi do 256 vrednosti. 1183 00:57:47,450 --> 00:57:49,680 Dvojno bo je 8 bajtov ali 64 bitov. 1184 00:57:49,680 --> 00:57:50,510 >> Plovec je 4. 1185 00:57:50,510 --> 00:57:51,690 Int je 4. 1186 00:57:51,690 --> 00:57:52,980 Dolgo, dolgo je 8. 1187 00:57:52,980 --> 00:57:54,716 In niz je 8. 1188 00:57:54,716 --> 00:57:55,840 Ampak ne skrbi. 1189 00:57:55,840 --> 00:57:57,340 Bomo lupine nazaj, da je plast. 1190 00:57:57,340 --> 00:57:59,940 Izkazalo se je, strune lahko biti daljša od 8 bajtov. 1191 00:57:59,940 --> 00:58:02,310 >> In, seveda, smo pisno že strune, zdravo svet, 1192 00:58:02,310 --> 00:58:03,700 več kot 8 bajtov. 1193 00:58:03,700 --> 00:58:06,270 Vendar se bomo vrnili k da je vsak trenutek. 1194 00:58:06,270 --> 00:58:09,690 Toda vzeti tukaj je naslednji. 1195 00:58:09,690 --> 00:58:15,320 >> Vsak računalnik ima le omejen količino pomnilnika in prostora. 1196 00:58:15,320 --> 00:58:17,860 Shranite lahko le toliko datoteke na vašem Mac ali PC. 1197 00:58:17,860 --> 00:58:23,030 Shranite lahko le toliko programov RAM teče hkrati nujno, celo 1198 00:58:23,030 --> 00:58:26,360 z navideznega pomnilnika, saj imate končno količino RAM-a. 1199 00:58:26,360 --> 00:58:28,990 >> In samo picture-- če nisi nikoli odprl laptop 1200 00:58:28,990 --> 00:58:31,300 ali naročiti dodatnega pomnilnika za računalnik, 1201 00:58:31,300 --> 00:58:33,670 morda ne vedo, da v notranjosti računalnika 1202 00:58:33,670 --> 00:58:36,590 je nekaj, kar izgleda malo, kot je ta. 1203 00:58:36,590 --> 00:58:40,540 Torej je to samo skupno podjetje z imenom Ključno je, da naredi RAM za računalnike. 1204 00:58:40,540 --> 00:58:43,620 In RAM kjer programi živijo, medtem ko delate. 1205 00:58:43,620 --> 00:58:46,630 >> Torej, na vsak Mac ali PC, ko se dvakrat kliknite program, in odpira, 1206 00:58:46,630 --> 00:58:48,921 in odpira nekaj Wordov dokument ali nekaj takega, 1207 00:58:48,921 --> 00:58:51,764 jo shrani začasno RAM, ker RAM je hitrejši 1208 00:58:51,764 --> 00:58:53,680 kot trdi disk, ali vaš SSD disk. 1209 00:58:53,680 --> 00:58:56,600 Torej, to je samo, če programi gredo živeti, ko delate, 1210 00:58:56,600 --> 00:58:58,060 ali če se uporabljajo datoteke. 1211 00:58:58,060 --> 00:59:00,890 >> Torej imate stvari, ki izgledajo kot je ta notranjost vašega prenosnika, 1212 00:59:00,890 --> 00:59:03,320 ali nekoliko večje stvari znotraj namizju. 1213 00:59:03,320 --> 00:59:07,440 Toda ključ imate samo končno število teh stvari. 1214 00:59:07,440 --> 00:59:11,230 In tam je le končna količina strojna oprema sedel na mizo prav 1215 00:59:11,230 --> 00:59:11,730 tukaj. 1216 00:59:11,730 --> 00:59:15,920 >> Torej, zagotovo ne moremo shraniti neskončno dolgih številk. 1217 00:59:15,920 --> 00:59:19,030 In vendar, če menite nazaj Šola, koliko številk lahko 1218 00:59:19,030 --> 00:59:21,400 imate na desni strani za decimalno vejico? 1219 00:59:21,400 --> 00:59:24,680 Kar se tega tiče, koliko številk lahko moraš levo od decimalne vejice? 1220 00:59:24,680 --> 00:59:26,300 Res, neskončno veliko. 1221 00:59:26,300 --> 00:59:30,840 >> Zdaj smo ljudje samo morda znate izgovoriti milijonov, 1222 00:59:30,840 --> 00:59:34,990 in milijarde, bilijone, in trilijonov in quintillion. 1223 00:59:34,990 --> 00:59:39,370 In sem premikanje meja moje understanding-- ali my-- razumem 1224 00:59:39,370 --> 00:59:41,110 številke, ampak moj izgovorjava številk. 1225 00:59:41,110 --> 00:59:44,720 Vendar pa lahko dobite neskončno velika s neskončno mnogo številke na levi 1226 00:59:44,720 --> 00:59:47,050 ali na desno od decimalne vejice. 1227 00:59:47,050 --> 00:59:50,040 >> Ampak računalniki imajo le končno količino pomnilnika, 1228 00:59:50,040 --> 00:59:53,510 končna število tranzistorjev, A končno število žarnic v notranjosti. 1229 00:59:53,510 --> 00:59:57,350 Torej, kaj se zgodi, ko vam zmanjka prostora? 1230 00:59:57,350 --> 00:59:59,620 Z drugimi besedami, če vas pomislite na zadnji teden 1231 00:59:59,620 --> 01:00:03,160 ko smo govorili o številkah sami, ki so zastopane v binarni, 1232 01:00:03,160 --> 01:00:05,480 Predpostavimo, da imamo Ta 8-bitna vrednost tukaj. 1233 01:00:05,480 --> 01:00:08,290 >> In imamo sedem 1 in ena 0. 1234 01:00:08,290 --> 01:00:10,827 In domnevam, da želimo dodati 1 tej vrednosti. 1235 01:00:10,827 --> 01:00:12,410 To je res velika številka zdaj. 1236 01:00:12,410 --> 01:00:16,610 >> To je 254, če se prav spomnim math od zadnjega teden desne. 1237 01:00:16,610 --> 01:00:19,480 Kaj pa če zamenjam da skrajno desna 0 k 1? 1238 01:00:19,480 --> 01:00:22,800 Celotno število, iz Seveda, postane osem +1. 1239 01:00:22,800 --> 01:00:24,050 Torej smo še vedno dobri. 1240 01:00:24,050 --> 01:00:27,204 >> In to verjetno predstavlja 255, čeprav je odvisno od konteksta 1241 01:00:27,204 --> 01:00:29,120 da bi lahko dejansko predstavlja negativno število. 1242 01:00:29,120 --> 01:00:31,240 Ampak več o tem kdaj drugič. 1243 01:00:31,240 --> 01:00:34,220 To se počuti, kot da je o tako visoko, kot sem lahko računamo. 1244 01:00:34,220 --> 01:00:35,290 >> Zdaj je samo 8 bitov. 1245 01:00:35,290 --> 01:00:38,170 In moj Mac, zagotovo, je pot več kot 8 bitov pomnilnika. 1246 01:00:38,170 --> 01:00:39,170 Vendar pa ima omejen. 1247 01:00:39,170 --> 01:00:43,230 Torej velja ista trditev, tudi če še več teh tiste na zaslonu. 1248 01:00:43,230 --> 01:00:47,020 >> Toda kaj se zgodi, če ste shranjevanje to številko, 255, 1249 01:00:47,020 --> 01:00:49,290 in želite, da računajo 1 bit višja? 1250 01:00:49,290 --> 01:00:51,600 Hočeš, da gredo od 255 do 256. 1251 01:00:51,600 --> 01:00:55,800 Problem je seveda, da če ti začnemo na nič, kot prejšnji teden, 1252 01:00:55,800 --> 01:00:59,670 si ne more računati tako visoka kot 256, kaj šele 257, 1253 01:00:59,670 --> 01:01:02,584 kaj šele 258, m, ker kaj se zgodi, ko boste dodali 1? 1254 01:01:02,584 --> 01:01:05,000 Če boste to storili stari osnovni šoli pristop, ki si dal 1 tukaj, 1255 01:01:05,000 --> 01:01:08,150 in nato 1 plus 1 je 2, ampak to je res nič, nosite za 1, 1256 01:01:08,150 --> 01:01:09,695 nosijo 1, nosijo 1. 1257 01:01:09,695 --> 01:01:12,620 Vse te stvari, ti 1 je, pojdite na nič. 1258 01:01:12,620 --> 01:01:17,820 In ti zaključek, da, kot nekdo, je poudaril, je 1 na levi strani. 1259 01:01:17,820 --> 01:01:22,540 Ampak vse, kar lahko dejansko videli in se prilega v spomin 1260 01:01:22,540 --> 01:01:27,960 je le osem 0 je, kar je povedal na neki točki, če vas, računalnik, 1261 01:01:27,960 --> 01:01:32,490 Poskušali štetje dovolj visoko, ti si tekoč da se ovije okoli se zdi, 1262 01:01:32,490 --> 01:01:35,850 nič, ali morda celo negativno številke, ki so še nižje od nič. 1263 01:01:35,850 --> 01:01:37,260 >> In bomo lahko nekako videti. 1264 01:01:37,260 --> 01:01:39,900 Naj gredo naprej in pisati pravi hitro programa tukaj. 1265 01:01:39,900 --> 01:01:43,690 Naj gredo naprej in pisati program, imenovan prelivom. 1266 01:01:43,690 --> 01:01:49,980 Vključi CS50.h, vključujejo standardna IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Res sem zamudil svoj barvanje sintakse. 1268 01:01:51,730 --> 01:01:54,440 Torej, kaj je rešiti to kot overflow.c. 1269 01:01:54,440 --> 01:01:57,084 >> In zdaj int main void-- in pred dolgo, bomo 1270 01:01:57,084 --> 01:01:59,500 vrnili razloži, zakaj hranimo pisanje int glavno praznino. 1271 01:01:59,500 --> 01:02:02,080 Ampak za zdaj, kaj je pač to, da se šteje kot samoumevno. 1272 01:02:02,080 --> 01:02:06,200 Dajmo sam int, in inicializacijo 0. 1273 01:02:06,200 --> 01:02:11,716 >> Kaj je potem to za int dobim zero-- pravzaprav naredimo neskončno zanko 1274 01:02:11,716 --> 01:02:12,590 in glej kaj se zgodi. 1275 01:02:12,590 --> 01:02:22,440 Medtem ko je res, potem pa natisnete n je odstotek i, poševnica nazaj n, plug-n. 1276 01:02:22,440 --> 01:02:27,200 Ampak, zdaj, naredimo n dobi n plus 1. 1277 01:02:27,200 --> 01:02:29,660 >> Torej, z drugimi besedami, na vsaki ponovitev te neskončne zanke, 1278 01:02:29,660 --> 01:02:32,550 vzemimo vrednost N, ki je, in dodamo 1 do nje in nato 1279 01:02:32,550 --> 01:02:34,350 Rezultat shranite nazaj v n na levi strani. 1280 01:02:34,350 --> 01:02:37,150 In v resnici, smo videli sintaksa rahlo, kot je ta, na kratko. 1281 01:02:37,150 --> 01:02:39,730 Cool trik je namesto pisanje vse to ven, 1282 01:02:39,730 --> 01:02:42,770 lahko dejansko recimo n plus enaka 1. 1283 01:02:42,770 --> 01:02:47,480 >> Ali pa, če si res želiš biti fancy, lahko rečemo, n plus plus podpičjem. 1284 01:02:47,480 --> 01:02:50,130 Toda slednje dva sta samo kaj bi imenujemo skladenjska sladkorja 1285 01:02:50,130 --> 01:02:50,790 za prvo stvar. 1286 01:02:50,790 --> 01:02:53,456 >> Prva stvar, ki je bolj jasno, povsem v redu, popolnoma pravilna. 1287 01:02:53,456 --> 01:02:55,470 Toda to je bolj pogosta, bom rekel. 1288 01:02:55,470 --> 01:02:57,210 Torej bomo to naredili le za trenutek. 1289 01:02:57,210 --> 01:03:01,685 >> Zdaj pa se bo preliv, ki se sliši precej zlovešč, pika poševnica overflow. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Poglejmo, n je že precej velik. 1292 01:03:09,852 --> 01:03:11,310 Ampak kaj je razmišljati, kako velik je lahko n dobil? 1293 01:03:11,310 --> 01:03:12,870 >> n je int. 1294 01:03:12,870 --> 01:03:16,400 Smo videli pred nekaj trenutki z velikostjo na primer, da je int štiri bajte. 1295 01:03:16,400 --> 01:03:22,070 Vemo, od prejšnjega tedna, štiri bajte je 32 bitov, ker je 8 krat 4, ki je 32. 1296 01:03:22,070 --> 01:03:23,460 To se dogaja, da je 4 milijarde. 1297 01:03:23,460 --> 01:03:25,802 >> In mi smo do 800.000. 1298 01:03:25,802 --> 01:03:28,510 To bo večno trajalo, da štejejo kot visoko, kot sem morebiti lahko. 1299 01:03:28,510 --> 01:03:30,635 Tako da sem šel naprej, kot si morda kmalu, 1300 01:03:30,635 --> 01:03:34,910 in zadeti Nadzorna C- odkrito, nadzor C veliko, kjer Control C praviloma 1301 01:03:34,910 --> 01:03:36,034 pomeni prekinitev. 1302 01:03:36,034 --> 01:03:38,200 Žal, ker ta teče v oblaku, 1303 01:03:38,200 --> 01:03:41,190 včasih oblak izpljunil toliko stvari, 1304 01:03:41,190 --> 01:03:44,180 toliko izhod, da se bo traja nekaj časa za svoj vložek 1305 01:03:44,180 --> 01:03:45,630 priti v oblak. 1306 01:03:45,630 --> 01:03:49,240 Torej, čeprav sem udaril Control C pred nekaj sekund, 1307 01:03:49,240 --> 01:03:53,110 to je definitivno stran Učinek neskončno zanko. 1308 01:03:53,110 --> 01:03:56,070 >> In zato v teh primerih smo bo zapustil, da bo. 1309 01:03:56,070 --> 01:03:59,050 In bomo dodali še eno terminal window tukaj 1310 01:03:59,050 --> 01:04:03,186 s plus, ki pa seveda ne kot je ta, ker je še vedno razmišljam. 1311 01:04:03,186 --> 01:04:05,310 In gremo naprej in se malo bolj smiselno. 1312 01:04:05,310 --> 01:04:07,768 >> Bom, da gredo naprej in ne to samo finitely kolikokrat. 1313 01:04:07,768 --> 01:04:10,047 Uporabimo za zanke, ki sem jo omenili prej. 1314 01:04:10,047 --> 01:04:10,630 Naredimo to. 1315 01:04:10,630 --> 01:04:13,430 Daj mi še eno spremenljivko int i dobi 0. 1316 01:04:13,430 --> 01:04:17,430 i je manj kot, recimo, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 In zdaj mi gredo naprej in tisk iz nje odstotkov i vejico n. 1318 01:04:24,010 --> 01:04:27,547 In potem N- je to še vedno bo trajalo večno. 1319 01:04:27,547 --> 01:04:28,130 Naredimo to. 1320 01:04:28,130 --> 01:04:30,620 >> n dobi n krat 2. 1321 01:04:30,620 --> 01:04:34,140 Ali bi morali biti fancy in ne čas enaka 2. 1322 01:04:34,140 --> 01:04:37,120 Ampak recimo, n enako sam krat 2. 1323 01:04:37,120 --> 01:04:39,321 Z drugimi besedami, pri tem Nova različica programa, 1324 01:04:39,321 --> 01:04:41,820 Ne želim, da večno čakati od kot 800.000 do 4 milijarde. 1325 01:04:41,820 --> 01:04:43,070 Naj samo že s tem. 1326 01:04:43,070 --> 01:04:44,920 >> Kaj je pravzaprav dvojno n vsakič. 1327 01:04:44,920 --> 01:04:47,660 Ki, odpoklic, podvojitev je Nasprotno imajo, seveda. 1328 01:04:47,660 --> 01:04:50,035 In ker je prejšnji teden imamo spet nekaj, in še enkrat, 1329 01:04:50,035 --> 01:04:52,200 in še enkrat, super hitro, podvojitev bo zagotovo 1330 01:04:52,200 --> 01:04:58,080 naju od 1 do največje mogoče vrednost, da lahko računamo, da pri notr. 1331 01:04:58,080 --> 01:04:59,750 >> Torej, kaj je naredil točno to. 1332 01:04:59,750 --> 01:05:01,720 In bomo prišli nazaj na to kmalu. 1333 01:05:01,720 --> 01:05:04,180 Ampak to, še enkrat, je prav tako kot ponavljanja blok v Scratch. 1334 01:05:04,180 --> 01:05:05,600 In boste to uporabili kmalu. 1335 01:05:05,600 --> 01:05:10,170 >> To samo pomeni število od nič do, vendar ni enaka do 64. 1336 01:05:10,170 --> 01:05:14,285 In na vsaki ponovitvi te zanka, samo ne povečevanje i. 1337 01:05:14,285 --> 01:05:18,990 Torej i ++ - in to splošno konstrukt na liniji 7 je samo super običajen način 1338 01:05:18,990 --> 01:05:22,290 ponavljanje nekaj vrstic Koda, nekateri večkrat. 1339 01:05:22,290 --> 01:05:23,362 Kateri vrstic kode? 1340 01:05:23,362 --> 01:05:25,570 Te zaviti oklepaji, kot vi Morda naberejo od zdaj, 1341 01:05:25,570 --> 01:05:26,780 pomeni, naredite naslednje. 1342 01:05:26,780 --> 01:05:29,510 >> To je na podoben Scratch, ko ima rumene bloke 1343 01:05:29,510 --> 01:05:32,680 in druge barve, ki nekako objemu ali objem drugih blokov. 1344 01:05:32,680 --> 01:05:34,750 To je tisto, kar ti kodrasti naramnice delaš tukaj. 1345 01:05:34,750 --> 01:05:40,200 Torej, če imam sintakso right-- vas vidim simbol korenček v C sredstvi 1346 01:05:40,200 --> 01:05:42,706 to, kolikokrat sem bil poskušajo rešiti ta problem. 1347 01:05:42,706 --> 01:05:45,330 Torej, kaj je znebiti, da je eden skupaj, in zaprite to okno. 1348 01:05:45,330 --> 01:05:46,520 In bomo uporabili novo. 1349 01:05:46,520 --> 01:05:51,980 Poskrbite, pretočni, dot poševnica overflow, Enter, vse v redu, 1350 01:05:51,980 --> 01:05:53,090 izgleda slabo na prvi. 1351 01:05:53,090 --> 01:05:56,200 Ampak kaj je pomaknete nazaj v čas, ker sem to 64-krat. 1352 01:05:56,200 --> 01:05:58,700 >> In opazil prvič, n je 1. 1353 01:05:58,700 --> 01:06:03,110 Drugič, je n 2, Nato 4, potem 8, nato 16. 1354 01:06:03,110 --> 01:06:09,450 In zdi se, da v najkrajšem možnem Pridem do približno 1 milijardo, 1355 01:06:09,450 --> 01:06:12,800 če sem ga ponovno podvojiti, da bi bilo, da mi 2 milijardi. 1356 01:06:12,800 --> 01:06:14,980 Ampak se je izkazalo, da je prav na pragu. 1357 01:06:14,980 --> 01:06:18,930 >> In tako je dejansko prestopi int od 1 milijardo 1358 01:06:18,930 --> 01:06:23,514 za približno negativna 2 milijard, ker je celo število, 1359 01:06:23,514 --> 01:06:25,430 za razliko od številke mi so ob predpostavki, prejšnji teden, 1360 01:06:25,430 --> 01:06:28,397 lahko pozitivni in negativni V resnici in v računalniku. 1361 01:06:28,397 --> 01:06:30,730 In da je vsaj eden izmed tistih bitov učinkovito ukraden. 1362 01:06:30,730 --> 01:06:34,190 Tako smo v resnici le 31 bitov, ali 2 milijardi možne vrednosti. 1363 01:06:34,190 --> 01:06:38,220 >> Ampak za zdaj je hrana za s seboj precej Preprosto, ne glede na te številke 1364 01:06:38,220 --> 01:06:42,280 in ne glede na matematika, kaj slabega zgodi na koncu, 1365 01:06:42,280 --> 01:06:46,980 ker na koncu ste poskušali permutiranje bite enega preveč krat. 1366 01:06:46,980 --> 01:06:51,060 In ti dejansko šel od vseh 1, da morda vse 0 je, ali morda 1367 01:06:51,060 --> 01:06:54,260 samo nekateri drugi vzorec, ki ji jasno, odvisno od okoliščin, 1368 01:06:54,260 --> 01:06:56,342 mogoče razlagati tako, da z negativnim predznakom. 1369 01:06:56,342 --> 01:06:59,300 In tako se zdi najvišjo I Lahko računate na tem programu 1370 01:06:59,300 --> 01:07:01,210 je le približno 1 milijardo. 1371 01:07:01,210 --> 01:07:02,760 Vendar pa je delna rešitev tukaj. 1372 01:07:02,760 --> 01:07:03,480 Veš kaj? 1373 01:07:03,480 --> 01:07:07,600 >> Naj prehod iz int za dolgo dolgo. 1374 01:07:07,600 --> 01:07:10,633 In mi daj tukaj in say-- bom imela 1375 01:07:10,633 --> 01:07:12,290 spremeniti to nepodpisano dolgo. 1376 01:07:12,290 --> 01:07:16,860 Ali pa, da vidimo, sam nikoli ne spomnim. 1377 01:07:16,860 --> 01:07:19,920 >> Gremo naprej in da overflow. 1378 01:07:19,920 --> 01:07:21,860 Ne, to ni to, LLD, hvala. 1379 01:07:21,860 --> 01:07:23,430 Tako da včasih Jek je lahko koristno. 1380 01:07:23,430 --> 01:07:27,550 Nisem ne spomnim, kaj format Specifier je za dolgo dolgo. 1381 01:07:27,550 --> 01:07:28,950 >> Ampak, seveda, Jek mi je povedal. 1382 01:07:28,950 --> 01:07:31,570 Green je neke vrste dobro, še vedno pomeni, da se je zmotil. 1383 01:07:31,570 --> 01:07:33,190 To je ugibati, da sem mislila LLD. 1384 01:07:33,190 --> 01:07:38,750 >> Zato mi dovolite, da je nasvet, dolgo dolgo decimalno število, le da. 1385 01:07:38,750 --> 01:07:43,190 In mi to ponovi, pika poševnica overflow, Enter. 1386 01:07:43,190 --> 01:07:45,020 In zdaj, kaj je kul je to. 1387 01:07:45,020 --> 01:07:49,140 >> Če bi se pomaknete nazaj v čas, še vedno začeti štetje hkrati place-- 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Obvestilo smo dobili vse tja do 1 milijardo. 1390 01:07:54,860 --> 01:07:57,070 Potem pa smo varno prišli do 2 milijardi. 1391 01:07:57,070 --> 01:08:01,300 >> Potem pridemo do 4 milijarde, nato 8 milijard, 17 milijard. 1392 01:08:01,300 --> 01:08:03,340 In gremo višje, in višje in višje. 1393 01:08:03,340 --> 01:08:05,740 Sčasoma, tudi to, odmori. 1394 01:08:05,740 --> 01:08:09,350 >> Sčasoma, z dolgo dolgo, ki je 64-bitna vrednost, ne 1395 01:08:09,350 --> 01:08:13,660 32-bitna vrednost, če šteješ previsoka, jo ovijte okoli 0. 1396 01:08:13,660 --> 01:08:16,410 In v tem primeru, se zgodi, da na koncu z negativnim predznakom. 1397 01:08:16,410 --> 01:08:17,550 >> Torej, to je problem. 1398 01:08:17,550 --> 01:08:20,439 In se izkaže, da je to Problem je, ni vse tako skrivnostne. 1399 01:08:20,439 --> 01:08:23,060 Čeprav Sem namenoma je povzročena s temi napakami, 1400 01:08:23,060 --> 01:08:26,149 Izkazalo se vidimo nekako vse okoli nas, ali vsaj nekateri od nas. 1401 01:08:26,149 --> 01:08:28,939 >> Torej, v Lego Star Wars, če ste kdaj igral igro, 1402 01:08:28,939 --> 01:08:33,830 se izkaže, da lahko greš okoli breaking stvari v LEGO svetu, 1403 01:08:33,830 --> 01:08:36,640 in zbiranje kovancev, v bistvu. 1404 01:08:36,640 --> 01:08:39,200 In če ste kdaj igral ta igra tako preveč časa, 1405 01:08:39,200 --> 01:08:42,630 kot je ta neimenovana oseba Tukaj si, skupno število 1406 01:08:42,630 --> 01:08:46,700 kovancev, ki jih lahko zbirajo je, da se zdi, 4 milijarde. 1407 01:08:46,700 --> 01:08:48,240 >> Sedaj, ko se je dejansko zaokrožena. 1408 01:08:48,240 --> 01:08:50,239 Torej LEGO je poskušal da uporabnik stvari prijazen. 1409 01:08:50,239 --> 01:08:53,779 Niso to ravno od 2 do 32 moči, na prejšnji teden. 1410 01:08:53,779 --> 01:08:55,310 Ampak 4 milijarde razlog. 1411 01:08:55,310 --> 01:08:58,979 Zdi se, da na podlagi teh podatkov, da je LEGO, in podjetje, ki 1412 01:08:58,979 --> 01:09:02,624 je to dejansko programsko opremo, odločila da je največje število kovancev 1413 01:09:02,624 --> 01:09:04,540 uporabnik lahko kopičijo je res, 4 milijarde, 1414 01:09:04,540 --> 01:09:12,069 zato, ker so se odločili v svoji kodi Za uporabo ni dolgo dolgo, očitno, 1415 01:09:12,069 --> 01:09:16,140 ampak samo celo število, nepodpisan celo samo pozitivno celo število, čigar 1416 01:09:16,140 --> 01:09:18,089 max vrednost je približno to. 1417 01:09:18,089 --> 01:09:19,380 No, tu je še en smešno eno. 1418 01:09:19,380 --> 01:09:23,500 Torej igra Civilization, ki nekateri od vas morda pozna, z 1419 01:09:23,500 --> 01:09:26,660 se izkaže, da je pred leti tam je bila napaka v tej igri, pri čemer 1420 01:09:26,660 --> 01:09:28,750 če si igral vlogo od Gandhija v igri, 1421 01:09:28,750 --> 01:09:34,020 namesto njega se zelo pacifist, namesto da bi bilo neverjetno, neverjetno 1422 01:09:34,020 --> 01:09:36,399 agresiven, v nekaterih okoliščinah. 1423 01:09:36,399 --> 01:09:40,529 Še posebej, tako da je civilizacija dela je, da če vas, igralec, 1424 01:09:40,529 --> 01:09:44,680 sprejme demokracijo, si agresivnost rezultat dobi 1425 01:09:44,680 --> 01:09:48,130 zmanjšamo z dvema, tako minus minus, nato pa minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> Tako da odštejemo 2 od vaša dejanska ponavljanjem. 1427 01:09:50,569 --> 01:09:56,650 Na žalost, če je vaša ponavljanjem je najprej 1, in jo odštejemo 2 od nje 1428 01:09:56,650 --> 01:09:59,050 po sprejetju demokracije kot Gandhi tukaj morda 1429 01:09:59,050 --> 01:10:02,200 storili, ker je bil zelo passive-- 1 na lestvici od agresivnosti. 1430 01:10:02,200 --> 01:10:04,830 Če pa sprejema demokracijo, potem gre od 1 do negativnega 1. 1431 01:10:04,830 --> 01:10:11,470 >> Žal so bili uporabo nepodpisane številke, 1432 01:10:11,470 --> 01:10:15,400 kar pomeni, da obravnavajo celo negativna številke, kot da bi bili pozitivni. 1433 01:10:15,400 --> 01:10:19,780 In se izkaže, da je pozitiven enako negativen 1, 1434 01:10:19,780 --> 01:10:23,480 V tipičnih računalniških programov, je 255. 1435 01:10:23,480 --> 01:10:27,250 Torej, če Gandhi sprejme demokracija je, in zato 1436 01:10:27,250 --> 01:10:32,470 njegova ocena agresivnost zmanjšala, dejansko zvitkih okoli 255 1437 01:10:32,470 --> 01:10:35,470 in naredi ga je najbolj agresiven lik v igri. 1438 01:10:35,470 --> 01:10:36,930 Tako si lahko v Google pripravljen na to. 1439 01:10:36,930 --> 01:10:39,380 In bilo je, res, An naključno programsko napako, 1440 01:10:39,380 --> 01:10:43,010 ampak to je vstopil precej lore, odkar. 1441 01:10:43,010 --> 01:10:44,360 >> To je vse zabavno in srčkan. 1442 01:10:44,360 --> 01:10:47,760 Bolj grozljivo je, ko dejansko realnih naprave, in ne igre, 1443 01:10:47,760 --> 01:10:48,820 so te iste napake. 1444 01:10:48,820 --> 01:10:54,500 V resnici, le leto dni članek prišel izvedeti o Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> In članek na prvi pogled bere malo Arcane. 1446 01:10:56,850 --> 01:11:01,480 Vendar je to rekel, programska oprema ranljivost v Boeing je 1447 01:11:01,480 --> 01:11:04,790 Novi 787 Dreamliner jet je potencial, da povzroči pilote 1448 01:11:04,790 --> 01:11:07,220 izgubite nadzor nad zrakoplova, po možnosti 1449 01:11:07,220 --> 01:11:11,750 v sredi med letom, je FAA uradniki opozorili letalske družbe v zadnjem času. 1450 01:11:11,750 --> 01:11:14,520 To je bila določitev da je model 787 1451 01:11:14,520 --> 01:11:19,770 letalo, ki je bila sinteza neprekinjeno 248 dni 1452 01:11:19,770 --> 01:11:24,880 lahko izgubijo vso izmenični tok, AC, električne energije zaradi generator 1453 01:11:24,880 --> 01:11:28,892 kontrolne enote, GCUs, hkrati dogaja v ne varen način. 1454 01:11:28,892 --> 01:11:29,850 To je nekako mi izgubili. 1455 01:11:29,850 --> 01:11:35,390 Toda memo navedel, OK, zdaj sem prišel, da pogoj je bila povzročena s programsko opremo 1456 01:11:35,390 --> 01:11:38,590 proti notranji nadzor generator 1457 01:11:38,590 --> 01:11:44,860 enote, ki bo prelivna po 248 dni neprekinjene moči. 1458 01:11:44,860 --> 01:11:47,070 Mi smo to izdajo opazili, da se prepreči izguba 1459 01:11:47,070 --> 01:11:49,300 vse AC električne moč, kar bi lahko povzročilo 1460 01:11:49,300 --> 01:11:50,980 izgubo nadzora nad letalom. 1461 01:11:50,980 --> 01:11:55,380 >> Torej, dobesedno, je nekaj celo, ali kakšno enakovredno vrsto podatkov, 1462 01:11:55,380 --> 01:11:57,960 se uporabljajo v programski opremi v letalu 1463 01:11:57,960 --> 01:12:00,756 da če boste obdržali vaše letalo dovolj dolgo, kar očitno 1464 01:12:00,756 --> 01:12:03,880 se lahko zgodi, če ste samo vožnjo jih nenehno in nikoli ne izvlečete 1465 01:12:03,880 --> 01:12:06,810 vaše letalo, se zdi, ali najem njegove baterije umre, 1466 01:12:06,810 --> 01:12:09,840 bo sčasoma prešteti, in navzdol, in gor in gor in gor in gor. 1467 01:12:09,840 --> 01:12:12,150 >> In, ki jih narava, končna količina pomnilnika 1468 01:12:12,150 --> 01:12:15,880 se preliva, valjanje nazaj nič ali nekaj negativno vrednost, 1469 01:12:15,880 --> 01:12:19,920 stranski učinek, ki je strašljivo resnična resničnost 1470 01:12:19,920 --> 01:12:23,970 da bi morali letalo da se bo ponovno zagnal, učinkovito, 1471 01:12:23,970 --> 01:12:27,290 ali lahko pade, še slabše, saj leti. 1472 01:12:27,290 --> 01:12:29,230 Torej te vrste vprašanj so še vedno z nami, 1473 01:12:29,230 --> 01:12:33,130 even-- to je bilo 2015 članek, toliko bolj zastrašujoče 1474 01:12:33,130 --> 01:12:36,100 ko ne nujno razumeti, ceniti, ali predvideti 1475 01:12:36,100 --> 01:12:38,640 te vrste napak. 1476 01:12:38,640 --> 01:12:42,030 >> Tako se izkaže, da je ena Slaba stvar predstavitev podatkov. 1477 01:12:42,030 --> 01:12:47,080 Izkazalo se je, da so celo plava nekako pomanjkljiv, ker plovci, preveč, 1478 01:12:47,080 --> 01:12:51,440 Predlagal sem se 32 bitov ali morda 64, če uporabljate dvojna. 1479 01:12:51,440 --> 01:12:53,070 Ampak to je še vedno omejena. 1480 01:12:53,070 --> 01:12:57,070 >> In ulov je, da če lahko dal neskončno število številk 1481 01:12:57,070 --> 01:12:59,460 decimalno vejico, ne obstaja način, kako 1482 01:12:59,460 --> 01:13:02,690 more predstavljati vsi možni številke, ki so nas učili 1483 01:13:02,690 --> 01:13:04,990 V razredu lahko šola obstaja na svetu. 1484 01:13:04,990 --> 01:13:08,870 Računalnik, v bistvu, je izberite podskupino teh številk 1485 01:13:08,870 --> 01:13:10,200 natančno predstavljati. 1486 01:13:10,200 --> 01:13:12,450 >> Sedaj lahko računalnik krog morda malo, 1487 01:13:12,450 --> 01:13:17,900 in vam omogočajo, da približno trgovini poljubno število morda morda želeli. 1488 01:13:17,900 --> 01:13:20,940 Ampak samo intuitivno, če vas imajo končno število bitov, 1489 01:13:20,940 --> 01:13:24,560 jih lahko permutiranje le v toliko končnih načinov. 1490 01:13:24,560 --> 01:13:26,570 Tako da ne more uporabljajo končno število 1491 01:13:26,570 --> 01:13:29,880 za permutacije bitov, vzorci ničel in enic, 1492 01:13:29,880 --> 01:13:32,940 da predstavlja neskončno število številk, 1493 01:13:32,940 --> 01:13:37,370 kar kaže, da računalniki morda Zelo dobro je včasih laže nam. 1494 01:13:37,370 --> 01:13:38,770 >> V bistvu, kaj je to. 1495 01:13:38,770 --> 01:13:41,239 Naj gre nazaj v CS50 IDE. 1496 01:13:41,239 --> 01:13:43,030 Naj gredo naprej in ustvariti malo programa 1497 01:13:43,030 --> 01:13:47,940 imenuje nenatančnost, ki kažejo, da računalniki so dejansko nenatančen. 1498 01:13:47,940 --> 01:13:51,910 >> In mi gredo naprej in začeti z nekaj te kode od prej, 1499 01:13:51,910 --> 01:13:53,830 in zdaj pač naslednje. 1500 01:13:53,830 --> 01:14:03,640 Naj gredo naprej in narediti printf, odstotka f, poševnica nazaj n, 1 deljeno z 10. 1501 01:14:03,640 --> 01:14:07,430 Z drugimi besedami, kaj je potopite globlje 1/10, kot je 1 in delijo z 10. 1502 01:14:07,430 --> 01:14:09,760 Seveda, lahko računalnik predstavlja 1/10. 1503 01:14:09,760 --> 01:14:13,620 >> Torej, gremo naprej in da nenatančnosti. 1504 01:14:13,620 --> 01:14:14,390 Pa poglejmo. 1505 01:14:14,390 --> 01:14:16,210 Format določa tip double. 1506 01:14:16,210 --> 01:14:18,160 Toda argument je tipa int. 1507 01:14:18,160 --> 01:14:19,040 Kaj se dogaja? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, zanimiva, tako da je izkušnja od prej. 1509 01:14:21,970 --> 01:14:26,050 Pravim, hej, računalnik oddaja me plovec z odstotnim f. 1510 01:14:26,050 --> 01:14:28,200 Ampak jaz sem ji dala 2 ints. 1511 01:14:28,200 --> 01:14:31,120 Tako se je izkazalo, da lahko popravim To v nekaj načinov. 1512 01:14:31,120 --> 01:14:38,430 >> Lahko bi šele nato enega v 1,0, in 10 na 10,0, kar bi, seveda, 1513 01:14:38,430 --> 01:14:42,390 imeti za posledico pretvorbo jih v floats-- še vedno upam, da 1514 01:14:42,390 --> 01:14:43,180 enako število. 1515 01:14:43,180 --> 01:14:45,880 Ali pa se izkaže, da je nekaj bomo spet videli kmalu. 1516 01:14:45,880 --> 01:14:47,170 Lahko odda številke. 1517 01:14:47,170 --> 01:14:49,880 >> Lahko, z uporabo te oklepajni izraz, lahko rečemo, 1518 01:14:49,880 --> 01:14:52,560 hej, računalnik, bo to 10, kar vem, je int. 1519 01:14:52,560 --> 01:14:54,660 Ampak to zdravljenje, prosim, kot da je plovec. 1520 01:14:54,660 --> 01:14:56,680 Toda ta občutek po nepotrebnem zapletena. 1521 01:14:56,680 --> 01:14:59,040 >> Za naše namene je danes, kaj je samo dobesedno 1522 01:14:59,040 --> 01:15:02,700 Naj jim plavajočo vejico z decimalno vejico, kot je ta. 1523 01:15:02,700 --> 01:15:07,060 Naj gredo naprej in ponovitev, da nenatančnost, dobro, pika poševnica 1524 01:15:07,060 --> 01:15:08,870 nenatančnost, vnesite. 1525 01:15:08,870 --> 01:15:10,990 OK, iščemo dobro. 1526 01:15:10,990 --> 01:15:18,194 >> 1 deljeno z 10, po moji Mac tukaj, je, seveda, 0,100000. 1527 01:15:18,194 --> 01:15:21,360 Zdaj pa sem učil v osnovni šoli je mora biti neskončno število 0-ih. 1528 01:15:21,360 --> 01:15:23,151 Tako da je vsaj poskusiti videti nekatere od teh. 1529 01:15:23,151 --> 01:15:26,770 Izkazalo se je, da je printf malo Ljubitelj še vedno, kot smo jih uporabljali. 1530 01:15:26,770 --> 01:15:30,890 Izkazalo se je, da vam ni treba navesti Samo odstotkov f, ali pa samo odstotka i. 1531 01:15:30,890 --> 01:15:33,830 Lahko dejansko določiti nekateri kontrolni možnosti tukaj. 1532 01:15:33,830 --> 01:15:36,470 >> Natančneje, bom reči, hej, printf, 1533 01:15:36,470 --> 01:15:39,660 dejansko pokaži mi 10 decimalnih mest. 1534 01:15:39,660 --> 01:15:40,820 Tako da izgleda malo čudno. 1535 01:15:40,820 --> 01:15:42,845 Ampak praviš odstotkov, pika, koliko številke 1536 01:15:42,845 --> 01:15:44,970 želite videti po decimalno vejico, nato pa f 1537 01:15:44,970 --> 01:15:48,340 za stanovanje, samo zato, ker je to kakšna dokumentacija pravi. 1538 01:15:48,340 --> 01:15:50,080 Naj gredo naprej in rešiti da. 1539 01:15:50,080 --> 01:15:52,460 >> In opazil tudi, sem že utrujeni od ponovnega pisanja stvari. 1540 01:15:52,460 --> 01:15:55,900 Tako da sem samo nastavitev gor in dol na moje ključe tukaj. 1541 01:15:55,900 --> 01:15:58,710 In če bom vedno udaril, ti vidim vse ukaze 1542 01:15:58,710 --> 01:16:01,090 da sem se, ali nepravilno mrežo. 1543 01:16:01,090 --> 01:16:04,630 >> In bom, da gredo naprej zdaj in dejansko ne uporabljajo, da je očitno. 1544 01:16:04,630 --> 01:16:11,416 Poskrbite, nenatančnost, pika poševnica imprecision-- tako 1545 01:16:11,416 --> 01:16:13,290 kar sem učil v Šola preveri ven. 1546 01:16:13,290 --> 01:16:19,010 Tudi če bi ga natisnete do 10 decimalko ga postavi, res, je 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Ampak veš kaj? 1548 01:16:19,840 --> 01:16:21,150 >> Pojdimo malo požrešen. 1549 01:16:21,150 --> 01:16:23,990 Recimo, kot je, mi pokaži 55 poudarja po decimalko. 1550 01:16:23,990 --> 01:16:26,160 Oglejmo res da to programirati ven za spin. 1551 01:16:26,160 --> 01:16:31,170 Naj remake z znamko nenatančnost, pika poševnica, nenatančnost. 1552 01:16:31,170 --> 01:16:32,390 >> In gremo. 1553 01:16:32,390 --> 01:16:34,420 Vaše otroštvo je bilo laž. 1554 01:16:34,420 --> 01:16:48,410 Očitno je 1 deljeno z 10 je dejansko 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Kaj se dogaja? 1556 01:16:49,740 --> 01:16:53,360 No, se je izkazalo, če nekako videti dovolj daleč v osnovni 1557 01:16:53,360 --> 01:16:55,950 upodobitev tega številka, dejansko 1558 01:16:55,950 --> 01:17:00,400 ni ravno 1/10, ali 0,1 in neskončno število ničel. 1559 01:17:00,400 --> 01:17:01,630 Zdaj, zakaj je to? 1560 01:17:01,630 --> 01:17:06,250 >> Torej, čeprav je to enostavno Številka za nas ljudi, 1 deljeno z 10, 1561 01:17:06,250 --> 01:17:10,910 je še vedno ena izmed neskončno mnogo številke, ki bi lahko izmisliti. 1562 01:17:10,910 --> 01:17:14,490 Vendar računalnik lahko predstavlja le finitely veliko tako številke. 1563 01:17:14,490 --> 01:17:18,710 In tako učinkovito, kaj je Računalnik je pokazal nam je njena najbližja 1564 01:17:18,710 --> 01:17:22,940 približevanje števila želimo, da verjamejo, da je 1/10, 1565 01:17:22,940 --> 01:17:27,760 ali res 0,10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Prej, čeprav je to tako blizu, kot lahko dobite. 1567 01:17:30,425 --> 01:17:32,300 In res, če pogledaš pod pokrovom, 1568 01:17:32,300 --> 01:17:37,050 kot smo tukaj z iskanjem 55 številk po decimalko, 1569 01:17:37,050 --> 01:17:39,990 bomo dejansko videli, da je realnost. 1570 01:17:39,990 --> 01:17:42,610 Zdaj kot prahi, če ste kdaj videl movie-- 1571 01:17:42,610 --> 01:17:45,780 večina od vas verjetno haven't-- vendar pred Superman 3 leti, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor bistvu vzvodom to realnost v njegovi družbi ukrasti veliko 1573 01:17:49,500 --> 01:17:53,500 frakcij in delih penijev, ker je company-- kot se spomnim, 1574 01:17:53,500 --> 01:17:57,210 to je bilo while-- je v bistvu vrgel proč vse, kar ni ustrezalo 1575 01:17:57,210 --> 01:17:58,790 v pojem centov. 1576 01:17:58,790 --> 01:18:01,480 >> Ampak, če dodate do vseh teh drobne, majhne, ​​drobne spet številke, 1577 01:18:01,480 --> 01:18:04,960 in spet, in spet, lahko, kot v njegov primer, da dober znesek denarja. 1578 01:18:04,960 --> 01:18:08,010 >> Istega zamisel je odtrgali s novejši, vendar še zdaj starejši 1579 01:18:08,010 --> 01:18:10,500 Film, ki se imenuje Office Space, kjer so fantje v tem filmu, 1580 01:18:10,500 --> 01:18:13,501 storil isto stvar, je zasrala v celoti, se je končal s tako preveč 1581 01:18:13,501 --> 01:18:14,666 denar na njegov bančni račun. 1582 01:18:14,666 --> 01:18:15,800 Vse je bilo zelo sumljivo. 1583 01:18:15,800 --> 01:18:19,290 Vendar ob koncu dneva, nenatančnost je povsod okoli nas. 1584 01:18:19,290 --> 01:18:22,240 >> In da je tudi mogoče strašljivo zadevo. 1585 01:18:22,240 --> 01:18:25,590 Izkazalo se je, da je Superman 3 in Office Space stran, tam 1586 01:18:25,590 --> 01:18:28,460 more biti nekaj zelo resnična svetovne posledice 1587 01:18:28,460 --> 01:18:32,290 od realnosti nenatančen predstavitev podatkov 1588 01:18:32,290 --> 01:18:34,770 da tudi mi ljudje do ta dan ne nujno 1589 01:18:34,770 --> 01:18:38,230 razumeti kot bi morali, ali pa se spomnimo tako pogosto, kot bi se morali. 1590 01:18:38,230 --> 01:18:42,950 In res, naslednji posnetek je s pogledom na neki zelo resničnem svetu 1591 01:18:42,950 --> 01:18:47,730 Posledice, kaj se zgodi, če ti ne cenijo nenatančnosti, ki 1592 01:18:47,730 --> 01:18:50,065 se lahko zgodi pri zastopanju številk. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEO PREDVAJANJE] 1594 01:18:51,300 --> 01:18:55,620 >> -Computers, Smo vsi prišli do sprejema so pogosto frustrirajuće težave, ki 1595 01:18:55,620 --> 01:19:00,310 iti z them-- hroščev, virusi, in programske opreme glitches, 1596 01:19:00,310 --> 01:19:03,130 za majhne cene za plačilo za udobje. 1597 01:19:03,130 --> 01:19:07,800 Toda v visokotehnoloških in visoke hitrosti vojaških in prostor programske aplikacije, 1598 01:19:07,800 --> 01:19:12,800 najmanjša lahko problem se poveča v katastrofo. 1599 01:19:12,800 --> 01:19:18,900 >> 4. junija 1996, pripravili znanstveniki za začetek brez posadke Ariane 5 raketa. 1600 01:19:18,900 --> 01:19:21,220 To je nosil znanstvena sateliti zasnovan 1601 01:19:21,220 --> 01:19:24,600 določiti natančno, kako združljiva magnetnega polja Zemlji 1602 01:19:24,600 --> 01:19:27,410 s solarnimi vetrovi. 1603 01:19:27,410 --> 01:19:30,800 Raketa je bila zgrajena Evropska vesoljska agencija, 1604 01:19:30,800 --> 01:19:34,370 in dvignjen od njegovega objekta na obali Francoske Gvajane. 1605 01:19:34,370 --> 01:19:37,540 >> -Na Približno 37 sekund v let, so najprej 1606 01:19:37,540 --> 01:19:39,270 opazil, kaj je bilo narobe. 1607 01:19:39,270 --> 01:19:42,250 Šobe so vrtljiva v način, da res ne bi smeli. 1608 01:19:42,250 --> 01:19:46,580 Okoli 40 sekund v letalu, jasno je, da je bilo vozilo v težavah. 1609 01:19:46,580 --> 01:19:48,850 >> In to je, ko so naredili odločitev, da jo uniči. 1610 01:19:48,850 --> 01:19:52,780 varnostni uradnik za območje, s ogromno poguma, pritisnil na gumb, 1611 01:19:52,780 --> 01:19:58,150 razneslo raketo, preden se lahko postal nevarnost za javno varnost. 1612 01:19:58,150 --> 01:20:01,060 >> -To Je bila devica potovanje z Ariane 5. 1613 01:20:01,060 --> 01:20:03,960 In njegovo uničenje je kraj zaradi napako 1614 01:20:03,960 --> 01:20:05,822 vgrajeni v programsko opremo Raketin. 1615 01:20:05,822 --> 01:20:08,280 -V Problem na Ariane je da je bilo število, 1616 01:20:08,280 --> 01:20:10,600 zahteva 64 bitov, da izrazijo. 1617 01:20:10,600 --> 01:20:13,590 In so želeli spremeniti je za 16-bitno številko. 1618 01:20:13,590 --> 01:20:15,610 Domnevali so, da je število se je nikoli ne bo 1619 01:20:15,610 --> 01:20:20,980 zelo velik, da je večina tistih številke v 64-bitno številko bili ničle. 1620 01:20:20,980 --> 01:20:22,440 Da je bilo narobe. 1621 01:20:22,440 --> 01:20:25,060 >> -V Nesposobnost ene program za sprejem 1622 01:20:25,060 --> 01:20:29,510 vrsta števila ustvari druga pa je bila vzrok za neuspeh. 1623 01:20:29,510 --> 01:20:34,350 Razvoj programske opreme je postal zelo drag del nove tehnologije. 1624 01:20:34,350 --> 01:20:38,140 Raketa Ariane so bili zelo uspešna, toliko programske opreme 1625 01:20:38,140 --> 01:20:41,550 ustvarjena za to je tudi uporablja v Ariane 5. 1626 01:20:41,550 --> 01:20:47,940 >> -V Osnovni problem je, da je Ariane 5 je bil hitrejši, pospešen hitreje. 1627 01:20:47,940 --> 01:20:51,450 In programske opreme ni imel predstavljali, da. 1628 01:20:51,450 --> 01:20:55,060 >> -V Uničenje rakete je bila velika finančna katastrofa, 1629 01:20:55,060 --> 01:20:58,790 Vse zaradi napake na minuto programske opreme. 1630 01:20:58,790 --> 01:21:01,210 Vendar to ni bil prvi Težave pretvorbe podatkov čas 1631 01:21:01,210 --> 01:21:04,820 je pestijo sodobne raketno tehnologijo. 1632 01:21:04,820 --> 01:21:08,050 >> -v 1991, s pričetkom v prvi zalivski vojni, 1633 01:21:08,050 --> 01:21:10,570 Patriot raketne doživela podobno vrsto 1634 01:21:10,570 --> 01:21:12,800 problem številka konverzije. 1635 01:21:12,800 --> 01:21:16,090 In kot rezultat, 28 ljudi, 28 ameriških vojakov, 1636 01:21:16,090 --> 01:21:19,080 je bilo ubitih, in o 100 drugih ranjenih, 1637 01:21:19,080 --> 01:21:22,780 ko Patriot, ki naj za zaščito pred prihajajoče rakete Scud, 1638 01:21:22,780 --> 01:21:25,830 ni na ogenj izstrelkov. 1639 01:21:25,830 --> 01:21:31,670 >> Kdaj Irak napadel Kuvajt in Ameriko začela Desert Storm v začetku leta 1991, 1640 01:21:31,670 --> 01:21:35,780 so razporejene Patriot izstrelkov baterije za zaščito Savdsko Arabijo in Izrael 1641 01:21:35,780 --> 01:21:39,230 iraških raketnih napadov Oblaki. 1642 01:21:39,230 --> 01:21:43,810 Patriot je v ZDA srednje območje površina za zračni sistem, izdelan 1643 01:21:43,810 --> 01:21:45,770 ki jih podjetje Raytheon. 1644 01:21:45,770 --> 01:21:52,340 >> -V Velikost Patriot prestreznik Sam je dolga približno približno 20 metrov. 1645 01:21:52,340 --> 01:21:55,230 In tehta približno 2000 kilogramov. 1646 01:21:55,230 --> 01:21:59,320 In to nosi bojno glavo okoli, Mislim, da je približno 150 funtov. 1647 01:21:59,320 --> 01:22:03,930 In bojno glavo sama visoko eksplozivne, ki 1648 01:22:03,930 --> 01:22:07,330 ima delci okoli njega. 1649 01:22:07,330 --> 01:22:11,680 Ohišje bombo je zasnovan tako, da delujejo kot buckshot. 1650 01:22:11,680 --> 01:22:14,110 >> -da Rakete izvajajo štiri na posodi 1651 01:22:14,110 --> 01:22:17,130 in se prenaša po pol prikolico. 1652 01:22:17,130 --> 01:22:24,930 >> -V Patriot protiraketni sistem sega zdaj vsaj 20 let. 1653 01:22:24,930 --> 01:22:28,420 Je bila prvotno namenjena kot obrambni projektil zraka 1654 01:22:28,420 --> 01:22:30,720 sestrelili sovražnik letal. 1655 01:22:30,720 --> 01:22:34,500 V prvi zalivski vojni, ko je prišel, da je vojna s seboj, 1656 01:22:34,500 --> 01:22:39,745 Vojska je želel, da ga uporabi za sestrelili rakete Scud, ne letal. 1657 01:22:39,745 --> 01:22:43,620 >> Iraški Air Force je ne toliko problem. 1658 01:22:43,620 --> 01:22:46,670 Toda vojska skrbelo rakete Scud. 1659 01:22:46,670 --> 01:22:50,170 In tako so poskušali nadgraditi Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Sovražnika projektil potuje Mach 5 1661 01:22:52,800 --> 01:22:55,830 je, da bo dovolj izziv. 1662 01:22:55,830 --> 01:22:58,490 Toda, ko Patriot je planila v službi, 1663 01:22:58,490 --> 01:23:02,860 vojska ni vedela Iraški sprememba, ki je 1664 01:23:02,860 --> 01:23:05,930 njihove rakete Scud skoraj nemogoče zadeti. 1665 01:23:05,930 --> 01:23:10,740 >> Kaj se je zgodilo, so rakete Scud da so prihajali v bile nestabilne. 1666 01:23:10,740 --> 01:23:11,692 Bili so wobbling. 1667 01:23:11,692 --> 01:23:14,910 Razlog za to je Iračani, v red 1668 01:23:14,910 --> 01:23:18,280 da bi dobili 600 kilometrov od 300 kilometer 1669 01:23:18,280 --> 01:23:21,700 Razpon projektil, je teža iz sprednje bojno glavo. 1670 01:23:21,700 --> 01:23:23,390 Naredili so bojne glave vžigalnik. 1671 01:23:23,390 --> 01:23:27,330 >> Sedaj je Patriot je poskušam priti na Oblaki. 1672 01:23:27,330 --> 01:23:30,230 In večino časa, Velika večina časa, 1673 01:23:30,230 --> 01:23:32,940 da bi samo letenje, ki jih Oblaki. 1674 01:23:32,940 --> 01:23:37,260 Ko sistemskih operaterjev Patriot realiziran Patriot zgrešil svoj cilj, 1675 01:23:37,260 --> 01:23:41,690 pa eksplodirajo Patriot je bojno glavo da bi se izognili morebitnim žrtev, če je 1676 01:23:41,690 --> 01:23:44,570 pustimo, da pade na tla. 1677 01:23:44,570 --> 01:23:48,790 >> -To Je tisto, kar večina ljudi je videlo, tiste velike fireballs na nebu, 1678 01:23:48,790 --> 01:23:54,550 in napačno razumljen kot prestreže v Oblaki konic. 1679 01:23:54,550 --> 01:23:56,630 >> -Although V noči nebo, pojavil Patriots 1680 01:23:56,630 --> 01:24:00,370 da bo uspešno uničuje rakete Scud na Dhahran, 1681 01:24:00,370 --> 01:24:03,360 ne more biti nobenega napaka o njeni uspešnosti. 1682 01:24:03,360 --> 01:24:07,970 Tam, radarski sistem Patriot izgubila sled dohodni Oblaki, 1683 01:24:07,970 --> 01:24:10,721 in nikoli ni začela zaradi za programsko opremo pomanjkljivost. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 To je bil Izraelci, ki je prvi odkril da je več sistem on, 1686 01:24:18,940 --> 01:24:22,690 večja čas neskladje postal zaradi uro vgrajenih 1687 01:24:22,690 --> 01:24:24,810 V računalniku sistema. 1688 01:24:24,810 --> 01:24:28,210 >> -O Dva tedna pred tragedija v Dhahran, 1689 01:24:28,210 --> 01:24:30,770 Izraelci poročali, da obrambno ministrstvo 1690 01:24:30,770 --> 01:24:32,590 da je bil sistem izgublja časa. 1691 01:24:32,590 --> 01:24:35,360 Po približno osmih urah ali delovanje, so opazili, da je sistem 1692 01:24:35,360 --> 01:24:37,720 je postala opazno manj natančna. 1693 01:24:37,720 --> 01:24:41,900 Obrambno ministrstvo odzvala z povedal vse baterije Patriot 1694 01:24:41,900 --> 01:24:44,950 ne pusti sistemov o za dolgo časa. 1695 01:24:44,950 --> 01:24:49,160 Oni nikoli rekel kaj dolgo časa was-- osem ur, 10 ur, 1000 ur. 1696 01:24:49,160 --> 01:24:51,360 Nihče ni vedel. 1697 01:24:51,360 --> 01:24:53,380 >> -V Patriot baterije nameščene na vojašnici 1698 01:24:53,380 --> 01:24:58,350 na Dhahran in njegovo neustrezno notranje Ura je bila več kot 100 ur 1699 01:24:58,350 --> 01:25:01,670 v noči na 25. februar. 1700 01:25:01,670 --> 01:25:05,917 >> bager -To čas z natančnostjo približno desetinko sekunde. 1701 01:25:05,917 --> 01:25:08,000 Zdaj, desetinko sekunde je zanimiva številka, 1702 01:25:08,000 --> 01:25:11,920 saj ne more biti izražena v binarni natančno, kar 1703 01:25:11,920 --> 01:25:16,820 pomeni, da ne more biti izražena natančno V vsaki sodobni digitalni računalnik. 1704 01:25:16,820 --> 01:25:18,540 To je težko verjeti. 1705 01:25:18,540 --> 01:25:21,210 >> Toda ta način uporabljajo kot primer. 1706 01:25:21,210 --> 01:25:23,540 Vzemimo številka ena tretjina. 1707 01:25:23,540 --> 01:25:27,350 Ena tretjina ne more biti izraženo v decimalni natančno. 1708 01:25:27,350 --> 01:25:32,080 Ena tretjina je 0,333 dogaja v neskončnost. 1709 01:25:32,080 --> 01:25:36,480 >> Ni načina, da to, da z absolutna natančnost na decimalke. 1710 01:25:36,480 --> 01:25:39,560 To je točno to vrsto problema kar se je zgodilo v Patriot. 1711 01:25:39,560 --> 01:25:44,100 Dlje sistem tekel je slabše je postala napaka čas. 1712 01:25:44,100 --> 01:25:48,890 >> -Po 100 urah delovanja se je Napaka v času je bila le približno ena tretjina 1713 01:25:48,890 --> 01:25:50,600 sekunde. 1714 01:25:50,600 --> 01:25:54,210 Ampak v smislu ciljanje projektil potuje Mach 5, 1715 01:25:54,210 --> 01:25:58,710 je povzročilo sledenje Napaka več kot 600 metrov. 1716 01:25:58,710 --> 01:26:02,120 To bi bila usodna napaka za vojake na kaj 1717 01:26:02,120 --> 01:26:08,940 zgodilo se začela Scud je bil zazna prvih satelitov opozarjanja 1718 01:26:08,940 --> 01:26:12,860 in so vedeli, da je Scud ki prihajajo v njihov splošni smeri. 1719 01:26:12,860 --> 01:26:15,320 Niso vedeli, kje je prišel. 1720 01:26:15,320 --> 01:26:18,250 >> -To Je sedaj do radarja komponenta sistema Patriot 1721 01:26:18,250 --> 01:26:23,190 brani Dhahran najti in obdržati steza na dohodne sovražnik izstrelkov. 1722 01:26:23,190 --> 01:26:24,609 >> -V Radar je bil zelo pameten. 1723 01:26:24,609 --> 01:26:26,650 To bi dejansko slediti položaj Oblaki, 1724 01:26:26,650 --> 01:26:30,350 in napovedujejo, kjer verjetno bo naslednjič, ko radarska poslala 1725 01:26:30,350 --> 01:26:31,420 pulz ven. 1726 01:26:31,420 --> 01:26:33,110 To je bil imenovan vrsto vrata. 1727 01:26:33,110 --> 01:26:37,660 >> -Potem, Ko Patriot odloči, dovolj časa je 1728 01:26:37,660 --> 01:26:42,450 opravil, da se vrnete in preverite naslednji lokacija za to zaznani predmet, 1729 01:26:42,450 --> 01:26:43,600 gre nazaj. 1730 01:26:43,600 --> 01:26:48,650 Torej, ko se je vrnil v napačno mesto, potem ne vidi nobenega predmeta. 1731 01:26:48,650 --> 01:26:52,160 In če se odloči, da ni bilo objekt, je bilo lažno zaznavanje, 1732 01:26:52,160 --> 01:26:53,930 in pade na stezo. 1733 01:26:53,930 --> 01:26:57,030 >> -V Dohodni Scud izginil iz radarskega zaslona. 1734 01:26:57,030 --> 01:27:00,260 In sekund kasneje, je trčil v vojašnice. 1735 01:27:00,260 --> 01:27:06,150 Scud ubitih 28, je bil zadnji ena odpustili med prvo zalivsko vojno. 1736 01:27:06,150 --> 01:27:11,960 >> Tragično je, posodobljeno programsko opremo prispel na Dhahran naslednji dan. 1737 01:27:11,960 --> 01:27:14,930 Napaka programske opreme je imel bil določen, zapiranje 1738 01:27:14,930 --> 01:27:19,806 eno poglavje v težavah Zgodovina Patriot raket. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEO PREDVAJANJE] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. Malan: Torej, to je vse, da bi pravijo, da teh vprašanj prelivom 1741 01:27:23,520 --> 01:27:25,860 in nenatančnost so vse preveč resnično. 1742 01:27:25,860 --> 01:27:26,920 Torej, kako smo tu? 1743 01:27:26,920 --> 01:27:28,895 Začeli smo s samo govorimo o printf. 1744 01:27:28,895 --> 01:27:31,270 Tudi ta funkcija natisne nekaj na zaslonu, 1745 01:27:31,270 --> 01:27:33,450 in smo uvedli pozneje nekaj drugih funkcij 1746 01:27:33,450 --> 01:27:34,945 Iz tako imenovanega knjižnice CS50 je. 1747 01:27:34,945 --> 01:27:36,910 In bomo še naprej glej ti pravočasno. 1748 01:27:36,910 --> 01:27:40,760 In mi, še posebej, ki se uporablja get niz, in dobili int, in zdaj tudi dobili float, 1749 01:27:40,760 --> 01:27:44,410 in še drugi, še vedno bomo naleteli in uporabiti sami kmalu. 1750 01:27:44,410 --> 01:27:47,220 >> Ampak včasih, imajo smo že videli potrebo 1751 01:27:47,220 --> 01:27:50,520 za shranjevanje, kaj te funkcije roko nazaj? 1752 01:27:50,520 --> 01:27:52,920 Oni izročiti nas zadnji niz, ali int ali plovec. 1753 01:27:52,920 --> 01:27:56,070 In včasih moramo postaviti, da niz, ali int ali float, nekje. 1754 01:27:56,070 --> 01:28:00,100 >> In za shranjevanje teh stvari, se spomni samo kot v Scratch, imamo spremenljivke. 1755 01:28:00,100 --> 01:28:03,260 Toda za razliko od nič, V C smo dejanske vrste 1756 01:28:03,260 --> 01:28:05,530 od variables-- podatkov vrste, več generally-- 1757 01:28:05,530 --> 01:28:08,640 med njimi, niz, int, A float, in ti drugi še vedno. 1758 01:28:08,640 --> 01:28:12,321 >> In tako, ko izjavljamo spremenljivke v C, bomo morali prijaviti svoje vrste podatkov. 1759 01:28:12,321 --> 01:28:14,820 To ni nekaj, kar bom storiti kasneje v semestru 1760 01:28:14,820 --> 01:28:16,810 kot smo prehod v druge jezike. 1761 01:28:16,810 --> 01:28:19,610 Ampak za zdaj, ne potrebujemo da a priori vnaprej, 1762 01:28:19,610 --> 01:28:24,370 razložiti z računalnikom, kaj tip spremenljivke želimo, da bi nas. 1763 01:28:24,370 --> 01:28:27,290 >> Zdaj, medtem, tiskanje tiste vrste podatkovnih tipov, 1764 01:28:27,290 --> 01:28:29,570 moramo povedati, printf, kaj naj pričakujem. 1765 01:28:29,570 --> 01:28:32,450 In smo videli odstotkov ov za godala, in odstotek i za cela števila, 1766 01:28:32,450 --> 01:28:33,790 in nekaj je že drugi. 1767 01:28:33,790 --> 01:28:37,237 In to so samo zahteve za vizualno predstavitev 1768 01:28:37,237 --> 01:28:38,070 teh informacij. 1769 01:28:38,070 --> 01:28:42,080 >> In vsak od teh lahko dejansko parametriziramo ali tweaked na nek način, 1770 01:28:42,080 --> 01:28:45,370 Če želite nadaljnje nadzor tip proizvodnje, da boste dobili. 1771 01:28:45,370 --> 01:28:49,604 In v resnici, se izkaže, da ni le obstaja poševnica nazaj n za novo linijo. 1772 01:28:49,604 --> 01:28:52,520 Še nekaj se imenuje poševnica nazaj r za enter, ki 1773 01:28:52,520 --> 01:28:54,360 bolj spominja na stara šola pisalni stroj, 1774 01:28:54,360 --> 01:28:57,690 in tudi Windows uporablja že vrsto let. 1775 01:28:57,690 --> 01:28:59,690 >> Tam je poševnica nazaj t za kartice. 1776 01:28:59,690 --> 01:29:03,170 Izkazalo se je, da če hočeš dvojni narekovaj znotraj niza, 1777 01:29:03,170 --> 01:29:05,000 odpoklic, ki smo jih uporablja double double quote 1778 01:29:05,000 --> 01:29:07,900 quote na levi in ​​desni strani koncih naše strune doslej. 1779 01:29:07,900 --> 01:29:09,420 Tako se zdi, da motila. 1780 01:29:09,420 --> 01:29:12,503 >> Če želite, da dvojni narekovaj v Sredi string-- in, seveda, 1781 01:29:12,503 --> 01:29:13,670 je zmedeno videti. 1782 01:29:13,670 --> 01:29:17,120 In tako boste morali pobegniti, da bi govorijo, dvojni citat z nečim 1783 01:29:17,120 --> 01:29:18,860 kot je, dobesedno, poševnica nazaj dvojno ponudbo. 1784 01:29:18,860 --> 01:29:20,230 In tu je še nekaj drugega. 1785 01:29:20,230 --> 01:29:24,540 In bomo videli več od tistih, v dejanski uporabi pred dolgo. 1786 01:29:24,540 --> 01:29:27,930 >> Torej, kaj je zdaj prehod iz podatkov, in zastopanje, 1787 01:29:27,930 --> 01:29:30,820 in aritmetične izvajalci, vsi katerega nam je dal neko stavbo 1788 01:29:30,820 --> 01:29:32,070 bloki, s katerimi se igra. 1789 01:29:32,070 --> 01:29:34,481 Ampak zdaj pa je dejansko dal nam ostali besednjaku 1790 01:29:34,481 --> 01:29:36,230 da smo že imeli prejšnji teden z Scratch 1791 01:29:36,230 --> 01:29:39,350 tako, da pogled na nekatere druge konstrukti v C- ne vse od njih. 1792 01:29:39,350 --> 01:29:41,680 Toda ideje smo nadeja res samo 1793 01:29:41,680 --> 01:29:45,610 poudariti prevod iz en jezik, Scratch, v drugo, C. 1794 01:29:45,610 --> 01:29:48,470 >> In čez čas, bomo dvignili več orodij za naše orodij, 1795 01:29:48,470 --> 01:29:49,820 tako rekoč, sintaktično. 1796 01:29:49,820 --> 01:29:54,190 In, seveda, boste videli, da so ideje so zdaj precej pozna iz prejšnjega tedna. 1797 01:29:54,190 --> 01:29:55,200 Torej, kaj je to. 1798 01:29:55,200 --> 01:29:58,870 >> Gremo naprej in bič gor program da dejansko uporablja nekatere izraze, 1799 01:29:58,870 --> 01:30:00,720 logično izraz. 1800 01:30:00,720 --> 01:30:02,810 Naj gredo naprej tukaj in ustvariti novo datoteko. 1801 01:30:02,810 --> 01:30:06,090 Poklical bom to condition.c. 1802 01:30:06,090 --> 01:30:09,350 >> Naj gredo naprej in vključujejo knjižnico CS50. 1803 01:30:09,350 --> 01:30:12,640 In mi gredo naprej in vključujejo Standard IO.h za naše funkcije, 1804 01:30:12,640 --> 01:30:14,690 in printf in bolj oz. 1805 01:30:14,690 --> 01:30:18,900 Naj dam to boilerplate za int main praznina, ki razlaga, da bomo 1806 01:30:18,900 --> 01:30:20,360 vrnil v prihodnosti. 1807 01:30:20,360 --> 01:30:23,820 >> Zdaj pa mi gredo naprej in da sam int preko get int. 1808 01:30:23,820 --> 01:30:25,970 Potem pa me je iti naprej in to. 1809 01:30:25,970 --> 01:30:30,150 Hočem reči, če i less-- dovolimo razlikovati med pozitivno, negativno, 1810 01:30:30,150 --> 01:30:31,260 ali nič vrednosti. 1811 01:30:31,260 --> 01:30:36,630 >> Torej, če i je manj kot nič, pusti me samo še ta program preprosto reči, 1812 01:30:36,630 --> 01:30:42,370 negativen, poševnica nazaj n, ostalo če i je večja od nič. 1813 01:30:42,370 --> 01:30:47,030 Sedaj sem seveda reči printf pozitivno, poševnice nazaj n. 1814 01:30:47,030 --> 01:30:50,690 In potem še if-- sem lahko to naredil. 1815 01:30:50,690 --> 01:30:53,410 >> Lahko bi naredil, če sem enak 0. 1816 01:30:53,410 --> 01:30:55,840 Ampak sem se kar na Vsaj ena napaka že. 1817 01:30:55,840 --> 01:30:59,480 Spomnimo se, da je enačaj ni enako, kot smo ljudje vedeli. 1818 01:30:59,480 --> 01:31:01,010 >> Ampak to je upravljavec naloga. 1819 01:31:01,010 --> 01:31:05,640 In ne želimo, da se 0 na desno in ga v i na levi strani. 1820 01:31:05,640 --> 01:31:11,810 Tako bi se izognili te zmede, ali morda zloraba enačaj, 1821 01:31:11,810 --> 01:31:14,740 ljudje odločili, pred nekaj leti da v številnih programskih jezikih 1822 01:31:14,740 --> 01:31:18,000 če želite preveriti za enakost med levo in desno, 1823 01:31:18,000 --> 01:31:19,635 ste dejansko uporabili enaka Rezultat. 1824 01:31:19,635 --> 01:31:21,010 Torej, ste zadeli v enačajem dvakrat. 1825 01:31:21,010 --> 01:31:25,600 Ko želite dodeliti iz desne proti levi, uporabljate eno enačaj. 1826 01:31:25,600 --> 01:31:29,360 Torej, kar lahko storimo this-- ostalo če sem enaka enaka nič. 1827 01:31:29,360 --> 01:31:31,710 >> Lahko bi potem šel in Odprem zavite oklepaje, 1828 01:31:31,710 --> 01:31:36,087 in pravijo, printf 0, poševnica nazaj n, storjeno. 1829 01:31:36,087 --> 01:31:38,170 Ampak zapomni si, kako te vilice v cestnem prometu lahko delo. 1830 01:31:38,170 --> 01:31:39,836 In, res, samo pomislite logike. 1831 01:31:39,836 --> 01:31:41,510 i je številka. 1832 01:31:41,510 --> 01:31:43,320 To je število, posebej. 1833 01:31:43,320 --> 01:31:48,600 In to pomeni, da se dogaja, da je manj kot 0 ali več kot 0 ali 0. 1834 01:31:48,600 --> 01:31:51,600 Tako da je nekako to implicitno privzeto tako. 1835 01:31:51,600 --> 01:31:54,920 >> In tako bi lahko, tako kot Scratch, odpravijo z else if, 1836 01:31:54,920 --> 01:31:55,747 in samo reči drugega. 1837 01:31:55,747 --> 01:31:57,830 Logično je, da če vam programer vedeti, da je le 1838 01:31:57,830 --> 01:32:01,635 Tri žlice v katerem scenarij fall-- prvi, 1839 01:32:01,635 --> 01:32:03,510 druga ali tretja V case-- to ne 1840 01:32:03,510 --> 01:32:07,100 ukvarjati z dodajanjem dodatne natančnost in dodatno logika tam. 1841 01:32:07,100 --> 01:32:09,690 Samo pojdi naprej s privzeto tem primeru od drugega. 1842 01:32:09,690 --> 01:32:11,950 >> Zdaj pa gremo naprej Po shranjevanju to, da 1843 01:32:11,950 --> 01:32:15,760 Pogoji dot poševnica conditions-- ni veliko uporabniški vmesnik, 1844 01:32:15,760 --> 01:32:18,914 ker nisem narekujejo uporabnik, kot sem že prej omenil. 1845 01:32:18,914 --> 01:32:19,580 Ampak to je v redu. 1846 01:32:19,580 --> 01:32:20,454 Bomo bo enostavno. 1847 01:32:20,454 --> 01:32:21,890 Poskusimo številko 42. 1848 01:32:21,890 --> 01:32:23,240 In to je pozitivno. 1849 01:32:23,240 --> 01:32:26,120 Poskusimo številko negativno 42, negativni. 1850 01:32:26,120 --> 01:32:28,244 >> Poskusimo vrednost 0. 1851 01:32:28,244 --> 01:32:29,160 In, seveda, da deluje. 1852 01:32:29,160 --> 01:32:33,900 Zdaj, boste videli s težavami pred dolge, testiranje stvari trikrat, 1853 01:32:33,900 --> 01:32:34,980 Verjetno ne zadošča. 1854 01:32:34,980 --> 01:32:37,438 Verjetno ste želeli preizkusiti nekatere Večje število nekatere manjše 1855 01:32:37,438 --> 01:32:40,520 številke, nekatere kotiček primeri, kot je bomo prišli, da jih opisali. 1856 01:32:40,520 --> 01:32:42,500 >> Vendar za zdaj, to je zelo preprost program. 1857 01:32:42,500 --> 01:32:45,160 In sem prepričan, logično, da pade v treh primerih. 1858 01:32:45,160 --> 01:32:49,360 In, seveda, čeprav smo samo osredotočila na morebitne slabosti 1859 01:32:49,360 --> 01:32:53,480 nenatančen in preliva v realnost, kjer je veliko težav CS50 je, 1860 01:32:53,480 --> 01:32:56,000 mi ne bo treba skrbeti o, ves čas, 1861 01:32:56,000 --> 01:32:59,050 ta vprašanja prelivom in nenatančnost, saj je v resnici, v C, 1862 01:32:59,050 --> 01:33:01,889 da je dejansko ni vse, enostavno bi se izognili te stvari. 1863 01:33:01,889 --> 01:33:04,180 Če želite prešteti večji in večji in večji, 1864 01:33:04,180 --> 01:33:07,510 se izkaže, da so vas tehnike Lahko uporabite, ki pogosto vključujejo stvari, imenovane 1865 01:33:07,510 --> 01:33:11,240 knjižnice, zbirke kode, da druge ljudi, je zapisal, da ga lahko uporabite, 1866 01:33:11,240 --> 01:33:13,910 in druge jezike, kot Java in drugi, dejansko 1867 01:33:13,910 --> 01:33:15,800 bi bilo veliko lažje računati še višje. 1868 01:33:15,800 --> 01:33:19,810 Torej, res je nekatere od teh nevarnosti odvisne od jezika, ki ga uporabljate. 1869 01:33:19,810 --> 01:33:22,710 In v prihodnjih tednih bomo videli, kako nevarno C res 1870 01:33:22,710 --> 01:33:24,950 lahko, če ga ne uporablja pravilno. 1871 01:33:24,950 --> 01:33:27,610 Toda od tam, in z Python in JavaScript bo 1872 01:33:27,610 --> 01:33:32,620 smo plast na nekatere dodatne zaščite, in vodijo manj teh tveganj. 1873 01:33:32,620 --> 01:33:35,820 >> Torej, kaj je, da malo bolj Zanimiva logika v našem programu. 1874 01:33:35,820 --> 01:33:39,110 Zato naj gredo naprej in ustvariti program, imenovan Logična 1875 01:33:39,110 --> 01:33:43,804 samo zato, da lahko igram z nekaterimi Dejanska logika, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Bom samo kopirajte in prilepite nekaj koda od prej, tako da sem dobil nazaj 1877 01:33:46,870 --> 01:33:49,950 za to lepo izhodišče. 1878 01:33:49,950 --> 01:33:53,980 >> Naj mi tokrat naredil char C. Jaz sem dogaja, da to ime C 1879 01:33:53,980 --> 01:33:58,510 samo zato, ker je to običajna, dobili znak od uporabnika. 1880 01:33:58,510 --> 01:34:00,730 In kaj je pretvarjati, da Sem izvedbenih del 1881 01:34:00,730 --> 01:34:04,130 te Rm programa je odstraniti Program pred tem pozove uporabnika 1882 01:34:04,130 --> 01:34:05,400 odstraniti datoteko. 1883 01:34:05,400 --> 01:34:06,750 Kako bi lahko to naredila? 1884 01:34:06,750 --> 01:34:11,090 >> Hočem reči, če je C enak enaka, citiram konec citata, 1885 01:34:11,090 --> 01:34:16,304 y, potem pa grem, da prevzame da je uporabnik izbral ja. 1886 01:34:16,304 --> 01:34:17,470 Jaz sem le, da bo tiskanje ja. 1887 01:34:17,470 --> 01:34:19,440 Če bi bili dejansko pisanje program odstranitev, 1888 01:34:19,440 --> 01:34:21,420 bomo mogli odstraniti datoteke z več vrstic kode. 1889 01:34:21,420 --> 01:34:22,461 Vendar bomo bo enostavno. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else if c enaka enaka N- in tukaj, vam bom povedal, 1892 01:34:31,250 --> 01:34:32,980 Uporabnik mora imeti pomenilo št. 1893 01:34:32,980 --> 01:34:34,360 In potem pa, veste kaj? 1894 01:34:34,360 --> 01:34:36,200 Ne vem, kaj Uporabnik bo tip. 1895 01:34:36,200 --> 01:34:38,533 Tako da sem samo reči, da je da je napaka, ne glede na 1896 01:34:38,533 --> 01:34:40,070 on ali ona dejansko vnesli. 1897 01:34:40,070 --> 01:34:41,180 >> Torej, kaj se dogaja? 1898 01:34:41,180 --> 01:34:44,530 Obstaja bistvena razlika v primerjavi s tisto, kar sem naredil v preteklosti. 1899 01:34:44,530 --> 01:34:49,300 Dvojni narekovaji, dvojni narekovaji, dvojni citati, in še eno osebo, citati, 1900 01:34:49,300 --> 01:34:50,170 enojni narekovaji. 1901 01:34:50,170 --> 01:34:52,860 Izkazalo se je v C, da se pri želite napisati niz, 1902 01:34:52,860 --> 01:34:56,680 vam uporabite dvojne narekovaje, tako kot smo jih uporabljali ves ta čas z printf. 1903 01:34:56,680 --> 01:35:02,030 >> Toda, če želite, da se ukvarjajo s samo en znak, tako imenovani char, 1904 01:35:02,030 --> 01:35:03,780 potem dejansko uporabo enojne narekovaje. 1905 01:35:03,780 --> 01:35:05,450 Tisti, ki ste že programirana prej, morda nimate 1906 01:35:05,450 --> 01:35:07,850 moral skrbeti za to Razlika v določenih jezikih. 1907 01:35:07,850 --> 01:35:09,450 V C, to ne zadeva. 1908 01:35:09,450 --> 01:35:12,560 In tako, ko sem dobil char in želim za primerjavo, da je char uporabo pogoja je enako 1909 01:35:12,560 --> 01:35:18,350 enaka do neke pisma kot y ali n, jaz, res, morajo imeti enojne narekovaje. 1910 01:35:18,350 --> 01:35:19,770 >> Zdaj pa gremo naprej in to. 1911 01:35:19,770 --> 01:35:26,180 Gremo naprej in ne predstavljajo logične dot poševnica logično. 1912 01:35:26,180 --> 01:35:27,305 In zdaj sem potrditvi. 1913 01:35:27,305 --> 01:35:30,638 Torej, verjetno, boljšo uporabniško izkušnjo bi mi dejansko pove, kaj storiti tukaj. 1914 01:35:30,638 --> 01:35:33,030 Ampak bom le slepo pravijo, y za ja, v redu, lepo. 1915 01:35:33,030 --> 01:35:35,780 >> Kaj je to spet teči, n za ne, lepo. 1916 01:35:35,780 --> 01:35:39,610 Recimo tako kot nekatere ljudi, ki jih poznam, moje Caps Lock je na vse prepogosto. 1917 01:35:39,610 --> 01:35:43,740 Zato sem naredil kapitala Y, vstop, napako. 1918 01:35:43,740 --> 01:35:46,130 OK, to ni ravno tisto, kar sem pričakoval. 1919 01:35:46,130 --> 01:35:48,170 Dejansko je računalnik počne dobesedno kaj 1920 01:35:48,170 --> 01:35:51,794 je rekel, da do-- preverjanje male črke y in male črke n. 1921 01:35:51,794 --> 01:35:53,960 To ne počutim kot dobro uporabniška izkušnja, čeprav. 1922 01:35:53,960 --> 01:35:59,010 Naj vprašam in sprejemanje bodisi z malimi črkami ali velikimi črkami. 1923 01:35:59,010 --> 01:36:02,090 Tako se je izkazalo, boste morda želeli reči nekaj podobnega v Scratch, 1924 01:36:02,090 --> 01:36:08,150 kot dobesedno ali C enaka enako kapitalsko sam citiran y. 1925 01:36:08,150 --> 01:36:11,400 Izkazalo se je, C nima to dobesedno ključno besedo ali. 1926 01:36:11,400 --> 01:36:12,880 >> Vendar pa imajo dve navpični palici. 1927 01:36:12,880 --> 01:36:15,463 Moraš imeti Shift običajno, Če uporabljate ameriško tipkovnico, 1928 01:36:15,463 --> 01:36:18,910 in dvignil navpično črto Ključ nad vrnitvi ključa. 1929 01:36:18,910 --> 01:36:22,410 Toda to navpična vrstica navpična vrstica pomeni ali. 1930 01:36:22,410 --> 01:36:26,220 >> Če, nasprotno, smo želeli reči in, kot v nič, 1931 01:36:26,220 --> 01:36:28,180 kar lahko storimo ampersand 'znak. 1932 01:36:28,180 --> 01:36:31,330 To nima nobenega logičnega smisla tukaj, saj človek ne bi morebiti 1933 01:36:31,330 --> 01:36:37,110 so vnesli obe y in male črke y in kapitala Y kot enak značaj. 1934 01:36:37,110 --> 01:36:39,470 Torej, ali je tisto, kar bomo tukaj. 1935 01:36:39,470 --> 01:36:46,280 >> Torej, če bi to naredili v obeh mestih, ali c enako je enak kapital N, zdaj ponovi, 1936 01:36:46,280 --> 01:36:49,390 make logično, ponovite logično. 1937 01:36:49,390 --> 01:36:51,200 Sedaj lahko vnesete y. 1938 01:36:51,200 --> 01:36:53,920 In lahko še enkrat z kapitala Y, ali kapitala N. 1939 01:36:53,920 --> 01:36:56,630 In lahko dodam v dodatni kombinacije še. 1940 01:36:56,630 --> 01:36:58,810 >> Torej, to je logična Program kolikor zdaj 1941 01:36:58,810 --> 01:37:01,940 Jaz preverjanje logično za Ta vrednost ali ta vrednost. 1942 01:37:01,940 --> 01:37:06,420 In mi ne bi bilo treba nujno, prišli do dva več investicijskih skladov, ali drugje-jev. 1943 01:37:06,420 --> 01:37:09,960 Lahko dejansko združujejo nekatere izmed povezane logiko skupaj na ta način. 1944 01:37:09,960 --> 01:37:11,950 Torej to ne bi bilo bolje namenjen zgolj 1945 01:37:11,950 --> 01:37:17,490 rekel, če je C enak malo črko y, tiskanje ja, sicer, če c enaka kapitala Y, 1946 01:37:17,490 --> 01:37:20,074 tiskanje ja, sicer, če c enaka lower-- z drugimi besedami, 1947 01:37:20,074 --> 01:37:21,990 vam ni treba imeti več veje. 1948 01:37:21,990 --> 01:37:28,840 Lahko združite ekvivalenta veje logično, so na ta način. 1949 01:37:28,840 --> 01:37:34,150 >> Tako da je lahko pogled na samo eno Končni sestavino, ena končni konstrukt, 1950 01:37:34,150 --> 01:37:34,847 da C omogoča. 1951 01:37:34,847 --> 01:37:36,930 In se bomo vrnili v Prihodnost drugim še vedno. 1952 01:37:36,930 --> 01:37:41,400 In potem bomo skleniti z iskanjem temperaturo pravilnost code-- 1953 01:37:41,400 --> 01:37:46,070 dobili kodo work--, vendar se načrt kode in posadili tiste semena že na začetku. 1954 01:37:46,070 --> 01:37:51,337 >> Zato naj gredo naprej in odpreti novo datoteko tukaj. 1955 01:37:51,337 --> 01:37:51,920 Veš kaj? 1956 01:37:51,920 --> 01:37:54,450 Bom ponovno izvajati da isti program, 1957 01:37:54,450 --> 01:37:55,940 vendar z drugačnim konstrukt. 1958 01:37:55,940 --> 01:38:00,110 >> Torej, mi naj hitro dal sam dostop do vključiti CS50.h 1959 01:38:00,110 --> 01:38:04,150 Za knjižnice CS50, Standard Io.h za printf. 1960 01:38:04,150 --> 01:38:06,510 Daj mi moj int glavni praznino. 1961 01:38:06,510 --> 01:38:09,310 In potem sem, kaj grem naprej in to. 1962 01:38:09,310 --> 01:38:12,010 >> Char c dobi dobili char, tako kot prej. 1963 01:38:12,010 --> 01:38:16,770 In bom uporabiti nov konstrukt now-- stikalo, na kakšen značaj? 1964 01:38:16,770 --> 01:38:19,820 Tako stikalo je nekako kot preklapljanje vlaku skladbe. 1965 01:38:19,820 --> 01:38:22,070 Ali pa res, da je vrsta if drugega, če drugega, če 1966 01:38:22,070 --> 01:38:23,980 vendar napisana nekoliko drugače. 1967 01:38:23,980 --> 01:38:25,490 >> Stikalo izgleda takole. 1968 01:38:25,490 --> 01:38:29,060 Imate stikalo, in nato, kaj znak ali številko, ki jo želite pogledati, 1969 01:38:29,060 --> 01:38:32,000 potem nekateri zaviti oklepaji kot v Scratch, samo reči narediti te stvari. 1970 01:38:32,000 --> 01:38:33,480 In potem imate različne primere. 1971 01:38:33,480 --> 01:38:34,830 >> Saj ne uporabljajte, če in drugje. 1972 01:38:34,830 --> 01:38:37,050 Dobesedno uporabiti primer besedo. 1973 01:38:37,050 --> 01:38:38,790 In bi rekli kaj takega. 1974 01:38:38,790 --> 01:38:43,820 >> Torej, v primeru malimi črkami y, ali v primeru Y kapitala, 1975 01:38:43,820 --> 01:38:47,350 gredo naprej in natisniti ja. 1976 01:38:47,350 --> 01:38:49,020 In potem izbruhnejo stikala. 1977 01:38:49,020 --> 01:38:49,580 To je to. 1978 01:38:49,580 --> 01:38:50,880 Končali smo. 1979 01:38:50,880 --> 01:38:57,270 >> Else, če se tako izrazim, male črke n, ali kapitala N, 1980 01:38:57,270 --> 01:39:02,560 potem pa pojdi naprej in tiskanje ven no, nato pa prekinil. 1981 01:39:02,560 --> 01:39:08,022 Else-- in ta vrsta je privzeto primeru indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 in samo za dober ukrep, čeprav logično je ta odmor ni potreben 1983 01:39:10,980 --> 01:39:12,896 zato, ker smo na koncu stikala vseeno, 1984 01:39:12,896 --> 01:39:14,520 Zdaj sem rešil iz stikala. 1985 01:39:14,520 --> 01:39:16,280 Torej, to izgleda malo drugače. 1986 01:39:16,280 --> 01:39:18,272 >> Ampak, je logično, da je dejansko enakovredni. 1987 01:39:18,272 --> 01:39:19,980 In zakaj bi uporabili eden na drugega? 1988 01:39:19,980 --> 01:39:23,220 Včasih, samo osebne preference, včasih estetika, 1989 01:39:23,220 --> 01:39:25,420 Če pogledam na to Zdaj, nekaj 1990 01:39:25,420 --> 01:39:27,510 treba povedati, da berljivost te kode. 1991 01:39:27,510 --> 01:39:30,690 Mislim, ne moti dejstvo, da je to koda je novo, da mnogi od nas v sobi. 1992 01:39:30,690 --> 01:39:33,515 >> Ampak to samo vrsta je precej. 1993 01:39:33,515 --> 01:39:37,760 Vidiš male y, kapitala Y, male črke n, kapital N privzeto, 1994 01:39:37,760 --> 01:39:40,150 je le nekako skoči v vas na način, 1995 01:39:40,150 --> 01:39:42,200 da je verjetno, morda prejšnji primer 1996 01:39:42,200 --> 01:39:45,780 z investicijskih skladov, vertikalne palice, in else-jev, morda ni. 1997 01:39:45,780 --> 01:39:51,600 Torej je to res stvar osebne izbira, res, ali berljivost, 1998 01:39:51,600 --> 01:39:52,360 kode. 1999 01:39:52,360 --> 01:39:58,230 >> Toda v smislu funkcionalnosti, naj me iti naprej in narediti stikalo, dot poševnica 2000 01:39:58,230 --> 01:40:05,830 stikalo, zdaj pa tip v male črke y, kapital Y, male črke n, kapital N, 2001 01:40:05,830 --> 01:40:09,250 David, poskusite znova, saj je to ni en sam znak. 2002 01:40:09,250 --> 01:40:12,050 Naredimo x, napake, kot je bilo pričakovano. 2003 01:40:12,050 --> 01:40:15,640 In logically-- in to je nekaj Jaz bi spodbudila v general-- celo 2004 01:40:15,640 --> 01:40:17,790 čeprav smo le praskanje Površina nekatere od teh funkcij. 2005 01:40:17,790 --> 01:40:20,560 >> In ne bi bilo očitno, ko vas sami sedli na tipkovnici, 2006 01:40:20,560 --> 01:40:21,370 kako to deluje? 2007 01:40:21,370 --> 01:40:22,240 Kaj bi to naredili? 2008 01:40:22,240 --> 01:40:25,630 Lepa stvar ima prenosnik ali namizni ali dostop 2009 01:40:25,630 --> 01:40:29,290 z računalnikom prevajalnik, in z urejevalnikom kode, kot je ta, 2010 01:40:29,290 --> 01:40:32,990 se lahko skoraj vedno odgovoriti na to vprašanja za sebe samo s poskušanjem. 2011 01:40:32,990 --> 01:40:36,570 >> Na primer, če je retorično vprašanje pri roki so bili, 2012 01:40:36,570 --> 01:40:39,540 kaj se zgodi, če ste pozabili svoje izjave odmor? 2013 01:40:39,540 --> 01:40:41,400 Ki je pravzaprav zelo pogosta stvar, 2014 01:40:41,400 --> 01:40:43,540 ker ne izgleda kot si ti res jih potrebujete. 2015 01:40:43,540 --> 01:40:46,790 Ti res ne izpolni svoj Mislil kot oklepaju ali Curly 2016 01:40:46,790 --> 01:40:47,714 brace ne. 2017 01:40:47,714 --> 01:40:49,630 Gremo naprej in prevesti kodo in videli. 2018 01:40:49,630 --> 01:40:53,690 Torej bi stikalo, pika poševnica stikalo. 2019 01:40:53,690 --> 01:40:56,435 Kaj je tip v male črke y, zgornji primer, Enter. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 Torej sem tipkal y. 2022 01:41:00,700 --> 01:41:04,420 >> Program je dejal, da, ne, napake, kot da se je spremenilo njeno srce. 2023 01:41:04,420 --> 01:41:09,280 Ampak to nekako bilo, ker tisto, kar se zgodi s stikalom je prvi primer, da je 2024 01:41:09,280 --> 01:41:13,899 Tekma se je v bistvu pomeni, hej računalnik, izvesti vse kode pod njo. 2025 01:41:13,899 --> 01:41:16,690 In če ne boste rekli, break, ali Ne pravim, odmor, ali pa ne reči odmor, 2026 01:41:16,690 --> 01:41:19,540 računalnik se bo razstrelil skozi vse te linije 2027 01:41:19,540 --> 01:41:22,779 in izvesti vse od njih, dokler pride do tega kodraste brace. 2028 01:41:22,779 --> 01:41:24,320 Torej, zavore so seveda potrebni. 2029 01:41:24,320 --> 01:41:27,120 Toda takeaway tukaj je, ko v dvomih, preizkusite nekaj. 2030 01:41:27,120 --> 01:41:29,510 Mogoče shraniti kodo prvič, ali ga shranite v dodatno datoteko 2031 01:41:29,510 --> 01:41:32,930 Če ste res v skrbeh zajebavam in ima za izterjavo 2032 01:41:32,930 --> 01:41:34,430 delo, ki veste, da deluje. 2033 01:41:34,430 --> 01:41:35,410 >> Toda poskusiti stvari. 2034 01:41:35,410 --> 01:41:38,074 In ne bodi tako strah, morda, o tem, kaj bi lahko računalnik storiti, 2035 01:41:38,074 --> 01:41:39,490 ali da bi lahko prekinil nekaj. 2036 01:41:39,490 --> 01:41:42,790 Vedno se lahko vrne nazaj do neke prejšnje različice. 2037 01:41:42,790 --> 01:41:45,640 >> Tako da je na koncu z iskanjem pri oblikovanju kodeksa. 2038 01:41:45,640 --> 01:41:49,020 Imamo to sposobnost sedaj pisati Pogoji in pisanje zank, 2039 01:41:49,020 --> 01:41:50,850 in spremenljivke, in klic funkcije. 2040 01:41:50,850 --> 01:41:54,590 Torej, odkrito povedano, smo nekako nazaj kjer smo bili pred enim tednom z Scratch, 2041 01:41:54,590 --> 01:42:00,120 čeprav z manj prepričljiv besedilnih okolje kot Scratch omogoča. 2042 01:42:00,120 --> 01:42:03,990 >> Ampak obvestilo, kako hitro smo pridobili da besednjak, tudi če je 2043 01:42:03,990 --> 01:42:07,570 bo trajalo nekaj časa, da se potopi v, tako da bomo lahko sedaj uporabljajo to besednjak 2044 01:42:07,570 --> 01:42:10,320 pisati bolj zanimive programe. 2045 01:42:10,320 --> 01:42:12,940 In kaj je narediti korak otroka v smeri, kot sledi. 2046 01:42:12,940 --> 01:42:14,890 Naj gredo naprej in ustvarite novo datoteko tukaj. 2047 01:42:14,890 --> 01:42:17,750 >> Bom ta poziv prototype.c, in uvesti 2048 01:42:17,750 --> 01:42:20,954 prvič, zmožnost da svoje funkcije. 2049 01:42:20,954 --> 01:42:22,870 Nekateri od vas morda to naredil z Scratch, 2050 01:42:22,870 --> 01:42:25,430 s katerim lahko ustvarite svoj lastni meri bloki v nič, 2051 01:42:25,430 --> 01:42:27,892 in jih nato povlecite na mesto kamorkoli želite v C. 2052 01:42:27,892 --> 01:42:30,100 In v večini programiranje jeziki, ki jih lahko naredite točno 2053 01:42:30,100 --> 01:42:33,580 that-- da svoje funkcije, če se že ne obstaja. 2054 01:42:33,580 --> 01:42:38,660 >> Tako, na primer, naj gredo naprej in vključujejo CS50.h in vključujejo 2055 01:42:38,660 --> 01:42:43,110 standardna IO.h, int main nična. 2056 01:42:43,110 --> 01:42:46,020 In zdaj imamo ograda pripravljena iti. 2057 01:42:46,020 --> 01:42:48,550 Držim tiskanje stvari kot so imena ljudi danes. 2058 01:42:48,550 --> 01:42:51,910 In da se počuti like-- ne bi bilo lepo, če obstaja 2059 01:42:51,910 --> 01:42:53,936 so funkcijo imenovano ime tisk? 2060 01:42:53,936 --> 01:42:55,060 Nimam uporabiti printf. 2061 01:42:55,060 --> 01:42:56,976 Nimam, da se spomnimo vse oznake format. 2062 01:42:56,976 --> 01:43:00,050 Zakaj ne jaz, in zakaj se ni nekdo pred mano, 2063 01:43:00,050 --> 01:43:02,980 ustvariti funkcijo imenovano tiskanje ime, da zaradi nekaj ime, 2064 01:43:02,980 --> 01:43:03,980 enostavno natisne? 2065 01:43:03,980 --> 01:43:08,700 >> Z drugimi besedami, če rečem, hej, računalnik, daj mi niz 2066 01:43:08,700 --> 01:43:11,870 s uporanikove za to, preko get niza funkcijo CS50 je. 2067 01:43:11,870 --> 01:43:15,090 Hej, računalnik, dal, da je niz v spremenljivka na levi strani, 2068 01:43:15,090 --> 01:43:16,150 in call it to. 2069 01:43:16,150 --> 01:43:22,150 In potem, hej računalnik, pojdi naprej in natisnete to ime osebe, storjeno. 2070 01:43:22,150 --> 01:43:26,240 >> Zdaj, da bi bilo lepo, ker ta program, aptly imenovan, 2071 01:43:26,240 --> 01:43:29,170 mi pove, kaj je to moral storiti s pomočjo imen teh dveh funkcija je. 2072 01:43:29,170 --> 01:43:32,930 Naj gre in se prototip, Enter. 2073 01:43:32,930 --> 01:43:34,930 In, žal, to ne bo leteti. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, vrstica 7, karakter 5 napak, implicitno izjavo 2075 01:43:39,430 --> 01:43:42,960 function imena tiskanja je neveljaven, C99, C99 2076 01:43:42,960 --> 01:43:45,130 pomeni različico C ki je izšel leta 1999. 2077 01:43:45,130 --> 01:43:45,730 To je vse. 2078 01:43:45,730 --> 01:43:48,780 >> Torej, ne vem, kaj Vse to pomeni še. 2079 01:43:48,780 --> 01:43:50,810 Ampak jaz priznati napako v rdeči barvi. 2080 01:43:50,810 --> 01:43:51,770 To je precej očitno. 2081 01:43:51,770 --> 01:43:53,769 >> In zdi se, da s zeleni znak tukaj, 2082 01:43:53,769 --> 01:43:57,520 vprašanje je z imenom tiskanja, odprt paren s, v bližini paren, podpičjem. 2083 01:43:57,520 --> 01:44:01,800 Toda implicitno izjavo o Funkcija smo na kratko že videli. 2084 01:44:01,800 --> 01:44:04,880 To pomeni, samo, da je Jek ne veš, kaj mislim. 2085 01:44:04,880 --> 01:44:09,000 >> Uporabil sem besednjaka besedo, da je nikoli ni videl ali je učil prej. 2086 01:44:09,000 --> 01:44:11,950 In zato jo moram naučiti kaj pomeni ta funkcija. 2087 01:44:11,950 --> 01:44:13,590 Tako da sem šel naprej in to. 2088 01:44:13,590 --> 01:44:17,970 >> Bom, da gredo naprej in izvajanje moja funkcija imenuje Print Name. 2089 01:44:17,970 --> 01:44:24,720 In bom rekel takole, da To počne, printf, zdravo, odstotka 2090 01:44:24,720 --> 01:44:27,760 s, poševnica nazaj n, ime, podpičjem. 2091 01:44:27,760 --> 01:44:29,250 Torej, kaj sem naredil? 2092 01:44:29,250 --> 01:44:31,325 >> Tako se izkaže, da izvajajo svojo funkcijo, 2093 01:44:31,325 --> 01:44:33,845 smo nekako sposoditi nekaj enako strukturo kot glavno 2094 01:44:33,845 --> 01:44:35,720 da smo ravnokar samoumevno, in jaz 2095 01:44:35,720 --> 01:44:37,730 vem, kopiranje in lepljenje precej, kar 2096 01:44:37,730 --> 01:44:39,170 Sem pisal v preteklosti. 2097 01:44:39,170 --> 01:44:40,570 Toda opazili vzorec tukaj. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, odpade, bomo draži narazen kmalu, kaj to pravzaprav pomeni. 2099 01:44:43,750 --> 01:44:46,160 >> Toda za danes, samo opazili podobnost. 2100 01:44:46,160 --> 01:44:48,210 Void, ime s tiskanimi črkami, Ime niz, tako da je 2101 01:44:48,210 --> 01:44:50,310 vijolična ključne besede, ki bomo za začetek 2102 01:44:50,310 --> 01:44:54,067 kliče vrsto vrnitvi, ime funkcijo, in nato vhod. 2103 01:44:54,067 --> 01:44:56,400 Torej, dejansko pa lahko strnili takšna, kot je prejšnji teden 2104 01:44:56,400 --> 01:44:59,030 kot je to ime ali Algoritem kode smo 2105 01:44:59,030 --> 01:45:00,761 bo write-- algoritem temelji 2106 01:45:00,761 --> 01:45:02,010 koda bomo napisali. 2107 01:45:02,010 --> 01:45:03,180 >> To je vložek. 2108 01:45:03,180 --> 01:45:04,670 To je njena proizvodnja. 2109 01:45:04,670 --> 01:45:08,730 Ta funkcija, ime s tiskanimi črkami, je zasnovan tako, da niz z imenom ime, 2110 01:45:08,730 --> 01:45:11,350 ali karkoli, kot vložek, nato pa nična. 2111 01:45:11,350 --> 01:45:13,904 To ne vrne ničesar, kot bi dobili niz, ali pa int ne. 2112 01:45:13,904 --> 01:45:15,570 Tako se dogaja, da mi nekaj vrniti. 2113 01:45:15,570 --> 01:45:17,960 To je le, da bo imela stranski učinek, tako rekoč, 2114 01:45:17,960 --> 01:45:19,570 tiskanje ime osebe. 2115 01:45:19,570 --> 01:45:22,260 Torej opazili, vrstica 7, I lahko pokličete ime tiskanja. 2116 01:45:22,260 --> 01:45:25,920 Linija 10, lahko določite ali izvajajo ime tiskanja. 2117 01:45:25,920 --> 01:45:28,450 Ampak, žal, to ni dovolj. 2118 01:45:28,450 --> 01:45:31,230 >> Naj gredo naprej in prevesti to po shranjevanju. 2119 01:45:31,230 --> 01:45:33,910 Vau, zdaj, sem ga postavil slabše, se zdi. 2120 01:45:33,910 --> 01:45:37,027 Torej implicitno izjavo o ime funkcije tiskanja je neveljavna. 2121 01:45:37,027 --> 01:45:38,360 In še enkrat, tam je več napak. 2122 01:45:38,360 --> 01:45:41,430 Ampak kot sem opozoril že prej, čeprav Če ste preobremenjeni z, 2123 01:45:41,430 --> 01:45:44,850 ali pa malo žalostno videti toliko napake, se osredotočajo samo na prvi 2124 01:45:44,850 --> 01:45:47,500 na začetku, saj bi lahko le so imeli kaskadni učinek. 2125 01:45:47,500 --> 01:45:51,970 Tako C ali Jek natančneje še vedno ne prepozna imena tiskanja. 2126 01:45:51,970 --> 01:45:54,580 >> In to zato, ker Jek, z zasnovo, je nekako neumno. 2127 01:45:54,580 --> 01:45:56,280 To počne samo tisto, kar je povedal, da storiti. 2128 01:45:56,280 --> 01:46:00,950 In to ne samo tako po vrstnem redu v katerem je povedal, da storiti. 2129 01:46:00,950 --> 01:46:05,270 >> Torej sem opredeljena glavna na liniji štiri, kot smo počeli precej pogosto. 2130 01:46:05,270 --> 01:46:07,980 Sem opredeljeno ime za tisk na liniji 10. 2131 01:46:07,980 --> 01:46:11,793 Ampak sem poskušal uporabiti Ime print na spletu sedem. 2132 01:46:11,793 --> 01:46:13,670 >> To je prezgodaj, še ne obstaja. 2133 01:46:13,670 --> 01:46:19,150 Tako sem lahko pameten, in se kot, OK, tako da je samo igra skupaj, 2134 01:46:19,150 --> 01:46:23,680 in premik ime za tiskanje navzgor tukaj, in ponovno sestaviti. 2135 01:46:23,680 --> 01:46:24,550 O moj bog. 2136 01:46:24,550 --> 01:46:25,260 Delovalo je. 2137 01:46:25,260 --> 01:46:26,670 Bilo je tako enostavno, kot da. 2138 01:46:26,670 --> 01:46:28,120 >> Toda logika je točno to. 2139 01:46:28,120 --> 01:46:30,870 Moraš se naučiti Jek, kakšna je je s prvim opredeljuje funkcijo. 2140 01:46:30,870 --> 01:46:31,920 Potem ga lahko uporabite. 2141 01:46:31,920 --> 01:46:33,940 Ampak, odkrito povedano, ta meni kot spolzkem terenu. 2142 01:46:33,940 --> 01:46:35,773 >> Torej, vsakič, ko sem teči v težave, sem samo 2143 01:46:35,773 --> 01:46:39,450 dogaja, da označite in kopirate kodo Napisal sem, da izrežete in prilepite tukaj. 2144 01:46:39,450 --> 01:46:41,370 In gotovo, smo lahko Naučiti nekaj scenarijev 2145 01:46:41,370 --> 01:46:43,286 kjer je ena funkcija morda treba poklicati drugo. 2146 01:46:43,286 --> 01:46:46,030 In si ne more dati vsak Funkcija nad vsako drugo. 2147 01:46:46,030 --> 01:46:47,930 >> Tako se izkaže, tam je boljša rešitev. 2148 01:46:47,930 --> 01:46:50,100 Mi lahko pustite to. 2149 01:46:50,100 --> 01:46:53,677 In, odkrito povedano, to je običajno lepo, in priročno, in dober design 2150 01:46:53,677 --> 01:46:56,760 dati glavno prvič, ker, še enkrat, Glavni tako kot pri zelena zastava kliku 2151 01:46:56,760 --> 01:46:59,027 da je funkcija dobi izvaja privzeto. 2152 01:46:59,027 --> 01:47:01,110 Tako si lahko tudi dal je na vrhu spisa 2153 01:47:01,110 --> 01:47:03,560 tako da, ko vi ali katerikoli drugi človek gleda datoteke 2154 01:47:03,560 --> 01:47:06,360 veš, kaj se dogaja samo z branjem glavni prvi. 2155 01:47:06,360 --> 01:47:15,360 Tako se je izkazalo, da lahko povem, Jek proaktivno, hej, Jek na liniji štiri, 2156 01:47:15,360 --> 01:47:17,940 Obljubim, da izvajanje funkcija se imenuje tiskanje 2157 01:47:17,940 --> 01:47:22,600 Ime, ki je niz se imenuje ime kot vhod in vrne nič, nična. 2158 01:47:22,600 --> 01:47:24,770 In bom okoli njegovo izvajanje kasneje. 2159 01:47:24,770 --> 01:47:25,680 >> Prihaja Main. 2160 01:47:25,680 --> 01:47:29,130 Glavna zdaj na spletu 9 lahko uporabite Tiskanje Ime ker Jek 2161 01:47:29,130 --> 01:47:32,600 je zaupanje, da je na koncu, da bodo imeli definicijo 2162 01:47:32,600 --> 01:47:34,880 izvajanja Natisni imena. 2163 01:47:34,880 --> 01:47:37,390 Torej, po shranjevanju mojo kartoteko, naj grem naprej in da prototip, 2164 01:47:37,390 --> 01:47:38,498 izgleda dobro tokrat. 2165 01:47:38,498 --> 01:47:43,470 Dot poševnica, prototip, naj me gredo naprej in vnesite ime. 2166 01:47:43,470 --> 01:47:48,440 David, zdravo David, Zamila, zdravo Zamila, in, seveda, zdaj deluje. 2167 01:47:48,440 --> 01:47:52,200 >> Torej je sestavina v tem, da smo jih je funkcijo po meri, kot po meri 2168 01:47:52,200 --> 01:47:54,219 Scratch blok smo ga kliče. 2169 01:47:54,219 --> 01:47:57,010 Toda za razliko od Scratch, kjer lahko samo ustvarjanje in začetek uporabe, 2170 01:47:57,010 --> 01:47:59,330 Zdaj moramo biti malo bolj občutljiv, 2171 01:47:59,330 --> 01:48:03,410 in dejansko vlak Jek za uporabo, ali pa ga pričakujejo. 2172 01:48:03,410 --> 01:48:09,140 Zdaj, kot prahi, zakaj ves ta čas smo bili le slepo na veri, vključno 2173 01:48:09,140 --> 01:48:12,170 CS50.h, in vključno s standardnimi IO.h? 2174 01:48:12,170 --> 01:48:15,190 >> No, se je izkazalo, Med nekaj drugih stvari, 2175 01:48:15,190 --> 01:48:18,550 vse, kar je v teh dot h datoteke, ki se zgodi, da se datoteke. 2176 01:48:18,550 --> 01:48:20,460 Oni header datoteke, tako rekoč. 2177 01:48:20,460 --> 01:48:23,270 Še vedno napisan v C pa oni drugačen tip datoteke. 2178 01:48:23,270 --> 01:48:28,690 >> Za zdaj lahko precej prevzame da vse, kar je znotraj CS50.h 2179 01:48:28,690 --> 01:48:33,360 je približno eno-obloge, kot je ta, ne za funkcije imenovane Print Ime, 2180 01:48:33,360 --> 01:48:36,840 ampak za Get String, Get Float, in nekaj drugih. 2181 01:48:36,840 --> 01:48:41,510 In tam so podobni prototipi, ena obloge, znotraj standardne IO.h 2182 01:48:41,510 --> 01:48:46,241 Za printf, ki je sedaj moje Print Ime funkcijo. 2183 01:48:46,241 --> 01:48:49,490 Torej, z drugimi besedami, ves ta čas, ki smo jih pravkar slepo kopiranje in lepljenje 2184 01:48:49,490 --> 01:48:51,780 vključujejo to, vključujejo da, kaj se dogaja? 2185 01:48:51,780 --> 01:48:55,310 To je le vrsta indicev da Jek, kaj funkcije 2186 01:48:55,310 --> 01:49:00,170 se dejansko izvaja, samo drugje v različnih datotekah 2187 01:49:00,170 --> 01:49:02,440 drugje v sistemu. 2188 01:49:02,440 --> 01:49:05,160 >> Tako smo izvajali ime tiskanja. 2189 01:49:05,160 --> 01:49:07,910 Da ima ta stranski učinek tiskanje nekaj na zaslonu. 2190 01:49:07,910 --> 01:49:10,170 Ampak to dejansko ne podaj mi nekaj nazaj. 2191 01:49:10,170 --> 01:49:12,200 Kako bomo lotili izvajanju programa, ki 2192 01:49:12,200 --> 01:49:14,510 ne nekaj podaj mi nazaj? 2193 01:49:14,510 --> 01:49:15,580 >> No, poskusimo to. 2194 01:49:15,580 --> 01:49:21,360 Naj gredo naprej in izvajati datoteka z imenom return.c 2195 01:49:21,360 --> 01:49:24,530 tako da bomo lahko dokaže, kako nekaj kot Get String, ali Get Int, 2196 01:49:24,530 --> 01:49:27,340 pravzaprav vračanje Nekaj ​​nazaj uporabniku. 2197 01:49:27,340 --> 01:49:29,840 Gremo naprej in določiti int glavni praznino. 2198 01:49:29,840 --> 01:49:33,230 >> In, še enkrat, v prihodnosti, bomo razložiti, kaj to int in to praznino 2199 01:49:33,230 --> 01:49:34,090 je pravzaprav počne. 2200 01:49:34,090 --> 01:49:35,840 Ampak danes, bomo je samo po sebi umevno. 2201 01:49:35,840 --> 01:49:39,970 Bom, da gredo naprej in printf, za dobro uporabniško izkušnjo, x. 2202 01:49:39,970 --> 01:49:44,360 In potem bom počakati na Uporabnik, da me x s get notr. 2203 01:49:44,360 --> 01:49:48,459 >> In potem bom šel naprej in natisnete x na kvadrat. 2204 01:49:48,459 --> 01:49:50,500 Torej, če imate le tipkovnica, ljudje pogosti 2205 01:49:50,500 --> 01:49:52,600 uporabite malo korenje Simbol na tipkovnici 2206 01:49:52,600 --> 01:49:55,330 za zastopanje na moč o, ali eksponent. 2207 01:49:55,330 --> 01:49:58,960 Torej x kvadrat je prisotna i. 2208 01:49:58,960 --> 01:50:00,660 >> In zdaj bom to naredil. 2209 01:50:00,660 --> 01:50:03,940 Jaz lahko samo do-- kaj je x kvadrat? x kvadrat je x-krat x. 2210 01:50:03,940 --> 01:50:06,690 >> In mi je to naredil nekaj Pred časom že danes. 2211 01:50:06,690 --> 01:50:08,730 To ne počutim kot vse to velik napredek. 2212 01:50:08,730 --> 01:50:09,570 Veš kaj? 2213 01:50:09,570 --> 01:50:13,100 Oglejmo vzvoda nekaj te ideje od zadnjič abstrakcije. 2214 01:50:13,100 --> 01:50:16,080 >> Ali ne bi bilo lepo, če tam je funkcija imenuje 2215 01:50:16,080 --> 01:50:18,460 kvadrat, da ne točno to? 2216 01:50:18,460 --> 01:50:20,640 Še vedno na koncu od dan, počne isto matematike. 2217 01:50:20,640 --> 01:50:22,410 Ampak kaj je abstraktna stran ideja jemanja 2218 01:50:22,410 --> 01:50:25,280 ena številka pomnoženo s drugo, in daj mu ime, 2219 01:50:25,280 --> 01:50:27,360 kot kvadratnih to vrednost. 2220 01:50:27,360 --> 01:50:29,560 >> In, z drugimi besedami, pri C, kaj je ustvariti funkcijo 2221 01:50:29,560 --> 01:50:32,660 imenujemo kvadrat, da počne ravno to. 2222 01:50:32,660 --> 01:50:34,600 To se dogaja, da se imenuje kvadrat. 2223 01:50:34,600 --> 01:50:35,790 To se dogaja, da se int. 2224 01:50:35,790 --> 01:50:37,820 In bomo bo samo ga imenujejo n, ki ga privzeto. 2225 01:50:37,820 --> 01:50:39,403 >> Lahko pa bi rekli, da je vse, kar si želimo. 2226 01:50:39,403 --> 01:50:42,900 In vse, kar se dogaja, da storiti, dobesedno, je donos 2227 01:50:42,900 --> 01:50:45,810 rezultat n-kratno n. 2228 01:50:45,810 --> 01:50:48,980 Ampak ker je vrača nekaj, kar 2229 01:50:48,980 --> 01:50:53,690 je ključna beseda v vijolično, ki smo jih nikoli videl, sem na liniji 11, 2230 01:50:53,690 --> 01:50:55,410 Ne moreš kar reči, nična tokrat. 2231 01:50:55,410 --> 01:51:01,320 >> Nična, v primeru smo pravkar videli namesto imena tiskanja, pomeni le, 2232 01:51:01,320 --> 01:51:02,190 naredi kaj. 2233 01:51:02,190 --> 01:51:04,170 Ampak mi nekaj ne vrniti. 2234 01:51:04,170 --> 01:51:06,790 V tem primeru, jaz želim vrne n-krat n, 2235 01:51:06,790 --> 01:51:08,460 ali karkoli že to je, da je številka. 2236 01:51:08,460 --> 01:51:12,460 >> Tako da ne morem reči, hej, računalnik, Vrnem nič, nična. 2237 01:51:12,460 --> 01:51:16,166 To se dogaja, da se vrnejo, po naravi, int. 2238 01:51:16,166 --> 01:51:17,790 In da je vse, kar se dogaja. 2239 01:51:17,790 --> 01:51:20,070 >> Vhod na kvadrat se bo int. 2240 01:51:20,070 --> 01:51:24,760 In tako, da ga lahko uporabljamo, mora imeti ime, N. To se dogaja, da se izhod 2241 01:51:24,760 --> 01:51:26,240 int ki ne potrebuje ime. 2242 01:51:26,240 --> 01:51:29,590 Lahko ga pustimo, da se glavna ali kdo je me uporabljajo, da se spomnimo na to vrednost, če bomo 2243 01:51:29,590 --> 01:51:31,120 ponudbe s svojo spremenljivko. 2244 01:51:31,120 --> 01:51:33,230 >> In še enkrat, samo novo Ključna beseda tukaj je Return. 2245 01:51:33,230 --> 01:51:34,480 In sem samo delaš nekaj matematike. 2246 01:51:34,480 --> 01:51:41,825 Če bi res želel, da ni potrebno, Lahko bi rekel, int pride proizvod n krat n. 2247 01:51:41,825 --> 01:51:44,170 >> In potem bi lahko rekli, vrne izdelek. 2248 01:51:44,170 --> 01:51:47,360 Ampak, še enkrat, na mojem zgodnejšem To preprosto ni dobra design-- 2249 01:51:47,360 --> 01:51:50,060 kot so, zakaj uvesti ime, simbol, kot je izdelek, 2250 01:51:50,060 --> 01:51:51,570 samo, da takoj vrne? 2251 01:51:51,570 --> 01:51:53,670 To je malo čistejši, malo močneje, tako 2252 01:51:53,670 --> 01:51:59,380 govoriti, samo reči vrnitev n-krat n, znebiti tega področja v celoti. 2253 01:51:59,380 --> 01:52:02,860 >> In to je samo manj kode, da se glasi, manj možnosti za napake. 2254 01:52:02,860 --> 01:52:05,180 Da vidimo, če je to dejansko zdaj deluje. 2255 01:52:05,180 --> 01:52:09,380 Zdaj bom šel naprej in da vrnitev. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, implicitno izjavo funkcije. 2257 01:52:11,460 --> 01:52:14,080 Naredil sem to napako pred tem, ni nič takega. 2258 01:52:14,080 --> 01:52:18,950 Naj samo tip, ali označite in kopiranje, točno isto funkcijo prototip, 2259 01:52:18,950 --> 01:52:21,342 ali podpis, funkcije se tukaj. 2260 01:52:21,342 --> 01:52:22,800 Ali sem lahko premakne celotno funkcijo. 2261 01:52:22,800 --> 01:52:23,841 >> Ampak to je malo leni. 2262 01:52:23,841 --> 01:52:24,870 Torej ne bomo storili. 2263 01:52:24,870 --> 01:52:27,960 Sedaj pa mi, da vrnitev spet pika vrnitev poševnice. 2264 01:52:27,960 --> 01:52:32,790 >> x je 2. x kvadrat je 4. x je 3. x kvadrat je 9. 2265 01:52:32,790 --> 01:52:35,300 In funkcija se zdi Sedaj je treba delati. 2266 01:52:35,300 --> 01:52:36,550 Torej, kaj je razlika tu? 2267 01:52:36,550 --> 01:52:42,520 Imam funkcijo, ki je imenovan trg, v tem primeru, ki sem ga dal na vhodu. 2268 01:52:42,520 --> 01:52:43,830 In dobim nazaj izhod. 2269 01:52:43,830 --> 01:52:46,210 In še prej, če Odprem drugi primer 2270 01:52:46,210 --> 01:52:51,640 iz prej, kar je bil imenovan prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Imel sem ime tiskanja, ki vrnil nična, tako rekoč, 2272 01:52:54,770 --> 01:52:58,730 Ali je vrnil nič, in preprosto imela stranske učinke. 2273 01:52:58,730 --> 01:53:00,230 >> Torej, kaj se dogaja? 2274 01:53:00,230 --> 01:53:03,520 No, menijo funkcijo dobili niz za trenutek. 2275 01:53:03,520 --> 01:53:06,570 Mi smo bili z uporabo funkcije dobil niz v naslednji način. 2276 01:53:06,570 --> 01:53:10,464 >> Smo imeli funkcijo dobili niz, kot vključujejo CS50.h, 2277 01:53:10,464 --> 01:53:16,624 vključujejo standardno IO.h, int, glavno, praznino. 2278 01:53:16,624 --> 01:53:18,790 In potem vsakič, ko nimam imenovano get niz doslej 2279 01:53:18,790 --> 01:53:23,260 Sem rekel nekaj podobnega, niz s dobi dobili niz, saj get string-- 2280 01:53:23,260 --> 01:53:27,880 recimo to get.c-- get niz sama vrne niz, da sem lahko potem 2281 01:53:27,880 --> 01:53:32,050 uporabo, in pravijo, zdravo, vejica, odstotkov y, Nagibnica n, y. 2282 01:53:32,050 --> 01:53:35,660 >> Torej je to isti primer, Res, da smo imeli prej. 2283 01:53:35,660 --> 01:53:37,920 Tako bi dobili niz vrne vrednost. 2284 01:53:37,920 --> 01:53:41,260 Toda pred nekaj trenutki, tiskanje niz ne vrne vrednosti. 2285 01:53:41,260 --> 01:53:42,721 To preprosto ima stranski učinek. 2286 01:53:42,721 --> 01:53:44,220 Torej, to je bistvena razlika. 2287 01:53:44,220 --> 01:53:46,710 Videli smo drugačni vrste funkcij zdaj, 2288 01:53:46,710 --> 01:53:49,490 nekateri, ki so se vrnili Vrednosti, nekateri od njih ne. 2289 01:53:49,490 --> 01:53:51,890 Mogoče je niz, ali int ali float. 2290 01:53:51,890 --> 01:53:53,480 Ali pa je samo praznina. 2291 01:53:53,480 --> 01:53:55,710 >> In razlika je da te funkcije, da je 2292 01:53:55,710 --> 01:53:59,940 pridobiti podatke in vrne vrednost dejansko prinaša nekaj nazaj k mizi, 2293 01:53:59,940 --> 01:54:01,110 tako rekoč. 2294 01:54:01,110 --> 01:54:03,710 Torej, gremo naprej in pogled na enega končnega nabora 2295 01:54:03,710 --> 01:54:09,129 primerov, ki daje občutek, zdaj, od kako smo lahko, seveda, abstract bolje, 2296 01:54:09,129 --> 01:54:11,670 in bolje in bolje, ali več, in več in več, da bi 2297 01:54:11,670 --> 01:54:13,810 pisati, nenazadnje, boljšo kodo. 2298 01:54:13,810 --> 01:54:16,860 Gremo naprej, in v duhu od Scratch, naredite naslednje. 2299 01:54:16,860 --> 01:54:21,700 >> Naj gredo naprej in vključujejo CS50.h in standardni IO.h. 2300 01:54:21,700 --> 01:54:24,010 Naj gredo naprej in da sam int, glavno, nična. 2301 01:54:24,010 --> 01:54:27,380 In mi daj, to imenujemo cough.c. 2302 01:54:27,380 --> 01:54:35,510 >> In mi gredo naprej in samo kot Scratch, natisnete kašelj / n. 2303 01:54:35,510 --> 01:54:37,170 In želim narediti to trikrat. 2304 01:54:37,170 --> 01:54:39,670 Tako da sem, seveda, šele tekoč kopirati in prilepiti trikrat. 2305 01:54:39,670 --> 01:54:46,440 Jaz sem zdaj dogaja, da kašelj pik poševnica kašelj. 2306 01:54:46,440 --> 01:54:50,120 Recimo dam malo več prostora tukaj, Enter, kašelj, kašelj, kašelj. 2307 01:54:50,120 --> 01:54:53,970 >> Tam je, seveda, že priložnost za izboljšanje. 2308 01:54:53,970 --> 01:54:55,679 Sem kopirali in prilepili nekajkrat danes. 2309 01:54:55,679 --> 01:54:58,261 Toda to je bilo le, da nisem morali vnesti čim več znakov. 2310 01:54:58,261 --> 01:55:00,250 Še vedno spremenila teh vrstic kode so. 2311 01:55:00,250 --> 01:55:04,240 >> Te tri vrstice so enake, ki meni, leni in res je, 2312 01:55:04,240 --> 01:55:07,110 in verjetno ni pravi pristop. 2313 01:55:07,110 --> 01:55:11,029 Torej s tem, kar sestavino bi lahko izboljšali to kodo? 2314 01:55:11,029 --> 01:55:12,570 Nimamo kopirati in prilepiti kodo. 2315 01:55:12,570 --> 01:55:15,070 >> In, seveda, kadarkoli se počutite sami kopiranjem in lepljenjem, 2316 01:55:15,070 --> 01:55:17,700 in celo ne spreminja kode verjetnost, da je boljši način. 2317 01:55:17,700 --> 01:55:19,470 In res, pa je. 2318 01:55:19,470 --> 01:55:22,510 Naj gredo naprej in ne za zanke, čeprav sintaksa morda ne 2319 01:55:22,510 --> 01:55:24,570 pridejo še naravno. 2320 01:55:24,570 --> 01:55:29,494 >> Ali to trikrat, preprosto s tem, da following-- 2321 01:55:29,494 --> 01:55:31,160 in sem se zgodi, da to vedo iz prakse. 2322 01:55:31,160 --> 01:55:32,810 Vendar imamo številne primere zdaj. 2323 01:55:32,810 --> 01:55:34,950 In boste videli na spletu več referenc še. 2324 01:55:34,950 --> 01:55:37,790 >> To je sintaksa na liniji 6, ki podobno kot Scratch, ki se ponavlja 2325 01:55:37,790 --> 01:55:40,090 blok, ponovite naslednje trikrat. 2326 01:55:40,090 --> 01:55:41,340 To je malo čaroben za zdaj. 2327 01:55:41,340 --> 01:55:43,050 Toda to bo dobil več, in bolj pozna. 2328 01:55:43,050 --> 01:55:45,050 >> In da se bo ponovil linija osem trikrat, 2329 01:55:45,050 --> 01:55:52,390 tako da če bom ponovno zbere make kašelj, dot poševnica kašelj, kašelj, kašelj, kašelj. 2330 01:55:52,390 --> 01:55:54,030 Še vedno deluje na enak način. 2331 01:55:54,030 --> 01:55:55,550 Tako, da je vse v redu in prav. 2332 01:55:55,550 --> 01:55:58,200 Ampak to še ni zelo odvzete. 2333 01:55:58,200 --> 01:55:59,371 >> To je popolnoma pravilna. 2334 01:55:59,371 --> 01:56:01,370 Vendar se zdi, kot da lahko priložnost, 2335 01:56:01,370 --> 01:56:03,750 kot v svetu Praske, na vrsto začetek 2336 01:56:03,750 --> 01:56:07,530 tukaj dodati nekaj semantiko, tako da Ne samo še nekaj za zanke, 2337 01:56:07,530 --> 01:56:09,867 in funkcija, ki pravi: kašelj, ali pa kašelj. 2338 01:56:09,867 --> 01:56:10,450 Veš kaj? 2339 01:56:10,450 --> 01:56:12,620 Naj poskusim biti malo hladnejše kot to, 2340 01:56:12,620 --> 01:56:16,090 in dejansko napisati funkcijo, ki ima nekaj stranskih učinkov, call it kašelj. 2341 01:56:16,090 --> 01:56:20,830 >> In to se ne vhod, in vrne nobene vrednosti kot izhod. 2342 01:56:20,830 --> 01:56:22,680 Ampak veste, kaj počne? 2343 01:56:22,680 --> 01:56:29,370 To počne this-- printf, quote citata, kašelj. 2344 01:56:29,370 --> 01:56:32,380 >> In zdaj tukaj, jaz grem da gredo naprej in za int, 2345 01:56:32,380 --> 01:56:36,070 i dobi nič, sem manj kot 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Bom ni storil printf, ki je verjetno izvajanje nizka raven 2347 01:56:39,770 --> 01:56:40,270 detajl. 2348 01:56:40,270 --> 01:56:41,353 Ni mi mar, kako kašelj. 2349 01:56:41,353 --> 01:56:43,240 Samo želim uporabiti funkcijo kašelj. 2350 01:56:43,240 --> 01:56:44,840 In sem le, da bo poklical kašelj. 2351 01:56:44,840 --> 01:56:46,204 >> Zdaj, opazili dihotomijo. 2352 01:56:46,204 --> 01:56:49,370 Ko pokličete funkcijo, če ne želijo, da bi postala vhodi, popolnoma v redu. 2353 01:56:49,370 --> 01:56:51,780 Pač odprte paren, blizu paren, in ste končali. 2354 01:56:51,780 --> 01:56:56,271 >> Ko določite funkcijo, ali ugotovi, funkcija je prototip, 2355 01:56:56,271 --> 01:56:58,770 če veš vnaprej, da to ni bo trajalo vse argumente, 2356 01:56:58,770 --> 01:57:01,170 pravijo v teh oklepajih tam nična. 2357 01:57:01,170 --> 01:57:05,660 In to zagotavlja, da bodo ti da ne bo slučajno zlorabe. 2358 01:57:05,660 --> 01:57:07,020 Naj gredo naprej in da kašlja. 2359 01:57:07,020 --> 01:57:08,540 In, seveda, sem naredil napako. 2360 01:57:08,540 --> 01:57:10,410 >> Prekleto, da je to implicitno izjavo. 2361 01:57:10,410 --> 01:57:11,325 Ampak to je v redu. 2362 01:57:11,325 --> 01:57:12,590 To je enostavno določiti. 2363 01:57:12,590 --> 01:57:18,240 Rabim prototip višje v svojem spisu, kot sem dejansko uporabo. 2364 01:57:18,240 --> 01:57:20,070 >> Torej, zdaj pa mi, da kašelj spet lepo. 2365 01:57:20,070 --> 01:57:20,790 Zdaj deluje. 2366 01:57:20,790 --> 01:57:22,930 Poskrbite, kašelj, kašelj, kašelj, kašelj. 2367 01:57:22,930 --> 01:57:25,930 Torej si lahko mislite, da smo res tik nad inženiring ta problem. 2368 01:57:25,930 --> 01:57:26,763 In seveda smo. 2369 01:57:26,763 --> 01:57:28,870 To ni dobra Kandidat programa 2370 01:57:28,870 --> 01:57:31,930 Trenutno za Refactoring, in to, kar je 2371 01:57:31,930 --> 01:57:35,645 imenovane hierarhično razpada, kjer ste vzeli nekaj kode, nato pa 2372 01:57:35,645 --> 01:57:38,790 vi nekako faktorja stvari, ter se tako pripisati več semantiko z njimi, 2373 01:57:38,790 --> 01:57:40,930 in ponovno ji na koncu daljši rok. 2374 01:57:40,930 --> 01:57:43,490 Ampak to je gradnik proti bolj zapletene programe 2375 01:57:43,490 --> 01:57:45,600 da bomo začeli pisno pred dolgo, da 2376 01:57:45,600 --> 01:57:50,090 nam omogoča, da imajo besedišče s katero pisati boljše kodo. 2377 01:57:50,090 --> 01:57:52,920 In, seveda, da vidimo, če bomo tega ni mogoče posploševati dlje. 2378 01:57:52,920 --> 01:57:57,984 >> Zdi se malo hromi, da sem glavni, je treba skrbeti za to jebeno za zanke, 2379 01:57:57,984 --> 01:57:59,400 in znova in znova kliče kašelj. 2380 01:57:59,400 --> 01:58:03,050 Zakaj ne morem povedati, kašelj, prosim kašelj trikrat? 2381 01:58:03,050 --> 01:58:08,170 Z drugimi besedami, zakaj ne morem samo dati prispevek k kašljanju in to stori? 2382 01:58:08,170 --> 01:58:11,270 >> Zakaj ne morem reči, v Glavni kašelj trikrat. 2383 01:58:11,270 --> 01:58:13,150 In zdaj, to je nekako čarobno. 2384 01:58:13,150 --> 01:58:14,540 To je zelo ponavljajoč tukaj. 2385 01:58:14,540 --> 01:58:15,940 In to je seveda korak otroka. 2386 01:58:15,940 --> 01:58:19,250 >> Ampak sposobnost povedati o linija osem, kašelj trikrat, 2387 01:58:19,250 --> 01:58:20,730 to je samo toliko bolj berljiva. 2388 01:58:20,730 --> 01:58:24,210 In, plus, mi ne bi bilo treba vedeti, ali pa zanima, kako je kašelj izvaja. 2389 01:58:24,210 --> 01:58:26,460 In, seveda, kasneje v Izraz in končnih projektov, 2390 01:58:26,460 --> 01:58:29,150 če se lotiti projekta z sošolec ali dve sošolci, 2391 01:58:29,150 --> 01:58:32,370 boste spoznali, da boš morali, ali želijo, razdeliti delo. 2392 01:58:32,370 --> 01:58:34,650 >> In boste želeli odločiti vnaprej, kdo bo kaj storil, 2393 01:58:34,650 --> 01:58:35,483 in v katerem kosov? 2394 01:58:35,483 --> 01:58:37,520 In ne bi bilo lepo, če ste, na primer, 2395 01:58:37,520 --> 01:58:40,100 prevzame pisanje glavnega, podpisane. 2396 01:58:40,100 --> 01:58:43,470 In tvoj sostanovalec, ali vaš partner bolj splošno, 2397 01:58:43,470 --> 01:58:45,230 skrbi za izvajanje kašelj. 2398 01:58:45,230 --> 01:58:49,540 >> In ta delitev, ti stene abstrakcije, 2399 01:58:49,540 --> 01:58:52,310 ali plasti abstrakcije če boste, so super močna, 2400 01:58:52,310 --> 01:58:55,480 ker zlasti za večje, bolj kompleksni programi in sistemi, 2401 01:58:55,480 --> 01:59:00,070 omogoča več ljudem, da gradijo stvari skupaj, in na koncu 2402 01:59:00,070 --> 01:59:02,680 stitch svoje delo skupaj na ta način. 2403 01:59:02,680 --> 01:59:05,332 Ampak, seveda, smo moramo zdaj popraviti kašelj. 2404 01:59:05,332 --> 01:59:07,290 Moramo povedati, kašelj da, hej, veš kaj? 2405 01:59:07,290 --> 01:59:11,230 Vi boste morali sprejeti input-- zato ni nična, vendar int in zdaj. 2406 01:59:11,230 --> 01:59:15,170 Gremo naprej in začnejo kašelj int. i dobi nič. 2407 01:59:15,170 --> 01:59:16,890 >> i manj kot kolikokrat. 2408 01:59:16,890 --> 01:59:18,550 Rekel sem tri prej. 2409 01:59:18,550 --> 01:59:20,420 Ampak to ni tisto, kar hočem. 2410 01:59:20,420 --> 01:59:25,520 Želim kašelj, da posplošiti na podpira poljubno število iteracij. 2411 01:59:25,520 --> 01:59:28,800 >> Torej, res, da je n, da želim, ne glede na uporabniški mi pove. 2412 01:59:28,800 --> 01:59:31,620 Sedaj lahko grem naprej in reči tiskanja kašelj. 2413 01:59:31,620 --> 01:59:34,750 In ne glede na to, kaj več uporabnik prehaja v, 2414 01:59:34,750 --> 01:59:36,890 Bom ponovitev, da veliko krat. 2415 01:59:36,890 --> 01:59:39,160 >> Tako da ob koncu dneva, Program je enak. 2416 01:59:39,160 --> 01:59:42,820 Toda opazili vse te stvari lahko celo v drugo datoteko. 2417 01:59:42,820 --> 01:59:45,620 Pravzaprav ne vem Na Trenutek, kako printf se izvaja. 2418 01:59:45,620 --> 01:59:47,980 >> Ne vem, v tem trenutku, kako priti niz, ali pa int, ali se plovec 2419 01:59:47,980 --> 01:59:48,646 se izvajajo. 2420 01:59:48,646 --> 01:59:50,930 In ne želim, da jih vidite na mojem zaslonu. 2421 01:59:50,930 --> 01:59:55,320 Kot je, sem začel, da se osredotoči na moj program ne te funkcije. 2422 01:59:55,320 --> 01:59:59,070 >> In tako, seveda, takoj, ko vas začeti faktoring kodo, kot je tole, 2423 01:59:59,070 --> 02:00:01,397 lahko bi celo premakniti kašelj v ločeno datoteko? 2424 02:00:01,397 --> 02:00:02,730 Nekdo drug bi jo izvajati. 2425 02:00:02,730 --> 02:00:06,810 In vi in ​​vaš program postal zelo lepa in zelo berljiva, 2426 02:00:06,810 --> 02:00:10,830 verjetno, res štiri Program linija tam. 2427 02:00:10,830 --> 02:00:13,510 >> Torej, gremo naprej zdaj in še eno spremembo. 2428 02:00:13,510 --> 02:00:16,180 Opazimo, da je moj prototip je treba spremeniti do vrha. 2429 02:00:16,180 --> 02:00:18,390 Zato naj se določi, da je tako Jaz ne dobijo vpil na. 2430 02:00:18,390 --> 02:00:22,580 >> Poskrbite, kašelj, naj enkrat mi teče kašelj Še več, še vedno počne isto stvar. 2431 02:00:22,580 --> 02:00:26,010 Toda zdaj, opazili smo imeti sestavina za eno končno različico. 2432 02:00:26,010 --> 02:00:26,940 Veš kaj? 2433 02:00:26,940 --> 02:00:29,040 Nočem samo kašelj, nujno. 2434 02:00:29,040 --> 02:00:30,802 Rad bi imel kaj bolj splošno. 2435 02:00:30,802 --> 02:00:31,510 Torej, veste kaj? 2436 02:00:31,510 --> 02:00:32,450 Želim, da to storijo. 2437 02:00:32,450 --> 02:00:37,140 Rad bi imel, podobno kot Scratch zgodi, izraziti svoja blok, vendar ne samo 2438 02:00:37,140 --> 02:00:38,680 nekaj reči nekaj več časa. 2439 02:00:38,680 --> 02:00:41,510 Želim opozoriti na to zelo specifično niz. 2440 02:00:41,510 --> 02:00:43,850 In zato ne vem želijo, da samo reči kašelj. 2441 02:00:43,850 --> 02:00:47,660 Želim opozoriti na to, kar Niz je sprejet. 2442 02:00:47,660 --> 02:00:49,960 >> Torej opazil sem generalizirana to tako, da je sedaj 2443 02:00:49,960 --> 02:00:53,110 recimo počuti kot dobro ime za to, kot nič, 2444 02:00:53,110 --> 02:00:55,530 traja dve trditvi, za razliko od nič. 2445 02:00:55,530 --> 02:00:56,570 Ena je niz. 2446 02:00:56,570 --> 02:00:57,300 Ena je int. 2447 02:00:57,300 --> 02:00:58,130 >> In sem jih lahko stikalo. 2448 02:00:58,130 --> 02:01:00,713 Sem nekako všeč zamisel pravijo niz, potem pa 2449 02:01:00,713 --> 02:01:01,940 kolikokrat kasneje. 2450 02:01:01,940 --> 02:01:03,970 Void to pomeni še ne vrne ničesar. 2451 02:01:03,970 --> 02:01:06,428 To so le vizualna plat učinki, kot pri [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 besedni stranski učinek kričati. 2453 02:01:08,240 --> 02:01:12,630 Še vedno pa je nekaj n-krat, 0 do, vendar ne enako n. 2454 02:01:12,630 --> 02:01:14,540 To pomeni, n skupno krat. 2455 02:01:14,540 --> 02:01:16,540 In potem samo natisnete karkoli, da niz je. 2456 02:01:16,540 --> 02:01:19,060 Tako sem res generalizirana ta vrstica kode. 2457 02:01:19,060 --> 02:01:22,460 Zdaj, kako izvajati kašelj funkcija? 2458 02:01:22,460 --> 02:01:25,520 >> Lahko storim nična kašelj. 2459 02:01:25,520 --> 02:01:28,501 In še vedno traja, kako kolikorkrat želite kašelj. 2460 02:01:28,501 --> 02:01:29,250 Ampak veš kaj? 2461 02:01:29,250 --> 02:01:31,240 Sedaj lahko punt reči. 2462 02:01:31,240 --> 02:01:36,540 >> Lahko pokličete reči z Beseda kašelj, ki poteka v n. 2463 02:01:36,540 --> 02:01:40,410 In če želim izvajati tudi, samo za zabavo, funkcija kihanje, 2464 02:01:40,410 --> 02:01:42,290 Lahko kihanje določeno število krat. 2465 02:01:42,290 --> 02:01:47,300 In sem lahko vodijo ponovne n, ker opazili, da m v ​​zvezi s tem, ali obseg 2466 02:01:47,300 --> 02:01:49,470 obstaja samo v tej funkciji. 2467 02:01:49,470 --> 02:01:52,767 >> In n pri tem le obstaja v tej funkciji tukaj. 2468 02:01:52,767 --> 02:01:54,600 Torej bomo vrnili k ta vprašanja področje. 2469 02:01:54,600 --> 02:02:01,160 In tukaj sem samo reči, achoo in nato n-krat, podpičjem. 2470 02:02:01,160 --> 02:02:04,340 >> In zdaj moram samo sposoditi ta funkcija podpisi tukaj. 2471 02:02:04,340 --> 02:02:06,290 Torej, kašelj je pravilen. 2472 02:02:06,290 --> 02:02:10,090 Void kihanje je pravilen zdaj. 2473 02:02:10,090 --> 02:02:12,390 >> In še vedno potrebujejo samo reči. 2474 02:02:12,390 --> 02:02:18,990 Tako da sem hotel reči, recimo niz s, int n, podpičjem. 2475 02:02:18,990 --> 02:02:22,010 Tako sem preveč inženirstva vraga iz tega programa. 2476 02:02:22,010 --> 02:02:23,760 >> In to ne pomeni nujno, da je to 2477 02:02:23,760 --> 02:02:26,343 kaj morate storiti pri pisanju celo najpreprostejši programov. 2478 02:02:26,343 --> 02:02:29,280 Vzemi nekaj, kar je seveda zelo enostavno, zelo kratka, 2479 02:02:29,280 --> 02:02:31,800 in ga ponovno izvajati uporabo tako preveč kodo. 2480 02:02:31,800 --> 02:02:34,560 Vendar boste dejansko videli in Čas pogled nazaj, na teh primerov, 2481 02:02:34,560 --> 02:02:38,610 in zavedaš, oh, to so koraki smo dejansko posploševati, 2482 02:02:38,610 --> 02:02:40,797 proti faktorju nekaj ven, dokler na koncu dneva 2483 02:02:40,797 --> 02:02:42,380 moja koda je pravzaprav zelo smiselno. 2484 02:02:42,380 --> 02:02:45,960 Ker če hočem kašelj tri krat potem kihanje trikrat, 2485 02:02:45,960 --> 02:02:50,420 Jaz preprosto bo ponovila to, Program bo kašelj in vodijo kašelj. 2486 02:02:50,420 --> 02:02:53,620 In imam tri kašelj in tri kihanjem. 2487 02:02:53,620 --> 02:02:55,990 >> In tako je to temeljna paradigma, če hočete, 2488 02:02:55,990 --> 02:03:00,110 kako lahko gremo o dejansko izvajanje programa. 2489 02:03:00,110 --> 02:03:03,220 Ampak kaj je šele zdaj vidim, kaj je to smo počeli ves ta čas, 2490 02:03:03,220 --> 02:03:06,940 in kar nekaj končnih kosov so za to preprosto ukaz. 2491 02:03:06,940 --> 02:03:09,620 Na koncu dneva, ki smo jih uporabljali Jek kot naš prevajalnik. 2492 02:03:09,620 --> 02:03:11,494 Smo pisali vir Koda, pretvorimo 2493 02:03:11,494 --> 02:03:12,820 preko Jek v strojno kodo. 2494 02:03:12,820 --> 02:03:15,540 >> In smo bili z uporabo Poskrbite samo olajšati naše tipkanja tako 2495 02:03:15,540 --> 02:03:20,740 da nam ni treba zapomniti ti zaklinjanjem o Jek samega. 2496 02:03:20,740 --> 02:03:22,640 Toda kaj je narediti pravzaprav počne? 2497 02:03:22,640 --> 02:03:24,750 In, po drugi strani, kar je Jek pravzaprav počne? 2498 02:03:24,750 --> 02:03:28,790 >> Izkazalo se je, čeprav smo poenostavili današnja razprava z besedami, 2499 02:03:28,790 --> 02:03:33,090 ste vzeli izvorno kodo, jo prenese kot vhod za prevajalnik, ki vam daje 2500 02:03:33,090 --> 02:03:35,750 izhod stroja kodo, se izkaže, tam je 2501 02:03:35,750 --> 02:03:37,420 nekaj različnih korakov znotraj tam. 2502 02:03:37,420 --> 02:03:41,940 Ter izdelava zgodi, da bo krovna izraz za cel kup korakov. 2503 02:03:41,940 --> 02:03:43,970 Ampak kaj je samo draži tole res hitro. 2504 02:03:43,970 --> 02:03:48,070 >> Izkazalo se je, da smo počeli več stvari, vsakič, ko sem prost program, 2505 02:03:48,070 --> 02:03:50,990 ali vsakič, ko sem sestavil program za danes. 2506 02:03:50,990 --> 02:03:55,020 Tako predobdelava nanaša this-- ničesar v programu C, 2507 02:03:55,020 --> 02:03:58,720 saj bomo znova videli, ki se začne s tem simbolom hash, 2508 02:03:58,720 --> 02:04:03,320 ali hashtag simbol tukaj, pomeni to je direktiva Predprocesor. 2509 02:04:03,320 --> 02:04:07,330 To pomeni, da v tem primeru, hej računalnik, naredite nekaj s to datoteko 2510 02:04:07,330 --> 02:04:09,430 preden ste dejansko pripravijo svojo kodo. 2511 02:04:09,430 --> 02:04:15,220 >> V tem primeru, hašiš vključujejo pomeni, v bistvu način C je rekel, 2512 02:04:15,220 --> 02:04:19,325 hej računalnik, pojdi na vsebino od CS50.h in jih prilepite tukaj. 2513 02:04:19,325 --> 02:04:22,170 Hej računalnik, pojdite dobili vsebina standardnega IO.h, 2514 02:04:22,170 --> 02:04:24,690 kjer je to, da je na trdi disk, ga prilepite tukaj. 2515 02:04:24,690 --> 02:04:27,390 Torej te stvari se dogajajo Prvi med predobdelavo. 2516 02:04:27,390 --> 02:04:28,880 >> In Zvoka pa vse to za nas. 2517 02:04:28,880 --> 02:04:30,510 In to počne tako darn hitro, sploh ne 2518 02:04:30,510 --> 02:04:32,000 glej štiri različne stvari dogajajo. 2519 02:04:32,000 --> 02:04:34,100 Ampak to je prvi tak korak. 2520 02:04:34,100 --> 02:04:35,560 >> Kaj se pravzaprav zgodi potem? 2521 02:04:35,560 --> 02:04:38,320 No, naslednji uradni korak je zbiranje. 2522 02:04:38,320 --> 02:04:40,385 In se izkaže, da pripravo programa 2523 02:04:40,385 --> 02:04:44,060 tehnično pomeni, da se iz izvorna koda, stvari, ki smo jih 2524 02:04:44,060 --> 02:04:47,890 piše danes, da se nekaj imenuje skupščina kodo, nekaj 2525 02:04:47,890 --> 02:04:49,260 da izgleda malo drugače. 2526 02:04:49,260 --> 02:04:51,050 >> In v resnici, lahko videli zelo hitro. 2527 02:04:51,050 --> 02:04:53,890 Naj dejansko šel v mojo IDE. 2528 02:04:53,890 --> 02:04:58,050 Naj gredo naprej in odprto hello.c, ki je prvi program, s katerim smo 2529 02:04:58,050 --> 02:04:59,120 se je začela danes. 2530 02:04:59,120 --> 02:05:04,130 In mi gredo naprej in zagon Jek a malo drugače, Jek-ov, hello.c, 2531 02:05:04,130 --> 02:05:07,720 ki je pravzaprav bo daj mi še datotek hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> In bomo verjetno nikoli ne spet videli te vrste kode. 2533 02:05:10,330 --> 02:05:13,030 Če ste vzeli nižjo raven Sistemi razreda kot CS61, 2534 02:05:13,030 --> 02:05:14,920 boste videli veliko več tovrstnega kode. 2535 02:05:14,920 --> 02:05:17,020 Toda to je zbirni jezik. 2536 02:05:17,020 --> 02:05:22,050 To je X86 zbirni jezik da CPU, ki temelji 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE dejansko razume. 2538 02:05:24,460 --> 02:05:27,060 >> In skrivnosten kot to počne videti, da je nekaj 2539 02:05:27,060 --> 02:05:29,180 Računalnik razume zelo dobro. 2540 02:05:29,180 --> 02:05:30,790 Sub q, to ​​je odštevanje. 2541 02:05:30,790 --> 02:05:31,660 Tam je premiki. 2542 02:05:31,660 --> 02:05:35,730 >> Tam kliče funkcij tukaj, x oring, gibanje, dodatek, pop, 2543 02:05:35,730 --> 02:05:36,430 vrnitev. 2544 02:05:36,430 --> 02:05:38,850 Torej je nekaj zelo Navodila nizki ravni 2545 02:05:38,850 --> 02:05:41,280 da CPU razumeti, da I omenili prej. 2546 02:05:41,280 --> 02:05:43,100 To je tisto, Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Obstajajo vzorci ničle in tiste, ki 2548 02:05:45,030 --> 02:05:51,800 karto za to arcanely določeno, vendar nekoliko tudi imenovan-, navodila, 2549 02:05:51,800 --> 02:05:52,780 tako rekoč. 2550 02:05:52,780 --> 02:05:54,780 To je tisto, kar se zgodi, ko vam pripravijo kodo. 2551 02:05:54,780 --> 02:05:58,560 Dobiš montaža Jezik iz njega, kar 2552 02:05:58,560 --> 02:06:04,680 pomeni, da je tretji korak je zbrati da skupščina kodo v končni fazi, 2553 02:06:04,680 --> 02:06:09,080 stroj code-- ničle in tisti, ne pa besedilo, ki smo pravkar videli pred nekaj trenutki. 2554 02:06:09,080 --> 02:06:13,370 >> Torej predobdelava ne da najti in zamenjavo, in še nekaj drugih stvari. 2555 02:06:13,370 --> 02:06:16,430 Prevajanje je svoj vir Koda izmed C izvorna koda 2556 02:06:16,430 --> 02:06:18,980 da smo pisali, da montažo kodo, ki smo pravkar pogledal. 2557 02:06:18,980 --> 02:06:22,170 Montaža je ta sklop koda za ničel in enic 2558 02:06:22,170 --> 02:06:24,680 da CPU res bo razumeli ob koncu dneva. 2559 02:06:24,680 --> 02:06:27,630 In povezovanje je zadnji korak da se zgodi us-- še enkrat, 2560 02:06:27,630 --> 02:06:29,830 Tako hitro ne bomo niti notice--, ki pravi, 2561 02:06:29,830 --> 02:06:32,460 hej računalnik, da vse ničle in tiste, ki 2562 02:06:32,460 --> 02:06:36,750 posledica pripravo kodo Davidovo, in njegova glavna funkcija v tem primeru. 2563 02:06:36,750 --> 02:06:39,160 >> In hej računalnik, pojdi vse ničel in enic 2564 02:06:39,160 --> 02:06:42,180 da osebje CS50 napisal znotraj knjižnici CS50. 2565 02:06:42,180 --> 02:06:43,440 Zmešamo s tistimi s Davida. 2566 02:06:43,440 --> 02:06:46,648 In hej računalnik, pojdi na vse ničle in tisti, ki je nekdo drug napisal leta 2567 02:06:46,648 --> 02:06:47,470 Pred za printf. 2568 02:06:47,470 --> 02:06:49,880 In dodamo tiste v Vse skupaj, tako da smo jih 2569 02:06:49,880 --> 02:06:52,870 dobil moje ničle in tiste, The ničle in tisti uslužbenec CS50 je, 2570 02:06:52,870 --> 02:06:55,370 printf ničle in tisti, in kaj smo uporabljali. 2571 02:06:55,370 --> 02:07:00,410 >> Vsi so dobili skupaj skupaj v eno program, imenovan, v tem primeru, zdravo. 2572 02:07:00,410 --> 02:07:03,141 Torej odslej, bomo samo uporabiti besedo prevesti. 2573 02:07:03,141 --> 02:07:06,390 In se nam zdi samoumevno, da ko rečemo, pripravijo svoj program, to pomeni, 2574 02:07:06,390 --> 02:07:08,849 hej narediti predobdelavo, montaža in povezovanje. 2575 02:07:08,849 --> 02:07:11,890 Vendar pa je dejansko nekaj sočno stvari tam dogaja pod pokrovom. 2576 02:07:11,890 --> 02:07:13,723 In še posebej, če vas dobili nenavadno nekaj časa, 2577 02:07:13,723 --> 02:07:15,900 lahko začnete pikal približno na tej nižji ravni. 2578 02:07:15,900 --> 02:07:19,660 Ampak za zdaj, zavedajo, da Med takeaways za danes 2579 02:07:19,660 --> 02:07:23,420 so precej preprosto začetek procesa, 2580 02:07:23,420 --> 02:07:26,700 dobili udobno s nekaj podobnega Hello World. 2581 02:07:26,700 --> 02:07:29,575 Dejansko je večina tega, kar smo danes zagotovo ne bo potopi v super hitro. 2582 02:07:29,575 --> 02:07:31,491 In bo trajalo nekaj čas, in nekaj praksa. 2583 02:07:31,491 --> 02:07:33,864 In so možnosti, boste razvrstiti od želeli zadeti tipkovnico 2584 02:07:33,864 --> 02:07:34,780 ali kričati na zaslonu. 2585 02:07:34,780 --> 02:07:35,880 In vse to je v redu. 2586 02:07:35,880 --> 02:07:38,320 Čeprav, morda poskusite ne to v knjižnici toliko. 2587 02:07:38,320 --> 02:07:40,820 >> In na koncu, boste se lahko, čeprav, da začnete 2588 02:07:40,820 --> 02:07:44,580 vidijo vzorce, tako v dobrem kodo ki ste jih napisal in napak 2589 02:07:44,580 --> 02:07:45,370 ki ste jih naredili. 2590 02:07:45,370 --> 02:07:48,965 In podobno kot v procesu postaja TF ali CA je všeč, 2591 02:07:48,965 --> 02:07:51,590 boste začeli, da bi dobili boljše in bolje videl tiste vzorce, 2592 02:07:51,590 --> 02:07:53,774 in samo reševanje vaše lastne težave končno. 2593 02:07:53,774 --> 02:07:56,940 V tem času, bo veliko od nas, da bi nudila vam podporo in dobiš 2594 02:07:56,940 --> 02:07:57,481 skozi to. 2595 02:07:57,481 --> 02:07:59,450 In v odpisov ups Za vse probleme 2596 02:07:59,450 --> 02:08:01,366 bo vas vodi skozi vse ukaze 2597 02:08:01,366 --> 02:08:05,330 da sem zagotovo vedel, od veliko prakse do sedaj, 2598 02:08:05,330 --> 02:08:07,380 vendar bi lahko letela nad glavo za zdaj. 2599 02:08:07,380 --> 02:08:08,580 In to je povsem v redu. 2600 02:08:08,580 --> 02:08:11,230 >> Ampak na koncu, boste začeti videti vzorci pojavljajo. 2601 02:08:11,230 --> 02:08:14,260 In ko prideš mimo vse neumne podrobnosti, kot so oklepaji, 2602 02:08:14,260 --> 02:08:16,710 in zaviti oklepaji in podpičji, in stvari, odkrito povedano, 2603 02:08:16,710 --> 02:08:19,360 da sploh ni intelektualno zanimivo. 2604 02:08:19,360 --> 02:08:22,690 In to ni cilj vsakršno uvodni razred. 2605 02:08:22,690 --> 02:08:24,410 To so ideje, ki se bodo pomembno. 2606 02:08:24,410 --> 02:08:26,659 >> To je zank, in pogoji, in funkcije, 2607 02:08:26,659 --> 02:08:30,552 in močneje abstrakcija, in faktoring kode, 2608 02:08:30,552 --> 02:08:33,510 in dober design in dobro slog, in na koncu pravilnost 2609 02:08:33,510 --> 02:08:37,330 svoje kode, ki je na koncu dogaja, da je najbolj pomembno. 2610 02:08:37,330 --> 02:08:40,925 Torej naslednji teden, bomo to ideje, ki smo prvič videli v Scratch 2611 02:08:40,925 --> 02:08:42,800 in so sedaj prevedene na C. In bomo začeli 2612 02:08:42,800 --> 02:08:45,740 da uvede prvi izmed Seveda je realnih domenah. 2613 02:08:45,740 --> 02:08:50,140 >> Osredotočili se bomo na svetu varnosti, natančneje kriptografiji 2614 02:08:50,140 --> 02:08:51,980 umetnost kodiranja podatkov. 2615 02:08:51,980 --> 02:08:54,000 In med prvimi Težave si sam 2616 02:08:54,000 --> 02:08:56,840 bodo dobili pisati izven igranje z nekaj sintakse 2617 02:08:56,840 --> 02:08:59,880 in reševanje nekaterih logično Težave, na koncu prej ali slej, 2618 02:08:59,880 --> 02:09:03,960 je dejansko Izokrenuti, ali šifriranje, in končno dešifriranje podatkov. 2619 02:09:03,960 --> 02:09:06,470 In vse, kar smo naredili, danes bo precej nizka 2620 02:09:06,470 --> 02:09:09,190 Stopnja je le, da bo omogočilo nam lahko eno, in eno, 2621 02:09:09,190 --> 02:09:13,550 in še en korak nad k pisanje še najbolj zanimivo kodo. 2622 02:09:13,550 --> 02:09:15,050 >> Torej, več o tem naslednji teden. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEO PREDVAJANJE] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> Kaj mi lahko poveste o tem zadnjič, ko si ga videl? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 Kaj naj rečem, res? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Mislim, da je kot vsaka druga pre-produkcija vaja, 2631 02:09:35,340 --> 02:09:40,510 razen da je nekaj, kar je rekel čisto na koncu, da je zaljubljen vame. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -To Je CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -To Je rez vsi, veliko delo na vaji. 2636 02:09:52,190 --> 02:09:53,070 >> -To Je kosilo? 2637 02:09:53,070 --> 02:09:54,986 >> Ja, ti in jaz lahko zgrabi sendvič v bit. 2638 02:09:54,986 --> 02:09:58,380 Naj samo povzetki obveščata z David res hitro. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [END PREDVAJANJE]