1 00:00:00,000 --> 00:00:10,920 >> [Glazba svira] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: U redu, dobrodošli natrag u CS50. 3 00:00:14,680 --> 00:00:16,500 Ovo je početak drugog tjedna. 4 00:00:16,500 --> 00:00:18,940 Riječ od jednog od naših prijatelji na kampusu - 5 00:00:18,940 --> 00:00:22,620 Ako ste zainteresirani, eventualno, bilo sada ili u nekom budućem razdoblju 6 00:00:22,620 --> 00:00:25,670 još, još jednom ugodno, nastava srednje škole malo 7 00:00:25,670 --> 00:00:27,680 nešto o računalnoj znanosti, napraviti glavu na taj URL. 8 00:00:27,680 --> 00:00:32,360 Oni su u određenoj potrebi sada od učitelji, osobito ako imate 9 00:00:32,360 --> 00:00:34,700 imali neke izloženost računalne znanosti. 10 00:00:34,700 --> 00:00:38,060 >> Dakle podsjetiti da je posljednji put, uveli smo nekoliko tipova podataka u C, i 11 00:00:38,060 --> 00:00:40,590 možda su počeli da se vaš ruke prljave s tim do sada 12 00:00:40,590 --> 00:00:41,940 u problemu postaviti jednu. 13 00:00:41,940 --> 00:00:43,230 I imali smo char. 14 00:00:43,230 --> 00:00:49,100 Dakle, u ponešto tehničkih uvjeta, što je znak kao što ga danas poznajemo? 15 00:00:49,100 --> 00:00:51,050 >> Dakle, to je lik, ali budimo Točnije sada. 16 00:00:51,050 --> 00:00:53,735 Što to znači za karaktera ili pojedinac znak? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Non-numerička znaka - 19 00:00:59,500 --> 00:01:00,670 pa ne nužno. 20 00:01:00,670 --> 00:01:04,580 Ispada da je čak i brojeve, pa čak i interpunkcije i slova su 21 00:01:04,580 --> 00:01:06,980 zastupljeni s ovim podacima upišite poznat kao znak. 22 00:01:06,980 --> 00:01:09,440 Pa to nije nužno po abecedi. 23 00:01:09,440 --> 00:01:11,100 Da? 24 00:01:11,100 --> 00:01:12,275 >> Tako da je ASCII znakova. 25 00:01:12,275 --> 00:01:15,510 Dakle, ako mislite vratiti na nulu tjedna, kada je imali smo bajt volontera 26 00:01:15,510 --> 00:01:19,150 smisliti i bilo držati ruke gore ili ne sve, one su bitova. 27 00:01:19,150 --> 00:01:22,450 Ali zajedno kao grupa od osam, oni predstavljali bajt. 28 00:01:22,450 --> 00:01:26,030 I mi uveo pojam ASCII na tom predavanju, što jednostavno 29 00:01:26,030 --> 00:01:28,170 mapiranje između brojeva i slova. 30 00:01:28,170 --> 00:01:32,010 ASCII i koristi, što ti ljudi implicirana, osam bitova 31 00:01:32,010 --> 00:01:33,660 da predstavljaju karakter. 32 00:01:33,660 --> 00:01:36,890 >> Dakle, u skladu s tim, ako je osam bitova može jedni se na jednoj od dvije vrijednosti - 33 00:01:36,890 --> 00:01:38,010 nula ili jedan - 34 00:01:38,010 --> 00:01:40,280 To znači da su dvije mogućnosti za tu osobu - 35 00:01:40,280 --> 00:01:41,230 nula ili jedan - 36 00:01:41,230 --> 00:01:44,070 dva za ove osobe, dva za to osoba, dvije za ovaj jedan. 37 00:01:44,070 --> 00:01:47,450 Dakle, ukupno je dva puta dva puta dva puta dva puta dva - 38 00:01:47,450 --> 00:01:49,700 pa dva osma ukupno. 39 00:01:49,700 --> 00:01:54,320 Dakle, postoji ukupan broj znakova 256 moguće da možete 40 00:01:54,320 --> 00:01:55,750 predstavlja s osam bitova. 41 00:01:55,750 --> 00:01:59,210 >> Sada, oni od vas koji govori Azijski jezici mogao znati da postoji više 42 00:01:59,210 --> 00:02:02,620 likovi u svijetu nego samo Kao i BS i CS i DS. 43 00:02:02,620 --> 00:02:06,130 I doista, ASCII nije dostatna za Puno jezicima svijeta. 44 00:02:06,130 --> 00:02:07,760 No, više o tome drugi put. 45 00:02:07,760 --> 00:02:11,240 Za sada znamo da je u C, ako želite za zastupanje pismo, komad 46 00:02:11,240 --> 00:02:15,780 interpunkcije, ili samo nešto znakova u prirodi, mi koristimo znak. 47 00:02:15,780 --> 00:02:18,240 I to je jedan bajt ili osam bitova. 48 00:02:18,240 --> 00:02:19,690 >> Kako o int? 49 00:02:19,690 --> 00:02:20,780 Pa, int je cijeli broj. 50 00:02:20,780 --> 00:02:23,175 Koliko bita, ako se sjećaš, bio cijeli broj obično? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Svatko opoziv? 53 00:02:27,512 --> 00:02:29,600 Dakle, to je obično 32. 54 00:02:29,600 --> 00:02:32,120 To zapravo ovisi o računalu koji koristite. 55 00:02:32,120 --> 00:02:35,770 No, u aparat, a puno računala, što je 32 bita ili četiri 56 00:02:35,770 --> 00:02:37,140 bajt - osam puta četiri. 57 00:02:37,140 --> 00:02:39,790 I Ints jednostavno se koriste za pohranjivanje brojeva, bilo negativne, 58 00:02:39,790 --> 00:02:41,610 pozitivan ili nula. 59 00:02:41,610 --> 00:02:45,250 >> A ako imaš 32 bita, a vi samo briga o pozitivnim brojevima, može 60 00:02:45,250 --> 00:02:48,960 tko približan koliko je to moguće integeri računalo može predstavljati na 61 00:02:48,960 --> 00:02:51,820 nulu na gore? 62 00:02:51,820 --> 00:02:56,130 Dakle, to će biti dva do 32, koji je otprilike četiri milijarde. 63 00:02:56,130 --> 00:02:59,720 Tako su ove dvije sile će biti povezana pitanja u računalnoj znanosti. 64 00:02:59,720 --> 00:03:03,930 Kao što ćemo vidjeti, oni su prilično zgodan raditi, čak i ako to nije sasvim 65 00:03:03,930 --> 00:03:05,790 lako učiniti math u svojoj glavi. 66 00:03:05,790 --> 00:03:07,000 >> Dakle, mi ćemo reći oko četiri milijarde. 67 00:03:07,000 --> 00:03:08,620 Sada, dugo dugo - 68 00:03:08,620 --> 00:03:09,770 možete vrsta pogodak. 69 00:03:09,770 --> 00:03:10,480 To je duži od int. 70 00:03:10,480 --> 00:03:12,440 Koliko bita? 71 00:03:12,440 --> 00:03:14,250 Dakle, 64 bita ili osam bajtova. 72 00:03:14,250 --> 00:03:17,480 To jednostavno znači da možete predstavljati čak veći brojevi, veći pozitivni ili 73 00:03:17,480 --> 00:03:19,160 veći negativni brojevi. 74 00:03:19,160 --> 00:03:20,060 >> I o tome kako plutaju? 75 00:03:20,060 --> 00:03:22,260 To je pomičnim zarezom vrijednost od 32 bita. 76 00:03:22,260 --> 00:03:25,180 Ovo je samo realan broj, nešto s decimalne točke. 77 00:03:25,180 --> 00:03:30,100 Ali ako umjesto toga potrebno više mjesta nakon decimalne točke ili želite 78 00:03:30,100 --> 00:03:33,720 predstavljaju veći broj s nekim frakcija nakon toga, možete koristiti 79 00:03:33,720 --> 00:03:36,260 dvostruko, što je 64 bita. 80 00:03:36,260 --> 00:03:38,240 >> No, tu je zanimljiva takeaway ovdje. 81 00:03:38,240 --> 00:03:42,890 Dakle, ako Ints su ograničena i 32 bita čak i duge žudi ograničene su 64. 82 00:03:42,890 --> 00:03:46,180 bita, koja vrsta moli pitanje, što ako stvarno želite brojati 83 00:03:46,180 --> 00:03:48,790 viša od 4 milijarde eura za cijeli broj? 84 00:03:48,790 --> 00:03:50,330 Pa, ti samo koristiti dugo dugo. 85 00:03:50,330 --> 00:03:54,200 No što ako želite brojati veća od dvije do 64., dati ili uzeti? 86 00:03:54,200 --> 00:03:55,810 >> Sada, to je ogroman broj. 87 00:03:55,810 --> 00:03:59,250 Ali na kraju, možda je zapravo brigu o takvim vrijednostima, 88 00:03:59,250 --> 00:04:03,070 pogotovo ako koristite bazu podataka i počinju prikupljati puno i puno 89 00:04:03,070 --> 00:04:06,190 i puno podataka i dodjeljivanje jedinstvene Brojevi na svaki komad tih podataka. 90 00:04:06,190 --> 00:04:07,430 Tako smo vrsta imati problema. 91 00:04:07,430 --> 00:04:10,700 A isto tako, s pomičnim zarezom Vrijednosti - pluta ili u parovima - 92 00:04:10,700 --> 00:04:14,290 ako imaš samo ograničen broj bita, koliko je ukupna količina mogla da 93 00:04:14,290 --> 00:04:16,980 možda predstavljaju? 94 00:04:16,980 --> 00:04:19,540 >> Pa, to je manje jasno kada uključivati ​​decimalne točke. 95 00:04:19,540 --> 00:04:20,899 No, to je sigurno konačna. 96 00:04:20,899 --> 00:04:24,390 Ako imate ograničen broj bitova, konačan broj ljudi, konačnih 97 00:04:24,390 --> 00:04:27,350 broj žarulja, sigurno možete predstavlja samo ograničen broj 98 00:04:27,350 --> 00:04:28,510 s pomičnim zarezom vrijednosti. 99 00:04:28,510 --> 00:04:33,170 No, koliko je realni brojevi Jesu li njihove u svijetu? 100 00:04:33,170 --> 00:04:33,680 Tu je beskonačan. 101 00:04:33,680 --> 00:04:37,280 Dakle, to je vrsta problema, jer smo nemaju beskonačnu količinu 102 00:04:37,280 --> 00:04:39,970 memorije ili RAM-a unutar našeg računala. 103 00:04:39,970 --> 00:04:41,780 Dakle, neke stvari mogu dogoditi izazovan. 104 00:04:41,780 --> 00:04:43,900 >> Tako ćemo ići naprijed i pokušajte izraziti ovo ovdje. 105 00:04:43,900 --> 00:04:46,240 Dopustite mi da ići naprijed i otvoriti gedit. 106 00:04:46,240 --> 00:04:50,360 Ja ću ići naprijed i spremite datoteku pod nazivom "floats0.c" samo da bi se 107 00:04:50,360 --> 00:04:54,630 skladu s primjerom koji je dostupni online, ako želite. 108 00:04:54,630 --> 00:04:58,080 I ja ću ići naprijed i definirati na sljedeći način - 109 00:04:58,080 --> 00:05:01,540 Ja ću ići naprijed i reći, int Glavni nevažeće, kao što smo često. 110 00:05:01,540 --> 00:05:07,190 >> A onda u tom programu, idem izjavljujem sebi plutaju, tako da 32-bitni 111 00:05:07,190 --> 00:05:09,700 varijabla zove f, proizvoljno. 112 00:05:09,700 --> 00:05:13,910 A onda ću pohraniti u njoj Ne znam, desetine, pa 0.1. 113 00:05:13,910 --> 00:05:16,590 Pa ću izraziti da kao jedan podijeljeno 10, što je sasvim 114 00:05:16,590 --> 00:05:17,790 legitimna u C. 115 00:05:17,790 --> 00:05:20,460 >> A onda u drugom redu, ja jednostavno želite ispisati tu vrijednost. 116 00:05:20,460 --> 00:05:22,950 Dakle podsjetiti da možemo koristiti printf upoznati. 117 00:05:22,950 --> 00:05:25,420 Mi ne želimo koristiti% sam za int. 118 00:05:25,420 --> 00:05:28,360 Želimo koristiti% f za plovak. 119 00:05:28,360 --> 00:05:33,080 A onda ću to učiniti obrnute kose n, blizu citat, zarez, f, zarez. 120 00:05:33,080 --> 00:05:34,400 >> Dakle ovdje je moj program. 121 00:05:34,400 --> 00:05:35,820 Već postoji jedan bug. 122 00:05:35,820 --> 00:05:38,640 Da li je netko za koga to kliknuo Već žele ukazati najmanje 123 00:05:38,640 --> 00:05:40,220 jedan bug sam napravio? 124 00:05:40,220 --> 00:05:42,470 Da? 125 00:05:42,470 --> 00:05:42,800 Da. 126 00:05:42,800 --> 00:05:47,860 Zaboravio sam "# include", na vrhu, oni simptom koji, ako sam pokušati 127 00:05:47,860 --> 00:05:50,490 sastaviti ovo će biti da Prevodilac će vikati na mene, 128 00:05:50,490 --> 00:05:52,770 govoreći nedefiniranu simbol ili nešto u tom smislu. 129 00:05:52,770 --> 00:05:55,360 To ne razumijem nešto printf sviđa. 130 00:05:55,360 --> 00:05:59,380 >> Tako ću učiniti "# uključiti ", Spremite datoteku. 131 00:05:59,380 --> 00:06:00,400 I sada je u boljoj formi. 132 00:06:00,400 --> 00:06:02,690 Ali ja ću istaknuti od jedan novi detalj danas. 133 00:06:02,690 --> 00:06:08,620 Osim što određuje mjesto nositelji kao% f% i% s, možete 134 00:06:08,620 --> 00:06:12,320 ponekad utječu na ponašanje tog rezervirano mjesto. 135 00:06:12,320 --> 00:06:15,540 Na primjer, u slučaju floating Vrijednost boda, ako želim 136 00:06:15,540 --> 00:06:22,200 prikazati jednu decimalu nakon Razdoblje, ja zapravo može učiniti 0,1 f. 137 00:06:22,200 --> 00:06:26,830 Dakle, drugim riječima, sam odvojiti f i znak postotka s 0,1, jednostavno 138 00:06:26,830 --> 00:06:30,200 printf reći, možda ste cijelo hrpa brojeva nakon decimale 139 00:06:30,200 --> 00:06:30,930 točka za mene. 140 00:06:30,930 --> 00:06:32,870 Ali ja samo želim vidjeti jednu od njih. 141 00:06:32,870 --> 00:06:36,280 >> Dakle, ja ću ići naprijed sada i uštedite ovaj program, idu u moj terminala 142 00:06:36,280 --> 00:06:41,870 prozor, a ja ću ići naprijed i tip bi float 0, upišite. 143 00:06:41,870 --> 00:06:44,930 Vidim da je pomalo zagonetan liniju koja će početi više smisla kao i mi 144 00:06:44,930 --> 00:06:46,900 ga zafrkavati, osim ovaj tjedan i sljedeći. 145 00:06:46,900 --> 00:06:50,480 Sada ću ići naprijed i pokrenuti float nulu. 146 00:06:50,480 --> 00:06:52,020 I, prokleto. 147 00:06:52,020 --> 00:06:54,880 >> Dakle, postoji još jedan bug Ovdje iz nekog razloga. 148 00:06:54,880 --> 00:07:02,490 Ja sam prilično siguran da je jedna desetina, ili jedan je podijeljeno 10, nije 0.0. 149 00:07:02,490 --> 00:07:04,590 Možda mi se ne gleda na dovoljno znamenki. 150 00:07:04,590 --> 00:07:08,580 Pa zašto ne kažem dva 0,2 vidjeti dvije decimalna mjesta umjesto samo jednog. 151 00:07:08,580 --> 00:07:11,810 Pusti me natrag u moj prozor terminala ovdje i udario se nekoliko puta na 152 00:07:11,810 --> 00:07:12,840 pogledajte moju povijest. 153 00:07:12,840 --> 00:07:15,910 Da bi plutaju nuli opet, a onda se opet. 154 00:07:15,910 --> 00:07:17,730 I sada ući. 155 00:07:17,730 --> 00:07:20,000 >> I sada sam prilično siguran da je to pogrešno. 156 00:07:20,000 --> 00:07:23,030 I sam napraviti tri i četiri, a ja sam Vjerojatno će se i dalje pojavljuje nule. 157 00:07:23,030 --> 00:07:24,880 Dakle, gdje je bug? 158 00:07:24,880 --> 00:07:27,910 Jedan podijeljeno 10 bi trebao biti 0.1. 159 00:07:27,910 --> 00:07:30,310 Netko želi uzeti ubod nožem u što temeljno je pitanje? 160 00:07:30,310 --> 00:07:32,400 Da? 161 00:07:32,400 --> 00:07:33,420 Obojica su cijeli brojevi. 162 00:07:33,420 --> 00:07:33,920 Pa što? 163 00:07:33,920 --> 00:07:37,820 Dakle, s jedne podijeljeno 10, koji je što mi je činiti u aritmetici. 164 00:07:37,820 --> 00:07:41,185 I sam se 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Da. 166 00:07:41,660 --> 00:07:43,240 I tako je doista to pitanje. 167 00:07:43,240 --> 00:07:46,700 Kada se cijeli broj u računalu a vi ga podijelite sa drugim cijelim brojem, 168 00:07:46,700 --> 00:07:50,430 računalo po defaultu će se Pretpostavljam da želiš cijeli broj. 169 00:07:50,430 --> 00:07:54,620 Problem, iako, naravno, da 0,1 nije cijeli broj. 170 00:07:54,620 --> 00:07:55,680 To je realan broj. 171 00:07:55,680 --> 00:07:59,610 I tako što računalo ne po Zadana je to samo baca 172 00:07:59,610 --> 00:08:01,070 sve nakon decimalne točke. 173 00:08:01,070 --> 00:08:03,380 To ne zaokružiti dolje ili gore po sebi. 174 00:08:03,380 --> 00:08:06,480 To jednostavno odbaci sve nakon decimalne točke. 175 00:08:06,480 --> 00:08:07,430 I sad to ima smisla. 176 00:08:07,430 --> 00:08:09,740 Jer sad smo jasno otišao s nula. 177 00:08:09,740 --> 00:08:10,250 >> Ali čekaj malo. 178 00:08:10,250 --> 00:08:11,840 Ne vidim int nulu. 179 00:08:11,840 --> 00:08:14,910 Ja zapravo vidim 0,00. 180 00:08:14,910 --> 00:08:16,340 Pa kako sam pomiriti sada? 181 00:08:16,340 --> 00:08:22,850 Ako netko podijeljeno 10 je nula, ali ja sam vidim 0,00, gdje je to sve 182 00:08:22,850 --> 00:08:24,250 pretvoriti natrag na pravi broj? 183 00:08:24,250 --> 00:08:25,500 Da. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Točno. 186 00:08:30,630 --> 00:08:35,600 >> Tako se ovdje u skladu pet, kada sam zapravo pohraniti da 0.1, koji se potom 187 00:08:35,600 --> 00:08:39,549 odrezan na nulu, unutar plovak, to je jednako učinkovito 188 00:08:39,549 --> 00:08:42,100 pohranjivanja ne kao int, ali, Doista, kao float. 189 00:08:42,100 --> 00:08:46,540 Osim toga, i onda sam se koriste printf izrijekom ispisati taj broj dva 190 00:08:46,540 --> 00:08:49,740 decimalna mjesta, iako postoji zapravo ne može biti bilo. 191 00:08:49,740 --> 00:08:51,020 >> Dakle, ova vrsta sranje, zar ne? 192 00:08:51,020 --> 00:08:53,640 Očito ne zna matematiku, barem na ovoj razini 193 00:08:53,640 --> 00:08:55,600 precizni, u računalu. 194 00:08:55,600 --> 00:08:56,930 No, sigurno postoji rješenje. 195 00:08:56,930 --> 00:09:00,410 Koji je najjednostavniji fix smo mogli možda i učiniti, čak i samo intuitivno ovdje 196 00:09:00,410 --> 00:09:01,130 riješiti ovo? 197 00:09:01,130 --> 00:09:02,380 Da? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Uključite se cijeli brojevi u - 200 00:09:06,574 --> 00:09:06,976 Da. 201 00:09:06,976 --> 00:09:10,420 Čak i ako nisam sasvim siguran što je Stvarno se ovdje događa, ako je to 202 00:09:10,420 --> 00:09:13,440 temeljno ima veze s tim kako što Ints, dobro, zašto ne bih 203 00:09:13,440 --> 00:09:18,230 bi da je 10,0, što je ovo 1.0, ponovo spremiti datoteku. 204 00:09:18,230 --> 00:09:20,990 Pusti me natrag na Dno i rekompiliranje. 205 00:09:20,990 --> 00:09:23,030 Dopustite mi sada reprizu. 206 00:09:23,030 --> 00:09:23,420 A tamo - 207 00:09:23,420 --> 00:09:27,690 Sada, ja sam dobio moj desetine predstavljeni kao 0.10. 208 00:09:27,690 --> 00:09:28,420 >> U redu. 209 00:09:28,420 --> 00:09:29,220 Dakle, to nije loše. 210 00:09:29,220 --> 00:09:31,730 I neka mi istaknuti i jednu drugu stranu mogli smo riješiti to. 211 00:09:31,730 --> 00:09:35,580 Dopustite mi da se zapravo vratiti u vrijeme kada smo imali to kao jedan 212 00:09:35,580 --> 00:09:36,680 Deseti trenutak prije. 213 00:09:36,680 --> 00:09:40,800 I neka mi ići naprijed i ponovo spremiti ovu datoteku kao drugi naziv datoteke, samo na 214 00:09:40,800 --> 00:09:41,750 imati malo kontrolnu točku. 215 00:09:41,750 --> 00:09:43,450 Znači, to je jedna verzija. 216 00:09:43,450 --> 00:09:45,520 I sad neka mi ići naprijed i napraviti još jednu verziju. 217 00:09:45,520 --> 00:09:48,540 Zvat ćemo ovu verziju dvije nule indeksiranih. 218 00:09:48,540 --> 00:09:51,280 >> I ja ću to učiniti umjesto ovo - znate što? 219 00:09:51,280 --> 00:09:54,400 Dodavanje točku nula radi u ovom slučaju. 220 00:09:54,400 --> 00:09:56,060 Ali pretpostavimo da se jedna bila promjenjiva. 221 00:09:56,060 --> 00:09:57,680 Trebala su 10 varijabla. 222 00:09:57,680 --> 00:10:00,680 Drugim riječima, pretpostavimo da nisam mogao samo teško-code 0,0 na kraju 223 00:10:00,680 --> 00:10:02,340 ove aritmetički izraz. 224 00:10:02,340 --> 00:10:05,820 Pa, ja zapravo može učiniti nešto u zagradama se zove casting. 225 00:10:05,820 --> 00:10:11,920 Ja mogu baciti taj cijeli broj 10 na plovak, i ja mogu baciti taj prirodni broj jedan 226 00:10:11,920 --> 00:10:12,800 plutaju, kao što je dobro. 227 00:10:12,800 --> 00:10:17,190 Tada matematike koja će biti učinjeno stvarno je 1,0 podijeljeno 10,0, 228 00:10:17,190 --> 00:10:19,250 rezultat koji ide u f kao i prije. 229 00:10:19,250 --> 00:10:26,130 Dakle, ako sam kompilirati to kao da pliva 2, a sada lebdi dva, ja se isto 230 00:10:26,130 --> 00:10:27,020 odgovor, kao što je dobro. 231 00:10:27,020 --> 00:10:29,640 >> Dakle, ovo je prilično neprirodan primjer, kako riješiti ovaj problem 232 00:10:29,640 --> 00:10:31,400 uvođenjem casting. 233 00:10:31,400 --> 00:10:34,410 No, u cjelini, casting će biti moćna stvar, pogotovo za 234 00:10:34,410 --> 00:10:38,180 Problem postavljena dva u tjedan dana, kada je želite pretvoriti jednu vrstu podataka 235 00:10:38,180 --> 00:10:41,800 još da je na kraju dana su predstavljeni na isti način. 236 00:10:41,800 --> 00:10:44,970 Na kraju dana, svaki što smo razgovarali o do sada je 237 00:10:44,970 --> 00:10:46,710 samo Ints ispod haube. 238 00:10:46,710 --> 00:10:48,950 Ili ako je preniska razina za da, oni su samo brojevi 239 00:10:48,950 --> 00:10:49,750 ispod poklopca motora. 240 00:10:49,750 --> 00:10:52,850 Čak i likovi, opet, prisjetimo Iz tjedna nule, su brojevi 241 00:10:52,850 --> 00:10:53,990 ispod poklopca motora. 242 00:10:53,990 --> 00:10:57,240 >> Koji je reći, možemo pretvoriti između različite vrste brojeva ako 243 00:10:57,240 --> 00:10:58,060 oni su samo dijelovi. 244 00:10:58,060 --> 00:11:01,020 Mi može pretvoriti između brojeva slova i ako su oni samo 245 00:11:01,020 --> 00:11:02,580 bita, i obrnuto. 246 00:11:02,580 --> 00:11:07,170 A lijevanja na ovaj način je mehanizam u programiranju koji vam omogućuje prisilno 247 00:11:07,170 --> 00:11:10,970 promijeniti jednu vrstu podataka u drugu. 248 00:11:10,970 --> 00:11:14,570 Nažalost, to nije tako jednostavno kao što sam možda svidjela. 249 00:11:14,570 --> 00:11:19,220 >> Ja ću se vratiti u plovcima 1, što je jednostavnije, 250 00:11:19,220 --> 00:11:22,830 jednostavno jedna s 0,0 dodana jedni. 251 00:11:22,830 --> 00:11:25,260 I baš kao brzi pijanka, neka mi ići naprijed i kompilirati 252 00:11:25,260 --> 00:11:27,670 to, da pliva 2 - 253 00:11:27,670 --> 00:11:30,300 Nažalost, to bi pliva 1. 254 00:11:30,300 --> 00:11:32,050 A sada pokrenuti pliva 1. 255 00:11:32,050 --> 00:11:34,810 I u dnu, primijetit da sam doista dobili 0,1. 256 00:11:34,810 --> 00:11:36,165 Dakle, problem riješen. 257 00:11:36,165 --> 00:11:37,280 >> Ali ne još. 258 00:11:37,280 --> 00:11:40,000 Ja sad idem da se malo znatiželjni, i ja ću se vratiti u moj 259 00:11:40,000 --> 00:11:41,620 printf izjava i recimo, znate što? 260 00:11:41,620 --> 00:11:44,090 Ja bih potvrditi da je ovaj stvarno jedna desetina. 261 00:11:44,090 --> 00:11:47,890 I ja ću htjeti vidjeti da, recimo, pet decimalnih mjesta. 262 00:11:47,890 --> 00:11:48,570 To nije problem. 263 00:11:48,570 --> 00:11:52,020 Mijenjam dvije do pet godina, Ja kompilirati s make. 264 00:11:52,020 --> 00:11:53,770 I repriza je kao lebdi jedan. 265 00:11:53,770 --> 00:11:54,990 Gledajući prilično dobro. 266 00:11:54,990 --> 00:11:58,570 Moje provjere Razum može završiti postoji, ali Idem malo više avanturistički. 267 00:11:58,570 --> 00:12:00,330 Ja neću promijeniti 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Želim vidjeti 10 znamenki nakon decimalno mjesto. 269 00:12:03,440 --> 00:12:09,060 >> I ja ću ići naprijed i kompilirati to i repriza lebdi jedan. 270 00:12:09,060 --> 00:12:13,060 Nekako sam žaljenje što je ovaj test dalje, jer mi matematika nije tako 271 00:12:13,060 --> 00:12:14,320 ispraviti više, čini se. 272 00:12:14,320 --> 00:12:15,630 Ali čekaj malo, možda to je samo slučajnost. 273 00:12:15,630 --> 00:12:17,810 Možda računalo djeluje malo čudno. 274 00:12:17,810 --> 00:12:21,810 Dopustite mi da ići naprijed i do 20 decimalne točke i ja uvjeriti da znam 275 00:12:21,810 --> 00:12:22,540 Kako to učiniti math. 276 00:12:22,540 --> 00:12:23,460 Znam kako programirati. 277 00:12:23,460 --> 00:12:26,960 Provjerite pliva 1, kompilirati i prokletstvo. 278 00:12:26,960 --> 00:12:31,110 To je stvarno, stvarno dobivanje daleko od oznake. 279 00:12:31,110 --> 00:12:32,490 >> Dakle, ono što se ovdje događa? 280 00:12:32,490 --> 00:12:36,050 Intuitivno, na temelju naših pretpostavki ranije o veličini vrste podataka, 281 00:12:36,050 --> 00:12:38,040 što mora biti ovdje događa ispod haube? 282 00:12:38,040 --> 00:12:39,290 Da? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Točno. 285 00:12:43,590 --> 00:12:46,480 Ako želite ovu veliku preciznost, te to je pakao od puno preciznosti - 286 00:12:46,480 --> 00:12:48,770 20 brojeva nakon decimalne točke. 287 00:12:48,770 --> 00:12:51,990 Vi nikako ne može predstavljati brojki, osim ako imate 288 00:12:51,990 --> 00:12:52,930 proizvoljna broj bitova. 289 00:12:52,930 --> 00:12:54,190 No, mi ne. 290 00:12:54,190 --> 00:12:57,200 Za plovak, imamo samo 32 bita. 291 00:12:57,200 --> 00:13:02,260 >> Tako da ako 32 bitova može se permuted u način - baš kao i naše ljude na, pozornici 292 00:13:02,260 --> 00:13:05,780 Ruke gore ili dolje - u konačnim brojem načina, postoji samo konačan broj 293 00:13:05,780 --> 00:13:08,640 realnih brojeva što može predstavljati s tim bitova. 294 00:13:08,640 --> 00:13:10,500 I tako na kraju računalo će se morati 295 00:13:10,500 --> 00:13:11,730 početi rezanje uglova. 296 00:13:11,730 --> 00:13:15,500 Računalo može sakriti one detalje od nas za malo vremena. 297 00:13:15,500 --> 00:13:18,880 Ali ako počnemo njuška po broju i gleda sve dalje i dalje, na 298 00:13:18,880 --> 00:13:23,220 prateći brojeve u cijelom broju, onda ćemo početi vidjeti da je 299 00:13:23,220 --> 00:13:26,480 zapravo približavanju Ideja za desetinu. 300 00:13:26,480 --> 00:13:29,860 >> I tako ispada, tragično, postoji beskonačan broj brojeva 301 00:13:29,860 --> 00:13:35,060 ne mogu predstavljati upravo u računalo, barem s konačnim 302 00:13:35,060 --> 00:13:38,030 broj bitova, konačni količina RAM-a. 303 00:13:38,030 --> 00:13:41,210 Sada, nažalost, to ponekad ima stvarne posljedice. 304 00:13:41,210 --> 00:13:45,980 Ako ljudi ne sasvim cijeniti to ili vrsta uzeti zdravo za gotovo činjenicu 305 00:13:45,980 --> 00:13:48,310 da je njihov računalo samo će učiniti ono što oni to reci da to i ne 306 00:13:48,310 --> 00:13:51,430 razumijem to temeljni zastupanje Detalji - 307 00:13:51,430 --> 00:13:55,290 koji, iskreno, u nekim jezicima skriven od korisnika, za razliku od C - 308 00:13:55,290 --> 00:13:56,500 neke loše stvari mogu dogoditi. 309 00:13:56,500 --> 00:13:58,650 >> A što sam mislio da ćemo to učiniti je uzeti jedan korak natrag. 310 00:13:58,650 --> 00:14:00,420 A to je oko osam minuta videa. 311 00:14:00,420 --> 00:14:04,200 To emitiran prije nekoliko godina, i to daje uvid u ono što se zapravo može ići 312 00:14:04,200 --> 00:14:09,290 krivu kada pod-Cijenim to vrste pojedinosti u vrlo isuviše 313 00:14:09,290 --> 00:14:10,080 stvarni svijet. 314 00:14:10,080 --> 00:14:12,965 Ako smo mogli dim svjetla za nekoliko minuta. 315 00:14:12,965 --> 00:14:14,360 >> ZVUČNI 1: Sada se vratiti u strojarnicu 316 00:14:14,360 --> 00:14:17,160 nepogode na Moderna čuda. 317 00:14:17,160 --> 00:14:18,680 >> Računala - 318 00:14:18,680 --> 00:14:21,340 svi smo došli prihvatiti Često problemi frustrirajuće 319 00:14:21,340 --> 00:14:23,170 da idu s njima. 320 00:14:23,170 --> 00:14:27,570 Bugs, virusa i softver propuste su mala cijena za plaćanje 321 00:14:27,570 --> 00:14:28,960 praktičnost. 322 00:14:28,960 --> 00:14:32,040 No, u high-tech i high-speed vojne i svemirski program 323 00:14:32,040 --> 00:14:38,650 aplikacije, najmanji problem s mogu povećavati u propast. 324 00:14:38,650 --> 00:14:44,480 >> 4. lipnja 1996, znanstvenici su spremni lansirati raketu Ariane 5 bespilotnu. 325 00:14:44,480 --> 00:14:48,700 To je prevozio znanstvenih satelita s ciljem određivanja točno kako 326 00:14:48,700 --> 00:14:53,250 Zemljino magnetsko polje u interakciji sa solarnim vjetrovima. 327 00:14:53,250 --> 00:14:57,540 Raketa je izgrađen za Europsko Svemirske agencije i odignuti od svojih 328 00:14:57,540 --> 00:14:59,906 objekt na obali od Francuskoj Gvajani. 329 00:14:59,906 --> 00:15:03,660 >> JACK GANSSLE: U oko 37 sekundi u leta, oni su prvi primijetili 330 00:15:03,660 --> 00:15:04,910 nešto je pošlo krivo. 331 00:15:04,910 --> 00:15:08,130 Mlaznice su zakretanjem u način oni stvarno ne treba. 332 00:15:08,130 --> 00:15:12,380 Oko 40 sekundi u letu, jasno je vozilo u nevolji. 333 00:15:12,380 --> 00:15:14,400 I to kad su se Odluka da ga uništi. 334 00:15:14,400 --> 00:15:18,520 Časnik rasponu sigurnosti, s ogromne hrabrosti, pritisnuo gumb, 335 00:15:18,520 --> 00:15:23,900 raznijeli raketu prije nego što je mogao postati opasnost za javnu sigurnost. 336 00:15:23,900 --> 00:15:27,810 >> ZVUČNI 1: Ovo je prvo putovanje od Ariane 5, i njegovo uništenje 337 00:15:27,810 --> 00:15:32,020 održana zbog nedostatka ugrađen u raketnom o softveru. 338 00:15:32,020 --> 00:15:33,980 >> JACK GANSSLE: Problem na Ariane je da je broj 339 00:15:33,980 --> 00:15:36,390 , koja je zahtijevala 64 bita izraziti. 340 00:15:36,390 --> 00:15:39,420 I oni su htjeli pretvoriti na 16-bitni broj. 341 00:15:39,420 --> 00:15:43,130 Pretpostavili su da je broj bio nikad će biti jako velika, da je većina 342 00:15:43,130 --> 00:15:46,810 one znamenke u 64-bitnoj Broj su nule. 343 00:15:46,810 --> 00:15:48,270 Oni su bili u krivu. 344 00:15:48,270 --> 00:15:51,380 >> ZVUČNI 1: nesposobnost jedne softvera Program prihvatiti kakav 345 00:15:51,380 --> 00:15:55,350 Broj generira jedan je u korijenu neuspjeha. 346 00:15:55,350 --> 00:15:59,970 Razvoj softvera postao vrlo skupi dio nove tehnologije. 347 00:15:59,970 --> 00:16:03,980 Ariane 4 raketna je bio vrlo uspješna, toliko o softveru 348 00:16:03,980 --> 00:16:07,480 stvoren za to je također koristi u Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP Coyle: Osnovni problem je da Ariane 5 je brži, 350 00:16:11,980 --> 00:16:13,720 ubrzan brži. 351 00:16:13,720 --> 00:16:17,250 A software je ne činili su to. 352 00:16:17,250 --> 00:16:20,770 >> ZVUČNI 1: uništavanje raketa bio ogroman financijski katastrofa, 353 00:16:20,770 --> 00:16:24,200 sve zbog jedne minute softvera pogreške. 354 00:16:24,200 --> 00:16:27,820 No, to nije bio prvi put da su podaci Problemi pretvorbe je udario moderni 355 00:16:27,820 --> 00:16:30,620 raketna tehnologija. 356 00:16:30,620 --> 00:16:34,480 >> JACK GANSSLE: Godine 1991, s početkom od prvog Zaljevskog rata, Patriot 357 00:16:34,480 --> 00:16:38,610 Projektil doživjeli slične vrste je problem broj pretvorbe. 358 00:16:38,610 --> 00:16:44,910 Kao rezultat toga, 28 Američki vojnici su poginuo je, a oko 100 ranjeno 359 00:16:44,910 --> 00:16:48,600 kad je Patriot, koja je trebala kako bi zaštitili protiv dolazni Scuds, 360 00:16:48,600 --> 00:16:51,630 nije uspio ispaliti raketu. 361 00:16:51,630 --> 00:16:55,110 >> ZVUČNI 1: Kad Irak napao Kuvajt i America pokrenula Pustinjska oluja 362 00:16:55,110 --> 00:17:00,570 Početkom 1991, Patriot raketne baterije bili su raspoređeni kako bi zaštitili Saudijsku Arabiju 363 00:17:00,570 --> 00:17:04,760 i Izrael iz iračkog Scud raketnih napada. 364 00:17:04,760 --> 00:17:09,720 Patriot je američki srednjeg dometa zemlja-zračni sustav proizveden od 365 00:17:09,720 --> 00:17:11,569 Tvrtka Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> Theodore POSTOL: veličina Patriot presretač sama je otprilike 367 00:17:16,410 --> 00:17:17,710 20-stopa. 368 00:17:17,710 --> 00:17:20,800 I to teži oko 2000 kilograma. 369 00:17:20,800 --> 00:17:22,940 I ona nosi bojevu glavu od oko - 370 00:17:22,940 --> 00:17:24,905 Mislim da je oko 150 £. 371 00:17:24,905 --> 00:17:31,030 I sama je bojna glava high eksploziva koji ima 372 00:17:31,030 --> 00:17:33,270 Fragmenti oko njega. 373 00:17:33,270 --> 00:17:37,490 Kućište bojnom glavom je dizajniran djelovati kao sačme. 374 00:17:37,490 --> 00:17:40,720 >> ZVUČNI 1: Projektili su provedena četiri po kontejneru i prevoze 375 00:17:40,720 --> 00:17:43,050 po polu prikolica. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP Coyle: Patriot proturaketni Sustav seže 377 00:17:47,490 --> 00:17:50,710 najmanje 20 godina. 378 00:17:50,710 --> 00:17:54,350 To je bio izvorno dizajniran kao rakete za protuzračnu obranu 379 00:17:54,350 --> 00:17:56,190 pucati dolje neprijateljske zrakoplove. 380 00:17:56,190 --> 00:18:02,490 U prvom Zaljevskom ratu, kada je taj rat došle, vojska htjela ga koristiti 381 00:18:02,490 --> 00:18:05,535 pucati dolje Scuds, a ne zrakoplovima. 382 00:18:05,535 --> 00:18:09,310 Irački zrakoplovstvo nije bilo toliko problema. 383 00:18:09,310 --> 00:18:12,450 No, vojska je zabrinut Scuds. 384 00:18:12,450 --> 00:18:15,950 I tako su pokušali nadograditi Patriot. 385 00:18:15,950 --> 00:18:18,750 >> ZVUČNI 1: prisluškivanje neprijateljski projektil putuju na mošt pet je 386 00:18:18,750 --> 00:18:20,890 će biti dovoljno izazovan. 387 00:18:20,890 --> 00:18:25,590 No, kada je potrčala u Patriot Usluga, vojska nije bila svjesna 388 00:18:25,590 --> 00:18:31,710 Irački modifikacija koje im je izradio Scuds gotovo nemoguće pogoditi. 389 00:18:31,710 --> 00:18:35,240 >> Theodore POSTOL: Što se dogodilo je Scuds koje su 390 00:18:35,240 --> 00:18:36,570 dolaze u bilo nestabilno. 391 00:18:36,570 --> 00:18:37,532 Oni su ljuljanje. 392 00:18:37,532 --> 00:18:43,220 Razlog za to je Iračana, u Kako bi dobili 600 km od 393 00:18:43,220 --> 00:18:47,530 300-kilometarska raspon projektila, uzeo težina od prednjeg bojne glave. 394 00:18:47,530 --> 00:18:49,290 Oni su bojne glave upaljač. 395 00:18:49,290 --> 00:18:53,110 Tako sada Patriot Pokušava doći na Scud. 396 00:18:53,110 --> 00:18:56,470 I većinu vremena, neodoljiv Većina vremena, to bi samo 397 00:18:56,470 --> 00:18:58,730 letjeti u kliziti. 398 00:18:58,730 --> 00:19:01,760 >> ZVUČNI 1: Nakon Patriot sustav operateri shvatili Patriot propustili 399 00:19:01,760 --> 00:19:06,690 njegov cilj, oni detonirao Patriotsa bojna glava kako bi se izbjegle moguće 400 00:19:06,690 --> 00:19:10,300 žrtava ako je dozvoljeno da padne na tlo. 401 00:19:10,300 --> 00:19:14,540 >> Theodore POSTOL: To je ono što većina ljudi vidjeli kao velike vatrene kugle na nebu 402 00:19:14,540 --> 00:19:20,350 i pogrešno kao presreće od Scud bojevih glava. 403 00:19:20,350 --> 00:19:23,320 >> ZVUČNI 1: Iako je u noćnom nebu Patriotsi čini se da je uspješno 404 00:19:23,320 --> 00:19:27,530 uništavanje Scuds, na Dhahran tamo može biti pogreška o njegovoj 405 00:19:27,530 --> 00:19:29,140 performansi. 406 00:19:29,140 --> 00:19:34,180 Tu, The Patriot-a radarski sustav izgubio pratili svaki put Scud i nikad 407 00:19:34,180 --> 00:19:36,380 pokrenut zbog softvera mana. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> To je Izraelci koji je prvi otkrio da je više sustav 410 00:19:42,700 --> 00:19:48,020 bio na, veći raskorak vrijeme dospio na sat 411 00:19:48,020 --> 00:19:50,470 ugraditi u sustav računalu. 412 00:19:50,470 --> 00:19:54,640 >> JACK GANSSLE: Oko dva tjedna prije Tragedija u Dhahran, Izraelci 413 00:19:54,640 --> 00:19:58,440 izvijestio da Ministarstvo obrane da je sustav gubila vrijeme. 414 00:19:58,440 --> 00:20:01,280 Nakon što je oko osam sati rada, su primijetili da je sustav 415 00:20:01,280 --> 00:20:03,530 postaje osjetno manje točna. 416 00:20:03,530 --> 00:20:07,710 Ministarstvo obrane je reagirao govori sve Patriot 417 00:20:07,710 --> 00:20:10,500 da ne ostavite sustave na dulje vrijeme. 418 00:20:10,500 --> 00:20:12,430 Oni nikada nije rekao ono što je dugo vremena bio. 419 00:20:12,430 --> 00:20:13,330 Osam sati? 420 00:20:13,330 --> 00:20:13,810 10 sata? 421 00:20:13,810 --> 00:20:14,990 1000 sati? 422 00:20:14,990 --> 00:20:17,150 Nitko nije znao. 423 00:20:17,150 --> 00:20:20,220 >> ZVUČNI 1: Patriot baterija stacionirani U vojarni u Dhahran 424 00:20:20,220 --> 00:20:24,660 i njegov manjkav unutarnji sat bio Na više od 100 sati u noći 425 00:20:24,660 --> 00:20:27,470 25. veljače. 426 00:20:27,470 --> 00:20:31,770 >> JACK GANSSLE: Ona prati vrijeme Točnost oko desetine sekunde. 427 00:20:31,770 --> 00:20:34,480 Sada, desetinu sekunde Zanimljivo broj, jer ne može biti 428 00:20:34,480 --> 00:20:39,940 izražena u binarnom točno, što znači ne može se izraziti na posve 429 00:20:39,940 --> 00:20:42,500 bilo moderno digitalno računalo. 430 00:20:42,500 --> 00:20:46,920 Teško je vjerovati, ali koristiti kao primjer. 431 00:20:46,920 --> 00:20:49,000 Idemo uzeti broj trećinu. 432 00:20:49,000 --> 00:20:53,150 Jedna trećina ne može izraziti u decimale točno. 433 00:20:53,150 --> 00:20:57,500 Trećina 0,333 ide na za beskonačnost. 434 00:20:57,500 --> 00:21:02,270 Nema načina da to učiniti s apsolutna točnost u decimale. 435 00:21:02,270 --> 00:21:05,370 To je točno ista vrsta problema koja se dogodila u Patriot. 436 00:21:05,370 --> 00:21:09,880 Sustav nije trčao, najgora pogreška postala. 437 00:21:09,880 --> 00:21:13,840 >> ZVUČNI 1: Nakon 100 sati rada, Pogreška je u to vrijeme bio samo 438 00:21:13,840 --> 00:21:16,140 oko trećinu sekunde. 439 00:21:16,140 --> 00:21:20,800 No, u pogledu cilja projektil putuju na mošt pet, što je rezultiralo 440 00:21:20,800 --> 00:21:24,410 Praćenje pogreška od preko 600 metara. 441 00:21:24,410 --> 00:21:27,670 Bilo bi fatalna pogreška za Vojnici u Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> Theodore POSTOL: Što se dogodilo Scud lansiranje je otkriven rano 443 00:21:33,450 --> 00:21:34,280 upozorenja sateliti. 444 00:21:34,280 --> 00:21:38,550 I oni su znali da dolazi Scud u smjeru. 445 00:21:38,550 --> 00:21:41,000 Nisu znali gdje je dolazio. 446 00:21:41,000 --> 00:21:43,900 >> ZVUČNI 1: To je sada do radara komponenta Patriot sustava 447 00:21:43,900 --> 00:21:48,910 braneći DHAHRAN pronaći i zadržati pratili od dolazni neprijateljskih projektila. 448 00:21:48,910 --> 00:21:50,580 >> JACK GANSSLE: radar bio je jako pametan. 449 00:21:50,580 --> 00:21:53,770 To bi zapravo praćenje položaja Scud, a zatim predvidjeti gdje je 450 00:21:53,770 --> 00:21:57,160 Vjerojatno će biti sljedeći put Radar šalje impuls out. 451 00:21:57,160 --> 00:21:58,870 To je bio pozvan u rasponu vrata. 452 00:21:58,870 --> 00:22:04,020 >> Theodore POSTOL: Onda odjednom Patriot odluči dovoljno vremena prošlo da ide 453 00:22:04,020 --> 00:22:09,420 natrag i provjerite sljedeći položaj za ovaj objekt otkriven, to ide natrag. 454 00:22:09,420 --> 00:22:14,450 Dakle, kada je otišao natrag u krivu mjesto, to onda ne vidi objekt. 455 00:22:14,450 --> 00:22:18,200 I to ne odluči da nema objekta, to je lažna otkrivanje i 456 00:22:18,200 --> 00:22:19,680 kapi trag. 457 00:22:19,680 --> 00:22:22,970 >> ZVUČNI 1: dolazni Scud nestali na radaru, a 458 00:22:22,970 --> 00:22:26,050 sekundi kasnije je udario u vojarnu. 459 00:22:26,050 --> 00:22:31,950 Scud je ubio 28, a bila je posljednja otkaz tijekom prvog Zaljevskog rata. 460 00:22:31,950 --> 00:22:37,700 Tragično, ažurirani softver stigao , na Dhahran sljedeći dan. 461 00:22:37,700 --> 00:22:41,800 Softver mana bila fiksna, zatvara jedno poglavlje u nevolji 462 00:22:41,800 --> 00:22:43,690 Povijest rakete Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot je zapravo skraćenica za etapne Array praćenja 465 00:22:50,710 --> 00:22:51,960 Presresti ciljnih. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: U redu, tako da trijezan primjer, kako bi bili sigurni. 468 00:23:00,840 --> 00:23:03,430 I na sreću, to niža razina bugovi nisu nešto što ćemo 469 00:23:03,430 --> 00:23:06,220 obično moraju poštovati, svakako Ne s nekim od naših 470 00:23:06,220 --> 00:23:07,360 Najraniji programa. 471 00:23:07,360 --> 00:23:10,450 Umjesto toga, većina bugova vi ćete Susret će biti logično u prirodi, 472 00:23:10,450 --> 00:23:12,900 sintaktička u prirodi pri čemu Kod jednostavno ne radi dobro. 473 00:23:12,900 --> 00:23:14,140 I znaš da je to prilično brzo. 474 00:23:14,140 --> 00:23:16,850 >> No, osobito kada dođemo u na kraju semestra, to će 475 00:23:16,850 --> 00:23:20,620 postaju sve više i više mogućnosti u Stvarno mislim teško o dizajnu 476 00:23:20,620 --> 00:23:22,960 svoje programe i temeljne prikaz 477 00:23:22,960 --> 00:23:24,520 postoje, također, od podataka. 478 00:23:24,520 --> 00:23:28,010 Na primjer, mi ćemo uvesti MySQL, što je popularna baza podataka motor 479 00:23:28,010 --> 00:23:30,850 koje možete koristiti s web stranice kako bi spremanje podataka na stražnjem kraju. 480 00:23:30,850 --> 00:23:34,630 I vi ćete morati početi odlučiti na kraj nastave ne samo ono što 481 00:23:34,630 --> 00:23:38,790 vrste podataka u skladu s tim se koriste , ali točno koliko bita za korištenje, 482 00:23:38,790 --> 00:23:42,740 da li ili ne želite pohraniti datume kao datume i vremena kao vremena, ali i 483 00:23:42,740 --> 00:23:46,890 stvari kao što su koliko je velika želite jedinstveni ID koji želite biti za, recimo, Korisnici 484 00:23:46,890 --> 00:23:47,680 u bazi podataka. 485 00:23:47,680 --> 00:23:51,210 >> U stvari, ako su neki od vas imali Facebook račune za neko vrijeme, 486 00:23:51,210 --> 00:23:53,680 a vi znate kako da biste dobili pristup na svoj korisnički ID - 487 00:23:53,680 --> 00:23:57,930 koji ponekad pokazuje u svoj profila za URL, osim ako ste se odlučili 488 00:23:57,930 --> 00:24:02,070 nadimak za URL, ili ako ste se koriste Facebook Graf API, 489 00:24:02,070 --> 00:24:05,510 javno dostupne API kojim ste Možete postaviti Facebook za sirovih podataka - 490 00:24:05,510 --> 00:24:07,580 možete vidjeti što vaš numerički ID je. 491 00:24:07,580 --> 00:24:10,880 I prije nekoliko godina, Facebook suštini morali promijeniti u korištenju 492 00:24:10,880 --> 00:24:15,980 Ekvivalent Ints korištenja dugo dugo, jer tijekom vremena kao korisnici dolaze 493 00:24:15,980 --> 00:24:19,780 i otići i stvoriti puno računa i lažni računi, čak i oni vrlo lako 494 00:24:19,780 --> 00:24:24,630 su mogli iscrpiti nešto poput 4 milijardi moguća vrijednost kao int. 495 00:24:24,630 --> 00:24:28,340 >> Dakle, više o tim vrstama pitanja niz cestu, kao dobro. 496 00:24:28,340 --> 00:24:30,750 U redu, tako da je casting. 497 00:24:30,750 --> 00:24:31,670 To je nepreciznost. 498 00:24:31,670 --> 00:24:32,730 Nekoliko brzih najave. 499 00:24:32,730 --> 00:24:35,710 Dakle sekcije službeno počinje ovaj dolazak Nedjelja, ponedjeljak, utorak. 500 00:24:35,710 --> 00:24:39,080 Vi ćete čuti putem e-maila kasnije ovaj tjedan kako bi svoj dio zadatka. 501 00:24:39,080 --> 00:24:42,570 A vi ćete se također ovdje u tom trenutku kako promijeniti svoj odjeljku ako 502 00:24:42,570 --> 00:24:45,660 Raspored je sada promijenio ili vaš udobnost na razini je sada promijenila. 503 00:24:45,660 --> 00:24:49,380 U međuvremenu P-set jedan i jedan su hakerski zbog ovog četvrtka s opcijom 504 00:24:49,380 --> 00:24:52,450 produljiti taj rok po Specifikacije do petka 505 00:24:52,450 --> 00:24:53,830 u tipičnom način. 506 00:24:53,830 --> 00:24:57,500 >> Shvatite da je uključen s problemom set podaci su upute o 507 00:24:57,500 --> 00:25:02,770 kako koristiti CS50 aparat, da, kao i neke specifične alate CS50 508 00:25:02,770 --> 00:25:06,540 kao i stilu 50, koje mogu pružiti Vam povratne informacije o dinamički 509 00:25:06,540 --> 00:25:10,230 Kvaliteta vašeg koda stila i check 50, koji može vam pružiti 510 00:25:10,230 --> 00:25:13,160 dinamična povratne informacije kako bi vaše kodeksa korektnosti. 511 00:25:13,160 --> 00:25:16,850 Oprosti da smo još uvijek daska iz nekoliko Kinks s čekom 50. 512 00:25:16,850 --> 00:25:21,490 Nekoliko svojih kolega koji su na mrtvoj točki oko 04:00 u petak navečer kada je 513 00:25:21,490 --> 00:25:25,130 spec. porasli su primijetili od tada nekoliko bugova koji se bavimo 514 00:25:25,130 --> 00:25:29,010 putem, i isprike za svakoga tko doživjela nepotrebne frustracije. 515 00:25:29,010 --> 00:25:30,340 Krivnja je moja. 516 00:25:30,340 --> 00:25:34,080 No, mi ćemo pratiti na CS50 razgovarati kad se to riješi. 517 00:25:34,080 --> 00:25:35,700 >> Dakle riječ o ocjenama samih. 518 00:25:35,700 --> 00:25:38,990 Dakle, to će biti tjedan ili dva prije nego što vas početi da biste dobili povratnu informaciju o problemima setovima 519 00:25:38,990 --> 00:25:40,640 zato što još uvijek nemaju demonstrator. 520 00:25:40,640 --> 00:25:44,510 Pa čak i tada, počet ćemo procijeniti C Problem postavlja prije nego što je 521 00:25:44,510 --> 00:25:46,970 vratiti i procijeniti ispočetka tako da ste dobili više relevantnih 522 00:25:46,970 --> 00:25:48,150 povratne informacije brže. 523 00:25:48,150 --> 00:25:51,870 Ali općenito po nastavnom planu, CS50 Problem setovi su ocijenili zajedno 524 00:25:51,870 --> 00:25:53,580 nakon četiri osi - 525 00:25:53,580 --> 00:25:55,760 Opseg, korektnost, dizajn i stil. 526 00:25:55,760 --> 00:25:59,210 >> Područje će biti broj obično između nule i pet koji 527 00:25:59,210 --> 00:26:01,830 bilježi koliko komad koji ste malo off. 528 00:26:01,830 --> 00:26:03,750 Obično, želite da to bude pet. 529 00:26:03,750 --> 00:26:05,300 Vi barem pokušao sve. 530 00:26:05,300 --> 00:26:09,330 I primijetiti da je multiplikativni faktor tako da radi samo dio 531 00:26:09,330 --> 00:26:12,520 Problem set nije najbolja strategija. 532 00:26:12,520 --> 00:26:15,610 >> U međuvremenu, više očito je Važnost ispravnosti - 533 00:26:15,610 --> 00:26:18,620 Samo je vaš program ispravan s poštovati u specifikacijama? 534 00:26:18,620 --> 00:26:21,510 Ovo je vagan namjerno više jako od druge dvije osi po 535 00:26:21,510 --> 00:26:24,450 čimbenik tri, jer smo prepoznali koji obično idete potrošiti 536 00:26:24,450 --> 00:26:28,600 Mnogo više vremena jurnjava dolje neke bugove, uzimajući svoj kod na posao, onda 537 00:26:28,600 --> 00:26:31,540 su ga uvlačenje i odabirom odgovarajuća imena varijablama i 538 00:26:31,540 --> 00:26:33,800 kao što su, koji se nalazi na drugom kraju spektra stilu. 539 00:26:33,800 --> 00:26:36,160 >> To ne znači da stil nije važne, a mi ćemo ga propovijeda tijekom 540 00:26:36,160 --> 00:26:37,920 Vrijeme i na predavanjima iu dijelovima. 541 00:26:37,920 --> 00:26:40,520 Ime odnosi na estetiku vašeg koda. 542 00:26:40,520 --> 00:26:43,980 Jeste li dobro odabrao-ime varijable da su kratke, ali nešto 543 00:26:43,980 --> 00:26:44,680 opisno? 544 00:26:44,680 --> 00:26:47,840 Je li vaš broj razvedena kao što ste vidjeli u Predavanje i na način sukladan 545 00:26:47,840 --> 00:26:49,070 sa stilom 50? 546 00:26:49,070 --> 00:26:51,220 >> Na kraju je dizajn pravu ovdje u sredini. 547 00:26:51,220 --> 00:26:54,090 Dizajn je jedan teže staviti prst na jer to je mnogo više 548 00:26:54,090 --> 00:26:55,000 subjektivno. 549 00:26:55,000 --> 00:26:58,610 No, to je možda i najvažnije od su tri sjekire u smislu pedagoške 550 00:26:58,610 --> 00:27:02,050 vrijednost tijekom vremena i da će to biti nastavnog kolegama je prilika da 551 00:27:02,050 --> 00:27:04,110 Vam pružiti kvalitativnu poruci. 552 00:27:04,110 --> 00:27:08,100 Doista, u CS50 iako imamo ove formule i rezultati, na kraju 553 00:27:08,100 --> 00:27:11,350 dana su vrlo promišljeno vrlo male kante - točke vrijednosti 554 00:27:11,350 --> 00:27:13,460 između nula i tri i nula i pet. 555 00:27:13,460 --> 00:27:17,800 Mi ne pokušati izvući vrlo grubo linije između problematičnih skupova ili između 556 00:27:17,800 --> 00:27:21,490 studenata, a već se usredotočite koliko možemo o kvalitativnim, običan rukopis 557 00:27:21,490 --> 00:27:25,490 feedback, bilo upisali ili usmeno na vašem demonstrator, 558 00:27:25,490 --> 00:27:27,050 ćete se dobro znate. 559 00:27:27,050 --> 00:27:32,340 >> Ali općenito, to su utezi da se razne sjekire će imati. 560 00:27:32,340 --> 00:27:35,480 U međuvremenu, također, to je vrijedno imajući u pamet da se ne bi trebao pretpostaviti da 561 00:27:35,480 --> 00:27:38,870 tri od pet je 60%, a dakle otprilike nedostatku. 562 00:27:38,870 --> 00:27:41,410 Tri namjerno značilo da se vrsta nasred ceste dobre. 563 00:27:41,410 --> 00:27:43,480 Ako ste uzimajući u trojke početku semestra, koja je 564 00:27:43,480 --> 00:27:46,340 doduše znači biti dobar mjesto za početak. 565 00:27:46,340 --> 00:27:50,510 Ako ste uzimajući dvojke, sajmove, postoji definitivno neki posao platiti malo 566 00:27:50,510 --> 00:27:53,250 više pozornosti, iskoristiti sekcija i uredovnog vremena. 567 00:27:53,250 --> 00:27:54,590 >> Ako ste dobivanje četvorke i Fives, super. 568 00:27:54,590 --> 00:27:57,430 Ali stvarno, nadamo se da ćemo vidjeti putanje među učenicima - vrlo 569 00:27:57,430 --> 00:28:00,575 individualizirani po učeniku, ali polazeći semestar ovdje u svojevrsno 570 00:28:00,575 --> 00:28:04,100 dva do tri raspona, ali završava Ovdje se u četiri-pet raspona. 571 00:28:04,100 --> 00:28:05,440 To je ono što mi tražimo. 572 00:28:05,440 --> 00:28:09,590 A mi imajte na umu da deltu pokazuju da između nule i tjedan tjedan 573 00:28:09,590 --> 00:28:12,170 12 kad radim ocjene. 574 00:28:12,170 --> 00:28:16,380 Nije bitno za nas apsolutno kako da sajam na početku ako vaš 575 00:28:16,380 --> 00:28:19,330 Putanja je doista prema gore i jaka. 576 00:28:19,330 --> 00:28:24,000 >> Akademska čestitost - pa neka me staviti na moj ozbiljniji glas za samo trenutak. 577 00:28:24,000 --> 00:28:28,510 Dakle, ovaj tečaj ima razlike slanje više studenata nego bilo koji drugi 578 00:28:28,510 --> 00:28:30,950 u povijesti na oglasnoj ploči, vjerujem. 579 00:28:30,950 --> 00:28:34,220 Imamo neku vrstu izgubio računati na to točka koliko često se to dogodi. 580 00:28:34,220 --> 00:28:37,090 I to ne zato što učenici u 50 su više od njihove nepošteno 581 00:28:37,090 --> 00:28:38,690 kolege drugdje. 582 00:28:38,690 --> 00:28:42,800 Ali shvatite, također, da smo vrlo dobri na otkrivanje takve stvari. 583 00:28:42,800 --> 00:28:45,920 >> I to je prednost da informatike klasa ima u tome što smo 584 00:28:45,920 --> 00:28:49,110 mogu, a mi ne usporediti sve studente Problem postavlja par-mudar protiv svakog 585 00:28:49,110 --> 00:28:51,470 drugima, ne samo u ovoj godini ali sve prethodne godine. 586 00:28:51,470 --> 00:28:55,080 Mi imamo sposobnost, kao i studenata u klase, na Google i naći kod 587 00:28:55,080 --> 00:28:57,440 na stranicama poput GitHub i foruma za diskusiju. 588 00:28:57,440 --> 00:29:00,840 Postoji apsolutno rješenja za CS50-a p-postavlja pluta oko tamo. 589 00:29:00,840 --> 00:29:02,710 No, ako ih možete pronaći, možemo ih naći. 590 00:29:02,710 --> 00:29:07,130 A sve to je jako puno automatiziran i jednostavno i tužno za nas pronaći. 591 00:29:07,130 --> 00:29:10,990 >> No, želim naglasiti, također, da Naravno akademski poštenje politika 592 00:29:10,990 --> 00:29:13,960 jako puno značilo da se jako puno Nasuprot tom duhu. 593 00:29:13,960 --> 00:29:17,506 Doista, ove godine smo preformulirati stvari u nastavni plan i program kako bi se to, dot 594 00:29:17,506 --> 00:29:19,790 dot dot, s više detalja u programu. 595 00:29:19,790 --> 00:29:22,860 Ali Zajednička tema u tijeku Stvarno je biti razumna. 596 00:29:22,860 --> 00:29:26,160 Prepoznajemo da postoji značajna Iznos pedagoške 597 00:29:26,160 --> 00:29:30,550 Vrijednost je suradnjom, u određenoj mjeri, s kolegama, pri čemu se 598 00:29:30,550 --> 00:29:33,700 dvije ili tri ili više su stoji na bijelom brodu 599 00:29:33,700 --> 00:29:35,670 Alatom Whiteboarding, da se tako Govorimo, svoje ideje - 600 00:29:35,670 --> 00:29:39,480 pisanje pseudocode na slikama, dijagrame onoga što bi trebao biti Mario, ako 601 00:29:39,480 --> 00:29:41,350 da napiše to prva u pseudocode. 602 00:29:41,350 --> 00:29:43,240 Što bi pohlepni algoritam - 603 00:29:43,240 --> 00:29:46,100 Kako bi se ponašaju po Problem postavlja jedan? 604 00:29:46,100 --> 00:29:50,440 >> I tako shvatiti da je ponašanje da potičemo vrlo 605 00:29:50,440 --> 00:29:51,470 koliko uz one linije. 606 00:29:51,470 --> 00:29:53,890 I u nastavnom planu, vidjet ćete cijela hrpa metaka u 607 00:29:53,890 --> 00:29:57,740 razumne kategorija i nije razumno kategorija koja nam pomaže pomoći 608 00:29:57,740 --> 00:30:00,740 napatanja svoj um oko gdje smo crtam tu liniju. 609 00:30:00,740 --> 00:30:04,340 I općenito, pristojan pravilo je da, ako vam se bori za rješavanje 610 00:30:04,340 --> 00:30:07,990 neki bug i vaš prijatelj ili kolega sjedi pored vas, to je 611 00:30:07,990 --> 00:30:11,530 razumno za vas da mu pokazati ili nju vaš broj i reći, hej, možete li mi pomoći 612 00:30:11,530 --> 00:30:13,700 mene shvatiti što se događa ovdje nije u redu? 613 00:30:13,700 --> 00:30:17,110 >> Mi obično ne prihvate Suprotna strana. 614 00:30:17,110 --> 00:30:20,730 To nije točan odgovor za svoje prijatelj ili kolega ovdje reći, oh, 615 00:30:20,730 --> 00:30:22,510 samo pogled na moj lik i je iz toga. 616 00:30:22,510 --> 00:30:24,400 To je vrsta nerazumno. 617 00:30:24,400 --> 00:30:27,750 Ali što je netko drugi, mozga, drugi par očiju, pogledajte 618 00:30:27,750 --> 00:30:31,620 zaslon ili pogled na kodu i reći, jeste li sigurni da želite 619 00:30:31,620 --> 00:30:32,760 imati petlju ovdje? 620 00:30:32,760 --> 00:30:34,800 Ili jeste li sigurni da želite da zarez ovdje? 621 00:30:34,800 --> 00:30:37,090 Ili Oh, da je to poruka o pogrešci znači. 622 00:30:37,090 --> 00:30:39,580 Oni su vrlo razumne i ohrabrivala ponašanja. 623 00:30:39,580 --> 00:30:44,010 >> Slučajevi na koje sam aludirao na ranije svode se kada su učenici 624 00:30:44,010 --> 00:30:47,350 kasno u noć, što loše prosudbe Odluke i slanje e svoj kod kako bi 625 00:30:47,350 --> 00:30:50,130 netko drugi ili jednostavno govoreći, Ovdje, to je u Dropbox ili 626 00:30:50,130 --> 00:30:51,610 Googling kasno u noć. 627 00:30:51,610 --> 00:30:54,880 I tako ja bi potaknuti i preklinjem vas, Ako imate one neizbježno 628 00:30:54,880 --> 00:30:58,450 trenuci stresa, ti si odbacujući ga protiv roka, nemate kasno 629 00:30:58,450 --> 00:31:01,490 Dan pošto je već u petak u koji točka, e-tečaja u glavu ili 630 00:31:01,490 --> 00:31:02,330 osobno izravno. 631 00:31:02,330 --> 00:31:04,790 Recimo, slušaj, ja sam na mom nego bit ovdje. 632 00:31:04,790 --> 00:31:06,660 Idemo razgovarati i to shvatiti. 633 00:31:06,660 --> 00:31:10,400 Posezanja za web ili neki drugi ne razumno ponašanje nikada ne 634 00:31:10,400 --> 00:31:13,070 rješenje, a previše od vašeg kolege nisu više ovdje na 635 00:31:13,070 --> 00:31:15,150 kampus zbog tog lošeg presude. 636 00:31:15,150 --> 00:31:17,840 No, to je vrlo lako zaobići tu liniju. 637 00:31:17,840 --> 00:31:22,950 >> I ovdje je mala slika navijati što se iz Reddit, tako da sada 638 00:31:22,950 --> 00:31:25,720 sve će biti u redu. 639 00:31:25,720 --> 00:31:30,210 >> Tako brzo rekapitulacija, a zatim, gdje smo stali. 640 00:31:30,210 --> 00:31:33,690 Tako je prošlog tjedna, podsjetiti da uvodimo uvjetima, a ne u nule 641 00:31:33,690 --> 00:31:34,880 ali u C ovaj put. 642 00:31:34,880 --> 00:31:38,300 A tu je neki novi sintakse, ali stvarno nema novih ideja po sebi. 643 00:31:38,300 --> 00:31:42,630 Imali smo Boolean izraza koji smo mogli ili zajedno s dvije vertikalne 644 00:31:42,630 --> 00:31:46,490 barovi ili i zajedno s dvojicom znakove za, rekavši da su i lijeva 645 00:31:46,490 --> 00:31:49,990 i pravo mora biti istina za to izvršiti. 646 00:31:49,990 --> 00:31:53,150 Tada smo imali sklopke, koje smo gledali , na kratko, ali ja predlažem su stvarno 647 00:31:53,150 --> 00:31:56,830 samo drugačije sintaksa za postizanje Ista vrsta ekipu ako znate u 648 00:31:56,830 --> 00:31:59,270 unaprijed što vaši slučajevi će biti. 649 00:31:59,270 --> 00:32:00,160 >> Mi smo gledali na petlji. 650 00:32:00,160 --> 00:32:03,340 For petlje je možda i najčešći, ili barem jedan da ljudi 651 00:32:03,340 --> 00:32:05,330 obično posežu za instinktivno. 652 00:32:05,330 --> 00:32:08,240 Iako to izgleda pomalo zagonetan, vidjet ćete mnogo, mnogo primjera ove 653 00:32:08,240 --> 00:32:11,590 prije dugo, kao što imate Već krajem prošlog tjedna. 654 00:32:11,590 --> 00:32:14,280 Dok petlje može na sličan postigla istu stvar. 655 00:32:14,280 --> 00:32:17,550 No, ako želite učiniti bilo incrementation ili ažuriranje 656 00:32:17,550 --> 00:32:20,230 varijable vrijednosti, morate to učiniti više nego ručno 657 00:32:20,230 --> 00:32:22,440 za petlje prije nego što dopušta. 658 00:32:22,440 --> 00:32:25,310 A tu je i do-while petlje, što nam omogućuje da učinite nešto po 659 00:32:25,310 --> 00:32:28,460 barem jednom, dok nešto ostalo je istina. 660 00:32:28,460 --> 00:32:31,550 A ovo je posebno dobro za programi ili za igre gdje želite 661 00:32:31,550 --> 00:32:33,810 za brz korisnik za nešto barem jednom. 662 00:32:33,810 --> 00:32:37,110 A onda, ako on ili ona ne surađuje, možda želite to učiniti 663 00:32:37,110 --> 00:32:38,420 opet i opet. 664 00:32:38,420 --> 00:32:41,270 >> S varijablama, u međuvremenu, imali smo linije koda kao što je ovaj, što bi moglo 665 00:32:41,270 --> 00:32:41,950 se dvije linije. 666 00:32:41,950 --> 00:32:44,830 Ti bi mogao izjaviti int zove suprotnom, zarez. 667 00:32:44,830 --> 00:32:47,660 Ili ste jednostavno mogu utvrditi i to definirati, da se tako izrazim. 668 00:32:47,660 --> 00:32:49,950 Dajte mu vrijednost u isto vrijeme. 669 00:32:49,950 --> 00:32:51,890 >> I onda na kraju, razgovarali smo o funkcijama. 670 00:32:51,890 --> 00:32:54,270 I ovo je lijep primjer u Osjećaj da ilustrira 671 00:32:54,270 --> 00:32:55,840 dvije vrste funkcija. 672 00:32:55,840 --> 00:32:59,030 Jedan je GetString (), što, opet, dobiva se niz od korisnika. 673 00:32:59,030 --> 00:33:02,040 Ali GetString () je vrsta zanimljiva, tako daleko smo ga koristili, 674 00:33:02,040 --> 00:33:05,620 jer smo uvijek ga koristiti s nešto na lijevoj strani 675 00:33:05,620 --> 00:33:06,600 znak jednakosti. 676 00:33:06,600 --> 00:33:09,830 To će reći da GetString () vraća vrijednost. 677 00:33:09,830 --> 00:33:11,970 Ona se vraća, naravno, niz. 678 00:33:11,970 --> 00:33:15,130 I onda na lijevoj strani, mi smo jednostavno štedi taj string unutar 679 00:33:15,130 --> 00:33:16,580 varijabla zove ime. 680 00:33:16,580 --> 00:33:21,100 >> Ovo je drugačija, u smislu, od printf jer printf, barem u našoj 681 00:33:21,100 --> 00:33:23,540 Poveznice ovdje, ne vrati ništa. 682 00:33:23,540 --> 00:33:24,960 Kao na stranu, to ne vraća nešto. 683 00:33:24,960 --> 00:33:26,380 Mi jednostavno ne zanima što je to. 684 00:33:26,380 --> 00:33:29,090 No, ona ima ono što je zove nuspojava. 685 00:33:29,090 --> 00:33:31,840 A što je to nuspojava u svakoj Slučaj smo vidjeli do sada? 686 00:33:31,840 --> 00:33:34,720 Što printf čini? 687 00:33:34,720 --> 00:33:37,780 Ona ispisuje nešto na ekranu, Prikazuje tekst ili brojeve ili nešto 688 00:33:37,780 --> 00:33:38,380 na zaslonu. 689 00:33:38,380 --> 00:33:41,170 A to je samo smatra nuspojava jer to nije stvarno hendikep 690 00:33:41,170 --> 00:33:41,900 ga natrag k meni. 691 00:33:41,900 --> 00:33:44,770 To nije odgovor unutar crna kutija koju sam tada može 692 00:33:44,770 --> 00:33:46,130 doći u i iskoristite. 693 00:33:46,130 --> 00:33:49,160 To samo to radi na vlastitu, mnogo kao što Colton bio uključen u to 694 00:33:49,160 --> 00:33:52,560 crna kutija prošlog tjedna, a on nekako magično je crtanje na ploči 695 00:33:52,560 --> 00:33:54,500 bez mene stvarno uključen. 696 00:33:54,500 --> 00:33:55,560 To bi bilo nuspojava. 697 00:33:55,560 --> 00:33:59,100 Ali, ako sam zapravo morao doći natrag u ovdje i reći, oh, ovdje je string 698 00:33:59,100 --> 00:34:02,040 od korisnika, kako bi se se vrijednost povratak. 699 00:34:02,040 --> 00:34:05,650 >> I do sada smo samo sam se funkcije da su drugi ljudi napisali. 700 00:34:05,650 --> 00:34:09,219 No, mi zapravo može učiniti te vrste stvari sebe. 701 00:34:09,219 --> 00:34:12,730 Dakle, ja ću ići u CS50 aparata ponovno. 702 00:34:12,730 --> 00:34:16,020 Dopustite mi zatvorili karticu da mi je otvaranje maloprije. 703 00:34:16,020 --> 00:34:18,530 I neka mi ići naprijed i stvoriti novu datoteku. 704 00:34:18,530 --> 00:34:22,400 I ja ću ići naprijed i nazovite ovo jedan positive.c. 705 00:34:22,400 --> 00:34:24,770 Dakle, želim napraviti nešto s pozitivni brojevi. 706 00:34:24,770 --> 00:34:27,219 Dakle, ja ću ići naprijed i učiniti int - 707 00:34:27,219 --> 00:34:28,000 žao - 708 00:34:28,000 --> 00:34:31,840 # Uključiti. 709 00:34:31,840 --> 00:34:34,280 Nemojmo da je ista grešku kao i prije. 710 00:34:34,280 --> 00:34:40,020 Int main (void), otvoren kovrčava Brace, zatvorena kovrčavu braće. 711 00:34:40,020 --> 00:34:41,639 >> A sada želim učiniti sljedeće. 712 00:34:41,639 --> 00:34:44,600 Želim napisati program koji inzistira da korisnik daje 713 00:34:44,600 --> 00:34:46,770 ja pozitivni cijeli broj. 714 00:34:46,770 --> 00:34:50,969 Dakle, ne postoji funkcija GetPositiveInt u CS50 knjižnici. 715 00:34:50,969 --> 00:34:52,610 Postoji samo GetInt (). 716 00:34:52,610 --> 00:34:55,790 Ali to je u redu jer imam konstrukti s kojima sam može izreći 717 00:34:55,790 --> 00:34:59,360 malo ograničenje na toj vrijednosti. 718 00:34:59,360 --> 00:35:00,990 Ja mogao učiniti ovako nešto. 719 00:35:00,990 --> 00:35:02,780 >> Dakle, int n - 720 00:35:02,780 --> 00:35:04,920 a ako ste tipkao, samo shvatiti Ja ću se vratiti i 721 00:35:04,920 --> 00:35:06,430 promijeniti neke stvari u ovom trenutku - 722 00:35:06,430 --> 00:35:09,960 tako da int n jednak GetInt (). 723 00:35:09,960 --> 00:35:11,780 I to će staviti int unutar n. 724 00:35:11,780 --> 00:35:13,830 I neka mi se više opisno. 725 00:35:13,830 --> 00:35:23,270 Dopustite mi reći nešto poput zahtijevam da Možete li mi dati pozitivan cijeli broj. 726 00:35:23,270 --> 00:35:23,550 >> U redu. 727 00:35:23,550 --> 00:35:25,250 Dakle, samo malo upute. 728 00:35:25,250 --> 00:35:26,270 I sad, što da radim? 729 00:35:26,270 --> 00:35:29,840 Pa, ja već znam iz moje jednostavne uvjetima ili grane, baš kao što sam 730 00:35:29,840 --> 00:35:36,100 imali u nule, što sam mogao reći nešto kao i ako je n manji ili jednak 731 00:35:36,100 --> 00:35:44,460 nuli, onda želim učiniti nešto kao što su, da nije pozitivno. 732 00:35:44,460 --> 00:35:45,560 A onda sam mogao učiniti - 733 00:35:45,560 --> 00:35:47,310 U redu, ali ja stvarno želim da se taj int. 734 00:35:47,310 --> 00:35:52,020 Tako sam mogao ići i do ovdje i što sam mogao vrsta kopije to i ove alineje. 735 00:35:52,020 --> 00:35:52,570 A onda, u redu. 736 00:35:52,570 --> 00:35:56,990 Dakle, ako je n manji ili jednaka nuli to učinili. 737 00:35:56,990 --> 00:35:58,900 >> Sada, što ako korisnik ne surađuje? 738 00:35:58,900 --> 00:36:01,560 Pa, onda ću se posuditi ovo ovdje. 739 00:36:01,560 --> 00:36:03,130 A onda idem ovdje i ovdje i ovdje. 740 00:36:03,130 --> 00:36:06,420 Dakle, jasno je kako je rješenje, zar ne? 741 00:36:06,420 --> 00:36:07,810 Budući da nema kraja na vidiku. 742 00:36:07,810 --> 00:36:13,100 Ako želim da zahtijevaju da korisnik daje ja pozitivni cijeli broj, ja mogu 743 00:36:13,100 --> 00:36:14,150 zapravo dobiti int. 744 00:36:14,150 --> 00:36:15,620 I onda možete provjeriti za taj int. 745 00:36:15,620 --> 00:36:18,570 Ali onda želim ga ponovno provjeriti i ga ponovno provjeriti i ponovno provjeriti. 746 00:36:18,570 --> 00:36:21,680 Tako je očito, što je bolje tvorevinu da se pomoću ovdje? 747 00:36:21,680 --> 00:36:22,840 U redu, neka vrsta petlje. 748 00:36:22,840 --> 00:36:25,430 >> Tako ću se riješiti gotovo sve ovo. 749 00:36:25,430 --> 00:36:27,320 I želim da se ovo int barem jednom. 750 00:36:27,320 --> 00:36:28,890 Pa ću reći ne - 751 00:36:28,890 --> 00:36:32,110 i ja ću se vratiti dok je u samo nekoliko trenutaka - 752 00:36:32,110 --> 00:36:33,050 sad, da li što? 753 00:36:33,050 --> 00:36:35,860 Ja ću učiniti int n dobiva GetInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Dakle, to je prilično dobro. 756 00:36:37,250 --> 00:36:39,750 I sad kako to često čine Želim to učiniti? 757 00:36:39,750 --> 00:36:45,770 >> Dopustite mi da stavi printf unutar petlje tako da mogu zahtijevati ponovno i ponovno, 758 00:36:45,770 --> 00:36:46,740 ako treba. 759 00:36:46,740 --> 00:36:49,720 A što ja želim ovo dok je uvjet činiti? 760 00:36:49,720 --> 00:36:53,870 Želim zadržati to dok ono što je slučaj? 761 00:36:53,870 --> 00:36:54,125 Da. 762 00:36:54,125 --> 00:36:55,390 N je manja od ili jednaka nuli. 763 00:36:55,390 --> 00:36:58,180 Tako je već, mi smo značajno očistiti ovaj kod gore. 764 00:36:58,180 --> 00:37:00,700 Mi smo posudili vrlo jednostavan tvorevina - do-while petlje. 765 00:37:00,700 --> 00:37:04,690 Ja sam samo ukrao važne linije koda koji sam počeo kopirati i 766 00:37:04,690 --> 00:37:05,960 lijepljenje, što nije bilo pametno. 767 00:37:05,960 --> 00:37:09,790 I sad ću zapravo zalijepite to ovdje i samo to učiniti jednom. 768 00:37:09,790 --> 00:37:12,990 >> I sad ono što želim učiniti, na samom kraju ovog programa? 769 00:37:12,990 --> 00:37:16,810 Samo ću reći nešto jednostavno sviđa, hvala - i 770 00:37:16,810 --> 00:37:18,980 Učinit ću% i za int - 771 00:37:18,980 --> 00:37:23,270 backslash n, zarez, a zatim priključite n, točka i zarez. 772 00:37:23,270 --> 00:37:23,910 >> U redu. 773 00:37:23,910 --> 00:37:27,290 Tako ćemo vidjeti što će se sada dogoditi kad sam pokrenuti ovaj program. 774 00:37:27,290 --> 00:37:30,600 Ja ću ići naprijed i ne bi pozitivno. 775 00:37:30,600 --> 00:37:30,880 K vragu. 776 00:37:30,880 --> 00:37:31,600 Nekoliko pogrešaka. 777 00:37:31,600 --> 00:37:32,960 Pa neka mi pomicanje natrag do prvog. 778 00:37:32,960 --> 00:37:34,020 Nemojte raditi kroz njih unatrag. 779 00:37:34,020 --> 00:37:37,000 Rad kroz njih odozgo prema dolje neka ti ne prelijevaju i jedini 780 00:37:37,000 --> 00:37:38,630 jedna stvar biti u krivu. 781 00:37:38,630 --> 00:37:42,532 Implicitni izjava o Funkcija GetInt (). 782 00:37:42,532 --> 00:37:43,020 Da. 783 00:37:43,020 --> 00:37:44,420 Dakle, to nije bilo dovoljno. 784 00:37:44,420 --> 00:37:46,760 Nekako sam napravio istu grešku, ali Malo drugačije ovaj put. 785 00:37:46,760 --> 00:37:51,940 Moram se ne uključuju samo stdio.h, ali Također cs50.h, koji uključuje 786 00:37:51,940 --> 00:37:56,770 takozvane izjave dobili int, koji naučiti aparata, ili uči 787 00:37:56,770 --> 00:37:58,760 C što GetInt () je. 788 00:37:58,760 --> 00:37:59,550 >> Pa neka mi snimiti. 789 00:37:59,550 --> 00:38:02,040 Ja ću ignorirati druge pogreške jer ću se nadati da su oni 790 00:38:02,040 --> 00:38:05,210 nekako se odnose na pogreške Već sam fiksni. 791 00:38:05,210 --> 00:38:08,710 Zato mi dopustite da ići naprijed i kompilirati s napraviti pozitivne, Enter. 792 00:38:08,710 --> 00:38:09,020 K vragu. 793 00:38:09,020 --> 00:38:09,985 Tri pogreške, uvijek. 794 00:38:09,985 --> 00:38:12,650 Dopustite mi dođite do prvog. 795 00:38:12,650 --> 00:38:14,320 Neiskorišteni varijabla n. 796 00:38:14,320 --> 00:38:15,850 Nismo to vidjeli. 797 00:38:15,850 --> 00:38:17,200 A to je, također, malo zagonetan. 798 00:38:17,200 --> 00:38:18,850 Ovo je izlaz iz prevodilac. 799 00:38:18,850 --> 00:38:23,610 A što je to istaknuo linije postoji - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 je rekao, to je govoreći na liniji od devet positive.c, na 13. karaktera, 801 00:38:28,960 --> 00:38:31,510 13. stup, što je napravio tu pogrešku. 802 00:38:31,510 --> 00:38:34,230 >> I osobito, što govori ja neiskorišteni varijabla n. 803 00:38:34,230 --> 00:38:35,790 Tako ćemo vidjeti - 804 00:38:35,790 --> 00:38:37,150 linije devet. 805 00:38:37,150 --> 00:38:40,430 Ja sam pomoću n u smislu da Dajem mu vrijednost. 806 00:38:40,430 --> 00:38:44,200 No, ono što prevodilac ne sviđa je da nisam naizgled ga koristite. 807 00:38:44,200 --> 00:38:45,560 Ali čekaj malo, ja sam ga koristite. 808 00:38:45,560 --> 00:38:48,170 U skladu 11, ja sam koristeći ga ovdje. 809 00:38:48,170 --> 00:38:52,430 Ali, ako sam se pomaknite prema dolje i dalje na positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 tako da, na liniju 11, 12 znakova, kompajler mi govori, korištenje 811 00:38:56,230 --> 00:38:58,670 neprijavljeni identifikator n. 812 00:38:58,670 --> 00:39:02,760 >> Dakle neprijavljenu znači da sam Nije navedeno je kao 813 00:39:02,760 --> 00:39:04,970 promjenljiva s tip podataka. 814 00:39:04,970 --> 00:39:05,500 Ali čekaj malo. 815 00:39:05,500 --> 00:39:09,150 I nije točno da je u skladu devet. 816 00:39:09,150 --> 00:39:11,100 Tako je netko stvarno zbunjen ovdje. 817 00:39:11,100 --> 00:39:14,900 To je bilo meni ili prevodilac, jer u skladu devet, opet, ja sam proglašenja 818 00:39:14,900 --> 00:39:18,650 int n, i ja sam to dodjeljivanje vrati vrijednost GetInt (). 819 00:39:18,650 --> 00:39:22,930 Tada sam koristim tu varijablu n na liniji 11 i provjere ako je njegova vrijednost manja 820 00:39:22,930 --> 00:39:24,050 od ili jednak nuli. 821 00:39:24,050 --> 00:39:27,430 No, to očito je loše i slomljena zašto? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Reci ponovno? 824 00:39:32,490 --> 00:39:35,690 >> Ah, moram objaviti prije n ulaska u petlju. 825 00:39:35,690 --> 00:39:36,370 Ali zašto? 826 00:39:36,370 --> 00:39:39,830 Mislim, samo smo predložili da se malo prije to je u redu da se proglasi varijabli 827 00:39:39,830 --> 00:39:43,600 u jednu liniju, a zatim dodijeliti im neku vrijednost. 828 00:39:43,600 --> 00:39:46,790 Globalna varijabla - vratimo na tu ideju u samo trenutak. 829 00:39:46,790 --> 00:39:48,690 Zašto želiš staviti je izvan petlje? 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. 833 00:40:06,780 --> 00:40:09,610 >> Dakle, doduše, pomalo izmiču, dopustite mi da sažeti. 834 00:40:09,610 --> 00:40:13,510 Kada definirate n unutar DO-blok tamo - 835 00:40:13,510 --> 00:40:16,320 posebno unutar ti kovrčava aparatić - 836 00:40:16,320 --> 00:40:19,210 da varijabla n ima ono što je pod nazivom Opseg - 837 00:40:19,210 --> 00:40:23,210 nevezano za naš sustav bodovanja u Tečaj - ali ima doseg koji je 838 00:40:23,210 --> 00:40:25,190 ograničena na one vitičastim zagradama. 839 00:40:25,190 --> 00:40:28,460 Drugim riječima, obično ako proglasi varijabla unutar skupa 840 00:40:28,460 --> 00:40:33,370 vitičastim zagradama, da je varijabla postoji samo unutar tih vitičastim zagradama. 841 00:40:33,370 --> 00:40:37,320 Dakle, po toj logici sama, iako Ja sam proglasio n u skladu devet, što 842 00:40:37,320 --> 00:40:41,910 u biti nestaje iz djelokruga, nestaje iz sjećanja, da se tako izrazim, 843 00:40:41,910 --> 00:40:43,370 U vrijeme kada sam pogodio crtu 11. 844 00:40:43,370 --> 00:40:47,370 Jer linije 11, nažalost, izvan tih vitičastim zagradama. 845 00:40:47,370 --> 00:40:51,540 >> Dakle, ja nažalost ne mogu to ispravili ide natrag na ono što sam to učinio prije. 846 00:40:51,540 --> 00:40:53,370 Možda na prvi pogled učiniti. 847 00:40:53,370 --> 00:40:56,370 No, ono što se sada ne radi ciklički? 848 00:40:56,370 --> 00:40:58,260 Vi ste očito ne uzimajući int ciklički. 849 00:40:58,260 --> 00:41:01,320 Tako možemo napustiti GetInt (), a mi trebao napustiti GetInt () unutar 850 00:41:01,320 --> 00:41:04,420 petlje, jer to je ono što želimo dosađivati ​​korisniku za ponovno i ponovno. 851 00:41:04,420 --> 00:41:08,660 No, to ipak dovoljno da ide do linije, recimo, šest. 852 00:41:08,660 --> 00:41:10,150 Int n, zarez. 853 00:41:10,150 --> 00:41:12,990 Ne daju mu vrijednost, jer još uvijek ne trebate se samo još. 854 00:41:12,990 --> 00:41:16,220 >> Ali sada ovdje dolje, obavijest - to bi se vrlo lako pogrešno. 855 00:41:16,220 --> 00:41:19,440 Ne želim da moja sjena prethodna Izjava o n. 856 00:41:19,440 --> 00:41:22,830 Želim koristiti n da zapravo postoji. 857 00:41:22,830 --> 00:41:25,780 I tako sada na liniji 10, Ja dodijeliti n vrijednost. 858 00:41:25,780 --> 00:41:28,580 No, u skladu šest, izjavljujem n. 859 00:41:28,580 --> 00:41:32,940 I tako mogu li ili ne mogu ga koristiti u skladu 12 sada? 860 00:41:32,940 --> 00:41:37,120 Ja mogu, jer između kojih kovrčava aparatić je n proglasio sada? 861 00:41:37,120 --> 00:41:38,770 Jedan ovdje na liniji pet. 862 00:41:38,770 --> 00:41:40,330 Za jedan ovdje na liniji 14. 863 00:41:40,330 --> 00:41:49,770 Dakle, ako ja sada smanjili, spremiti ovu datoteku, idite natrag u i pokrenuti napraviti pozitivne, to 864 00:41:49,770 --> 00:41:50,820 sastavio ovaj put. 865 00:41:50,820 --> 00:41:51,940 Dakle, to je već napredak. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Pozitivno, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Zahtijevam da mi daš pozitivni cijeli broj. 868 00:41:56,060 --> 00:41:57,750 Negativan 1. 869 00:41:57,750 --> 00:41:59,020 Negativan 2. 870 00:41:59,020 --> 00:42:00,680 Negativan 3. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 Jedan. 873 00:42:03,000 --> 00:42:05,130 I hvala za jednu je ono što je sada tiskana. 874 00:42:05,130 --> 00:42:07,400 >> Dopustite mi da pokušam nešto drugo, iz znatiželje. 875 00:42:07,400 --> 00:42:09,600 Ja sam rekao da se ulaz cijeli broj. 876 00:42:09,600 --> 00:42:12,870 No, što ako sam umjesto upisati janje? 877 00:42:12,870 --> 00:42:14,460 Tako da sada vidim drugačije upit - 878 00:42:14,460 --> 00:42:15,350 ponovnog pokušaja. 879 00:42:15,350 --> 00:42:17,670 No, nigdje u mom kodu A pišem ponovno. 880 00:42:17,670 --> 00:42:22,320 Dakle, gdje se, navodno, je li to ponovno zatražiti dolaze iz, biste rekli? 881 00:42:22,320 --> 00:42:23,540 Da, na GetInt () sama. 882 00:42:23,540 --> 00:42:26,650 Dakle, jedna od stvari CS50 je osoblje radi za vas, barem u tih prvih nekoliko 883 00:42:26,650 --> 00:42:30,400 tjedana, je da su napisali neki iznos pogreške provjere kako bi se osiguralo da ako 884 00:42:30,400 --> 00:42:34,260 nazovete GetInt (), što će barem vratiti int od korisnika. 885 00:42:34,260 --> 00:42:35,460 Nećete dobiti string. 886 00:42:35,460 --> 00:42:36,440 Nećete dobiti znak. 887 00:42:36,440 --> 00:42:39,660 Nećete dobiti nešto drugdje uopce. 888 00:42:39,660 --> 00:42:40,510 Vi ćete dobiti int. 889 00:42:40,510 --> 00:42:41,890 >> Sada, to možda neće biti pozitivan. 890 00:42:41,890 --> 00:42:42,770 To ne može biti negativna. 891 00:42:42,770 --> 00:42:44,550 Ne jamčimo oko toga. 892 00:42:44,550 --> 00:42:48,960 No, mi ćemo dosađivati ​​korisniku da ponovi postupak, ponovni pokušaj, ponovno sve dok on ili ona zapravo 893 00:42:48,960 --> 00:42:49,810 surađuje. 894 00:42:49,810 --> 00:42:53,085 Isto tako, ako to učinim 1,23, to nije int. 895 00:42:53,085 --> 00:42:58,400 Ali ako trebam upisati, recimo, 50 godina, da je mi daje vrijednost koju sam htjela. 896 00:42:58,400 --> 00:42:59,050 >> U redu. 897 00:42:59,050 --> 00:43:01,380 Dakle, nije loše. 898 00:43:01,380 --> 00:43:04,780 Sva pitanja o tome što smo upravo učinili? 899 00:43:04,780 --> 00:43:07,930 Ključ takeaway se, da bude jasno, ne toliko petlje, koje smo vidjeli 900 00:43:07,930 --> 00:43:10,880 Prije iako imamo stvarno ne ga koristiti, ali pitanje opsega, gdje je 901 00:43:10,880 --> 00:43:17,045 varijable mogu se mogu se koristiti samo u nekom određenom opsegu. 902 00:43:17,045 --> 00:43:19,830 >> U redu, neka mi se obratiti prijedlog načinjene, onom 903 00:43:19,830 --> 00:43:20,860 Globalna varijabla. 904 00:43:20,860 --> 00:43:24,880 Kao na stranu, ispada da jedan Rješenje za ovaj problem, ali 905 00:43:24,880 --> 00:43:28,880 obično netočni ili rješenje loše dizajnirane rješenje, jest 906 00:43:28,880 --> 00:43:31,670 deklarirati svoju varijablu kao što je zove globalna varijabla. 907 00:43:31,670 --> 00:43:34,610 Sada sam vrsta krši moja definicija opsega, jer postoji 908 00:43:34,610 --> 00:43:37,680 Nema kovrčava aparatić na samom vrhu , a na samom dnu datoteke. 909 00:43:37,680 --> 00:43:40,190 No, implikacija da je je da je sada u redu četiri, 910 00:43:40,190 --> 00:43:41,710 n je globalna varijabla. 911 00:43:41,710 --> 00:43:44,460 I kao što naziv implicira, to je Samo dostupni posvuda. 912 00:43:44,460 --> 00:43:45,790 >> Scratch je zapravo to. 913 00:43:45,790 --> 00:43:48,650 Ako ste koristili varijablu, možda podsjetiti li morao birati, ako je to za 914 00:43:48,650 --> 00:43:50,780 Sprite ili za sve duhovi. 915 00:43:50,780 --> 00:43:54,270 Pa, svi duhovi je samo jasniji način govoreći globalno. 916 00:43:54,270 --> 00:43:55,520 Da? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, stvarno dobro pitanje. 919 00:44:10,990 --> 00:44:14,310 >> Dakle Podsjećamo da je u prvoj verziji mog koda, kad sam pogrešno 920 00:44:14,310 --> 00:44:17,700 deklarirane i definirana n u skladu devet - 921 00:44:17,700 --> 00:44:19,980 Ja ga proglasiti varijabla i dao sam mu vrijednost s 922 00:44:19,980 --> 00:44:21,160 operator pridruživanja - 923 00:44:21,160 --> 00:44:22,520 ovo mi je dao dvije pogreške. 924 00:44:22,520 --> 00:44:26,560 Jedan, činjenica da n nije bio korišten, i dva, da je u redu 11 925 00:44:26,560 --> 00:44:27,770 to jednostavno nije proglašen. 926 00:44:27,770 --> 00:44:31,120 Dakle, prvo mi se nije Adresa u to vrijeme. 927 00:44:31,120 --> 00:44:35,130 To nije strogo pogreške proglasiti varijabla nije, ali ga koristiti. 928 00:44:35,130 --> 00:44:38,540 No, jedna od stvari koje smo učinili u CS50 aparata, namjerno, 929 00:44:38,540 --> 00:44:43,340 pedagoški, je da smo savijene prema gore Očekivanja da bi prevodilac 930 00:44:43,340 --> 00:44:46,970 sigurni da radite stvari ne samo ispravno, ali stvarno točno. 931 00:44:46,970 --> 00:44:51,520 >> Jer ako ste deklariranje varijable kao što su n i nikad ga koristi, ili ga koristite 932 00:44:51,520 --> 00:44:53,700 točno, što onda se to radi tamo? 933 00:44:53,700 --> 00:44:55,650 To doista ne služi svrsi. 934 00:44:55,650 --> 00:44:58,980 I to je vrlo lako s vremenom, ako nemojte konfigurirati svoje računalo u 935 00:44:58,980 --> 00:45:01,960 Na taj način, samo da imaju kod koji ima mali ostaci ovdje, ostatke tamo. 936 00:45:01,960 --> 00:45:04,390 I onda mjeseci kasnije se osvrnuti i ti si kao, zašto je ova linija 937 00:45:04,390 --> 00:45:05,060 Kod postoji? 938 00:45:05,060 --> 00:45:07,940 A ako ne postoji dobar razlog, da ne koristi vama ili vašim kolegama 939 00:45:07,940 --> 00:45:10,650 cestom do mora spotaknuti to onda. 940 00:45:10,650 --> 00:45:12,540 >> Kao na stranu, gdje je koji dolaze iz? 941 00:45:12,540 --> 00:45:16,410 Pa, sjećam se da svaki put sastavimo Program, sve ove stvari je 942 00:45:16,410 --> 00:45:17,380 se ispisuje. 943 00:45:17,380 --> 00:45:18,350 Dakle, vratit ćemo se na to. 944 00:45:18,350 --> 00:45:22,230 Ali opet, da je alat koji automatizira proces sastavljanja strane 945 00:45:22,230 --> 00:45:24,830 prikazivati ​​stvarni prevodilac naziva jeka. 946 00:45:24,830 --> 00:45:27,650 Ova stvar, mi na kraju ćete vidjeti, ima učiniti s ispravljanje pogrešaka s posebnim 947 00:45:27,650 --> 00:45:29,060 Program pod nazivom ispravljanje pogrešaka. 948 00:45:29,060 --> 00:45:32,150 To ima veze s optimizacijom code - više o tome u budućnosti. 949 00:45:32,150 --> 00:45:33,620 Stand = c99 - 950 00:45:33,620 --> 00:45:37,870 to samo znači koristiti 1999 verziju C. C je tu čak i duže od 951 00:45:37,870 --> 00:45:40,830 da, ali su se neki lijep Promjene plus 10 godina. 952 00:45:40,830 --> 00:45:42,690 >> I ovdje su relevantni. 953 00:45:42,690 --> 00:45:45,880 Mi smo rekavši da bi išta prije bi bilo upozorenje 954 00:45:45,880 --> 00:45:48,560 Pogreška spriječava studenta od sastavljanja. 955 00:45:48,560 --> 00:45:51,400 I zid znači to da je za cijela hrpa stvari, ne 956 00:45:51,400 --> 00:45:53,060 Samo se odnose na varijablama. 957 00:45:53,060 --> 00:45:54,700 I onda neka mi dođite do kraj ove linije. 958 00:45:54,700 --> 00:45:56,430 A to je, na kraju ćemo vratiti. 959 00:45:56,430 --> 00:45:59,040 To je očito naziv file sam sastavljanje. 960 00:45:59,040 --> 00:46:02,160 To podsjeća na naziv datoteke Ja sam izlaza kao ime 961 00:46:02,160 --> 00:46:04,070 mog runnable programa. 962 00:46:04,070 --> 00:46:08,970 To samo znači-lcs50 koristiti CS50 knjižnica, a sve nule i one koje 963 00:46:08,970 --> 00:46:12,390 Osoblje je napisao i sastavio ranije ove godine, integrirati 964 00:46:12,390 --> 00:46:13,490 ih u mom programu. 965 00:46:13,490 --> 00:46:16,130 >> I tko zna što-lm je? 966 00:46:16,130 --> 00:46:18,150 To je matematika knjižnica, koja je samo tamo, čak i ako ste 967 00:46:18,150 --> 00:46:19,320 Ne radite bilo matematike. 968 00:46:19,320 --> 00:46:22,620 To je samo automatski pod uvjetom nam se. 969 00:46:22,620 --> 00:46:26,540 >> Pa, neka mi to jedan drugi primjer ovdje otvara novu datoteku. 970 00:46:26,540 --> 00:46:30,560 I neka mi spasiti ovu jednu kao string.c. 971 00:46:30,560 --> 00:46:37,980 Ispada da je riječ o podacima vrste danas, postoji još 972 00:46:37,980 --> 00:46:40,630 događa ispod poklopca motora nego što smo vidjeli do sada. 973 00:46:40,630 --> 00:46:42,290 Zato mi dopustite da se brzo napraviti brzu programa. 974 00:46:42,290 --> 00:46:44,510 Uključi stdio.h. 975 00:46:44,510 --> 00:46:45,730 I ja ću spasiti da. 976 00:46:45,730 --> 00:46:48,110 I znaš, neka mi ne bi istu pogrešku opet i opet. 977 00:46:48,110 --> 00:46:50,540 Uključi cs50.h. 978 00:46:50,540 --> 00:46:54,870 I neka mi sada ići naprijed i učiniti int main (void). 979 00:46:54,870 --> 00:46:58,790 >> I sada sam jednostavno želite napraviti program da je to - proglasiti string 980 00:46:58,790 --> 00:47:03,610 pozvao je i dobiti niz od korisnika. 981 00:47:03,610 --> 00:47:05,820 I neka mi to malo upute ovdje - 982 00:47:05,820 --> 00:47:09,960 molim vas dajte mi string - tako Korisnik ne zna što učiniti. 983 00:47:09,960 --> 00:47:13,190 I onda ovdje ispod ove, Želim učiniti sljedeće - 984 00:47:13,190 --> 00:47:16,060 za int i dobiva nulu. 985 00:47:16,060 --> 00:47:18,580 Opet, računalni znanstvenici obično početi brojati od nule, ali smo mogli 986 00:47:18,580 --> 00:47:20,340 napraviti taj jedan, ako smo stvarno željeli. 987 00:47:20,340 --> 00:47:27,240 Sada ću napraviti i manji od niza duljine s.. 988 00:47:27,240 --> 00:47:28,430 Dakle 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 opet, to je sažeto jer je jednostavnije upisati, iako je 991 00:47:31,650 --> 00:47:32,590 malo zagonetan. 992 00:47:32,590 --> 00:47:35,290 >> To je funkcija nismo ste koristili Prije nego doslovno znači da je - 993 00:47:35,290 --> 00:47:37,810 vratite mi broj koji predstavlja duljina niza 994 00:47:37,810 --> 00:47:38,690 da je korisnik upisao. 995 00:47:38,690 --> 00:47:41,740 Ako se upisali u bok, što bi se vratiti pet, jer ima pet 996 00:47:41,740 --> 00:47:42,890 Slova u Hello. 997 00:47:42,890 --> 00:47:45,390 Zatim, na svakoj iteracije Ta petlja, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Pa opet, standardni izgradnju, čak i ako niste sasvim previše ugodno ili 999 00:47:49,170 --> 00:47:50,420 upoznati s njom još. 1000 00:47:50,420 --> 00:47:53,220 >> No, sada se na svakoj iteraciji ove petlje, primjetiti ono što ću učiniti. 1001 00:47:53,220 --> 00:47:56,690 Želim ići naprijed i ispis od jednog znaka - 1002 00:47:56,690 --> 00:47:59,940 tako% c backslash n u novi redak. 1003 00:47:59,940 --> 00:48:00,990 I onda, znate što želim učiniti? 1004 00:48:00,990 --> 00:48:05,090 Bez obzira Riječ je da korisnik upiše u, kao što je zdravo, želim ispisati 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, jedan znak po liniji. 1006 00:48:09,530 --> 00:48:13,080 Drugim riječima, želim doći na pojedini likovi u nizu, 1007 00:48:13,080 --> 00:48:16,770 pri čemu se do sada ima samo string je niz znakova. 1008 00:48:16,770 --> 00:48:21,690 >> I ispada da mogu napraviti s, nosača, ja, u neposrednoj blizini zagrada, zatvorite 1009 00:48:21,690 --> 00:48:23,580 zagradu, zarez. 1010 00:48:23,580 --> 00:48:25,640 I ja moram napraviti još jednu stvar. 1011 00:48:25,640 --> 00:48:30,570 To je u datoteci pod nazivom string.h strlen da je proglašena. 1012 00:48:30,570 --> 00:48:33,190 Dakle, ako želim koristiti tu funkciju, Moram reći prevodilac, 1013 00:48:33,190 --> 00:48:34,450 očekivati ​​da će ga koristiti. 1014 00:48:34,450 --> 00:48:37,040 Sada ću ići naprijed i učiniti Program pod nazivom string. 1015 00:48:37,040 --> 00:48:39,150 Dot, slash, string. 1016 00:48:39,150 --> 00:48:40,130 >> Molim Vas, dajte mi string. 1017 00:48:40,130 --> 00:48:40,900 Ja ću ići naprijed i upišite ga. 1018 00:48:40,900 --> 00:48:43,040 Pozdrav, u svim kape, Enter. 1019 00:48:43,040 --> 00:48:47,390 I sad sam primjetiti tiskana ove jedan znak za drugim. 1020 00:48:47,390 --> 00:48:51,450 Dakle, novi detalj je da string, na kraju dana, može biti 1021 00:48:51,450 --> 00:48:54,810 pristupiti putem svojih pojedinca likovi uvođenjem trgom 1022 00:48:54,810 --> 00:48:55,840 Nosač zapis. 1023 00:48:55,840 --> 00:48:59,090 I to je zato string ispod napa je doista slijed 1024 00:48:59,090 --> 00:48:59,810 likovi. 1025 00:48:59,810 --> 00:49:02,010 No, ono što je o njima je uredan u vašem računalu RAM - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, što god da je - oni su doslovno natrag na natrag na leđa - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 na pojedinačne, u susjedstvu bajtova u memoriji. 1029 00:49:09,920 --> 00:49:13,210 >> Dakle, ako želite dobiti na osmo, kao Bajt, koja je u ovoj petlji bi se 1030 00:49:13,210 --> 00:49:16,900 Nosač nula, jedan nosač, nosač dva, Nosač tri, četiri nosača - 1031 00:49:16,900 --> 00:49:18,890 da nulta je indeksirana do pet - 1032 00:49:18,890 --> 00:49:23,330 da će se ispisati H-E-L-L-O na svojoj liniji. 1033 00:49:23,330 --> 00:49:26,320 >> Sada, kao teaser, dopustite mi da vam pokazati koješta na kraju ćete biti u 1034 00:49:26,320 --> 00:49:31,950 mogli razumjeti, barem s nekim blizak gleda. 1035 00:49:31,950 --> 00:49:35,610 Za jednu, ono što smo bile uključene u današnji primjeri, ako želite, je zapravo 1036 00:49:35,610 --> 00:49:38,300 jedan od prvih jailbreaks za iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking znaci pucanja telefon tako da možete ga koristiti na 1038 00:49:40,800 --> 00:49:43,380 različite nosilac ili instalirati svoj vlastiti softver. 1039 00:49:43,380 --> 00:49:45,660 A vi ćete primijetiti izgleda potpuno grobni, najvjerojatnije. 1040 00:49:45,660 --> 00:49:46,520 Ali pogledajte ovo. 1041 00:49:46,520 --> 00:49:50,420 IPhone navodno je pukla s za petlju, ako je uvjet, ostalo 1042 00:49:50,420 --> 00:49:52,580 stanje, hrpa funkcija nismo vidjeli. 1043 00:49:52,580 --> 00:49:54,230 >> I opet, ne će se na Vjerojatno prvi pogled 1044 00:49:54,230 --> 00:49:55,620 razumjeti kako se to radi. 1045 00:49:55,620 --> 00:49:58,940 No, sve što smo vrsta potrajati zdravo za gotovo u našim modernim životima 1046 00:49:58,940 --> 00:50:02,040 zapravo ima tendenciju da se smanji i za neke od tih osnova smo bili 1047 00:50:02,040 --> 00:50:02,820 gleda. 1048 00:50:02,820 --> 00:50:06,680 Dopustite mi da ići naprijed i otvoriti jednu drugi program, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Dakle, ovo je, također, nešto što stvarno ne bi trebao znati. 1050 00:50:08,970 --> 00:50:12,440 Još nitko od osoblja ili sam mogao Vjerojatno ovaj lik iz gledajući 1051 00:50:12,440 --> 00:50:15,450 Zato što je to nečiji broj koji je podnesen na ono što je 1052 00:50:15,450 --> 00:50:19,630 povijesno poznat kao obfuscated C Natjecanje, u kojem pišete program 1053 00:50:19,630 --> 00:50:24,670 koji prikuplja i radi, ali je tako prokleto zagonetan nema čovjeka može shvatiti što 1054 00:50:24,670 --> 00:50:27,530 to će činiti sve do oni zapravo ga pokrenuti. 1055 00:50:27,530 --> 00:50:29,940 >> Dakle, doista, ako pogledate ovu broj, vidim prekidač. 1056 00:50:29,940 --> 00:50:30,870 Vidim glavna. 1057 00:50:30,870 --> 00:50:33,800 Vidim ti uglatim zagradama podrazumijeva nekakav niz. 1058 00:50:33,800 --> 00:50:35,970 Da li itko pogoditi što ovaj program zapravo 1059 00:50:35,970 --> 00:50:37,220 znači, ako sam pokrenuti 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 urađeno. 1064 00:50:44,690 --> 00:50:48,090 Dakle, samo osoblje, a ja ne mogu shvatiti što ti se stvari. 1065 00:50:48,090 --> 00:50:51,670 >> I sad na kraju, dopustite mi da ide naprijed i otvoriti jedan drugi program. 1066 00:50:51,670 --> 00:50:53,440 Ovo je jedan - 1067 00:50:53,440 --> 00:50:55,550 opet, mi ćemo učiniti izvorni kod Dostupno online - ovo je samo 1068 00:50:55,550 --> 00:50:57,480 vrsta lijepa za pogledati. 1069 00:50:57,480 --> 00:50:59,750 Sve što su učinili je pogodio razmaknicu vrlo malo. 1070 00:50:59,750 --> 00:51:01,320 No, ovo je pravi broj. 1071 00:51:01,320 --> 00:51:04,790 Dakle, ako mislite da je lijepa, ako mi zapravo pokrenuti ovu, na upit, 1072 00:51:04,790 --> 00:51:08,970 na kraju ćete vidjeti kako smo mogli učiniti stvari kao što je ovaj. 1073 00:51:08,970 --> 00:51:14,008 >> Dakle, mi ćemo vas ostaviti na toj bilješci i vidimo se u srijedu. 1074 00:51:14,008 --> 00:51:18,440 >> [Glazba svira] 1075 00:51:18,440 --> 00:51:23,380 >> ZVUČNI 2: Na sljedećem CS50, su TFS organizirati pobunu. 1076 00:51:23,380 --> 00:51:24,112 >> ZVUČNI 3: Ovdje je. 1077 00:51:24,112 --> 00:51:25,362 Ga dobiti! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Glazba svira]