1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Odjeljak Problem Set 2: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Sveučilište Harvard 3 00:00:04,910 --> 00:00:07,410 Ovo je CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Dakle, ja sam Rob. Ja sam viši u Kirkland. Ovo je moja treća godina TFing CS50. 5 00:00:15,770 --> 00:00:22,220 To je prvi put da smo se mijenja iz tradicionalnog predavanje stilu odjeljku, 6 00:00:22,220 --> 00:00:25,610 gdje smo samo vrsta pregled onoga što se dogodilo u predavanju, a onda vi postavljati pitanja, 7 00:00:25,610 --> 00:00:32,250 sada se puno više problema sa sjedištem, gdje ćemo koristiti prostore, a - 8 00:00:32,250 --> 00:00:37,410 Oh, pa ideja je da se ide na taj link sam ti poslao i onda ćete biti u mom svemiru. 9 00:00:37,410 --> 00:00:42,410 Se bilo tko ne imati laptop? Ok. 10 00:00:42,410 --> 00:00:47,050 Tako ćemo biti koristeći ovaj, a mi idemo da se radi probleme živjeti u odjeljku 11 00:00:47,050 --> 00:00:50,740 te ih opisala i figuring out ono što je krivo 12 00:00:50,740 --> 00:00:56,390 i ja bi podići neke kodu, a ja mogu razgovarati o svojim idejama. 13 00:00:56,390 --> 00:01:02,140 Dakle, je li itko imao problema? 14 00:01:02,140 --> 00:01:07,000 Možete razgovarati na strani, a ja ne znam da li ćemo imati razloga za to. 15 00:01:07,000 --> 00:01:12,270 Sada, kao i prethodne supersection, ako ste bili u toj klasi, vi znate što je to o tome. 16 00:01:12,270 --> 00:01:19,200 Na sve P seta tamo će biti ove sekcije. 17 00:01:19,200 --> 00:01:22,550 Dakle, P-set 2, specifikacije, mislim da ga je vidio na P-1 set već. 18 00:01:22,550 --> 00:01:27,400 Ali možemo pogledati P-set 2 za ono što ćemo da se ide preko danas. 19 00:01:27,400 --> 00:01:29,460 I vidjet ćete dio pitanja. 20 00:01:29,460 --> 00:01:37,530 Dakle, ovo će biti sve P-seta, tamo ću biti dio pitanja. 21 00:01:37,530 --> 00:01:41,340 Do sada smo je rekao, "razmotriti to prilika za vježbanje." 22 00:01:41,340 --> 00:01:44,940 Nećete biti zatraženo da podnese ovaj program. 23 00:01:44,940 --> 00:01:48,480 Ideja je da se oni trebali vrste pomoći da započnete s problemom setu. 24 00:01:48,480 --> 00:01:53,220 Mislim na Hacker izdanju, mnogi od njih su trebali biti samo nove, zanimljive stvari za naučiti. 25 00:01:53,220 --> 00:01:58,590 Oni ne smiju biti izravno odnosi se na problem seta. 26 00:01:58,590 --> 00:02:01,810 I upravo sada nećemo imati ih poslati, ali u teoriji, 27 00:02:01,810 --> 00:02:07,480 za kasnije problema seta, možda ćete ih poslati, i na taj način može doći do dijela 28 00:02:07,480 --> 00:02:10,380 ili gledati odjeljak da biste dobili odgovore, ili ih možete dobiti na svoju vlastitu 29 00:02:10,380 --> 00:02:16,350 ako se ne osjećate kao uživanje moju prisutnost. 30 00:02:16,350 --> 00:02:21,010 Dakle - Mislim da je to prvi. 31 00:02:21,010 --> 00:02:29,280 Oh. Također, pod tim dijelovima pitanja također smo vam postaviti pitanja o gaćice. 32 00:02:29,280 --> 00:02:33,440 Pa mislim, u teoriji, ti si trebao gledati to prije dolaska u odjeljku, 33 00:02:33,440 --> 00:02:38,550 ali to je u redu, ako ne, mi ćemo ići preko njih ionako. 34 00:02:38,550 --> 00:02:42,590 Dakle, možemo početi s tim: "Kako ne, a petlja se razlikuju od ne-while petlje? 35 00:02:42,590 --> 00:02:46,210 Kada je potonji osobito korisno? " 36 00:02:46,210 --> 00:02:49,390 Pa tko imati bilo -? 37 00:02:49,390 --> 00:02:52,730 [Studentski] do-while petlja će uvijek izvršiti barem jednom. 38 00:02:52,730 --> 00:03:02,950 Da. Tako da je razlika. While petlja - Ja ću upravo to učiniti ovdje - while petlja, imamo stanje 39 00:03:02,950 --> 00:03:19,760 ovdje, dok ne-a, nemate stanje dok ne dođemo ovdje dolje. 40 00:03:19,760 --> 00:03:24,130 I tako, kad je vaš program je izvršenje, i to dobiva while petlje, 41 00:03:24,130 --> 00:03:26,380 odmah provjerava ako je to uvjet istinit. 42 00:03:26,380 --> 00:03:30,710 Ako taj uvjet nije istina, to će samo preskočiti petlju cijelosti. 43 00:03:30,710 --> 00:03:34,390 Do-while petlja, kao program izvršavanja, to dobiva "učiniti." 44 00:03:34,390 --> 00:03:37,920 Ništa se ne događa u ovom trenutku, samo nastavlja izvršenja. 45 00:03:37,920 --> 00:03:42,690 Onda kada ga hitove "vrijeme", ako je uvjet istinit, to će povratna petlja i učiniti ga opet 46 00:03:42,690 --> 00:03:46,730 i opet i opet sve dok uvjet ne vrijedi i onda samo pada kroz. 47 00:03:46,730 --> 00:03:50,600 Dakle, razlika je, da se to može preskočiti od samog početka. 48 00:03:50,600 --> 00:03:56,770 To nužno izvršava se jednom, a zatim se može izvršiti više puta, ako stanje je još uvijek istina. 49 00:03:56,770 --> 00:04:03,720 Dakle, petlja, a samo će to učiniti jednom, ili - petlju dok - ne možemo ga morati učiniti na sve, 50 00:04:03,720 --> 00:04:07,900 jer čim smo doći do njega, ako je uvjet false, samo ćemo preskočiti pravo nad njim. 51 00:04:07,900 --> 00:04:11,770 Dok ne-while petlja, mi ćemo ga izvršiti jednom, nužno. 52 00:04:11,770 --> 00:04:14,560 Tada, kad dođemo do stanja, mi provjeriti da li je to istina ili laž. 53 00:04:14,560 --> 00:04:19,790 Ako je to istina, mi ćemo to učiniti opet, ako je lažna, samo ćemo nastaviti ići. 54 00:04:19,790 --> 00:04:24,680 Dakle, kada je potonji posebno korisna? 55 00:04:24,680 --> 00:04:31,190 Dakle, ja mogu reći da je u cijelosti od četiri godine, tri godine, što god, 56 00:04:31,190 --> 00:04:38,780 da sam programiranju, koristio sam to, kao, pod 10 puta. 57 00:04:38,780 --> 00:04:43,140 I vjerojatno pet od njih su u CS50 kada smo uvođenja učiniti-Dok petlje. 58 00:04:43,140 --> 00:04:47,510 Dakle, kada ste koristili učiniti-a petlje? 59 00:04:47,510 --> 00:04:49,510 Kada je - Da? 60 00:04:49,510 --> 00:04:53,180 [Studentski] Kada pokušavate dobiti korisničkog unosa, ili nešto želite provjeriti - 61 00:04:53,180 --> 00:04:59,700 Da. Dakle, učiniti-a petlje, sfaust je jedan veliki. 62 00:04:59,700 --> 00:05:03,160 To je razlog zašto se na prvih nekoliko problematičnih seta, kada želite pitati korisnika, kao što su, 63 00:05:03,160 --> 00:05:08,520 "Daj mi niz", što se ne može nastaviti dok ne dobijete taj niz. 64 00:05:08,520 --> 00:05:12,980 I tako, nužno, treba tražiti niza barem jednom. 65 00:05:12,980 --> 00:05:16,950 Ali onda ako su odgovorili nešto loše, onda morate petlje natrag i ponovno pitati. 66 00:05:16,950 --> 00:05:20,810 No, osim korisničkog unosa, to je vrlo rijetko da sam naići na slučaj 67 00:05:20,810 --> 00:05:27,170 gdje želim petlje "barem jednom", ali možda i više. 68 00:05:27,170 --> 00:05:33,370 Pitanja ili -? Je li netko koristi ne-while petlja gdje drugdje? 69 00:05:33,370 --> 00:05:36,780 Ok. Dakle, sljedeći je, "Što neprijavljeni identifikator 70 00:05:36,780 --> 00:05:43,310 obično ukazuju ako outputted po jeka? " 71 00:05:43,310 --> 00:05:47,380 Pa kakav koda sam mogao napisati da se 'neprijavljenog identifikator?' 72 00:05:47,380 --> 00:05:49,550 [Studentski] To je x = 2? 73 00:05:49,550 --> 00:05:52,650 Dakle, mi samo možemo ga probati ovdje, x = 2. 74 00:05:52,650 --> 00:06:04,830 Mi ćemo pokrenuti ovo - Oh, nisam ga kliknite. Dakle, ovdje smo dobili - sve u redu. 75 00:06:04,830 --> 00:06:07,100 "Korištenje neprijavljenog identifikator x." 76 00:06:07,100 --> 00:06:11,610 Tako da je nedeklarirani identifikator, promjenjiva. 77 00:06:11,610 --> 00:06:13,910 To često će pozvati varijablu identifikator. 78 00:06:13,910 --> 00:06:17,300 Dakle, to možda ne znaju da je zapravo promjenjiva, to ne znam što je to. 79 00:06:17,300 --> 00:06:19,380 Dakle, to je identifikator. 80 00:06:19,380 --> 00:06:26,060 Pa zašto je to neprijavljeni? Da. 81 00:06:26,060 --> 00:06:32,190 Dakle, da bude jasno na terminologiju, deklaracija varijable 82 00:06:32,190 --> 00:06:37,360 je kad ste rekli "int x" ili "string y," što god. 83 00:06:37,360 --> 00:06:41,910 Inicijalizacije varijabli, ili dodjeljivanje varijable, 84 00:06:41,910 --> 00:06:44,510 je kad ste rekli "x = 2". 85 00:06:44,510 --> 00:06:52,950 Tako možemo učiniti to u odvojenim koracima, int x, x = 2, a do - možemo imati hrpu stvari ovdje - 86 00:06:52,950 --> 00:07:00,350 ali dok se to dogodi linija, x je još uvijek nepokrenute, ali to je bio proglašen. 87 00:07:00,350 --> 00:07:06,760 I tako smo očito može to učiniti u jednoj liniji, a sada smo proglašenja i pokreće. 88 00:07:06,760 --> 00:07:10,730 Pitanja? 89 00:07:10,730 --> 00:07:18,390 I konačno, "Zašto je Cezar Cipher nije jako siguran?" 90 00:07:18,390 --> 00:07:23,830 Tako je prvi, ne bilo tko želi reći ono što je Cezar Cipher je? 91 00:07:23,830 --> 00:07:28,100 [Studentski] Cezar Cipher samo da ste preslikati, možete prebaciti svako slovo, 92 00:07:28,100 --> 00:07:34,420 Određeni broj pisama ići preko, i premjestiti natrag preko, a to nije vrlo siguran, jer 93 00:07:34,420 --> 00:07:42,260 tu je samo 26 moguće opcije, a vi samo morate probati svaki jedan od onih dok ste ga dobili. 94 00:07:42,260 --> 00:07:45,470 Oh. Dakle, ja bi trebao ponoviti? 95 00:07:45,470 --> 00:07:51,600 The Cezar Cipher, it's - Mislim, da ću se baviti s njom o problemima koji vas - 96 00:07:51,600 --> 00:07:56,110 ili valjda standardni izdanje problema setu koji nije na hakerske izdanju. 97 00:07:56,110 --> 00:08:01,550 Dakle, na standardnom izdanju na problem seta, možete dobiti poruku poput "Hello, svijet," 98 00:08:01,550 --> 00:08:08,410 a imate i broj kao šest, a vi se tu poruku, a svaki pojedinac lik, 99 00:08:08,410 --> 00:08:11,310 ga rotirati po šest mjesta u abecedi. 100 00:08:11,310 --> 00:08:16,560 Dakle 'h' u halo postati h-i-j-k-l-m-n. 101 00:08:16,560 --> 00:08:19,600 Dakle, prvo slovo bi n. Mi radimo istu stvar s e. 102 00:08:19,600 --> 00:08:23,530 Ako imamo, kao što su, z ili tako nešto, onda ćemo završiti natrag oko '.' 103 00:08:23,530 --> 00:08:29,280 Ali svaki lik dobiva cikliran 6 znakova kasnije u abecedi, a to nije vrlo siguran 104 00:08:29,280 --> 00:08:35,440 jer postoje samo 26 mogućnosti za koliko načina možete mogla završiti jedno slovo. 105 00:08:35,440 --> 00:08:42,919 Dakle, možete samo pokušati sve 26 od njih i, vjerojatno, za dovoljno dugo poruke, 106 00:08:42,919 --> 00:08:46,860 samo jedan od tih mogućih 26 stvari će biti čitljiva, 107 00:08:46,860 --> 00:08:50,300 i čitak jedan će biti izvorna poruka. 108 00:08:50,300 --> 00:08:56,240 Dakle, to nije vrlo dobar način kriptiranje ništa at svi. 109 00:08:56,240 --> 00:08:59,070 Nevezano za one gaćice, "Što je funkcija?" 110 00:08:59,070 --> 00:09:03,370 Dakle, ono što je funkcija? Da. 111 00:09:03,370 --> 00:09:11,640 [Studentski] To je kao zaseban dio koda koji možete nazvati proći i onda dobiti povratnu vrijednost, što god. 112 00:09:11,640 --> 00:09:18,160 Da. Dakle, ja ću ga odgovorite i odgovaranja sljedeći - ili ponoviti također samo odgovorite na sljedeći jedan. 113 00:09:18,160 --> 00:09:22,410 Možete koristiti funkcije, umjesto samo kopirati i zalijepiti kôd iznova i iznova. 114 00:09:22,410 --> 00:09:27,200 Dovoljno je uzeti taj kod, stavi ga u fuction, a onda samo mogao nazvati funkciju 115 00:09:27,200 --> 00:09:29,870 gdje god su kopiranje i lijepljenje. 116 00:09:29,870 --> 00:09:33,350 Dakle funkcije su korisne. 117 00:09:33,350 --> 00:09:35,860 Dakle, sada ćemo napraviti stvarnih problema. 118 00:09:35,860 --> 00:09:46,490 Prvi. Tako je ideja prvog jedna je, da prođe to niz, i bez obzira na - 119 00:09:46,490 --> 00:09:52,060 ili to reći sve malim slovima? To ne kažu sve su mala slova. 120 00:09:52,060 --> 00:09:57,730 Dakle, poruka može biti ništa, i - oh ne. To čini. 121 00:09:57,730 --> 00:10:01,610 "Radi jednostavnosti, možete pretpostaviti da će korisnik samo ulaz mala slova i razmake." 122 00:10:01,610 --> 00:10:08,180 Dakle, prolazimo ga poruke sa samo malim slovima, a onda ćemo se izmjenjivati 123 00:10:08,180 --> 00:10:15,450 između kapitala i mala - mi promijeniti string biti glavni i mala slova, naizmjenično. 124 00:10:15,450 --> 00:10:22,920 Dakle, prije nego što smo vam dati drugi čak zaroniti u problem, 125 00:10:22,920 --> 00:10:32,420 što je prva stvar koju trebamo učiniti? 126 00:10:32,420 --> 00:10:36,900 Oh, što sam samo kliknite na? Oh, upravo sam kliknuo na e-mail ovdje. 127 00:10:36,900 --> 00:10:42,870 Dakle, prva stvar koju trebate učiniti - tražim na krivom jedan? 128 00:10:42,870 --> 00:10:49,320 Je li to dio ove jedne? 129 00:10:49,320 --> 00:10:51,320 Ne, oni su još uvijek tamo, iako. 130 00:10:51,320 --> 00:10:55,160 Ok, još uvijek ovdje. 131 00:10:55,160 --> 00:11:03,160 Sada ne možemo pretpostaviti -? Da. Ovdje ne možemo pretpostaviti da je to samo mala i prostorima. 132 00:11:03,160 --> 00:11:07,770 Dakle, sada se moramo nositi s činjenicom da su slova može biti što god želimo da budu. 133 00:11:07,770 --> 00:11:11,910 I tako je prva stvar koju želite učiniti je samo dobili poruku. 134 00:11:11,910 --> 00:11:19,790 Mi samo trebamo dobiti niz, niz s = GetString, ok. 135 00:11:19,790 --> 00:11:24,890 Sada je taj problem, postoji nekoliko načina na koje to rade. 136 00:11:24,890 --> 00:11:29,840 No, mi smo idući u želite koristiti bitovni operatori ovdje. 137 00:11:29,840 --> 00:11:35,280 Postoje ljudi koji ni nisu bili na supersection, 138 00:11:35,280 --> 00:11:37,480 ili nešto, a ne znam što bitovni operatori su? 139 00:11:37,480 --> 00:11:41,710 Ili kako se oni odnose ASCII na bilo koji način? 140 00:11:41,710 --> 00:11:45,650 [Studentski] Nisam bio na supersection, ali ja znam što bitovni operatori. 141 00:11:45,650 --> 00:11:49,560 Ok. Pa onda ja ne moram ići preko osnove od njih, ali ja ću objasniti 142 00:11:49,560 --> 00:11:51,830 što ćemo htjeti koristiti ovdje. 143 00:11:51,830 --> 00:11:59,680 Dakle, '': Binarni prikaz kapitala A, broj je 65. 144 00:11:59,680 --> 00:12:07,560 Samo ću pogledati - 41 će biti 01.000.001. 145 00:12:07,560 --> 00:12:14,170 Tako da bi trebao biti 65 u decimalno, pa to je binarni prikaz A. znakova grada 146 00:12:14,170 --> 00:12:19,440 Sada, binarni prikaz karaktera mala slova 'a' 147 00:12:19,440 --> 00:12:33,350 će biti ista stvar, gotovo. Je li to - 6, yeah. Ovo je pravo. 148 00:12:33,350 --> 00:12:37,670 Dakle, binarni kapital, binarni mala '.' 149 00:12:37,670 --> 00:12:43,940 Dakle primijetiti da razlika između te '' je to jedan bitni. 150 00:12:43,940 --> 00:12:49,440 I to se događa da se 32-bitni je malo predstavlja broj 32. 151 00:12:49,440 --> 00:12:53,910 I to ima smisla budući da je 65; '' je 97. 152 00:12:53,910 --> 00:12:56,610 Razlika između njih je 32. 153 00:12:56,610 --> 00:13:03,770 Dakle, sada znamo da može pretvoriti od A do A 'uzimanje 154 00:13:03,770 --> 00:13:09,710 i bitovni ga ORing, sa - da izgleda kao jedan. 155 00:13:09,710 --> 00:13:20,900 Ovo je bitovni OR, s 00100000, te da će nam daju '.' 156 00:13:20,900 --> 00:13:26,850 I mi možemo dobiti od 'A' do koje bitovne ANDing 157 00:13:26,850 --> 00:13:33,700 s 11, 0 u tom mjestu, 11.111. 158 00:13:33,700 --> 00:13:43,840 Dakle, ovo će nam dati točno ono što '' bio, ali poništiti ovaj individualni malo, 159 00:13:43,840 --> 00:13:50,070 tako da ćemo morati 01000001, ja ne znam da li sam u pravu broje. 160 00:13:50,070 --> 00:13:56,750 No, ova tehnika bitovne ORing dobiti od kapitala u mala slova, 161 00:13:56,750 --> 00:14:02,080 i bitovni ANDing dobiti od malih slova na kapital nije ekskluzivno A. 162 00:14:02,080 --> 00:14:06,510 Sve od slova K vs K, Z vs z 163 00:14:06,510 --> 00:14:10,080 sve od njih se ide samo da se razlikuju po tom jednom malo. 164 00:14:10,080 --> 00:14:16,290 I tako da se može koristiti za promjenu od bilo malo slovo na bilo slovom i obrnuto. 165 00:14:16,290 --> 00:14:26,670 Ok. Dakle, jednostavan način za dobivanje toga - pa umjesto da 166 00:14:26,670 --> 00:14:32,170 pisati što god je 1011111 - jednostavan način predstavlja ovaj broj, i to ne jednom 167 00:14:32,170 --> 00:14:39,710 da sam otišao preko u supersection, ali tilda (~) je još jedan bitovni operator. 168 00:14:39,710 --> 00:14:42,520 Što ~ ne je to izgleda u bitnom reprezentacije. 169 00:14:42,520 --> 00:14:45,630 Uzmimo bilo koji broj. 170 00:14:45,630 --> 00:14:53,130 Ovo je samo neki binarni broj, a ono ~ ne to je samo flips sve bita. 171 00:14:53,130 --> 00:15:00,630 Dakle, ovo je bila jedna, sad 0, to je 0, sada 1, 010.100. 172 00:15:00,630 --> 00:15:08,320 Dakle, to je sve ~ ne. Dakle, 32 će biti broj - dobili osloboditi od toga - 173 00:15:08,320 --> 00:15:23,320 pa 32 će biti broj 00100000, pa ~ ovo će biti 174 00:15:23,320 --> 00:15:29,980 taj broj se da sam ovdje ANDed 'A' s. 175 00:15:29,980 --> 00:15:35,600 Da li su svi vidjeli da? To je prilično uobičajena, kao kada želite shvatiti 176 00:15:35,600 --> 00:15:40,740 za kasnije stvari da bismo mogli biti viđenje, kada želimo vidjeti ako - 177 00:15:40,740 --> 00:15:44,710 ili želimo sve, svaki zalogaj set osim jednog 178 00:15:44,710 --> 00:15:47,910 imaju tendenciju da ne ~ o malo da mi ne želimo postaviti. 179 00:15:47,910 --> 00:15:53,090 Dakle, mi ne želimo da 32-bitni skup, pa mi ~ od 32. 180 00:15:53,090 --> 00:15:57,790 Ok. Dakle, možemo koristiti sve one ovdje. 181 00:15:57,790 --> 00:16:03,000 U redu, tako da je u redu ako ne završite, polako će hodati preko zajedno, 182 00:16:03,000 --> 00:16:11,870 ili hodati preko toga, tako - kroz to. Šetnja kroz to. 183 00:16:11,870 --> 00:16:20,790 Dakle, imamo niz, a mi želimo da petlja preko svakog lika u tom nizu i učiniti nešto za njega. 184 00:16:20,790 --> 00:16:26,710 Pa kako ćemo petlje preko niza? Što bismo trebali koristiti? 185 00:16:26,710 --> 00:16:30,980 Neću to učiniti ovdje. Da. 186 00:16:30,980 --> 00:16:42,940 Dakle, imam iteratora, a on je to rekao, ali kako da znam koliko su likovi u nizu? 187 00:16:42,940 --> 00:16:47,030 Strlen (a), a zatim i + +. 188 00:16:47,030 --> 00:16:49,860 Dakle, ono što sam učinio ovdje nije najbolji način obavljanja stvari. 189 00:16:49,860 --> 00:16:51,860 Zna li netko zašto? 190 00:16:51,860 --> 00:16:55,290 Budući da ste provjeru jezik niza svaki put. 191 00:16:55,290 --> 00:17:06,859 Tako ćemo se želite preseliti strlen, mogao bih reći ovdje, int duljina = strlen (a), 192 00:17:06,859 --> 00:17:11,900 i onda ne ja 00:17:20,410 Također sam mogao učiniti int i = 0, duljina = strlen (s). 194 00:17:20,410 --> 00:17:25,010 I tako je to nešto bolje, jer sada sam ograničen opseg 195 00:17:25,010 --> 00:17:29,150 varijabilne duljine samo to 'za' petlje, umjesto da ga izjavljujući prije 196 00:17:29,150 --> 00:17:34,990 i da uvijek postoji, au slučaju da niste uhvatiti zašto je to loše, 197 00:17:34,990 --> 00:17:39,410 ili zašto originalni je bio loš, it's - početak u for petlji. 198 00:17:39,410 --> 00:17:43,380 Provjerio sam stanje. Je I 00:17:46,790 Dakle, dužina s, ajmo raditi sa "halo" cijelo vrijeme. 200 00:17:46,790 --> 00:17:49,670 Dakle duljina s, h-e-l-l-o. Dužina je pet. 201 00:17:49,670 --> 00:17:57,580 Tako i = 0, dužina je 5, tako da sam nije <5, pa je petlja nastavlja. 202 00:17:57,580 --> 00:18:02,750 Onda idemo opet. Mi provjeriti stanje. Je I 00:18:08,390 Tako ćemo provjeriti duljinu bok. H-e-l-l-o. To je pet, ja ne <5, tako ćemo nastaviti ponovno. 204 00:18:08,390 --> 00:18:13,330 Tako smo se izračuna, mi smo računajući halo, za svaku iteraciju petlje, 205 00:18:13,330 --> 00:18:17,380 čak mislili da nikada neće promijeniti, to uvijek će biti pet. 206 00:18:17,380 --> 00:18:22,530 Tako smo samo sjetiti pet up front, a sada je sve bolje. 207 00:18:22,530 --> 00:18:24,990 Dakle Ponavljanje cijelom nizu. 208 00:18:24,990 --> 00:18:31,470 Što želimo učiniti za svakog lika u nizu? 209 00:18:31,470 --> 00:18:38,510 [Studentski govoreći, nerazumljivo] 210 00:18:38,510 --> 00:18:47,000 Da. Dakle, ako je lik non-abecedno, onda mi samo želimo preskočiti preko njega. 211 00:18:47,000 --> 00:18:52,300 Budući da smo samo stalo slovima abecede, ne možemo kapitalizirati broj. 212 00:18:52,300 --> 00:19:10,850 Pa kako možemo to učiniti? Dakle, naš uvjet, pa ako želimo nešto - provjeriti da li je to po abecedi. 213 00:19:10,850 --> 00:19:14,060 Pa kako ćemo provjeriti to? 214 00:19:14,060 --> 00:19:18,720 [Studentski] Vi samo možete koristiti funkciju je alfa. 215 00:19:18,720 --> 00:19:23,160 Je li to uključeno u bilo koji od ovih, ili bilo uključuju poput, char.h ili nešto drugo? 216 00:19:23,160 --> 00:19:32,710 Nemojmo koristiti je alfa funkcija, i koristiti eksplicitni - tako da smo s [i], 217 00:19:32,710 --> 00:19:40,460 da je osmi lik s, sjetite se da string niz znakova, 218 00:19:40,460 --> 00:19:43,180 tako osmi lik s. 219 00:19:43,180 --> 00:19:49,280 Sada, ako je to slovo, znamo da mora biti u određenom rasponu. 220 00:19:49,280 --> 00:19:54,370 A što je to područje? 221 00:19:54,370 --> 00:20:07,860 Da. Dakle, ako je [i] je ≥ 65, a S [i] je ≤ 90, što bih trebao učiniti umjesto toga? 222 00:20:07,860 --> 00:20:18,470 Da. Dakle, vi apsolutno nikada ne bi trebao ni znati ASCII vrijednosti ništa ikad. 223 00:20:18,470 --> 00:20:25,640 Nikada mislite o brojevima 65, 90, 97 i 102, ili što god to je. 224 00:20:25,640 --> 00:20:32,470 Ne trebate - 112 -? Ne trebate znati one uopće. To je u redu previše. 225 00:20:32,470 --> 00:20:41,940 Koristite samo jednom citat znakove, jednostruki navodnici konstante. Dakle, '', a manje od 90 'Z.' 226 00:20:41,940 --> 00:20:47,930 A to je znatno bolje - ne znam off vrhu moje glave da je z 90. 227 00:20:47,930 --> 00:20:52,690 Ja znam off vrhu moje glave da 'Z' je glavni Z. 228 00:20:52,690 --> 00:21:02,100 Dakle, koliko god je to u rasponu od kapitala do grada Z, ili možemo provjeriti malim slovima, 229 00:21:02,100 --> 00:21:17,010 Ili ako je u rasponu od ≥ 'a' i ≤ z. 230 00:21:17,010 --> 00:21:19,010 Tako da je naš uvjet. 231 00:21:19,010 --> 00:21:22,520 Stil za gdje staviti te stvari varira. 232 00:21:22,520 --> 00:21:29,520 Učinit ću to ovako. 233 00:21:29,520 --> 00:21:31,520 Sada, što želimo učiniti? 234 00:21:31,520 --> 00:21:39,530 Znamo da je ovo pismo je lik, abecedni lik. 235 00:21:39,530 --> 00:21:46,270 Dakle, trebamo naizmjenično li to sada trebalo biti slovo ili malo slovo. 236 00:21:46,270 --> 00:21:48,820 Kako ćemo pratiti od kojih je jedna želimo da bude? 237 00:21:48,820 --> 00:21:55,520 [Studentski glasovi, nerazumljivih] 238 00:21:55,520 --> 00:21:59,150 Dakle, da, ali dopustite mi da provjerim. 239 00:21:59,150 --> 00:22:04,910 Modul 0-2 je rekao, bio je prijedlog izbačen, i slažem se s tim. 240 00:22:04,910 --> 00:22:11,780 Osim najave da, kao što je - je li to slučaj? Da. 241 00:22:11,780 --> 00:22:18,270 To je svaki drugi, ali ne možemo modul 2 od ja, ili ja mod 2, jer 242 00:22:18,270 --> 00:22:22,950 primijetiti da je E kapitala i '' je mala? No, tu je prostor odvajajući ih? 243 00:22:22,950 --> 00:22:27,150 Dakle, oni će biti isti mod 2, ali oni su različiti slučajevi. 244 00:22:27,150 --> 00:22:29,150 [Studentski pitanje, nerazumljivo] 245 00:22:29,150 --> 00:22:34,690 Da. Dakle, mi smo samo će zadržati računati. 246 00:22:34,690 --> 00:22:38,730 Također smo mogli učiniti da se ovdje, ako smo htjeli, da bi dobili malo nezgrapan 247 00:22:38,730 --> 00:22:41,300 u for petlji deklaracija, a ja ću ga staviti ovdje. 248 00:22:41,300 --> 00:22:48,840 Dakle, int count = počinje na 0. 249 00:22:48,840 --> 00:22:54,070 I tako sada, ja ću brojati koliko abecedni likovi koje smo imali. 250 00:22:54,070 --> 00:22:59,550 Dakle, mi neminovno idemo brojati + + jer smo pronašli još jedan slovo. 251 00:22:59,550 --> 00:23:09,130 Ali, tako da sada govoriš ako count mod 2. 252 00:23:09,130 --> 00:23:12,590 Pa što ako broj mod 2? Oh. Učinit ću == 0 za sada. 253 00:23:12,590 --> 00:23:21,740 Također ćemo ići preko toga. Dakle, ako broj mod 2 == 0, što onda? 254 00:23:21,740 --> 00:23:27,830 [Studenti odgovor, nerazumljivih] 255 00:23:27,830 --> 00:23:32,750 Dakle, želimo to završiti velikim slovima. 256 00:23:32,750 --> 00:23:37,520 Postoje dva slučaja, velika i mala slova su dva slučaja. 257 00:23:37,520 --> 00:23:40,990 Dakle, ako smo u malim slovima trebamo učiniti veliko. 258 00:23:40,990 --> 00:23:43,710 Ako je to veliko ne trebamo učiniti ništa. 259 00:23:43,710 --> 00:23:50,760 No, postoji način - shouldn't su zrcaljeno - 260 00:23:50,760 --> 00:23:54,800 da mi ni ne treba provjeriti da li je to veliko ili malo slovo? 261 00:23:54,800 --> 00:24:02,240 Što možemo učiniti kako bi uvijek bili sigurni da ćemo uvijek završiti na velikim slovima? 262 00:24:02,240 --> 00:24:07,830 Dakle primijetiti ono što smo učinili za malim slovom 'A'; što ako nismo tu istu stvar točno u velika slova? 263 00:24:07,830 --> 00:24:11,900 Da li velika slova A promjena, ili radi promjene vrijednosti? 264 00:24:11,900 --> 00:24:23,100 Da. Dakle, bilo slovo bitovni ANDed s ~ 32 će biti da je isti veliko lik 265 00:24:23,100 --> 00:24:29,220 jer za bilo velikih slova 32. malo nije postavljen. 266 00:24:29,220 --> 00:24:40,920 Dakle, ako želimo dovesti karakter s [i], želimo da postane mala ili velika slova. 267 00:24:40,920 --> 00:24:46,890 Dakle, ako je to mala, to je sada veliko, ako je to veliko, to je još uvijek veliko, i to je to. 268 00:24:46,890 --> 00:24:54,290 Rekao sam to u supersection: Možete koristiti 32 ako želite, ali ja imaju tendenciju da vole raditi 'A' -, 269 00:24:54,290 --> 00:25:01,150 umjesto samo običan 32, jer to može biti bilo koji drugi bitni. 270 00:25:01,150 --> 00:25:03,610 Nakon 32-bitni, to može biti bilo koji od njih, ili ne bismo imali dovoljno 271 00:25:03,610 --> 00:25:05,840 brojevi da predstavljaju sve znakove. 272 00:25:05,840 --> 00:25:09,110 Dakle, ako ste dobili 32 zalogaj, to bi mogao biti 64 bitni, to bi mogao biti 128 bitna. 273 00:25:09,110 --> 00:25:13,990 Svaka od tih bitova mogao biti malo da razlikuje velika i mala slova. 274 00:25:13,990 --> 00:25:18,350 Ja ne treba da znaju da je to 32-bitni. 275 00:25:18,350 --> 00:25:27,130 Ja mogu koristiti ovu 'A' - da bi dobili malo da se razlikuje između dviju 276 00:25:27,130 --> 00:25:33,000 bez potrebe da se oslanjaju na čarobnu brojem koji je 32. 277 00:25:33,000 --> 00:25:38,770 I tako sada, drugo računati je bilo čudno, pa ono što želim učiniti? 278 00:25:38,770 --> 00:25:43,920 [Studentski odgovore, nerazumljivo] 279 00:25:43,920 --> 00:25:45,920 [Studentski] Što je to? 280 00:25:45,920 --> 00:25:49,850 Ja ću to učiniti u jednoj sekundi. 281 00:25:49,850 --> 00:25:55,690 Pa sad ako želim - želim da biste bili sigurni lik je sada mala, 282 00:25:55,690 --> 00:26:04,140 i tako ja mogu ili 32, a 32 znači '' - A. 283 00:26:04,140 --> 00:26:06,510 Ali obavijest, po istom obrazloženju kao i prethodni, da ako 284 00:26:06,510 --> 00:26:11,670 Pismo je već mala, onda ORing po 32 samo drži mala slova. 285 00:26:11,670 --> 00:26:16,220 To se nije promijenilo izvorni karakter. 286 00:26:16,220 --> 00:26:19,910 Ali sada nemam izbjeći govoreći: "Ako je to mala, samo zaboraviti o tome, 287 00:26:19,910 --> 00:26:23,650 ako je to veliko, onda ga promijeniti. " 288 00:26:23,650 --> 00:26:26,900 To je puno više prikladan za to. 289 00:26:26,900 --> 00:26:33,190 [Studentski] Bi da strategija oduzimanjem velikim slovima od malim slovom rada ako to nisu bili 32? 290 00:26:33,190 --> 00:26:35,330 Ako je to, kao, 34 ili nešto drugo? 291 00:26:35,330 --> 00:26:41,840 Dakle, morate znati da je razlika između dva je -? >> 1 malo. 292 00:26:41,840 --> 00:26:49,840 To bi moglo biti više od jednog bita, dok sve bita ispod ovom položaju su isti. 293 00:26:49,840 --> 00:26:58,500 Dakle, trebamo barem 26 znakova - ili, postoji 26 znakova. 294 00:26:58,500 --> 00:27:04,590 Dakle, trebamo barem 26 brojeva koji predstavljaju razliku - 295 00:27:04,590 --> 00:27:07,650 Razlika između A i 'a' mora biti najmanje 26, 296 00:27:07,650 --> 00:27:10,760 inače ne bismo zastupa sve kapitalne brojeve. 297 00:27:10,760 --> 00:27:18,630 To znači da, ako ćemo početi na jedan, to će koristiti sve ove bita, 298 00:27:18,630 --> 00:27:23,900 svih tih prvih 5 bita, da predstavljaju sve do Z. 299 00:27:23,900 --> 00:27:32,170 Zato sljedeći malo, ili je ovo malo, sljedeći malo je onaj koji je izabran za razlikovanje i '.' 300 00:27:32,170 --> 00:27:40,930 To je također razlog zašto, u ASCII tablici, postoji pet simboli odvajanje velikih slova od malih slova. 301 00:27:40,930 --> 00:27:49,050 Od onih koji su simboli, dodatni 5 koji donosi 32 se razlika između njih. 302 00:27:49,050 --> 00:27:51,840 [Studentski] Tako smo mogli to učiniti, jer je ASCII je dizajnirana na taj način. 303 00:27:51,840 --> 00:27:57,280 Da. Ali ASCII - razlika također može biti i od tih bitova. 304 00:27:57,280 --> 00:28:12,040 Kao, ako su bili 10000001, a '' bio 11100001 - Zaboravio sam, što god. 305 00:28:12,040 --> 00:28:18,100 Ali, ako je to bilo to, onda smo još uvijek mogli koristiti 'A' - A. 306 00:28:18,100 --> 00:28:22,650 To je upravo razlika između te '' još uvijek ti dva bita. 307 00:28:22,650 --> 00:28:32,240 Mislim da je napisano 48. Je li to 32 + 64? Mislim da je to? 308 00:28:32,240 --> 00:28:40,160 To će i dalje biti dva bita; svaki lik, sviđa, Z i z, K i k 309 00:28:40,160 --> 00:28:45,160 oni će i dalje imati iste točne bita postavljena osim za one dvije bita. 310 00:28:45,160 --> 00:28:48,870 Dakle, koliko god da je uvijek istina, bez obzira na to jesmo li pomoću ASCII ili neki drugi sustav, 311 00:28:48,870 --> 00:28:53,050 dokle god postoji samo skup broj bitova koji se razlikuju za svaki lik, 312 00:28:53,050 --> 00:28:55,050 onda to radi u redu. 313 00:28:55,050 --> 00:29:06,110 To je samo da 32 je bio postavljen, jer to je prvi mi eventualno mogao koristiti. >> Cool. 314 00:29:06,110 --> 00:29:14,520 I imaju tendenciju da vole, u slučaju da niste vidjeli, ako blok je samo jedan redak, 315 00:29:14,520 --> 00:29:24,280 možete dobiti osloboditi od vitičastim zagradama, pa sam imaju tendenciju da vole to. 316 00:29:24,280 --> 00:29:34,010 Također, znate kako možemo učiniti stvari kao s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Također možete učiniti s [i] bitovni I = 32. 318 00:29:41,090 --> 00:29:46,400 I bitovni OR = 32. 319 00:29:46,400 --> 00:29:51,490 Također, računati mod 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Pa sjetite se da - neću ga napisati - bilo koji ne-nula vrijednost je istina, i 0 je lažna. 321 00:30:00,900 --> 00:30:07,880 Dakle, "ako broj mod 2 == 0" je isti kao i govoreći: "ako ne računaju mod dvije." 322 00:30:07,880 --> 00:30:11,580 Vjerojatno bih upravo obrnuto linije i rekao, "ako broj mod 2, 323 00:30:11,580 --> 00:30:15,350 Ne ILI 1, drugi ne I 1 ", tako da ne trebam" Ne. " 324 00:30:15,350 --> 00:30:18,650 Ali to radi jednako dobro. 325 00:30:18,650 --> 00:30:25,660 A što drugo mogu učiniti ovdje? 326 00:30:25,660 --> 00:30:29,060 Možete ih kombinirati s ternarni ako ste htjeli, ali onda samo da bih napraviti stvari Messier 327 00:30:29,060 --> 00:30:33,770 a vjerojatno i više teško čitati, pa nećemo to učiniti. 328 00:30:33,770 --> 00:30:37,330 Svatko ima neke druge prijedloge? 329 00:30:37,330 --> 00:30:41,580 Je li to sve problem tražio? Oh yeah. 330 00:30:41,580 --> 00:30:51,070 Dakle, dobili osloboditi od tih praznih redaka, sada ćemo ispisati f,% s se jednom za gudače, 331 00:30:51,070 --> 00:30:56,620 Mi ćemo ispisati f, S. 332 00:30:56,620 --> 00:30:59,330 Sada ćemo ga pokrenuti. Jesam li nešto krivo? 333 00:30:59,330 --> 00:31:03,200 To je \ "; Želim n. 334 00:31:03,200 --> 00:31:07,840 Ok. Sada ćemo ga pokrenuti. Vjerojatno će vikati na mene. 335 00:31:07,840 --> 00:31:11,250 Strlen je string.h. 336 00:31:11,250 --> 00:31:14,290 Dakle, ovo je lijepa stvar o zveka je to vam govori ono što je u, 337 00:31:14,290 --> 00:31:19,140 umjesto GCC koji samo kaže: "Hej, zaboravio si nešto, ne znam što je to." 338 00:31:19,140 --> 00:31:29,220 No, to će mi reći, "Vi značilo da su string.h." 339 00:31:29,220 --> 00:31:32,130 Dakle, nisam brz za sve, tako da se ne govori ništa. 340 00:31:32,130 --> 00:31:42,540 No, mi ćemo učiniti njihov primjer, "Hvala četiri je dodati". 341 00:31:42,540 --> 00:31:47,880 To izgleda dobro. Hura. 342 00:31:47,880 --> 00:31:52,370 Dakle povratku u vaš glavni, ja gotovo nikad to učiniti. 343 00:31:52,370 --> 00:31:57,110 To je opcija. A glavna je jedina funkcija za koje je obavezno. 344 00:31:57,110 --> 00:32:07,140 Ako ne vrati ništa od glavni, to je pretpostaviti da ste mislili da se vrate 0. 345 00:32:07,140 --> 00:32:13,070 Pitanja? 346 00:32:13,070 --> 00:32:20,980 Ok. Dakle, sada drugi problem. 347 00:32:20,980 --> 00:32:24,810 "Sjetite se iz tjedna 2 je drugi predavanju da zamjene dva varijabli u vrijednosti prolazeći 348 00:32:24,810 --> 00:32:30,780 te dvije varijable u funkciji (čak i ako se zove zamjenu) ne točno radi, barem ne bez 'pokazivače.' " 349 00:32:30,780 --> 00:32:37,020 I ignorirati naputke dok ne dođemo do njih. 350 00:32:37,020 --> 00:32:40,070 Želimo da zamijene dvije varijable, a mi ne koristite funkciju to učiniti. 351 00:32:40,070 --> 00:32:43,410 Mi još uvijek će to učiniti u glavnom kao što kaže. 352 00:32:43,410 --> 00:32:48,360 Ali za korištenje tih dviju varijabli, ne želimo koristiti privremenu varijablu. 353 00:32:48,360 --> 00:32:50,770 Postoje dva načina da to učinite. 354 00:32:50,770 --> 00:32:56,310 Možete to učiniti pomoću svoje tradicionalne binarne operatore. 355 00:32:56,310 --> 00:33:00,180 Dakle, zna li netko brz i prljav način da radi? 356 00:33:00,180 --> 00:33:07,650 To bi zapravo uzeti minutu razmišljanja. Ako imam - 357 00:33:07,650 --> 00:33:12,130 Ja ću postaviti problem gore kao što pitati. Dakle, ako imam 2 varijable,, što je samo cijeli 358 00:33:12,130 --> 00:33:17,800 da mi daju, a zbroj varijabla B, što je još jedan cijeli broj koji sam dao. 359 00:33:17,800 --> 00:33:22,700 Dakle, ako imam ove dvije varijable, sada želim da ih zamijene. 360 00:33:22,700 --> 00:33:31,550 Tradicionalni, koristeći svoje redovite binarni operatori, mislim, kao što su +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Nisu bitovni operatori koji djeluju na binarni. 362 00:33:36,630 --> 00:33:39,600 Dakle, pomoću -, +, ÷, i svi oni. 363 00:33:39,600 --> 00:33:52,980 Možemo zamijeniti radeći nešto kao = a + b, i b = a - b, a = a - b. 364 00:33:52,980 --> 00:34:04,260 Dakle, razum ček, a onda ćemo vidjeti zašto se to radi. 365 00:34:04,260 --> 00:34:13,320 Recimo = 7, b = 3, onda + b će biti 10. 366 00:34:13,320 --> 00:34:18,820 Dakle, mi smo sada postavljanjem = 10, a zatim radimo b = - b. 367 00:34:18,820 --> 00:34:30,250 Tako smo radili b = - b, koji će biti 7, i b = a - b opet, 368 00:34:30,250 --> 00:34:38,650 ili = a - b. Koji će biti 10-7 što je 3. 369 00:34:38,650 --> 00:34:44,850 Tako sada, ispravno, '' bio 7, b je 3, a sada je b 7 i '' je tri. 370 00:34:44,850 --> 00:34:48,679 Tako da vrsta ima smisla, '' je kombinacija dvaju brojeva. 371 00:34:48,679 --> 00:34:53,000 U ovom trenutku, '' je kombinacija, a zatim smo oduzimanjem od izvornog b, 372 00:34:53,000 --> 00:34:56,860 i onda smo oduzimanjem što je bio izvorni '.' 373 00:34:56,860 --> 00:35:01,150 No, to ne rade za sve brojeve. 374 00:35:01,150 --> 00:35:08,880 Da biste vidjeli ovaj, razmotrimo sustav, tako da smo obično misle brojeva kao 32 bita. 375 00:35:08,880 --> 00:35:13,050 Idemo raditi na nečemu što je samo kao četiri bita. 376 00:35:13,050 --> 00:35:15,450 Nadam se da sam se s dobar primjer upravo sada. 377 00:35:15,450 --> 00:35:18,680 Dakle, znam, to će biti lako. 378 00:35:18,680 --> 00:35:26,720 Recimo naši dva su brojevi 1111 i 1111, tako da smo u binarnom upravo sada. 379 00:35:26,720 --> 00:35:34,630 U stvarnim decimala, ako želite da razmišljaju o tome na taj način, = 15 i b = 15. 380 00:35:34,630 --> 00:35:37,630 I tako smo očekivali, nakon što smo ih zamijeniti - oni čak ne moraju biti isti brojevi, 381 00:35:37,630 --> 00:35:41,140 ali sam ga na taj način. 382 00:35:41,140 --> 00:35:47,100 Ajmo ih napraviti ne iste brojeve. Učinimo 1111 i 0001. 383 00:35:47,100 --> 00:35:51,860 Dakle = 15 i b = 1. 384 00:35:51,860 --> 00:35:57,670 Nakon što smo ih zamijenili, očekujemo '' da se jednom i b biti 15. 385 00:35:57,670 --> 00:36:01,780 Tako naš prvi korak je = a + b. 386 00:36:01,780 --> 00:36:08,770 Naši brojevi su samo 4 bita širine, tako da "', koji je 1111, + b, koji je 0001, 387 00:36:08,770 --> 00:36:16,780 će završiti kao 10.000, ali imamo samo 4 bita. 388 00:36:16,780 --> 00:36:22,540 Tako sada = 0. 389 00:36:22,540 --> 00:36:34,080 A sada želimo postaviti b = - b - zapravo, to još uvijek radi van savršeno. 390 00:36:34,080 --> 00:36:39,630 = - b - neka je vidjeti ako to radi van savršeno. 391 00:36:39,630 --> 00:36:53,720 Pa onda b = 0 - 1, koji će i dalje biti 15, a zatim = - b, koji će biti 1. 392 00:36:53,720 --> 00:36:56,210 Možda to ne rade. 393 00:36:56,210 --> 00:36:59,020 Osjećam se kao da je razlog to ne radi pomoću regularna. 394 00:36:59,020 --> 00:37:06,400 Ok, tako da radi na pretpostavci da to ne rade s redovnim binarnih operacija, 395 00:37:06,400 --> 00:37:15,040 i ja ću tražiti - ja ću Googleu da vidi da li je to istina. 396 00:37:15,040 --> 00:37:23,490 Dakle, želimo to učiniti pomoću bitovni operatori, a trag ovdje je XOR. 397 00:37:23,490 --> 00:37:28,780 Dakle, uvođenjem XOR (^) ako niste ga vidjeli još. 398 00:37:28,780 --> 00:37:34,610 To je, opet, bitovni operator tako da djeluje malo po malo, i it's - 399 00:37:34,610 --> 00:37:39,910 Ako imate bita 0 i 1, onda će to biti jedna. 400 00:37:39,910 --> 00:37:45,230 Ako imate bita 1 i 0, to će biti jedan, imate bita 0 i 0 to će biti 0, 401 00:37:45,230 --> 00:37:47,640 i ako imate bita 1 i 1 to će biti 0. 402 00:37:47,640 --> 00:37:56,180 Dakle, to je kao ILI. Ako bilo koji od bitova su istinite, to je jedan, ali za razliku od ILI, to ne može biti oba bita koji su istina. 403 00:37:56,180 --> 00:37:59,320 Ili bi to biti jedan, XOR bi to biti 0. 404 00:37:59,320 --> 00:38:02,250 Dakle, idemo želite koristiti XOR ovdje. 405 00:38:02,250 --> 00:38:09,960 Razmislite o tome za minutu, ja ću Googleu. 406 00:38:09,960 --> 00:38:16,230 Pa, ne možete pročitati da je, a ja sam trenutno na algoritma XOR zamjenu stranici. 407 00:38:16,230 --> 00:38:21,340 Nadam se da će to objasniti zašto sam can't - 408 00:38:21,340 --> 00:38:34,190 To je točno algoritam koji smo upravo učinio. 409 00:38:34,190 --> 00:38:37,330 Ja još uvijek ne vidim zašto - Moram samo su pokupili loš primjer, 410 00:38:37,330 --> 00:38:44,940 ali ovaj slučaj gdje je '' dogodilo da postane 0, nakon dobivanja na 5 bita, tako da sada '' je 0, 411 00:38:44,940 --> 00:38:48,730 to je ono što se zove "cijeli preljev." 412 00:38:48,730 --> 00:38:54,370 Prema Wikipediji, "za razliku od XOR swapa, ova varijanta zahtijeva da se ona koristi neke metode 413 00:38:54,370 --> 00:38:59,780 jamčiti da je x + y ne uzrokuju cijeli preljev. " 414 00:38:59,780 --> 00:39:08,350 Dakle, ovo ima problema, to je bio cijeli prelijevati, ali sam učinio nešto loše. 415 00:39:08,350 --> 00:39:10,520 Nisam siguran. Pokušat ću doći do još jedan. 416 00:39:10,520 --> 00:39:13,640 [Studentski] Pa, nije cijeli broj preljeva kada pokušavate staviti broj tamo 417 00:39:13,640 --> 00:39:16,640 veći od iznosa bitova ste dodijeljenog? 418 00:39:16,640 --> 00:39:23,730 Da. Imamo četiri bita. That's - imali smo četiri bita, onda ćemo pokušati dodati 1 do njega, tako da smo završili sa 5 bita. 419 00:39:23,730 --> 00:39:26,690 No, peti bitni samo dobiva odsječeni, da. 420 00:39:26,690 --> 00:39:28,970 Moglo bi se zapravo - 421 00:39:28,970 --> 00:39:33,010 [Studentski] Znači li to da vam baciti pogrešku ili ne da - da bi baciti pogrešku? 422 00:39:33,010 --> 00:39:40,720 No Dakle, nema pogreške. Kada dođete do montaže razini, posebno bitni 423 00:39:40,720 --> 00:39:47,020 negdje je postavljen da je rekao da postoji preljev, ali u C ste vrsta samo ne nositi s tim. 424 00:39:47,020 --> 00:39:55,160 Vi zapravo ne mogu nositi s njom, osim ako koristite posebne zbor upute u C. 425 00:39:55,160 --> 00:39:58,110 Razmislimo o XOR swapa. 426 00:39:58,110 --> 00:40:02,220 I mislim Wikipedia članak možda su također kaže da je - 427 00:40:02,220 --> 00:40:07,310 Dakle, to je također doveo do modularna aritmetika, tako da mislim da je, u teoriji, radi modularni aritmetiku 428 00:40:07,310 --> 00:40:11,160 kada sam rekao da 0-1 je 15 opet. 429 00:40:11,160 --> 00:40:15,410 Tako da možda zapravo - na redovnoj procesorom koji radi 0-1 = 15. 430 00:40:15,410 --> 00:40:20,430 Budući da smo završili na 0, oduzmemo jedan, pa onda to samo oblozi vratiti oko 1111. 431 00:40:20,430 --> 00:40:28,930 Dakle, ovaj algoritam zapravo moglo raditi, a + b je - b, b -; koje bi mogle biti u redu. 432 00:40:28,930 --> 00:40:34,030 No, tu je neki procesori koji ne rade to, pa to ne bi bilo u redu u tim specifičnim one. 433 00:40:34,030 --> 00:40:39,880 XOR zamjena će raditi na bilo kojem procesoru. Ok. 434 00:40:39,880 --> 00:40:42,280 Ideja je da bi to trebalo biti isto, iako. 435 00:40:42,280 --> 00:40:50,120 Gdje smo pomoću XOR nekako dobiti informacije kako se u jednoj varijabli, 436 00:40:50,120 --> 00:40:54,120 a zatim izvucite informacije o pojedinim varijablama opet. 437 00:40:54,120 --> 00:41:04,330 Tako se bilo tko imati ideje / odgovor? 438 00:41:04,330 --> 00:41:14,540 [Studentski odgovor, nerazumljivo] 439 00:41:14,540 --> 00:41:22,220 Dakle, to bi trebalo raditi, a također, XOR je zamjenski. 440 00:41:22,220 --> 00:41:27,620 Bez obzira na to što bi ti dvije brojke se dogoditi da se u ovdje, 441 00:41:27,620 --> 00:41:30,100 ovaj rezultat će biti isti. 442 00:41:30,100 --> 00:41:35,800 Tako ^ b b ^. 443 00:41:35,800 --> 00:41:51,860 Također možete vidjeti to zapisano kao ^ = b, b ^ =, ^ = b ponovno. 444 00:41:51,860 --> 00:42:00,200 Dakle, ovo je pravo, i vidjeti zašto se to radi, mislim bitova. 445 00:42:00,200 --> 00:42:10,400 Korištenje omanji broj, recimo 11001 i 01100. 446 00:42:10,400 --> 00:42:12,790 Dakle, ovo je '', to je b. 447 00:42:12,790 --> 00:42:15,540 Dakle, ^ = b. 448 00:42:15,540 --> 00:42:22,380 Mi ćemo biti postavljanje 'A' = na xor tih dviju stvari. 449 00:42:22,380 --> 00:42:32,920 Dakle 1 ^ 0 je 1, 1 ^ 1 je 0; 0 ^ 1 1, i 0 ^ 0 je 0, 1 ^ 0 je 1. 450 00:42:32,920 --> 00:42:37,380 Dakle ',' ako pogledate decimalnog broja, to će biti - 451 00:42:37,380 --> 00:42:41,160 nećeš vidjeti puno od odnosa između originalnog 'A' i novom ',' 452 00:42:41,160 --> 00:42:45,600 ali gleda na komadiće, '' Sada je poput mreže podataka 453 00:42:45,600 --> 00:42:49,970 od oba izvornom 'A' i izvorne b. 454 00:42:49,970 --> 00:42:57,930 Dakle, ako uzmemo b ^, vidimo da ćemo završiti na izvorni '.' 455 00:42:57,930 --> 00:43:08,910 A ako uzmemo izvorni '' ^ novom ',' vidimo možemo završiti na izvornom b. 456 00:43:08,910 --> 00:43:18,380 Dakle, (^ b) ^ b = izvorni '.' 457 00:43:18,380 --> 00:43:27,910 I (a ^ b) ^ = izvornik b. 458 00:43:27,910 --> 00:43:37,010 Tu je - još jedan način gledanja na ovo je nešto XOR sama je uvijek 0. 459 00:43:37,010 --> 00:43:45,020 Dakle, 1101 ^ 1101, svi bitovi će biti isti. 460 00:43:45,020 --> 00:43:47,920 Dakle, tu nikad neće biti slučaj u kojem jedna je 0, a druga je jedna. 461 00:43:47,920 --> 00:43:51,080 Dakle, ovo je 0000. 462 00:43:51,080 --> 00:43:57,240 Isto je is ovim. (^ B) ^ b je kao ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) će biti 0; ^ 0 samo će biti ',' jer su svi bitovi su 0. 464 00:44:03,680 --> 00:44:08,050 Dakle, samo one koje su idući u biti gdje '' je izvorno jedan - imala one. 465 00:44:08,050 --> 00:44:12,070 A ista ideja ovdje, ja sam prilično siguran da je i zamjenski. 466 00:44:12,070 --> 00:44:17,590 Da. Ja nisam rekao prije da je to zamjenski. 467 00:44:17,590 --> 00:44:24,680 ^ ',' I to je asocijativna, tako da sada (b ^) ^. 468 00:44:24,680 --> 00:44:28,970 I što možemo učiniti b ^ (^). 469 00:44:28,970 --> 00:44:31,540 I tako opet, dobili smo izvorni b. 470 00:44:31,540 --> 00:44:37,120 Dakle, '' Sada je kombinacija 'A' i B zajedno. 471 00:44:37,120 --> 00:44:49,660 Koristeći naš novi kombinirani '' kažemo b = kombinirani '' ^ izvorni b, dobili smo izvorni '.' 472 00:44:49,660 --> 00:45:05,170 A sada = kombinirani '' ^ nova b, koji je bio izvorni - ili što je sada ono što je '' ili b. 473 00:45:05,170 --> 00:45:13,620 To je to slučaj ovdje dolje. Ovo je = b, b stara. 474 00:45:13,620 --> 00:45:16,550 Dakle, sada je sve natrag u zamijenili poretka. 475 00:45:16,550 --> 00:45:22,960 Ako mi zapravo pogledao bita, b = ^ b, ide na XOR ove dvije, 476 00:45:22,960 --> 00:45:33,920 a odgovor će biti to, a onda = ^ b je XORing ove dvije, a odgovor je ovo. 477 00:45:33,920 --> 00:45:41,090 Pitanja? Ok. Dakle, zadnji je nešto znatno teže. 478 00:45:41,090 --> 00:45:43,180 [Studentski] Mislim da ima pitanje o tome. >> Oh, žao mi je. 479 00:45:43,180 --> 00:45:49,380 [Studentski] Što je zapravo brži? Ako koristite ovu XOR, ili je to ako proglasiti novu varijablu? 480 00:45:49,380 --> 00:45:55,190 Dakle, ono što je zapravo brži, izjavljujući novu varijablu ili pomoću XOR zamijeniti? 481 00:45:55,190 --> 00:45:59,600 Odgovor je, po svemu sudeći, privremena varijabla. 482 00:45:59,600 --> 00:46:05,780 A to je zato što nakon što je sastavio dolje - tako na skupštini razini, 483 00:46:05,780 --> 00:46:12,320 ne postoji takva stvar kao lokalne varijable ili bilo privremenih varijabli ili bilo ove stvari. 484 00:46:12,320 --> 00:46:16,060 Oni samo vole - nema memorije, a tu su i registri. 485 00:46:16,060 --> 00:46:20,920 Registri, gdje su se stvari aktivno se događa. 486 00:46:20,920 --> 00:46:24,750 Vi ne dodati dvije stvari u memoriji, možete dodati dvije stvari u registrima. 487 00:46:24,750 --> 00:46:28,160 A ti donijeti stvari iz memorije na registara, a zatim ih dodati, 488 00:46:28,160 --> 00:46:33,180 i onda bi ih stavio natrag u memoriju, ali sve akcije se događa u registrima. 489 00:46:33,180 --> 00:46:38,750 Dakle, kada ste pomoću privremene varijable pristup, obično ono što se događa je 490 00:46:38,750 --> 00:46:42,810 ove dvije brojke su već u registrima. 491 00:46:42,810 --> 00:46:46,570 I onda od tog trenutka, nakon što ste ih zamijenili, 492 00:46:46,570 --> 00:46:51,540 to ću samo početi koristiti drugi registar. 493 00:46:51,540 --> 00:46:56,510 Bilo gdje ste bili pomoću b, samo ću koristiti registar koji je već bio čuvanje '.' 494 00:46:56,510 --> 00:47:02,180 Tako da ne trebate učiniti ništa kako bi zapravo napraviti swap. Da? 495 00:47:02,180 --> 00:47:05,690 [Studentski] Ali to također ima više memorije, zar ne? 496 00:47:05,690 --> 00:47:10,280 To će trajati samo više memorije ako ga treba spremiti taj privremeni varijablu. 497 00:47:10,280 --> 00:47:14,830 Sviđa mi se ako kasnije koristiti taj privremeni varijablu opet negdje, 498 00:47:14,830 --> 00:47:18,920 onda - ili vam dodijeliti nešto tog privremenog varijable. 499 00:47:18,920 --> 00:47:24,630 Dakle, ako u bilo kojem trenutku u vremenu ',' b u temperaturi imaju različite vrijednosti ili tako nešto, 500 00:47:24,630 --> 00:47:30,680 onda će imati različite lokacije u memoriji, ali je istina da 501 00:47:30,680 --> 00:47:34,800 postoje mnoge lokalne varijable koje će samo postoje u registrima. 502 00:47:34,800 --> 00:47:44,370 U tom slučaju, to nikada staviti u memoriju, i tako nikad ne gubit pamćenje. 503 00:47:44,370 --> 00:47:58,620 Ok. Zadnje pitanje je malo više. 504 00:47:58,620 --> 00:48:04,850 Dakle, ovdje, u ovom CS50 aparata, tu je rječnik. 505 00:48:04,850 --> 00:48:12,390 A razlog za to je zato [? B66] je alat za provjeru pravopisa, gdje ćete biti pismeno 506 00:48:12,390 --> 00:48:15,780 pomoću hash tablice ili pokuša ili neke strukture podataka. 507 00:48:15,780 --> 00:48:22,660 Ti ćeš biti pisanje provjeru pravopisa, a vi ćete biti koristeći ovaj rječnik za to. 508 00:48:22,660 --> 00:48:28,280 No, za ovaj problem, mi smo samo će gledati da vidi ako je jedna riječ u rječniku. 509 00:48:28,280 --> 00:48:31,250 Dakle, umjesto spremanja cijeli rječnika u nekom strukture podataka 510 00:48:31,250 --> 00:48:35,180 i onda gleda preko cijelog dokumenta kako bi vidjeli je li išta je pogrešno, 511 00:48:35,180 --> 00:48:38,490 mi samo želimo pronaći jedan riječ. Dakle, mi samo možemo skenirati preko cijeli rječnika 512 00:48:38,490 --> 00:48:44,300 i ako nikada nismo pronašli riječ u cijelom rječniku, onda to nije bio tamo. 513 00:48:44,300 --> 00:48:52,150 Ako smo skenirati preko cijeli rječniku i ne vidim tu riječ, onda smo dobri, mi ga pronašao. 514 00:48:52,150 --> 00:48:56,580 Ovdje piše da želimo početi gleda na Kasiopejskim datoteka rukovanje funkciji, 515 00:48:56,580 --> 00:48:59,930 jer želimo pročitati rječnika, 516 00:48:59,930 --> 00:49:07,680 ali ja ću dati savjet ovdje kako bi funkcija koje bi trebao misliti. 517 00:49:07,680 --> 00:49:11,510 Ja ću ih napisati na prostore. 518 00:49:11,510 --> 00:49:20,490 Dakle, glavni one koje ćete želite pogledati su ž otvoren, a zatim, neizbježno, f zatvorena, 519 00:49:20,490 --> 00:49:26,540 koji će ići na kraju svog programa, i f skeniranje f. 520 00:49:26,540 --> 00:49:31,060 Također se može koristiti f pročitati, ali vjerojatno ne želite 521 00:49:31,060 --> 00:49:34,200 jer da - ne završiti potrebe da. 522 00:49:34,200 --> 00:49:41,880 F skeniranje f je ono što će se koristiti za skeniranje preko rječnika. 523 00:49:41,880 --> 00:49:46,370 I tako da ne treba kodirati do rješenja, samo probati i sviđa pseudo-kod svoj put 524 00:49:46,370 --> 00:50:05,200 do rješenja, a onda ćemo o tome razgovarati. 525 00:50:05,200 --> 00:50:14,110 A zapravo, jer sam već dao vam to, ako idete u bilo kojem terminalu ili vaš aparat je ljuska, 526 00:50:14,110 --> 00:50:18,250 Ja bih - ja obično - ako niste vidjeli, ali, ne znam ako ste radili u razredu, 527 00:50:18,250 --> 00:50:23,490 ali čovjek, pa su man stranice, su prilično korisno za gleda na prilično mnogo bilo funkciju. 528 00:50:23,490 --> 00:50:27,330 Dakle, ja mogu učiniti, kao što su, čovjek f, skeniranje f. 529 00:50:27,330 --> 00:50:32,300 Ovo je sada informacija o obitelji skeniranje f funkcija. 530 00:50:32,300 --> 00:50:37,070 Također sam mogao učiniti čovjek F, otvorene, i da ćemo mi dati pojedinosti o tome. 531 00:50:37,070 --> 00:50:40,750 Dakle, ako znate što funkcija koje koristite, ili ste čitajući kod 532 00:50:40,750 --> 00:50:43,000 i vidjet ćete neke funkcije, a ti si kao, "Što to učiniti?" 533 00:50:43,000 --> 00:50:45,280 Samo čovjek koji je ime funkcije. 534 00:50:45,280 --> 00:50:47,340 Postoji nekoliko čudnih primjera gdje možda imaju za reći 535 00:50:47,340 --> 00:50:51,620 sviđa. Čovjek dva da ime funkcije, ili čovjek koji tri funkcije ime, 536 00:50:51,620 --> 00:50:58,230 ali imate samo to učiniti ako čovjek ime funkcije ne dogodi da rade prvi put. 537 00:50:58,230 --> 00:51:03,010 [Studentski] Tako sam čitao man stranicu za opena, ali ja sam još uvijek zbunjeni o tome kako ga koristiti i program. 538 00:51:03,010 --> 00:51:06,170 Ok. Puno se man stranice su manji od pomoći. 539 00:51:06,170 --> 00:51:08,470 Oni su više od pomoći, ako već znaju što čine 540 00:51:08,470 --> 00:51:12,670 a zatim samo trebate zapamtiti redoslijed argumenata ili nešto. 541 00:51:12,670 --> 00:51:17,640 Ili oni mogu vam dati opći pregled, ali neki od njih su vrlo neodoljiv. 542 00:51:17,640 --> 00:51:22,220 Kao f f skeniranja, također. To vam daje informacije za sve ove funkcije, 543 00:51:22,220 --> 00:51:28,120 i jedan redak prema dolje ovdje događa reći, "F skeniranje ž čita iz niza točke ili potoka." 544 00:51:28,120 --> 00:51:32,360 Ali ž otvoriti. Dakle, kako bi mi koristimo ž otvoren? 545 00:51:32,360 --> 00:51:38,470 Ideja o programu koji treba napraviti datoteku I / O je da 546 00:51:38,470 --> 00:51:45,070 najprije morate otvoriti datoteku koju želite učiniti stvari s, i neizbježno, 547 00:51:45,070 --> 00:51:51,220 čitanje stvari iz tog spisa i učiniti stvari s njima. 548 00:51:51,220 --> 00:51:55,350 F otvoren je ono što ćemo koristiti za otvaranje datoteke. 549 00:51:55,350 --> 00:52:04,190 Stvar koju smo dobili natrag, tako što sliku ne želimo otvoriti, to nam daje - 550 00:52:04,190 --> 00:52:11,970 Ovdje se kaže "/ korisnik / share / dict / riječi." 551 00:52:11,970 --> 00:52:16,740 To je datoteka koja želimo otvoriti, a mi želimo da ga otvorite - 552 00:52:16,740 --> 00:52:21,440 moramo eksplicitno odrediti da li želimo otvoriti ga čitati ili ako želimo otvoriti to napisati. 553 00:52:21,440 --> 00:52:26,490 Postoji nekoliko kombinacija i stvari, ali želimo otvoriti ovo za čitanje. 554 00:52:26,490 --> 00:52:29,380 Mi želimo čitati iz datoteke. 555 00:52:29,380 --> 00:52:34,290 Dakle, ono što čini ovaj povratak? To vraća datoteke zvjezdicu (*), 556 00:52:34,290 --> 00:52:37,260 i samo ću pokazati sve što je u varijablu f, tako * 557 00:52:37,260 --> 00:52:40,840 opet, to je pokazivač, ali ne želimo da se bave pokazivače. 558 00:52:40,840 --> 00:52:46,470 Možete misliti f kao f je sada varijabla ćete koristiti za zastupanje datoteku. 559 00:52:46,470 --> 00:52:49,850 Dakle, ako želite čitati iz datoteke, možete pročitati iz f. 560 00:52:49,850 --> 00:52:54,820 Ako želite da zatvorite datoteku, možete zatvoriti f. 561 00:52:54,820 --> 00:53:00,350 Tako je na kraju programa kada smo neminovno da zatvorite datoteku, što da radimo? 562 00:53:00,350 --> 00:53:06,750 Želimo zatvoriti f. 563 00:53:06,750 --> 00:53:12,600 Tako sada zadnja datoteka funkcija koje ćemo želite koristiti skeniranje f, f skeniranje f. 564 00:53:12,600 --> 00:53:20,930 A što da se je on skenira preko datoteke u potrazi za uzorak kako bi se slagala. 565 00:53:20,930 --> 00:53:39,100 Gledajući na čovjeka stranici ovdje, vidimo int f skeniranja f, ignorirati povratnu vrijednost za sada. 566 00:53:39,100 --> 00:53:45,230 Prvi argument je potok datoteku *, tako da je prvi argument da ćemo želite proći je f. 567 00:53:45,230 --> 00:53:47,900 Mi smo skeniranja preko f. 568 00:53:47,900 --> 00:53:53,680 Drugi argument je format string. 569 00:53:53,680 --> 00:53:58,310 Ja ću vam dati niz formata upravo sada. 570 00:53:58,310 --> 00:54:05,180 Mislim da smo se dogoditi da kažem, 127s \ n, puno toga je nepotrebno. 571 00:54:05,180 --> 00:54:12,490 Ideja o tome što taj format string, je možete misliti skeniranje f kao suprotnost ispis f. 572 00:54:12,490 --> 00:54:17,160 Dakle, print ž, print ž smo također koristiti ovu vrstu formata parametra, 573 00:54:17,160 --> 00:54:25,000 ali u tiskanom f što radimo je - pogledajmo ekvivalent. 574 00:54:25,000 --> 00:54:32,550 Dakle ispisati f, i tu je zapravo i ž ispis f, gdje je prvi argument će biti f. 575 00:54:32,550 --> 00:54:40,980 Kada ispisujete f, mogli bismo reći nešto poput, "ispisa 127s \ n", a onda, ako prođemo ga neki string, 576 00:54:40,980 --> 00:54:44,050 to će ispisati ovaj niz i onda novu liniju. 577 00:54:44,050 --> 00:54:49,690 Što znači 127, ja sam prilično siguran, ali nikad nisam sebe ograničiti na njega, 578 00:54:49,690 --> 00:54:52,470 Vi čak ne bi trebao reći '127 'u ispis f, 579 00:54:52,470 --> 00:54:57,090 ali što to znači ispis prve znakove 127. 580 00:54:57,090 --> 00:54:59,350 Dakle, ja sam prilično siguran da je tako. Možete Googleu za to. 581 00:54:59,350 --> 00:55:03,000 No, u idućem jednom sam skoro pozitivna to znači da. 582 00:55:03,000 --> 00:55:08,880 Dakle, ovo je ispis prve znakove 127, nakon čega slijedi novi redak. 583 00:55:08,880 --> 00:55:14,680 F skeniranje ž sada, umjesto da gleda na varijable i ispis, 584 00:55:14,680 --> 00:55:22,620 to će izgledati u nekom nizu i pohraniti uzorak u varijablu. 585 00:55:22,620 --> 00:55:26,360 Ajmo zapravo koristiti za skeniranje f u drugom primjeru. 586 00:55:26,360 --> 00:55:31,670 Pa recimo da smo imali neke int, x = 4, 587 00:55:31,670 --> 00:55:41,110 i htjeli smo stvoriti niz napravljen od - želio stvoriti niz 588 00:55:41,110 --> 00:55:44,250 da je kao, to će se mnogo kasnije, 589 00:55:44,250 --> 00:55:49,020 nešto što je baš kao 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Dakle, to može biti program u kojem ćete imati zbroj brojač, 591 00:55:51,870 --> 00:55:56,420 Ukratko ja suprotstaviti, a želite uštedjeti hrpu slika. 592 00:55:56,420 --> 00:56:02,430 Dakle, želite li spremiti i.jpg, gdje sam je neki iteracija vaše petlje. 593 00:56:02,430 --> 00:56:05,500 Pa kako ćemo napraviti ovaj niz za tu JPEG? 594 00:56:05,500 --> 00:56:11,720 Ako biste željeli ispisati 4.jpg, samo smo mogli reći za ispis f,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 i onda bi to ispisati za tu JPEG. 596 00:56:14,410 --> 00:56:20,050 Ali ako želimo spasiti string 4.jpg, mi koristimo skeniranja f. 597 00:56:20,050 --> 00:56:30,860 Dakle, niz je - zapravo smo can't - lik, char je, ajmo sto. 598 00:56:30,860 --> 00:56:35,400 Tako sam proglasio neki niz 100 znakova, 599 00:56:35,400 --> 00:56:39,830 i to je ono što smo neminovno ćemo se pohranu tu JPEG u. 600 00:56:39,830 --> 00:56:47,920 Tako ćemo koristiti za skeniranje f, i formatu, kako bismo reći% d.jpg 601 00:56:47,920 --> 00:56:54,980 kako bi se ispisati 4.jpg, format će to biti% d.jpg. 602 00:56:54,980 --> 00:57:04,020 Tako je format% d.jpg, ono što želimo zamijeniti s% d je x, 603 00:57:04,020 --> 00:57:06,590 i sada moramo spremiti taj niz negdje. 604 00:57:06,590 --> 00:57:12,500 A gdje ćemo pohraniti ovaj niz je niz e. 605 00:57:12,500 --> 00:57:21,640 Dakle, nakon ove linije koda, S, ako ćemo ispisati f,% S promjenljive s, 606 00:57:21,640 --> 00:57:26,280 to će ispisati 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Dakle, f skeniranje f je isti kao i skeniranje f, osim sada je gleda preko ove datoteke 608 00:57:38,930 --> 00:57:43,600 za ono za pohranu u s.. 609 00:57:43,600 --> 00:57:46,160 To je ono što posljednji argument će biti. 610 00:57:46,160 --> 00:57:54,170 Mi želimo pohraniti - "Scan f obitelj funkcija skeniranja u oba prema formatu kao pokušao u nastavku. 611 00:57:54,170 --> 00:58:02,450 Ako je bilo pohranjeno u lokaciji bodova možda vratiti - " 612 00:58:02,450 --> 00:58:12,910 Ne, što bi mogao biti dobar. Dopustite mi da mislim na drugi. 613 00:58:12,910 --> 00:58:26,350 Dakle, skeniranje ž ne - ono što je ispitati kritički je funkcija koja to radi? 614 00:58:26,350 --> 00:58:31,650 Dakle, skeniranje ž neće potrajati cijeli broj i učiniti dot JPG. 615 00:58:31,650 --> 00:58:43,490 To se događa na [mrmlja]. 616 00:58:43,490 --> 00:58:49,360 Spremi int varijablu u niz int C. 617 00:58:49,360 --> 00:58:55,940 Što je ova varijabla, ili ono što je ova funkcija zove? 618 00:58:55,940 --> 00:59:04,950 Da. That's - da. Dakle, ono što sam definiranju vama prije nego što je i ispis f, 619 00:59:04,950 --> 00:59:09,820 koji - da ima puno više smisla, zato sam rekao da je mnogo više kao ispis f. 620 00:59:09,820 --> 00:59:14,700 Skeniranje f je još uvijek vrsta kao ispis f, ali je ispis ž će ga skenirati preko 621 00:59:14,700 --> 00:59:17,510 i zamijeniti varijable, a sada ga pohraniti u nizu. 622 00:59:17,510 --> 00:59:19,620 Umjesto da ga ispisuje, to ga pohranjuje u nizu. 623 00:59:19,620 --> 00:59:25,070 Dakle, zanemariti činjenicu da u potpunosti. Još uvijek možete misliti formatu razvrstač kao kao da je ispis f. 624 00:59:25,070 --> 00:59:34,510 Tako sada, ako smo htjeli napraviti 4.jpg stvar, da će učiniti s. f print, x za to. 625 00:59:34,510 --> 00:59:38,520 Dakle, ono što skeniranje ž radi - ono što je vaše pitanje će biti? 626 00:59:38,520 --> 00:59:40,820 [Studentski] Ja sam samo zbunjeni o tome što mi pokušavamo učiniti ovdje 627 00:59:40,820 --> 00:59:43,450 s tom JPEG. Možete li objasniti taj jedan više vremena? 628 00:59:43,450 --> 00:59:52,710 Dakle, to je - to je manje relevantna za skeniranje ž ž sada, nadam se, da će se vezati natrag u nekakvoj način. 629 00:59:52,710 --> 01:00:02,240 No, ono što sam prvotno namjerava pokazati je - to je zapravo izravno relevantna za ove [? F5] 630 01:00:02,240 --> 01:00:08,520 Ti si idući u biti koristeći s. ispisa f, gdje je, kažu imamo 100 slika, 631 01:00:08,520 --> 01:00:13,630 i želite pročitati sliku 1.jpg 2.jpg, 3.jpg,. 632 01:00:13,630 --> 01:00:21,520 Dakle, kako bi to učinili, morate f opena, a onda morate proći u nizu koji želite otvoriti. 633 01:00:21,520 --> 01:00:30,020 Dakle, mi bi htjeli otvoriti 1.jpg; kako bi se stvorili niz koji je 1.jpg, 634 01:00:30,020 --> 01:00:37,660 mi je ispis f% d.jpg--nismo učiniti za int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Tako je ispis f% d.jpg od ja. 637 01:00:51,130 --> 01:00:56,320 Dakle, nakon ove linije, sada je varijabla ili niz e ide 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Ili, 0.jpg, 1.jpg, 2.jpg. I tako možemo otvoriti, pak, svaku sliku za čitanje. 639 01:01:10,610 --> 01:01:19,550 Tako da je ono što je ispisati ž ne. Vidite li što je ispisati ž sada radi? 640 01:01:19,550 --> 01:01:25,720 [Studentski] Ok, tako da je uzimanje - to stvara niz, something.jpg, a zatim ga pohranjuje. 641 01:01:25,720 --> 01:01:30,360 Da. To stvara - to je još jedan format string, baš kao i skeniranje i ispis f f, 642 01:01:30,360 --> 01:01:37,530 gdje on umeće sve varijable u drugom argumentu, može biti i za razliku ja. 643 01:01:37,530 --> 01:01:42,280 Možda - Mislim da je slučaj. No, bez obzira na redoslijed argumenata. 644 01:01:42,280 --> 01:01:45,440 To će se umetnuti sve varijable u obliku niza 645 01:01:45,440 --> 01:01:52,250 , a zatim pohraniti u našu tampon; zovemo da tampon, to je gdje smo pohranu niz. 646 01:01:52,250 --> 01:02:00,750 Dakle, mi smo pohranu unutar s. ispravno oblikovani niz,% d nakon što je zamijenjen sa četiri. 647 01:02:00,750 --> 01:02:08,080 [Studentski] Dakle, ako mi je to učinio, je varijabla f samo će biti raspoređen? 648 01:02:08,080 --> 01:02:18,110 Da. Tako smo trebali zatvoriti izvorni f prije to. 649 01:02:18,110 --> 01:02:22,810 Ali - i tada je također, ako nije bilo ž otvoriti ovdje, onda bi trebao reći - 650 01:02:22,810 --> 01:02:29,280 Da. No, to će otvoriti stotinu različitih datoteka. 651 01:02:29,280 --> 01:02:37,360 [Studentski] Ali mi ne bismo bili u mogućnosti pristupiti ili - ok. 652 01:02:37,360 --> 01:02:44,230 Ok. Dakle skeniranje f, f skeniranje f, je vrsta iste ideje, 653 01:02:44,230 --> 01:02:53,610 ali umjesto, umjesto da ga pohrane u nizu, to je više kao što su sada 654 01:02:53,610 --> 01:03:02,420 ide preko uboda i uzorak podudaranja protiv tog niza i spremanje rezultata u varijablama. 655 01:03:02,420 --> 01:03:11,290 Možete koristiti skeniranja f analizirati preko nešto poput 4.jpg, i pohraniti cijeli 4 u zbroj int x. 656 01:03:11,290 --> 01:03:13,430 To je ono što možemo koristiti za skeniranje f za. 657 01:03:13,430 --> 01:03:16,300 F skeniranje ž će učiniti da na naredbenog retka. 658 01:03:16,300 --> 01:03:19,200 Ja sam zapravo prilično siguran da je to ono što CS50 knjižnica radi. 659 01:03:19,200 --> 01:03:29,050 Dakle, kada kažeš, "dobiti int," to je skeniranje f-ing iznad - skeniranje f je način ćete dobiti korisničkog unosa. 660 01:03:29,050 --> 01:03:34,670 F skeniranje ž će učiniti istu stvar, ali pomoću datoteke za skeniranje više. 661 01:03:34,670 --> 01:03:41,090 Dakle, ovdje, mi smo skeniranja tijekom ove datoteke. 662 01:03:41,090 --> 01:03:45,460 Uzorak nastojimo uskladiti neki niz koji je 127 znakova 663 01:03:45,460 --> 01:03:48,100 slijedi novi redak 664 01:03:48,100 --> 01:03:54,770 Dakle, prilično sam siguran da smo mogli još samo reći "s. utakmicu", jer u rječniku 665 01:03:54,770 --> 01:03:57,770 mi se dogoditi da imaju, mi smo zajamčena niti jedna riječ je da je dugo, 666 01:03:57,770 --> 01:04:03,310 i ž ž skeniranje, mislim, prestat će se na novoj liniji bez obzira što. 667 01:04:03,310 --> 01:04:06,970 No, mi ćemo uključiti novi redak u utakmici, i - 668 01:04:06,970 --> 01:04:13,960 [Studentski] Ako nismo uključuju novu liniju, ne bi li pronašli dijelove riječi? 669 01:04:13,960 --> 01:04:22,900 To - svaki - gleda na rječniku - 670 01:04:22,900 --> 01:04:26,200 Dakle, u rječniku, to su sve naše riječi. 671 01:04:26,200 --> 01:04:30,500 Svaki je na novoj liniji. 672 01:04:30,500 --> 01:04:32,510 Skeniranje ž će pokupiti tu riječ. 673 01:04:32,510 --> 01:04:38,750 Ako ne uključuju novu liniju, onda je moguće da pored skeniranje ž samo će pročitati novu liniju. 674 01:04:38,750 --> 01:04:44,180 No, uključujući i novu liniju onda će samo ignorirati novu liniju. 675 01:04:44,180 --> 01:04:49,440 Ali nikad nećemo dobiti dio riječi, jer smo uvijek čitate do nove linije, bez obzira na sve. 676 01:04:49,440 --> 01:04:54,530 [Studentski] Ali što ako pretraživanje za riječ "Cisse," kao što je Cisse. 677 01:04:54,530 --> 01:04:57,380 Hoće li to uvidjeti da, i kažu da je utakmica? 678 01:04:57,380 --> 01:05:05,110 Dakle, ovdje imamo - to će pročitati u - to je zapravo dobra stvar. 679 01:05:05,110 --> 01:05:10,660 Mi nikada ne koristimo struje - Riječ tražimo je prvi argument naredbenog retka. 680 01:05:10,660 --> 01:05:16,460 Dakle, niz, riječ = argv 1. 681 01:05:16,460 --> 01:05:20,020 Dakle, niz tražimo je argv 1. 682 01:05:20,020 --> 01:05:23,290 Mi ne tražite riječ uopće u našem instrumentu f. 683 01:05:23,290 --> 01:05:28,030 Što smo radili s instrumentom f dobiva svaku riječ u rječniku, 684 01:05:28,030 --> 01:05:34,320 i onda kada imamo tu riječ idemo koristiti strcmp ih usporediti. 685 01:05:34,320 --> 01:05:39,210 Mi ćemo usporediti našu riječ i ono što smo upravo pročitali u. 686 01:05:39,210 --> 01:05:45,110 Dakle, neminovno, idemo završiti radiš hrpa skeniranje datotečni sustav 687 01:05:45,110 --> 01:05:52,130 dok se samo tako dogodi da skeniranje ž će se vratiti - 688 01:05:52,130 --> 01:05:54,800 da će se vratiti jednom, dok je uskladiti novu riječ, 689 01:05:54,800 --> 01:06:01,360 i da će se vratiti nešto drugo čim se nije slagala riječ. 690 01:06:01,360 --> 01:06:08,440 Mi smo čitanje preko cijelog rječniku, spremanje redak po redak i svaka riječ u varijablu s.. 691 01:06:08,440 --> 01:06:17,240 Onda smo se usporedbom riječ sa s, a ako usporedba == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp dogodi da donese 0 ako utakmica je napravio. 693 01:06:21,650 --> 01:06:31,510 Dakle, ako je 0, onda možemo ispisati f, uskladiti, 694 01:06:31,510 --> 01:06:35,370 ili je riječ u rječniku, ili što god želite ispisati f. 695 01:06:35,370 --> 01:06:41,450 A onda - ne želimo da f zatvoriti iznova i iznova. 696 01:06:41,450 --> 01:06:50,410 To je vrsta stvar želimo učiniti, a mi se ne samo u potrazi za riječ u rječniku. 697 01:06:50,410 --> 01:06:56,660 Tako smo mogli učiniti da, ako smo htjeli tražiti njihovu uzorak, Cisse, kao što ste rekli prije, 698 01:06:56,660 --> 01:07:00,260 ako smo htjeli gledati za taj uzorak, onda će uspjeti u slučaju 699 01:07:00,260 --> 01:07:08,010 jer to nije zapravo riječ, ali jedna od riječi u rječniku dogodi da se to u njemu. 700 01:07:08,010 --> 01:07:13,560 Dakle, to bi slagala ovu riječ, ali to podskup riječi nije sama riječ. 701 01:07:13,560 --> 01:07:17,250 Ali to nije kako smo ga koristite, mi smo čitati u svakoj riječi 702 01:07:17,250 --> 01:07:19,740 a zatim usporedbom riječ imamo s tom riječju. 703 01:07:19,740 --> 01:07:25,780 Tako smo uvijek uspoređujući puna riječi. 704 01:07:25,780 --> 01:07:29,620 Ja mogu poslati finalizirani rješenja kasnije. 705 01:07:29,620 --> 01:07:32,050 To je vrsta gotovo točan odgovor, mislim. 706 01:07:32,050 --> 01:07:34,720 [Studentski komentar, nerazumljivo] 707 01:07:34,720 --> 01:07:40,870 Oh, jesam li dobili osloboditi od prije? Char je, valjda mi je rekao 127 - zaboravila sam što je najveći. 708 01:07:40,870 --> 01:07:44,100 Samo ćemo učiniti 128, pa sada s je dovoljno dugo. 709 01:07:44,100 --> 01:07:46,570 Mi ne trebamo ispisati ništa. 710 01:07:46,570 --> 01:07:56,440 Mi smo također htjeti imati zatvoriti našu datoteku, a koja bi trebala biti oko pravom odgovoru. 711 01:07:56,440 --> 01:07:59,440 CS50.TV