1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Skyrių problema Set 2: Hacker Edition 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Harvardo universitetas 3 00:00:04,910 --> 00:00:07,410 Tai CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Taigi, aš Rob. Aš esu, Kirkland vyresnysis. Tai mano trečius metus TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Tai yra pirmas kartas, kai mes kinta nuo tradicinio paskaita stiliaus skyriaus, 6 00:00:22,220 --> 00:00:25,610 kur mes tiesiog rūšies peržiūros, kas atsitiko paskaitą ir tada jums, vaikinai, užduoti klausimus, 7 00:00:25,610 --> 00:00:32,250 dabar yra daug daugiau problemų, kur mes Naudokite tarpus, ir - 8 00:00:32,250 --> 00:00:37,410 O, taip, kad idėja yra eiti į šią nuorodą, aš buvau nusiuntęs jus ir tada jūs būsite My Space. 9 00:00:37,410 --> 00:00:42,410 Ar kas nors turite nešiojamąjį kompiuterį? Gerai. 10 00:00:42,410 --> 00:00:47,050 Taigi, mes ketiname naudoti šį, ir mes ketiname daryti problemas gyventi skyriuje 11 00:00:47,050 --> 00:00:50,740 ir aptarti juos ir suprasti, kas yra negerai 12 00:00:50,740 --> 00:00:56,390 ir aš galėtų atsigriebti kai savo kodą, ir aš galėtų aptarti savo idėjas. 13 00:00:56,390 --> 00:01:02,140 Taigi, ar kas nors buvo sunku? 14 00:01:02,140 --> 00:01:07,000 Galite kalbėtis pusėje, aš nežinau, jei mes turime priežasčių, kad. 15 00:01:07,000 --> 00:01:12,270 Dabar, kaip ir ankstesniais supersection, jei buvo tos klasės, jūs žinote, kas tai yra apie. 16 00:01:12,270 --> 00:01:19,200 Apie visus P rinkinių ten bus šie skyriai. 17 00:01:19,200 --> 00:01:22,550 Taigi, P-rinkinys 2, specifikaciją, aš atspėti, kad matėte tai P-1 formos. 18 00:01:22,550 --> 00:01:27,400 Tačiau mes galime pažvelgti P-SET 2 už tai, ką mes ketiname šiandien vyksta per. 19 00:01:27,400 --> 00:01:29,460 Ir pamatysite klausimų skyrių. 20 00:01:29,460 --> 00:01:37,530 Taigi, tai bus visi P rinkinių, ten bus klausimų skyriuje. 21 00:01:37,530 --> 00:01:41,340 Iki šiol mes pasakė: "Apsvarstykite tai galimybė praktiškai". 22 00:01:41,340 --> 00:01:44,940 Jums nebus prašoma pateikti šią programą. 23 00:01:44,940 --> 00:01:48,480 Idėja yra ta, kad jie turėtų padėti jums pradėti su problema rinkinys natūra. 24 00:01:48,480 --> 00:01:53,220 Manau, hacker leidimas, daug jų turėtų būti tik naujų, įdomių dalykų, mokytis. 25 00:01:53,220 --> 00:01:58,590 Jie negali būti tiesiogiai taikomas prie problemos. 26 00:01:58,590 --> 00:02:01,810 Ir dabar mes neturi tu juos pateikti, bet teoriškai, 27 00:02:01,810 --> 00:02:07,480 vėliau probleminių rinkinių, galite juos pateikti, ir todėl jums gali ateiti į skyrių 28 00:02:07,480 --> 00:02:10,380 arba žiūrėti skyrių, gauti atsakymus į visus, arba galite tiesiog gauti juos į savo 29 00:02:10,380 --> 00:02:16,350 jei jūs neturite jaustis kaip mėgautis savo buvimo. 30 00:02:16,350 --> 00:02:21,010 Taigi manau, kad tai yra pirmasis. 31 00:02:21,010 --> 00:02:29,280 Oh. Be to, pagal šių klausimų skyrių, mes taip pat tu užduoti klausimus apie šortai. 32 00:02:29,280 --> 00:02:33,440 Taigi, manau, bent jau teoriškai, jūs turėtų žiūrėti šiuos prieš atvykdami į skyrių, 33 00:02:33,440 --> 00:02:38,550 bet tai gerai, jei jūs neturite, mes pereiti per juos vistiek. 34 00:02:38,550 --> 00:02:42,590 Taigi, mes galime pradėti su jais: "Kaip while cikle skiriasi nuo do-while cikle? 35 00:02:42,590 --> 00:02:46,210 Kai pastarasis ypač naudinga? " 36 00:02:46,210 --> 00:02:49,390 Kad kas nors turite kokių nors? 37 00:02:49,390 --> 00:02:52,730 [Studentų] do-while cikle, visada atlikti bent vieną kartą. 38 00:02:52,730 --> 00:03:02,950 Taip. Taigi, kad yra skirtumas. O linijos - I'll just do it čia - while cikle, mes turime būklę 39 00:03:02,950 --> 00:03:19,760 čia, o do, o jūs neturite sąlygą, kol mes cia atsidure. 40 00:03:19,760 --> 00:03:24,130 Taigi, kai jūsų programa manimi vykdančioji, ir jis gauna iki while cikle, 41 00:03:24,130 --> 00:03:26,380 ji iš karto patikrina, ar ši sąlyga yra teisinga. 42 00:03:26,380 --> 00:03:30,710 Jei ši sąlyga yra ne tiesa, tai bus tiesiog praleisti kilpa visiškai. 43 00:03:30,710 --> 00:03:34,390 Do-while cikle, nes programa vykdo, jis gauna į "padaryti". 44 00:03:34,390 --> 00:03:37,920 Nieko neįvyksta, šiuo metu, tik toliau vykdyti. 45 00:03:37,920 --> 00:03:42,690 Tada, kai ji hitai "while", jei sąlyga yra teisinga, tai bus kilpa atgal ir padaryti jį dar kartą 46 00:03:42,690 --> 00:03:46,730 ir vėl ir vėl, kol būklė nėra tiesa, ir tada tiesiog priklauso per. 47 00:03:46,730 --> 00:03:50,600 Taigi, skirtumas yra tas, kad tai gali iš karto pereiti nuo pat pradžių. 48 00:03:50,600 --> 00:03:56,770 Tai neabejotinai atlieka vieną kartą ir paskui gali vykdyti daugiau kartų, jei sąlyga yra vis dar tiesa. 49 00:03:56,770 --> 00:04:03,720 Taigi, o kilpa padaryti tik vieną kartą, arba - o linijos - mes galime nereikia, tai ne visi, 50 00:04:03,720 --> 00:04:07,900 nes, kaip greitai, kaip mes gauti į jį, jei sąlyga yra klaidinga, mes tiesiog iš karto pereiti per jį. 51 00:04:07,900 --> 00:04:11,770 Kadangi do-while cikle, mes jį vykdyti vieną kartą, nebūtinai. 52 00:04:11,770 --> 00:04:14,560 Tada, kai mes gauti su sąlyga, mes patikrinti, ar tai teisinga, ar klaidinga. 53 00:04:14,560 --> 00:04:19,790 Jei tai tiesa, mes jį dar kartą, jei klaidingai, mes tiesiog tęsti. 54 00:04:19,790 --> 00:04:24,680 Taigi, kai pastaroji yra ypač naudinga? 55 00:04:24,680 --> 00:04:31,190 Taigi, galiu pasakyti, kad 4 metus visas, 3 metai, nepriklausomai nuo 56 00:04:31,190 --> 00:04:38,780 kad aš programavimo, aš naudojo tai, pavyzdžiui, iki 10 kartų. 57 00:04:38,780 --> 00:04:43,140 Ir tikriausiai 5 iš jų yra CS50, kai mes padaryti, o kilpos. 58 00:04:43,140 --> 00:04:47,510 Taigi, kai jūs padaryti, o kilpos? 59 00:04:47,510 --> 00:04:49,510 Kai yra - taip? 60 00:04:49,510 --> 00:04:53,180 [Studentų] Kai jūs bandote gauti vartotojo įvesties, ar kažkas, kurį norite patikrinti 61 00:04:53,180 --> 00:04:59,700 Taip. Taip daryti, o kilpos, naudotojo įvesties yra didelis vienas. 62 00:04:59,700 --> 00:05:03,160 Štai kodėl pirmoji pora probleminių rinkinių, kai norite paprašyti, kad naudotojas, pavyzdžiui, 63 00:05:03,160 --> 00:05:08,520 "Give me eilutę," jūs negalite tol, kol jūs gaunate, kad eilutę. 64 00:05:08,520 --> 00:05:12,980 Ir tokiu būdu jūs, būtinai, reikia prašyti eilutę bent kartą. 65 00:05:12,980 --> 00:05:16,950 Bet tada, jei jie atsakys ką nors bloga, tada jums reikia kilpa atgal ir paklausti dar kartą. 66 00:05:16,950 --> 00:05:20,810 Bet išskyrus naudotojo įvesties, tai labai reta, kad aš susidurti bylą 67 00:05:20,810 --> 00:05:27,170 kur aš noriu bent kartą "kilpą", bet galbūt daugiau. 68 00:05:27,170 --> 00:05:33,370 Klausimų ar -? Ar kas nors naudoti do-while cikle niekur kitur? 69 00:05:33,370 --> 00:05:36,780 Gerai. Taigi kitą: "Ką pasiskelbusios identifikatorius 70 00:05:36,780 --> 00:05:43,310 paprastai rodo, jei išvedamas Apsukite metalinis garsas? " 71 00:05:43,310 --> 00:05:47,380 Taigi, kokios kodo galėčiau rašyti gauti nedeklaruojamą identifikatorių? " 72 00:05:47,380 --> 00:05:49,550 [Studentų], kad x = 2? 73 00:05:49,550 --> 00:05:52,650 Taigi, mes galime tiesiog pabandykite jį čia x = 2. 74 00:05:52,650 --> 00:06:04,830 Mes atliksime tai - oh, aš ne spustelėkite jį. Taigi čia mes gauname - viskas gerai. 75 00:06:04,830 --> 00:06:07,100 "Naudoti nedeklaruotus identifikatoriaus x". 76 00:06:07,100 --> 00:06:11,610 , Kad nedeklaruojamas identifikatorius, kintamasis. 77 00:06:11,610 --> 00:06:13,910 Jis dažnai vadiname kintamojo identifikatorių. 78 00:06:13,910 --> 00:06:17,300 Todėl ji gali žinoti, tai tikrai kintamasis, jis nežino, kas tai yra. 79 00:06:17,300 --> 00:06:19,380 Todėl identifikatorius. 80 00:06:19,380 --> 00:06:26,060 Tad kodėl jis nepasiskelbusių? Taip. 81 00:06:26,060 --> 00:06:32,190 Taigi turi būti aišku, terminologija, kintamojo deklaracija 82 00:06:32,190 --> 00:06:37,360 yra, kai jūs sakote "int x," ar "STRING Y", kokia būtų. 83 00:06:37,360 --> 00:06:41,910 Kintamojo iniciacijos, ar kintamojo priskyrimas, 84 00:06:41,910 --> 00:06:44,510 yra, kai jūs sakote "x = 2". 85 00:06:44,510 --> 00:06:52,950 Taigi, mes galime padaryti, tai atskirais etapais, int x, x = 2, o iki - čia mes galime turėti daiktų krūva - 86 00:06:52,950 --> 00:07:00,350 bet kol ši eilutė atsitinka, x dar niezainicjowanymi, bet jis buvo paskelbtas. 87 00:07:00,350 --> 00:07:06,760 Ir taip mes akivaizdžiai gali daryti į 1 eilutę, o dabar mes deklaruoti ir Inicijuojama. 88 00:07:06,760 --> 00:07:10,730 Turite klausimų? 89 00:07:10,730 --> 00:07:18,390 Ir, pagaliau, "Kodėl yra Cezario šifro nėra labai saugus?" 90 00:07:18,390 --> 00:07:23,830 Taigi, pirma, ar kas nors norite pasakyti, kas Cezario šifro yra? 91 00:07:23,830 --> 00:07:28,100 [Studentų] Cezaris Šifro tiesiog, kad jums suplanuoti, jums pereiti kiekvieną laišką, 92 00:07:28,100 --> 00:07:34,420 raidžių eiti tam tikras skaičius, ir judėti pirmyn per, ir tai nėra labai saugus, nes 93 00:07:34,420 --> 00:07:42,260 yra tik 26 galimos alternatyvos, ir jūs tiesiog išbandyti kiekvieną 1 iš šių, kol gausite ją. 94 00:07:42,260 --> 00:07:45,470 Oh. Taigi, norėčiau pakartoti? 95 00:07:45,470 --> 00:07:51,600 Cezaris Šifro, it's - Aš turiu galvoje, jūs spręsti su juo apie problemas, kurios 96 00:07:51,600 --> 00:07:56,110 arba Manau, problemą, kad ne hacker leidimas standartinis leidimas. 97 00:07:56,110 --> 00:08:01,550 Taigi Standard Edition problemą, gausite pranešimą, kaip "Hello, World" 98 00:08:01,550 --> 00:08:08,410 ir jūs taip pat turite kaip 6, ir pradėdami vartoti šį pranešimą, ir kiekvienas individualus charakteris, 99 00:08:08,410 --> 00:08:11,310 jūs pasukite jį 6 vietų abėcėlės. 100 00:08:11,310 --> 00:08:16,560 Taigi "h" Apie taptų h-i-j-k l m n. 101 00:08:16,560 --> 00:08:19,600 Taigi pirmoji raidė n. Mes darome tą patį el. 102 00:08:19,600 --> 00:08:23,530 Jei mes turime, pavyzdžiui, Z ar kažkas, tada mes wrap atgal aplink ". 103 00:08:23,530 --> 00:08:29,280 Bet kiekvienas personažas gauna kitą įtaisas persijungia vėliau 6 simbolių abėcėlės, o tai nėra labai saugus 104 00:08:29,280 --> 00:08:35,440 nes yra tik 26 galimybes, kaip daug būdų, galite wrap vieną raidę. 105 00:08:35,440 --> 00:08:42,919 Todėl galite tiesiog išbandyti visi. Iš jų 26 ir, matyt, pakankamai ilgą pranešimą, 106 00:08:42,919 --> 00:08:46,860 tik 1 iš šių galimų 26 dalykų, bus įskaitomas, 107 00:08:46,860 --> 00:08:50,300 ir įskaitomas vienas bus pradinis pranešimas. 108 00:08:50,300 --> 00:08:56,240 Taigi, tai nėra labai geras būdas ką nors ne visi šifravimo. 109 00:08:56,240 --> 00:08:59,070 Nesusiję su tų šortai, "Kas yra funkcija?" 110 00:08:59,070 --> 00:09:03,370 Taigi, kas yra funkcija? Taip. 111 00:09:03,370 --> 00:09:11,640 [Studentų] Tai kaip atskira kodo fragmentą, kad galite skambinti pereiti ir gauti grąžos vertę, nepriklausomai nuo jų. 112 00:09:11,640 --> 00:09:18,160 Taip. Taigi aš jį atsakyti, taip pat atsakyti į kitą - ar kartoti tik atsakyti į kitą. 113 00:09:18,160 --> 00:09:22,410 Galite naudoti funkcijas, o ne tik kopijuoti ir įklijuoti kodą, vėl ir vėl. 114 00:09:22,410 --> 00:09:27,200 Tiesiog pasiimti tą kodą, įdėti jį į fuction, ir tada galite tiesiog paskambinti funkcija 115 00:09:27,200 --> 00:09:29,870 ten, kur jums buvo kopijuoti ir įklijuoti. 116 00:09:29,870 --> 00:09:33,350 Taigi funkcijos yra naudinga. 117 00:09:33,350 --> 00:09:35,860 Taigi dabar mes padarysime aktualias problemas. 118 00:09:35,860 --> 00:09:46,490 Pirmasis. Taigi pirmojo idėja, perduoti jį eilutę, ir nepriklausomai nuo 119 00:09:46,490 --> 00:09:52,060 ar ji sako, mažosiomis? Ji nesako mažosiomis raidėmis. 120 00:09:52,060 --> 00:09:57,730 Taigi pranešimas gali būti bet kas, ir - oh no. Ji veikia. 121 00:09:57,730 --> 00:10:01,610 "Kad būtų paprasčiau, galite manyti, kad vartotojas tik įvesti mažosiomis raidėmis ir tarpai. 122 00:10:01,610 --> 00:10:08,180 Taigi, mes pereiname žinutę su tik mažosiomis raidėmis, ir tada mes pakaitomis 123 00:10:08,180 --> 00:10:15,450 tarp mažųjų ir didžiųjų - mes pakeisime eilutė, mažųjų ir didžiųjų, pakaitomis. 124 00:10:15,450 --> 00:10:22,920 Taigi, kol mes jums antrą net pasinerti į problemą, 125 00:10:22,920 --> 00:10:32,420 kas yra pirmas dalykas, kad mes turime padaryti? 126 00:10:32,420 --> 00:10:36,900 O, koks aš tiesiog spustelėkite? O, aš tiesiog paspaudėte laišką čia. 127 00:10:36,900 --> 00:10:42,870 Taigi pirmas dalykas, kurį reikia padaryti, - aš ieškau ne nuo? 128 00:10:42,870 --> 00:10:49,320 Ar tai šį vieną? 129 00:10:49,320 --> 00:10:51,320 Ne, jie yra vis dar ten, nors. 130 00:10:51,320 --> 00:10:55,160 Gerai, vis dar čia. 131 00:10:55,160 --> 00:11:03,160 Dabar mes negalime prisiimti? Taip. Čia mes negalime manyti, kad tai tik mažosiomis raidėmis, o erdvės. 132 00:11:03,160 --> 00:11:07,770 Taigi dabar mes turime spręsti su aplinkybe, jog raidės gali būti, bet mes norime, kad jie. 133 00:11:07,770 --> 00:11:11,910 Ir taip pirmas dalykas, kurį norite padaryti, tai tiesiog gauti pranešimą. 134 00:11:11,910 --> 00:11:19,790 Mes tiesiog reikia gauti eilutę, string s = GetString, gerai. 135 00:11:19,790 --> 00:11:24,890 Dabar ši problema, yra pora būdų, kaip tai daryti. 136 00:11:24,890 --> 00:11:29,840 Bet mes čia, kad nori naudoti Bitinis operatorius. 137 00:11:29,840 --> 00:11:35,280 Ar yra žmonių, kurie arba nebuvo tuo supersection, 138 00:11:35,280 --> 00:11:37,480 ar kažką, o ne žinoti, ką Bitinis operatoriai? 139 00:11:37,480 --> 00:11:41,710 Arba, kaip jie susiję su ASCII bet kokiu būdu? 140 00:11:41,710 --> 00:11:45,650 [Studentų] buvau ne tuo supersection, bet aš žinau, ką Bitinis operatoriai. 141 00:11:45,650 --> 00:11:49,560 Gerai. Taip, tada aš ne eiti per jų pagrindai, bet aš paaiškinti, 142 00:11:49,560 --> 00:11:51,830 tai, ką mes ketiname norite naudoti. 143 00:11:51,830 --> 00:11:59,680 Taigi, 'A': dvejetainis sostinę, skaičius yra 65. 144 00:11:59,680 --> 00:12:07,560 Aš tik ketina pažvelgti - 41 bus 01.000.001. 145 00:12:07,560 --> 00:12:14,170 Taip, kad turėtų būti 65 dešimtainis; todėl tai yra dvejetainis simbolių kapitalo A 146 00:12:14,170 --> 00:12:19,440 Dabar, dvejetainis pobūdžio mažosios raidės "a" 147 00:12:19,440 --> 00:12:33,350 bus tas pats, beveik. Yra tai, kad - 6, yeah. Tai yra teisinga. 148 00:12:33,350 --> 00:12:37,670 Taigi dvejetainis kapitalas, dvejetainis mažosiomis raidėmis. " 149 00:12:37,670 --> 00:12:43,940 Taigi pastebėti, kad skirtumas tarp A ir "a" - tai viena tiek. 150 00:12:43,940 --> 00:12:49,440 Ir tai atsitinka būti 32 bitų, tiek sudaro skaičių 32. 151 00:12:49,440 --> 00:12:53,910 Ir tai suprantama, nes yra 65; "a" yra 97. 152 00:12:53,910 --> 00:12:56,610 Skirtumas tarp jų yra 32. 153 00:12:56,610 --> 00:13:03,770 Taigi dabar mes žinome, mes galime konvertuoti nuo a iki "A", atsižvelgiant 154 00:13:03,770 --> 00:13:09,710 Bitinis Oring, kad atrodo kaip 1. 155 00:13:09,710 --> 00:13:20,900 Tai Bitinis arba, 00100000, ir kad duosiu "." 156 00:13:20,900 --> 00:13:26,850 Ir mes galime gauti nuo "a" iki Bitinis anding 157 00:13:26,850 --> 00:13:33,700 11, 0, toje vietoje, 11.111. 158 00:13:33,700 --> 00:13:43,840 Todėl tai bus tada duoti mums, ką "a", bet atšaukti šią individualią tiek, 159 00:13:43,840 --> 00:13:50,070 todėl mes turime 01000001, aš nežinau, jei aš suskaičiuoti. 160 00:13:50,070 --> 00:13:56,750 Tačiau šis Bitinis Oring techniką gauti iš kapitalo į mažąsias, 161 00:13:56,750 --> 00:14:02,080 ir Bitinis anding gauti iš mažosios į kapitalo ne tik A. 162 00:14:02,080 --> 00:14:06,510 Visas raides, K vs K, Z vs Z 163 00:14:06,510 --> 00:14:10,080 visi jie yra tik ketina skirtis šio vienintelio tiek. 164 00:14:10,080 --> 00:14:16,290 Ir todėl jūs galite pakeisti bet kuriuo mažosiomis bet didžiąja raide, ir atvirkščiai. 165 00:14:16,290 --> 00:14:26,670 Gerai. Taigi paprastas būdas gauti iš to - vietoj to, kad 166 00:14:26,670 --> 00:14:32,170 surašyti kokia 1011111 - paprastas būdas atstovauti šį numerį, ir tai yra ne vienas 167 00:14:32,170 --> 00:14:39,710 , kad aš nuėjau į supersection, bet tildė (~) yra dar vienas Bitinis operatorius. 168 00:14:39,710 --> 00:14:42,520 ~ Ar tai žiūri bitų atstovavimas. 169 00:14:42,520 --> 00:14:45,630 Paimkime bet kurį skaičių. 170 00:14:45,630 --> 00:14:53,130 Tai tik kai dvejetainis skaičius, ir kas ~ nėra tai tik salto visi bitai. 171 00:14:53,130 --> 00:15:00,630 Taigi tai buvo 1, 0, tai 0, 1, 010.100. 172 00:15:00,630 --> 00:15:08,320 Taip, kad visi ~. Taigi 32 bus numeris - atsikratyti, kad 173 00:15:08,320 --> 00:15:23,320 taip. 32 bus skaičius 00.100.000, ir taip ~ tai bus 174 00:15:23,320 --> 00:15:29,980 šis skaičius čia, kad aš anded "A". 175 00:15:29,980 --> 00:15:35,600 Ar visi matote, kad? Tai yra gana dažnas, pavyzdžiui, kai norite išsiaiškinti, 176 00:15:35,600 --> 00:15:40,740 vėliau dalykų, kad mes galime būti matyti, kai norime pamatyti, jei 177 00:15:40,740 --> 00:15:44,710 ar mes norime viską, kiekvieną bitų rinkinys, išskyrus 1 178 00:15:44,710 --> 00:15:47,910 jūs linkę daryti ~ tiek, kad mes nenorime, nustatytą. 179 00:15:47,910 --> 00:15:53,090 Taigi, 32 bitų rinkinį mes nenorime, kad mes ~ iš 32. 180 00:15:53,090 --> 00:15:57,790 Gerai. Taigi, mes galime naudoti visi tie čia. 181 00:15:57,790 --> 00:16:03,000 Viskas gerai, tai gerai, jei ne viskas, mes lėtai vaikščioti per kartu, 182 00:16:03,000 --> 00:16:11,870 ar vaikščioti per tai, kad per šį. Walk through. 183 00:16:11,870 --> 00:16:20,790 Taigi, mes turime eilutę, ir mes norime, kilpa ant kiekvieno tos eilutės pobūdžio ir padaryti kažką į jį. 184 00:16:20,790 --> 00:16:26,710 Taigi, kaip mes kilpa per eilutę? Ką turėtume naudoti? 185 00:16:26,710 --> 00:16:30,980 Aš nesiruošia tai padaryti čia. Taip. 186 00:16:30,980 --> 00:16:42,940 Taigi, aš turiu savo Iterator, ir jis sakė, kad tai, tačiau kaip man žinoti, kiek simbolių į eilutę? 187 00:16:42,940 --> 00:16:47,030 Strlen (-ai), tada i + +. 188 00:16:47,030 --> 00:16:49,860 Taigi, ką aš padariau, čia nėra pats geriausias būdas, kaip daryti dalykus. 189 00:16:49,860 --> 00:16:51,860 Ar kas nors žino kodėl? 190 00:16:51,860 --> 00:16:55,290 Todėl, kad jūs patikrinti eilutę, kiekvieną kartą, kalbą. 191 00:16:55,290 --> 00:17:06,859 Todėl mes ketiname norite perkelti strlen, galiu pasakyti, čia, int ilgis = strlen (-ų) 192 00:17:06,859 --> 00:17:11,900 ir tada man 00:17:20,410 Aš taip pat galėtų padaryti int i = 0, ilgis = strlen (-ai). 194 00:17:20,410 --> 00:17:25,010 Ir todėl tai yra šiek tiek priimtinesnis, nes dabar aš apribojo taikymo sritį 195 00:17:25,010 --> 00:17:29,150 kintamojo ilgio tik tai "kilpa", užuot paskelbusi jį prieš 196 00:17:29,150 --> 00:17:34,990 ir kad ji visada yra ir tuo atveju, jei neišgirdau kodėl tai blogai, 197 00:17:34,990 --> 00:17:39,410 arba kodėl originalas buvo blogai, input - pradėti už linijos. 198 00:17:39,410 --> 00:17:43,380 Aš patikrinti būklę. Ar i 00:17:46,790 Taigi s ilgis, galime dirbti su "labas" visą laiką. 200 00:17:46,790 --> 00:17:49,670 Taigi ilgis, h-e-l-l-o. Ilgis yra 5. 201 00:17:49,670 --> 00:17:57,580 Taigi, i = 0, ilgis 5, todėl aš ne <5, todėl toliau kilpa. 202 00:17:57,580 --> 00:18:02,750 Tada mes einame dar kartą. Mes tikriname sąlygą. Ar i 00:18:08,390 Todėl galime patikrinti Hello ilgį. H-e-l-l-o. Štai 5; aš ne <5, todėl mes ir toliau vėl. 204 00:18:08,390 --> 00:18:13,330 Taigi, mes apskaičiuoti, mes tikimės Apie kiekvienam kilpa iteracijos 205 00:18:13,330 --> 00:18:17,380 net maniau, kad niekada pakeisti, tai visada bus 5. 206 00:18:17,380 --> 00:18:22,530 Taigi mes tiesiog prisiminti 5 priekyje, ir dabar viskas geriau. 207 00:18:22,530 --> 00:18:24,990 Taigi iteravimu per visą eilutę. 208 00:18:24,990 --> 00:18:31,470 Ką mes norime padaryti už kiekvieną eilutę pobūdžio? 209 00:18:31,470 --> 00:18:38,510 [Studentų sakant, nesuprantamas] 210 00:18:38,510 --> 00:18:47,000 Taip. Taigi, jei simbolis yra ne raidinis, tada mes tiesiog norite praleisti. 211 00:18:47,000 --> 00:18:52,300 Nes mes tik rūpi abėcėlės raidėmis, mes negalime pasinaudoti numerį. 212 00:18:52,300 --> 00:19:10,850 Taigi, kaip mes galime tai padaryti? Taigi mūsų būklę, todėl, jei norime kažką - jei tai abėcėlės tvarka. 213 00:19:10,850 --> 00:19:14,060 Taip, kaip mes tai patikrinti? 214 00:19:14,060 --> 00:19:18,720 [Studentų] Jūs galite tiesiog naudoti šią funkciją yra alfa. 215 00:19:18,720 --> 00:19:23,160 Yra tai, kad nė vieno iš jų, arba bet yra panašių char.h ar kažką? 216 00:19:23,160 --> 00:19:32,710 Tegul ne naudoti, yra alfa funkcija, ir aiškus - todėl mes turime s [i], 217 00:19:32,710 --> 00:19:40,460 , kuri yra aštuntoji s pobūdis, atminkite, kad eilutė yra simbolių masyvas, 218 00:19:40,460 --> 00:19:43,180 todėl aštuntas pobūdis s. 219 00:19:43,180 --> 00:19:49,280 Dabar, jei tai didžioji raidė, mes žinome, ji turi būti tam tikroje juostoje. 220 00:19:49,280 --> 00:19:54,370 Ir kas tai yra diapazonas? 221 00:19:54,370 --> 00:20:07,860 Taip. Taigi, jei s [i] yra ≥ 65 metų amžiaus, ir s [i] yra ≤ 90, ką reikėtų daryti, o ne? 222 00:20:07,860 --> 00:20:18,470 Taip. Taigi, jūs turėtumėte visiškai niekada net reikia žinoti ASCII reikšmes, nieko kada nors. 223 00:20:18,470 --> 00:20:25,640 Niekada galvoti apie skaičių 65, 90, 97 ir 102, ar kokia ji yra. 224 00:20:25,640 --> 00:20:32,470 Jums nereikia 112? Jums nereikia žinoti, ne visi. Kad negerai. 225 00:20:32,470 --> 00:20:41,940 Naudoti tik vieno citata simbolių, viengubas kabutes konstantos. Taigi, "A" ir mažiau kaip 90 "Z." 226 00:20:41,940 --> 00:20:47,930 Ir tai yra žymiai geriau, aš ne žinoti, ne mano galvos viršuje, kad Z yra 90. 227 00:20:47,930 --> 00:20:52,690 Aš žinau, ne mano galvos viršuje, kad "Z" kapitalas Z. 228 00:20:52,690 --> 00:21:02,100 Taip ilgai, kaip tai yra kapitalo diapazone kapitalo Z, ar mes, gali patikrinti, mažosiomis raidėmis, 229 00:21:02,100 --> 00:21:17,010 Arba, jei tai intervale ≥ "a" ir ≤ z. 230 00:21:17,010 --> 00:21:19,010 Taigi, kad mūsų sąlyga. 231 00:21:19,010 --> 00:21:22,520 Stilius, kur dėti šiuos dalykus skiriasi. 232 00:21:22,520 --> 00:21:29,520 Aš tai padaryti, kaip šis. 233 00:21:29,520 --> 00:21:31,520 Dabar, ką mes norime padaryti? 234 00:21:31,520 --> 00:21:39,530 Mes žinome, šis laiškas yra simbolių, abėcėlės raidė. 235 00:21:39,530 --> 00:21:46,270 Taigi mums reikia kaitalioti, ar tai dabar turėtų būti raidė arba mažosiomis raidėmis. 236 00:21:46,270 --> 00:21:48,820 Kaip mes sekti, iš kurių vienas, mes norime, kad ji būtų? 237 00:21:48,820 --> 00:21:55,520 [Studentų balsas, nesuprantami] 238 00:21:55,520 --> 00:21:59,150 Taip taip, bet leiskite man patikrinti. 239 00:21:59,150 --> 00:22:04,910 Modulis 0-2 buvo pasakyta, buvo pasiūlymas išmestas, ir aš su tuo sutinku. 240 00:22:04,910 --> 00:22:11,780 Išskyrus tuos atvejus, pranešimas, kad, kaip tai atveju? Taip. 241 00:22:11,780 --> 00:22:18,270 Tai kas kita, bet mes negalime i 2 modulis, arba i mod 2, nes 242 00:22:18,270 --> 00:22:22,950 pastebėsite, kad E yra sostinė ir "a" yra mažosiomis raidėmis? Bet ten vieta juos atskirti? 243 00:22:22,950 --> 00:22:27,150 Todėl jie bus pačią mod 2, bet jie skirtingi atvejai. 244 00:22:27,150 --> 00:22:29,150 [Studento klausimas, nesuprantamas] 245 00:22:29,150 --> 00:22:34,690 Taip. Taigi mes tik ketina išlaikyti skaičius. 246 00:22:34,690 --> 00:22:38,730 Mes taip pat galėtų padaryti, kad čia, jei norime, kad gali gauti šiek tiek griozdiškas 247 00:22:38,730 --> 00:22:41,300 kilpos deklaracijų; aš įdėti jį čia. 248 00:22:41,300 --> 00:22:48,840 Taigi int count = prasideda 0. 249 00:22:48,840 --> 00:22:54,070 Ir todėl dabar, aš ruošiuosi skaičiuoti, kiek raidiniai simboliai mes jau. 250 00:22:54,070 --> 00:22:59,550 Todėl mes neišvengiamai skaičiuoti + +, nes mes radome dar vieną abėcėlės simbolį. 251 00:22:59,550 --> 00:23:09,130 Bet, kad dabar jūs sakote, jei count mod 2. 252 00:23:09,130 --> 00:23:12,590 Taigi, ką daryti, jei skaičius mod 2? Oh. Aš padarysiu == 0 dabar. 253 00:23:12,590 --> 00:23:21,740 Mes taip pat eiti per tą. Taigi, jei skaičius mod 2 == 0, kas tada? 254 00:23:21,740 --> 00:23:27,830 [Studentai atsakymas, nesuprantami] 255 00:23:27,830 --> 00:23:32,750 Taigi, mes norime, kad ji galų gale didžiosiomis raidėmis. 256 00:23:32,750 --> 00:23:37,520 Yra 2 atvejai; didžiąsias ir mažąsias yra 2 atvejai. 257 00:23:37,520 --> 00:23:40,990 Taigi, jei mes mums reikia, kad jis didžiąsias mažosiomis raidėmis. 258 00:23:40,990 --> 00:23:43,710 , Jei tai didžiosios, mums nereikia nieko daryti. 259 00:23:43,710 --> 00:23:50,760 Bet, yra būdas - shouldn't buvo apversta - 260 00:23:50,760 --> 00:23:54,800 kad mes net nereikia patikrinti, ar jis didžiąsias arba mažąsias? 261 00:23:54,800 --> 00:24:02,240 Ką mes galime padaryti, visada įsitikinkite, kad mes visada galų gale didžiosiomis raidėmis? 262 00:24:02,240 --> 00:24:07,830 Taigi pastebėti, ką mes padarėme mažosiomis raidėmis "A", ką daryti, jei mes padarėme šį tą patį tiksliai dalykas, į didžiąsias? 263 00:24:07,830 --> 00:24:11,900 Ar didžiąsias pakeisti, ar vertės pokyčius? 264 00:24:11,900 --> 00:24:23,100 Taip. Taigi bet didžioji raidė Bitinis anded su ~ 32 bus, kad pats didžiąsias pobūdis 265 00:24:23,100 --> 00:24:29,220 nes visas didžiąsias pobūdžio 32 bitų nėra nustatytas. 266 00:24:29,220 --> 00:24:40,920 Taigi, jei norime pareikšti pobūdį s [i], mes norime, kad ji taptų mažosiomis arba didžiosiomis raidėmis. 267 00:24:40,920 --> 00:24:46,890 Taigi, jei ji buvo mažosiomis raidėmis, tai dabar yra didžiosiomis raidėmis, jei ji buvo didžiąsias, jis vis dar didžiosiomis raidėmis, ir viskas. 268 00:24:46,890 --> 00:24:54,290 Aš pasakiau tai supersection: Jūs galite naudoti 32, jei jūs norite, bet esu linkęs teikti pirmenybę daro "a" - 269 00:24:54,290 --> 00:25:01,150 o ne tik paprasto 32, nes jis gali būti bet koks kitas tiek. 270 00:25:01,150 --> 00:25:03,610 Po to, kai 32 bitų, tai gali būti bet kuris iš šių, ar mes neturi pakankamai 271 00:25:03,610 --> 00:25:05,840 numeriai atstovauti visus simbolius. 272 00:25:05,840 --> 00:25:09,110 Taigi, jei jūs gaunate 32 bitų, tai gali būti 64 bitų, tai gali būti 128 bitų. 273 00:25:09,110 --> 00:25:13,990 Bet iš tų bitų gali būti tiek, kad atskiria didžiąsias ir mažąsias. 274 00:25:13,990 --> 00:25:18,350 Aš ne reikia žinoti, kad jis yra 32 bitų. 275 00:25:18,350 --> 00:25:27,130 Aš galiu naudoti šią "A" - gauti tiek, kad skiriasi tarp dviejų 276 00:25:27,130 --> 00:25:33,000 nereikia remtis Magiškas skaičius yra 32. 277 00:25:33,000 --> 00:25:38,770 Ir iki šiol, dar tikėtis buvo keista, ir tt, ką aš noriu padaryti? 278 00:25:38,770 --> 00:25:43,920 [Studentų atsakymai, neįskaitomai] 279 00:25:43,920 --> 00:25:45,920 [Studentų] Kas tai? 280 00:25:45,920 --> 00:25:49,850 Aš tai padaryti per 1 sekundę. 281 00:25:49,850 --> 00:25:55,690 Taigi dabar, jei noriu - aš noriu padaryti, kad charakteris yra dabar mažosiomis raidėmis, 282 00:25:55,690 --> 00:26:04,140 ir todėl aš gali arba atitinkamai 32 ir 32 dalį "a" - A. 283 00:26:04,140 --> 00:26:06,510 Tačiau pastebėkite, tais pačiais argumentais, kaip ir ankstesnis, kad jei 284 00:26:06,510 --> 00:26:11,670 laiškas jau buvo mažosiomis tada Oring 32 tik išlaiko mažosiomis. 285 00:26:11,670 --> 00:26:16,220 Ji negali keisti savo pradinį tapatumą. 286 00:26:16,220 --> 00:26:19,910 Bet dabar aš neturiu, kad būtų išvengta, sakydamas: "Jei tai yra mažosiomis tiesiog pamiršti apie jį, 287 00:26:19,910 --> 00:26:23,650 jei tai didžiosiomis raidėmis, tada pakeiskite jį. " 288 00:26:23,650 --> 00:26:26,900 Tai daug patogiau tai padaryti. 289 00:26:26,900 --> 00:26:33,190 [Studentų] Ar kad strategija atimant didžiąsias mažosiomis darbo, jei tai buvo ne 32? 290 00:26:33,190 --> 00:26:35,330 Jei jis buvo, pavyzdžiui, 34 ar kažką? 291 00:26:35,330 --> 00:26:41,840 Taigi, jūs turite žinoti, kad skirtumas yra tarp 2 -? >> 1 bitas. 292 00:26:41,840 --> 00:26:49,840 Tai gali būti daugiau nei 1 bitas, kaip ilgai, kaip ir visi žemiau šios pozicijos bitų yra tas pats. 293 00:26:49,840 --> 00:26:58,500 Taigi, mes turime bent 26 simbolių arba yra 26 simboliai. 294 00:26:58,500 --> 00:27:04,590 Taigi, mums reikia mažiausiai 26 numerius atstovauti skirtumą - 295 00:27:04,590 --> 00:27:07,650 Skirtumas tarp A ir "a" turi būti bent 26, 296 00:27:07,650 --> 00:27:10,760 kitaip mes nebūtų reiškę visus kapitalo numerius. 297 00:27:10,760 --> 00:27:18,630 Tai reiškia, kad, jei mes pradėsime nuo 1, tai ketinate naudoti visi šitie bitai, 298 00:27:18,630 --> 00:27:23,900 visų šių pirmų 5 bitai, atstovauja viską per Z. 299 00:27:23,900 --> 00:27:32,170 Štai kodėl kitą bitų, ar šis bitas, kitas bitas yra vienas, kad pasirinkta atskirti ir "." 300 00:27:32,170 --> 00:27:40,930 Tai taip pat, kodėl, ASCII lentelę, yra 5 simboliai, atskirti didžiąsias raides mažosiomis raidėmis. 301 00:27:40,930 --> 00:27:49,050 Nes jie yra simboliai, papildomai 5 kad iškelia 32 yra tarp jų skirtumas. 302 00:27:49,050 --> 00:27:51,840 [Studentų] Taigi, mes galime tai padaryti, nes ASCII sukurta, kad taip. 303 00:27:51,840 --> 00:27:57,280 Taip. Bet ASCII - skirtumas taip pat gali būti tiek iš šių bitų. 304 00:27:57,280 --> 00:28:12,040 Pavyzdžiui, jei buvo 10000001, ir "a" 11100001 - aš pamiršiu, nesvarbu. 305 00:28:12,040 --> 00:28:18,100 Bet jei jis buvo tai, tada mes galime vis dar naudoja "A" - A. 306 00:28:18,100 --> 00:28:22,650 Tai tik dabar skirtumas tarp A ir "" vis dar šių 2 bitai. 307 00:28:22,650 --> 00:28:32,240 Manau, kad tai parašyta 48. Tai yra 32 + 64? Manau, kad tai? 308 00:28:32,240 --> 00:28:40,160 Ji vis tiek būtų 2 bitai, kiekvieną simbolį, pavyzdžiui, Z ir Z, K ir K, 309 00:28:40,160 --> 00:28:45,160 jie vis dar turi tą patį tiksliai bitų nustatytus išskyrus šių 2 bitai. 310 00:28:45,160 --> 00:28:48,870 Taip ilgai, kaip tai visada teisinga, nepriklausomai nuo to, jei mes naudojame ASCII arba kai kita sistema, 311 00:28:48,870 --> 00:28:53,050 taip tol, kol yra tik skaičius bitai, kad yra skirtingos kiekvieno požymio, 312 00:28:53,050 --> 00:28:55,050 tada veikia puikiai. 313 00:28:55,050 --> 00:29:06,110 Tai tiesiog, kad 32 buvo įsteigta, nes tai pirmasis galbūt galėtume naudoti. >> Cool. 314 00:29:06,110 --> 00:29:14,520 Aš linkęs teikti pirmenybę, tuo atveju, jei jūs dar nematėte, jei blokas yra tik viena linija, 315 00:29:14,520 --> 00:29:24,280 galite atsikratyti Garbanotasis petnešos, kad aš linkę nori tai daryti. 316 00:29:24,280 --> 00:29:34,010 Be to, jūs žinote, kaip mes galime padaryti kažką panašaus s [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Taip pat galite padaryti s [i] Bitinis IR = 32. 318 00:29:41,090 --> 00:29:46,400 Ir Bitinis ŠS = 32. 319 00:29:46,400 --> 00:29:51,490 Taip pat skaičiuoti mod 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Todėl nepamirškite, kad - Aš ne rašyti bet ne nulinė vertė yra teisinga, ir 0, yra klaidinga. 321 00:30:00,900 --> 00:30:07,880 Taigi, "jei skaičius mod 2 == 0" yra kaip sakydamas "jei nesiskaito mod 2." 322 00:30:07,880 --> 00:30:11,580 Aš tikriausiai tiesiog pasikeitė linijos ir pasakė: "Jei skaičius mod 2 323 00:30:11,580 --> 00:30:15,350 arba 1, dar neturi ir 1 ", todėl, kad aš ne reikia", o ne ". 324 00:30:15,350 --> 00:30:18,650 Bet tai veikia lygiai taip pat. 325 00:30:18,650 --> 00:30:25,660 Ir ką dar aš galiu padaryti? 326 00:30:25,660 --> 00:30:29,060 Jūs galite juos sujungti su trinariu, jei norėjo, bet tada aš tiesiog padaryti ką Mesjė 327 00:30:29,060 --> 00:30:33,770 ir tikriausiai sunkiau skaityti, kad mes ne padaryti, kad. 328 00:30:33,770 --> 00:30:37,330 Kiekvienas turi kitų pasiūlymų? 329 00:30:37,330 --> 00:30:41,580 Yra tai, kad visa problema paprašė? Oh yeah. 330 00:30:41,580 --> 00:30:51,070 Taigi atsikratyti šių tuščiomis eilutėmis, dabar mes spausdinti f% s yra vienas styginių orkestrui, 331 00:30:51,070 --> 00:30:56,620 Mes spausdinti f, s. 332 00:30:56,620 --> 00:30:59,330 Dabar galime paleisti jį. Aš nieko blogo? 333 00:30:59,330 --> 00:31:03,200 Kad tai \ ", aš noriu n. 334 00:31:03,200 --> 00:31:07,840 Gerai. Dabar mes jį paleisti. Tai tikriausiai klykauti į mane. 335 00:31:07,840 --> 00:31:11,250 Strlen yra mieste string.h. 336 00:31:11,250 --> 00:31:14,290 Taigi tai yra Apsukite metalinis garsas malonus dalykas, apie tai jums pasakys, ką jis yra, 337 00:31:14,290 --> 00:31:19,140 vietoj Persijos įlankos bendradarbiavimo tarybos, kuri tiesiog sako: "Ei, jūs pamiršote ką nors, aš ne žinoti, ką jis buvo." 338 00:31:19,140 --> 00:31:29,220 Bet tai pasakys man: "Tu, apima string.h". 339 00:31:29,220 --> 00:31:32,130 Todėl aš ne greitai nieko, todėl nieko nesakau. 340 00:31:32,130 --> 00:31:42,540 Bet mes padarysime jų pavyzdžiu ", thanks 4 Pridėti". 341 00:31:42,540 --> 00:31:47,880 Kad atrodo teisinga. Valio. 342 00:31:47,880 --> 00:31:52,370 Taigi, grįžtant prie jūsų pagrindinis, aš beveik niekada daryti. 343 00:31:52,370 --> 00:31:57,110 Tai neprivaloma. Ir pagrindinis yra tik funkcija, kuriame ji yra neprivaloma. 344 00:31:57,110 --> 00:32:07,140 Jei nenorite grįžti nieko iš pagrindinių, tai daroma prielaida, kad jums skirtas grįžti 0. 345 00:32:07,140 --> 00:32:13,070 Turite klausimų? 346 00:32:13,070 --> 00:32:20,980 Gerai. Taigi, dabar antroji problema. 347 00:32:20,980 --> 00:32:24,810 "Prisiminkite, nuo 2 SAVAITĖ antrojo paskaitą, kad Swapping 2 kintamųjų reikšmes, perduodant 348 00:32:24,810 --> 00:32:30,780 tie 2 kintamieji funkcijos (net jei vadinama swap) nėra tiksliai dirbti, bent jau ne be "rodykles". " 349 00:32:30,780 --> 00:32:37,020 Ir nekreipti dėmesio į nurodymus, kol mes gauti į juos. 350 00:32:37,020 --> 00:32:40,070 Mes norime, kad apsikeitimo 2 kintamuosius, mes ne naudojant funkciją tai padaryti. 351 00:32:40,070 --> 00:32:43,410 Mes vis dar ketinate daryti pagrindinis, kaip ji sako. 352 00:32:43,410 --> 00:32:48,360 Bet naudoti tuos 2 kintamuosius, mes nenori naudoti laikiną kintamąjį. 353 00:32:48,360 --> 00:32:50,770 Yra 2 būdai, kaip tai padaryti. 354 00:32:50,770 --> 00:32:56,310 Jūs galite tai padaryti, naudojant Tradicinis dviejų operatorius. 355 00:32:56,310 --> 00:33:00,180 Taigi, ar kas nors žino tai, kad greitas ir purvinas būdas? 356 00:33:00,180 --> 00:33:07,650 Jis iš tiesų gali imtis yra mąstymo minutę. Jeigu aš turiu 357 00:33:07,650 --> 00:33:12,130 Įvesti problemą, kaip jie prašo. Taigi, jei aš turiu 2 kintamuosius, A, kuri yra tik sveikasis skaičius 358 00:33:12,130 --> 00:33:17,800 kad jie suteikia man, ir suma kintamasis B, kuri yra dar vienas sveikasis skaičius, kad aš. 359 00:33:17,800 --> 00:33:22,700 Taigi, jei aš turiu šias 2 kintamuosius, dabar aš noriu apsikeitimo juos. 360 00:33:22,700 --> 00:33:31,550 Tradicinis, naudojant savo įprastą dvejetainius operatorius, aš turiu galvoje, kaip +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Ne Bitinis ūkio subjektai, kurie veikia dvejetainių. 362 00:33:36,630 --> 00:33:39,600 Taigi, naudojant, -, +, ÷ s, ir visiems tiems,. 363 00:33:39,600 --> 00:33:52,980 Galime perdeti daro kažką panašaus į a = a + b ir b = a - b = a - b. 364 00:33:52,980 --> 00:34:04,260 Taigi, normalumas patikrinti, ir tada mes pamatysime, kodėl tai veikia. 365 00:34:04,260 --> 00:34:13,320 Tarkime, = 7, b = 3, tada a + b bus 10. 366 00:34:13,320 --> 00:34:18,820 Taigi mes dabar nustatyti = 10, ir tada mes darome, b = a - b. 367 00:34:18,820 --> 00:34:30,250 Taigi, ką mes darome, b = a - b, kuris bus 7 ir b = a - b kartą, 368 00:34:30,250 --> 00:34:38,650 arba = a - b. Kuris ketina būti 10 - 7, kuriame yra 3. 369 00:34:38,650 --> 00:34:44,850 Taigi dabar, teisingai, "a", buvo 7, b (3) buvo, o dabar b yra 7 ir "a" yra 3. 370 00:34:44,850 --> 00:34:48,679 Taigi, kad šios rūšies prasminga; "a" yra iš 2 skaičių derinys. 371 00:34:48,679 --> 00:34:53,000 Šiuo metu, "a" derinys, ir tada mes atimant iš originalo b, 372 00:34:53,000 --> 00:34:56,860 ir tada mes atimant, kas buvo originalas "." 373 00:34:56,860 --> 00:35:01,150 Bet tai neveikia visais numeriais. 374 00:35:01,150 --> 00:35:08,880 Norėdami pamatyti tai, aptarkime sistemą, todėl mes paprastai galvojame kaip 32 bitų sveikųjų skaičių. 375 00:35:08,880 --> 00:35:13,050 Kviečiame dirbti kažką, kad tik kaip 4 bitai. 376 00:35:13,050 --> 00:35:15,450 Tikiuosi sugalvoti gerą pavyzdį dabar. 377 00:35:15,450 --> 00:35:18,680 Taigi, aš žinau, tai bus lengva. 378 00:35:18,680 --> 00:35:26,720 Tarkime, mūsų 2 numeriai yra 1111, ir 1111, todėl mes dvejetainiu dabar. 379 00:35:26,720 --> 00:35:34,630 Faktines po kablelio, jei norite, galvoti apie tai, kad taip, kad a = 15, b = 15. 380 00:35:34,630 --> 00:35:37,630 Ir todėl tikimės, kad, kai mes apsikeitimo juos - jie net turi tuos pačius numerius, 381 00:35:37,630 --> 00:35:41,140 bet aš jį šiuo būdu. 382 00:35:41,140 --> 00:35:47,100 Padarykime juos ne tuos pačius numerius. Darom 1111 ir 0001. 383 00:35:47,100 --> 00:35:51,860 Taigi = 15 ir b = 1. 384 00:35:51,860 --> 00:35:57,670 Po apsikeitimo juos, mes tikimės, kad "a" turi būti 1 ir b bus 15. 385 00:35:57,670 --> 00:36:01,780 Taigi, mūsų pirmas žingsnis yra a = a + b. 386 00:36:01,780 --> 00:36:08,770 Mūsų skaičiai yra tik 4 bitų pločio, todėl "", kuris yra 1111, + b, kuris yra 0001, 387 00:36:08,770 --> 00:36:16,780 ketina baigti yra 10.000, bet turime tik 4 bitai. 388 00:36:16,780 --> 00:36:22,540 Taigi dabar = 0. 389 00:36:22,540 --> 00:36:34,080 Ir dabar mes norime nustatyti, b = a - b - iš tikrųjų, tai vis dar veikia, puikiai. 390 00:36:34,080 --> 00:36:39,630 = a - b - galime pamatyti, jei tai veikia, puikiai. 391 00:36:39,630 --> 00:36:53,720 Taip, tada b = 0 - 1, kuri vis tiek būtų 15, ir tada a = a - b, kuris būtų 1. 392 00:36:53,720 --> 00:36:56,210 Gal tai veikia. 393 00:36:56,210 --> 00:36:59,020 Jaučiu, kaip ten priežastis jis neveikia naudojant reguliariai. 394 00:36:59,020 --> 00:37:06,400 Gerai, kad remiantis prielaida, kad jis neturi dirbti su reguliariais dvejetainių operacijų, 395 00:37:06,400 --> 00:37:15,040 ir aš žiūrėti - aš "Google" norėdami pamatyti, jei tai yra tiesa. 396 00:37:15,040 --> 00:37:23,490 Taigi, mes norime tai padaryti naudojant Bitinis operatorius, ir raktas čia yra XOR. 397 00:37:23,490 --> 00:37:28,780 Taigi, įvedant XOR (^), jei jūs dar nematėte, tai dar. 398 00:37:28,780 --> 00:37:34,610 Tai, vėlgi, Bitinis operatorius, todėl ji veikia tiek bitų, ir it's 399 00:37:34,610 --> 00:37:39,910 Jei turite bitai 0 ir 1, tai bus 1. 400 00:37:39,910 --> 00:37:45,230 Jei turite 1 ir 0 bitai, tai bus 1, turite bitai 0 ir 0, tai bus 0, 401 00:37:45,230 --> 00:37:47,640 ir, jei turite 1 ir 1 bitai, tai bus 0. 402 00:37:47,640 --> 00:37:56,180 Taigi, tai, kaip OR. Jei kuri nors iš bitai yra tiesa, tai 1, bet skirtingai ARBA, jis negali būti abu bitai, kad yra teisinga. 403 00:37:56,180 --> 00:37:59,320 Ar tai būtų 1, XOR tai turėtų būti 0. 404 00:37:59,320 --> 00:38:02,250 Taigi, mes ketiname norite naudoti XOR čia. 405 00:38:02,250 --> 00:38:09,960 Pagalvokite apie tai už minutę, aš ruošiuosi į "Google". 406 00:38:09,960 --> 00:38:16,230 Na, jūs negalite skaityti, kad, aš esu šiuo metu XOR apsikeitimo algoritmo puslapyje. 407 00:38:16,230 --> 00:38:21,340 Tikimės, kad tai paaiškinti, kodėl Negaliu - 408 00:38:21,340 --> 00:38:34,190 Tai yra būtent tai algoritmas, kad mes tiesiog padarė. 409 00:38:34,190 --> 00:38:37,330 Aš vis dar suprasti, kodėl - turiu tik nuskintos blogą pavyzdį, 410 00:38:37,330 --> 00:38:44,940 bet šiuo atveju, kai "a" atsitiko taps 0, po to, kai gauti iki 5 bitų, todėl dabar "a" yra 0, 411 00:38:44,940 --> 00:38:48,730 , kad yra tai, kas vadinama "integer overflow". 412 00:38:48,730 --> 00:38:54,370 Pasak Vikipedijos, "Skirtingai nuo XOR apsikeitimo sandorių, šis variantas reikalauja, kad ji naudoja kai kuriuos metodus 413 00:38:54,370 --> 00:38:59,780 užtikrinti, kad x + y nesukelia sveikojo skaičiaus perpildymo. " 414 00:38:59,780 --> 00:39:08,350 Taigi tai tikrai turi problemų, tai buvo integer overflow, bet aš ką nors blogo. 415 00:39:08,350 --> 00:39:10,520 Nesu tikras. Aš pabandysiu sugalvoti kitą. 416 00:39:10,520 --> 00:39:13,640 [Studentų] Na, yra ne sveikasis skaičius perpildymo, kai bandote įdėti ten 417 00:39:13,640 --> 00:39:16,640 didesnis nei suma, kurią skyrė bitų? 418 00:39:16,640 --> 00:39:23,730 Taip. Mes turime 4 bitai. That - mes turėjome 4 bitai, mes tada pabandykite pridėti 1 jai, kad mes galų gale su 5 bitai. 419 00:39:23,730 --> 00:39:26,690 Tačiau penktoji tiek tik gauna nukirto, yeah. 420 00:39:26,690 --> 00:39:28,970 Jis iš tiesų gali 421 00:39:28,970 --> 00:39:33,010 [Studentų] Ar tai mesti klaidą, ar ši - norėčiau, kad mesti klaidą? 422 00:39:33,010 --> 00:39:40,720 Nr Taigi čia ne klaida. Kai jūs gaunate į surinkimo lygio specialus tiek 423 00:39:40,720 --> 00:39:47,020 kažkur yra nustatyta, kad pasakė, kad buvo perkrautas, bet, C rūšies tiesiog nereikia spręsti, kad. 424 00:39:47,020 --> 00:39:55,160 Jūs iš tikrųjų galite ne kovoti su ja, nebent jūs naudojate specialias surinkimo instrukcijas C 425 00:39:55,160 --> 00:39:58,110 Pagalvokime apie XOR apsikeitimo sandorio. 426 00:39:58,110 --> 00:40:02,220 Ir manau, kad Vikipedijos straipsnis gali taip pat buvo suprantama, kad 427 00:40:02,220 --> 00:40:07,310 Todėl ji taip pat išvedė modulinę aritmetiką, todėl aš manau, aš buvau, teoriškai daro modulinę aritmetiką 428 00:40:07,310 --> 00:40:11,160 , kai pasakiau, kad 0 - 1 yra 15 iš naujo. 429 00:40:11,160 --> 00:40:15,410 Kad gali iš tikrųjų - reguliariai procesorius, kuris daro 0 - 1 = 15. 430 00:40:15,410 --> 00:40:20,430 Kadangi mes galų gale 0, atimti 1, tai tada jis tiesiog apsiaustas aplink 1111. 431 00:40:20,430 --> 00:40:28,930 Taigi šis algoritmas iš tiesų gali dirbti, a + b - b, b - a, tai gali būti baudos. 432 00:40:28,930 --> 00:40:34,030 Tačiau yra keletas perdirbėjai, nedaryk to, ir todėl nebūtų baudos tiems konkretiems. 433 00:40:34,030 --> 00:40:39,880 XOR apsikeitimo dirbs bet kuriame procesoriuje. Gerai. 434 00:40:39,880 --> 00:40:42,280 Idėja yra tai, kad tai turėtų būti tas pats, nors. 435 00:40:42,280 --> 00:40:50,120 Kur mes kažkaip gauti informaciją tiek į 1 kintamųjų naudojant XOR, 436 00:40:50,120 --> 00:40:54,120 ir ištraukite informaciją atskirų kintamųjų. 437 00:40:54,120 --> 00:41:04,330 Taigi ar kas nors turite idėjų / atsakymas? 438 00:41:04,330 --> 00:41:14,540 [Studentų atsakymas, nesuprantamas] 439 00:41:14,540 --> 00:41:22,220 Taigi, tai turėtų veikti, taip pat, XOR yra jungiamas. 440 00:41:22,220 --> 00:41:27,620 Nepriklausomai nuo to, kokia tvarka šie 2 skaičiai atsitikti, kad čia, 441 00:41:27,620 --> 00:41:30,100 šis rezultatas bus tas pats. 442 00:41:30,100 --> 00:41:35,800 Taigi ^ b yra b ^. 443 00:41:35,800 --> 00:41:51,860 Jūs taip pat gali tai parašyta, kaip ^ = b, b ^ = a ^ = b vėl. 444 00:41:51,860 --> 00:42:00,200 Taigi tai yra teisinga, ir suprasti, kodėl tai veikia, manau, bitai. 445 00:42:00,200 --> 00:42:10,400 Naudojant smallish skaičių, tarkim, 11.001 ir 01.100. 446 00:42:10,400 --> 00:42:12,790 Taigi tai yra "a", tai yra b. 447 00:42:12,790 --> 00:42:15,540 Taigi ^ = b. 448 00:42:15,540 --> 00:42:22,380 Mes ketiname būti "a" = XOR šių 2 dalykų. 449 00:42:22,380 --> 00:42:32,920 Taigi 1 ^ 0 1 1 ^ 1 yra 0 0 ^ 1 yra 1 ir 0 ^ 0 yra 0; 1 ^ 0 yra 1. 450 00:42:32,920 --> 00:42:37,380 Taip "," jei peržvelgsite dešimtainis skaičius, tai bus 451 00:42:37,380 --> 00:42:41,160 esate nesiruošia pamatyti daug tarp originalo "ir" The New santykių "," 452 00:42:41,160 --> 00:42:45,600 bet žiūri bitai, "a" dabar kaip informacijos akių 453 00:42:45,600 --> 00:42:49,970 pradinei "" ir originalaus b. 454 00:42:49,970 --> 00:42:57,930 Taigi, jei mes b ^, matome, kad mes galų gale originalas "." 455 00:42:57,930 --> 00:43:08,910 Ir jei mes originalus "a" ^ Naujoji "," mes matome, mes galų gale pradinio b. 456 00:43:08,910 --> 00:43:18,380 Taip (^ b) ^ b = originalas "." 457 00:43:18,380 --> 00:43:27,910 Ir (a ^ b) ^ = originalą b. 458 00:43:27,910 --> 00:43:37,010 Yra dar vienas būdas matydamas tai pati nieko XOR visada 0. 459 00:43:37,010 --> 00:43:45,020 Taigi 1101 ^ 1101, visi bitai bus tas pats. 460 00:43:45,020 --> 00:43:47,920 Taigi ten niekada nebus atvejis, kur 1 yra 0, o kita yra 1. 461 00:43:47,920 --> 00:43:51,080 Taigi tai yra 0000. 462 00:43:51,080 --> 00:43:57,240 Tas pats. (A ^ b) ^ b yra tarsi ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) bus 0; ^ 0, tai tiesiog bus "," nes visi bitai yra 0. 464 00:44:03,680 --> 00:44:08,050 Taigi, tik tie, kurie ketinate būti kur "a" iš pradžių buvo 1 - tie. 465 00:44:08,050 --> 00:44:12,070 Ir tą pačią idėją čia, aš esu gana įsitikinęs, jis taip pat jungiamas. 466 00:44:12,070 --> 00:44:17,590 Taip. Aš pasakyti prieš tai jis buvo jungiamas. 467 00:44:17,590 --> 00:44:24,680 ^ "," Ir tai asociatyvus, todėl dabar (b ^) ^. 468 00:44:24,680 --> 00:44:28,970 Ir mes galime padaryti b ^ (^). 469 00:44:28,970 --> 00:44:31,540 Ir tokiu būdu vėlgi, mes gauname originalų b. 470 00:44:31,540 --> 00:44:37,120 Taigi, "a" dabar kartu su "A" ir b. 471 00:44:37,120 --> 00:44:49,660 Naudodamiesi mūsų naują Combo "mes sakome, b = Combo" "^ originalus b, gauname originalas". " 472 00:44:49,660 --> 00:45:05,170 Ir dabar = Combo "" ^ naujas b, kuris buvo originalus - ar kuris dabar yra tai, kas buvo "a" arba b. 473 00:45:05,170 --> 00:45:13,620 Kad šiuo atveju čia. Tai metai b = b. 474 00:45:13,620 --> 00:45:16,550 Taigi dabar viskas sugrįžta pavertė tvarka. 475 00:45:16,550 --> 00:45:22,960 Jei mes iš tikrųjų pažvelgė į bitus, b = a ^ b ketina Xor Šie 2, 476 00:45:22,960 --> 00:45:33,920 ir atsakymas bus, tada a = a ^ b XORing Šie 2 ir atsakymas yra toks. 477 00:45:33,920 --> 00:45:41,090 Turite klausimų? Gerai. Taigi, naujausia yra šiek tiek žymiai sunkiau. 478 00:45:41,090 --> 00:45:43,180 [Studentų] Manau, kad jis turi apie tai klausimą. >> O, atsiprašau. 479 00:45:43,180 --> 00:45:49,380 [Studentų] Kas iš tikrųjų greičiau? Jei jūs naudojate šią XOR, ar tai jei paskelbti naują kintamąjį? 480 00:45:49,380 --> 00:45:55,190 Taigi, kas iš tikrųjų yra greičiau, skelbiantis naują kintamąjį arba naudojant XOR apsikeitimo? 481 00:45:55,190 --> 00:45:59,600 Atsakymas yra labai tikėtina, kad laikinas kintamasis. 482 00:45:59,600 --> 00:46:05,780 Ir tai yra, nes kai jis parengė žemyn - taip surinkimo lygiu, 483 00:46:05,780 --> 00:46:12,320 nėra tokio dalyko kaip lokalūs kintamieji arba bet kokių laikinų kintamųjų skaičius arba bet šios medžiagos. 484 00:46:12,320 --> 00:46:16,060 Jie tiesiog patinka - nėra atminties, ir ten yra registrai. 485 00:46:16,060 --> 00:46:20,920 Registrai yra, kur viskas aktyviai vyksta. 486 00:46:20,920 --> 00:46:24,750 Jums nereikia pridėti 2 dalykus atmintyje; norite pridėti 2 dalykų registruose. 487 00:46:24,750 --> 00:46:28,160 Ir jums atnešti daiktus iš atminties į registrus tada įtraukite juos, 488 00:46:28,160 --> 00:46:33,180 ir tada jūs galite įdėti juos atgal į atmintį, bet visi veiksmai vyksta registruose. 489 00:46:33,180 --> 00:46:38,750 Taigi, kai jūs naudojate laikino kintamojo požiūrį, paprastai kas atsitinka, 490 00:46:38,750 --> 00:46:42,810 šie 2 numeriai jau registruose. 491 00:46:42,810 --> 00:46:46,570 Ir tada nuo to momento, kai jūs pavertė juos, 492 00:46:46,570 --> 00:46:51,540 jis bus tiesiog pradėti naudoti kitą registrą. 493 00:46:51,540 --> 00:46:56,510 Visur, kur buvo naudojant b, tai bus tiesiog naudoti registrą, kuris jau buvo Saugojimas "." 494 00:46:56,510 --> 00:47:02,180 Taip, kad nereikia nieko daryti, iš tikrųjų daryti apsikeitimo sandorio. Taip? 495 00:47:02,180 --> 00:47:05,690 [Studentų] Tačiau ji taip pat užima daugiau atminties, tiesa? 496 00:47:05,690 --> 00:47:10,280 Tai užtruks tik daugiau atminties, jei ji reikia laikyti, kad laikiną kintamąjį. 497 00:47:10,280 --> 00:47:14,830 Patinka, jei vėliau vėl naudoti tą laikiną kintamąjį kažkur, 498 00:47:14,830 --> 00:47:18,920 tada - ar jums priskirti kažką šio laikino kintamojo. 499 00:47:18,920 --> 00:47:24,630 Taigi, jei bet laikas "," b temp turi skirtingas vertybes ar kažką, 500 00:47:24,630 --> 00:47:30,680 tada jis ketina turėti skirtingas vietas atminties, bet tai tiesa, kad 501 00:47:30,680 --> 00:47:34,800 Yra daug vietos kintamieji, kurie egzistuoja tik registruose. 502 00:47:34,800 --> 00:47:44,370 Tokiu atveju, jis niekada įdėti į atmintį, ir todėl jūs niekada išsekimo atminties. 503 00:47:44,370 --> 00:47:58,620 Gerai. Paskutinis klausimas yra šiek tiek daugiau. 504 00:47:58,620 --> 00:48:04,850 Todėl čia, šiame CS50 prietaiso, yra žodynas. 505 00:48:04,850 --> 00:48:12,390 Ir dėl šios priežasties yra todėl, kad [? B66] rašybos tikrintuvas, kur jums bus raštu 506 00:48:12,390 --> 00:48:15,780 naudojant maišos lenteles arba bando ar kai duomenų struktūra. 507 00:48:15,780 --> 00:48:22,660 Jūs ketinate rašyti rašybos tikrintuvą, ir jūs ketinate naudoti šį žodyną padaryti, kad. 508 00:48:22,660 --> 00:48:28,280 Tačiau šią problemą, mes tik ketina ieškoti pamatyti, jei vienas žodis yra žodyne. 509 00:48:28,280 --> 00:48:31,250 Taigi vietoj saugoti visą žodyną, tam tikru duomenų struktūros 510 00:48:31,250 --> 00:48:35,180 , o paskui žiūrėdami per visą dokumentą, ar kas manimi su klaidomis, 511 00:48:35,180 --> 00:48:38,490 mes tiesiog norime rasti 1 žodį. Taigi, mes galime tiesiog nuskaityti per visą žodyną 512 00:48:38,490 --> 00:48:44,300 ir jei mes niekada rasti visą žodyną žodį, tada jis buvo ne ten. 513 00:48:44,300 --> 00:48:52,150 Jei mes nuskaityti per visą žodyną ir matau žodį, tada mes geri, mes ją radau. 514 00:48:52,150 --> 00:48:56,580 Čia tik sakoma, kad mes norime pradėti žiūri C failų tvarkymo funkcijos, 515 00:48:56,580 --> 00:48:59,930 nes mes norime skaityti žodyną, 516 00:48:59,930 --> 00:49:07,680 bet duosiu užuominą, kurios funkcijos, jums reikia galvoti apie. 517 00:49:07,680 --> 00:49:11,510 Aš parašiau jiems erdvėse. 518 00:49:11,510 --> 00:49:20,490 Taigi, pagrindiniai iš jų, jūs norėsite pažvelgti į yra f atidarant ir, neišvengiamai, f uždarytas, 519 00:49:20,490 --> 00:49:26,540 kuris vyks jūsų programos pabaigoje, ir f nuskaitymo f. 520 00:49:26,540 --> 00:49:31,060 Taip pat galite naudoti f skaityti, bet jūs tikriausiai nenorite 521 00:49:31,060 --> 00:49:34,200 , nes tai - jūs neturite galų gale, kuriems reikia, kad. 522 00:49:34,200 --> 00:49:41,880 F nuskaitymo f tai, ką jūs ketinate naudoti nuskaityti per žodyną. 523 00:49:41,880 --> 00:49:46,370 Ir tokiu būdu jūs neturite reikia koduoti sprendimą, tiesiog pabandykite ir kaip pseudo-kodas savo kelią 524 00:49:46,370 --> 00:50:05,200 buvo priimtas sprendimas, ir tada mes aptarsime. 525 00:50:05,200 --> 00:50:14,110 Ir iš tiesų, nes aš jau davė jums tai, jei jūs einate į bet kokią terminalo arba savo prietaiso lukštais 526 00:50:14,110 --> 00:50:18,250 Norėčiau aš paprastai, jei jūs dar nematėte dar, aš ne žinoti, jei tu klasėje, 527 00:50:18,250 --> 00:50:23,490 bet vyras, todėl vyras puslapių yra labai naudinga, žiūri beveik bet kokią funkciją. 528 00:50:23,490 --> 00:50:27,330 Taigi aš galiu padaryti, patinka, MAN F, nuskaitymo f. 529 00:50:27,330 --> 00:50:32,300 Šiuo metu tai yra informacija apie nuskaitymo funkcijų f šeima. 530 00:50:32,300 --> 00:50:37,070 Aš taip pat galėtų padaryti MAN F, atviras, ir, kad jums duoti man, kad detales. 531 00:50:37,070 --> 00:50:40,750 Todėl, jei žinote kokią funkciją jūs naudojate, ar jūs skaitote kodą 532 00:50:40,750 --> 00:50:43,000 ir pamatysite tam tikrą funkciją, ir jūs, pavyzdžiui, "Ką tai padaryti?" 533 00:50:43,000 --> 00:50:45,280 Tiesiog žmogus, kuris funkcijos pavadinimas. 534 00:50:45,280 --> 00:50:47,340 Yra keista pavyzdžių pora, kur jums gali tekti pasakyti 535 00:50:47,340 --> 00:50:51,620 patinka. kad funkcija pavadinimas arba 3, kad vyras funkcijos pavadinimas, 2 vyras 536 00:50:51,620 --> 00:50:58,230 , bet jūs tik turite padaryti, kad jei vyras funkcijos pavadinimas neatsitinka dirbti pirmą kartą. 537 00:50:58,230 --> 00:51:03,010 [Studentų] Taigi, aš skaityti puslapį man atidaryti, bet aš vis dar nežino, kaip jį naudoti ir programą. 538 00:51:03,010 --> 00:51:06,170 Gerai. Žinyno puslapių, yra daug mažiau nei naudinga. 539 00:51:06,170 --> 00:51:08,470 Jie yra labiau naudinga, jei jūs jau žinote, ką jie daro 540 00:51:08,470 --> 00:51:12,670 ir tada jums tiesiog reikia prisiminti, argumentų ar kažkas tvarką. 541 00:51:12,670 --> 00:51:17,640 Arba jie gali suteikti jums bendrą apžvalgą, tačiau kai kurie iš jų yra labai didele. 542 00:51:17,640 --> 00:51:22,220 Nuskaityti, pavyzdžiui, f f, taip pat. Jis suteikia jums informaciją apie visas šias funkcijas, 543 00:51:22,220 --> 00:51:28,120 ir 1 tuščia eilutė žemyn čia atsitinka sakyti, "F nuskaitymo f skaito iš styginių ar upelio." 544 00:51:28,120 --> 00:51:32,360 Bet f atidaryti. Taigi, kaip mes naudojame "F" Atidaryti? 545 00:51:32,360 --> 00:51:38,470 Programos idėja, kuri turi padaryti failą I / O, kad 546 00:51:38,470 --> 00:51:45,070 pirmiausia turite atidaryti failą, kurį norite daryti tai, ko ir neišvengiamai 547 00:51:45,070 --> 00:51:51,220 skaityti dalykų iš to failo ir daryti stuff su jais. 548 00:51:51,220 --> 00:51:55,350 F atidaryti yra, ką mes naudojame atidaryti failą. 549 00:51:55,350 --> 00:52:04,190 Dalykas, mes gauname atgal, todėl mes norime, kas tai per failas atidaryti, tai suteikia mums 550 00:52:04,190 --> 00:52:11,970 čia ji sako "/ user / share / dict / žodžiai." 551 00:52:11,970 --> 00:52:16,740 Tai failą, kurį norite atidaryti, ir mes norime, kad jį atidarytumėte 552 00:52:16,740 --> 00:52:21,440 mes turime aiškiai nurodyti, ar mes norime, kad ją atidaryti, skaityti ar, jei norime, kad ją atidaryti rašyti. 553 00:52:21,440 --> 00:52:26,490 Yra kombinacijų ir kita pora, bet mes norime atidaryti šį svarstymą. 554 00:52:26,490 --> 00:52:29,380 Mes norime, kad skaityti iš failo. 555 00:52:29,380 --> 00:52:34,290 Taigi, ką šis sugrįžimas? Ji grąžina failo žvaigždutes (*), 556 00:52:34,290 --> 00:52:37,260 ir aš tiesiog parodyti viską kintamojo f *, 557 00:52:37,260 --> 00:52:40,840 Vėlgi, tai rodyklė, bet mes nenorime kovoti su rodyklės. 558 00:52:40,840 --> 00:52:46,470 Jūs galite galvoti kaip f, f kintamasis, kurį ketinate naudoti atstovauti failą. 559 00:52:46,470 --> 00:52:49,850 Taigi, jei norite skaityti iš failo, jūs perskaitėte iš f. 560 00:52:49,850 --> 00:52:54,820 Jei norite uždaryti failą, jūs uždarote f. 561 00:52:54,820 --> 00:53:00,350 Taigi, programos pabaigoje, kai mes neišvengiamai norite uždaryti failą, ką mes turėtume daryti? 562 00:53:00,350 --> 00:53:06,750 Mes norime uždaryti f. 563 00:53:06,750 --> 00:53:12,600 Taigi dabar paskutinį failą funkcija, kad mes ketiname norite naudoti tai nuskaitymo F, f nuskaitymo f. 564 00:53:12,600 --> 00:53:20,930 Ir kas, kad tai yra jis nuskaito per ieško modelis, kuris atitiktų failo. 565 00:53:20,930 --> 00:53:39,100 Žiūri žinyno puslapyje čia mes matome, LC f nuskaitymo f, ignoruoti sugrįžimo vertę dabar. 566 00:53:39,100 --> 00:53:45,230 Pirmasis argumentas yra failas * srautas, todėl mes ketiname nori perduoti tai pirmasis argumentas yra f. 567 00:53:45,230 --> 00:53:47,900 Mes nuskaitymo per f. 568 00:53:47,900 --> 00:53:53,680 Antrasis argumentas yra format string. 569 00:53:53,680 --> 00:53:58,310 Aš duosiu tau format string dabar. 570 00:53:58,310 --> 00:54:05,180 Manau, kad mes atsitiktų sakyti, 127s \ n, tai nereikalingas daug. 571 00:54:05,180 --> 00:54:12,490 Idėja, ką tai format string, galite galvoti apie nuskaitymo f spausdinimo f priešingybę. 572 00:54:12,490 --> 00:54:17,160 Taigi spausdinimo f, spausdinimo f, mes taip pat naudoti tokio formato parametras, 573 00:54:17,160 --> 00:54:25,000 bet spausdinimo f tai, ką mes darome, yra - pažvelkime ekvivalentas. 574 00:54:25,000 --> 00:54:32,550 Taigi spausdinti f, ir ten iš tikrųjų taip pat F Išspausdinkite f, kur pirmasis argumentas bus f. 575 00:54:32,550 --> 00:54:40,980 Kai spausdinate f, mes galime pasakyti kažką panašaus, "spausdinimo 127s \ n" ir tada, jei praeina tam tikrą eilutę, 576 00:54:40,980 --> 00:54:44,050 ji ketina spausdinti šią eilutę ir tada naują eilutę. 577 00:54:44,050 --> 00:54:49,690 127 reiškia, aš esu gana įsitikinęs,, bet aš niekada susivaldyti jai, 578 00:54:49,690 --> 00:54:52,470 Jums net nereikia sakyti, '127 'spausdinimo f, 579 00:54:52,470 --> 00:54:57,090 bet ką tai reiškia, spausdinti pirmuosius 127 simbolių. 580 00:54:57,090 --> 00:54:59,350 Taigi, aš esu gana įsitikinęs, kad toks atvejis. Galite "Google" už tai. 581 00:54:59,350 --> 00:55:03,000 Bet kito aš beveik teigiamas, tai reiškia, kad. 582 00:55:03,000 --> 00:55:08,880 Taigi tai yra spausdinti pirmuosius 127 simbolių, po to naujoje eilutėje. 583 00:55:08,880 --> 00:55:14,680 F nuskaitymo f dabar, o ne žiūri kintamojo ir spausdinimą, 584 00:55:14,680 --> 00:55:22,620 jis ketina ieškoti tam tikru eilutę, ir laikyti į kintamojo modelis. 585 00:55:22,620 --> 00:55:26,360 Tegul iš tikrųjų naudoti nuskaitymo f kitame pavyzdyje. 586 00:55:26,360 --> 00:55:31,670 Tarkime, mes turėjome šiek tiek int, kai x = 4, 587 00:55:31,670 --> 00:55:41,110 ir mes norėjome sukurti eilutę - norėjo sukurti eilutę 588 00:55:41,110 --> 00:55:44,250 kad buvo, pavyzdžiui, tai bus daug vėliau, 589 00:55:44,250 --> 00:55:49,020 kažkas, kad tiesiog kaip 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Todėl tai gali būti programa, kur jūs turite suma skaitiklis, 591 00:55:51,870 --> 00:55:56,420 Apibendrinant galima atremti i ir norite išsaugoti vaizdų krūva. 592 00:55:56,420 --> 00:56:02,430 Taigi jūs norite išsaugoti i.jpg, kur i yra kai kurie iš jūsų kilpa iteracijos. 593 00:56:02,430 --> 00:56:05,500 Taigi, kaip mes šį tą JPEG eilutę? 594 00:56:05,500 --> 00:56:11,720 Jei norėjo spausdinti 4.jpg, mes galime tik pasakyti, spausdinimo f,% d.jpg, 595 00:56:11,720 --> 00:56:14,410 ir tada jis būtų spausdinti tos JPEG. 596 00:56:14,410 --> 00:56:20,050 Bet, jei norime išsaugoti eilutės 4.jpg, mes naudojame nuskaitymo f. 597 00:56:20,050 --> 00:56:30,860 Taigi, eilutė s - mes iš tikrųjų Negaliu ženklų, char s, geriau patys eikime 100. 598 00:56:30,860 --> 00:56:35,400 Taigi aš tiesiog deklaravo apie 100 simbolių masyvas, 599 00:56:35,400 --> 00:56:39,830 ir tai, ką mes neišvengiamai bus saugoti, kad JPEG. 600 00:56:39,830 --> 00:56:47,920 Taigi, mes ketiname naudoti nuskaitymo f, ir formatas, kaip mes sakytume% d.jpg 601 00:56:47,920 --> 00:56:54,980 siekiant spausdinti 4.jpg, šis formatas bus% d.jpg. 602 00:56:54,980 --> 00:57:04,020 Taigi, formatas yra% d.jpg, ką mes norime pakeisti% d yra x, 603 00:57:04,020 --> 00:57:06,590 ir dabar mes turime kažkur laikyti, kad eilutę. 604 00:57:06,590 --> 00:57:12,500 Ir kur mes einame laikyti šią eilutę masyvo. 605 00:57:12,500 --> 00:57:21,640 Taigi po šio kodo, s linijos, jei mes spausdinti f% s kintamojo s, 606 00:57:21,640 --> 00:57:26,280 ji ketina spausdinti 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Toks f nuskaitymo f, kaip skenavimo f tas pats, išskyrus tuos atvejus, dabar jis ieško per šį failą 608 00:57:38,930 --> 00:57:43,600 už tai, ką laikyti s. 609 00:57:43,600 --> 00:57:46,160 Štai ką paskutinis argumentas bus. 610 00:57:46,160 --> 00:57:54,170 Mes norime parduotuvė - "Scan F šeimos funkcijas nuskaito tiek pagal formatu, kaip bandė žemiau. 611 00:57:54,170 --> 00:58:02,450 Jei saugomi toje vietoje taškų galite grįžti - " 612 00:58:02,450 --> 00:58:12,910 Ne, mes gali būti gera. Leisk pagalvoti per sekundę. 613 00:58:12,910 --> 00:58:26,350 Taigi nuskaitymo f nėra - kas gi yra funkcija, kuri tai daro? 614 00:58:26,350 --> 00:58:31,650 Taigi nuskaitymo f nesiruošia imtis sveikasis skaičius ir daryti dot jpg. 615 00:58:31,650 --> 00:58:43,490 Jis ketina [murma]. 616 00:58:43,490 --> 00:58:49,360 Išsaugoti int kintamasis eilutės int C 617 00:58:49,360 --> 00:58:55,940 Kas tai yra kintamasis, arba, kas yra ši funkcija vadinama? 618 00:58:55,940 --> 00:59:04,950 Taip. That - taip. Taigi, kas man buvo apibrėžti Jums anksčiau buvo s Spausdinti f, 619 00:59:04,950 --> 00:59:09,820 kuris - kad daro daug daugiau prasmės, kodėl gi sakiau, kad ji buvo labiau panaši į spausdinimo f. 620 00:59:09,820 --> 00:59:14,700 Skenavimas f rūšies kaip spausdinimo f, bet s Spausdinti f nuskaityti ją 621 00:59:14,700 --> 00:59:17,510 ir pakeisti kintamuosius ir laikyti jį į eilutę. 622 00:59:17,510 --> 00:59:19,620 Vietoj to, spausdinimo, ji saugo į eilutę. 623 00:59:19,620 --> 00:59:25,070 Taigi, ignoruoti, kad visiškai. Jūs vis dar galite galvoti apie tokiu formatu specyfikator, kaip pavyzdžiui, spausdinimo f. 624 00:59:25,070 --> 00:59:34,510 Taigi dabar, jei mes norėjome padaryti 4.jpg dalykas, mes norėtume padaryti s Spausdinti f, x tai. 625 00:59:34,510 --> 00:59:38,520 Taigi, kas nuskaitymo f daro tai, kas buvo jūsų klausimas bus? 626 00:59:38,520 --> 00:59:40,820 [Studentų] Aš tiesiog nežino, ką mes bandome padaryti čia 627 00:59:40,820 --> 00:59:43,450 su tuo JPEG. Ar galite paaiškinti, kad 1 daugiau laiko? 628 00:59:43,450 --> 00:59:52,710 Taigi tai buvo - tai mažiau reikiamą f nuskaitymo f dabar; tikiuosi, jis bus susieti atgal kažkoks būdas. 629 00:59:52,710 --> 01:00:02,240 Tačiau tai, ką aš iš pradžių ketino parodyti - iš tikrųjų tai yra tiesiogiai susiję su šių [? F5] 630 01:00:02,240 --> 01:00:08,520 Jūs ketinate naudoti s Spausdinti f, kur, sako, mes turime 100 vaizdus, 631 01:00:08,520 --> 01:00:13,630 norite skaityti įvaizdį 1.jpg, 2.jpg, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Taigi, siekiant padaryti, kad, jums reikia "F" Atidaryti ir tada jūs turite pereiti į eilutę, kurią norite atidaryti. 633 01:00:21,520 --> 01:00:30,020 Taigi, mes norime atidaryti 1.jpg; siekiant sukurti eilutę, kuri yra 1.jpg 634 01:00:30,020 --> 01:00:37,660 mes f% s Spausdinti d.jpg--mes ne padaryti int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Taigi s spausdinimo f% d.jpg i. 637 01:00:51,130 --> 01:00:56,320 Taigi po šios linijos, dabar kintamasis arba masyvas vyksta 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Arba, 0.jpg 1.jpg, 2.jpg. Ir taip mes galima atidaryti, savo ruožtu, kiekvienas skaityti įvaizdį. 639 01:01:10,610 --> 01:01:19,550 Taigi tai, ką s Spausdinti f nėra. Ar matote, ką s Spausdinti f dabar daro? 640 01:01:19,550 --> 01:01:25,720 [Studentų] Gerai, todėl atsižvelgiant - jis sukuria eilutę, something.jpg ir tada išsaugo jį. 641 01:01:25,720 --> 01:01:30,360 Taip. Jis sukuria - tai dar vienas format string, kaip skenavimo f ir spausdinimo f, 642 01:01:30,360 --> 01:01:37,530 kur ji įterpia visus kintamuosius į antrąjį argumentą, gali būti, o ne i. 643 01:01:37,530 --> 01:01:42,280 Galbūt - Aš turiu galvoje, kad toks atvejis. Tačiau nepriklausomai nuo argumentų, kad yra. 644 01:01:42,280 --> 01:01:45,440 Ji ketina formato eilutę įterpti visus kintamuosius į 645 01:01:45,440 --> 01:01:52,250 ir tada laikyti į mūsų buferio; mes vadiname, kad buferis, tai kur mes eilutę saugoti. 646 01:01:52,250 --> 01:02:00,750 Taigi, mes saugome teisingai suformatuota eilutė, viduje s,% d buvo pakeistas 4. 647 01:02:00,750 --> 01:02:08,080 [Studentų] Taigi, jei mes tai padarė, kintamos f tik ketina būti grąžinta? 648 01:02:08,080 --> 01:02:18,110 Taip. Taigi, mes turime uždaryti pirmąją f prieš tai darote. 649 01:02:18,110 --> 01:02:22,810 Bet - ir tada taip pat, jei ten buvo ne f atverti čia, tada mes būtume reikia pasakyti - 650 01:02:22,810 --> 01:02:29,280 Taip. Bet ji atidaryti šimtą įvairius failus. 651 01:02:29,280 --> 01:02:37,360 [Studentų] Bet mes norėtume ne būtų galima atidaryti ar - gerai. 652 01:02:37,360 --> 01:02:44,230 Gerai. Taigi nuskaitymo f, f nuskaitymo f, tipo tą pačią idėją, 653 01:02:44,230 --> 01:02:53,610 bet vietoj, o ne laikyti jį į eilutę, tai daugiau kaip esate dabar 654 01:02:53,610 --> 01:03:02,420 dilgčiojimą ir modelio atitikimo prieš šią eilutę vyksta per ir saugoti rezultatus į kintamuosius. 655 01:03:02,420 --> 01:03:11,290 Apdoroti per kažką panašaus 4.jpg ir laikyti sveikuoju skaičiumi 4 į sumą int x, galite naudoti nuskaitymo f. 656 01:03:11,290 --> 01:03:13,430 Tai, ką mes galime naudoti nuskaitymo f. 657 01:03:13,430 --> 01:03:16,300 F nuskaitymo f ketinate daryti, kad į komandų eilutę. 658 01:03:16,300 --> 01:03:19,200 Aš iš tikrųjų gana tikras, kad tai ką CS50 biblioteka. 659 01:03:19,200 --> 01:03:29,050 Taigi, kai jūs sakote, "gauti int" tai nuskaitymo f per nuskaitymo f yra būdas jums gauti vartotojo įvesties. 660 01:03:29,050 --> 01:03:34,670 F nuskaitymo f ketinate daryti tą patį, bet naudojant failą, kurį norite nuskaityti per. 661 01:03:34,670 --> 01:03:41,090 Taigi čia, mes nuskaitymo per šį failą. 662 01:03:41,090 --> 01:03:45,460 Modelis, mes stengiamės, kad atitiktų, yra tam tikra seka, kad yra 127 simbolių ilgio 663 01:03:45,460 --> 01:03:48,100 po naują eilutę 664 01:03:48,100 --> 01:03:54,770 Taigi, aš esu gana įsitikinęs, mes galime net tiesiog pasakyti "rungtynės s", nes žodyne 665 01:03:54,770 --> 01:03:57,770 atsitikti, kad, mes garantuojame, ne žodis, kad ilgai, 666 01:03:57,770 --> 01:04:03,310 ir taip pat manau, f f skenavimas, nustos naują eilutę, nesvarbu koks. 667 01:04:03,310 --> 01:04:06,970 Bet mes atsiųsime naują eilutę rungtynių, ir - 668 01:04:06,970 --> 01:04:13,960 [Studentų] Jei mes neįtraukė į naują eilutę, nebūtų jam žodžio dalis? 669 01:04:13,960 --> 01:04:22,900 - Kiekvienas - žiūri į žodyną 670 01:04:22,900 --> 01:04:26,200 Taigi žodyne, tai visų mūsų žodžių. 671 01:04:26,200 --> 01:04:30,500 Kiekvienas iš jų yra iš naujos eilutės. 672 01:04:30,500 --> 01:04:32,510 Nuskaitymo f pasiimti šį žodį. 673 01:04:32,510 --> 01:04:38,750 Jei mes neturime įtraukti naują eilutę, tai, galimas dalykas, kad kitas nuskaitymo f bus tik skaityti naują eilutę. 674 01:04:38,750 --> 01:04:44,180 Bet taip pat naujos linijos tada tiesiog ignoruoti naują eilutę. 675 01:04:44,180 --> 01:04:49,440 Bet mes niekada žodžio dalį, nes mes visada skaityti daugiau į naują eilutę, nesvarbu, ką. 676 01:04:49,440 --> 01:04:54,530 [Studentų] Bet kas, jei ieškote žodžio "cissa", kaip cissa. 677 01:04:54,530 --> 01:04:57,380 Ji rasti, kad ir sako, kad rungtynės? 678 01:04:57,380 --> 01:05:05,110 Taigi čia mes - ji skaityti - iš tikrųjų tai yra gera vieta. 679 01:05:05,110 --> 01:05:10,660 Mes niekada naudojant esamą - žodis, mes ieškome yra pirmasis komandinės eilutės argumentas. 680 01:05:10,660 --> 01:05:16,460 Taigi, eilutė, žodis = argv 1. 681 01:05:16,460 --> 01:05:20,020 Taigi eilutė, mes ieškome argv 1. 682 01:05:20,020 --> 01:05:23,290 Mes ne ieško ne visi mūsų nuskaitymo f žodį. 683 01:05:23,290 --> 01:05:28,030 Ką mes darome su nuskaitymo f gauti kiekvieną žodį žodyne, 684 01:05:28,030 --> 01:05:34,320 ir tada, kai mes turime šį žodį mes ketiname naudoti strcmp juos palyginti. 685 01:05:34,320 --> 01:05:39,210 Mes ketiname palyginkite mūsų žodį ir tai, ką mes tik skaityti. 686 01:05:39,210 --> 01:05:45,110 Todėl neišvengiamai, mes ketiname baigti daryti nuskaitymo fs krūva 687 01:05:45,110 --> 01:05:52,130 tol, kol jis tiesiog taip atsitinka, kad nuskaitymo f grįš - 688 01:05:52,130 --> 01:05:54,800 jis grįš, tol, kol ji atitiko naują žodį, 689 01:05:54,800 --> 01:06:01,360 ir jis grįš ką nors kita, kuo greičiau, nes ji neatitiko žodį. 690 01:06:01,360 --> 01:06:08,440 Mes skaitome per visą žodyną, saugoti kiekvieną eilutę kiekvienas žodis į kintamojo s. 691 01:06:08,440 --> 01:06:17,240 Tada mes palyginti žodį s, ir jei palyginimas == 0 692 01:06:17,240 --> 01:06:21,650 strcmp atsitinka, kad 0, jei rungtynės buvo. 693 01:06:21,650 --> 01:06:31,510 Taigi, jei ji buvo 0, tada mes galime spausdinti f, suderinta, 694 01:06:31,510 --> 01:06:35,370 ar žodis yra žodyne, arba ką norite spausdinti f. 695 01:06:35,370 --> 01:06:41,450 O tada - mes nenori f uždaryti vėl ir vėl. 696 01:06:41,450 --> 01:06:50,410 Tai koks dalykas, mes norime padaryti, ir mes ne tik ieško žodžio žodyne. 697 01:06:50,410 --> 01:06:56,660 Taigi, mes galime padaryti, kad, jei mes norėjome ieškoti savo modelio, cissa, kaip jums sakiau, 698 01:06:56,660 --> 01:07:00,260 jei norime ieškoti to modelio, tada jis žlugs, tuo atveju, 699 01:07:00,260 --> 01:07:08,010 nes tai ne tikrųjų žodis, bet vienas iš žodžių žodyne atsitinka, kad jame. 700 01:07:08,010 --> 01:07:13,560 Taigi būtų suderinti šį žodį, bet šis žodžio poaibis yra ne pats žodis. 701 01:07:13,560 --> 01:07:17,250 Bet tai dar ne tai, kaip mes jį naudoti, mes skaityti kiekvieno žodžio 702 01:07:17,250 --> 01:07:19,740 ir tada lyginant žodis, kurį mes su šio žodžio. 703 01:07:19,740 --> 01:07:25,780 Todėl mes visada lyginant visas žodžius. 704 01:07:25,780 --> 01:07:29,620 Galiu siųsti vėliau galutinai suderintas sprendimus. 705 01:07:29,620 --> 01:07:32,050 Tai tipo beveik teisingą atsakymą, manau. 706 01:07:32,050 --> 01:07:34,720 [Studentų komentaras, neįskaitomai] 707 01:07:34,720 --> 01:07:40,870 Oh, aš atsikratyti, kad anksčiau? Char-ai, aš manau, mes sakėme, 127 - aš pamiršti, ką didžiausias yra. 708 01:07:40,870 --> 01:07:44,100 Mes tiesiog padaryti 128; todėl dabar ai yra pakankamai ilgas. 709 01:07:44,100 --> 01:07:46,570 Mums nereikia nieko spausdinti. 710 01:07:46,570 --> 01:07:56,440 Mes taip pat nori turėti užmerkti failą, ir kad turėtų būti apie teisingą atsakymą. 711 01:07:56,440 --> 01:07:59,440 CS50.TV