1 00:00:00,000 --> 00:00:10,920 >> [Predvajanja glasbe] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: V redu, Dobrodošli nazaj CS50. 3 00:00:14,680 --> 00:00:16,500 To je začetek dva tedna. 4 00:00:16,500 --> 00:00:18,940 Beseda eno od naših prijatelji na kampusu - 5 00:00:18,940 --> 00:00:22,620 če ste zainteresirani, lahko bodisi zdaj ali v neki prihodnji mandat 6 00:00:22,620 --> 00:00:25,670 še enkrat bolj udobno, poučevanje sredi dijaki malo 7 00:00:25,670 --> 00:00:27,680 Nekaj ​​o računalništvu, storiti glavo k temu URL. 8 00:00:27,680 --> 00:00:32,360 Ti so še posebej potrebujejo prav zdaj v učitelji, še posebej, če imate 9 00:00:32,360 --> 00:00:34,700 imeli nekaj izpostavljenost računalništva. 10 00:00:34,700 --> 00:00:38,060 >> Tako opozarjajo, da je zadnji čas, smo uvedli nekaj vrst podatkov v C, in 11 00:00:38,060 --> 00:00:40,590 ste morda začeli, da bi dobili svoje roke umazane s temi doslej 12 00:00:40,590 --> 00:00:41,940 V problem določiti enega. 13 00:00:41,940 --> 00:00:43,230 In smo imeli znak. 14 00:00:43,230 --> 00:00:49,100 Torej, v nekoliko tehničnem smislu, kaj je znak, kot jo poznamo danes? 15 00:00:49,100 --> 00:00:51,050 >> Torej, to je znak, vendar naj so zdaj bolj natančno. 16 00:00:51,050 --> 00:00:53,735 Kaj mislimo z značajem ali posameznik zna? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Ne-numerični znak - 19 00:00:59,500 --> 00:01:00,670 tako ni nujno. 20 00:01:00,670 --> 00:01:04,580 Izkazalo se je, da tudi številke, čeprav ločila in črke 21 00:01:04,580 --> 00:01:06,980 zastopana s temi podatki tip znan kot znak. 22 00:01:06,980 --> 00:01:09,440 Torej ni nujno, da po abecednem redu. 23 00:01:09,440 --> 00:01:11,100 Ja? 24 00:01:11,100 --> 00:01:12,275 >> Torej je ASCII znakov. 25 00:01:12,275 --> 00:01:15,510 Torej, če mislite, da nazaj na nič tedna, ko smo imeli bajt prostovoljcev 26 00:01:15,510 --> 00:01:19,150 pridi gor in bodisi imajo svoje roke ali vsi so predstavljali bitov. 27 00:01:19,150 --> 00:01:22,450 Ampak skupaj kot skupina osmih, so predstavljali bajt. 28 00:01:22,450 --> 00:01:26,030 In mi je uvedel pojem ASCII V tem predavanju, ki preprosto 29 00:01:26,030 --> 00:01:28,170 preslikavo med številkami in črkami. 30 00:01:28,170 --> 00:01:32,010 In uporaba ASCII, kot ti ljudje implicitna, osem bitov 31 00:01:32,010 --> 00:01:33,660 da predstavljajo značaj. 32 00:01:33,660 --> 00:01:36,890 >> Torej, zato lahko, če osem bitov vsak se na enem od dveh vrednosti - 33 00:01:36,890 --> 00:01:38,010 nič ali ena - 34 00:01:38,010 --> 00:01:40,280 To pomeni, da sta bili dve možnosti za to osebo - 35 00:01:40,280 --> 00:01:41,230 nič ali ena - 36 00:01:41,230 --> 00:01:44,070 dve za to osebo, dve za to Oseba, dva za to. 37 00:01:44,070 --> 00:01:47,450 Torej skupno dvakrat dvakrat dva krat dva krat dva - 38 00:01:47,450 --> 00:01:49,700 tako dve osmi v celoti. 39 00:01:49,700 --> 00:01:54,320 Tako da je skupno število znakov 256 možno, da lahko 40 00:01:54,320 --> 00:01:55,750 predstavlja z osem bitov. 41 00:01:55,750 --> 00:01:59,210 >> Zdaj, tiste, ki govorijo Asian jeziki, morda vedeli, da obstaja več 42 00:01:59,210 --> 00:02:02,620 Znaki na svetu kot le AS in BS in Cs in DS. 43 00:02:02,620 --> 00:02:06,130 In res, ASCII ne zadostuje za Veliko jezikov sveta. 44 00:02:06,130 --> 00:02:07,760 Ampak več o tem kdaj drugič. 45 00:02:07,760 --> 00:02:11,240 Za zdaj vemo, da v C, če želite da predstavlja pismo, kos 46 00:02:11,240 --> 00:02:15,780 ločil, ali pa samo nekaj znakov v naravi, ki jih uporabljamo znak. 47 00:02:15,780 --> 00:02:18,240 In to je en bajt ali osem bitov. 48 00:02:18,240 --> 00:02:19,690 >> Kaj pa notr? 49 00:02:19,690 --> 00:02:20,780 No, int je celo število. 50 00:02:20,780 --> 00:02:23,175 Koliko bitov, če se spomnite, je celo število običajno? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Kdo odpoklic? 53 00:02:27,512 --> 00:02:29,600 Torej, to je ponavadi 32. 54 00:02:29,600 --> 00:02:32,120 Dejansko je odvisno od računalnika , ki ga uporabljate. 55 00:02:32,120 --> 00:02:35,770 Toda v napravi, in veliko računalniki, to je 32 bitov ali štiri 56 00:02:35,770 --> 00:02:37,140 bajta - osemkrat štiri. 57 00:02:37,140 --> 00:02:39,790 In ints samo uporabljajo za shranjevanje številke, bodisi negativne, 58 00:02:39,790 --> 00:02:41,610 pozitiven ali nič. 59 00:02:41,610 --> 00:02:45,250 >> In če imaš 32 bitov in da ste samo skrbi pozitivnih številkah, lahko 60 00:02:45,250 --> 00:02:48,960 kdo Športni teren, koliko je mogoče cela računalnik lahko predstavljajo od 61 00:02:48,960 --> 00:02:51,820 nič gor? 62 00:02:51,820 --> 00:02:56,130 Zato bi bilo dva do 32, ki je približno štiri milijarde. 63 00:02:56,130 --> 00:02:59,720 Torej te pristojnosti dveh se bodo ponavljajoče teme v računalništvu. 64 00:02:59,720 --> 00:03:03,930 Kot bomo videli, oni so zelo priročno delati, tudi če to ni čisto 65 00:03:03,930 --> 00:03:05,790 enostavno narediti math v enem glavi. 66 00:03:05,790 --> 00:03:07,000 >> Torej bomo približno štiri milijarde povedati. 67 00:03:07,000 --> 00:03:08,620 Sedaj dolgo časa - 68 00:03:08,620 --> 00:03:09,770 lahko nekako ugibati. 69 00:03:09,770 --> 00:03:10,480 To je več kot notr. 70 00:03:10,480 --> 00:03:12,440 Koliko bitov? 71 00:03:12,440 --> 00:03:14,250 Torej 64 bitov ali osem bajtov. 72 00:03:14,250 --> 00:03:17,480 To samo pomeni, da lahko predstavljajo tudi Večje število, večji pozitivni ali 73 00:03:17,480 --> 00:03:19,160 Večje negativne številke. 74 00:03:19,160 --> 00:03:20,060 >> In kako približno plavajo? 75 00:03:20,060 --> 00:03:22,260 To je s plavajočo vejico vrednost 32 bitov. 76 00:03:22,260 --> 00:03:25,180 To je samo realno število, nekaj z decimalno vejico. 77 00:03:25,180 --> 00:03:30,100 Ampak, če boste namesto tega morali več mest decimalno vejico ali želite 78 00:03:30,100 --> 00:03:33,720 predstavljajo večje število z nekaterimi frakcija po njej, lahko uporabite 79 00:03:33,720 --> 00:03:36,260 dvojna, kar je 64 bitov. 80 00:03:36,260 --> 00:03:38,240 >> Vendar pa je zanimivo takeaway tukaj. 81 00:03:38,240 --> 00:03:42,890 Torej, če se ints omejena z 32-bitno in celo dolgi podolgovati so omejeni z 64 82 00:03:42,890 --> 00:03:46,180 bitov, da nekako zastavlja vprašanje, Kaj pa, če si dejansko želite prešteti 83 00:03:46,180 --> 00:03:48,790 več kot 4 milijarde za notr? 84 00:03:48,790 --> 00:03:50,330 No, ste jo pravkar uporabljate dolgo časa. 85 00:03:50,330 --> 00:03:54,200 Kaj pa, če želite prešteti višje od dveh do 64., gor ali dol? 86 00:03:54,200 --> 00:03:55,810 >> No, to je ogromno število. 87 00:03:55,810 --> 00:03:59,250 Toda sčasoma, boste morda dejansko mar tovrstnih vrednot, 88 00:03:59,250 --> 00:04:03,070 še posebej, če uporabljate bazo podatkov in začeli zbirati veliko in veliko 89 00:04:03,070 --> 00:04:06,190 in veliko podatkov in dodeljevanje edinstven Številke na vsakem kosu teh podatkov. 90 00:04:06,190 --> 00:04:07,430 Tako da smo nekako imate težave. 91 00:04:07,430 --> 00:04:10,700 In podobno, s plavajočo vejico vrednote - plovci ali dvojic - 92 00:04:10,700 --> 00:04:14,290 če imaš samo končno število bitov, koliko skupne številke si lahko 93 00:04:14,290 --> 00:04:16,980 morda pomenijo? 94 00:04:16,980 --> 00:04:19,540 >> No, to je manj jasno, ko vključujejo decimalno vejico. 95 00:04:19,540 --> 00:04:20,899 Ampak to je gotovo omejena. 96 00:04:20,899 --> 00:04:24,390 Če imate končno število bitov, končno število ljudi, omejenost 97 00:04:24,390 --> 00:04:27,350 število žarnic, zagotovo lahko predstavljajo le končno število 98 00:04:27,350 --> 00:04:28,510 plavajočo vejico vrednosti. 99 00:04:28,510 --> 00:04:33,170 Toda koliko realne številke so njihovi na svetu? 100 00:04:33,170 --> 00:04:33,680 Tam je neskončno. 101 00:04:33,680 --> 00:04:37,280 Tako, da je neke vrste problem, ker smo nimajo neskončno količino 102 00:04:37,280 --> 00:04:39,970 pomnilnika RAM ali znotraj naših računalnikov. 103 00:04:39,970 --> 00:04:41,780 Torej nekaj zahtevnih stvari se lahko zgodi. 104 00:04:41,780 --> 00:04:43,900 >> Torej, gremo naprej in poskusite to tu izraziti. 105 00:04:43,900 --> 00:04:46,240 Dovolite mi, da gredo naprej in odpreti gedit. 106 00:04:46,240 --> 00:04:50,360 Jaz grem naprej in shranite datoteko imenovano "floats0.c" samo, da je 107 00:04:50,360 --> 00:04:54,630 v skladu s primerom, ki je na voljo na spletu, če bi želeli. 108 00:04:54,630 --> 00:04:58,080 In jaz grem naprej in jo opredeli kot sledi - 109 00:04:58,080 --> 00:05:01,540 Jaz grem naprej in rekli, int Glavni nična, saj smo pogosto storiti. 110 00:05:01,540 --> 00:05:07,190 >> In potem v tem programu, bom razglasi sam plovec, tako da 32-bitni 111 00:05:07,190 --> 00:05:09,700 spremenljivka se imenuje f samovoljno. 112 00:05:09,700 --> 00:05:13,910 In potem bom shranite v njem Ne vem, desetino, tako 0,1. 113 00:05:13,910 --> 00:05:16,590 Torej bom izraziti, da kot eden deljeno z 10, ki je popolnoma 114 00:05:16,590 --> 00:05:17,790 legitimno C. 115 00:05:17,790 --> 00:05:20,460 >> In potem na drugi liniji, sem preprosto želite natisniti to vrednost. 116 00:05:20,460 --> 00:05:22,950 Tako opozarjajo, da lahko uporabimo seznanjeni printf. 117 00:05:22,950 --> 00:05:25,420 Mi ne želimo uporabiti% i za notr. 118 00:05:25,420 --> 00:05:28,360 Želimo uporabiti% F za likvidna sredstva. 119 00:05:28,360 --> 00:05:33,080 In potem bom naredil poševnico nazaj n, zapri citiram, vejica, f, podpičje. 120 00:05:33,080 --> 00:05:34,400 >> Torej, tukaj je moj program. 121 00:05:34,400 --> 00:05:35,820 Tukaj je že ena napaka. 122 00:05:35,820 --> 00:05:38,640 Ali nekdo, za katerega se ta kliknili že želijo izpostaviti vsaj 123 00:05:38,640 --> 00:05:40,220 eno napako sem naredil? 124 00:05:40,220 --> 00:05:42,470 Ja? 125 00:05:42,470 --> 00:05:42,800 Ja. 126 00:05:42,800 --> 00:05:47,860 Pozabil sem "# include" na top, so simptom, ki, če skušam 127 00:05:47,860 --> 00:05:50,490 zbere ta se bo, da prevajalnik bo vpij name, 128 00:05:50,490 --> 00:05:52,770 pravijo nedefiniran simbol ali nekaj v tem smislu. 129 00:05:52,770 --> 00:05:55,360 Da ne razume, kaj printf všeč. 130 00:05:55,360 --> 00:05:59,380 >> Torej bom naredil "# include ", Shranite datoteko. 131 00:05:59,380 --> 00:06:00,400 In zdaj je v boljši formi. 132 00:06:00,400 --> 00:06:02,690 Ampak jaz sem tudi dogaja s točko ven eno novo podrobnost danes. 133 00:06:02,690 --> 00:06:08,620 Poleg navedbe mesto Imetniki kot% F% i% s, lahko 134 00:06:08,620 --> 00:06:12,320 včasih vpliva na vedenje te ograde. 135 00:06:12,320 --> 00:06:15,540 Na primer, v primeru spremenljivo vrednost točke, če želim, 136 00:06:15,540 --> 00:06:22,200 prikazati eno decimalno mesto po obdobje, lahko dejansko narediti 0.1F. 137 00:06:22,200 --> 00:06:26,830 Torej, z drugimi besedami, ločevanje in f znak za odstotek s 0,1, samo 138 00:06:26,830 --> 00:06:30,200 printf povedal, boste morda celo kup številk po decimalko 139 00:06:30,200 --> 00:06:30,930 točko za mene. 140 00:06:30,930 --> 00:06:32,870 Ampak želim le, da ena od njih. 141 00:06:32,870 --> 00:06:36,280 >> Torej, jaz grem naprej zdaj in prihranite ta program, pojdi v svoj terminal 142 00:06:36,280 --> 00:06:41,870 okno, in jaz grem naprej in tip bi float 0, vnesite. 143 00:06:41,870 --> 00:06:44,930 Vidim, da je nekoliko Grobni črto se bodo začeli bolj smiselno, kot smo 144 00:06:44,930 --> 00:06:46,900 ga draži narazen ta teden in naslednji. 145 00:06:46,900 --> 00:06:50,480 Zdaj bom šel naprej in vodijo float nič. 146 00:06:50,480 --> 00:06:52,020 In prekleto. 147 00:06:52,020 --> 00:06:54,880 >> Torej obstaja še en bug Tukaj nekega razloga. 148 00:06:54,880 --> 00:07:02,490 Sem prepričan, da je za dobro desetino, ali ena deljeno z 10, ne 0,0. 149 00:07:02,490 --> 00:07:04,590 Mogoče sem samo ne iščejo na dovolj številk. 150 00:07:04,590 --> 00:07:08,580 Torej, zakaj ne rečem dva 0,2 videti dva namesto da bi samo ena decimalna mesta natančno. 151 00:07:08,580 --> 00:07:11,810 Naj se vrnem na mojo terminal okno Tu in zadeti gor nekajkrat 152 00:07:11,810 --> 00:07:12,840 glej moje zgodovine. 153 00:07:12,840 --> 00:07:15,910 Ali bo spet plavajo nič, in ponovno navzgor. 154 00:07:15,910 --> 00:07:17,730 In zdaj začne. 155 00:07:17,730 --> 00:07:20,000 >> In zdaj sem prepričan, da je to narobe. 156 00:07:20,000 --> 00:07:23,030 In sem lahko naredil tri in štiri, in sem verjetno bo, da vidim ničle. 157 00:07:23,030 --> 00:07:24,880 Torej, kje je napaka? 158 00:07:24,880 --> 00:07:27,910 Ena deljeno z 10 mora biti 0,1. 159 00:07:27,910 --> 00:07:30,310 Nekdo želi, da bo zabodel v kakšni Temeljno vprašanje je? 160 00:07:30,310 --> 00:07:32,400 Ja? 161 00:07:32,400 --> 00:07:33,420 Oni oba cela. 162 00:07:33,420 --> 00:07:33,920 Pa kaj potem? 163 00:07:33,920 --> 00:07:37,820 Torej z eno deljeno z 10, ki je kaj počnem v aritmetiki. 164 00:07:37,820 --> 00:07:41,185 In dobim 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Ja. 166 00:07:41,660 --> 00:07:43,240 In tako je res, da je vprašanje. 167 00:07:43,240 --> 00:07:46,700 Ko boste vzeli celo v računalniku in si ga delimo z drugo celo število, 168 00:07:46,700 --> 00:07:50,430 Računalnik privzeto se bo Predvidevam, da hočeš celo. 169 00:07:50,430 --> 00:07:54,620 Problem, čeprav je seveda da 0.1 ni celo število. 170 00:07:54,620 --> 00:07:55,680 To je realno število. 171 00:07:55,680 --> 00:07:59,610 Pa kaj računalnik ne z Privzeto je to samo vrže proč 172 00:07:59,610 --> 00:08:01,070 Vse decimalno vejico. 173 00:08:01,070 --> 00:08:03,380 To ne zaokrožujejo navzgor ali navzdol po sebi. 174 00:08:03,380 --> 00:08:06,480 Samo odvrže vse decimalno vejico. 175 00:08:06,480 --> 00:08:07,430 In zdaj je to smiselno. 176 00:08:07,430 --> 00:08:09,740 Ker zdaj smo jasno preostane nič. 177 00:08:09,740 --> 00:08:10,250 >> Toda počakaj malo. 178 00:08:10,250 --> 00:08:11,840 Jaz ne vidim nič int. 179 00:08:11,840 --> 00:08:14,910 Jaz sem pravzaprav videl 0,00. 180 00:08:14,910 --> 00:08:16,340 Torej, kako uskladiti zdaj to? 181 00:08:16,340 --> 00:08:22,850 Če ena deljeno z 10 je nič, vendar sem videnje 0,00, kjer je pridobivanje 182 00:08:22,850 --> 00:08:24,250 pretvori nazaj v realno število? 183 00:08:24,250 --> 00:08:25,500 Ja. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Točno tako. 186 00:08:30,630 --> 00:08:35,600 >> Torej, tukaj v pete, ko sem dejansko shranjevanje to, kar je 0,1 nato 187 00:08:35,600 --> 00:08:39,549 prireže na nič, znotraj float, da je dejansko enaka 188 00:08:39,549 --> 00:08:42,100 shranjevanjem ne kot int a, res, kot likvidna sredstva. 189 00:08:42,100 --> 00:08:46,540 Poleg tega sem nato z printf v izrecno natisnete to število na dve 190 00:08:46,540 --> 00:08:49,740 decimalni mesti, čeprav obstaja Ne bi dejansko obstajajo. 191 00:08:49,740 --> 00:08:51,020 >> Torej ta vrsta zanič, kajne? 192 00:08:51,020 --> 00:08:53,640 Očitno ne moreš računati, vsaj na tej stopnji 193 00:08:53,640 --> 00:08:55,600 Natančnost, v računalniku. 194 00:08:55,600 --> 00:08:56,930 Ampak zagotovo obstaja rešitev. 195 00:08:56,930 --> 00:09:00,410 Kaj je najenostavnejši fix smo lahko morda storiti, pa čeprav samo intuitivno tukaj 196 00:09:00,410 --> 00:09:01,130 rešiti to? 197 00:09:01,130 --> 00:09:02,380 Ja? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Obrnite cela v - 200 00:09:06,574 --> 00:09:06,976 Ja. 201 00:09:06,976 --> 00:09:10,420 Tudi če nisem povsem prepričan, kaj je res se dogaja, če je 202 00:09:10,420 --> 00:09:13,440 bistveno je povezano z njimi, tako da ints, no, zakaj ne jaz 203 00:09:13,440 --> 00:09:18,230 da to 10.0, ki to 1.0, shranili datoteko. 204 00:09:18,230 --> 00:09:20,990 Naj grem nazaj na dno in prevedem. 205 00:09:20,990 --> 00:09:23,030 Naj se sedaj ponovi. 206 00:09:23,030 --> 00:09:23,420 In tam - 207 00:09:23,420 --> 00:09:27,690 Zdaj, jaz imam eno desetino zastopali 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Vse je v redu. 209 00:09:28,420 --> 00:09:29,220 Tako da to ni slabo. 210 00:09:29,220 --> 00:09:31,730 In naj omenim še en drug način smo lahko to rešili. 211 00:09:31,730 --> 00:09:35,580 Dovolite mi, da dejansko roll nazaj v čas da ko smo to imeli kot eno 212 00:09:35,580 --> 00:09:36,680 Deseti pred nekaj trenutki. 213 00:09:36,680 --> 00:09:40,800 In mi gredo naprej in shranili to datoteko kot drugo ime datoteke, samo da bi 214 00:09:40,800 --> 00:09:41,750 imajo malo checkpoint. 215 00:09:41,750 --> 00:09:43,450 Tako da je bila ena različica. 216 00:09:43,450 --> 00:09:45,520 In zdaj mi gredo naprej in naredite še eno različico. 217 00:09:45,520 --> 00:09:48,540 Poklicali bomo to različico dva nič indeksirajo. 218 00:09:48,540 --> 00:09:51,280 >> In bom namesto tega to - veste kaj? 219 00:09:51,280 --> 00:09:54,400 Dodal piko nič dela v tem primeru. 220 00:09:54,400 --> 00:09:56,060 Recimo nekdo spremenljivka. 221 00:09:56,060 --> 00:09:57,680 Naj bi bilo 10 spremenljiva. 222 00:09:57,680 --> 00:10:00,680 Z drugimi besedami, domnevam, da nisem mogla le težko koda 0,0 konec 223 00:10:00,680 --> 00:10:02,340 tega aritmetično izražanja. 224 00:10:02,340 --> 00:10:05,820 No, jaz lahko dejansko nekaj storiti V oklepaju se imenuje litje. 225 00:10:05,820 --> 00:10:11,920 Jaz lahko odda, da celo 10 do likvidnih sredstev, in sem lahko vrgel to celo število ena, da 226 00:10:11,920 --> 00:10:12,800 plovec, kot tudi. 227 00:10:12,800 --> 00:10:17,190 Potem math, da se dogaja, da je treba storiti je dejansko 1,0 deljeno z 10,0, 228 00:10:17,190 --> 00:10:19,250 rezultat, ki gre v f kot prej. 229 00:10:19,250 --> 00:10:26,130 Torej, če sem prevedem to, kot da lebdi 2, in zdaj plava 2, dobim enaka 230 00:10:26,130 --> 00:10:27,020 odgovor, kot tudi. 231 00:10:27,020 --> 00:10:29,640 >> Torej je to precej izmišljene primer, Za rešitev tega problema 232 00:10:29,640 --> 00:10:31,400 z uvedbo litje. 233 00:10:31,400 --> 00:10:34,410 Ampak na splošno, vlivanje dogaja, da se močna stvar, zlasti 234 00:10:34,410 --> 00:10:38,180 Problem nastavite dva v enem tednu, ko želite spremeniti eno vrsto podatkov za 235 00:10:38,180 --> 00:10:41,800 drugo, da ob koncu dneva so predstavljene na enak način. 236 00:10:41,800 --> 00:10:44,970 Ob koncu dneva, vsak eno stvar, ki smo se pogovarjali o doslej je 237 00:10:44,970 --> 00:10:46,710 le ints, ki je pod pokrovom. 238 00:10:46,710 --> 00:10:48,950 Ali pa, če je to preveč nizko raven za ti, oni so samo številke 239 00:10:48,950 --> 00:10:49,750 Pod pokrovom. 240 00:10:49,750 --> 00:10:52,850 Tudi znakov, spet, spomnimo iz tedna nič, so številke 241 00:10:52,850 --> 00:10:53,990 Pod pokrovom. 242 00:10:53,990 --> 00:10:57,240 >> Kar pomeni, da lahko pretvorbo med različne vrste številk, če 243 00:10:57,240 --> 00:10:58,060 oni so samo bitov. 244 00:10:58,060 --> 00:11:01,020 Mi lahko pretvorite med številkami in pisma, če si le 245 00:11:01,020 --> 00:11:02,580 bitov, in obratno. 246 00:11:02,580 --> 00:11:07,170 Litje in na ta način je mehanizem v programiranju, ki vam omogoča prisilno 247 00:11:07,170 --> 00:11:10,970 spremeniti eno vrsto podatkov v drugo. 248 00:11:10,970 --> 00:11:14,570 Žal pa to ni tako enostavna, kot sem lahko všeč. 249 00:11:14,570 --> 00:11:19,220 >> Jaz grem nazaj v plovci 1, ki je enostavnejša, 250 00:11:19,220 --> 00:11:22,830 enostavno ena z 0,0 dodana vsakemu. 251 00:11:22,830 --> 00:11:25,260 In prav tako hitro Osvežitveni, Naj gredo naprej in znova 252 00:11:25,260 --> 00:11:27,670 to, da lebdi 2 - 253 00:11:27,670 --> 00:11:30,300 Oprostite, to je, da lebdi 1. 254 00:11:30,300 --> 00:11:32,050 In zdaj pa teče boje 1. 255 00:11:32,050 --> 00:11:34,810 In na dnu, opazili da sem res dobil 0.1. 256 00:11:34,810 --> 00:11:36,165 Torej, problem rešen. 257 00:11:36,165 --> 00:11:37,280 >> Ampak še ni. 258 00:11:37,280 --> 00:11:40,000 Jaz sem zdaj dogaja, da bi dobili malo radovedni, in jaz grem nazaj v moji 259 00:11:40,000 --> 00:11:41,620 printf izjavo in pravijo, veste kaj? 260 00:11:41,620 --> 00:11:44,090 Želel bi potrditi, da je to je res ena desetina. 261 00:11:44,090 --> 00:11:47,890 In jaz grem rad videl to da, recimo, pet decimalnih mest. 262 00:11:47,890 --> 00:11:48,570 To ni problem. 263 00:11:48,570 --> 00:11:52,020 I spremeniti dve do pet, Jaz prevedem z znamko. 264 00:11:52,020 --> 00:11:53,770 Jaz ponovitev je kot plava 1. 265 00:11:53,770 --> 00:11:54,990 Videti precej dobro. 266 00:11:54,990 --> 00:11:58,570 Moje sanity pregledi lahko konča tam, ampak Sem že malo bolj pustolovski. 267 00:11:58,570 --> 00:12:00,330 Grem spremeniti 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Želim si, da 10 mest po decimalno mesto. 269 00:12:03,440 --> 00:12:09,060 >> In jaz grem naprej in znova to in ponovitev lebdi 1. 270 00:12:09,060 --> 00:12:13,060 Nekako mi je žal, da je to preizkušen več, ker je moja matematika ni tako 271 00:12:13,060 --> 00:12:14,320 popraviti več, kot je videti. 272 00:12:14,320 --> 00:12:15,630 Toda počakaj malo, morda to je samo krompir. 273 00:12:15,630 --> 00:12:17,810 Morda računalnik deluje malo čudno. 274 00:12:17,810 --> 00:12:21,810 Dovolite mi, da gredo naprej in to 20 decimalna mesta in sem se prepričati, da vem 275 00:12:21,810 --> 00:12:22,540 kako narediti matematiko. 276 00:12:22,540 --> 00:12:23,460 Vem, kako program. 277 00:12:23,460 --> 00:12:26,960 Naredite plovci 1, prevedem, in prekleto. 278 00:12:26,960 --> 00:12:31,110 To je res, res dobili daleč od znamke. 279 00:12:31,110 --> 00:12:32,490 >> Torej, kaj se tukaj dogaja? 280 00:12:32,490 --> 00:12:36,050 Intuitivno, ki temelji na naših predpostavkah prej o velikosti podatkovnih tipov 281 00:12:36,050 --> 00:12:38,040 kaj je treba tu dogaja pod pokrovom? 282 00:12:38,040 --> 00:12:39,290 Ja? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Točno tako. 285 00:12:43,590 --> 00:12:46,480 Če želite to veliko natančnost in to je pekel od veliko natančnostjo - 286 00:12:46,480 --> 00:12:48,770 20 številke za decimalno vejico. 287 00:12:48,770 --> 00:12:51,990 Si ne moremo predstavljati poljubno število, če imate 288 00:12:51,990 --> 00:12:52,930 poljubno število bitov. 289 00:12:52,930 --> 00:12:54,190 Ampak ne bomo. 290 00:12:54,190 --> 00:12:57,200 Za plovcem, imamo le 32 bitov. 291 00:12:57,200 --> 00:13:02,260 >> Torej, če lahko 32 bitov lahko nadomeščena le način - tako kot naše ljudi naprej, oder 292 00:13:02,260 --> 00:13:05,780 Roke gor ali dol - v končnem številu načinov, obstaja samo končno število 293 00:13:05,780 --> 00:13:08,640 realnih števil lahko predstavlja teh bitov. 294 00:13:08,640 --> 00:13:10,500 Tako računalnik sčasoma se bo moral 295 00:13:10,500 --> 00:13:11,730 začetek rezanje vogali. 296 00:13:11,730 --> 00:13:15,500 Računalnik lahko skrijete tiste podrobnosti pri nas za malo časa. 297 00:13:15,500 --> 00:13:18,880 Ampak, če bomo začeli drezati v številu in videti dlje in dlje v 298 00:13:18,880 --> 00:13:23,220 vlečni številk v celo število potem smo začeli videti, da je 299 00:13:23,220 --> 00:13:26,480 dejansko približevanje Ideja za desetino. 300 00:13:26,480 --> 00:13:29,860 >> In tako se je izkazalo, tragično pa je neskončno število števil 301 00:13:29,860 --> 00:13:35,060 ne moremo predstavlja ravno računalnik, vsaj s končno 302 00:13:35,060 --> 00:13:38,030 število bitov, končna količina RAM-a. 303 00:13:38,030 --> 00:13:41,210 Zdaj na žalost je to včasih ima v realnem svetu posledice. 304 00:13:41,210 --> 00:13:45,980 Če ljudje ne povsem cenim to ali nekako samoumevno dejstvo, 305 00:13:45,980 --> 00:13:48,310 da bo njihov računalnik samo to, kar jim je povedal, da ne in ne 306 00:13:48,310 --> 00:13:51,430 razumeti to osnovno Reprezentančni podrobnosti - 307 00:13:51,430 --> 00:13:55,290 ki, odkrito povedano, v nekaterih jezikih so skrita od uporabnika, za razliko od C - 308 00:13:55,290 --> 00:13:56,500 nekatere slabe stvari se lahko zgodi. 309 00:13:56,500 --> 00:13:58,650 >> In kaj sem mislil, da bi naredil je korak nazaj. 310 00:13:58,650 --> 00:14:00,420 To je približno osem-minutni video. 311 00:14:00,420 --> 00:14:04,200 Je na sporedu pred nekaj leti, in daje vpogled v dejansko kaj lahko gredo 312 00:14:04,200 --> 00:14:09,290 narobe, če se premalo cenim to vrste informacij v zelo vse preveč 313 00:14:09,290 --> 00:14:10,080 realnem svetu. 314 00:14:10,080 --> 00:14:12,965 Če bi lahko dim luči za nekaj minut. 315 00:14:12,965 --> 00:14:14,360 >> SPEAKER 1: Zdaj vrniti inženiring 316 00:14:14,360 --> 00:14:17,160 nesreče na sodobnih čudeži. 317 00:14:17,160 --> 00:14:18,680 >> Računalniki - 318 00:14:18,680 --> 00:14:21,340 smo vsi prišli do sprejema pogosto frustrirajuće težave 319 00:14:21,340 --> 00:14:23,170 da gredo z njimi. 320 00:14:23,170 --> 00:14:27,570 Hrošči, virusi in programske opreme glitches so majhne cene za plačilo stroškov 321 00:14:27,570 --> 00:14:28,960 udobje. 322 00:14:28,960 --> 00:14:32,040 Toda v high-tech in visoke hitrosti vojaški in vesoljski program 323 00:14:32,040 --> 00:14:38,650 aplikacije, najmanjši problem se lahko poveča v katastrofo. 324 00:14:38,650 --> 00:14:44,480 >> 4. junija 1996, znanstveniki pripravljeni začeti brez posadke Ariane 5 raketa. 325 00:14:44,480 --> 00:14:48,700 To je bilo izvajanje znanstvenih satelitov zasnovan tako, da natančno določi, kako vzpostaviti 326 00:14:48,700 --> 00:14:53,250 Zemljino magnetno polje interagira s sončnimi vetrovi. 327 00:14:53,250 --> 00:14:57,540 Raketa je bila zgrajena za evropsko Vesoljsko agencijo in dvignjen od njenega 328 00:14:57,540 --> 00:14:59,906 objekt na obali Francoske Gvajane. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: Na približno 37 sekund, v let, so najprej opazili 330 00:15:03,660 --> 00:15:04,910 kaj je šlo narobe. 331 00:15:04,910 --> 00:15:08,130 Šobe so vrtljiva v Tako da res ne bi smeli. 332 00:15:08,130 --> 00:15:12,380 Okoli 40 sekund v letu, jasno Vozilo je v težavah. 333 00:15:12,380 --> 00:15:14,400 In to je, ko je Odločitev, da ga uniči. 334 00:15:14,400 --> 00:15:18,520 Uradnik za varnost območje, s ogromno poguma, pritisnete na gumb, 335 00:15:18,520 --> 00:15:23,900 razneslo raketo, preden se lahko postal nevarnost za javno varnost. 336 00:15:23,900 --> 00:15:27,810 >> SPEAKER 1: To je bilo prvo potovanje od Ariane 5, in njeno uničenje 337 00:15:27,810 --> 00:15:32,020 prišlo zaradi razpoke vgrajenih V opremo rakete. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: Problem na Ariane je, da je število 339 00:15:33,980 --> 00:15:36,390 , ki je potrebna 64 bitov izraziti. 340 00:15:36,390 --> 00:15:39,420 In so želeli spremeniti za 16-bitno številko. 341 00:15:39,420 --> 00:15:43,130 Domnevali so, da je število nikoli bo zelo velik, da je večina 342 00:15:43,130 --> 00:15:46,810 tiste cifre v 64-bitni Številka so ničle. 343 00:15:46,810 --> 00:15:48,270 Da je bilo narobe. 344 00:15:48,270 --> 00:15:51,380 >> SPEAKER 1: nesposobnost enega programske opreme Program sprejeti vrsto 345 00:15:51,380 --> 00:15:55,350 številka, ki jo druga pa je bila na koren neuspeha. 346 00:15:55,350 --> 00:15:59,970 Razvoj programske opreme je postala zelo drago del nove tehnologije. 347 00:15:59,970 --> 00:16:03,980 Ariane 4 Raketa je bila zelo uspešen, toliko programske opreme 348 00:16:03,980 --> 00:16:07,480 ustvarjena za to je bil tudi uporablja v Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP Coyle: Osnovni problem je bil, da je Ariane 5 hitreje 350 00:16:11,980 --> 00:16:13,720 pospešila hitreje. 351 00:16:13,720 --> 00:16:17,250 In programska oprema ni imel predstavljali, da. 352 00:16:17,250 --> 00:16:20,770 >> SPEAKER 1: uničenje rakete je bil velik finančni katastrofa, 353 00:16:20,770 --> 00:16:24,200 vse zaradi minuto napake programske opreme. 354 00:16:24,200 --> 00:16:27,820 To pa ni bila podatki prvič Težave pretvorbe je pestijo moderno 355 00:16:27,820 --> 00:16:30,620 raketni tehnologiji. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: Leta 1991, z začetkom od prve zalivske vojne, Patriot 357 00:16:34,480 --> 00:16:38,610 raketa doživela podobno vrsto problema pretvorbe številko. 358 00:16:38,610 --> 00:16:44,910 Posledično je bilo 28 ameriških vojakov ubitih in okoli 100 ranjenih drugi 359 00:16:44,910 --> 00:16:48,600 ko Patriot, ki naj za zaščito pred dohodne rakete Scud, 360 00:16:48,600 --> 00:16:51,630 ni na ogenj izstrelkov. 361 00:16:51,630 --> 00:16:55,110 >> SPEAKER 1: Ko je Irak napadel Kuvajt in Amerika je začela Desert Storm v 362 00:16:55,110 --> 00:17:00,570 v začetku 1991, Patriot raketne baterije so bili razporejeni za zaščito Saudsko Arabijo 363 00:17:00,570 --> 00:17:04,760 in Izrael od iraške Scud raketne napade. 364 00:17:04,760 --> 00:17:09,720 Patriot je ameriški srednjega dosega Sistem zemlja-zrak, ki ga proizvaja 365 00:17:09,720 --> 00:17:11,569 podjetje Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE POSTOL: velikost Patriot interceptor sama grobo 367 00:17:16,410 --> 00:17:17,710 20-metrov dolgo. 368 00:17:17,710 --> 00:17:20,800 In tehta okoli 2000 kilogramov. 369 00:17:20,800 --> 00:17:22,940 In to nosi bojno glavo približno - 370 00:17:22,940 --> 00:17:24,905 Mislim, da je približno 150 £. 371 00:17:24,905 --> 00:17:31,030 In bojno glavo sama visoko eksplozivne ki ima 372 00:17:31,030 --> 00:17:33,270 fragmenti okoli njega. 373 00:17:33,270 --> 00:17:37,490 Ohišje konico je namenjen da deluje kot šibre. 374 00:17:37,490 --> 00:17:40,720 >> SPEAKER 1: Rakete se izvajajo štiri na posodo in se prevažajo 375 00:17:40,720 --> 00:17:43,050 jo polpriklopnik. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP Coyle: Patriot protiraketni Sistem se vrne na 377 00:17:47,490 --> 00:17:50,710 najmanj 20 let. 378 00:17:50,710 --> 00:17:54,350 To je bil prvotno zasnovan kot obrambnih raket zrak 379 00:17:54,350 --> 00:17:56,190 sestrelili sovražnik letal. 380 00:17:56,190 --> 00:18:02,490 V prvi zalivski vojni, ko je ta vojna prišel je vojska želela, da jo uporabljajo 381 00:18:02,490 --> 00:18:05,535 sestrelili rakete Scud, ne letal. 382 00:18:05,535 --> 00:18:09,310 Iraški zračne sile ni bilo toliko problem. 383 00:18:09,310 --> 00:18:12,450 Vendar je vojska skrbi rakete Scud. 384 00:18:12,450 --> 00:18:15,950 In tako so skušali nadgraditi Patriot. 385 00:18:15,950 --> 00:18:18,750 >> SPEAKER 1: Prestrezanje sovražnika raket potuje mach petih bilo 386 00:18:18,750 --> 00:18:20,890 bodo dovolj zahtevna. 387 00:18:20,890 --> 00:18:25,590 Toda, ko je bil Patriot planila služba, vojska ni poznala 388 00:18:25,590 --> 00:18:31,710 Iraški sprememba, ki so izrazili svoja Rakete Scud skoraj nemogoče zadeti. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE POSTOL: Kaj se je zgodilo Je rakete Scud, ki so bile 390 00:18:35,240 --> 00:18:36,570 prihajajo bila nestabilna. 391 00:18:36,570 --> 00:18:37,532 Bili so niha. 392 00:18:37,532 --> 00:18:43,220 Razlog za to je bila Iračanov, v Da bi dobili 600 kilometrov od 393 00:18:43,220 --> 00:18:47,530 Projektil 300 kilometrov dosega, je teža od prednje bojne konice. 394 00:18:47,530 --> 00:18:49,290 Naredili so bojne glave vžigalnik. 395 00:18:49,290 --> 00:18:53,110 Torej, zdaj Patriot poskuša da pridejo na Scud. 396 00:18:53,110 --> 00:18:56,470 In večino časa, velika Večino časa, bi to samo 397 00:18:56,470 --> 00:18:58,730 letenje, ki jih Scud. 398 00:18:58,730 --> 00:19:01,760 >> SPEAKER 1: Ko sistem Patriot Operaterji spoznal Patriot zamudil 399 00:19:01,760 --> 00:19:06,690 njen cilj, da eksplodirajo Patriots bojno glavo, da bi se izognili možnosti 400 00:19:06,690 --> 00:19:10,300 žrtev, če je bilo dovoljeno da pade na tla. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE POSTOL: To je tisto, kar najbolj ljudje videli kot velike ognjene krogle na nebu 402 00:19:14,540 --> 00:19:20,350 in napačno razumljen kot prestreza od Scud bojnih glav. 403 00:19:20,350 --> 00:19:23,320 >> SPEAKER 1: Čeprav je v nočnem nebu Patriots je zdelo, da bo uspešno 404 00:19:23,320 --> 00:19:27,530 uničenje rakete Scud na Dhahran tam mogoče ne bo pomote, o svojem 405 00:19:27,530 --> 00:19:29,140 uspešnosti. 406 00:19:29,140 --> 00:19:34,180 Tam, radarski sistem Patriot izgubila Spremljajte dohodni Scud in nikoli 407 00:19:34,180 --> 00:19:36,380 začela zaradi programske pomanjkljivost. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> To je bil Izraelci, ki je prvi odkril da dlje sistem 410 00:19:42,700 --> 00:19:48,020 je o, večja čas neskladje je postal zaradi ure 411 00:19:48,020 --> 00:19:50,470 vgrajeni v sistemu računalnika. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Približno dva tedna pred Tragedija v Dhahran, Izraelci 413 00:19:54,640 --> 00:19:58,440 poročali, da obrambno ministrstvo da je bil sistem izgublja časa. 414 00:19:58,440 --> 00:20:01,280 Po približno osmih urah teče, so opazili, da je sistem 415 00:20:01,280 --> 00:20:03,530 postala opazno manj natančna. 416 00:20:03,530 --> 00:20:07,710 Obrambno ministrstvo odzvala z povedal vse Patriot baterij 417 00:20:07,710 --> 00:20:10,500 da ne pustite sistemov zelo dolgo časa. 418 00:20:10,500 --> 00:20:12,430 Niso povedali, kaj je bilo dolgo časa. 419 00:20:12,430 --> 00:20:13,330 Osem ur? 420 00:20:13,330 --> 00:20:13,810 10 ur? 421 00:20:13,810 --> 00:20:14,990 1000 ur? 422 00:20:14,990 --> 00:20:17,150 Nihče ni vedel. 423 00:20:17,150 --> 00:20:20,220 >> SPEAKER 1: Patriot baterije nameščene V vojašnici na Dhahran 424 00:20:20,220 --> 00:20:24,660 in je njegovo neustrezno notranja ura že na več kot 100 ur na noč 425 00:20:24,660 --> 00:20:27,470 25. februar. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: To sledil čas Natančnost približno desetinko sekunde. 427 00:20:31,770 --> 00:20:34,480 Sedaj desetinko sekunde Zanimivo število, ker ne more biti 428 00:20:34,480 --> 00:20:39,940 izražene v binarni natančno, kar pomeni ni mogoče izražena natanko 429 00:20:39,940 --> 00:20:42,500 vsak sodoben digitalni računalnik. 430 00:20:42,500 --> 00:20:46,920 Težko je verjeti, ampak uporabite to kot primer. 431 00:20:46,920 --> 00:20:49,000 Oglejmo Številko eno tretjino. 432 00:20:49,000 --> 00:20:53,150 Ena tretjina ne more biti izražena na decimalko natančno. 433 00:20:53,150 --> 00:20:57,500 Ena tretjina je 0,333 dogaja o za neskončnosti. 434 00:20:57,500 --> 00:21:02,270 Ni šans, da z absolutna natančnost pri decimalko. 435 00:21:02,270 --> 00:21:05,370 To je točno isto vrsto problema to se je zgodilo v Patriot. 436 00:21:05,370 --> 00:21:09,880 Več sistem tekel, najslabše je postal čas napake. 437 00:21:09,880 --> 00:21:13,840 >> SPEAKER 1: Po 100 urah delovanja, napaka v času je bil le 438 00:21:13,840 --> 00:21:16,140 približno eno tretjino sekundo. 439 00:21:16,140 --> 00:21:20,800 Ampak v smislu ciljanje raketo potuje mach pet, je povzročilo 440 00:21:20,800 --> 00:21:24,410 Napaka sledenje več kot 600 metrov. 441 00:21:24,410 --> 00:21:27,670 To bi bila usodna napaka Vojaki na Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE POSTOL: Kaj se je zgodilo, Scud začetek je bil odkrit v začetku leta 443 00:21:33,450 --> 00:21:34,280 opozorilne sateliti. 444 00:21:34,280 --> 00:21:38,550 In so vedeli, da Scud je prihajala v njihov splošni smeri. 445 00:21:38,550 --> 00:21:41,000 Sploh ne vem, kje je prišel. 446 00:21:41,000 --> 00:21:43,900 >> SPEAKER 1: Zdaj je bil do radarja sestavni del sistema Patriot 447 00:21:43,900 --> 00:21:48,910 brani Dhahran najti in obdržati Spremljajte dohodne sovražnik izstrelkov. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: radar je bil zelo pameten. 449 00:21:50,580 --> 00:21:53,770 To bi dejansko spremljali položaj Scud in nato predvideti, da 450 00:21:53,770 --> 00:21:57,160 Verjetno bi naslednjič radar poslala impulz ven. 451 00:21:57,160 --> 00:21:58,870 , Ki je bil imenovan vrata območje. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE POSTOL: Potem ko Patriot se odloči, je minilo dovolj časa, da gredo 453 00:22:04,020 --> 00:22:09,420 varnostno in preverite naslednjo lokacijo to zazna objekt, gre nazaj. 454 00:22:09,420 --> 00:22:14,450 Torej, ko se je vrnil v napačno mesto, potem ne vidi nobenega predmeta. 455 00:22:14,450 --> 00:22:18,200 In sklene, da ni bilo nobenega predmeta, je bilo lažno odkrivanje in 456 00:22:18,200 --> 00:22:19,680 kapljice progo. 457 00:22:19,680 --> 00:22:22,970 >> SPEAKER 1: Prihodnje Scud izginil iz radarskega zaslona in 458 00:22:22,970 --> 00:22:26,050 sekund kasneje je zaloputnil v vojašnice. 459 00:22:26,050 --> 00:22:31,950 Scud je ubil 28 in je bil zadnji odpuščen v času prve zalivske vojne. 460 00:22:31,950 --> 00:22:37,700 Tragično je, posodobljena programska oprema prispela ob Dhahran naslednji dan. 461 00:22:37,700 --> 00:22:41,800 Programska oprema pomanjkljivost je bila določena, zapiranje eno poglavje v težavah 462 00:22:41,800 --> 00:22:43,690 Zgodovina Patriot raket. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot je pravzaprav kratica za fazni sledenje 465 00:22:50,710 --> 00:22:51,960 Odsek Target. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: V redu, tako da streznitve primer, da se prepričate. 468 00:23:00,840 --> 00:23:03,430 In na srečo, ti nižji ravni hrošči niso nekaj, kar bomo 469 00:23:03,430 --> 00:23:06,220 običajno morali ceniti, vsekakor ne z nekaj naših 470 00:23:06,220 --> 00:23:07,360 Najzgodnejši programov. 471 00:23:07,360 --> 00:23:10,450 Nasprotno, večina hroščev boste Srečanje bo logično v naravi, 472 00:23:10,450 --> 00:23:12,900 skladenjske narave, pri čemer koda ne dela prav. 473 00:23:12,900 --> 00:23:14,140 In veš, da je zelo hiter. 474 00:23:14,140 --> 00:23:16,850 >> Ampak, še posebej, ko smo prišli do konec semestra, da se bo 475 00:23:16,850 --> 00:23:20,620 postali bolj in bolj možnostjo res težko razmišljati o oblikovanju 476 00:23:20,620 --> 00:23:22,960 svojih programov in osnovnimi zastopanje 477 00:23:22,960 --> 00:23:24,520 Tudi tam podatkov. 478 00:23:24,520 --> 00:23:28,010 Na primer, bomo uvesti MySQL, ki je priljubljen baze motor 479 00:23:28,010 --> 00:23:30,850 ki jih lahko uporabite pri spletnih strani shranjevanje podatkov na zadnji konec. 480 00:23:30,850 --> 00:23:34,630 In boste morali začeti odločati, konec semestra, ne samo tisto, kar 481 00:23:34,630 --> 00:23:38,790 tipi podatkov v tej smeri, da uporabljajo ampak koliko bitov za uporabo, 482 00:23:38,790 --> 00:23:42,740 ali ne želite shraniti rok kot datumi in časi so čas, in tudi 483 00:23:42,740 --> 00:23:46,890 stvari, kot so, kako velik želite posebne identifikatorje, da se za, recimo, uporabnike 484 00:23:46,890 --> 00:23:47,680 v zbirki podatkov. 485 00:23:47,680 --> 00:23:51,210 >> V bistvu, če nekateri od vas ste imeli Facebook predstavlja kar nekaj časa, 486 00:23:51,210 --> 00:23:53,680 in veste, kako pridobiti dostop s svojim uporabniškim imenom - 487 00:23:53,680 --> 00:23:57,930 ki se včasih pojavi v vašem URL profil, razen če ste izbrali 488 00:23:57,930 --> 00:24:02,070 vzdevek za URL, ali če ste Rabljeni Facebook je Graph API, 489 00:24:02,070 --> 00:24:05,510 javno dostopen API, s katerim ste lahko zaprosi Facebook za neobdelanih podatkov - 490 00:24:05,510 --> 00:24:07,580 lahko vidite, kaj je tvoj številčne ID je. 491 00:24:07,580 --> 00:24:10,880 In pred nekaj leti, v bistvu Facebook moral spremeniti z uporabo 492 00:24:10,880 --> 00:24:15,980 enakovredno ints za uporabo dolge dolgo, ker se sčasoma uporabniki prišli 493 00:24:15,980 --> 00:24:19,780 go in ustvarili veliko računov in ponarejene račune, čeprav so zelo enostavno 494 00:24:19,780 --> 00:24:24,630 uspelo izčrpati nekaj podobnega 4. milijard možno vrednost kot notr. 495 00:24:24,630 --> 00:24:28,340 >> Torej, več o teh vrstah zadev po cesti, kot tudi. 496 00:24:28,340 --> 00:24:30,750 Vse je v redu, tako da je bil litje. 497 00:24:30,750 --> 00:24:31,670 Da je nenatančnost. 498 00:24:31,670 --> 00:24:32,730 Nekaj ​​hitrih objav. 499 00:24:32,730 --> 00:24:35,710 Torej oddelki formalno začelo prihajati Nedelja, ponedeljek, torek. 500 00:24:35,710 --> 00:24:39,080 Boste slišali preko elektronske pošte kasneje ta teden glede sekcije nalogo. 501 00:24:39,080 --> 00:24:42,570 In boste tudi tukaj na tej točki, kako , da spremenite svoje poglavje, če je vaš 502 00:24:42,570 --> 00:24:45,660 Načrt se je zdaj spremenilo, ali si Raven udobja je zdaj spremenilo. 503 00:24:45,660 --> 00:24:49,380 Medtem P-set ena in ena je heker ker ta četrtek z možnostjo 504 00:24:49,380 --> 00:24:52,450 podaljšanje tega roka na specifikacije do petka 505 00:24:52,450 --> 00:24:53,830 na običajen način. 506 00:24:53,830 --> 00:24:57,500 >> Zavedam se, da vključi s problemom set specifikacije so navodila za 507 00:24:57,500 --> 00:25:02,770 kako uporabljati CS50 aparata, da bi, kot tudi nekatere CS50 posebna orodja 508 00:25:02,770 --> 00:25:06,540 kot stil 50, ki vam lahko zagotovi povratne informacije dinamično na 509 00:25:06,540 --> 00:25:10,230 Kakovost vašega kode slogu in prav tako preveriti 50, ki ga lahko zagotovi 510 00:25:10,230 --> 00:25:13,160 dinamično povratne informacije glede vašega koda za pravilnost. 511 00:25:13,160 --> 00:25:16,850 Oprostite, da smo še vedno likanje ven nekaj Kinks s preverjanjem 50. 512 00:25:16,850 --> 00:25:21,490 Nekaj ​​svojih sošolcev, ki niso začeli okoli 04:00 v petek zvečer, ko 513 00:25:21,490 --> 00:25:25,130 spec šli so do opazila odtlej nekaj hroščev, ki delamo 514 00:25:25,130 --> 00:25:29,010 skozi, in opravičujem za vsakogar, ki je doživela nepotrebnih frustracij. 515 00:25:29,010 --> 00:25:30,340 Krivda je moja. 516 00:25:30,340 --> 00:25:34,080 Ampak bomo spremljala na CS50 razpravljali, ko se da rešiti. 517 00:25:34,080 --> 00:25:35,700 >> Torej beseda o samih rezultatov. 518 00:25:35,700 --> 00:25:38,990 Torej bo to teden ali dva, preden začeli, da bi dobili povratne informacije o problemskih sklopov 519 00:25:38,990 --> 00:25:40,640 saj ti še nimajo poučevanje kolega. 520 00:25:40,640 --> 00:25:44,510 In tudi potem, bomo začeli oceniti Problem C postavlja preden smo 521 00:25:44,510 --> 00:25:46,970 pojdi nazaj in oceniti praske tako da boste dobili bolj pomembne 522 00:25:46,970 --> 00:25:48,150 hitreje povratne informacije. 523 00:25:48,150 --> 00:25:51,870 Ampak na splošno po predmetniku, CS50 problem kompleti so ocenili skupaj 524 00:25:51,870 --> 00:25:53,580 Po štirih osi - 525 00:25:53,580 --> 00:25:55,760 Področje, pravilnost, oblikovanje in slog. 526 00:25:55,760 --> 00:25:59,210 >> Področje uporabe se bo število običajno med nič in pet, da 527 00:25:59,210 --> 00:26:01,830 ujame koliko kos, ki si odgriznil. 528 00:26:01,830 --> 00:26:03,750 Značilno je, da si želim, da je to pet. 529 00:26:03,750 --> 00:26:05,300 Si vsaj poskusil. 530 00:26:05,300 --> 00:26:09,330 In opazil, da je multiplikativni faktor tako da delaš samo del 531 00:26:09,330 --> 00:26:12,520 Problem niz ni najboljša strategija. 532 00:26:12,520 --> 00:26:15,610 >> Medtem, bolj očitno je, Pomen pravilnosti - 533 00:26:15,610 --> 00:26:18,620 Samo je vaš program pravilno z upoštevati specifikacije? 534 00:26:18,620 --> 00:26:21,510 To se ponderirajo namerno več močno od drugih dveh oseh z 535 00:26:21,510 --> 00:26:24,450 faktor tri, saj smo prepoznali ki običajno boste porabili 536 00:26:24,450 --> 00:26:28,600 Veliko več časa loviš navzdol nekaj hroščev, dobili kodo za delo, nato pa 537 00:26:28,600 --> 00:26:31,540 so ga Feed in izbiro ustrezne spremenljivke imena in 538 00:26:31,540 --> 00:26:33,800 kot, ki je na drugem koncu spektra stila. 539 00:26:33,800 --> 00:26:36,160 >> To ne pomeni, da stil ni pomembno in ga bomo pridigajo preko 540 00:26:36,160 --> 00:26:37,920 Čas tako na predavanjih in v oddelkih. 541 00:26:37,920 --> 00:26:40,520 Slog se nanaša na estetiko vaše kode. 542 00:26:40,520 --> 00:26:43,980 Ste se odločili tudi, imenom spremenljivke da so kratki, vendar nekoliko 543 00:26:43,980 --> 00:26:44,680 opisna? 544 00:26:44,680 --> 00:26:47,840 Je koda zamaknjena, kot ste jih videli v Predavanje in na način, ki je skladen 545 00:26:47,840 --> 00:26:49,070 v stilu 50? 546 00:26:49,070 --> 00:26:51,220 >> Končno je pravica iz modela tam v sredini. 547 00:26:51,220 --> 00:26:54,090 Design je ena težje postaviti prst, ker je veliko bolj 548 00:26:54,090 --> 00:26:55,000 subjektivna. 549 00:26:55,000 --> 00:26:58,610 Ampak to je morda najpomembnejši tri osi glede na pedagoško 550 00:26:58,610 --> 00:27:02,050 vrednost v času in da bo to učiteljskega kolegi je priložnost, da se 551 00:27:02,050 --> 00:27:04,110 vam nudijo kakovostno povratno informacijo. 552 00:27:04,110 --> 00:27:08,100 Dejansko je v CS50 čeprav imamo te formule in ocene, na koncu 553 00:27:08,100 --> 00:27:11,350 dneva so zelo namerno zelo majhne žlice - točka vrednote 554 00:27:11,350 --> 00:27:13,460 med nič in tremi in nič in pet. 555 00:27:13,460 --> 00:27:17,800 Ne bomo poskušali pripraviti zelo grobih linij med problematičnih sklopov ali med 556 00:27:17,800 --> 00:27:21,490 študentov ampak osredotoči kar smo lahko na kvalitativnih, longhand 557 00:27:21,490 --> 00:27:25,490 povratne informacije, bodisi natipkana ali verbalno iz vaša zlasti poučevanje kolegi, 558 00:27:25,490 --> 00:27:27,050 boste dobili precej dobro poznam. 559 00:27:27,050 --> 00:27:32,340 >> Vendar pa na splošno, ki so uteži da bodo imeli različne osi. 560 00:27:32,340 --> 00:27:35,480 Medtem, preveč, da je vredno vodenje v motilo, da ne bi smeli domnevati, da 561 00:27:35,480 --> 00:27:38,870 tri od petih je 60% in torej približno ni. 562 00:27:38,870 --> 00:27:41,410 Tri je namenoma mišljeno, da bo nekako sredi ceste dobre. 563 00:27:41,410 --> 00:27:43,480 Če ste dobili trojk na začetek semestra, to je 564 00:27:43,480 --> 00:27:46,340 zato mišljen kot dobro mesto za začetek. 565 00:27:46,340 --> 00:27:50,510 Če ste dobili dvojke, sejmov, tam je definitivno nekaj dela, da plača malo 566 00:27:50,510 --> 00:27:53,250 več pozornosti, da izkoristijo oddelkov in uradnih ur. 567 00:27:53,250 --> 00:27:54,590 >> Če ste dobili štiric in petke, super. 568 00:27:54,590 --> 00:27:57,430 Ampak res, upamo, da bomo videli trajektorije Med študenti - zelo 569 00:27:57,430 --> 00:28:00,575 individualizirano na študenta, ampak začetek semester tukaj v vrsto 570 00:28:00,575 --> 00:28:04,100 dva do tri območja, toda konča tu v 4-5 območju. 571 00:28:04,100 --> 00:28:05,440 To je tisto, kar smo zares iskali. 572 00:28:05,440 --> 00:28:09,590 In nimamo v mislih delta, vam kažejo med tedenskim nič in teden 573 00:28:09,590 --> 00:28:12,170 12, ko delam ocen. 574 00:28:12,170 --> 00:28:16,380 Ni važno, za nas absolutno kako ste pošteno na začetku, če je vaš 575 00:28:16,380 --> 00:28:19,330 trajektorija je res navzgor in močna. 576 00:28:19,330 --> 00:28:24,000 >> Akademsko poštenost - zato naj povem o mojem resnejše glas za trenutek. 577 00:28:24,000 --> 00:28:28,510 Torej, to seveda ima razlikovanje pošiljanje več študentov kot katera koli druga 578 00:28:28,510 --> 00:28:30,950 v zgodovini z ad krovu, verjamem. 579 00:28:30,950 --> 00:28:34,220 Imamo vrsto izgubljenega štetja na to Točka kako pogosto se to zgodi. 580 00:28:34,220 --> 00:28:37,090 In to ne zato, ker študentje v 50 so vse bolj nepošteno kot njihovi 581 00:28:37,090 --> 00:28:38,690 sošolci drugod. 582 00:28:38,690 --> 00:28:42,800 Ampak zavedati tudi, da smo zelo dobri odkrivanju te stvari. 583 00:28:42,800 --> 00:28:45,920 >> In to prednost, da računalništvo razred je v tem, da smo 584 00:28:45,920 --> 00:28:49,110 Lahko mi pa primerjate vse učence Problem določa par-pametno pred vsako 585 00:28:49,110 --> 00:28:51,470 drugega, ne samo v letošnjem letu ampak vsa predhodna leta. 586 00:28:51,470 --> 00:28:55,080 Imamo sposobnosti, kot so študenti v razred, da Google in najti kodo 587 00:28:55,080 --> 00:28:57,440 na mestih, kot so GitHub in forumi. 588 00:28:57,440 --> 00:29:00,840 Obstaja absolutno rešitve CS50 je p-postavlja plava okoli tam. 589 00:29:00,840 --> 00:29:02,710 Ampak če jih lahko najdete, smo jih lahko našli. 590 00:29:02,710 --> 00:29:07,130 Vse to je zelo avtomatiziran in enostavno in žalosten za nas, da bi našli. 591 00:29:07,130 --> 00:29:10,990 >> Vendar želim poudariti tudi, da akademsko poštenost politika tečajnega je 592 00:29:10,990 --> 00:29:13,960 zelo mišljeno, da se zelo nasprotje tem duhu. 593 00:29:13,960 --> 00:29:17,506 Dejansko letos smo na novo ubesedil stvari v predmetniku, da je to, pika 594 00:29:17,506 --> 00:29:19,790 dot dot, pri čemer podrobneje v učni načrt. 595 00:29:19,790 --> 00:29:22,860 Ampak Prevladujoča tema v teku Res je, da so smiselne. 596 00:29:22,860 --> 00:29:26,160 Zavedamo se, da je tam veliko Znesek pedagoško 597 00:29:26,160 --> 00:29:30,550 vrednost sodelujoč, do neke mere s sošolci, s katerim si 598 00:29:30,550 --> 00:29:33,700 dva ali pa tri ali pa še več so stoji na tabli 599 00:29:33,700 --> 00:29:35,670 whiteboarding, tako da govorijo, svoje ideje - 600 00:29:35,670 --> 00:29:39,480 pisanje iz psevdokoda v slikah, diagramov, kaj bi bilo, če Mario 601 00:29:39,480 --> 00:29:41,350 ste bili, da ga napišete prvi V psevdokoda. 602 00:29:41,350 --> 00:29:43,240 Kaj naj požrešen algoritem - 603 00:29:43,240 --> 00:29:46,100 kako naj se obnaša na Problem postavlja eno? 604 00:29:46,100 --> 00:29:50,440 >> In tako se zavedajo, da je vedenje da bomo spodbudili je zelo 605 00:29:50,440 --> 00:29:51,470 veliko podobnega. 606 00:29:51,470 --> 00:29:53,890 In v predmetniku, boste videli cel kup krogel pod 607 00:29:53,890 --> 00:29:57,740 smiselno kategorija in ni smiselno kategorija, ki nam pomaga, pomaga 608 00:29:57,740 --> 00:30:00,740 ste zaviti vaš um okoli katerih bomo risati črto. 609 00:30:00,740 --> 00:30:04,340 In na splošno, dostojno pravilo je, da če ste se borijo za reševanje 610 00:30:04,340 --> 00:30:07,990 nekateri bug in vaš prijatelj ali sošolec sedi zraven tebe, je 611 00:30:07,990 --> 00:30:11,530 primerno za vas, da mu pokazati, ali ji kodo in rekel, hej, lahko pomagate 612 00:30:11,530 --> 00:30:13,700 sem ugotoviti, kaj je šlo narobe tukaj? 613 00:30:13,700 --> 00:30:17,110 >> Mi običajno ne sprejemajo nasprotne strani. 614 00:30:17,110 --> 00:30:20,730 To ni pravilen odgovor za svoje prijatelj ali sošolec tukaj reči, oh, 615 00:30:20,730 --> 00:30:22,510 samo poglej rudnika in figure da se iz tega. 616 00:30:22,510 --> 00:30:24,400 To je nekako nesmiselno. 617 00:30:24,400 --> 00:30:27,750 Vendar ima nekdo drug, še možganov, še en par oči pogledati 618 00:30:27,750 --> 00:30:31,620 zaslon ali pogled na kodo in pravijo, ste prepričani, da želite 619 00:30:31,620 --> 00:30:32,760 da imajo zanke tukaj? 620 00:30:32,760 --> 00:30:34,800 Ali ste prepričani, da želite da podpičjem tukaj? 621 00:30:34,800 --> 00:30:37,090 Ali oh, da je sporočilo o napaki pomeni to. 622 00:30:37,090 --> 00:30:39,580 Tisti, ki so zelo razumno in spodbujati vedenja. 623 00:30:39,580 --> 00:30:44,010 >> Primeri, v katerih sem bil s takimi prej zavre navzdol, ko so študenti 624 00:30:44,010 --> 00:30:47,350 pozno ponoči, da bi slabe sodbe Sklepi in emailing svojo kodo 625 00:30:47,350 --> 00:30:50,130 nekdo drug ali pa samo rekel, tu, je v Dropbox ali 626 00:30:50,130 --> 00:30:51,610 Googlanjem pozno v noč. 627 00:30:51,610 --> 00:30:54,880 In tako bi spodbujali in prosim vas, Če imate tiste neizogibne 628 00:30:54,880 --> 00:30:58,450 trenutki stresa, ste zaletavate gor pred iztekom roka, vam ni prepozno 629 00:30:58,450 --> 00:31:01,490 dan, saj je že petek ob da točka, email glave predmeta, ali pa 630 00:31:01,490 --> 00:31:02,330 sam neposredno. 631 00:31:02,330 --> 00:31:04,790 Pravijo, poslušaj, jaz sem na moji prelomni točki tukaj. 632 00:31:04,790 --> 00:31:06,660 Pa pogovor in pogruntal. 633 00:31:06,660 --> 00:31:10,400 Zatekanje k spleta ali kakšno drugo ne razumno vedenje ni nikoli 634 00:31:10,400 --> 00:31:13,070 rešitev, in preveč vašega sošolci niso več tukaj 635 00:31:13,070 --> 00:31:15,150 Kampus zaradi tega slabe sodbe. 636 00:31:15,150 --> 00:31:17,840 Ampak to je zelo enostaven za krilo, da linijo. 637 00:31:17,840 --> 00:31:22,950 >> In tukaj je malo sliko, da bi razvedril ste se od Reddit tako da zdaj 638 00:31:22,950 --> 00:31:25,720 vse bo v redu. 639 00:31:25,720 --> 00:31:30,210 >> Tako hitro Rekapitulacija, potem o, kjer smo končali. 640 00:31:30,210 --> 00:31:33,690 Torej prejšnji teden, opozarjajo, da uvajamo pogoji, ki niso v nič 641 00:31:33,690 --> 00:31:34,880 vendar v C tokrat. 642 00:31:34,880 --> 00:31:38,300 In bilo je nekaj novega, ampak sintaksa res nobene nove ideje na sebi. 643 00:31:38,300 --> 00:31:42,630 Imeli smo logičnih izrazov, da smo lahko ali skupaj z dvema navpičnima 644 00:31:42,630 --> 00:31:46,490 palice ali skupaj z dvema ampersands, ki pravijo, da sta leva 645 00:31:46,490 --> 00:31:49,990 in pravica mora biti res Za to izvesti. 646 00:31:49,990 --> 00:31:53,150 Potem smo imeli stikala, ki smo jo pogledal na kratko, ampak jaz predlagam so res 647 00:31:53,150 --> 00:31:56,830 samo drugačna sintaksa za doseganje Enaki zadel, če veš, v 648 00:31:56,830 --> 00:31:59,270 vnaprej, kakšne so vaše zadeve se bo. 649 00:31:59,270 --> 00:32:00,160 >> Ogledali smo si zank. 650 00:32:00,160 --> 00:32:03,340 Zanka se je morda najbolj pogosti, ali vsaj eno, da ljudje 651 00:32:03,340 --> 00:32:05,330 običajno doseže za instinktivno. 652 00:32:05,330 --> 00:32:08,240 Čeprav izgleda malce skrivnosten, boste videli veliko, veliko primerov je to 653 00:32:08,240 --> 00:32:11,590 Pred dolgo, kot ste že konec prejšnjega tedna. 654 00:32:11,590 --> 00:32:14,280 Medtem zanke lahko podobno doseči isto stvar. 655 00:32:14,280 --> 00:32:17,550 Ampak če hočeš narediti vse stopnjevanja ali posodabljanje 656 00:32:17,550 --> 00:32:20,230 Vrednosti spremenljivke, morate narediti več ročno, kot 657 00:32:20,230 --> 00:32:22,440 Za zanka pred dovoljuje. 658 00:32:22,440 --> 00:32:25,310 In potem je tukaj še do-while zanko, ki nam omogoča, da naredite nekaj za 659 00:32:25,310 --> 00:32:28,460 vsaj enkrat med nekaj ostalo je res. 660 00:32:28,460 --> 00:32:31,550 To je še posebej dobro programi ali za igre, kjer želite 661 00:32:31,550 --> 00:32:33,810 za poziv uporabniku za nekaj vsaj enkrat. 662 00:32:33,810 --> 00:32:37,110 In potem, če se on ali ona ne sodeluje, boste morda želeli, da to storite 663 00:32:37,110 --> 00:32:38,420 znova in znova. 664 00:32:38,420 --> 00:32:41,270 >> S spremenljivkami, medtem ko smo imeli linije kode, kot je ta, ki bi lahko 665 00:32:41,270 --> 00:32:41,950 dve liniji. 666 00:32:41,950 --> 00:32:44,830 Lahko razglasi int imenovano števec, podpičje. 667 00:32:44,830 --> 00:32:47,660 Ali pa samo prijaviti in definirati, tako rekoč. 668 00:32:47,660 --> 00:32:49,950 Da ga vrednost ob istem času. 669 00:32:49,950 --> 00:32:51,890 >> In potem na koncu, smo se pogovarjali o funkcijah. 670 00:32:51,890 --> 00:32:54,270 In to je lep primer v občutek, ki ponazarja 671 00:32:54,270 --> 00:32:55,840 dve vrsti funkcij. 672 00:32:55,840 --> 00:32:59,030 Ena je GetString (), ki je, še enkrat, dobi niz od uporabnika. 673 00:32:59,030 --> 00:33:02,040 Ampak GetString () je nekako zanimivo, kolikor smo ga uporabili, 674 00:33:02,040 --> 00:33:05,620 ker smo vedno uporabljati nekaj na levi strani 675 00:33:05,620 --> 00:33:06,600 enačaj. 676 00:33:06,600 --> 00:33:09,830 To se pravi, da GetString () vrne vrednost. 677 00:33:09,830 --> 00:33:11,970 Se vrne, seveda, niz. 678 00:33:11,970 --> 00:33:15,130 In nato na levi strani, smo preprosto shranjevanje, da niz notranjost 679 00:33:15,130 --> 00:33:16,580 spremenljivka imenuje ime. 680 00:33:16,580 --> 00:33:21,100 >> To je drugače, v smislu, od printf ker printf, vsaj v našem 681 00:33:21,100 --> 00:33:23,540 Uporaba tukaj, ne vrne ničesar. 682 00:33:23,540 --> 00:33:24,960 Kot prahi, počne nekaj vrnem. 683 00:33:24,960 --> 00:33:26,380 Mi je vseeno, kaj je. 684 00:33:26,380 --> 00:33:29,090 Ampak to je tisto, kar je imenujemo stranski učinek. 685 00:33:29,090 --> 00:33:31,840 In kaj je to stranski učinek v vsaki Primer smo videli doslej? 686 00:33:31,840 --> 00:33:34,720 Kaj printf storiti? 687 00:33:34,720 --> 00:33:37,780 To natisne nekaj na zaslonu, prikaže besedilo ali številke ali kaj 688 00:33:37,780 --> 00:33:38,380 na zaslonu. 689 00:33:38,380 --> 00:33:41,170 In to je samo šteje stranski učinek saj to ni res predajo 690 00:33:41,170 --> 00:33:41,900 pa nazaj k meni. 691 00:33:41,900 --> 00:33:44,770 To ni odgovor notranjosti črna skrinjica, da sem lahko potem 692 00:33:44,770 --> 00:33:46,130 segajte in zgrabi. 693 00:33:46,130 --> 00:33:49,160 To je samo to počne sama, veliko kot Colton je bil vključen v to 694 00:33:49,160 --> 00:33:52,560 črna skrinjica prejšnji teden, in je nekako čudežno je risanje na krovu 695 00:33:52,560 --> 00:33:54,500 brez mene pravzaprav gre. 696 00:33:54,500 --> 00:33:55,560 To bi bilo stranski učinek. 697 00:33:55,560 --> 00:33:59,100 Ampak če bi dejansko moral segajo v Tu in rekel, oh, tukaj je niz 698 00:33:59,100 --> 00:34:02,040 od uporabnika, da bi biti vrnjeno vrednost. 699 00:34:02,040 --> 00:34:05,650 >> In doslej uporabili smo samo funkcije da so drugi ljudje napisali. 700 00:34:05,650 --> 00:34:09,219 Vendar pa lahko dejansko narediti to vrste stvari sami. 701 00:34:09,219 --> 00:34:12,730 Torej, jaz grem v CS50 aparat znova. 702 00:34:12,730 --> 00:34:16,020 Dovolite mi, da zaprete zavihek, ki smo so odprli pred nekaj trenutki. 703 00:34:16,020 --> 00:34:18,530 In mi gredo naprej in ustvariti novo datoteko. 704 00:34:18,530 --> 00:34:22,400 In jaz grem naprej in imenujemo to en positive.c. 705 00:34:22,400 --> 00:34:24,770 Torej, želim, da narediš nekaj z Pozitivne številke tukaj. 706 00:34:24,770 --> 00:34:27,219 Tako da sem šel naprej in to int - 707 00:34:27,219 --> 00:34:28,000 žal - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Raje ne bi, da je enako napaka kot prej. 710 00:34:34,280 --> 00:34:40,020 Int main (void), odprto kodrasti naramnicami, zaprta kodraste opornico. 711 00:34:40,020 --> 00:34:41,639 >> In zdaj hočem narediti naslednje. 712 00:34:41,639 --> 00:34:44,600 Hočem napisati program, ki vztraja, da uporabniku omogoča 713 00:34:44,600 --> 00:34:46,770 me je pozitivno celo število. 714 00:34:46,770 --> 00:34:50,969 Tako da ni GetPositiveInt funkcija v knjižnici CS50. 715 00:34:50,969 --> 00:34:52,610 Obstaja samo GetInt (). 716 00:34:52,610 --> 00:34:55,790 Ampak to je v redu, ker imam konstrukti, s katerim sem se lahko nalagajo 717 00:34:55,790 --> 00:34:59,360 malo več omejitev za te vrednosti. 718 00:34:59,360 --> 00:35:00,990 Jaz bi naredil kaj takega. 719 00:35:00,990 --> 00:35:02,780 >> Torej int n - 720 00:35:02,780 --> 00:35:04,920 in če tipkate skupaj, samo zavedaš Jaz grem nazaj in 721 00:35:04,920 --> 00:35:06,430 spremeniti nekatere stvari v tem trenutku - 722 00:35:06,430 --> 00:35:09,960 tako int n enak GetInt (). 723 00:35:09,960 --> 00:35:11,780 In to se dogaja, da dajo int znotraj n. 724 00:35:11,780 --> 00:35:13,830 In mi bo bolj opisna. 725 00:35:13,830 --> 00:35:23,270 Naj povem nekaj, kot sem zahteval, da mi dal pozitivno celo število. 726 00:35:23,270 --> 00:35:23,550 >> Vse je v redu. 727 00:35:23,550 --> 00:35:25,250 Torej samo malo navodila. 728 00:35:25,250 --> 00:35:26,270 In zdaj, kaj lahko storim? 729 00:35:26,270 --> 00:35:29,840 No, jaz že vem, od moje preprost pogoji ali panoge, tako kot sem 730 00:35:29,840 --> 00:35:36,100 imel v nič, lahko rečem nekaj kot če je n manjša ali enaka 731 00:35:36,100 --> 00:35:44,460 nič, potem pa sem hotel narediti nekaj kot, da ni pozitivno. 732 00:35:44,460 --> 00:35:45,560 In potem sem lahko naredil - 733 00:35:45,560 --> 00:35:47,310 OK, ampak želim, da se to int. 734 00:35:47,310 --> 00:35:52,020 Torej, jaz bi šel gor in sem lahko nekako izvoda tega in alinee tega. 735 00:35:52,020 --> 00:35:52,570 In potem, v redu. 736 00:35:52,570 --> 00:35:56,990 Torej, če je n manjša ali enak nič narediti. 737 00:35:56,990 --> 00:35:58,900 >> Zdaj, kaj, če uporabnik ne sodeluje? 738 00:35:58,900 --> 00:36:01,560 No, potem bom sposodim tukaj. 739 00:36:01,560 --> 00:36:03,130 In potem sem šel noter in tukaj in tukaj. 740 00:36:03,130 --> 00:36:06,420 Tako da to očitno ni rešitev, kajne? 741 00:36:06,420 --> 00:36:07,810 Ker ni videti konca. 742 00:36:07,810 --> 00:36:13,100 Če želim, da zahtevajo, da uporabniku omogoča me je pozitivno celo število, ne morem 743 00:36:13,100 --> 00:36:14,150 dejansko dobil int. 744 00:36:14,150 --> 00:36:15,620 Lahko pa preverite to notr. 745 00:36:15,620 --> 00:36:18,570 Ampak potem bi rad še enkrat preveriti in še enkrat preveriti in ponovno preverite. 746 00:36:18,570 --> 00:36:21,680 Torej je očitno, kaj je bolje konstrukt, ki se uporablja tukaj? 747 00:36:21,680 --> 00:36:22,840 V redu, torej nekakšna zanka. 748 00:36:22,840 --> 00:36:25,430 >> Torej bom znebiti za skoraj vse to. 749 00:36:25,430 --> 00:36:27,320 In želim, da se to int vsaj enkrat. 750 00:36:27,320 --> 00:36:28,890 Tako bom rekel ne - 751 00:36:28,890 --> 00:36:32,110 in pridem nazaj medtem ko je v samo nekaj trenutkov - 752 00:36:32,110 --> 00:36:33,050 Zdaj, ali kaj? 753 00:36:33,050 --> 00:36:35,860 Jaz bom naredil int n dobi GetInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Torej, to je zelo dobro. 756 00:36:37,250 --> 00:36:39,750 In zdaj, kako pogosto Hočem to storiti? 757 00:36:39,750 --> 00:36:45,770 >> Naj povem, da printf notranjosti zanke da bom lahko znova in znova zahtevajo, 758 00:36:45,770 --> 00:36:46,740 če je to potrebno. 759 00:36:46,740 --> 00:36:49,720 In kaj hočem to medtem ko je pogoj, da naredim? 760 00:36:49,720 --> 00:36:53,870 Želim, da ostane ta način pa, kar je res? 761 00:36:53,870 --> 00:36:54,125 Ja. 762 00:36:54,125 --> 00:36:55,390 N je manjša ali enaka nič. 763 00:36:55,390 --> 00:36:58,180 Torej že imamo precej sem očistiti to kodo gor. 764 00:36:58,180 --> 00:37:00,700 Mi smo sposodil zelo enostavno sestaviti - do-while zanko. 765 00:37:00,700 --> 00:37:04,690 Sem ukradejo le pomembne linije kode, ki sem začel kopiranje in 766 00:37:04,690 --> 00:37:05,960 lepljenje, ki ni bilo pametno. 767 00:37:05,960 --> 00:37:09,790 In sedaj bom dejansko prilepiti je tukaj in samo enkrat naredi. 768 00:37:09,790 --> 00:37:12,990 >> In zdaj, kaj hočem narediti na Zelo konec tega programa? 769 00:37:12,990 --> 00:37:16,810 Jaz bom samo rekel nekaj preprostega všeč, hvala - in 770 00:37:16,810 --> 00:37:18,980 Jaz bom% i za notr - 771 00:37:18,980 --> 00:37:23,270 Nagibnica n, vejica, nato plug n, podpičje. 772 00:37:23,270 --> 00:37:23,910 >> Vse je v redu. 773 00:37:23,910 --> 00:37:27,290 Torej, da vidimo, kaj se bo sedaj zgodilo ko sem zagon tega programa. 774 00:37:27,290 --> 00:37:30,600 Jaz grem naprej in ne bo pozitiven. 775 00:37:30,600 --> 00:37:30,880 Prekleto. 776 00:37:30,880 --> 00:37:31,600 Nekaj ​​napak. 777 00:37:31,600 --> 00:37:32,960 Naj se pomaknete nazaj do prvega. 778 00:37:32,960 --> 00:37:34,020 Ne delajo preko njih nazaj. 779 00:37:34,020 --> 00:37:37,000 Delo prek njih od zgoraj navzdol sicer se kaskade in samo 780 00:37:37,000 --> 00:37:38,630 ena stvar, ki je narobe. 781 00:37:38,630 --> 00:37:42,532 Implicitno izjavo Funkcija GetInt (). 782 00:37:42,532 --> 00:37:43,020 Ja. 783 00:37:43,020 --> 00:37:44,420 Torej to ni bilo dovolj. 784 00:37:44,420 --> 00:37:46,760 Nekako sem naredil isto napako, vendar Malo tokrat drugače. 785 00:37:46,760 --> 00:37:51,940 Moram namreč ne zajemajo le stdio.h vendar tudi cs50.h, ki vključuje 786 00:37:51,940 --> 00:37:56,770 tako imenovane izjave o dobili int, ki naučiti aparat, ali uči 787 00:37:56,770 --> 00:37:58,760 C, kar GetInt () je. 788 00:37:58,760 --> 00:37:59,550 >> Naj shranili. 789 00:37:59,550 --> 00:38:02,040 Bom prezreti drugih napak ker bom upam, da oni 790 00:38:02,040 --> 00:38:05,210 nekako povezana z napako Sem že določena. 791 00:38:05,210 --> 00:38:08,710 Naj gredo naprej in znova z make pozitiven, Enter. 792 00:38:08,710 --> 00:38:09,020 Prekleto. 793 00:38:09,020 --> 00:38:09,985 Tri napake, vedno. 794 00:38:09,985 --> 00:38:12,650 Dovolite mi, da se pomaknete do prvega. 795 00:38:12,650 --> 00:38:14,320 Neizkoriščene spremenljivka n. 796 00:38:14,320 --> 00:38:15,850 Nismo videli že prej. 797 00:38:15,850 --> 00:38:17,200 In tudi to je malo skrivnosten. 798 00:38:17,200 --> 00:38:18,850 To je izhod prevajalnika. 799 00:38:18,850 --> 00:38:23,610 In kaj je izpostavila linija tam - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 je rekel, da govori na spletu devet od positive.c na 13. značaja 801 00:38:28,960 --> 00:38:31,510 13. stolpec, ste naredili to napako. 802 00:38:31,510 --> 00:38:34,230 >> In zlasti, da govori me neizkoriščena spremenljivka n. 803 00:38:34,230 --> 00:38:35,790 Torej, da vidimo - 804 00:38:35,790 --> 00:38:37,150 linija devet. 805 00:38:37,150 --> 00:38:40,430 Jaz sem z n v smislu, da Jaz sem mu daje vrednost. 806 00:38:40,430 --> 00:38:44,200 Ampak kaj prevajalnik ne mara, je da nisem videz, da jo uporabljajo. 807 00:38:44,200 --> 00:38:45,560 Toda počakaj malo, jaz sem ga uporabljajo. 808 00:38:45,560 --> 00:38:48,170 V vrstico 11, jaz sem jo uporabljajo tukaj. 809 00:38:48,170 --> 00:38:52,430 Ampak, če sem se pomaknite naprej ob positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 tako da na linijo 11, 12 znakov, prevajalnik mi pravi, uporaba 811 00:38:56,230 --> 00:38:58,670 neprijavljeno identifikator n. 812 00:38:58,670 --> 00:39:02,760 >> Torej neprijavljene pomeni, da imam ne pa, kot je določeno 813 00:39:02,760 --> 00:39:04,970 spremenljivka z vrsto podatkov. 814 00:39:04,970 --> 00:39:05,500 Toda počakaj malo. 815 00:39:05,500 --> 00:39:09,150 Sem storil natanko to v skladu devetih. 816 00:39:09,150 --> 00:39:11,100 Torej je nekdo res zmeden tukaj. 817 00:39:11,100 --> 00:39:14,900 To jaz, ali pa zato, ker prevajalnik v skladu devet, še enkrat, jaz razglasitvi 818 00:39:14,900 --> 00:39:18,650 int n, in sem dodeljevanje da vrne vrednost GetInt (). 819 00:39:18,650 --> 00:39:22,930 Potem sem s pomočjo te spremenljivke n v skladu 11 in preveri, ali je njegova vrednost manj 820 00:39:22,930 --> 00:39:24,050 od ali enaka nič. 821 00:39:24,050 --> 00:39:27,430 Toda to očitno je slabo in lomljeni zakaj? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Ponovi? 824 00:39:32,490 --> 00:39:35,690 >> Ah, moram prijaviti pred n vstopom v zanko. 825 00:39:35,690 --> 00:39:36,370 Ampak zakaj? 826 00:39:36,370 --> 00:39:39,830 Mislim, da pravkar predlagala, malo nazaj, da V redu je, da ugotovi, spremenljivke 827 00:39:39,830 --> 00:39:43,600 v eni vrstici in nato jim dodeli neko vrednost. 828 00:39:43,600 --> 00:39:46,790 Globalna spremenljivka - Vrnimo da te ideje v samo nekaj trenutkov. 829 00:39:46,790 --> 00:39:48,690 Zakaj hočeš, da dajo je zunaj zanke? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 To je. 832 00:40:03,830 --> 00:40:06,780 Točno tako. 833 00:40:06,780 --> 00:40:09,610 >> Torej, čeprav nekoliko protislovno, Naj povzamem. 834 00:40:09,610 --> 00:40:13,510 Ko izjavi n notranjosti od storite bloka tam - 835 00:40:13,510 --> 00:40:16,320 posebej znotraj tiste zavite oklepaje - 836 00:40:16,320 --> 00:40:19,210 da je spremenljivka n je tisto, kar je imenovano področje - 837 00:40:19,210 --> 00:40:23,210 povezana z našo točkovnega sistema Tečaj - vendar je področje, ki je 838 00:40:23,210 --> 00:40:25,190 omejena na tiste zavite oklepaje. 839 00:40:25,190 --> 00:40:28,460 Z drugimi besedami, po navadi, če ugotovi, spremenljivka v okviru niza 840 00:40:28,460 --> 00:40:33,370 Zaviti oklepaji, da je edina spremenljivka obstaja znotraj teh zavitih oklepajih. 841 00:40:33,370 --> 00:40:37,320 Torej, sam tej logiki, čeprav Sem prijavljeni n v skladu devet, je 842 00:40:37,320 --> 00:40:41,910 v bistvu izgine iz področja, izgine iz spomina, če se tako izrazim, 843 00:40:41,910 --> 00:40:43,370 do takrat, ko sem udaril črto 11. 844 00:40:43,370 --> 00:40:47,370 Ker je linija 11, na žalost, je zunaj teh zavitih oklepajih. 845 00:40:47,370 --> 00:40:51,540 >> Torej, jaz žal ne morem popraviti to z grem nazaj v tisto, kar sem storil prej. 846 00:40:51,540 --> 00:40:53,370 Morda vam bo sprva to. 847 00:40:53,370 --> 00:40:56,370 Ampak kaj si zdaj ne delaš ciklično? 848 00:40:56,370 --> 00:40:58,260 Ti si očitno niso dobili int ciklično. 849 00:40:58,260 --> 00:41:01,320 Tako bomo lahko pustite GetInt (), in smo naj zapustijo GetInt () znotraj 850 00:41:01,320 --> 00:41:04,420 zanke, ker to je tisto, kar želimo nadlegovanja uporabnika za znova in znova. 851 00:41:04,420 --> 00:41:08,660 Vendar to ne zadostuje, da bi šel do črte, recimo, šest. 852 00:41:08,660 --> 00:41:10,150 Int n, podpičje. 853 00:41:10,150 --> 00:41:12,990 Ne ji dati vrednost, vendar zato, ker vam ni treba samo še. 854 00:41:12,990 --> 00:41:16,220 >> Ampak zdaj sem dol, obvestilo - to bi bilo zelo enostavno napaka. 855 00:41:16,220 --> 00:41:19,440 Ne želim, da senca moje prejšnje Izjava o n. 856 00:41:19,440 --> 00:41:22,830 Želim uporabiti n, ki dejansko obstaja. 857 00:41:22,830 --> 00:41:25,780 In tako zdaj v vrstico 10, Jaz dodeliti n vrednosti. 858 00:41:25,780 --> 00:41:28,580 Vendar v skladu šest izjavljam, n. 859 00:41:28,580 --> 00:41:32,940 In tako sem lahko ali pa ne morem ga uporabljajo v vrstico 12 zdaj? 860 00:41:32,940 --> 00:41:37,120 Ne morem, ker med katerimi kodrasti Naramnice se prijavil zdaj? 861 00:41:37,120 --> 00:41:38,770 Ena tu gor na pete. 862 00:41:38,770 --> 00:41:40,330 Eni tu na liniji 14. 863 00:41:40,330 --> 00:41:49,770 Torej, če sem zdaj pomanjšati, shranite to datoteko, pojdite nazaj v napravo in zagnati bo pozitiven, je 864 00:41:49,770 --> 00:41:50,820 zbrati ta čas. 865 00:41:50,820 --> 00:41:51,940 Tako da je že napredek. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Pozitiven, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Zahtevam, da mi daš pozitivno celo število. 868 00:41:56,060 --> 00:41:57,750 Negativno 1. 869 00:41:57,750 --> 00:41:59,020 Negativno 2. 870 00:41:59,020 --> 00:42:00,680 Negativna 3. 871 00:42:00,680 --> 00:42:01,760 Nič. 872 00:42:01,760 --> 00:42:03,000 Ena. 873 00:42:03,000 --> 00:42:05,130 In hvala za enega, je kaj je sedaj natisnjen. 874 00:42:05,130 --> 00:42:07,400 >> Naj poskusim nekaj drugega, iz radovednosti. 875 00:42:07,400 --> 00:42:09,600 Jaz pa sem rekel, da vložek celo število. 876 00:42:09,600 --> 00:42:12,870 Kaj pa, če sem namesto vnesite jagnje? 877 00:42:12,870 --> 00:42:14,460 Torej ste zdaj videli drugačen poziv - 878 00:42:14,460 --> 00:42:15,350 poskusite znova. 879 00:42:15,350 --> 00:42:17,670 Vendar nikjer v moji kodi sem napisal poskusite znova. 880 00:42:17,670 --> 00:42:22,320 Torej, če je verjetno, je to retry poziv prihajajo iz, bi rekel? 881 00:42:22,320 --> 00:42:23,540 Ja, iz GetInt () sama. 882 00:42:23,540 --> 00:42:26,650 Torej ena od stvari, osebje CS50, samo po sebi za vas, vsaj v teh prvih nekaj 883 00:42:26,650 --> 00:42:30,400 tedne, se mi napisal nekaj znesek preverjanja, da se zagotovi, da napake, če 884 00:42:30,400 --> 00:42:34,260 pokličete GetInt (), bo vsaj vam nazaj int od uporabnika. 885 00:42:34,260 --> 00:42:35,460 Ne boste dobili niz. 886 00:42:35,460 --> 00:42:36,440 Ne boste dobili znak. 887 00:42:36,440 --> 00:42:39,660 Ne boste dobili nekaj povsem drugega. 888 00:42:39,660 --> 00:42:40,510 Boste dobili int. 889 00:42:40,510 --> 00:42:41,890 >> Zdaj, morda ne bo pozitiven. 890 00:42:41,890 --> 00:42:42,770 To morda ne bo negativna. 891 00:42:42,770 --> 00:42:44,550 Izdelujemo nobenega jamstva okoli tega. 892 00:42:44,550 --> 00:42:48,960 Vendar bomo nadlegovanja uporabnika ponoviti, retry, poskusite znova, dokler on ali ona dejansko 893 00:42:48,960 --> 00:42:49,810 sodeluje. 894 00:42:49,810 --> 00:42:53,085 Podobno je, če delam 1,23, da ni int. 895 00:42:53,085 --> 00:42:58,400 Ampak, če mi tip v, recimo, 50 let, ki mi daje vrednost, kar sem hotel. 896 00:42:58,400 --> 00:42:59,050 >> Vse je v redu. 897 00:42:59,050 --> 00:43:01,380 Torej ni slabo. 898 00:43:01,380 --> 00:43:04,780 Vsa vprašanja o tem, kaj smo pravkar naredil? 899 00:43:04,780 --> 00:43:07,930 Tipka takeaway pa, da bo jasno, ne toliko zanko, ki smo videli 900 00:43:07,930 --> 00:43:10,880 Pred čeprav imamo v resnici ne uporabi, vendar je vprašanje področja, kjer 901 00:43:10,880 --> 00:43:17,045 spremenljivke lahko se lahko uporabljajo le samo v nekaterih določenem obsegu. 902 00:43:17,045 --> 00:43:19,830 >> V redu, naj obravnava predlog ste naredili prej, da od 903 00:43:19,830 --> 00:43:20,860 Globalna spremenljivka. 904 00:43:20,860 --> 00:43:24,880 Kot prahi, se je izkazalo, da je druga Rešitev tega problema, vendar 905 00:43:24,880 --> 00:43:28,880 ponavadi napačna rešitev ali slabo zasnovana rešitev je, da 906 00:43:28,880 --> 00:43:31,670 razglasi svojo spremenljivko, kot tisto, kar je imenovana globalna spremenljivka. 907 00:43:31,670 --> 00:43:34,610 Zdaj sem nekako kršijo mojo definicijo področja, saj obstaja 908 00:43:34,610 --> 00:43:37,680 Ni zavite oklepaje v sam vrh in zelo dno datoteke. 909 00:43:37,680 --> 00:43:40,190 Ampak posledice tega je, da je sedaj v skladu štirih, 910 00:43:40,190 --> 00:43:41,710 n je globalno spremenljivko. 911 00:43:41,710 --> 00:43:44,460 In kot že samo ime pove, da je Samo dostopen povsod. 912 00:43:44,460 --> 00:43:45,790 >> Scratch dejansko ima to. 913 00:43:45,790 --> 00:43:48,650 Če ste uporabili spremenljivko, boste morda spomni si moral izbrati, če je to za 914 00:43:48,650 --> 00:43:50,780 to sprite ali za vse sprites. 915 00:43:50,780 --> 00:43:54,270 No, vse sprites je samo jasno besedami globalna. 916 00:43:54,270 --> 00:43:55,520 Ja? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, res dobro vprašanje. 919 00:44:10,990 --> 00:44:14,310 >> Tako opozarjajo, da je v prvi različici moje kode, ko sem nepravilno 920 00:44:14,310 --> 00:44:17,700 prijavljeno in ki je opredeljeno v skladu devet - 921 00:44:17,700 --> 00:44:19,980 Sem prijavljen kot spremenljivka in sem dal to vrednost z 922 00:44:19,980 --> 00:44:21,160 Operater naloga - 923 00:44:21,160 --> 00:44:22,520 To mi je dal dve napaki. 924 00:44:22,520 --> 00:44:26,560 Ena, da n ni bila uporabljena, in dve, ki je v smeri 11 925 00:44:26,560 --> 00:44:27,770 to preprosto ni bil razglašen. 926 00:44:27,770 --> 00:44:31,120 Torej prva nisem naslov v tistem času. 927 00:44:31,120 --> 00:44:35,130 To ni nujno napaka prijaviti spremenljiv, vendar ga ne uporabljajte. 928 00:44:35,130 --> 00:44:38,540 Toda ena od stvari, ki smo jih storili v CS50 aparat, namenoma, 929 00:44:38,540 --> 00:44:43,340 pedagoško, je smo Koljenast up Pričakovanja prevajalnik, da bi 930 00:44:43,340 --> 00:44:46,970 prepričani, da delaš stvari, ne samo pravilno, ampak res pravilno. 931 00:44:46,970 --> 00:44:51,520 >> Ker če ste razglasitvi spremenljivko kot n in nikoli ga uporablja, ali jo uporabi 932 00:44:51,520 --> 00:44:53,700 pravilno, kaj potem to počne tam? 933 00:44:53,700 --> 00:44:55,650 To je resnično brezpredmeten. 934 00:44:55,650 --> 00:44:58,980 In to je zelo enostavno daljšem časovnem obdobju, če ne nastavite svoj računalnik v 935 00:44:58,980 --> 00:45:01,960 na ta način, da samo še kodo, ki je mali ostanki tukaj, ostanki tam. 936 00:45:01,960 --> 00:45:04,390 In potem mesecev kasneje pogledaš nazaj in si kot, zakaj je ta linija 937 00:45:04,390 --> 00:45:05,060 Koda tam? 938 00:45:05,060 --> 00:45:07,940 In če ni dober razlog, da ne vi ali vaši kolegi ne koristi 939 00:45:07,940 --> 00:45:10,650 po cesti, da so za spotakne njo takrat. 940 00:45:10,650 --> 00:45:12,540 >> Kot je stran, kjer je ki prihajajo iz? 941 00:45:12,540 --> 00:45:16,410 No, opozarjajo, da vsakič, ko bomo prevedite Program, vse te stvari je 942 00:45:16,410 --> 00:45:17,380 se natisne. 943 00:45:17,380 --> 00:45:18,350 Tako da se bomo vrnili k temu. 944 00:45:18,350 --> 00:45:22,230 Ampak še enkrat, da je korist, ki avtomatizira proces priprave, ki jih 945 00:45:22,230 --> 00:45:24,830 teče dejansko prevajalnik imenovano Jek. 946 00:45:24,830 --> 00:45:27,650 Ta stvar, bomo sčasoma videli, ima storiti z debugging s posebno 947 00:45:27,650 --> 00:45:29,060 Program se imenuje iskalnik napak. 948 00:45:29,060 --> 00:45:32,150 To je povezano z optimizacijo koda - več o tem v prihodnje. 949 00:45:32,150 --> 00:45:33,620 STD = C99 - 950 00:45:33,620 --> 00:45:37,870 To samo pomeni, da uporabljate različico 1999 C. C je bilo okoli celo dlje, kot je 951 00:45:37,870 --> 00:45:40,830 da, vendar pa so nekateri lepo Spremembe 10 plus let nazaj. 952 00:45:40,830 --> 00:45:42,690 >> In tukaj je ustrezna narave. 953 00:45:42,690 --> 00:45:45,880 Pravimo, da vse, kar prej bi bilo opozorilo 954 00:45:45,880 --> 00:45:48,560 napaka preprečuje študentu od priprave. 955 00:45:48,560 --> 00:45:51,400 In stenske pomeni to za cel kup stvari, ki ne 956 00:45:51,400 --> 00:45:53,060 povezan le z spremenljivk. 957 00:45:53,060 --> 00:45:54,700 In potem naj se pomaknete na konec te vrstice. 958 00:45:54,700 --> 00:45:56,430 In tudi to, da bomo sčasoma pridejo nazaj. 959 00:45:56,430 --> 00:45:59,040 To je seveda ime Datoteka sem prevesti. 960 00:45:59,040 --> 00:46:02,160 To spominja na ime datoteke Jaz sem prikazovanje kot ime 961 00:46:02,160 --> 00:46:04,070 moje loven programa. 962 00:46:04,070 --> 00:46:08,970 Ta-lcs50 samo pomeni uporabo CS50 knjižnica in vse ničle in enice, da 963 00:46:08,970 --> 00:46:12,390 Osebje je napisal in zbirajo prej letos, vključiti 964 00:46:12,390 --> 00:46:13,490 jim v mojem programu. 965 00:46:13,490 --> 00:46:16,130 >> In kdo ve, kaj lm-je? 966 00:46:16,130 --> 00:46:18,150 To je matematično knjižnico, ki je samo tam, tudi če ste 967 00:46:18,150 --> 00:46:19,320 ne delam nobene matematike. 968 00:46:19,320 --> 00:46:22,620 To je samo avtomatično ki nam jih je uspelo. 969 00:46:22,620 --> 00:46:26,540 >> No, naj stori še en drug primer Tukaj jih odpira novo datoteko. 970 00:46:26,540 --> 00:46:30,560 In mi rešiti tole kot string.c. 971 00:46:30,560 --> 00:46:37,980 Izkazalo se je, kot smo govorili o podatkih Vrste danes, tam je še več 972 00:46:37,980 --> 00:46:40,630 dogaja pod pokrovom kot smo videli doslej. 973 00:46:40,630 --> 00:46:42,290 Naj hitro narediš kratek program. 974 00:46:42,290 --> 00:46:44,510 Vključiti stdio.h. 975 00:46:44,510 --> 00:46:45,730 In bom le da. 976 00:46:45,730 --> 00:46:48,110 In veste, mi ne bo isto napako znova in znova. 977 00:46:48,110 --> 00:46:50,540 Vključujejo cs50.h. 978 00:46:50,540 --> 00:46:54,870 In mi daj zdaj in ne int main (void). 979 00:46:54,870 --> 00:46:58,790 >> In zdaj sem preprosto želite narediti program , ki to zmore - razglasi niz 980 00:46:58,790 --> 00:47:03,610 imenovana s in dobili niz od uporabnika. 981 00:47:03,610 --> 00:47:05,820 In mi naredil malo Navodila tukaj - 982 00:47:05,820 --> 00:47:09,960 prosim dajte mi niz - tako uporabnik ve, kaj storiti. 983 00:47:09,960 --> 00:47:13,190 In potem sem dol pod to, Rad bi naredil naslednje - 984 00:47:13,190 --> 00:47:16,060 za int i dobi nič. 985 00:47:16,060 --> 00:47:18,580 Again, računalniški znanstveniki običajno začetek štetja na nič, vendar smo lahko 986 00:47:18,580 --> 00:47:20,340 da to eno, če smo res želeli. 987 00:47:20,340 --> 00:47:27,240 Zdaj bom naredil jaz, je manj od dolžine niza s. 988 00:47:27,240 --> 00:47:28,430 Torej strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 še enkrat, to je kratko in jedrnato, ker je lažje na vrsto, čeprav je 991 00:47:31,650 --> 00:47:32,590 malo skrivnosten. 992 00:47:32,590 --> 00:47:35,290 >> To je funkcija smo ne uporablja Pred ampak dobesedno počne - 993 00:47:35,290 --> 00:47:37,810 vrniti se mi številko, ki predstavlja dolžina niza 994 00:47:37,810 --> 00:47:38,690 da Vtipkali. 995 00:47:38,690 --> 00:47:41,740 Če jih vnesli v zdravo, bi bilo vrniti pet zato, ker je pet 996 00:47:41,740 --> 00:47:42,890 Črke v zdravo. 997 00:47:42,890 --> 00:47:45,390 Nato na vsaki ponovitvi ta zanka, jaz plus plus. 998 00:47:45,390 --> 00:47:49,170 Torej še enkrat, standardni konstrukt, čeprav niste čisto preveč udobno ali 999 00:47:49,170 --> 00:47:50,420 seznanjeni s tem še ni. 1000 00:47:50,420 --> 00:47:53,220 >> Zdaj pa na vsaki ponovitvi te zanke, opazili, kaj bom naredil. 1001 00:47:53,220 --> 00:47:56,690 Želim, da gredo naprej in tiskanje se en znak - 1002 00:47:56,690 --> 00:47:59,940 tako,% c Nagibnica n v novo vrstico. 1003 00:47:59,940 --> 00:48:00,990 In potem, veste, kaj hočem narediti? 1004 00:48:00,990 --> 00:48:05,090 Ne glede beseda, da uporabnik vnese leta, kot je zdravo, Želim natisniti 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, en znak na linijo. 1006 00:48:09,530 --> 00:48:13,080 Z drugimi besedami, želim, da se na posameznih znakov v nizu, 1007 00:48:13,080 --> 00:48:16,770 pri čemer do zdaj ima le niz je zaporedje znakov. 1008 00:48:16,770 --> 00:48:21,690 >> In izkazalo se je, kar lahko naredim s, nosilec, i, zaklepaj, zaprite 1009 00:48:21,690 --> 00:48:23,580 oklepaj, podpičje. 1010 00:48:23,580 --> 00:48:25,640 In mi morali narediti še eno stvar. 1011 00:48:25,640 --> 00:48:30,570 To je v datoteki z imenom string.h da strlen je razglašena. 1012 00:48:30,570 --> 00:48:33,190 Torej, če želim uporabljati to funkcijo, Moram povedati prevajalniku, 1013 00:48:33,190 --> 00:48:34,450 pričakujejo, da jo uporabljajo. 1014 00:48:34,450 --> 00:48:37,040 Zdaj pa mi gredo naprej in da Program se imenuje niz. 1015 00:48:37,040 --> 00:48:39,150 Pika, poševnica, niz. 1016 00:48:39,150 --> 00:48:40,130 >> Prosim, daj mi niz. 1017 00:48:40,130 --> 00:48:40,900 Grem naprej in ga vnesite. 1018 00:48:40,900 --> 00:48:43,040 Pozdravljeni, v vseh kape, Enter. 1019 00:48:43,040 --> 00:48:47,390 In zdaj sem opazil to natisnjena en znak za drugo. 1020 00:48:47,390 --> 00:48:51,450 Torej nov podatek v tem, da niz Na koncu dneva, lahko 1021 00:48:51,450 --> 00:48:54,810 dostopate prek svojega posameznika znaki z uvedbo kvadrat 1022 00:48:54,810 --> 00:48:55,840 Nosilec zapis. 1023 00:48:55,840 --> 00:48:59,090 In to zato, ker niz pod Napa je dejansko zaporedje 1024 00:48:59,090 --> 00:48:59,810 znakov. 1025 00:48:59,810 --> 00:49:02,010 Toda kaj je čeden o njih je V računalnika RAM - 1026 00:49:02,010 --> 00:49:05,300 Mac, karkoli že je - oni dobesedno back to back to back - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 na posameznika, ki mejijo bajtov v pomnilniku. 1029 00:49:09,920 --> 00:49:13,210 >> Torej, če želite, da se ob osmi primer zlog, ki je v to zanko bi 1030 00:49:13,210 --> 00:49:16,900 Nosilec nič, en nosilec, nosilec dveh, Nosilec tri, štiri nosilec - 1031 00:49:16,900 --> 00:49:18,890 da se nič indeksirane do pet - 1032 00:49:18,890 --> 00:49:23,330 da natisniti H-E-L-L-O v svoji vrstici. 1033 00:49:23,330 --> 00:49:26,320 >> Zdaj, kot teaser, naj vam pokažem vrste stvari, boste sčasoma 1034 00:49:26,320 --> 00:49:31,950 razumejo, vsaj z nekaterimi blizu videti. 1035 00:49:31,950 --> 00:49:35,610 Za eno, tisto, kar smo v današnjem primeri, če želite, je pravzaprav 1036 00:49:35,610 --> 00:49:38,300 eden od prvih jailbreaks za iPhone. 1037 00:49:38,300 --> 00:49:40,800 Beg iz zapora pomeni pokanje telefon tako da lahko dejansko uporabljajo na 1038 00:49:40,800 --> 00:49:43,380 drugačna prevoznik ali namestitev svoje programske opreme. 1039 00:49:43,380 --> 00:49:45,660 In boste opazili, je to popolnoma zgleda skrivnosten, najverjetneje. 1040 00:49:45,660 --> 00:49:46,520 Ampak poglej to. 1041 00:49:46,520 --> 00:49:50,420 IPhone je očitno razpokan z zanka, če pogoj, ostalo 1042 00:49:50,420 --> 00:49:52,580 pogoj, kup funkcij smo ni videl. 1043 00:49:52,580 --> 00:49:54,230 >> In spet, da ne bo na prvi pogled najbrž 1044 00:49:54,230 --> 00:49:55,620 razumeti, kako se to dela. 1045 00:49:55,620 --> 00:49:58,940 Ampak vse, kar smo nekako sprejeti za samoumevno v naših sodobnih življenj 1046 00:49:58,940 --> 00:50:02,040 dejansko kaže, da celo zmanjšali z nekaterimi teh temeljih smo bili 1047 00:50:02,040 --> 00:50:02,820 gledaš. 1048 00:50:02,820 --> 00:50:06,680 Dovolite mi, da gredo naprej in odprite eno drug program, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Torej, tudi to je nekaj, kar res ne bi smeli vedeti. 1050 00:50:08,970 --> 00:50:12,440 Tudi nobeden od zaposlenih, ali sem lahko verjetno ugotoviti ta, ki ga gledaš 1051 00:50:12,440 --> 00:50:15,450 Morda zato, ker je bila ta oznaka nekoga , ki je bil predložen, kar je 1052 00:50:15,450 --> 00:50:19,630 zgodovinsko znana kot zapleteno kodo C Tekmovanje, kjer si napisati program 1053 00:50:19,630 --> 00:50:24,670 ki pripravlja in vodi, vendar je tako prekleto skrivnosten človek ne more razumeti, kaj 1054 00:50:24,670 --> 00:50:27,530 to bo storil, dokler so jo dejansko vodijo. 1055 00:50:27,530 --> 00:50:29,940 >> Torej res, če pogledaš na to koda, vidim stikalo. 1056 00:50:29,940 --> 00:50:30,870 Vidim glavni. 1057 00:50:30,870 --> 00:50:33,800 Vidim te oklepaje kar pomeni, nekakšen matrike. 1058 00:50:33,800 --> 00:50:35,970 Ali kdo želel ugibati, kaj ta program dejansko 1059 00:50:35,970 --> 00:50:37,220 naredi, če sem teči Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Da. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Dobro opravljeno. 1064 00:50:44,690 --> 00:50:48,090 Torej samo osebje in ne morem ugotoviti kaj te stvari narediti. 1065 00:50:48,090 --> 00:50:51,670 >> In zdaj nazadnje, naj gredo naprej in odprli še en drug program. 1066 00:50:51,670 --> 00:50:53,440 Tale - 1067 00:50:53,440 --> 00:50:55,550 Ponovno bomo lahko izvorno kodo Na voljo na spletu - to je ravno 1068 00:50:55,550 --> 00:50:57,480 nekako ljubek si. 1069 00:50:57,480 --> 00:50:59,750 Vse, kar so naredili, je udaril preslednico zelo malo. 1070 00:50:59,750 --> 00:51:01,320 Ampak to je resnična številka. 1071 00:51:01,320 --> 00:51:04,790 Torej, če menite, da je lepa, če bomo dejansko vodijo to na poziv 1072 00:51:04,790 --> 00:51:08,970 sčasoma boste videli, kako bomo Morda stvari, kot je ta. 1073 00:51:08,970 --> 00:51:14,008 >> Torej bomo pustil na tej opombi in se vidimo v sredo. 1074 00:51:14,008 --> 00:51:18,440 >> [Predvajanja glasbe] 1075 00:51:18,440 --> 00:51:23,380 >> ZVOČNIK 2: Na naslednjem CS50, multipleksiranega uprizorila upor. 1076 00:51:23,380 --> 00:51:24,112 >> ZVOČNIK 3: Tukaj je. 1077 00:51:24,112 --> 00:51:25,362 Ujemite ga! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Predvajanja glasbe]