1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [Tjedan 3] 2 00:00:02,200 --> 00:00:03,950 [David J. Malan - Sveučilište Harvard] 3 00:00:03,950 --> 00:00:07,140 [Ovo je CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Dopustite mi da nas usmjeriti u smjeru gdje smo stali zadnji put, 5 00:00:10,720 --> 00:00:13,890 koji je počeo razmišljati malo više nego o sintaksi 6 00:00:13,890 --> 00:00:17,150 i pokušava razmišljati malo manje o svim sitnice 7 00:00:17,150 --> 00:00:20,630 koji traje malo vremena za aklimatizirati na dosad u smislu zarezom 8 00:00:20,630 --> 00:00:22,360 i zagrade i vitičastim zagradama, 9 00:00:22,360 --> 00:00:25,630 početi uzimati stvari malo na višoj konceptualnoj razini 10 00:00:25,630 --> 00:00:28,800 tako da su problemi sada smo početi rješavati u idućih nekoliko tjedana 11 00:00:28,800 --> 00:00:32,340 će uključivati ​​mnogo više u višoj razini konceptualne probleme 12 00:00:32,340 --> 00:00:36,310 i malo manje u sintaktička kao što ste dobili vaše noge mokre 13 00:00:36,310 --> 00:00:40,090 i vaše ruke prljave s nekim od sintakse od ovih posljednjih nekoliko tjedana. 14 00:00:40,090 --> 00:00:43,690 >> Dakle, podsjetimo da je prošlog tjedna smo uveli taj pojam niz. 15 00:00:43,690 --> 00:00:49,320 I niz u engleskom se može opisati kao što? >> [Nečujno učenik odgovor] 16 00:00:49,320 --> 00:00:51,710 Molim? 17 00:00:51,710 --> 00:00:54,810 Zbirka? >> [Nečujno učenik odgovor] >> Dobro, dobro. 18 00:00:54,810 --> 00:00:57,820 Zbirka predmeta. Dakle, vidjeli smo polja u nule. 19 00:00:57,820 --> 00:01:01,880 Ako se dogodilo koristiti za pset 0 jedna od nule na popisima koji možete povući stvari 20 00:01:01,880 --> 00:01:05,410 poput naranče i banane u, inventara sorti, 21 00:01:05,410 --> 00:01:07,100 to je vrsta kao što je polje. 22 00:01:07,100 --> 00:01:10,980 A onda više tehnički, u kontekstu stvarnog računala, 23 00:01:10,980 --> 00:01:14,730 Niz je jednostavno granični komad memorije. 24 00:01:14,730 --> 00:01:18,590 Drugim riječima, imate byte, a zatim još jedan byte, a zatim još jedan byte, a zatim još jedan bajt, 25 00:01:18,590 --> 00:01:21,330 i ako ste bili privući one bajtova u slici, 26 00:01:21,330 --> 00:01:24,510 oni će se vratiti natrag na leđa na leđa. To je ono što mi podrazumijevamo pod graniče. 27 00:01:24,510 --> 00:01:26,690 >> Dakle, to je bajt broj 1, zatim dva, zatim tri. 28 00:01:26,690 --> 00:01:29,680 To ne znači da se ovdje, ovdje, ovdje, ovdje. 29 00:01:29,680 --> 00:01:33,800 Niz je granični komad 0 ili više bajtova. 30 00:01:33,800 --> 00:01:36,160 Dakle, ono što su oni korisni za? 31 00:01:36,160 --> 00:01:40,090 Podsjetimo smo imali ovu vrstu ishitreno primjer za pohranu tuđe kviz razreda u programu 32 00:01:40,090 --> 00:01:42,580 izračunati prosječnu komentar za neki tečaj, 33 00:01:42,580 --> 00:01:46,780 a podsjetimo se da bismo mogli početi pisati taj program deklariranje varijable quiz1. 34 00:01:46,780 --> 00:01:49,550 Tada bismo mogli imati još jedan varijablu nazvanu quiz2. 35 00:01:49,550 --> 00:01:52,030 Ali ako je bilo tri kvizova u ovoj klasi, quiz4. 36 00:01:52,030 --> 00:01:55,710 Ili, ako postoji tjedni kviz, to će biti quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Tako da bi sve ove varijable proglasio unutar glavna 38 00:01:58,520 --> 00:02:00,470 ili negdje drugdje u svom programu, 39 00:02:00,470 --> 00:02:03,870 i problem s tom pristupu, lako premda je samo kopirati i zalijepiti, 40 00:02:03,870 --> 00:02:06,120 je to samo vrlo brzo postaje nezgrapan. 41 00:02:06,120 --> 00:02:09,360 Ne daj Bože da zapravo imaju 30 ili 50 kvizova kvizovima. 42 00:02:09,360 --> 00:02:12,080 Ako je kao srednjoškolski stil dnevnog pop kviz, 43 00:02:12,080 --> 00:02:15,910 onda samo imaju smiješno dugačak popis varijable se proglasio, 44 00:02:15,910 --> 00:02:17,780 i to samo vrlo brzo izmakne kontroli. 45 00:02:17,780 --> 00:02:20,820 To je ružna, to je teško održavati, to je tako puno lakše napraviti slovoslagač 46 00:02:20,820 --> 00:02:23,910 ako se jedan broj upisao negdje u svom programu. 47 00:02:23,910 --> 00:02:26,800 >> Tako smo uveli pojam niz umjesto. 48 00:02:26,800 --> 00:02:30,760 I podsjetiti da smo provodi ovaj program radi malo nešto ovako. 49 00:02:30,760 --> 00:02:33,950 Pusti me u današnjem Izvor tri ponedjeljak imeniku 50 00:02:33,950 --> 00:02:37,160 i otvoriti niz, što smo vidjeli zadnji put. 51 00:02:37,160 --> 00:02:39,940 I iako je bilo par novih C trikova ovdje, 52 00:02:39,940 --> 00:02:41,920 među njima pojam konstanta, 53 00:02:41,920 --> 00:02:47,140 Podsjetimo da smo proglasili više pliva u suštini pomoću ovu sintaksu: 54 00:02:47,140 --> 00:02:51,750 plovak, zatim naziv varijable, onda ćemo koristiti četvornih aparatić stvarno prvi put, 55 00:02:51,750 --> 00:02:55,450 i ono što smo učinili unutar tih četvornih aparatić učinkovito je staviti broj. 56 00:02:55,450 --> 00:02:59,780 No, umjesto stavljanja broj, ja sam stavio ovu slovom riječ, kvizova. 57 00:02:59,780 --> 00:03:03,220 A što je motivacija za stavljanje slovom riječ poput kvizova 58 00:03:03,220 --> 00:03:08,170 , a zatim pomoću retka 17 trik ovdje zapravo dati da jedan broj? 59 00:03:08,170 --> 00:03:11,240 Što je motivacija tamo? Da. 60 00:03:11,240 --> 00:03:13,360 >> [Nečujno učenik odgovor] >> Točno. 61 00:03:13,360 --> 00:03:16,630 Ako želimo promijeniti tu vrijednost 2, imamo samo ga promijeniti u jednom mjestu 62 00:03:16,630 --> 00:03:19,680 jer smatraju - Ja ni ne sjećam što je ovaj program nije točno, 63 00:03:19,680 --> 00:03:22,040 ali ako samo to obrano vidite kvizovi, kvizovi. 64 00:03:22,040 --> 00:03:24,720 Vidite kvizove, ovdje više KVIZOVI. 65 00:03:24,720 --> 00:03:28,180 Dakle, ako nismo imali to konstanta, ovo korištenje oštra definirati, 66 00:03:28,180 --> 00:03:33,320 bismo upisali 2, zatim 2, zatim 2, zatim 2, što je u redu. To će biti samo kao točne. 67 00:03:33,320 --> 00:03:36,220 Ali pretpostavimo da će iduće godine imamo tri kvizove u CS50. 68 00:03:36,220 --> 00:03:39,190 Dakle, moram ići i ažurirati kôd, moram ga rekompiliranje, 69 00:03:39,190 --> 00:03:43,820 ali problem je ako sam nešto glupo, kao da sam izlaziti jednom spomenuti dva 70 00:03:43,820 --> 00:03:46,750 i zaboraviti priključiti tri, cijeli program bi mogao vrlo dobro razbiti. 71 00:03:46,750 --> 00:03:48,720 Dakle, mi samo tražimo za nevolje. 72 00:03:48,720 --> 00:03:53,170 >> Dakle, pojam konstanta je sve o faktoringu iz nekog komada podataka, 73 00:03:53,170 --> 00:03:56,070 da li je string ili char ili float ili što god, 74 00:03:56,070 --> 00:04:00,070 i proglašavajući ga jednom mjestu, tako da možete lakše ga promijeniti u budućnosti. 75 00:04:00,070 --> 00:04:03,660 I to je također, iskreno, malo lakše čitati, jer ako samo mislite o tome sada, 76 00:04:03,660 --> 00:04:07,840 to je kvizovi, ili čak smo mogli preimenovati to nešto poput NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 ili nešto precizniji. 78 00:04:09,430 --> 00:04:11,830 Kod samo postaje očito malo više, kao što se to radi, 79 00:04:11,830 --> 00:04:15,780 i pitaš se malo manje ono broj 2 bi se moglo dogoditi da znači. 80 00:04:15,780 --> 00:04:18,920 Tako je konstanta imala ništa bitno s polja. 81 00:04:18,920 --> 00:04:22,990 Niz je uveden putem tih četvornih aparatić. 82 00:04:22,990 --> 00:04:26,610 >> Dakle, primijetiti da u skladu 23 smo pitati korisnika, "Kakvi su bili vaši rezultati kviz?" 83 00:04:26,610 --> 00:04:31,120 Onda imamo samo ovu petlju koja navodno traži korisnika za svojim ocjenama. Kako? 84 00:04:31,120 --> 00:04:37,460 To ponovi 0-2. A ja kažem dvije, jer kvizove u svim kape je trenutno dva. 85 00:04:37,460 --> 00:04:42,310 Dakle, to ponovi od 0 do 2, a zatim ga ispisuje Kviz # nešto nešto, 86 00:04:42,310 --> 00:04:45,830 , a zatim koristi GetFloat dobiti vrijednost od korisnika. 87 00:04:45,830 --> 00:04:49,050 Dakle, primijetite to je samo drugi novi komad sintakse od prošle srijede. 88 00:04:49,050 --> 00:04:53,120 Ako želite spremiti nešto na određenom mjestu u tom nizu, 89 00:04:53,120 --> 00:04:55,460 opet koristiti uglate zagrade. 90 00:04:55,460 --> 00:04:57,030 >> Dakle, tu je malo dihotomije ovdje. 91 00:04:57,030 --> 00:04:59,040 Prvi put kada koristite uglate zagrade 92 00:04:59,040 --> 00:05:02,250 ga koristiti za određivanje koliko je velika želite da se polje. 93 00:05:02,250 --> 00:05:06,580 Ali ovaj sljedeći kontekst ovdje gdje smo ponovno zaposliti ove uglate zagrade 94 00:05:06,580 --> 00:05:10,540 znači gdje u tom polju ne želite staviti neku vrijednost? 95 00:05:10,540 --> 00:05:13,650 A razlika ovdje se može zaključiti iz konteksta. 96 00:05:13,650 --> 00:05:17,130 Obavijest ovdje imamo vrstu podataka, onda ćemo imati ime varijable, 97 00:05:17,130 --> 00:05:20,770 onda imamo četvornih aparatić sa brojem unutra, zarezom. To je to. 98 00:05:20,770 --> 00:05:22,290 Tako da je deklaracija. 99 00:05:22,290 --> 00:05:28,390 To je kao da smo učinili nešto poput plovka Grade1; float grade2; 100 00:05:28,390 --> 00:05:31,730 ali opet, to se vrlo brzo prerasta u način previše copy, paste, 101 00:05:31,730 --> 00:05:34,260 pa umjesto da samo to pojednostavljeno kao takva, 102 00:05:34,260 --> 00:05:38,800 što znači da od sada imamo ocjenu koja se može pohraniti na nosač 0, 103 00:05:38,800 --> 00:05:41,760 imamo još jedan razred koji se može pohraniti na nosač 1, 104 00:05:41,760 --> 00:05:46,890 ali što ako sam glupan i, na primjer, moj petlja ide tako daleko - 105 00:05:46,890 --> 00:05:48,740 na primjer, ja bi ovo manje od ili jednako, 106 00:05:48,740 --> 00:05:50,620 koja opoziv bio izvor prethodnog bug - 107 00:05:50,620 --> 00:05:55,590 što zapravo znači da se na neki treći slučajnog iteracije ovoj petlji 108 00:05:55,590 --> 00:06:00,380 Ja koristiti konzolu dva. Efektivno, što bi se moglo dogoditi ovdje? Molim? 109 00:06:00,380 --> 00:06:02,860 [Student] To će biti zamijenjen. >> Je li će biti zamijenjen? 110 00:06:02,860 --> 00:06:04,520 Što će biti zamijenjeni? 111 00:06:04,520 --> 00:06:10,890 Ovo je doslovno rekao zamijeniti ono što je na lokaciji 2 s povratnom vrijednosti GetFloat. 112 00:06:10,890 --> 00:06:13,690 No, problem je koliko je velik polje u ovom trenutku u priči? 113 00:06:13,690 --> 00:06:17,730 [Nečujno učenik odgovor] >> Niz je još samo dvije veličine 114 00:06:17,730 --> 00:06:22,730 jer polju, kao i bilo koje varijable, proglašen je prvi, prije nego što smo ga koristili, 115 00:06:22,730 --> 00:06:27,220 a mi naveden ovdje zbog toga stalno da imam dvije ocjene koje ću staviti. 116 00:06:27,220 --> 00:06:29,930 >> Ali zapamtite, računalni znanstvenici početi računajući od 0. 117 00:06:29,930 --> 00:06:33,620 Dakle, prvi mjesto u tom nizu je nosač 0. 118 00:06:33,620 --> 00:06:40,210 Sljedeći location je 1. Ova stvar je ikada tako nešto previše na stranu. 119 00:06:40,210 --> 00:06:42,870 Dakle, drugim riječima, ako sam zapravo imao taj niz - 120 00:06:42,870 --> 00:06:46,790 i da vidim koliko dobro to surađuje ovdje za nas - 121 00:06:46,790 --> 00:06:52,360 ako imam niz koji sam jednostavno sam nacrtana kako slijedi 122 00:06:52,360 --> 00:06:56,750 i ja sam izdvojila prostor za dva elementa, možda ću nacrtati ovo ovako u memoriji 123 00:06:56,750 --> 00:06:58,020 gdje je to velika bijela platno. 124 00:06:58,020 --> 00:07:00,920 To je samo RAM-a imam u mom računalu, koncert RAM-a, dva nastupa RAM, bez obzira, 125 00:07:00,920 --> 00:07:05,400 ali ove dvije kutije sada pojedinačno predstavljaju plovak, 32 bita. 126 00:07:05,400 --> 00:07:10,860 Dakle, ako sam stavio jedan broj ovdje kao 1,0, onda sam stavio još jedan broj ovdje kao 3,2 127 00:07:10,860 --> 00:07:15,280 ali onda sam napraviti nosač dva, to je poput stavljanja nešto ovdje. 128 00:07:15,280 --> 00:07:17,820 I kao što slika pokazuje, ne postoji ništa tamo. 129 00:07:17,820 --> 00:07:20,450 To je vrsta kao ničijoj zemlji jer nisam pitao operativni sustav 130 00:07:20,450 --> 00:07:23,550 da mi ovaj treći kviz. 131 00:07:23,550 --> 00:07:26,940 Ako sam htjela da treći kviz, trebao sam imala predumišljaj 132 00:07:26,940 --> 00:07:31,700 pitati operativni sustav za njega objavljujući KVIZOVI da neće biti 2 133 00:07:31,700 --> 00:07:34,210 ali umjesto da jednaka 3. 134 00:07:34,210 --> 00:07:39,000 >> Dakle, drugim riječima, slika da smo učinkovito imati pri ruci izgleda ovako ovdje. 135 00:07:39,000 --> 00:07:42,260 To je opet ničija zemlja. Mi bolje ne probati pisanje vrijednosti ovdje. 136 00:07:42,260 --> 00:07:45,300 Ali opet, jer znanstvenici računala brojati od 0, 137 00:07:45,300 --> 00:07:49,520 kada govorimo o ovoj lokaciji u nizu, koji je trebao biti mjesto 0, 138 00:07:49,520 --> 00:07:53,890 ovo je trebao biti mjesto 1, a to uopće ne postoji 139 00:07:53,890 --> 00:07:57,380 jer mi samo upitani operativni sustav za dvije takvim mjestima. 140 00:07:57,380 --> 00:08:00,130 Dakle, one od vas s prethodnom programskom iskustva iz drugih jezika 141 00:08:00,130 --> 00:08:04,150 Možda znate da to nije uvijek slučaj s polja ili stvari zove vektori. 142 00:08:04,150 --> 00:08:06,930 Umjesto toga, možete jednostavno držati dodajući i dodavanjem i dodavanjem stvari na polja, 143 00:08:06,930 --> 00:08:10,720 koji, iskreno, nismo imali tu sposobnost u nule, a ipak mi se čini da su ga dao ovdje 144 00:08:10,720 --> 00:08:15,160 jer sa C programiranje ste mnogo jasnije. 145 00:08:15,160 --> 00:08:17,980 To je samo vi i računalo upravo sada, a računalo samo će učiniti 146 00:08:17,980 --> 00:08:19,530 što reći na to. 147 00:08:19,530 --> 00:08:24,270 Dakle, ako ste samo reći da vam dvije splavi preko linije 22 ovdje, 148 00:08:24,270 --> 00:08:27,640 to je sve što ćeš dobiti natrag iz operativnog sustava: prostor za dva. 149 00:08:27,640 --> 00:08:34,049 >> Tako su sve svoje programe će povremeno biti lud s obzirom na poljima. 150 00:08:34,049 --> 00:08:37,520 Ovo je samo vrsta prirodi zvijeri kojim smo svi mi pogrešiv, 151 00:08:37,520 --> 00:08:42,490 te u nekom trenutku ćete vrlo vjerojatno indeks izvan granica svoje polje. 152 00:08:42,490 --> 00:08:45,980 A to je samo fancy način govoreći da je otišao u konzolu nešto 153 00:08:45,980 --> 00:08:49,970 i nešto je jednostavno previše velik broja. Vi otišao izvan granica svoje polje. 154 00:08:49,970 --> 00:08:51,530 Ali sada je to naopako. 155 00:08:51,530 --> 00:08:54,990 Ostatak ovog programa ima stvarno ništa suštinski način veze s polja. 156 00:08:54,990 --> 00:08:58,180 To je sve samo o nekom jednostavnom aritmetikom za računanje prosjeka. 157 00:08:58,180 --> 00:09:03,200 Dakle, imamo ovdje u ovo za petlju ovdje prvi varijabla zove sum da mi inicijalizira na 0. 158 00:09:03,200 --> 00:09:09,020 Onda smo ponoviti od 0 do dva i opet smo dodati da je zbrajanja varijabli 159 00:09:09,020 --> 00:09:12,620 ith razreda, tako da nosač 0 tada nosač jedan. 160 00:09:12,620 --> 00:09:15,130 I onda, kao što će učiniti u osnovnoj školi kako bi izračunali prosjek, 161 00:09:15,130 --> 00:09:19,420 mi jednostavno uzeti taj iznos, podijelite ga sa ukupnim brojem od kvizova, 162 00:09:19,420 --> 00:09:22,520 i onda za dobru mjeru zovemo funkciju ovdje zove kolo. 163 00:09:22,520 --> 00:09:28,580 >> Sada, kao stranu, što je stvar s ovim usputna int na liniji 34? 164 00:09:28,580 --> 00:09:31,730 To bi moglo doći do već u dijelu, nisu zapravo govorio o tome službeno ovdje, 165 00:09:31,730 --> 00:09:35,210 ali što je to u int parens vjerojatno radiš? >> [Nečujno učenik odgovor] 166 00:09:35,210 --> 00:09:38,500 Da, to se odnosi na casting ili typecasting, 167 00:09:38,500 --> 00:09:41,690 što znači uzimanje jedne vrste podataka i pretvoriti ga u drugu. 168 00:09:41,690 --> 00:09:45,400 Ne možete to učiniti sa svim vrstama podataka, jer ponekad to će biti malo čudno. 169 00:09:45,400 --> 00:09:49,640 No, u tom slučaju, ako povratak vrijednost rundi je plovak 170 00:09:49,640 --> 00:09:53,880 jer, nakon svega, ja sam uzimajući plovak i dijeljenjem s brojem 2 kao, 171 00:09:53,880 --> 00:09:55,840 Ja ću dobiti natrag plovak. 172 00:09:55,840 --> 00:10:00,760 Ali razreda ljudi školske stvarno ne želite znati da je njihov prosjek je bio 93,4 173 00:10:00,760 --> 00:10:04,420 jer ćete shvatiti da su ikad tako blizu tog 95 zaokruživanje točke. 174 00:10:04,420 --> 00:10:09,540 >> Dakle, želimo da umjesto toga koristiti int zaokružiti sve do najbliže int, 175 00:10:09,540 --> 00:10:12,730 koja je u ovom slučaju će biti 94 bez točke nakon njega. 176 00:10:12,730 --> 00:10:14,530 Dakle, to je samo malo matematički trik. 177 00:10:14,530 --> 00:10:17,570 A mi ćemo se vratiti na ovaj pojam lijevanje, jer to će imati implikacije, 178 00:10:17,570 --> 00:10:21,640 ako niste otkrili, već za dva problema postaviti. 179 00:10:21,640 --> 00:10:25,210 Dakle, niz tada, možete misliti - to će me nasmijati cijeli dan. 180 00:10:25,210 --> 00:10:27,830 To izgleda ovako ako nacrtati sliku o njemu, 181 00:10:27,830 --> 00:10:31,460 ali ključ je da veličina je također izabrao vas 182 00:10:31,460 --> 00:10:34,050 kada ga zatražiti od operativnog sustava. 183 00:10:34,050 --> 00:10:39,460 Sva pitanja onda na polja? Da. 184 00:10:39,460 --> 00:10:47,080 [Nečujno učenik pitanje] 185 00:10:47,080 --> 00:10:49,310 Ah, dobro pitanje. 186 00:10:49,310 --> 00:10:53,150 Pitanje je što se događa s nulte 0 u polju? To ne postoji u tom kontekstu. 187 00:10:53,150 --> 00:10:57,430 To postoji samo u kontekstu žice, što smo o doći u samo trenutak. 188 00:10:57,430 --> 00:11:02,300 No, za niz, kao u ovom slučaju, sve što dobivate je ono što tražim operativni sustav za. 189 00:11:02,300 --> 00:11:04,050 >> I kao stranu, da ne bi to biti nejasno, 190 00:11:04,050 --> 00:11:07,030 Ja stalno govoriš pitate operacijski sustav, pitajte operativni sustav. 191 00:11:07,030 --> 00:11:10,090 Operativni sustav, kao što vjerojatno znate, Mac OS, Windows, Linux. 192 00:11:10,090 --> 00:11:13,560 Kada zovete funkcije poput GetFloat 193 00:11:13,560 --> 00:11:19,280 ili ste progla varijable kao razredima, 194 00:11:19,280 --> 00:11:23,200 Na kraju dana možete učinkovito traže da netko drugi da vam to sjećanje 195 00:11:23,200 --> 00:11:25,940 jer mi kao želja programera 196 00:11:25,940 --> 00:11:28,800 nemam pojma kako zapravo dobili fizički pristup memoriji. 197 00:11:28,800 --> 00:11:31,100 Ali netko radi: operativni sustav. 198 00:11:31,100 --> 00:11:36,630 Dakle, osim nas predstavlja s lijepim ikona i izbornika i mape i kao 199 00:11:36,630 --> 00:11:39,050 koji možete vidjeti na radnoj površini, da li Mac ili PC, 200 00:11:39,050 --> 00:11:42,240 operacijski sustavi također učiniti nisku razinu zemaljski stvari, 201 00:11:42,240 --> 00:11:44,680 visoko tehničko osoblje za upravljanje gigabajt 202 00:11:44,680 --> 00:11:48,780 ili dva gigabajta memorije koju imaju, upravljanje procesora koji imate, i tako dalje. 203 00:11:48,780 --> 00:11:50,170 Dakle, kada ste pisanja koda, 204 00:11:50,170 --> 00:11:53,900 ste stvarno spaja na svoj operativni sustav u tom smislu. 205 00:11:53,900 --> 00:11:55,720 Ja ću morati smanjiti da. U redu. 206 00:11:55,720 --> 00:11:59,980 >> Ostala pitanja o nizovima? 207 00:12:00,330 --> 00:12:02,520 No? Ok. 208 00:12:02,520 --> 00:12:06,680 Dakle, tranzicija, naravno, iz polja je zapravo na temu koja je malo poznato. 209 00:12:06,680 --> 00:12:09,570 I mi smo gledali sve tako kratko na ovom posljednjem trenutku previše. 210 00:12:09,570 --> 00:12:12,500 To je niz primjera iz srijedu. 211 00:12:12,500 --> 00:12:15,060 Ovaj niz primjera bio je prilično jednostavan program, 212 00:12:15,060 --> 00:12:18,120 i zapravo sam ga pojednostavljeno nekoliko redaka za današnje potrebe. 213 00:12:18,120 --> 00:12:22,680 Sve to čini u skladu 19 je dobiti niz od korisnika, sprema ga u varijablu naziva je. 214 00:12:22,680 --> 00:12:28,670 Tada se u liniji 22 nadalje je očito je da je tisak string jedan lik po liniji. 215 00:12:28,670 --> 00:12:30,730 No, kako se to radi? 216 00:12:30,730 --> 00:12:33,350 Mi smo deklariranje varijable ja, postavljanje jednaka 0, 217 00:12:33,350 --> 00:12:35,770 i to je sve stara navika sada. 218 00:12:35,770 --> 00:12:39,270 Mi ne vidio ovo do srijede, ali možete vrsta zaključiti iz imena 219 00:12:39,270 --> 00:12:44,610 strlen samo vraća ono kad s. dao? Duljina niza. 220 00:12:44,610 --> 00:12:47,940 Dakle, ako sam proći ga niz, citat-završiti citat David, 221 00:12:47,940 --> 00:12:51,810 nadamo se da će se vratiti k meni broj 5 zbog Davida. 222 00:12:51,810 --> 00:12:55,600 Dakle, to je njegova svrha u životu je da se niz, bilo teško kodira vas 223 00:12:55,600 --> 00:12:58,840 ili u ovom slučaju priključen kao varijablu, kao argument, 224 00:12:58,840 --> 00:13:01,980 i to figure out što je duljina tog niza je. 225 00:13:01,980 --> 00:13:06,470 >> Dakle, ovdje sada smo posudio neki zapis iz prethodnog kviz primjer. 226 00:13:06,470 --> 00:13:09,390 To nema nikakve veze s plovcima, nema nikakve veze s kvizovima, 227 00:13:09,390 --> 00:13:13,100 ali ispada da je mali bijeli laž smo vam govorim jer tjednu 1 228 00:13:13,100 --> 00:13:16,330 je da niz zapravo ne postoji u C. 229 00:13:16,330 --> 00:13:20,230 String na kraju dana je zapravo samo polje. 230 00:13:20,230 --> 00:13:25,140 To je niz bajtova, pa bajt bajt bajt bajt, koji je opoziv samo 8 bita, 231 00:13:25,140 --> 00:13:28,130 pa komad memorije, komad memorije, komad memorije, komad memorije. 232 00:13:28,130 --> 00:13:31,210 A način na koji se provodi niz 233 00:13:31,210 --> 00:13:33,070 je stavljanjem prvi znak ovdje, 234 00:13:33,070 --> 00:13:37,470 onda ovdje, onda ovdje, onda evo, vratio se natrag na leđa u memoriji računala. 235 00:13:37,470 --> 00:13:42,160 Dakle, ako ste htjeli sricati riječ kao ZDRAVO, ti bi stavio jedan H znakova, 236 00:13:42,160 --> 00:13:48,240 zatim E, onda L tada L, onda O - pet znakova u ukupno - negdje u računala RAM-a. 237 00:13:48,240 --> 00:13:52,080 No, ključni detalj ovdje je da oni će se vratiti natrag na leđa uz leđa, 238 00:13:52,080 --> 00:13:54,200 tik jedna s drugom. 239 00:13:54,200 --> 00:13:58,820 Kad kad kažem s [i], što na engleskom jeziku je to mi daje? 240 00:14:01,240 --> 00:14:04,550 Što je [i] predstavljaju u ovom slučaju? Da. 241 00:14:04,550 --> 00:14:07,800 >> [Student] i ti lik u nizu. >> Točno. I ti lik u nizu. 242 00:14:07,800 --> 00:14:12,260 Sada, ja će započeti u 0 po mom for petlje ovdje, 243 00:14:12,260 --> 00:14:14,850 ali to je dobro, jer sve počinje brojati od 0. 244 00:14:14,850 --> 00:14:19,160 Dakle, s [0] će predstavljati slovo H u riječi kao što su ZDRAVO, 245 00:14:19,160 --> 00:14:24,530 S [1] će predstavljati pismo kao E u riječi kao što su ZDRAVO, i tako dalje. 246 00:14:24,530 --> 00:14:27,130 I ono što mi se čini da se radi o svakoj iteraciji ove petlje 247 00:14:27,130 --> 00:14:32,780 je privremeno pohranjivanje ith lik u varijablu zove c, što je samo char, 248 00:14:32,780 --> 00:14:35,010 i onda smo ispis c 249 00:14:35,010 --> 00:14:37,620 tako da na kraju dana što ovaj program čini je sljedeći. 250 00:14:37,620 --> 00:14:42,900 Ako odem u izvorni direktorij i ja napraviti string1 i ja ići naprijed i pokrenuti string1, 251 00:14:42,900 --> 00:14:51,920 i onda sam upišite riječ kao ZDRAVO, Enter, sve je to ipak ispisati ovaj jedan lik u isto vrijeme. 252 00:14:51,920 --> 00:14:54,010 >> Dakle, tu je prilika za doradu ovdje. 253 00:14:54,010 --> 00:14:58,150 Nekako sam raditi više poslova, iako je sve jasnije možda na taj način, nego što je potrebno. 254 00:14:58,150 --> 00:15:03,270 Koja linija koda ovdje mogu vjerojatno baciti uopce? Da. 255 00:15:03,270 --> 00:15:08,290 Linija 24. U skladu 24 sam deklariranje varijable c. 256 00:15:08,290 --> 00:15:14,320 Ja sam pohranu ith karakter je u njemu, ali onda sam koristeći c ovdje. 257 00:15:14,320 --> 00:15:20,160 Dakle, ja sam koristeći c, tako da se osjećam kao da ne mogu samo baciti liniju 24 daleko. 258 00:15:20,160 --> 00:15:23,850 [Nečujno učenik komentar] >> Točno. 259 00:15:23,850 --> 00:15:26,240 Dakle, kada je u pitanju razgovor o dizajnu programa, 260 00:15:26,240 --> 00:15:30,740 primijetiti ovaj blagi pojednostavljenje koda, što je jednako čitljiv, 261 00:15:30,740 --> 00:15:34,680 ali shvatite da je samo varijabla, njegov je tip podataka polja, 262 00:15:34,680 --> 00:15:38,610 tako da s [i] samo će se odmah vratiti na vas ith znakova u tom nizu. 263 00:15:38,610 --> 00:15:40,620 A ako želite ga ispisati, to je u redu. 264 00:15:40,620 --> 00:15:43,680 Vi samo morati koristiti% c jer niste ispis niz, 265 00:15:43,680 --> 00:15:48,520 ste tiskanje lik u nizu, i to također ima učinak ispis ith karakter. 266 00:15:48,520 --> 00:15:51,390 I sjećam jedina razlika stvarno od prošlog tjedna s pomoću printf 267 00:15:51,390 --> 00:15:54,220 je da, dok u tjednima prošlosti bismo učiniti nešto super jednostavno 268 00:15:54,220 --> 00:15:58,510 kao% s rezervirano onda je ime niza ovdje, 269 00:15:58,510 --> 00:16:01,190 Sada smo u ronjenju malo dublje ispod haube i govori, 270 00:16:01,190 --> 00:16:06,090 ne ispisati niz, ispisati jedan znak u njoj. 271 00:16:06,090 --> 00:16:10,570 >> Dakle, možemo učiniti nešto malo drugačiji jer ovdje postoji jedna druga - nije bug 272 00:16:10,570 --> 00:16:14,090 jer ovaj program je u pravu, ali ja radim nešto glupo 273 00:16:14,090 --> 00:16:16,810 koje sam spomenuo nakratko u srijedu. 274 00:16:16,810 --> 00:16:22,680 No, misleći natrag, kako bi ovaj program dizajn biti poboljšana i dalje? Da. 275 00:16:22,680 --> 00:16:28,280 [Nečujno učenik odgovor] >> Oh, dobro. 276 00:16:28,280 --> 00:16:32,120 Tako se prisjetiti da smo uveli drugi varijablu nazvanu n posljednje vrijeme, 277 00:16:32,120 --> 00:16:34,850 koji izgleda kao da se sami kontradiktorne, jer moj cilj drugi prije 278 00:16:34,850 --> 00:16:37,380 bio je samo baciti varijablu kao nepotrebno, 279 00:16:37,380 --> 00:16:40,700 ali podsjećaju da je u srijedu smo zapravo je to učinio. 280 00:16:40,700 --> 00:16:46,170 Promijenio sam za petlje da zapravo imaju zarez ovdje, onda n = strlen, 281 00:16:46,170 --> 00:16:52,120 i onda ovdje sam ja 00:16:57,660 Što je temeljna dobit da sam postizanje promjenom moje inicijalizacije na to 283 00:16:57,660 --> 00:17:01,590 i moj uvjet da to sada? >> [Nečujno učenik odgovor] >> Točno. 284 00:17:01,590 --> 00:17:06,170 Nisam podsjećajući strlen opet i opet i opet, jer se prisjetiti kako je za petlje radova. 285 00:17:06,170 --> 00:17:08,790 Čak i ako oni počnu da se više komplicirano izgleda, 286 00:17:08,790 --> 00:17:12,480 Podsjetimo da je stvar prije prvog zareza je inicijalizacija, koja se događa jednom. 287 00:17:12,480 --> 00:17:14,359 Uvjet je, međutim, u sredini, 288 00:17:14,359 --> 00:17:17,710 i to dobiva provjeriti svaki put kada se ide kroz petlju. 289 00:17:17,710 --> 00:17:22,420 >> Dakle, to je glupo da se pitate računalu isto pitanje opet i opet - 290 00:17:22,420 --> 00:17:25,920 Što je duljina HELLO? Što je duljina HELLO? Što je duljina HELLO? - 291 00:17:25,920 --> 00:17:29,740 jer kao što ćemo vidjeti danas i srijedu, ovo je definitivno će potrajati, 292 00:17:29,740 --> 00:17:34,320 i to nije jako dobro iskoristiti vrijeme, jer shvatiti duljinu niza 293 00:17:34,320 --> 00:17:37,030 zapravo potrebno malo truda. 294 00:17:37,030 --> 00:17:39,760 To nije trenutna, kao što je to u nekim jezicima. 295 00:17:39,760 --> 00:17:43,920 Dakle, promjenom to n, cijena plaćam je ono? 296 00:17:43,920 --> 00:17:45,640 Mi gledamo trade-off ovdje. 297 00:17:45,640 --> 00:17:49,460 Ja mogu uštedjeti vrijeme ne postavljam isto pitanje prokletu opet i opet, 298 00:17:49,460 --> 00:17:51,740 ali to ide na trošak mi nešto, što je ono? 299 00:17:51,740 --> 00:17:55,050 >> [Student] Ti izgubiti određenu količinu memorije. >> Točno. To će me stajati neko sjećanje. 300 00:17:55,050 --> 00:17:56,670 Dakle, u ovom slučaju to košta me što? 301 00:17:56,670 --> 00:18:01,530 Još 32 bita, jer n je samo int, kao implicira riječi int ovdje. 302 00:18:01,530 --> 00:18:03,300 No, je li to u redu? 303 00:18:03,300 --> 00:18:05,800 Iskreno, to je vjerojatno u redu, jer ako mislite o tome, 304 00:18:05,800 --> 00:18:09,030 više string, više vremena ću se troši 305 00:18:09,030 --> 00:18:11,920 jer strlen će se zove opet i opet i opet 306 00:18:11,920 --> 00:18:13,520 za svaku iteraciju petlje. 307 00:18:13,520 --> 00:18:18,070 I ovih dana, moj Mac ima dva nastupa RAM, ovih dana 4 gigs od RAM ponekad. 308 00:18:18,070 --> 00:18:22,420 Mislim da si mogu priuštiti četiri od tih bajtova zapravo ubrzati stvari. 309 00:18:22,420 --> 00:18:26,590 No, to će biti trade-off i tema stvarno u programiranju i informatike 310 00:18:26,590 --> 00:18:28,320 od nikada stvarno uzimajući ništa besplatno. 311 00:18:28,320 --> 00:18:32,880 Ako želite poboljšati nešto ovdje, morate platiti za to u drugoj ruci nekako. 312 00:18:32,880 --> 00:18:35,880 Prostor u odnosu na vrijeme u ovom slučaju. 313 00:18:35,880 --> 00:18:40,700 >> Dakle, to je sve dovelo do prema nečemu grobni ovako, 314 00:18:40,700 --> 00:18:44,070 koji, kao što ste vjerojatno shvatili do sada, zapravo kaže? 315 00:18:44,070 --> 00:18:47,420 [Nečujno učenik odgovor] >> Da, tako je to, budite sigurni da pije svoj Ovaltine, 316 00:18:47,420 --> 00:18:52,490 zapravo koristi algoritam pod nazivom ROT13, ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 što samo znači okretati sve od slova 13 mjesta, 318 00:18:55,500 --> 00:18:58,720 što znači voditi, a zatim dodajte 13 do njega i točka, točka, točka 319 00:18:58,720 --> 00:19:04,640 sve do 13. pismu gostima, učiniti istu stvar za BiH i za C i za D i tako dalje. 320 00:19:04,640 --> 00:19:10,850 I tako, ako smo zapravo pretvoriti ovo ovdje koristi pomak od 13 mjesta, 321 00:19:10,850 --> 00:19:14,580 ćemo se vratiti na ono malo što je imao Ralphie, koji je, Budite sigurni da pijete svoj Ovaltine. 322 00:19:14,580 --> 00:19:18,160 No, za sada problema postaviti dva, u standardnom izdanju najmanje, 323 00:19:18,160 --> 00:19:21,680 moraš vrste ne to sami enciphering, 324 00:19:21,680 --> 00:19:25,990 i moramo nekako uzeti u ulazu kao što je ovaj i šifriranje ili dešifriranje ga ga. 325 00:19:25,990 --> 00:19:29,850 >> Dakle, koji od tih osnova kakve nas dovodi do tu priliku? 326 00:19:29,850 --> 00:19:32,650 Idemo pogledati ovaj treći primjer ovdje. 327 00:19:32,650 --> 00:19:38,430 Prije svega, to se zove ASCII. Što ASCII ne odnosi natrag? 328 00:19:38,430 --> 00:19:40,460 American Standard Code za informiranje razmjenu, 329 00:19:40,460 --> 00:19:43,850 što je stvarno dug put govoreći što? Što je ASCII? 330 00:19:43,850 --> 00:19:47,890 [Nečujno učenik odgovor] >> Što je to? >> [Student] Lik karta. >> Lik karta. 331 00:19:47,890 --> 00:19:51,390 To samo mapira brojeve slovima, jer svijet ima standardizirani 332 00:19:51,390 --> 00:19:55,380 što će se brojke predstavljaju ono slova, tako da svatko od nas može koristiti računala 333 00:19:55,380 --> 00:19:59,340 i naši programi su sve samo kompatibilni kada je u pitanju ispis stvari na zaslonu. 334 00:19:59,340 --> 00:20:04,680 Tako se prisjetiti da je 65 dogodi da predstavljaju 97 dogodi da predstavljaju mala slova. 335 00:20:04,680 --> 00:20:08,510 I tako je taj jednostavan program ovdje ASCII je uzimanje prednost od te činjenice - 336 00:20:08,510 --> 00:20:12,770 da svijet zna da kapital je 65 - a to je samo ispis mapiranje. 337 00:20:12,770 --> 00:20:16,320 >> Dakle, prije nego što smo zaroniti u ovom kodeksu, dopustite mi da umjesto otvoriti prozor terminala. 338 00:20:16,320 --> 00:20:21,550 Dopustite mi ići naprijed i učiniti ASCII, a zatim neka je samo pokrenuti ovu stvar samo pokvariti izlaz. 339 00:20:21,550 --> 00:20:25,960 I to samo čini: stvarno veliki grafikon koji samo govori mi sve različitih kodova 340 00:20:25,960 --> 00:20:27,950 za sve od raznih slova. 341 00:20:27,950 --> 00:20:32,100 Dakle, super jednostavan program, ali nisam imao na hard kod tih 52 linije proizvodnje: 342 00:20:32,100 --> 00:20:34,860 26 velikih slova, 26 malih. 343 00:20:34,860 --> 00:20:37,790 Umjesto toga, ja sam to učinio programatski s nekoliko petlje. 344 00:20:37,790 --> 00:20:39,720 Obavijest što sam učinio ovdje. 345 00:20:39,720 --> 00:20:44,790 Ja ponovljena od ja je 65 dana do 65 + 26 jer sam htio ispisati iz 26 slova 346 00:20:44,790 --> 00:20:49,860 u engleskoj abecedi, ja + + na svakoj iteraciji, a sada primjetiti to opet. 347 00:20:49,860 --> 00:20:52,540 To je ponavljanje našeg prijatelja typecasting 348 00:20:52,540 --> 00:20:54,620 pri čemu se pretvoriti jedan tip podataka u drugu 349 00:20:54,620 --> 00:20:57,480 jer ono što želim učiniti u ovom konkretnom programu? 350 00:20:57,480 --> 00:21:02,650 Želim računati brojčano jer to je kako sam odrastao prebrojavanje - 65, 66, 67, i tako dalje - 351 00:21:02,650 --> 00:21:04,420 ali ja ne želim ispisati samo brojeve. 352 00:21:04,420 --> 00:21:08,030 Želim ispisati pismo nakon čega slijedi broj. 353 00:21:08,030 --> 00:21:18,640 Želim ispisati A: broj, B: broj, ali ja to mogu s istim točnim varijable. 354 00:21:18,640 --> 00:21:21,630 Tako sam isprintati% c kao rezervirano mjesto za nekog lika, 355 00:21:21,630 --> 00:21:25,080 % D kao rezervirano mjesto za znamenku ili broj. 356 00:21:25,080 --> 00:21:27,750 Što onda sam čep u za one dvije rezervirana mjesta? 357 00:21:27,750 --> 00:21:33,960 Prvi put sam plug u znak protuvrijednosti ja, a onda sam isprintati ja sama. 358 00:21:33,960 --> 00:21:36,400 >> Dakle primijetiti previše radi. 359 00:21:36,400 --> 00:21:39,320 Baš kao što ja mogu baciti na plovak na int 360 00:21:39,320 --> 00:21:41,750 kako bi se ići iz stvarnog broja na cijeli broj, 361 00:21:41,750 --> 00:21:46,100 Ovdje mogu otići iz int u char, koji je malo čudno - 362 00:21:46,100 --> 00:21:48,680 ne sasvim map na stvarnom svijetu - ali u računalima 363 00:21:48,680 --> 00:21:51,140 char je samo broj ispod haube, 364 00:21:51,140 --> 00:21:53,590 tako da smo se ikada tako eksplicitno ovdje na računalu, govori, 365 00:21:53,590 --> 00:21:58,920 printf, isprintati ne ja kao 65, ispisati ih kao numeričke protuvrijednosti. 366 00:21:58,920 --> 00:22:02,110 A što se ispostavilo da tehnički ne morate čak ni to. 367 00:22:02,110 --> 00:22:05,020 Što sam radila maloprije izrijekom lijevanje 368 00:22:05,020 --> 00:22:08,760 određivanjem što tip podataka Želim otići iz te. 369 00:22:08,760 --> 00:22:11,840 Ali primijetite da već imam ovaj c rezerviranog% 370 00:22:11,840 --> 00:22:14,930 i ovaj drugi% c rezervirano ovdje. 371 00:22:14,930 --> 00:22:18,880 Iako to nije int, računalo shvaća da char, 372 00:22:18,880 --> 00:22:21,080 to je samo int ispod haube. 373 00:22:21,080 --> 00:22:25,100 >> Dakle, ako sam zapravo rekompiliranje to i repriza ASCII programa, 374 00:22:25,100 --> 00:22:31,210 primijetiti da još uvijek samo radi jer računalo shvaća da je ta prepiska. 375 00:22:31,210 --> 00:22:34,870 Sada, to je važnije za napraviti eksplicitnu casting u svijetu plovaka za Ints 376 00:22:34,870 --> 00:22:37,460 jer ste zapravo stvaranje izračunatog odluku: 377 00:22:37,460 --> 00:22:40,140 baciti sve iza decimalne točke. 378 00:22:40,140 --> 00:22:44,990 Ovdje je stvarno ništa baciti, jer lik je samo broj, 379 00:22:44,990 --> 00:22:48,220 a niz je samo niz znakova. 380 00:22:48,220 --> 00:22:52,530 Dakle, kada dođe vrijeme za provedbu neke šifriranje ili dešifriranje, 381 00:22:52,530 --> 00:22:56,770 kako to da mi zapravo može prevesti nešto poput ove gluposti u, 382 00:22:56,770 --> 00:22:58,670 Budite sigurni da pijete svoj Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Što ako znamo upravo sada - uzmimo kao pretpostavku - da je ključ, 384 00:23:02,700 --> 00:23:08,010 broj koji smo rotirajući svih tih pismima, je broj 13? 385 00:23:08,010 --> 00:23:11,800 Tako smo otišli iz slovom B sve do Ø na početku rečenice, 386 00:23:11,800 --> 00:23:14,710 Budite sigurni da pijete svoj Ovaltine, jer ako mi je činiti B 387 00:23:14,710 --> 00:23:19,600 i onda sam ići C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 to je razlog zašto šifriranje slovo B postaje O 389 00:23:23,760 --> 00:23:26,570 jer sam samo dodao 13 za njega. 390 00:23:26,570 --> 00:23:33,460 >> Dakle, ako želim dešifrirati ovo, ja zapravo morati uzeti O, a zatim oduzmite 13 od njega. 391 00:23:33,460 --> 00:23:36,880 Ili, iskreno, jer je 26 slova u abecedi, ovo je predivno simetrično, 392 00:23:36,880 --> 00:23:41,260 možemo samo dodati 13, a mi ćemo se vratiti na slovo B. 393 00:23:41,260 --> 00:23:44,290 No, kako idete o provedbi ovako nešto u Cezara 394 00:23:44,290 --> 00:23:46,600 ili stvarno manipulira konce u cjelini? 395 00:23:46,600 --> 00:23:51,380 Ako slovo B je ono broj? 396 00:23:51,380 --> 00:23:55,290 Što je slovo B? Dakle, to je 66, zar ne? 397 00:23:55,290 --> 00:23:59,220 Dakle, ako pismo je 65, a slovo B je 66, 398 00:23:59,220 --> 00:24:03,940 pa 66, a sve što morate učiniti je dodati 13 na njega, i to mi daje 79. 399 00:24:03,940 --> 00:24:09,150 A ako ćemo ići u naš mali varati list, 79 doista maps na O. 400 00:24:09,150 --> 00:24:11,290 >> No, tu je malo kutak slučaju ovdje. 401 00:24:11,290 --> 00:24:15,170 Što je, kažu, slovo Z? 402 00:24:15,170 --> 00:24:20,180 Ako mi 66 + 25 da biste dobili sve do kraja abecede, mi smo na 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 mi daje 104, i pogodite što? 404 00:24:24,520 --> 00:24:29,200 104 ne jednaka je veliko slovo. 405 00:24:29,200 --> 00:24:31,610 Vratimo se malo varati list ovdje. 406 00:24:31,610 --> 00:24:38,070 Ako sam reprizu ovaj program u aparat, najave da 104, ako sam se vratiti na prozor terminala, 407 00:24:38,070 --> 00:24:41,800 104 je očito mala h. 408 00:24:41,800 --> 00:24:46,400 Dakle, trebamo neku ključnu trik ovdje kako bi bili sigurni da kada ćemo početi na Z 409 00:24:46,400 --> 00:24:50,260 a mi dodajemo 13 na njega ne želimo samo držati kovanje naprijed za većim i većim brojevima. 410 00:24:50,260 --> 00:24:52,600 Što mi stvarno želite učiniti? 411 00:24:52,600 --> 00:24:54,570 Želite zaokrenuti. 412 00:24:54,570 --> 00:25:00,250 >> Tako ispada, kao što ste vidjeli vjerojatno u dijelu sada ili u spec. problema skup sama 413 00:25:00,250 --> 00:25:05,730 shvatio da je ovaj drugi operator u C koji je također znak postotka, 414 00:25:05,730 --> 00:25:11,020 ali dok smo koristili% ovdje navesti rezervirano, 415 00:25:11,020 --> 00:25:15,420 znam da je, posebno za problema setu 2, tu je i nešto ovako: 416 00:25:15,420 --> 00:25:18,990 int x = y% z. 417 00:25:18,990 --> 00:25:22,770 Neka mi samo predstaviti kao vrlo generički oblik ove. 418 00:25:22,770 --> 00:25:25,580 Postotak znači što u programskom jeziku? >> [Student] modulo. 419 00:25:25,580 --> 00:25:28,790 Modulo, što je fancy način govoreći ostatak. 420 00:25:28,790 --> 00:25:31,620 Iako postoji mala razlika s definicijom tamo, 421 00:25:31,620 --> 00:25:37,210 to znači podijeliti y po z, ali ne vrati rezultat te podjele; 422 00:25:37,210 --> 00:25:39,650 umjesto toga, vrati ostatak. 423 00:25:39,650 --> 00:25:47,390 >> Dakle, ako je y zapravo 3 i z je zapravo 2, 3 podijeljeno 2 je 1 s ostatkom od 1, 424 00:25:47,390 --> 00:25:51,550 pa što ne x zapravo jednaki u ovom scenariju? 1. 425 00:25:51,550 --> 00:25:54,540 To je kao jednostavan, low-level ideja. 426 00:25:54,540 --> 00:25:56,480 Potrebno je malo vremena da biste dobili svoj um omotan oko njega 427 00:25:56,480 --> 00:25:58,740 jer to je vjerojatno bila dok budući da čak morali brinuti o ostacima 428 00:25:58,740 --> 00:26:01,160 i zapravo ih koristiti za nešto svrhovito, 429 00:26:01,160 --> 00:26:05,290 ali u ovom slučaju jednostavna činjenica da možete otići iz velikog broja kao 3 430 00:26:05,290 --> 00:26:08,920 na relativno malom broju kao dva i onda zaokrenuti učinkovito 431 00:26:08,920 --> 00:26:14,160 pomoću ostatak na manju vrijednost kao jedan će biti neprocjenjiva trik 432 00:26:14,160 --> 00:26:17,690 da možemo koristiti i za nešto poput Cezara i ove druge stvar Vigenere 433 00:26:17,690 --> 00:26:22,240 Problem je u postavljena dva, ali to će biti ponavljajući trik tijekom semestra. 434 00:26:22,240 --> 00:26:24,880 Ova jednostavna, jednostavna ideja samo uzimanje ostatak u cjelini 435 00:26:24,880 --> 00:26:26,530 će nam omogućiti da zaokrenuti. 436 00:26:26,530 --> 00:26:31,140 I kao što smo počeli igrati s više polja, kao što smo počeli igrati s više memorije sama, 437 00:26:31,140 --> 00:26:35,800 to će postati sve više i više moćan trik. 438 00:26:35,800 --> 00:26:43,420 >> Dakle, sva pitanja onda na ASCII ili predstavljanje žice kao polja? 439 00:26:43,420 --> 00:26:47,430 A mi ćemo ga uzme jedan usjek dalje. Da. 440 00:26:47,430 --> 00:26:52,350 [Nečujno učenik pitanje] >> Dobro pitanje. 441 00:26:52,350 --> 00:26:55,370 Što to znači kada varijabla ima zvjezdicu ispred njega? 442 00:26:55,370 --> 00:26:57,720 Dopustite mi da odgodi odgovoriti da je u svakom detalju, 443 00:26:57,720 --> 00:27:00,100 ali to se odnosi na temu poznate kao pokazivač. 444 00:27:00,100 --> 00:27:03,440 Pointeri imaju veze s memorije, a mi smo zapravo danas 445 00:27:03,440 --> 00:27:06,330 uzimajući prvi korak prema tom razgovoru, 446 00:27:06,330 --> 00:27:08,600 ali za sada, neka mi se pretvarati da zvijezda ne postoji 447 00:27:08,600 --> 00:27:15,380 a mi ćemo i dalje zove žice žice umjesto char *, 448 00:27:15,380 --> 00:27:19,530 koji ste vjerojatno vidjeli prije, a ja ću staviti na zaslonu u samo jednom trenutku kao teaser. 449 00:27:19,530 --> 00:27:23,010 Dakle, mi ćemo se vratiti na to u način više detalja nego mnogi od vas vjerojatno će vam se svidjeti. 450 00:27:23,010 --> 00:27:25,760 Na kraju, ne danas. Da. 451 00:27:25,760 --> 00:27:42,810 >> [Nečujno učenik pitanje] 452 00:27:42,810 --> 00:27:47,080 U kojem kontekstu ne morate dati znak za lik? >> [Student] Aha. 453 00:27:47,080 --> 00:27:52,130 Dakle, po defaultu, ako ne stavite +, samo pozitivni brojevi se pretpostavlja. 454 00:27:52,130 --> 00:27:55,390 Dakle, ako samo napisati broj 1, to je pozitivan jedan. 455 00:27:55,390 --> 00:27:57,710 Ako zaista želite da navedete negaciju vrijednosti, 456 00:27:57,710 --> 00:28:01,060 doslovno morati učiniti -1 na tipkovnici. 457 00:28:01,060 --> 00:28:20,440 No, to vjerojatno nije vaša pitanja. >> [Nečujno učenik odgovor] 458 00:28:20,440 --> 00:28:22,200 >> Dobro pitanje. Ok. 459 00:28:22,200 --> 00:28:24,970 Dakle, to ima veze, pretpostavljam, s nekom vrstom buga ste naletjeli 460 00:28:24,970 --> 00:28:27,640 zato što su pretvaranje cijeli broj do znaka 461 00:28:27,640 --> 00:28:29,780 ali nekako negativnost upleo, 462 00:28:29,780 --> 00:28:32,380 pa lik je upravo došao iz munged nekako. 463 00:28:32,380 --> 00:28:36,710 Dakle, za sada, dopustite mi da pojednostavljuju malo dok smo došli natrag u ovakvom temom. 464 00:28:36,710 --> 00:28:39,570 Za sada, mislim na stvari na taj način - i to je pojednostavljivanje. 465 00:28:39,570 --> 00:28:43,500 No, u svijetu cijeli broj, imate koliko bitova na raspolaganju? 466 00:28:43,500 --> 00:28:45,190 Imate 32 bita. 467 00:28:45,190 --> 00:28:49,030 I dosad smo razgovarali o ukupnom broju cijelih li, dakle, može predstavljati 468 00:28:49,030 --> 00:28:52,430 je oko 4 milijarde dolara u ukupno jer imate 32 bita, 469 00:28:52,430 --> 00:28:55,100 tako da je 2 do 32, tako da je oko 4 milijarde dolara. 470 00:28:55,100 --> 00:28:58,810 No, vidjeli smo tjedan ili dva prije da ne stvarno imati niz brojeva 471 00:28:58,810 --> 00:29:01,240 od 0 na do 4 milijarde dolara. 472 00:29:01,240 --> 00:29:06,340 Raspon umjesto ide od otprilike negativnog 2000000000 na pozitivan 2000000000. 473 00:29:06,340 --> 00:29:10,990 Ali to onda postavlja pitanje, kako ti predstavljaju pojam negativne 2000000000 474 00:29:10,990 --> 00:29:13,260 a kamoli negativna 1? 475 00:29:13,260 --> 00:29:17,960 Za sada, možemo pojednostavljuju i samo reći da ćemo koristiti lijevom malo 476 00:29:17,960 --> 00:29:22,380 od tih 32 bita, a ako je to jedna je negativan broj, 477 00:29:22,380 --> 00:29:25,090 a ako je 0 to je pozitivan broj. 478 00:29:25,090 --> 00:29:28,570 Problem s tom pojednostavljenog prikaza negativnih brojeva 479 00:29:28,570 --> 00:29:33,700 je da, ako su namjerno biti pametan i pokušava pretvoriti od karaktera do broja 480 00:29:33,700 --> 00:29:37,190 ili obratno, ne postoji takva stvar kao negativan lik. 481 00:29:37,190 --> 00:29:42,550 U svijetu ASCII, koji koristi samo 8 bita, sve osam od tih bitova materije, 482 00:29:42,550 --> 00:29:46,810 i lijevom malo ima veze s negativnosti. 483 00:29:46,810 --> 00:29:49,670 I samo da bude jasno, kad kažem lijevom bita, 484 00:29:49,670 --> 00:29:54,610 Podsjetimo da kad smo radili naše malo vezane uz primjere u prvom tjednu 485 00:29:54,610 --> 00:30:02,570 Podsjetimo da mi je nacrtao stvari poput 1001101, nešto poput ovoga. 486 00:30:02,570 --> 00:30:07,210 Kad kažem lijevom malo, samo sam doslovno znači jedan da pišete sve više ulijevo. 487 00:30:07,210 --> 00:30:11,910 Dakle, u svijetu likova ne postoji pojam negativnosti, 488 00:30:11,910 --> 00:30:16,360 tako da lijevom malo zapravo ima veze s ASCII, nema nikakve veze sa negativnosti. 489 00:30:16,360 --> 00:30:19,390 >> Dakle, to zvuči kao - i izvan konteksta teško je odgovoriti točno - 490 00:30:19,390 --> 00:30:25,840 ali nekako, koda je zbunjujuće da lijevom malo što predstavlja negativnu vrijednost 491 00:30:25,840 --> 00:30:29,160 kad je stvarno bio dio karaktera u pitanju. 492 00:30:29,160 --> 00:30:32,250 I opet, ja sam pretjeranog pojednostavljivanja jer računala zapravo nešto malo ljubitelj 493 00:30:32,250 --> 00:30:37,080 nego samo mijenja tu lijevom malo na jedan za negativnim predznakom u odnosu na 0. 494 00:30:37,080 --> 00:30:41,270 Oni umjesto toga, ako ste znatiželjni Googleu, koristiti nešto obično zove dva je komplement, 495 00:30:41,270 --> 00:30:43,830 što je malo sofisticiraniji od pristupa 496 00:30:43,830 --> 00:30:45,490 ali ideja je u konačnici isto. 497 00:30:45,490 --> 00:30:50,530 >> Dakle, u kratko, to je imalo veze sa činjenicom da su masaži broj do znaka 498 00:30:50,530 --> 00:30:53,750 ili obrnuto, ali vaš broj nije bio upoznat s činjenicom 499 00:30:53,750 --> 00:30:56,510 da jedan od tih bitova imala značaj u brojčanom svijetu. 500 00:30:56,510 --> 00:30:59,940 To nije slučaj u svijetu znakova. 501 00:30:59,940 --> 00:31:04,270 Ali, to zvuči kao da fiksna, u kojem slučaju sporno sada. Ostala pitanja. 502 00:31:06,030 --> 00:31:07,110 Ok. 503 00:31:07,110 --> 00:31:11,560 Dakle, do sada, sve programe koje smo pisanim su se ulaz možda od korisnika 504 00:31:11,560 --> 00:31:14,330 u obliku funkcija kao GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 ili ako ste bili čitanje naprijed u raznim knjigama ili online referencama, 506 00:31:16,990 --> 00:31:21,390 vi sami mogli koristiti funkcije poput scanf koji, iskreno, mi koristimo u CS50 knjižnici. 507 00:31:21,390 --> 00:31:25,370 Ali u tjedan ili dva, mi zapravo ću vam pokazati kako CS50 knjižnica provodi 508 00:31:25,370 --> 00:31:27,890 tako da možemo uzeti one kotače trening off uopce. 509 00:31:27,890 --> 00:31:31,340 >> No, ispostavilo se da je još jedan način da biste dobili informacije od korisnika. 510 00:31:31,340 --> 00:31:34,670 U stvari, mi sami smo bili koriste argumente naredbenog retka 511 00:31:34,670 --> 00:31:36,500 za nekoliko tjedana sada. 512 00:31:36,500 --> 00:31:41,150 Svaki put smo pokrenuti jeka ili smo pokrenuti napraviti, 513 00:31:41,150 --> 00:31:45,050 nismo samo upisali zveka, Enter, nismo upisali napraviti, Enter. 514 00:31:45,050 --> 00:31:49,340 Što smo obično napisana nakon riječi zveka na našem terminalu prozora promptu? 515 00:31:51,110 --> 00:31:52,900 [Student] Naziv datoteke. >> Naziv datoteke, zar ne? 516 00:31:52,900 --> 00:31:57,560 Hello.c ili mario.c ili bilo relevantno ime datoteke je. 517 00:31:57,560 --> 00:32:01,910 I u tom smislu što ste stvarno učinio je da ste utjecali na ponašanje zveka 518 00:32:01,910 --> 00:32:05,750 jer sigurno su ljudi koji su pisali zveka imao pojma da malo ste stari 519 00:32:05,750 --> 00:32:08,890 bio idući u napisati program koji se zove mario.c godina kasnije. 520 00:32:08,890 --> 00:32:13,150 Tako da je morao nekako utjecati na ponašanje tog programa, 521 00:32:13,150 --> 00:32:18,140 i taj program zveka morao biti napisan na takav način da se može prihvatiti ulaz od vas 522 00:32:18,140 --> 00:32:23,480 dodavanjem riječi na brz prije nego što korisnik klikne Enter. 523 00:32:23,480 --> 00:32:27,860 >> Tako ispada da je za neko vrijeme bili smo proglašenja gotovo sve naše programe 524 00:32:27,860 --> 00:32:32,840 za početak ovako - int main (void) - i onda smo otišli naprijed 525 00:32:32,840 --> 00:32:35,110 i počeo pisati naš kod. 526 00:32:35,110 --> 00:32:37,910 A mogli bismo imati neke oštre uključuje na vrhu datoteke, 527 00:32:37,910 --> 00:32:40,660 ali gotovo svi naši programi do sada su počeli s ovim 528 00:32:40,660 --> 00:32:44,200 iako možda ste vidjeli u poglavlju, u knjigama, online reference 529 00:32:44,200 --> 00:32:46,570 da to ne zapravo biti nevažeće. 530 00:32:46,570 --> 00:32:55,820 Drugi legitiman oblik za to da se je int argc, a zatim niz argv []. 531 00:32:55,820 --> 00:32:57,500 Dakle, sada što se to podrazumijeva? 532 00:32:57,500 --> 00:33:01,320 Ispada da argc, što je ljudski konvencija - što bi se moglo nazvati ovu foo, 533 00:33:01,320 --> 00:33:03,710 ali to bi samo biti puno manje jasno čitateljima - 534 00:33:03,710 --> 00:33:09,330 argc samo je argument za funkciju zove glavni koja predstavlja što? 535 00:33:09,330 --> 00:33:12,450 Što argc stajati za one poznato? 536 00:33:12,450 --> 00:33:14,980 >> [Nečujno učenik odgovor] >> Da, broj argumenata ili argument računati. 537 00:33:14,980 --> 00:33:16,510 To je kao jednostavan kao taj. 538 00:33:16,510 --> 00:33:19,160 Koliko argumenti su prošli na ovom programu? 539 00:33:19,160 --> 00:33:20,630 Što to znači? 540 00:33:20,630 --> 00:33:27,090 Ako na naredbenog retka sam pokrenuti nešto ovako - zveka mario.c-- 541 00:33:27,090 --> 00:33:35,440 argc kada sam pogodio Upišite se događa da se na vrijednosti, pomalo zbunjujuće, dva. 542 00:33:35,440 --> 00:33:40,150 Tako ispada da je argc je argument računati, 543 00:33:40,150 --> 00:33:46,280 ali zbog povijesnih razloga, ime samog programa uključena je u toj točki. 544 00:33:46,280 --> 00:33:51,950 Dakle argc je dva kad sam napisao jeka mario.c. 545 00:33:51,950 --> 00:33:54,290 Što argv sadržavati? 546 00:33:54,290 --> 00:33:57,020 Prije svega, argv izgleda kao niz, ali nije sasvim 547 00:33:57,020 --> 00:33:59,310 jer kao što je prošle srijede i sve više danas, 548 00:33:59,310 --> 00:34:02,890 ove uglatim zagradama označavaju što? To je niz. 549 00:34:02,890 --> 00:34:07,110 Nema broj u polju, te da bi smisla intuitivno 550 00:34:07,110 --> 00:34:10,790 jer su ljudi koji su pisali zveka godina sigurno nije imao pojma 551 00:34:10,790 --> 00:34:16,300 Koliko riječi ljudi poput nas ne bi upisati na brz prije nego udaranje Enter. 552 00:34:16,300 --> 00:34:22,280 >> Dakle, u ovom slučaju ovdje su proglašeni funkcija Glavni kao uzimanje niz argumenata, 553 00:34:22,280 --> 00:34:24,590 0 ili više argumenata. 554 00:34:24,590 --> 00:34:26,460 Oni ne znaju unaprijed koliko postoje, 555 00:34:26,460 --> 00:34:29,690 tako da je namjerno ne broj unutar tih uglatih zagrada. 556 00:34:29,690 --> 00:34:32,750 No, činjenica da su uglate zagrade su tu govore računalo, 557 00:34:32,750 --> 00:34:34,639 Očekujemo niz. 558 00:34:34,639 --> 00:34:37,489 Argv je samo stenogram notacija za argument vektora. 559 00:34:37,489 --> 00:34:39,889 Vektor je fancy način govoreći niz, 560 00:34:39,889 --> 00:34:42,980 i niz je fancy način govoreći popis ili zbirku. 561 00:34:42,980 --> 00:34:47,360 Dakle, to samo znači da, ako ste napisali glavni ovako 562 00:34:47,360 --> 00:34:51,100 umjesto sviđa kako smo to radili u posljednjih nekoliko tjedana, 563 00:34:51,100 --> 00:34:54,699 vaš program sada ima moć da prihvati argumente naredbenog retka 564 00:34:54,699 --> 00:34:58,520 tako da više ne moraš pisati mario, a zatim pritisnite Enter, 565 00:34:58,520 --> 00:35:01,610 zatim upišite u nizu za koliko blokovi visoka želite piramida se, 566 00:35:01,610 --> 00:35:03,100 zatim pritisnite Enter ponovo. 567 00:35:03,100 --> 00:35:07,720 Mi ni ne treba koristiti GetString više ili GetInt ili GetFloat za taj tvar. 568 00:35:07,720 --> 00:35:12,370 Mi samo možemo očekivati ​​korisniku upišite te riječi na brz sama 569 00:35:12,370 --> 00:35:16,850 baš kao i autori zveka odlučio da će to biti jako neugodno Program 570 00:35:16,850 --> 00:35:20,550 ako se sastaviti svoj kôd prvo upisali zveka, pritisnite Enter, 571 00:35:20,550 --> 00:35:24,090 onda mi je rekao da korisnik, molimo upišite naziv datoteke koju želite prevesti, 572 00:35:24,090 --> 00:35:26,920 onda ćemo upisati mario.c i pritisnite Enter. 573 00:35:26,920 --> 00:35:29,850 Ali to je upravo ono što smo radili za naše korisnike posljednjih nekoliko tjedana. 574 00:35:29,850 --> 00:35:33,550 Mi koristimo GetString i čekamo dok program radi da ih pita za ulaz. 575 00:35:33,550 --> 00:35:36,710 To više ne mora biti slučaj. 576 00:35:36,710 --> 00:35:41,160 >> Dakle, u ovom primjeru ovdje, sada imamo niz argv, 577 00:35:41,160 --> 00:35:43,390 i ovo je previše pojednostavljivanje, 578 00:35:43,390 --> 00:35:45,610 trening naplatci koji će vrlo brzo ispasti. 579 00:35:45,610 --> 00:35:50,860 To je više pravilan način pisanja ovaj alternativni deklaraciju glavni 580 00:35:50,860 --> 00:35:54,740 jer ispada da je ono što smo zadržati poziv string zapravo ima zvijezdu, 581 00:35:54,740 --> 00:35:58,440 Zvjezdica, u svojoj stvarnoj definiciji, ali to samo izgleda komplicirano, 582 00:35:58,440 --> 00:36:02,600 to je zbunjujuće na prvi, tako da smo pojednostaviti tako da samo stvaranje sinonim sorti 583 00:36:02,600 --> 00:36:09,340 u CS50 knjižnici koji mapira char * ovog više user-friendly riječi nizu. 584 00:36:09,340 --> 00:36:13,180 >> Dakle, neka je zapravo pokušati to onda. Dopustite mi ići naprijed i otvoriti gedit ovdje. 585 00:36:13,180 --> 00:36:17,010 Pusti me naprijed i otvoriti argv od jednog. 586 00:36:17,010 --> 00:36:21,620 Ovaj program je očito ispisuje argumente, ali u engleskim terminima, 587 00:36:21,620 --> 00:36:26,290 gledanjem na ovom kodeksu, što to učinite točnije? 588 00:36:26,290 --> 00:36:35,910 Ako sam tip u naredbi a.out foo bar, što dobiva tiskan u mom crno-bijeli prozor? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, Enter. 590 00:36:43,120 --> 00:36:48,300 Idi naprijed. Da. >> [Nečujno učenik odgovor] 591 00:36:48,300 --> 00:36:52,730 Dobar. Dakle a.out, nova linija, foo, nova linija, bar, nova linija. 592 00:36:52,730 --> 00:36:54,980 Zašto je to? Mi svakako može potvrditi samo trenutak. 593 00:36:54,980 --> 00:36:56,940 To je vrsta mekani liniju koda. 594 00:36:56,940 --> 00:36:59,560  To samo ispisuje novu liniju samo kako bi stvari ljepše na zaslonu. 595 00:36:59,560 --> 00:37:03,730 Ovo je petlja koja Ponavljanje od 0 na do argc, 596 00:37:03,730 --> 00:37:07,210 i to je povećavanjem na svakoj iteraciji + +. 597 00:37:07,210 --> 00:37:12,270 Dakle, to je sada rekao ispisati niz, kao implicira to% s.. 598 00:37:12,270 --> 00:37:16,460 Argv [i] je prilično ista ideja iz prethodnog primjera. 599 00:37:16,460 --> 00:37:19,580 Koristili smo pozvati varijablu s., a sada se to zove, samovoljno, argv. 600 00:37:19,580 --> 00:37:24,270 To znači ispisati ith argument da je upisali u naredbeni redak, 601 00:37:24,270 --> 00:37:28,690 i onda nakon toga cijela stvar je učinio, samo za dobru mjeru ispisati još jednu novu liniju. 602 00:37:28,690 --> 00:37:31,600 >> Tako ćemo vidjeti. Dopustite mi otvoriti prozor terminala. 603 00:37:31,600 --> 00:37:37,470 Dopustite mi sastaviti argv od 1, a sada neka mi pokrenuti argv od 1, Enter. Hmm. Ok. 604 00:37:37,470 --> 00:37:40,850 Ajmo pokrenuti foo bar. Zanimljivo. Baz. 605 00:37:40,850 --> 00:37:42,640 A ako ste se ikada zapitali zašto sam pisati ovo, 606 00:37:42,640 --> 00:37:45,010 to je samo i glupa informatika konvencija. 607 00:37:45,010 --> 00:37:48,050 Svijet često treba samo verbalne rezervirana mjesta za riječi. 608 00:37:48,050 --> 00:37:50,090 Dakle, ako želite razgovarati o nekim generičkim nizu, 609 00:37:50,090 --> 00:37:53,250 računalni znanstvenici samo imaju tendenciju da kažu foo kada im je potrebno riječ slučajnim odabirom, 610 00:37:53,250 --> 00:37:55,530 onda oni kažu bar ako je potrebno drugi riječ slučajnim odabirom, 611 00:37:55,530 --> 00:37:59,100 onda oni kažu baz ako im je potrebno trećina riječ, onda oni kažu qux ako im je potrebno četvrtine riječ, 612 00:37:59,100 --> 00:38:01,520 i onda postoji velika vjerska rasprava online kao na ono što dolazi nakon qux, 613 00:38:01,520 --> 00:38:04,940 tako da možete Googleu da shvatiti što druga proizvoljna riječ treba biti. 614 00:38:04,940 --> 00:38:07,480 No, to ne znači da su se uopće, 615 00:38:07,480 --> 00:38:10,100 iako foo bar, ako Google da, da ne imaju smisla, 616 00:38:10,100 --> 00:38:12,780 koja je dio etimologiji ovdje. 617 00:38:12,780 --> 00:38:17,550 >> Dakle, sve to radi onda se ispisuje jedan od tih nizova po liniji. 618 00:38:17,550 --> 00:38:19,900 Dakle, ako sam umjesto toga, međutim, želio da se malo ljubitelj, 619 00:38:19,900 --> 00:38:22,550 Pretpostavljam da nisam htio ispisati svaki niz po liniji; 620 00:38:22,550 --> 00:38:26,220 Htio sam ispisati svaki lik iz svakog niza po liniji. 621 00:38:26,220 --> 00:38:28,550 Kako sam mogao to učiniti umjesto? 622 00:38:28,550 --> 00:38:33,720 Što trebam promijeniti o ovom programu, ako želim ispisati ne svaku riječ 623 00:38:33,720 --> 00:38:37,290 ali želim ispisati svaku riječ slovo po slovo po slovo, 624 00:38:37,290 --> 00:38:40,590 onda sljedeći riječ slovo po slovo po slovo? 625 00:38:40,590 --> 00:38:43,650 Kako ćemo kombinirati ove ideje tako daleko? Da. 626 00:38:43,650 --> 00:38:47,390 [Student]% c. >> Redu. Tako smo negdje treba% c. 627 00:38:47,390 --> 00:38:50,680 Dobro, jer ne želim ispisati cijele nizove, želim ispisati znakove. Što još? 628 00:38:50,680 --> 00:38:54,290 >> [Nečujno učenik odgovor] >> Zanimljivi. 629 00:38:54,290 --> 00:38:56,860 Dakle, trebamo neku vrstu drugoj dimenziji ovdje sada 630 00:38:56,860 --> 00:39:02,300 jer mislim argv kao polje, ali to je niz žice. 631 00:39:02,300 --> 00:39:07,170 No, kao i od, kao, 15 minuta prije, što je niz? To je niz znakova. 632 00:39:07,170 --> 00:39:12,320 Pa stvarno, argv je niz niz znakova, 633 00:39:12,320 --> 00:39:14,870 niz polja znakova. 634 00:39:14,870 --> 00:39:19,170 Tako ispada da možemo koristiti samo više četvornih nosača notacije. Tako ćemo to učiniti. 635 00:39:19,170 --> 00:39:23,650 U vrhu ove petlje na liniji 19, ja ću ponoviti od I do argc, 636 00:39:23,650 --> 00:39:25,760 ali onda ću to učiniti: 637 00:39:25,760 --> 00:39:27,580 za - Ja ne mogu koristiti sada. 638 00:39:27,580 --> 00:39:30,300 Trebam još varijablu jer želim ponoviti više riječi 639 00:39:30,300 --> 00:39:32,640 ali onda i preko slova u riječi 640 00:39:32,640 --> 00:39:37,280 pa sam vrsta ima vertikalnu os i vodoravne osi, svojevrsnom konceptualno. 641 00:39:37,280 --> 00:39:43,930 Dakle, int j dobiva 0, onda želim da to j dok je j manje nego - a ja ću očistiti ovaj gore u malo. 642 00:39:43,930 --> 00:39:48,410 Kako sam ponoviti preko pisama u nizu? Učinili smo to maloprije. 643 00:39:48,410 --> 00:39:54,670 Strlen od argv [i]. Dobar. 644 00:39:54,670 --> 00:39:57,860 I opet, ja sam što malo neučinkovitost ovdje ne stvara n ili što god, 645 00:39:57,860 --> 00:39:59,610 ali mi ćemo se vratiti na to. 646 00:39:59,610 --> 00:40:03,270 >> Dakle, sada j + +. Sada moram alineje dalje ovdje. 647 00:40:03,270 --> 00:40:06,950 Što ja sada želite ispisati na svakoj iteraciji? 648 00:40:06,950 --> 00:40:09,720 [Nečujno učenik odgovor] >> Dakle [i] će mi dati riječ. 649 00:40:09,720 --> 00:40:12,910 [I] [j], vrsta poput matrice. 650 00:40:12,910 --> 00:40:14,810 Oni od vas s matematikom-y podrijetla, 651 00:40:14,810 --> 00:40:19,340 mi smo vrsta indeksiranje još dublje u ovoj matrici ili ovaj nizom polja, 652 00:40:19,340 --> 00:40:21,380 ovaj 2-dimenzionalne strukture. 653 00:40:21,380 --> 00:40:25,070 Dakle, sada ćemo vidjeti što se ovdje događa. Dopustite mi da otvori svoj veći prozor terminala. 654 00:40:25,070 --> 00:40:28,170 Dopustite mi ponoviti da od argv od jednog. 655 00:40:28,170 --> 00:40:33,090 I ja sam zeznuo ovdje, što je dobra pouka, jer sam previše zaboravio da to učinite. 656 00:40:33,090 --> 00:40:37,150 Implicitno proglašenja C Library funkciju 'strlen' tipa 'nepotpisani - 657 00:40:37,150 --> 00:40:40,360 Ja uopće ne znam što ostatak tog sredstva, ali vidio sam to i prije, 658 00:40:40,360 --> 00:40:42,000 implicitno proglašenja. 659 00:40:42,000 --> 00:40:45,540 Kad vidimo tu pogrešku, što to obično znači? 660 00:40:45,540 --> 00:40:48,520 >> [Nečujno učenik odgovor] >> Zaboravio sam knjižnicu do vrha. Ali čekaj malo. 661 00:40:48,520 --> 00:40:51,690 Obično sam zeznuo jer sam zaboravio CS50 knjižnicu, ali da je tamo. 662 00:40:51,690 --> 00:40:54,480 Obično sam zeznuo jer sam zaboravila standardni I / O. 663 00:40:54,480 --> 00:40:57,960 A iskreno, ne morate čak ni to. Mi ne koristite GetString danas. 664 00:40:57,960 --> 00:40:59,900 Dakle, ono što sam ja nedostaje? 665 00:40:59,900 --> 00:41:04,860 Tu je još jedan knjižnica koja sada trebamo koristiti povremeno zove string.h, 666 00:41:04,860 --> 00:41:08,980 i to je samo još jedan knjižnica koja ima više funkcija koje nisu u standardnoj I / O. 667 00:41:08,980 --> 00:41:11,640 >> Dakle, vratimo se na moje veliko prozor terminala. 668 00:41:11,640 --> 00:41:16,670 Ok. Sada, kvragu, valjda sam bio u krivu. Sam bio koristeći CS50 knjižnicu. 669 00:41:16,670 --> 00:41:18,460 Tako možemo popraviti u bilo dva načina. 670 00:41:18,460 --> 00:41:21,510 Možemo uzeti kotače trening off upravo sada i upravo to učiniti, 671 00:41:21,510 --> 00:41:26,600 ili neka je vrsta zadržati taj pojednostavljenje samo za sada, zalijepite ovaj u leđa, 672 00:41:26,600 --> 00:41:30,180 riješiti taj problem, a sada ide natrag u terminal prozoru. 673 00:41:30,180 --> 00:41:33,080 Dakle, da bude jasno, u CS50 knjižnica nije samo funkcija, 674 00:41:33,080 --> 00:41:36,920 to je također ključna niz, što je razlog zašto to pogreška se upravo dogodilo. 675 00:41:36,920 --> 00:41:43,010 >> Dakle, ovdje mi ići. Sredio sam obje knjižnice pitanja. Upišite. Dobar. 676 00:41:43,010 --> 00:41:49,250 Argv od 1, foo bar, Enter. Izvrsna. 677 00:41:49,250 --> 00:41:52,830 Tako sada imamo svako slovo svake riječi ispisane jedan po retku, 678 00:41:52,830 --> 00:41:55,290 koji ne čine za vrlo zanimljiv program, 679 00:41:55,290 --> 00:41:59,350 ali obavijest sada imamo sposobnost ne samo Ponavljanje preko riječi 680 00:41:59,350 --> 00:42:04,090 ali i više pojedinačnih slova u riječi, što zvuči jako poznato 681 00:42:04,090 --> 00:42:10,330 čak najjednostavniji aplikacijama kao što su izokretanje slova u nizu kao što je ovaj. 682 00:42:10,330 --> 00:42:12,410 Idemo naprijed i uzeti našu 5-minutni predah ovdje. 683 00:42:12,410 --> 00:42:14,410 A kad se vratimo, bit ćemo početi govoriti o učinkovitosti 684 00:42:14,410 --> 00:42:17,670 s kojima možemo učiniti te stvari bolje. 685 00:42:19,370 --> 00:42:21,900 >> U redu. Mi smo natrag. 686 00:42:21,900 --> 00:42:26,970 Zahvaljujući jednom od naših TFS koji igra puno bananagrams, 687 00:42:26,970 --> 00:42:30,000 mi zapravo imamo hrpu znakova s ​​nama danas ovdje 688 00:42:30,000 --> 00:42:32,520 fizički inkarniran s tim malim plastičnim komada, 689 00:42:32,520 --> 00:42:36,910 i neka mi predlažemo da to prazan bijeli škriljevca ovdje predstavlja RAM u mom računalu - 690 00:42:36,910 --> 00:42:39,790 laptop, desktop, bilo što - i tu izgleda kao puno toga 691 00:42:39,790 --> 00:42:44,090 jer ako ćemo početi cijepanje se ovaj RAM u malim byte veličine komada, 692 00:42:44,090 --> 00:42:48,970 ajmo reći da je samovoljno nešto da veličina i da mutno predstavlja - 693 00:42:48,970 --> 00:42:52,430 tamo idemo, i neka je smanjivanje malo ovdje - 694 00:42:52,430 --> 00:42:56,120 ajmo reći nešto da veličina predstavlja jednu bajt. 695 00:42:56,120 --> 00:43:00,400 Tako smo doista može stati cijela hrpa bajtova ili znakova unutar ove memorije, 696 00:43:00,400 --> 00:43:02,860 kao što sugerira relativne veličine ovdje. 697 00:43:02,860 --> 00:43:06,780 >> Dakle, pretpostavimo da sada cilj je alocirati memoriju za niz. 698 00:43:06,780 --> 00:43:08,680 Kako se to zapravo radi? 699 00:43:08,680 --> 00:43:11,380 U programima smo pisali, obično ste koristili GetString, 700 00:43:11,380 --> 00:43:16,300 ali sada, jasno, tu je ovo drugi kanal preko kojeg možemo dobiti korisničkog unosa u argv 701 00:43:16,300 --> 00:43:18,190 putem naredbenog retka argumente. 702 00:43:18,190 --> 00:43:20,580 No, ono što se stvarno događa ispod haube? 703 00:43:20,580 --> 00:43:24,920 Ispada da mi zovemo - ajmo dođite natrag GetString - funkcijsku GetString 704 00:43:24,920 --> 00:43:28,190 u CS50 knjižnici, korisnik zatraži niza, 705 00:43:28,190 --> 00:43:30,780 korisnik upiše u nekom riječju - ajmo ga nazvati HELLO. 706 00:43:30,780 --> 00:43:35,410 I mi smo bili rekavši za posljednjih nekoliko tjedana da povratak vrijednost GetString 707 00:43:35,410 --> 00:43:37,750 je u stvari niz, kao što je riječ Hello. 708 00:43:37,750 --> 00:43:39,660 >> No, ono što je GetString stvarno radi? 709 00:43:39,660 --> 00:43:45,230 Kao korisnik upiše u ZDRAVO, Enter, GetString je figuring out, 710 00:43:45,230 --> 00:43:47,930 ok, koliko znakova je to? Ovaj je H-E-L-L-O. 711 00:43:47,930 --> 00:43:52,500 Dakle, treba izdvojiti, to treba pitati operativni sustav - Linux u ovom slučaju - 712 00:43:52,500 --> 00:43:55,410 za najmanje pet bajtova za pohranu HELLO. 713 00:43:55,410 --> 00:43:59,570 A što je onda nastavlja raditi nakon što se vrati one 5 bajtova iz operativnog sustava 714 00:43:59,570 --> 00:44:04,120 je nokautirati HELLO natrag na leđa natrag na leđa. 715 00:44:04,120 --> 00:44:11,070 I tako ono što je stvarno vratio iz GetString je komad podataka koji izgleda ovako. 716 00:44:11,070 --> 00:44:16,850 Ali to je malo netočna jer ispada da to nije tako jednostavno 717 00:44:16,850 --> 00:44:20,310 kao samo čuvanje HELLO u memoriji računala 718 00:44:20,310 --> 00:44:24,140 jer pretpostavljam da je moj program koji pišem u C onda zove GetString opet, 719 00:44:24,140 --> 00:44:28,210 i pored riječ korisnik upiše u je BYE, BYE. 720 00:44:28,210 --> 00:44:31,300 Pa, moram stati da riječ BYE negdje u memoriji. 721 00:44:31,300 --> 00:44:33,790 Ja ne mogu izmlatiti HELLO. 722 00:44:33,790 --> 00:44:37,320 Na primjer, ne želim računalo samo za početak prepisati ovako 723 00:44:37,320 --> 00:44:41,400 izvorna riječ, jer ja još uvijek mogu koristiti riječ HELLO u varijablu 724 00:44:41,400 --> 00:44:43,070 negdje drugdje u mom programu. 725 00:44:43,070 --> 00:44:45,900 >> Dakle, B-Y-E ima završiti negdje drugdje u sjećanju. 726 00:44:45,900 --> 00:44:50,460 Ali konvencija obično je da će se sljedeći niz ćete izdvojiti 727 00:44:50,460 --> 00:44:54,940 Vjerojatno, ali ne uvijek, ide završiti na sljedeću dostupnu memoriju lokaciji. 728 00:44:54,940 --> 00:44:57,370 A ako nisam pitao operativni sustav za bilo koju memoriju 729 00:44:57,370 --> 00:45:01,380 od zadnjeg puta sam nazvao GetString, izgledi su riječ BYE 730 00:45:01,380 --> 00:45:05,790 će završiti odmah nakon riječi HELLO u sjećanju. 731 00:45:05,790 --> 00:45:10,550 No, u ovom trenutku možda i može vidjeti gdje potencijalni problem. 732 00:45:10,550 --> 00:45:13,310 Budući da su sljedeći komadi memorije, sljedeći byte da su samo besplatno - 733 00:45:13,310 --> 00:45:18,230 očistiti bijelu listu - u memoriji računala su tik do HELLO, 734 00:45:18,230 --> 00:45:23,670 ona se osjeća kao prvog niza sam pitao za možda iznenada sada promijeniti 735 00:45:23,670 --> 00:45:26,410 jer sam u suštini sam promijenio da HELLOBYE 736 00:45:26,410 --> 00:45:31,310 umjesto nekako demarcing početak bye i kraj HELLO. 737 00:45:31,310 --> 00:45:33,920 >> Tako ispada da je ono što se stvarno događa ispod haube, 738 00:45:33,920 --> 00:45:37,570 koje ste možda u kratkim online referenci ili odjeljak ili knjige 739 00:45:37,570 --> 00:45:41,780 ili uopće ne samo još je da je zapravo namjerna razgraničenja 740 00:45:41,780 --> 00:45:45,890 između riječi u memoriju računala. 741 00:45:45,890 --> 00:45:52,480 A u stvari, u ovom slučaju ovdje, nego samo staviti BYE tik do HELLO, 742 00:45:52,480 --> 00:45:58,610 umjesto toga, računalo stavlja poseban karakter, posebna null karakter, da se tako izrazim, 743 00:45:58,610 --> 00:46:03,050 koji je predstavljen s marker s kosom crticom 0. 744 00:46:03,050 --> 00:46:06,700 Dakle, ne duljimo, podsjetiti da su likovi predstavljeni u ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII je samo mapiranje između brojeva i slova, 746 00:46:09,680 --> 00:46:13,870 a većina tih pisama početi oko 65 za glavnog A, 747 00:46:13,870 --> 00:46:19,780 ali ispada da sigurno može predstavljati broj 0 kao cijeli ili u binarnom, 748 00:46:19,780 --> 00:46:22,690 i ispada svijet odlučio davno, davno, "Znate što?" 749 00:46:22,690 --> 00:46:27,550 "Idemo rezervat broj 0 kao ne predstavlja nikakve znakove na tipkovnici - 750 00:46:27,550 --> 00:46:30,810 "Nema slova, brojevi, nema ni interpunkcije. 0 je posebna." 751 00:46:30,810 --> 00:46:35,830 "To će biti posebna null karakter, a mi ćemo ga pisati kao \ 0". 752 00:46:35,830 --> 00:46:41,170 Razlika se ako smo samo pisali 0, 0 je lik. 753 00:46:41,170 --> 00:46:45,700 Sjetite se da postoje ASCII kodovi za 0, za jedan, za dva, za tri 754 00:46:45,700 --> 00:46:50,570 jer je lik 0 je različit od broja 0. 755 00:46:50,570 --> 00:46:54,270 A možete vidjeti da ako pogledate natrag iz tjedna 1 kad smo prvi put razgovarali o ASCII, 756 00:46:54,270 --> 00:46:59,130 0 i 1 i 2 i 3 pa sve do devet imali svoje ASCII kodova. 757 00:46:59,130 --> 00:47:02,300 Oni nisu, slučajno, 0 do 9. Oni su vrlo različiti. 758 00:47:02,300 --> 00:47:08,770 Dakle 0 samo znači "Ja sam poseban", a \ 0 znači, doslovno, "Ja nisam 0 karakter." 759 00:47:08,770 --> 00:47:11,360 "Ja sam to posebna vrijednost, null karakter." 760 00:47:11,360 --> 00:47:16,930 Tako sam zapravo treba još jedan od njih jer ja ne mogu napraviti istu grešku dva puta. 761 00:47:16,930 --> 00:47:21,550 >> Dakle, nakon riječi bye mi također ćete trebati još jedan od tih null znakova. 762 00:47:21,550 --> 00:47:27,090 Dopustite mi da zgrabite moje pero ovdje i neka mi brzo izvući drugu \ 0 763 00:47:27,090 --> 00:47:30,480 tako da nakon što sam pitao operativni sustav za dvije žice 764 00:47:30,480 --> 00:47:33,270 preko GetString slijedi drugi poziv na GetString, 765 00:47:33,270 --> 00:47:35,640 to je ono što je zapravo u sjećanju. 766 00:47:35,640 --> 00:47:39,900 Dakle, kad se vratim niz, ja sam stvarno uzimajući natrag da 767 00:47:39,900 --> 00:47:43,450 i kad sam se sljedeći niz, ja sam stvarno uzimajući leđa to. 768 00:47:43,450 --> 00:47:47,910 Dakle, ovo postavlja pitanje, strlen, prije svega, što bi ga vratiti? 769 00:47:47,910 --> 00:47:54,650 Kad sam nazvati strlen na niz s te je bila riječ HELLO da korisnik upisao u, 770 00:47:54,650 --> 00:47:57,800 što si mi očito reći duljina Hello je prije nekoliko minuta? 771 00:47:57,800 --> 00:48:01,290 To je pet, zar ne? H-E-L-L-O. I to je doista kako strlen djela. 772 00:48:01,290 --> 00:48:05,670 To vraća ono što normalan čovjek bi očekivao duljinu niza se. 773 00:48:05,670 --> 00:48:11,030 No, u stvarnosti, koliko je velik niz znakova koji se pohranu halo? 774 00:48:11,030 --> 00:48:12,770 To je zapravo šest. 775 00:48:12,770 --> 00:48:15,740 Dakle, strlen ne spominje tu činjenicu na vas. 776 00:48:15,740 --> 00:48:20,300 Ali ispod haube računalo zaista koristi šest bajtova za pohranu 5-pismo riječ, 777 00:48:20,300 --> 00:48:22,380 i to je istina, bez obzira koliko dugo je riječ. 778 00:48:22,380 --> 00:48:26,470 Uvijek će biti posebna null prestanak lik na kraju niza 779 00:48:26,470 --> 00:48:28,800 da Demarc svoju ukupnu dužinu. 780 00:48:28,800 --> 00:48:33,430 >> Dakle, ako ste sada osoba provedbi strlen 20, 30 godina, 781 00:48:33,430 --> 00:48:35,520 kako idete o provedbi strlen sebe? 782 00:48:35,520 --> 00:48:39,980 Mi uzeti zdravo za gotovo da ne postoji, baš kao što uzimamo zdravo za gotovo da je printf postoji, 783 00:48:39,980 --> 00:48:42,850 ali ako HELLO je riječ u pitanju 784 00:48:42,850 --> 00:48:45,220 i što imam u sjećanju je nešto što izgleda ovako, 785 00:48:45,220 --> 00:48:48,130 ako je to reimplement strlen jer ste bili zamoljeni da 786 00:48:48,130 --> 00:48:50,260 ili zato što, iskreno, ako niste znali strlen postojao - 787 00:48:50,260 --> 00:48:54,280 ste imali roll ovaj jedan na svoju vlastitu - kako si mogao provesti strlen 788 00:48:54,280 --> 00:48:57,760 kada je dobio nešto što izgleda ovako? 789 00:48:57,760 --> 00:49:02,750 Sada znamo da je niz polje, možemo ponoviti preko svake od pojedinih likova 790 00:49:02,750 --> 00:49:06,320 koristite nešto poput - Idemo pokušati to učiniti na letjeti. 791 00:49:06,320 --> 00:49:12,060 >> Pusti me u aparat. Dopustite mi da stvori novu datoteku, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Dopustite mi da ide naprijed i sada ne uključuju stdio.h, tako da imamo pristup printf. 793 00:49:19,260 --> 00:49:25,820 Pusti me učiniti int main (void). Oh. Samo ću to učiniti na moj posjedovati za sada onda. [Nasmijao] 794 00:49:25,820 --> 00:49:28,300 Hvala Vam. 795 00:49:28,300 --> 00:49:31,000 To je ono što ja radim. U redu. 796 00:49:31,000 --> 00:49:34,820 Dakle, prije nego što sam se okrenuo na zaslonu, ja upisali sve to. 797 00:49:34,820 --> 00:49:37,550 A sad ono što ću učiniti je sljedeće: 798 00:49:37,550 --> 00:49:40,360 printf ("Daj mi niz:") 799 00:49:40,360 --> 00:49:42,700 To je samo pahuljasto upute. 800 00:49:42,700 --> 00:49:45,700 Sada neka mi učiniti niz s = GetString. 801 00:49:45,700 --> 00:49:47,260 Već sam morati napraviti promjenu sada. 802 00:49:47,260 --> 00:49:52,740 Ja sam koristeći CS50 knjižnicu odjednom, pa neka mi ići naprijed i upišite u cs50.h. 803 00:49:52,740 --> 00:50:00,720 A sad ajmo to: printf ("Duljina je:% d, strlen [s] - 804 00:50:00,720 --> 00:50:03,540 i nisam učinio još. Što još moram dodati da ovaj program? 805 00:50:03,540 --> 00:50:05,740 >> [Student] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Dakle, za sada, mi smo koristeći strlen, pa budimo sigurni prevodilac zna gdje je, 807 00:50:10,800 --> 00:50:12,390 tako malo zdrav razum ček. 808 00:50:12,390 --> 00:50:16,400 Ja sam uzimajući niz u skladu osam, au skladu 9 sam ispis njegovu duljinu s% d. 809 00:50:16,400 --> 00:50:19,400 Dakle, idemo naprijed i otvoriti ovaj gore. 810 00:50:19,400 --> 00:50:23,380 Mi smo napraviti strlen - sastavlja ok - 811 00:50:23,380 --> 00:50:30,120 strlen - neka mi povećali - Enter, H-E-L-L-O, Enter. Duljina je pet. 812 00:50:30,120 --> 00:50:32,730 >> Ok, tako strlen čini se da rade, ali svijet je znao da. 813 00:50:32,730 --> 00:50:37,310 Dakle, ajmo sada provesti strlen sebe kako slijedi. 814 00:50:37,310 --> 00:50:39,490 Dopustite mi iskoristiti ovu knjižnicu daleko. 815 00:50:39,490 --> 00:50:42,590 Mi više ne imati pristup string.h jer nisam ni znao da postoji. 816 00:50:42,590 --> 00:50:45,970 Ali to je u redu, jer ja mogu provesti strlen sebe 817 00:50:45,970 --> 00:50:50,200 i to se zove niz ulaz, 818 00:50:50,200 --> 00:50:53,830 i sad moram shvatiti duljinu tog niza. 819 00:50:53,830 --> 00:50:55,880 Pa kako mogu to učiniti? 820 00:50:55,880 --> 00:51:00,190 Što ako mi je činiti - neka se vidi kako to učiniti - Što želite učiniti? 821 00:51:00,190 --> 00:51:04,130 >> [Nečujno učenik odgovor] >> Ok. 822 00:51:04,130 --> 00:51:05,970 Dakle, možemo to učiniti u hrpa načina. Dopustite mi da pokušam uzeti ovaj pristup. 823 00:51:05,970 --> 00:51:10,220 Dopustite mi dati sebi int varijablu ja, pa sam počinje na 0. 824 00:51:10,220 --> 00:51:19,380 I dopustite mi da kažem ovo: dok je ulaz [i] nije jednako onome što? \ 0. 825 00:51:19,380 --> 00:51:23,480 Tako ispada, kao i kod slučaja sa svim znakovi kad ih pisali doslovno u programu, 826 00:51:23,480 --> 00:51:25,940 morate koristiti jednostruke navodnike, a ne navodnicima. 827 00:51:25,940 --> 00:51:29,250 Dakle, ako sam pisali pismo je, ja bih to učiniti, slovo B, ja bih to učiniti. 828 00:51:29,250 --> 00:51:33,440 To, s druge strane, biti string, a ne pojedinac lik. 829 00:51:33,440 --> 00:51:38,470 >> Dakle, želim \ 0 doslovno. Što želim učiniti u ovoj petlji? 830 00:51:38,470 --> 00:51:42,650 Zapravo, trebam još varijablu, tako int duljina dobiva 0. 831 00:51:42,650 --> 00:51:46,190 Čak i ako nisu bili sigurni zašto smo počeli način na koji smo radili, 832 00:51:46,190 --> 00:51:50,110 sada da idemo dolje ove ceste, što želim raditi na liniji 9? 833 00:51:50,110 --> 00:51:55,820 duljina + + i onda ovdje dolje na liniji 10, povratak duljine. 834 00:51:55,820 --> 00:51:58,370 Pa kako se strlen provodi? 835 00:51:58,370 --> 00:52:00,550 To je zapravo provodi vjerojatno ovako. 836 00:52:00,550 --> 00:52:03,470 Možda osoba koristi za petlje, možda učiniti dok petlja - tko zna? 837 00:52:03,470 --> 00:52:05,940 Mi smo stvarno bih pogledati ispod haube na stvarni izvornog koda 838 00:52:05,940 --> 00:52:08,520 u nekoj datoteci naziva string.c vjerojatno. 839 00:52:08,520 --> 00:52:10,480 >> No, ovdje ćemo razmišljati o tome što radim. 840 00:52:10,480 --> 00:52:13,640 Ja sam deklariranje varijable sam nazvao, postavljanje je jednaka 0. 841 00:52:13,640 --> 00:52:17,520 I onda sam izjavljujući drugu varijablu nazvanu duljinu, postavljajući ga jednaka 0. 842 00:52:17,520 --> 00:52:25,440 Tada sam rekao, dok ith lik u ulazu nije jednaka posebnim null karaktera, \ 0, 843 00:52:25,440 --> 00:52:27,070 povećajte duljinu. 844 00:52:27,070 --> 00:52:32,550 Ali čim ith lik je ovaj poseban karakter, ono što se događa na petlji? 845 00:52:32,550 --> 00:52:36,540 To kratki spojevi. Ona zaustavlja, što znači da smo onda odmah vratiti duljinu. 846 00:52:36,540 --> 00:52:40,740 >> Dakle, ako nisam zabrljati, idemo naprijed i natrag na moj prozor terminala. 847 00:52:40,740 --> 00:52:43,550 Dopustite mi da rekompiliranje. I doista sam zeznuo. 848 00:52:43,550 --> 00:52:46,320 Nekompatibilni redeklariranje knjižnica funkcije strlen. 849 00:52:46,320 --> 00:52:48,650 Tako sam bio težak da biste dobili previše pametan za moje vlastito dobro ovdje. 850 00:52:48,650 --> 00:52:51,610 Prevodilac zapravo zna da je funkcija zove strlen 851 00:52:51,610 --> 00:52:55,290 iako nismo uključeni u knjižnicu. To je u redu. God. 852 00:52:55,290 --> 00:52:58,230 Mi smo samo ćemo surađivati ​​onda. Ajmo preimenovati ovu duljinu. 853 00:52:58,230 --> 00:53:04,110 Dopustite mi promijeniti iskoristiti za duljinu ovdje, a to će učiniti zveka sretniji. 854 00:53:04,110 --> 00:53:08,900 Kao na stranu, jer neke od tih funkcija su tako prokleto zajedničko - 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - oni zapravo imaju neku vrstu posebnog statusa. 856 00:53:12,390 --> 00:53:15,310 I tako jek samo zna malo nešto posebno o njima. 857 00:53:15,310 --> 00:53:18,760 To nije uvijek slučaj s većinom funkcija, tako da je razlog zašto smo se vikao na. 858 00:53:18,760 --> 00:53:21,350 >> Dopustite mi da pokušam ponovno. Srećom, to je radio to vrijeme. 859 00:53:21,350 --> 00:53:23,560 Pa sada neka mi pokrenuti svoju strlen program. 860 00:53:23,560 --> 00:53:29,740 Daj mi niz: H-E-L-L-O, Enter. I ja sam zeznuo. 861 00:53:29,740 --> 00:53:34,750 Zašto? >> [Nečujno učenik odgovor] >> Točno. 862 00:53:34,750 --> 00:53:39,180 Dakle, imam ja ovdje jako lijepo izgleda beskonačnu petlju 863 00:53:39,180 --> 00:53:42,270 jer iako sam povećavanjem duljine na svakoj iteraciji 864 00:53:42,270 --> 00:53:47,860 što sam ja očito ne radiš? Nisam ja povećavanjem. Ok. Jednostavno popraviti. Da? 865 00:53:47,860 --> 00:53:52,430 Ok. No Sada bismo bježe od neke druge zajedničke greškom gdje trebam nosače. 866 00:53:52,430 --> 00:53:54,430 A iskreno, ovaj broj počinje izgledati ružno, 867 00:53:54,430 --> 00:53:56,460 pa ćemo uzeti nož na čišćenje to se u ovom trenutku. 868 00:53:56,460 --> 00:53:58,810 Ali sada sam povećavanjem i duljinu i ja. 869 00:53:58,810 --> 00:54:02,630 Iskreno, ja već vidim priliku za poboljšanje ovdje, ali mi ćemo se vratiti na to. 870 00:54:02,630 --> 00:54:05,270 >> Pa sada neka samo pazite da smo barem napredak. 871 00:54:05,270 --> 00:54:08,320 To se dogodilo na neki od vas, i ja sam zanemario spomenuti to unaprijed. 872 00:54:08,320 --> 00:54:12,420 Kada nemate nesreću scenariju kao što je ovaj, kako ste riješili taj 873 00:54:12,420 --> 00:54:15,130 kratko ponovno aparata ili računala ili zatvaranje prozora? 874 00:54:15,130 --> 00:54:16,860 To je zapravo jednostavan. 875 00:54:16,860 --> 00:54:21,680 Kontrola C će poslati ovaj mali mrkva simbol C, te da samo prestane većinu programa. 876 00:54:21,680 --> 00:54:25,990 Ako imate stvarno loš beskonačnu petlju koja ispisuje stvari beskonačno mnogo puta, 877 00:54:25,990 --> 00:54:29,960 ponekad možda ćete morati pogoditi kontrolu C tisuću puta da bi ga zapravo ga čuti. 878 00:54:29,960 --> 00:54:33,910 Dakle, samo shvatiti sada, jer ja ne ispisuje ništa, koji je bio vrlo jednostavan. 879 00:54:33,910 --> 00:54:37,970 I tehnički, jednom je dovoljno, ali ja dobiti nestrpljivi i ja obično pogodio ga da mnogo puta. 880 00:54:37,970 --> 00:54:43,400 >> Dakle strlen. Daj mi niz: HELLO. Je li će raditi ovaj put? 881 00:54:44,580 --> 00:54:47,490 Ok. Druga uobičajena pogreška. Jeste da rekompiliranje. 882 00:54:47,490 --> 00:54:50,430 To je bilo namjerno, da je jedan. U redu. 883 00:54:50,430 --> 00:54:54,260 Dakle strlen, H-E-L-L-O, Enter. Izvrsna. 884 00:54:54,260 --> 00:54:55,910 Tako sada imamo strlen na pet. 885 00:54:55,910 --> 00:54:58,100 Dakle, doslovno smo reimplemented taj kotač. 886 00:54:58,100 --> 00:55:02,080 Pa sada neka počiste ovo gore, jer to ne bi me impresionirao 887 00:55:02,080 --> 00:55:04,080 s dizajnom mom kodu. 888 00:55:04,080 --> 00:55:07,200 Što možemo jasno eliminirati u ovom programu za čišćenje ovo gore? 889 00:55:07,200 --> 00:55:11,840 [Nečujno učenik odgovor] >> Da. Doslovno, mi smo liječenju ja i dužinu identično. 890 00:55:11,840 --> 00:55:16,440 Pa zašto ne bismo dobili pametan i reći dok dužina? 891 00:55:16,440 --> 00:55:20,450 Umjesto toga, neka je samo nazvati duljina za početak, to inicijalizirati na 0 892 00:55:20,450 --> 00:55:23,340 jer po defaultu niz nema duljinu dok smo odgonetnuti što je to. 893 00:55:23,340 --> 00:55:26,160 >> Sada smo to učinili, a sada je to prilično elegantan programa. 894 00:55:26,160 --> 00:55:28,660 Jedna varijabla. Ja ga očistiti, to stroži. 895 00:55:28,660 --> 00:55:31,980 Dakle, sad idemo nazad na moj prozor terminala. Idemo naprijed i pokrenuti ovo. 896 00:55:31,980 --> 00:55:35,670 Napravite strlen. Izgleda dobro. Trčanje strlen opet, Enter. 897 00:55:35,670 --> 00:55:40,680 Daj mi niz: HELLO, Enter. I čini se da radi kao 5. 898 00:55:40,680 --> 00:55:45,580 Sada, da bude jasno, da nisam napisao, na primjer, HELLO u jednom nizu 899 00:55:45,580 --> 00:55:48,840 i onda BYE u drugu, sigurno može imati više riječi. 900 00:55:48,840 --> 00:55:53,150 Ako izraz zapravo sam htjela upisati nije ZDRAVO, ali, na primjer, 901 00:55:53,150 --> 00:55:58,920 Hello World, obavijest da je ono što mi ne bi je ova situacija ovdje, zar ne? 902 00:55:58,920 --> 00:56:00,580 To bi značilo da je to dvoje žice. 903 00:56:00,580 --> 00:56:06,060 Vi svakako može imati znakove razmaknicu, pa ako mi zapravo upisali u dužem frazu 904 00:56:06,060 --> 00:56:08,390 kao Hello World, što smo stvarno imati u memoriji 905 00:56:08,390 --> 00:56:12,730 izgleda malo nešto takvo postoji. 906 00:56:12,730 --> 00:56:18,910 >> U redu. Sva pitanja onda o zastupljenosti ovdje žice? 907 00:56:18,910 --> 00:56:20,450 No? U redu. 908 00:56:20,450 --> 00:56:25,130 Zato sam rekao ranije da zovete strlen i opet namjerno kao da 909 00:56:25,130 --> 00:56:28,070 vjerojatno nije najbolja ideja jer si idući u biti događaj puno rada 910 00:56:28,070 --> 00:56:30,280 opet i opet i opet. 911 00:56:30,280 --> 00:56:36,150 Doista, kakav posao je potrebno za odgonetanje duljinu niza, očito? 912 00:56:36,150 --> 00:56:40,720 Morate početi na početku i onda gledaj, gledaj, gledaj, gledaj, gledaj 913 00:56:40,720 --> 00:56:44,930 dok se konačno vidjeti taj poseban karakter, na kojem trenutku, ah, sad znam duljinu. 914 00:56:44,930 --> 00:56:48,040 Dakle ranije, kada smo imali strlen se zove opet i opet i opet, 915 00:56:48,040 --> 00:56:52,080 Zato sam predložio da je glupo, jer opet, da niz izgleda kao da. 916 00:56:52,080 --> 00:56:54,880 To se neće promijeniti svaki put kada iteraciju kroz neku petlju, 917 00:56:54,880 --> 00:56:56,890 tako radite nepotreban posao. 918 00:56:56,890 --> 00:57:00,620 U isto vrijeme, trebali biste znati, što na stranu, da prevodiocima kao jeka ovih dana 919 00:57:00,620 --> 00:57:02,530 su razvili tijekom mnogih godina, 920 00:57:02,530 --> 00:57:05,690 i prevodilac pisci, programeri, su prilično pametna. 921 00:57:05,690 --> 00:57:10,170 I tako ispada da zveka i drugim prevodiocima zapravo može shvatiti da, 922 00:57:10,170 --> 00:57:13,650 ok, da, pisao strlen u vašem stanju, 923 00:57:13,650 --> 00:57:17,520 što tehnički znači da bismo ga nazvati opet i opet i opet. 924 00:57:17,520 --> 00:57:21,880 Ali pametni prevodiocima zapravo mogu optimizirati one vrste loših odluka korisnika 925 00:57:21,880 --> 00:57:23,870 iz svog koda zadovoljštinu stvari. 926 00:57:23,870 --> 00:57:27,360 >> Dakle, samo ne shvaćaju da je ponekad prevodilac je pametniji od nas 927 00:57:27,360 --> 00:57:29,210 i da će vrsta sakriti vlastite pogreške. 928 00:57:29,210 --> 00:57:31,620 No, svakako, kada je u pitanju problematična skupova i slično, 929 00:57:31,620 --> 00:57:35,340 Ne treba razmišljati o tim fundamentalno pogrešnim dizajnerske odluke 930 00:57:35,340 --> 00:57:38,110 potencijalno iz jednostavnog razloga da ćemo biti događaj način više posla 931 00:57:38,110 --> 00:57:41,330 nego što zapravo trebate učiniti. No, kako je mnogo više posla? 932 00:57:41,330 --> 00:57:44,960 U slučaju Hello World, počnimo generalizirati veličinu ovog problema. 933 00:57:44,960 --> 00:57:48,100 Što je duljina problema ili veličine problema 934 00:57:48,100 --> 00:57:50,770 kada je riječ korisnik upisali u je HELLO? 935 00:57:50,770 --> 00:57:53,790 To je očito pet, možda šest. Plus ili minus jedan. God. 936 00:57:53,790 --> 00:57:55,680 To je tako blizu samo ćemo ga zovu pet. 937 00:57:55,680 --> 00:58:00,480 >> Dakle, ono što je veličina problem ovdje kad pokušava shvatiti duljinu HELLO? 938 00:58:00,480 --> 00:58:06,790 To je 1, 2, 3, 4, 5, a možda i 6 za posljednjeg znaka, ali neka je generalizirati da kao n. 939 00:58:06,790 --> 00:58:10,300 Dakle, n, samo varijabla n je ono što računalni znanstvenici obično će koristiti 940 00:58:10,300 --> 00:58:13,890 opisati veličinu problema, a problem pri ruci je koliko dugo je HELLO? 941 00:58:13,890 --> 00:58:17,050 Koliko vremena strlen uzeti? 942 00:58:17,050 --> 00:58:21,010 Potrebno je na red n koraka, gdje je svaki korak znači pogledati karaktera, 943 00:58:21,010 --> 00:58:23,350 Pogledajmo karaktera, pogled na lik. 944 00:58:23,350 --> 00:58:26,850 I mi smo imali ovu raspravu dok leđa, broj operacija nešto traje. 945 00:58:26,850 --> 00:58:29,910 Prvi dan razredu smo svi nespretno stand up, 946 00:58:29,910 --> 00:58:32,060 i onda svi počeli uparivanje off jedni s drugima 947 00:58:32,060 --> 00:58:35,990 kako bi zapravo računati idealno koliko ljudi bili u sobi. 948 00:58:35,990 --> 00:58:39,860 I mi smo također učinili još jedna stvar kojom ako sam to učinio umjesto stare škole način 949 00:58:39,860 --> 00:58:44,800 od tek počinje 1, 2, 3, 4, 5, 6 i tako dalje, 950 00:58:44,800 --> 00:58:49,360 da je previše, veličina tog problema bio je veličine n. Bilo je n ljudi u sobi. 951 00:58:49,360 --> 00:58:52,010 Ali ja sam mogao ubrzati da se, zar ne? Ocjena ime škole sam mogao početi računajući na 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. I da se osjeća tako puno brže, i doista je. 953 00:58:55,560 --> 00:59:01,720 To je doslovno dvostruko brže, ali opet, ako je još 400 ljudi ušla u ovoj sobi 954 00:59:01,720 --> 00:59:08,250 odjednom, ti algoritmi bi se još 400 ili možda 200 koraka. 955 00:59:08,250 --> 00:59:13,310 >> No, s druge strane, ako smo stvarno dobili pametna, a mi umjesto da imamo sve vas sami računati, 956 00:59:13,310 --> 00:59:15,280 prisjetiti kako je to algoritam radio. 957 00:59:15,280 --> 00:59:17,110 Vi ste svi ustali. Dopustite mi da brzo naprijed na to. 958 00:59:17,110 --> 00:59:20,430 Vi ste svi ustali, što u paru off, onda pola vas sjeo, 959 00:59:20,430 --> 00:59:22,510 pola vas sjeo, pola od vas sjeo, 960 00:59:22,510 --> 00:59:27,350 i na svakoj iteraciji ove petlje od tjedan dana 0, mi prepolovljena problem pri ruci 961 00:59:27,350 --> 00:59:30,040 i otišao do n / 2, a zatim n / 4, a zatim n / 8. 962 00:59:30,040 --> 00:59:35,350 A implikacija toga je da ako još 400 ljudi hodaju u sobu, nije velika stvar, 963 00:59:35,350 --> 00:59:40,120 to će nam trebati jedan rundu, a ne 400 više rundi, a ne 200 više krugova. 964 00:59:40,120 --> 00:59:43,640 I tako se priča mi je rekao, a leđa morao napraviti malo nešto s tim. 965 00:59:43,640 --> 00:59:47,750 Ova crvena crta je ovdje linearno, to je ravno, a to je označeno kao n 966 00:59:47,750 --> 00:59:50,250 jer kao veličina problema raste, 967 00:59:50,250 --> 00:59:54,690 ako je vaš algoritam ili program s kojim ste rješavanje je potrebno n koraka, 968 00:59:54,690 --> 00:59:58,620 možemo ga ucrtati kao pravac u kojem se održava više vremena veći veličine problema. 969 00:59:58,620 --> 01:00:03,280 I twosies pristup, računajući dvije, četiri, šest, osam, još uvijek ravna crta, samo malo bolje. 970 01:00:03,280 --> 01:00:08,440 To traje malo manje vremena, tako da je žuta linija je ispod crvene linije točke za točku. 971 01:00:08,440 --> 01:00:12,580 >> No, čak i bolje je to sveti gral smo zvali logaritamska vrijeme 972 01:00:12,580 --> 01:00:14,830 gdje čak i ako opet smo udvostručiti broj ljudi u sobi, 973 01:00:14,830 --> 01:00:18,240 smo udvostručiti veličinu tog telefonskog imenika od prvog dana klasi, 974 01:00:18,240 --> 01:00:22,310 nije velika stvar, to traje još 1 stranicu suzu, ima jedan više sjeo 975 01:00:22,310 --> 01:00:25,550 kako bi se riješio problem koji je dvostruko veći. 976 01:00:25,550 --> 01:00:27,460 I tako razgovor smo sada dobili početi da se 977 01:00:27,460 --> 01:00:30,380 kako mi zapravo riješiti probleme učinkovito 978 01:00:30,380 --> 01:00:32,510 ako uzmemo u obzir najjednostavniji problema kao što je ovaj? 979 01:00:32,510 --> 01:00:36,210 Pretpostavimo da imamo osam vrata iza kojih su neki brojevi, 980 01:00:36,210 --> 01:00:39,720 a svaki od tih brojeva nije sortiran na bilo koji način, 981 01:00:39,720 --> 01:00:42,830 oni su samo slučajni cijeli, iza tih vrata, 982 01:00:42,830 --> 01:00:47,290 i mi postaviti pitanje kako idete o pronalaženju broj - tko zna - 983 01:00:47,290 --> 01:00:50,250 7 iza tih vrata? 984 01:00:50,250 --> 01:00:53,400 Što bi ti, ljudski, učiniti kako bi se pronašli mi broj 7 985 01:00:53,400 --> 01:00:56,810 ako opet svaka od njih su vrata i vidjeti vrijednost morate otvoriti vrata? 986 01:00:56,810 --> 01:00:59,650 Što bi vaš algoritam se možda? 987 01:00:59,650 --> 01:01:05,310 >> [Nečujno učenik odgovor] >> Dakle, početi s lijeve i otvoriti vrata, otvoriti vrata, otvoriti vrata. 988 01:01:05,310 --> 01:01:08,570 A u najgorem slučaju, koliko dugo će to nam se pronaći broj 7? 989 01:01:08,570 --> 01:01:12,800 I opet, oni nisu sortirani, pa to nije tako lako kao, dobro, ja ću otvoriti vrata 7.. 990 01:01:12,800 --> 01:01:15,240 To bi nas mogla odvesti, maksimalno, 8 korake. 991 01:01:15,240 --> 01:01:19,940 U najgorem slučaju, sedam je slučajno na samom kraju linije vrata, 992 01:01:19,940 --> 01:01:22,090 tako da smo mogli imati probati sve n vrata. 993 01:01:22,090 --> 01:01:24,440 Dakle, opet smo ovdje, čini se da su linearni algoritam. 994 01:01:24,440 --> 01:01:27,030 U stvari, mi je to učinio samo par godina. 995 01:01:27,030 --> 01:01:29,910 Jedan od vaših prethodnika bio izazvan s upravo ova 996 01:01:29,910 --> 01:01:32,050 gdje nismo imali digitalnu verziju, umjesto toga imao ploču 997 01:01:32,050 --> 01:01:33,780 s nekim komada papira na njemu. 998 01:01:33,780 --> 01:01:36,940 I ono što sam mislio da ću učiniti je uzeti brzo se osvrnuti na to kako je otišao, 999 01:01:36,940 --> 01:01:40,760 jedan od najboljih, a možda najviše nezgodnih prilika na pozornici 1000 01:01:40,760 --> 01:01:42,530 imati demonstraciju ovdje na Sanders. 1001 01:01:42,530 --> 01:01:44,000 Imali smo dva reda brojeva. 1002 01:01:44,000 --> 01:01:47,280 Mi samo ćemo gledati na ono što se događa ovdje sa Seanom za sam vrh ovih redaka. 1003 01:01:47,280 --> 01:01:49,660 Ako nitko nikada volonteri u CS50, 1004 01:01:49,660 --> 01:01:52,010 imali smo Sean blagoslov da bi to na kameri, 1005 01:01:52,010 --> 01:01:54,670 tako da on zna da su stotine ljudi su gledajući ovaj sada već godinama. 1006 01:01:54,670 --> 01:01:59,500 No, Sean učinio nevjerojatan posao - ili on učinio -? Na zapravo pronalaženje nam određeni broj. 1007 01:01:59,500 --> 01:02:04,570 >> Dakle, neka je vidjeti kako je riješen ovaj algoritam, tako da ćemo nastaviti ovaj razgovor prije dugo 1008 01:02:04,570 --> 01:02:08,300 kako ćemo naći stvari učinkovito. 1009 01:02:08,300 --> 01:02:12,300 [Malan na video] ja sam skriven iza tih vrata broj 7, 1010 01:02:12,300 --> 01:02:16,710 ali tucked daleko u nekim od tih vrata te su ostali bez negativni brojevi, 1011 01:02:16,710 --> 01:02:19,980 i vaš cilj je da razmišljaju o tom gornjem redu brojeva samo kao niz 1012 01:02:19,980 --> 01:02:22,920 ili samo slijed papirića s brojevima iza njih, 1013 01:02:22,920 --> 01:02:26,960 i vaš cilj je, samo pomoću gornji niz ovdje, naći mi broj sedam. 1014 01:02:26,960 --> 01:02:30,800 I mi se onda ide na kritike kako idete o tome radi. >> Redu. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Pronađite nam broj 7, molim vas. 1016 01:02:36,210 --> 01:02:38,350 [Smijeh] 1017 01:02:41,610 --> 01:02:44,460 [Malan] Ne [smijeh] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [smijeh]. To nije trik pitanje. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Smijeh] 1021 01:03:06,910 --> 01:03:10,760 U ovom trenutku vaš rezultat nije vrlo dobar, tako da možda i zadržati ide. [Smijeh] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Idi na. Iskreno, ja ne mogu pomoći, ali pitam se što čak i razmišljate o tome. [Smijeh] 1024 01:03:25,010 --> 01:03:28,870 Samo gornji red, tako da imaš tri lijevo. Pa me naći sedam. 1025 01:03:28,870 --> 01:03:45,360 [Studenti mrmljajući] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Studenti mrmljajući] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Pljesak] 1029 01:04:01,550 --> 01:04:06,080 >> Dakle, u srijedu ćemo zaroniti u to i više sofisticirane algoritme za pronalaženje stvari. 1030 01:04:06,080 --> 01:04:10,200 Za sada ćemo vas ostaviti s Sean i vidimo se u srijedu. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]