1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [3 savaitė] 2 00:00:02,200 --> 00:00:03,950 [David J. Malan - Harvardo universiteto] 3 00:00:03,950 --> 00:00:07,140 [Tai CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Leiskite man nukreipti mums, kur mes baigėte paskutinį kartą kryptimi, 5 00:00:10,720 --> 00:00:13,890 , kurie buvo pradėti galvoti šiek tiek daugiau nei apie sintaksę 6 00:00:13,890 --> 00:00:17,150 ir bando galvoti, šiek tiek mažiau, apie visus Individualiųjų požymių 7 00:00:17,150 --> 00:00:20,630 , kuris trunka šiek tiek laiko požiūriu kabliataškiais Aklimatizēt iki šiol 8 00:00:20,630 --> 00:00:22,360 ir skliausteliuose ir garbanotas petnešos, 9 00:00:22,360 --> 00:00:25,630 pradėti vartoti dalykus šiek tiek į aukštesnį konceptualiu požiūriu 10 00:00:25,630 --> 00:00:28,800 taip, kad problemos, mes dabar pradėti spręsti per ateinančias kelias savaites 11 00:00:28,800 --> 00:00:32,340 ketina įtraukti daug daugiau į aukštesnio lygio konceptualių problemų 12 00:00:32,340 --> 00:00:36,310 ir šiek tiek mažiau sintaksės, kaip jums gauti jūsų kojų šlapias 13 00:00:36,310 --> 00:00:40,090 ir savo rankas purvinas su kai kuriais iš šių pastaruosius keletą savaičių sintaksė. 14 00:00:40,090 --> 00:00:43,690 >> Taigi, primena, kad praėjusią savaitę įvedė šią sąvoką masyvo. 15 00:00:43,690 --> 00:00:49,320 Ir anglų kalba masyvas gali būti apibūdinta kaip tai, ką? >> [Nesigirdi studentas atsakas] 16 00:00:49,320 --> 00:00:51,710 Sorry? 17 00:00:51,710 --> 00:00:54,810 Kolekcija? >> [Nesigirdi studentas atsakas] >> Gerai, gerai. 18 00:00:54,810 --> 00:00:57,820 Daiktų kolekcija. Taigi mes matėme masyvo į nulio. 19 00:00:57,820 --> 00:01:01,880 Jei atsitiko naudoti pset Nutrinkite "sąrašus 0, kad galite vilkti dalykus 20 00:01:01,880 --> 00:01:05,410 rūšių aprašą, pavyzdžiui, apelsinų ir bananų, 21 00:01:05,410 --> 00:01:07,100 tai tipo kaip kas masyvas. 22 00:01:07,100 --> 00:01:10,980 Ir tada daugiau techniškai, faktinį kompiuterio, 23 00:01:10,980 --> 00:01:14,730 masyvas tiesiog ribotis riekė atminties. 24 00:01:14,730 --> 00:01:18,590 Kitaip tariant, jūs turite baitas, tada kitą baitų, tada dar vienas baitas, tada kitą baitų, 25 00:01:18,590 --> 00:01:21,330 ir, jei buvo padaryti tuos baitus į nuotrauką, 26 00:01:21,330 --> 00:01:24,510 jie būtų atgal atgal atgal atgal. Kad tai, ką mes vadiname ribotis. 27 00:01:24,510 --> 00:01:26,690 >> Todėl baitų skaičius 1, po to 2, po to 3. 28 00:01:26,690 --> 00:01:29,680 Tai nereiškia, čia, čia, čia, čia. 29 00:01:29,680 --> 00:01:33,800 Masyvas yra gretutinė riekė 0 arba daugiau baitų. 30 00:01:33,800 --> 00:01:36,160 Taigi, kas yra naudinga? 31 00:01:36,160 --> 00:01:40,090 Prisimenu, mes turėjome šį puoselėja pavyzdžiui, saugoti žmonių viktorinų klasių rūšiuoti programos 32 00:01:40,090 --> 00:01:42,580 apskaičiuoti savo viktorina vidurkį kai žinoma, 33 00:01:42,580 --> 00:01:46,780 ir priminti, kad mes galėtume pradėti rašyti šią programą skelbiantis kintamųjų quiz1. 34 00:01:46,780 --> 00:01:49,550 Tada mes galime turėti kitą kintamasis vadinamas quiz2. 35 00:01:49,550 --> 00:01:52,030 Bet tada, jei buvo 3 viktorinos šiai klasei, quiz4. 36 00:01:52,030 --> 00:01:55,710 Arba, jei ten buvo per savaitę viktorina, tai būtų quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Todėl jūs turite iš šių kintamųjų paskelbė viduje pagrindinis 38 00:01:58,520 --> 00:02:00,470 ar kažkur kitur, į savo programą, 39 00:02:00,470 --> 00:02:03,870 ir problema su tokiu požiūriu, lengva, nors tai yra tiesiog nukopijuokite ir įklijuokite, 40 00:02:03,870 --> 00:02:06,120 tai tiesiog labai greitai tampa sudėtingas. 41 00:02:06,120 --> 00:02:09,360 Neduok Dieve, jūs iš tikrųjų yra 30 viktorinos arba 50 viktorinos. 42 00:02:09,360 --> 00:02:12,080 Jei tai kaip aukštosios mokyklos stiliaus kasdien pop viktorina, 43 00:02:12,080 --> 00:02:15,910 tada jums tiesiog juokingai ilgą sąrašą kintamieji bus galima paskelbti, 44 00:02:15,910 --> 00:02:17,780 ir tai tik labai greitai tampa nekontroliuojamas. 45 00:02:17,780 --> 00:02:20,820 Tai negraži, sunku išlaikyti, tai taip daug lengviau klaidos 46 00:02:20,820 --> 00:02:23,910 jei jūs gaunate 1 numerį padarėte klaidą kažkur į savo programą. 47 00:02:23,910 --> 00:02:26,800 >> Taigi, mes pristatė masyvo sąvoka vietoj. 48 00:02:26,800 --> 00:02:30,760 Bei primena, kad įgyvendinus šią programą padaryti šiek tiek kažką panašaus į tai. 49 00:02:30,760 --> 00:02:33,950 Leiskite man eiti į šiandienos Šaltinis 3 pirmadienis kataloge 50 00:02:33,950 --> 00:02:37,160 ir atverti, masyvas, kurį mes matėme paskutinį kartą. 51 00:02:37,160 --> 00:02:39,940 Ir nors buvo C naujų triukų pora čia, 52 00:02:39,940 --> 00:02:41,920 tarp jų pastovi sąvoka, 53 00:02:41,920 --> 00:02:47,140 priminti, kad mes deklaruotų kelis plūdes iš esmės naudojant šią sintaksę: 54 00:02:47,140 --> 00:02:51,750 plūdės, tada kintamojo pavadinimas, tada mes kvadratinių petnešos tikrai pirmą kartą, 55 00:02:51,750 --> 00:02:55,450 ir ką mes padarėme tų kvadratinių petnešos viduje buvo veiksmingai įgyvendinti numerį. 56 00:02:55,450 --> 00:02:59,780 Bet vietoj to išleisti numerį, aš įdėti šį kapitalizuojamos žodį, viktorinos. 57 00:02:59,780 --> 00:03:03,220 Ir kas buvo išleisti kapitalizuojamos kaip viktorinos žodį motyvacija 58 00:03:03,220 --> 00:03:08,170 ir tada naudojant eilutę 17 pamainą čia iš tikrųjų duoti, kad numerį? 59 00:03:08,170 --> 00:03:11,240 Tai, kas buvo ten motyvacija? Taip. 60 00:03:11,240 --> 00:03:13,360 >> [Nesigirdi studentas atsakas] >> Taip. 61 00:03:13,360 --> 00:03:16,630 Jei mes norime pakeisti, kad vertė Vertė 2, tik reikia jį pakeisti į 1 vietą 62 00:03:16,630 --> 00:03:19,680 nes apsvarstyti - Aš net prisiminti, ką ši programa padarė tiksliai, 63 00:03:19,680 --> 00:03:22,040 bet jei jūs tiesiog nugriebti matote viktorinos, viktorinos. 64 00:03:22,040 --> 00:03:24,720 Jūs matote, viktorinos, žemyn čia daugiau viktorinos. 65 00:03:24,720 --> 00:03:28,180 Taigi, jei mes neturėjome ši konstanta, tai aštrus naudojimas apibrėžti, 66 00:03:28,180 --> 00:03:33,320 mes norėtume įvedėte 2, po to 2, po to 2, po to 2, kuris yra gerai. Būtų lygiai taip pat teisinga. 67 00:03:33,320 --> 00:03:36,220 Tačiau tarkime, kad kitais metais, mes turime 3 viktorinos CS50. 68 00:03:36,220 --> 00:03:39,190 Taigi, aš turiu eiti ir atnaujinti kodą, turiu perkompiliuoti jį, 69 00:03:39,190 --> 00:03:43,820 bet problema yra, jei aš ką nors kvailas, kaip aš pamiršti 1 paminėti 2 70 00:03:43,820 --> 00:03:46,750 ir pamiršti prijungti 3, visa programa galėtų labai gerai lūžti. 71 00:03:46,750 --> 00:03:48,720 Taigi mes tiesiog prašo problemų. 72 00:03:48,720 --> 00:03:53,170 >> Taigi sąvoka "nuolatinis" yra visa informacija apie faktoringo iš kai kurių duomenų gabalas, 73 00:03:53,170 --> 00:03:56,070 ar tai eilutė arba char arba lėšos ar kokia, 74 00:03:56,070 --> 00:04:00,070 ir deklaruojant 1 vieta, kad jūs galite lengvai pakeisti ateityje. 75 00:04:00,070 --> 00:04:03,660 Ir tai taip pat atvirai, šiek tiek lengviau skaityti, nes, jei jūs tiesiog galvoti apie tai dabar, 76 00:04:03,660 --> 00:04:07,840 tai viktorinos, ar mes netgi gali pervadinti kažką panašaus NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 ar kažkas dar aiškiau. 78 00:04:09,430 --> 00:04:11,830 Kodas tiesiog tampa šiek tiek daugiau akivaizdus, ​​kad tai, ką jis daro, 79 00:04:11,830 --> 00:04:15,780 ir jums įdomu, šiek tiek mažiau ką skaičius 2 gali atsitikti reiškia. 80 00:04:15,780 --> 00:04:18,920 Taigi nuolatinis, nieko iš esmės su matricomis. 81 00:04:18,920 --> 00:04:22,990 Masyvas buvo pristatytas šių kvadratinių petnešos. 82 00:04:22,990 --> 00:04:26,610 >> Taigi, pastebėsite, kad 23 eilute mes paprašyti, kad naudotojas, "Kas buvo viktorina balai?" 83 00:04:26,610 --> 00:04:31,120 Tada mes tiesiog turėti šio ciklo, kuris, matyt, prašo už savo klasėse vartotoją. Kaip tai padaryti? 84 00:04:31,120 --> 00:04:37,460 Jis kartojasi 0-2. Ir aš sakau, 2 nes Viktorinos didžiosiomis šiuo metu 2. 85 00:04:37,460 --> 00:04:42,310 Taigi tai kartojasi nuo 0 iki 2, ir tada jis spausdina iš Viktorina # kažką kažką, 86 00:04:42,310 --> 00:04:45,830 ir tada ji naudoja GetFloat gauti vertę nuo vartotojo. 87 00:04:45,830 --> 00:04:49,050 Taigi pastebėti, tai Vienintelis kitas naujas gabalas sintaksė paskutinį mėnesio trečiadienį. 88 00:04:49,050 --> 00:04:53,120 Jei norite išsaugoti kažką, tam tikroje vietoje masyvo, 89 00:04:53,120 --> 00:04:55,460 jūs vėl naudoti skliaustus. 90 00:04:55,460 --> 00:04:57,030 >> Todėl nėra prieštaros, tiek čia. 91 00:04:57,030 --> 00:04:59,040 Pirmą kartą naudodami skliaustus 92 00:04:59,040 --> 00:05:02,250 jūs naudojate tai, kaip didelis norite masyvas. 93 00:05:02,250 --> 00:05:06,580 Bet tai kitas kontekstas čia, kur mes vėl įdarbinti šiuos skliaustus 94 00:05:06,580 --> 00:05:10,540 tai, kur masyvo, jūs norite įdėti tam tikrą vertę? 95 00:05:10,540 --> 00:05:13,650 Ir skirtumas čia gali būti numanomas iš konteksto. 96 00:05:13,650 --> 00:05:17,130 Pastebėsite čia, mes turime duomenų tipą, tada mes turime kintamojo pavadinimą, 97 00:05:17,130 --> 00:05:20,770 tada mes turime kvadratinių petnešos su viduje, kabliataškiu. Štai ir viskas. 98 00:05:20,770 --> 00:05:22,290 Taigi, kad deklaracija. 99 00:05:22,290 --> 00:05:28,390 Tai lygiai taip pat, nors mes turėjome padaryti kažką kaip plūdės Grade1, float Grade2; 100 00:05:28,390 --> 00:05:31,730 bet vėlgi, tai labai greitai pereina į taip per daug kopijuoti, įklijuoti, 101 00:05:31,730 --> 00:05:34,260 todėl vietoj mes tiesiog supaprastinta kaip, pavyzdžiui, 102 00:05:34,260 --> 00:05:38,800 kuris reiškia, kad nuo šiol mes turime klasę, kurios gali būti laikomos laikiklio 0, 103 00:05:38,800 --> 00:05:41,760 mes turime kitą klasę, kurios gali būti laikomos bracket 1, 104 00:05:41,760 --> 00:05:46,890 bet ką, jei aš goof ir, pavyzdžiui, mano kilpa eina taip toli - 105 00:05:46,890 --> 00:05:48,740 Pavyzdžiui, aš tai mažiau nei arba lygus, 106 00:05:48,740 --> 00:05:50,620 išėmimas iš apyvartos dėl ankstesnio klaidą šaltinis - 107 00:05:50,620 --> 00:05:55,590 , kuri iš esmės reiškia, kad kai kurių trečiųjų atsitiktinio pakartojimo šio ciklo 108 00:05:55,590 --> 00:06:00,380 Aš naudoju kronšteiną 2. Efektyviai, kas gali atsitikti? Sorry? 109 00:06:00,380 --> 00:06:02,860 [Studentas] Ji ketina būti pakeista. >> Ar tai pakeisti? 110 00:06:02,860 --> 00:06:04,520 Ką turėtų būti pakeistas? 111 00:06:04,520 --> 00:06:10,890 Tai tiesiog sako, pakeisti, kas yra grąžinimo vertės GetFloat 2 vietoje. 112 00:06:10,890 --> 00:06:13,690 Bet problema yra tai, kaip didelis yra Šiuo istorija masyvas? 113 00:06:13,690 --> 00:06:17,730 [Nesigirdi studentas atsakas] >> masyvas yra dar tik 2 dydžio 114 00:06:17,730 --> 00:06:22,730 nes masyvą, kaip ir bet kuris kintamasis, buvo paskelbta pirma, kol mes jį naudojo, 115 00:06:22,730 --> 00:06:27,220 ir mes nurodytas čia, nes ši konstanta, kad aš turiu 2 klases, kad aš ruošiuosi įdėti. 116 00:06:27,220 --> 00:06:29,930 >> Tačiau atminkite, kad kompiuterių mokslininkai pradėti skaičiuoti nuo 0. 117 00:06:29,930 --> 00:06:33,620 Taigi, pirmoji vieta masyvo, 0 laikiklis. 118 00:06:33,620 --> 00:06:40,210 Kitą vietą 1. Šis dalykas yra vis tiek šiek tiek per toli šalikelėje. 119 00:06:40,210 --> 00:06:42,870 Taigi, kitaip tariant, jei aš iš tikrųjų turėjo šį masyvo 120 00:06:42,870 --> 00:06:46,790 ir leiskite man pamatyti, kaip gerai bendradarbiauja čia mus - 121 00:06:46,790 --> 00:06:52,360 jei turiu masyvą, kad aš tiesiog padaryti taip 122 00:06:52,360 --> 00:06:56,750 ir aš skirta vietos 2 elementai, aš gali atkreipti tai, kaip atminties 123 00:06:56,750 --> 00:06:58,020 kai tai didelė balta drobė. 124 00:06:58,020 --> 00:07:00,920 Tai tiesiog turiu mano kompiuteryje RAM, RAM žeberklas, 2 koncertai RAM, nesvarbu, 125 00:07:00,920 --> 00:07:05,400 tačiau šie 2 dėžės dabar atskirai sudaro plūdė, 32 bitų. 126 00:07:05,400 --> 00:07:10,860 Taigi, jei aš įdėti numeris 1, čia kaip 1,0, tada aš įdėti kitą numerį kaip 3,2 127 00:07:10,860 --> 00:07:15,280 bet tada aš 2 laikiklį, tai kaip pradėti kažką čia. 128 00:07:15,280 --> 00:07:17,820 Ir kaip vaizdas rodo, kad nėra nieko ten. 129 00:07:17,820 --> 00:07:20,450 Tai tarsi niekieno žemėje, nes aš ne paprašė operacinę sistemą 130 00:07:20,450 --> 00:07:23,550 suteikti man šį trečiąjį viktorinoje. 131 00:07:23,550 --> 00:07:26,940 Jei aš noriu, kad trečiąjį viktorinoje, aš turėjo turėti numatymas 132 00:07:26,940 --> 00:07:31,700 paprašyti, kad operacinę sistemą už jį paskelbiant viktorinos būti ne 2 133 00:07:31,700 --> 00:07:34,210 bet vietoj lygus 3. 134 00:07:34,210 --> 00:07:39,000 >> Taigi, kitaip tariant, vaizdas, kad mes efektyviai turėti po ranka atrodo taip. 135 00:07:39,000 --> 00:07:42,260 Tai irgi yra niekieno žemė. Mes geriau pabandykite rašyti vertybes čia. 136 00:07:42,260 --> 00:07:45,300 Bet vėl, nes kompiuterių mokslininkai skaičius nuo 0, 137 00:07:45,300 --> 00:07:49,520 kai mes kalbame apie šią vietą masyve, tai turėtų būti Location 0 138 00:07:49,520 --> 00:07:53,890 tai turėtų būti 1 vieta, ir tai nėra net egzistuoti 139 00:07:53,890 --> 00:07:57,380 nes mes tik paprašė operacinę sistemą 2 tokių vietų. 140 00:07:57,380 --> 00:08:00,130 Taigi, tiems iš jūsų, ankstesnio programavimo patirtis iš kitų kalbų 141 00:08:00,130 --> 00:08:04,150 Galbūt žinote, kad tai ne visada su matricomis ar ko vadinamas vektorių atvejis. 142 00:08:04,150 --> 00:08:06,930 Priešingai, jūs galite tiesiog nuolat pridedant ir pridedant ir pridedant dalykų, masyvai, 143 00:08:06,930 --> 00:08:10,720 kuris, tiesą sakant, mes turėjome, kad nulio galimybę ir dar mes, atrodo, davė jį čia 144 00:08:10,720 --> 00:08:15,160 esate programavimo C, nes su daug aiškiau. 145 00:08:15,160 --> 00:08:17,980 Tai tik jūs ir kompiuteris dabar, ir kompiuteris yra tik ketina padaryti 146 00:08:17,980 --> 00:08:19,530 ką pasakyti tai daryti. 147 00:08:19,530 --> 00:08:24,270 Taigi, jei jūs tik pasakyti, kad suteiks jums 2 plūdės linijos 22, 148 00:08:24,270 --> 00:08:27,640 kad viskas, jūs ketinate grįžti iš operacinės sistemos: Space 2. 149 00:08:27,640 --> 00:08:34,049 >> Taigi, vis dažniau savo programas, retkarčiais būti klaidų atsižvelgiant į masyvų. 150 00:08:34,049 --> 00:08:37,520 Tai tiesiog tarsi iš žvėries pobūdį, pagal kurią visi mes esame klystantys, 151 00:08:37,520 --> 00:08:42,490 ir tam tikru momentu jums bus labai tikėtina, indeksas už jūsų masyvo ribos. 152 00:08:42,490 --> 00:08:45,980 Ir tai tik išgalvotas būdas pasakyti, Jūs patekote į kronšteino kažką 153 00:08:45,980 --> 00:08:49,970 ir kažkas buvo tiesiog per didelis skaičiaus. Jūs patekote už jūsų masyvo ribų. 154 00:08:49,970 --> 00:08:51,530 Bet aukštyn dabar tai. 155 00:08:51,530 --> 00:08:54,990 Likusi šios programos tikrai neturi nieko iš esmės daryti su matricomis. 156 00:08:54,990 --> 00:08:58,180 Visa tai tik apie kai paprasto aritmetinio skaičiavimo vidurkiai. 157 00:08:58,180 --> 00:09:03,200 Taigi, mes turime čia tai už linijos čia pirmas kintamasis vadinamas suma, kad mes inicijuoti iki 0. 158 00:09:03,200 --> 00:09:09,020 Tada mes vėl kartoti nuo 0 iki 2, ir mes įtraukiame į tos sumavimo kintamojo 159 00:09:09,020 --> 00:09:12,620 osios klasės, todėl laikiklis 0 tada bracket 1. 160 00:09:12,620 --> 00:09:15,130 Ir tada, kaip jūs darytumėte pradinėje mokykloje apskaičiuoti vidurkį, 161 00:09:15,130 --> 00:09:19,420 mes tiesiog tą sumą, padalinsime jį į bendro skaičiaus viktorinos, 162 00:09:19,420 --> 00:09:22,520 ir tada, gera priemonė mes vadiname funkciją čia vadinama turas. 163 00:09:22,520 --> 00:09:28,580 >> Dabar, kaip ir žemę, kas yra spręsti su šio skliausteliuose int on line 34? 164 00:09:28,580 --> 00:09:31,730 Jis galėjo sugalvoti jau skyriuje, tikrai ne apie tai kalbėjome oficialiai čia, 165 00:09:31,730 --> 00:09:35,210 bet kas tai yra int parens tikriausiai daro? >> [Nesigirdi studentas atsakas] 166 00:09:35,210 --> 00:09:38,500 Taip, tai reiškia liejimo arba typecasting, 167 00:09:38,500 --> 00:09:41,690 o tai reiškia, 1 duomenų tipą ir konvertuoti jį į kitą. 168 00:09:41,690 --> 00:09:45,400 Jūs negalite padaryti su visų duomenų tipų, nes kartais tai būtų šiek tiek keista. 169 00:09:45,400 --> 00:09:49,640 Tačiau šiuo atveju, jei gražinama reikšmė turo flotacinio 170 00:09:49,640 --> 00:09:53,880 , nes, galų gale, aš atsižvelgiant plūdę ir dalijant jį numerį kaip ir 2, 171 00:09:53,880 --> 00:09:55,840 Aš ruošiuosi grįžti srautas. 172 00:09:55,840 --> 00:10:00,760 Tačiau pradinėje mokykloje žmonių neturi tikrai norėčiau žinoti, kad jų vidurkis buvo 93,4 173 00:10:00,760 --> 00:10:04,420 nes jie supranta, kad jie buvo kada nors taip arti, kad 95 apvalinimo punktu. 174 00:10:04,420 --> 00:10:09,540 >> Taigi, mes norime, o vietoj jų int aplink visiems į artimiausią int, 175 00:10:09,540 --> 00:10:12,730 , kuris šiuo atveju bus 94 be po jo taško. 176 00:10:12,730 --> 00:10:14,530 Taip, kad tik šiek tiek matematinis triukas. 177 00:10:14,530 --> 00:10:17,570 Ir mes grįžti prie šio liejimo sąvoka, nes ji turės įtakos, 178 00:10:17,570 --> 00:10:21,640 jei turite ne atrado jau nustatyti problemos 2. 179 00:10:21,640 --> 00:10:25,210 Taigi masyvas tada, jūs galite galvoti - jis ketina padaryti mane šypsena visą dieną. 180 00:10:25,210 --> 00:10:27,830 Jis atrodo taip, jei jums padaryti jo nuotrauką, 181 00:10:27,830 --> 00:10:31,460 bet svarbiausia yra tai, kad dydis yra pasirinktas pagal jus 182 00:10:31,460 --> 00:10:34,050 kai jūs prašote iš operacinės sistemos. 183 00:10:34,050 --> 00:10:39,460 Kokių nors klausimų, tada masyvų? Taip. 184 00:10:39,460 --> 00:10:47,080 [Nesigirdi studentas klausimas] 185 00:10:47,080 --> 00:10:49,310 Ak, geras klausimas. 186 00:10:49,310 --> 00:10:53,150 Klausimas yra tai, kas atsitinka su nulinės 0 masyve? Šiame kontekste ji neegzistuoja. 187 00:10:53,150 --> 00:10:57,430 Kad egzistuoja tik eilutės, kurią mes apie ateiti tik akimirką. 188 00:10:57,430 --> 00:11:02,300 Bet masyvo, kaip yra šioje byloje, visi jums yra tai, ką jūs paprašykite operacinę sistemą. 189 00:11:02,300 --> 00:11:04,050 >> Ir kaip žemę, kitaip tai bus neaišku, 190 00:11:04,050 --> 00:11:07,030 Aš nuolat sako, jūs paprašote, kad operacinę sistemą, kreipkitės į operacinę sistemą. 191 00:11:07,030 --> 00:11:10,090 Operacinė sistema, kaip jūs turbūt žinote, yra "Mac OS, Windows, Linux. 192 00:11:10,090 --> 00:11:13,560 Kai jūs skambinate funkcijų, pavyzdžiui, GetFloat 193 00:11:13,560 --> 00:11:19,280 ar jūs deklaruojate klasės kintamuosius kaip, 194 00:11:19,280 --> 00:11:23,200 dienos pabaigoje jūs efektyviai klausia kažkas duoti jums, kad atminties 195 00:11:23,200 --> 00:11:25,940 , nes mes, kaip trokštantis programuotojai 196 00:11:25,940 --> 00:11:28,800 neįsivaizduoju, kaip iš tikrųjų gauti fizinį priėjimą prie atminties. 197 00:11:28,800 --> 00:11:31,100 Bet kas nors operacinę sistemą. 198 00:11:31,100 --> 00:11:36,630 Taigi, be to, su mumis gana piktogramos ir meniu ir aplankus ir panašūs 199 00:11:36,630 --> 00:11:39,050 kad jūs matote ant jūsų darbalaukyje, ar Mac arba PC, 200 00:11:39,050 --> 00:11:42,240 operacinių sistemų, taip pat daryti žemo lygio žemiškas dalykų, 201 00:11:42,240 --> 00:11:44,680 labai techninę stuff Gigabyte valdymo 202 00:11:44,680 --> 00:11:48,780 arba 2 GB atminties, kad jūs turite, kad jūs turite valdyti CPU ir kt. 203 00:11:48,780 --> 00:11:50,170 Taigi, kai jūs rašote kodą, 204 00:11:50,170 --> 00:11:53,900 jūs tikrai nedėkite jūsų operacinės sistemos šia prasme. 205 00:11:53,900 --> 00:11:55,720 Aš ruošiuosi turi sumažinti. Gerai. 206 00:11:55,720 --> 00:11:59,980 >> Kiti klausimai apie masyvų? 207 00:12:00,330 --> 00:12:02,520 Ar ne? Gerai. 208 00:12:02,520 --> 00:12:06,680 Taigi perėjimas natūraliai iš masyvų iš tiesų yra į temą, tai šiek tiek susipažinę. 209 00:12:06,680 --> 00:12:09,570 Ir mes pažvelgė vis tiek trumpai šiuo paskutinį kartą taip pat. 210 00:12:09,570 --> 00:12:12,500 Tai buvo eilutė nuo trečiadienio pavyzdys. 211 00:12:12,500 --> 00:12:15,060 Ši eilutė pavyzdys buvo gana paprasta programa, 212 00:12:15,060 --> 00:12:18,120 ir aš iš tikrųjų supaprastintas jį šiandienos reikmėms linijų poros. 213 00:12:18,120 --> 00:12:22,680 Visa tai daro line 19 yra gauti nuo vartotojo eilutę, išsaugo kintamasis vadinamas ai. 214 00:12:22,680 --> 00:12:28,670 Tada 22 eilutė tolyn, tai, matyt, spausdinti, kad eilutės 1 charakterį vieną eilutę. 215 00:12:28,670 --> 00:12:30,730 Bet kaip jis tai daro? 216 00:12:30,730 --> 00:12:33,350 Mes skelbiantis kintamąjį i, lygi 0, 217 00:12:33,350 --> 00:12:35,770 ir tai tampa senas įprotis dabar. 218 00:12:35,770 --> 00:12:39,270 Nebūtume dar nematė šio iki trečiadienio, bet jūs galite rūšies kildina iš jo pavadinimo 219 00:12:39,270 --> 00:12:44,610 strlen sugrįžtų, ką kai suteikta s? Eilutės ilgis. 220 00:12:44,610 --> 00:12:47,940 Taigi, jei aš perduoti jį eilutę, citata-citatos DAVID, 221 00:12:47,940 --> 00:12:51,810 tai tikiuosi ketina grįžti į mane skaičius 5, nes Dovydo. 222 00:12:51,810 --> 00:12:55,600 Taip, kad jo gyvenimo tikslas yra imtis eilutę, ar jums sunkiai koduojami 223 00:12:55,600 --> 00:12:58,840 ar šiuo atveju prijungtas kaip kintamasis, kaip argumentą, 224 00:12:58,840 --> 00:13:01,980 ir skaičiai, ką tos eilutės ilgis. 225 00:13:01,980 --> 00:13:06,470 >> Taigi čia dabar mes skolinimosi tam tikrą žymėjimą iš ankstesnių viktorinos pavyzdžiui. 226 00:13:06,470 --> 00:13:09,390 Tai neturi nieko daryti su plūdžių, neturi nieko bendra su viktorinos, 227 00:13:09,390 --> 00:13:13,100 tačiau paaiškėja, kad šiek tiek balta melas mes jau sakau jums, nes 1 savaitę 228 00:13:13,100 --> 00:13:16,330 yra tai, kad eilutė nėra tikrai egzistuoja C. 229 00:13:16,330 --> 00:13:20,230 Dienos pabaigoje eilutė yra tikrai tik matrica. 230 00:13:20,230 --> 00:13:25,140 Tai baitų masyvas, todėl baitų, baitų, baitų, baitų, išėmimas iš apyvartos yra tik 8 bitai, 231 00:13:25,140 --> 00:13:28,130 todėl atminties gabalas, riekė atminties, atminties gabalas, riekė atminties. 232 00:13:28,130 --> 00:13:31,210 Ir priemonės, kuriomis yra įgyvendinamas eilutę 233 00:13:31,210 --> 00:13:33,070 įgyvendinant pirmąją raidę, 234 00:13:33,070 --> 00:13:37,470 tada čia, tai čia, tai čia, atgal atgal atgal kompiuterio atmintyje. 235 00:13:37,470 --> 00:13:42,160 Taigi, jei jūs norėjo išdėstyti, kaip HELLO žodį, galite įdėti 1 simbolis H, 236 00:13:42,160 --> 00:13:48,240 E, tada L tada L, tada O - 5 simbolių iš viso - kažkur į kompiuterio RAM. 237 00:13:48,240 --> 00:13:52,080 Tačiau čia pagrindinė detalė yra tai, kad jie bus atgal atgal atgal atgal, 238 00:13:52,080 --> 00:13:54,200 vienas šalia kito. 239 00:13:54,200 --> 00:13:58,820 Kai kai aš sakau, [i], anglų kalba yra tai, kad suteikėte man? 240 00:14:01,240 --> 00:14:04,550 Ką s [i] atstovauti tokiu atveju? Taip. 241 00:14:04,550 --> 00:14:07,800 >> [Studentas] osios personažas į eilutę. >> Būtent. Osios personažas į eilutę. 242 00:14:07,800 --> 00:14:12,260 Dabar, aš ketina prasideda nuo 0, kaip per mano čia kilpa, 243 00:14:12,260 --> 00:14:14,850 bet tai gerai, nes viskas pradeda skaičiuoti nuo 0. 244 00:14:14,850 --> 00:14:19,160 Taigi s [0] ketina atstovauti Raidė H vienu žodžiu kaip HELLO 245 00:14:19,160 --> 00:14:24,530 s [1] ketina atstovauti, pavyzdžiui, elektroninio žodžio raidę kaip HELLO, ir kt. 246 00:14:24,530 --> 00:14:27,130 Ir ką mes, atrodo, daro ant kiekvieno šio ciklo iteracijos 247 00:14:27,130 --> 00:14:32,780 laikinai saugoti ith kintamojo požymio vadinamas C, kuris yra tiesiog char, 248 00:14:32,780 --> 00:14:35,010 ir tada mes spausdinti C 249 00:14:35,010 --> 00:14:37,620 kad dieną, ką ši programa daro pabaigoje yra toks. 250 00:14:37,620 --> 00:14:42,900 Jei aš einu į šaltinio katalogą, ir aš String1 ir aš einu į priekį ir paleisti String1 251 00:14:42,900 --> 00:14:51,920 ir tada aš tipo kaip HELLO, įveskite žodį, jis yra spausdinti šį 1 simbolį vienu metu. 252 00:14:51,920 --> 00:14:54,010 >> Taigi, čia yra galimybė patobulinimui. 253 00:14:54,010 --> 00:14:58,150 Aš tipo dėtų daugiau pastangų, nors tai labiau aišku gal tokiu būdu, nei būtina. 254 00:14:58,150 --> 00:15:03,270 Kuris linija kodą čia aš tikriausiai išmesti iš viso? Taip. 255 00:15:03,270 --> 00:15:08,290 24 eilutėje. Atitinka 24 Aš skelbiantis kintamųjų c. 256 00:15:08,290 --> 00:15:14,320 Aš saugoti ith s pobūdį į jį, bet tada aš naudoju C čia. 257 00:15:14,320 --> 00:15:20,160 Taigi, aš naudojant C, todėl jaučiu, kaip aš negali tiesiog mesti 24 eilutėje toli. 258 00:15:20,160 --> 00:15:23,850 [Nesigirdi studentas komentaras] >> Taip. 259 00:15:23,850 --> 00:15:26,240 Taigi, kai kalbama kalbėti apie programų rengimą, 260 00:15:26,240 --> 00:15:30,740 pastebėti tai šiek tiek supaprastinti kodą, kuris yra lygiai taip pat įskaitomas, 261 00:15:30,740 --> 00:15:34,680 bet suprantame, kad s yra tik kintamasis, duomenų tipas yra masyvas, 262 00:15:34,680 --> 00:15:38,610 taip s [i] yra tik ketina iš karto grįžti į jums osios simbolių toje eilutėje. 263 00:15:38,610 --> 00:15:40,620 Ir, jei norite jį išspausdinti, kad gerai. 264 00:15:40,620 --> 00:15:43,680 Jums tereikia naudoti% c, nes nesate spausdinimo eilutę, 265 00:15:43,680 --> 00:15:48,520 jūs spausdinate simbolį į eilutę, ir tai taip pat turi spausdinimo ith pobūdžio. 266 00:15:48,520 --> 00:15:51,390 Ir atšaukia vienintelis skirtumas tikrai iš praeitą savaitę, naudojant printf 267 00:15:51,390 --> 00:15:54,220 yra tai, kad kadangi per kelias savaites praeityje darytume kažką super paprasta 268 00:15:54,220 --> 00:15:58,510 kaip% s vietos rezervavimo ženklą, tada eilutę čia pavadinimas, 269 00:15:58,510 --> 00:16:01,190 dabar mes nardymo šiek tiek giliau po gaubtu ir sakydami: 270 00:16:01,190 --> 00:16:06,090 nereikia spausdinti eilutę, jame spausdinti vieną simbolį. 271 00:16:06,090 --> 00:16:10,570 >> Taigi, mes galime padaryti kažką šiek tiek skiriasi, nes ten 1 kita - ne klaida 272 00:16:10,570 --> 00:16:14,090 , nes ši programa yra teisinga, bet aš darau kažką kvailas 273 00:16:14,090 --> 00:16:16,810 kad jau minėjau trumpai trečiadienį. 274 00:16:16,810 --> 00:16:22,680 Bet galvoju, kaip būtų ši programa dizainas dar labiau patobulinta? Taip. 275 00:16:22,680 --> 00:16:28,280 [Nesigirdi studentas atsakas] >> O, geras. 276 00:16:28,280 --> 00:16:32,120 Taigi priminti, kad mes pristatė antrą kintamasis vadinamas n paskutinį kartą, 277 00:16:32,120 --> 00:16:34,850 kuris, atrodo, prieštarauja patys, nes mano tikslas prieš antrą 278 00:16:34,850 --> 00:16:37,380 buvo tiesiog išmesti kintamąjį kaip nereikalinga, 279 00:16:37,380 --> 00:16:40,700 tačiau primena, kad trečiadienį, mes iš tikrųjų tai padarė. 280 00:16:40,700 --> 00:16:46,170 Aš pakeičiau už linijos iš tikrųjų turi kablelį, tada n = strlen 281 00:16:46,170 --> 00:16:52,120 ir tada per čia aš, i 00:16:57,660 Kas yra pagrindinis pelnas, kad aš pasiekti keisti savo iniciacijos į šį 283 00:16:57,660 --> 00:17:01,590 ir mano būklė tai dabar? >> [Nesigirdi studentas atsakas] >> Taip. 284 00:17:01,590 --> 00:17:06,170 Aš ne primindamas strlen vėl ir vėl ir vėl, nes prisiminti kaip kilpos darbų. 285 00:17:06,170 --> 00:17:08,790 Net jei jie pradeda gauti daugiau atrodo sudėtinga, 286 00:17:08,790 --> 00:17:12,480 priminti, kad prieš pirmąjį kabliataškiu dalykas yra iniciacijos, kuris atsitinka, kai. 287 00:17:12,480 --> 00:17:14,359 Sąlyga, nors, yra per vidurį, 288 00:17:14,359 --> 00:17:17,710 ir tai bus tikrinamas kiekvieną kartą, kai jūs einate per kilpą. 289 00:17:17,710 --> 00:17:22,420 >> Todėl kind of stupid būti prašoma, kad kompiuteris vėl ir vėl tą patį klausimą - 290 00:17:22,420 --> 00:17:25,920 Koks HELLO ilgis? Koks HELLO ilgis? Kas yra HELLO ilgis? 291 00:17:25,920 --> 00:17:29,740 , nes, kaip mes matome šiandien, ir trečiadienį, tai tikrai truks laiko, 292 00:17:29,740 --> 00:17:34,320 ir tai nėra labai gerai panaudoti, nes išsiaiškinti eilutės ilgis 293 00:17:34,320 --> 00:17:37,030 iš tiesų jis šiek tiek pastangų. 294 00:17:37,030 --> 00:17:39,760 Tai ne iš karto, nes tai kai kuriose kalbose. 295 00:17:39,760 --> 00:17:43,920 Taigi pakeisdami n, kaina, aš mokėti yra kas? 296 00:17:43,920 --> 00:17:45,640 Mes matome kompromisą čia. 297 00:17:45,640 --> 00:17:49,460 Galiu sutaupyti laiko vėl ir vėl klausia to paties velniškai klausimą, 298 00:17:49,460 --> 00:17:51,740 bet tai kainuos man ką nors, o tai, ką? 299 00:17:51,740 --> 00:17:55,050 >> [Studentas] Jūs prarasti tam tikrą atminties. >> Būtent. Tai kainuos man šiek tiek atminties. 300 00:17:55,050 --> 00:17:56,670 Taigi šiuo atveju tai kainuos man, ką? 301 00:17:56,670 --> 00:18:01,530 Dar 32 bitų, nes n yra tik, kaip teigiama čia žodžio int int. 302 00:18:01,530 --> 00:18:03,300 Bet ar tai gerai? 303 00:18:03,300 --> 00:18:05,800 Atvirai kalbant, tai tikriausiai gerai, nes jei jūs manote apie tai, 304 00:18:05,800 --> 00:18:09,030 eilutė yra daugiau laiko, aš ruošiuosi būti išsekimo 305 00:18:09,030 --> 00:18:11,920 nes strlen ketina gauti vadinamas vėl ir vėl ir vėl 306 00:18:11,920 --> 00:18:13,520 už kiekvieną kilpa iteracijos. 307 00:18:13,520 --> 00:18:18,070 Ir šių dienų, mano Mac turi 2 koncertai RAM, šių dienų, 4 koncertai RAM kartais. 308 00:18:18,070 --> 00:18:22,420 Manau, kad gali sau leisti 4 šių baitų faktiškai pagreitinti. 309 00:18:22,420 --> 00:18:26,590 Bet tai bus kompromisą ir tema tikrai programavimo ir kompiuterių mokslo 310 00:18:26,590 --> 00:18:28,320 niekada gauti ką nors nemokamai. 311 00:18:28,320 --> 00:18:32,880 Jei norite pagerinti kažką čia, jūs turite mokėti už jį Kita vertus kažkaip. 312 00:18:32,880 --> 00:18:35,880 Erdvė priklausomai nuo laiko, ir šiuo atveju. 313 00:18:35,880 --> 00:18:40,700 >> Taigi tai buvo viskas veda link kažkas paslaptingas, kaip tai, 314 00:18:40,700 --> 00:18:44,070 kuris, kaip jūs tikriausiai supratote, dabar, iš tikrųjų sako? 315 00:18:44,070 --> 00:18:47,420 [Nesigirdi studentas atsakas] >> Taip, taip, tai yra, Būtinai gerti savo Ovaltine 316 00:18:47,420 --> 00:18:52,490 iš tikrųjų, naudojant algoritmą, vadinamą ROT13 ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 , kuris tiesiog reiškia, pasukti visas raides 13 vietų, 318 00:18:55,500 --> 00:18:58,720 , o tai reiškia, imtis ir tada jai 13 ir eiti tašką, taškas, taškas 319 00:18:58,720 --> 00:19:04,640 visą kelią iki 13 laiške toli, padaryti tą patį, B ir C ir D, ir taip toliau. 320 00:19:04,640 --> 00:19:10,850 Ir todėl, jei mes iš tikrųjų konvertuoti tai čia naudojant 13 vietų pasikeitimą, 321 00:19:10,850 --> 00:19:14,580 mes susisieksime ką mažai Ralphie, kuri buvo Būtinai gerti savo Ovaltine. 322 00:19:14,580 --> 00:19:18,160 Bet dabar problema nustatyti 2, standartinis leidimas bent 323 00:19:18,160 --> 00:19:21,680 turite rūšies tai padaryti šifravimo sau, 324 00:19:21,680 --> 00:19:25,990 ir mes turime kažkaip imtis panašaus į tai įvesties ir užšifruoti ar iššifruoti ją. 325 00:19:25,990 --> 00:19:29,850 >> Taip, tai kurioms šie pagrindai rūšies veda mus į šia galimybe? 326 00:19:29,850 --> 00:19:32,650 Paimkime šiuo Trečiasis pavyzdys čia atrodo. 327 00:19:32,650 --> 00:19:38,430 Visų pirma, ji vadinama ASCII. Ką ASCII grąžinti? 328 00:19:38,430 --> 00:19:40,460 Amerikos standartinis informacinių mainų kodas, 329 00:19:40,460 --> 00:19:43,850 kuris yra tikrai ilgas kelias pasakyti, ką? Kas yra ASCII? 330 00:19:43,850 --> 00:19:47,890 [Nesigirdi studentas atsakas] >> Kas tai? >> [Studentas] pobūdžio struktūra. >> Pobūdžio struktūra. 331 00:19:47,890 --> 00:19:51,390 Jis tiesiog žemėlapiai numerius į laiškus, nes pasaulis yra standartizuotas 332 00:19:51,390 --> 00:19:55,380 kokie numeriai atspindi tai, ką raidės, kad mes visi galime naudotis kompiuteriais 333 00:19:55,380 --> 00:19:59,340 ir mūsų programos yra tik suderinama, kai jis ateina į spausdinti ekrane dalykų. 334 00:19:59,340 --> 00:20:04,680 Taigi priminti, kad 65 atsitinka atstovauti, 97 atsitinka atstovauti mažosiomis. 335 00:20:04,680 --> 00:20:08,510 Ir todėl tai paprasta programa ASCII yra pasinaudoti šio fakto 336 00:20:08,510 --> 00:20:12,770 kad pasaulis žino, kad kapitalas yra 65 - ir tai tik spausdinimo priskyrimą. 337 00:20:12,770 --> 00:20:16,320 >> Taigi, kol mes pasinerti į šio kodekso, leiskite man, o ne atverti terminalo langą. 338 00:20:16,320 --> 00:20:21,550 Leiskite man eiti į priekį ir padaryti ASCII, ir tada tegul tiesiog paleisti tai, ką tiesiog sugadinti produkciją. 339 00:20:21,550 --> 00:20:25,960 Ir tai tiesiog daro: tikrai didelis schema, kad tik man sako, įvairius kodus 340 00:20:25,960 --> 00:20:27,950 įvairiuose laiškuose. 341 00:20:27,950 --> 00:20:32,100 Taip super paprasta programa, bet aš neturiu į kietąjį kodą šias 52 eilutes produkcijos: 342 00:20:32,100 --> 00:20:34,860 26 didžiosiomis raidėmis, 26 mažosiomis raidėmis. 343 00:20:34,860 --> 00:20:37,790 Vietoj to, aš padariau tai programiškai su porą vyrių. 344 00:20:37,790 --> 00:20:39,720 Pastebėsite, ką aš čia. 345 00:20:39,720 --> 00:20:44,790 Aš pakartota iš i 65 iki 65 + 26, nes norėjau atspausdinti 26 raides 346 00:20:44,790 --> 00:20:49,860 anglų abėcėlės rašmenimis, i + + kiekvienos iteracijos, o dabar pastebėsite tai dar kartą. 347 00:20:49,860 --> 00:20:52,540 Tai mūsų draugui typecasting pasikartojimo 348 00:20:52,540 --> 00:20:54,620 , pagal kurią jums konvertuoti 1 duomenų tipą į kitą 349 00:20:54,620 --> 00:20:57,480 nes tai, ką aš noriu daryti šioje konkrečioje programoje? 350 00:20:57,480 --> 00:21:02,650 Noriu skaičiuoti skaitmeniniu būdu, nes tai, kaip aš užaugau skaičiavimo - 65, 66, 67, ir tt - 351 00:21:02,650 --> 00:21:04,420 bet aš nenoriu spausdinti tik skaičius. 352 00:21:04,420 --> 00:21:08,030 Noriu atsispausdinti laišką, po kurių yra skaičius. 353 00:21:08,030 --> 00:21:18,640 Norėčiau atspausdinti A: skaičius, B:, bet aš galiu tai padaryti su tuo pačiu miesto kintamojo. 354 00:21:18,640 --> 00:21:21,630 Taigi, aš atsispausdinti% c, kaip vietos rezervavimo ženklo simbolį, 355 00:21:21,630 --> 00:21:25,080 Skaitmuo arba skaičius vietos rezervavimo ženklas:% d. 356 00:21:25,080 --> 00:21:27,750 Tada, ką aš prijunkite už šių 2 vietos rezervavimo ženklai? 357 00:21:27,750 --> 00:21:33,960 Aš pirmą kartą prijungti simbolių ekvivalentas i, ir tada aš spausdinti i save. 358 00:21:33,960 --> 00:21:36,400 >> Taigi pastebėsite tai tiesiog veikia. 359 00:21:36,400 --> 00:21:39,320 Lygiai taip pat galiu mesti iš float int 360 00:21:39,320 --> 00:21:41,750 , kad eiti nuo realaus skaičiaus iki sveikojo skaičiaus, 361 00:21:41,750 --> 00:21:46,100 čia aš galiu eiti iš int char, kuris yra šiek tiek keista - 362 00:21:46,100 --> 00:21:48,680 ne visai žemėlapį į realiame pasaulyje - bet kompiuteriuose 363 00:21:48,680 --> 00:21:51,140 char yra tik po gaubtu, 364 00:21:51,140 --> 00:21:53,590 todėl mes vis tiek aiškiai čia prie kompiuterio, sakydamas: 365 00:21:53,590 --> 00:21:58,920 printf, spausdinti ne aš kaip 65, atspausdinti jį kaip savo skaičių ekvivalento. 366 00:21:58,920 --> 00:22:02,110 Ir paaiškėja, kad aš techniškai nėra net to reikia. 367 00:22:02,110 --> 00:22:05,020 Ką aš darau prieš akimirką aiškiai liejimo 368 00:22:05,020 --> 00:22:08,760 nurodant, koks duomenų tipas, aš noriu eiti ir iš. 369 00:22:08,760 --> 00:22:11,840 , Bet pastebėsite, kad aš jau turiu šį rezervavimo ženklo% C 370 00:22:11,840 --> 00:22:14,930 ir tas kitas% c vietos rezervavimo ženklas. 371 00:22:14,930 --> 00:22:18,880 Nors tai ne int, kompiuteris supranta, kad char, 372 00:22:18,880 --> 00:22:21,080 tai tik po gaubtu int. 373 00:22:21,080 --> 00:22:25,100 >> Taigi, jei aš iš tikrųjų perkompiliuoti ir iš naujo paleisti programą ASCII, 374 00:22:25,100 --> 00:22:31,210 pastebėsite, kad jis vis tik veikia, nes kompiuteris supranta, kad yra tokia korespondencija. 375 00:22:31,210 --> 00:22:34,870 Dabar svarbu padaryti aiškų liejimo plaustų pasaulyje Ints 376 00:22:34,870 --> 00:22:37,460 dėl to, kad jūs iš tikrųjų apskaičiuotą sprendimą: 377 00:22:37,460 --> 00:22:40,140 išmesti viską po kablelio. 378 00:22:40,140 --> 00:22:44,990 Čia tikrai nieko išmesti, nes charakteris yra tiesiog skaičius, 379 00:22:44,990 --> 00:22:48,220 ir eilutė yra tik simbolių masyvas. 380 00:22:48,220 --> 00:22:52,530 Taigi, kai ateina laikas įgyvendinti tam tikrą užšifravimas arba iššifravimas, 381 00:22:52,530 --> 00:22:56,770 kaip tai, kad iš tiesų galime versti kažką panašaus į tai nesąmonė, 382 00:22:56,770 --> 00:22:58,670 Būtinai gerti savo Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Ką daryti, jei mes žinome dabar - Paimkime kaip prielaida, kad pagrindinis 384 00:23:02,700 --> 00:23:08,010 skaičius, kad mes sukasi visus šiuos laiškus, numeris 13? 385 00:23:08,010 --> 00:23:11,800 Pasakyta iš B raide visą kelią iki Õ sakinio pradžioje, 386 00:23:11,800 --> 00:23:14,710 Būtinai gerti savo Ovaltine, nes jei aš B 387 00:23:14,710 --> 00:23:19,600 ir tada aš einu, C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 tai, kodėl B raide šifravimo tampa O 389 00:23:23,760 --> 00:23:26,570 nes Aš ką tik pridėjo 13 į jį. 390 00:23:26,570 --> 00:23:33,460 >> Taigi, jei aš noriu iššifruoti tai, aš iš esmės turi imtis O ir tada 13 iš jo atimti. 391 00:23:33,460 --> 00:23:36,880 Arba, tiesą sakant, nes ten yra 26 raidės abėcėlės, tai yra nuostabiai simetriškai, 392 00:23:36,880 --> 00:23:41,260 Taip pat mes galime tiesiog pridėkite 13 ir mes susisieksime raidė B. 393 00:23:41,260 --> 00:23:44,290 Bet kaip tu apie kažką panašaus į tai Cezaris 394 00:23:44,290 --> 00:23:46,600 ar tikrai manipuliuoti stygas apskritai? 395 00:23:46,600 --> 00:23:51,380 Jei laiškas B numeris? 396 00:23:51,380 --> 00:23:55,290 Kas yra raide B? Todėl 66, tiesa? 397 00:23:55,290 --> 00:23:59,220 Taigi, jei laiškas yra 65 ir raidė B - 66, 398 00:23:59,220 --> 00:24:03,940 taip 66, viskas, ką turite padaryti, jai 13, ir tai suteikia man 79. 399 00:24:03,940 --> 00:24:09,150 Ir jei mes einame į mūsų mažai Cheat sheet, 79 tiesų žemėlapiai ant O. 400 00:24:09,150 --> 00:24:11,290 >> Bet čia yra šiek tiek kampe bylos. 401 00:24:11,290 --> 00:24:15,170 Kas yra, tarkim, raidė Z? 402 00:24:15,170 --> 00:24:20,180 Jei mes darome 66 + 25 gauti visą kelią iki abėcėlės pabaigos, mes 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 suteikia man 104, ir atspėti, ką? 404 00:24:24,520 --> 00:24:29,200 104 nėra lygi didžiąsias raides. 405 00:24:29,200 --> 00:24:31,610 Leiskite grįžti prie šiek tiek apgauti lape. 406 00:24:31,610 --> 00:24:38,070 Jei aš iš naujo paleisti šią programą prietaiso, pranešimas, kad 104, jei aš einu atgal į terminalo langą, 407 00:24:38,070 --> 00:24:41,800 104, matyt mažosiomis val. 408 00:24:41,800 --> 00:24:46,400 Taigi, mes turime kai kuriuos pagrindinius apgauti čia tam, kad įsitikinti, kad, kai mes pradedame Z 409 00:24:46,400 --> 00:24:50,260 ir mes pridėsime 13 nenorime tiesiog laikyti uoliai didesni ir didesni. 410 00:24:50,260 --> 00:24:52,600 Ką mes tikrai norime daryti? 411 00:24:52,600 --> 00:24:54,570 Norite vyniojami aplink. 412 00:24:54,570 --> 00:25:00,250 >> Taigi, it turns out, kaip jūs mačiau tikriausiai skyriuje dabar ir pati problemą, spec 413 00:25:00,250 --> 00:25:05,730 suprato, kad tai yra kitas operatorius C, kad taip pat yra procento ženklas, 414 00:25:05,730 --> 00:25:11,020 bet kadangi mes naudojame% čia nurodyti vietos rezervavimo ženklą, 415 00:25:11,020 --> 00:25:15,420 žinoti, kad, ypač problemą, 2, yra taip pat kažkas panašaus į tai: 416 00:25:15,420 --> 00:25:18,990 int x = y% z. 417 00:25:18,990 --> 00:25:22,770 Leiskite man tiesiog pateikti tai, kaip labai bendro pobūdžio forma. 418 00:25:22,770 --> 00:25:25,580 Procentų tai, ką programavimo kalba? >> [Studentas] Modulo. 419 00:25:25,580 --> 00:25:28,790 Modulį, kuris yra išgalvotas būdas pasakyti, likusią dalį. 420 00:25:28,790 --> 00:25:31,620 Nors yra nežymus skirtumas su apibrėžimu ten, 421 00:25:31,620 --> 00:25:37,210 tai reiškia, padalinti y z, bet negrįžta padalijimo rezultatas; 422 00:25:37,210 --> 00:25:39,650 vietoj to, grąžinti likusią dalį. 423 00:25:39,650 --> 00:25:47,390 >> Taigi, jei y iš tikrųjų yra 3 ir z yra faktiškai 2, 3 padalinti iš 2 - 1 nuo 1 likusiam 424 00:25:47,390 --> 00:25:51,550 Taigi, ką x faktiškai lygus šiame scenarijuje? 1. 425 00:25:51,550 --> 00:25:54,540 Tai toks paprastas, žemo lygio idėja. 426 00:25:54,540 --> 00:25:56,480 Tai užtrunka šiek tiek laiko gauti jūsų protas, apvyniotas aplink jį 427 00:25:56,480 --> 00:25:58,740 todėl, kad tai tikriausiai buvo kartu, nes jūs net turėjo rūpintis likučiuose 428 00:25:58,740 --> 00:26:01,160 ir iš tikrųjų juos naudoti kažko kryptingą, 429 00:26:01,160 --> 00:26:05,290 tačiau šiuo atveju paprastas faktas, kad galite pereiti nuo didelis skaičius kaip 3 430 00:26:05,290 --> 00:26:08,920 santykinai nedaug, pavyzdžiui, "2" ir vyniojami aplink efektyviai 431 00:26:08,920 --> 00:26:14,160 naudojant mažesnės vertės, kaip 1, likusią dalį bus neįkainojama triukas 432 00:26:14,160 --> 00:26:17,690 kad mes galime naudoti tiek kažką panašaus į Cezario ir šio Kitas dalykas Vigenere 433 00:26:17,690 --> 00:26:22,240 problema nustatyti 2, tačiau tai bus pasikartojanti triukas visą semestrą. 434 00:26:22,240 --> 00:26:24,880 Tai paprasta, paprasta idėja tik atsižvelgiant likusią apskritai 435 00:26:24,880 --> 00:26:26,530 ketina leisti mums į kuriuos vyniojami aplink. 436 00:26:26,530 --> 00:26:31,140 Ir kaip mes pradėti žaisti su matricomis, kaip mes pradėti žaisti daugiau pati su atmintim, 437 00:26:31,140 --> 00:26:35,800 taps vis daugiau ir daugiau galingas apgauti. 438 00:26:35,800 --> 00:26:43,420 >> Taigi kokių nors klausimų, tada ASCII arba eilučių atstovavimo kaip masyvai? 439 00:26:43,420 --> 00:26:47,430 Ir mes priimsime jį 1 įpjova toliau. Taip. 440 00:26:47,430 --> 00:26:52,350 [Nesigirdi studentas klausimas] >> Geras klausimas. 441 00:26:52,350 --> 00:26:55,370 Ką tai reiškia, kai kintamasis turi žvaigždutę priešais jį? 442 00:26:55,370 --> 00:26:57,720 Leiskite man atidėti, kad atsakyti į bet išsamiai, 443 00:26:57,720 --> 00:27:00,100 bet kuris reiškia su tema, žinomas kaip rodykle. 444 00:27:00,100 --> 00:27:03,440 Patarimų turite padaryti su atmintim, ir mes iš tikrųjų šiandien 445 00:27:03,440 --> 00:27:06,330 žengia pirmąjį žingsnį link to diskusijos, 446 00:27:06,330 --> 00:27:08,600 bet dabar, leiskite man apsimesti, kad žvaigždė neegzistuoja 447 00:27:08,600 --> 00:27:15,380 ir mes toliau ragina eilutes eilutes, o ne naudojant char * 448 00:27:15,380 --> 00:27:19,530 jūs tikriausiai matė prieš ir aš įdėti ekrane, vos akimirką kaip erzina. 449 00:27:19,530 --> 00:27:23,010 Taigi, mes grįžti į, kad būdas išsamiau, nei daugelis iš jūsų tikriausiai patinka. 450 00:27:23,010 --> 00:27:25,760 Galų gale, ne šiandien. Taip. 451 00:27:25,760 --> 00:27:42,810 >> [Nesigirdi studentas klausimas] 452 00:27:42,810 --> 00:27:47,080 Kokiame kontekste jūs turite suteikti kurio nors požymio ženklas? >> [Studentas] Yeah. 453 00:27:47,080 --> 00:27:52,130 Taigi pagal numatytuosius nustatymus, kai jums nereikia įdėti A +, tik teigiami skaičiai prielaida. 454 00:27:52,130 --> 00:27:55,390 Taigi, jei tiesiog parašyti skaičių 1, tai teigiamas 1. 455 00:27:55,390 --> 00:27:57,710 Jei jūs iš tikrųjų norite nurodyti, kurių vertė neigimą, 456 00:27:57,710 --> 00:28:01,060 jūs tiesiog turite padaryti -1 savo klaviatūroje. 457 00:28:01,060 --> 00:28:20,440 Bet tai tikriausiai nėra jūsų klausimas. >> [Nesigirdi studentas atsakas] 458 00:28:20,440 --> 00:28:22,200 >> Geras klausimas. Gerai. 459 00:28:22,200 --> 00:28:24,970 Taigi tai turi daryti, aš surinkti, su tam tikrą klaidą, jūs paleidote į 460 00:28:24,970 --> 00:28:27,640 nes jums konvertuoti sveikasis skaičius į simbolį, 461 00:28:27,640 --> 00:28:29,780 bet kažkaip negatyvumo įsitraukė 462 00:28:29,780 --> 00:28:32,380 ir taip charakteris tiesiog išėjo munged kažkaip. 463 00:28:32,380 --> 00:28:36,710 Taigi dabar, leiskite man per daug supaprastinti šiek tiek, kol mes grįžtame prie šio temą natūra. 464 00:28:36,710 --> 00:28:39,570 Dabar, galvoti apie visus tokiu būdu - ir tai yra supaprastinimas. 465 00:28:39,570 --> 00:28:43,500 Bet sveikasis skaičius pasaulyje, jūs turite, kiek bitų savo žinioje? 466 00:28:43,500 --> 00:28:45,190 Jūs turite 32 bitų. 467 00:28:45,190 --> 00:28:49,030 Ir iki šiol, mes kalbėjome apie visų sveikųjų skaičių, todėl jis gali atstovauti 468 00:28:49,030 --> 00:28:52,430 yra maždaug 4 mlrd. iš viso, nes jūs turite 32 bitų, 469 00:28:52,430 --> 00:28:55,100 kad 2 iki 32, kad maždaug 4 mlrd. 470 00:28:55,100 --> 00:28:58,810 Bet mes matėme prieš savaitę arba 2, kad jūs ne iš tikrųjų turėti skirtas numerių intervalas 471 00:28:58,810 --> 00:29:01,240 nuo 0 iki 4 mlrd. 472 00:29:01,240 --> 00:29:06,340 Diapazonas, o ne eina iš maždaug neigiamą 2 mlrd teigiamas 2 mlrd. 473 00:29:06,340 --> 00:29:10,990 Bet tai tada kyla klausimas, kaip jūs atstovaujate neigiamą 2 mlrd. Sąvoka 474 00:29:10,990 --> 00:29:13,260 jau nekalbant apie neigiamas 1? 475 00:29:13,260 --> 00:29:17,960 Nes dabar, mes galime daug supaprastinti ir tiesiog pasakyti, kad mes ketiname naudoti kairiausias tiek 476 00:29:17,960 --> 00:29:22,380 iš tų 32 bitų, ir, jei tai yra 1, tai neigiamas skaičius, 477 00:29:22,380 --> 00:29:25,090 ir jei jis 0 tai teigiamas skaičius. 478 00:29:25,090 --> 00:29:28,570 Problema su tuo Supaprastintas neigiamais skaičiais 479 00:29:28,570 --> 00:29:33,700 yra tai, kad, jei jūs sąmoningai protingas ir bando konvertuoti simbolį, skaičių, 480 00:29:33,700 --> 00:29:37,190 arba atvirkščiai, nėra tokio dalyko, kaip neigiamo pobūdžio. 481 00:29:37,190 --> 00:29:42,550 Į ASCII, kuris naudoja tik 8 bitus, visi 8 iš tų bitų klausimu pasaulyje, 482 00:29:42,550 --> 00:29:46,810 ir kairiausias tiek neturi nieko daryti su negatyvumo. 483 00:29:46,810 --> 00:29:49,670 Ir tik būtų aišku, kai aš sakau, kairiausias bitai, 484 00:29:49,670 --> 00:29:54,610 pamiršti, kad mes padarėme mūsų bit susijusių pavyzdžių per pirmą savaitę 485 00:29:54,610 --> 00:30:02,570 priminti, kad mes padarė dalykų, pavyzdžiui, 1001101, kažką panašaus į tai. 486 00:30:02,570 --> 00:30:07,210 Kai aš sakau, kairiausias tiek, aš tiesiog pažodžiui reiškia 1, kad rašote visą kelią per į kairę. 487 00:30:07,210 --> 00:30:11,910 Taigi simbolių pasaulyje nėra negatyvumo sąvoka, 488 00:30:11,910 --> 00:30:16,360 , kad labiausiai į kairę nutolusį šiek tiek iš tikrųjų turi kažką daryti su ASCII, nieko daryti su negatyvumo. 489 00:30:16,360 --> 00:30:19,390 >> Taigi jis skamba kaip - ir iš kontekste sunku atsakyti tiksliai - 490 00:30:19,390 --> 00:30:25,840 bet kažkaip, kad jūsų kodas buvo klaidinami, kad kairiausias tiek, kiek ty neigiama reikšmė 491 00:30:25,840 --> 00:30:29,160 , kai ji tikrai buvo nagrinėjamo pobūdžio. 492 00:30:29,160 --> 00:30:32,250 Ir vėl, aš oversimplifying, nes kompiuteriai iš tikrųjų kažką šiek tiek mėgėjas 493 00:30:32,250 --> 00:30:37,080 nei tiesiog pakeisti, kad kairiausias šiek tiek į 1, lyginant su 0 minuso ženklu. 494 00:30:37,080 --> 00:30:41,270 Jie, o ne, jei esate įdomu "Google", naudokite kažką, paprastai vadinamas 2 įgula, 495 00:30:41,270 --> 00:30:43,830 kuris yra labiau išprusę požiūrio 496 00:30:43,830 --> 00:30:45,490 tačiau idėja yra galų gale tas pats. 497 00:30:45,490 --> 00:30:50,530 >> Taigi trumpai tariant, ji turėjo daryti su tuo, kad jūs masažo skaičių į simbolį 498 00:30:50,530 --> 00:30:53,750 arba atvirkščiai, bet Jūsų kodas nebuvo informuota apie tai, 499 00:30:53,750 --> 00:30:56,510 kad 1 iš tų bitų reikšmę skaičių pasaulyje. 500 00:30:56,510 --> 00:30:59,940 Kad tai ne tas atvejis simbolių pasaulyje. 501 00:30:59,940 --> 00:31:04,270 Bet tai skamba kaip jums nustatė, tokiu atveju proceso inscenizacijos dabar. Kiti klausimai. 502 00:31:06,030 --> 00:31:07,110 Gerai. 503 00:31:07,110 --> 00:31:11,560 Taigi, iki šiol, visi mes aprašiusi programų ėmėsi įvesties gal nuo naudotojo 504 00:31:11,560 --> 00:31:14,330 funkcijų kaip GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 arba jei jūs skaityti į priekį įvairiose knygose ar interneto nuorodos, 506 00:31:16,990 --> 00:31:21,390 jūs patys galėjo naudoti funkcijas, pavyzdžiui, scanf, kuris, tiesą sakant, mes naudojame CS50 bibliotekoje. 507 00:31:21,390 --> 00:31:25,370 Bet per savaitę arba 2, mes iš tikrųjų parodyti jums, kaip CS50 biblioteka įgyvendino 508 00:31:25,370 --> 00:31:27,890 , kad galėtume imtis šių mokymo ratus apskritai. 509 00:31:27,890 --> 00:31:31,340 >> Tačiau paaiškėja, yra ir kitas būdas gauti informacijos iš vartotojo. 510 00:31:31,340 --> 00:31:34,670 Tiesą sakant, mes patys buvo naudojant komandinės eilutės argumentai 511 00:31:34,670 --> 00:31:36,500 porą savaičių dabar. 512 00:31:36,500 --> 00:31:41,150 Kiekvieną kartą, kai mes paleisti Apsukite metalinis garsas arba mes paleisti, kad, 513 00:31:41,150 --> 00:31:45,050 mes ne tiesiog atspausdinti Apsukite metalinis garsas, Enter, mes ne įvedėte padaryti, įveskite. 514 00:31:45,050 --> 00:31:49,340 Ką mes paprastai parašyta po žodžio Apsukite metalinis garsas ne mūsų terminalo Windows "raginimo lange? 515 00:31:51,110 --> 00:31:52,900 [Studentas] failo pavadinimas. >> Failo pavadinimas, tiesa? 516 00:31:52,900 --> 00:31:57,560 Hello.c arba mario.c arba nepriklausomai nuo failo vardas yra. 517 00:31:57,560 --> 00:32:01,910 Ir šia prasme, tai, ką jūs tikrai padaryti jūs įtakos Apsukite metalinis garsas elgesį 518 00:32:01,910 --> 00:32:05,750 nes tikrai turėjau ne idėja, kad mažai tau metų žmonės, kurie rašė Apsukite metalinis garsas 519 00:32:05,750 --> 00:32:08,890 buvau ketinate programą, pavadintą rašyti mario.c metų. 520 00:32:08,890 --> 00:32:13,150 Taigi, jūs turėjo kažkaip paveikti tos programos elgesį, 521 00:32:13,150 --> 00:32:18,140 ir kad programa Apsukite metalinis garsas turėjo būti parašyta taip, kad jis gali priimti indėlį iš jūsų 522 00:32:18,140 --> 00:32:23,480 žodžių apie greitą to, kol naudotojas paspaus Enter. 523 00:32:23,480 --> 00:32:27,860 >> Taigi paaiškėja, kad tam tikrą laiką mes buvome skelbiantis beveik visi mūsų programos 524 00:32:27,860 --> 00:32:32,840 pradėti kaip int main (void) - ir tada mes nuėjo į priekį 525 00:32:32,840 --> 00:32:35,110 ir pradėjo rašyti savo kodą. 526 00:32:35,110 --> 00:32:37,910 Ir mes galime turėti tam tikrą aštrus yra failo viršuje 527 00:32:37,910 --> 00:32:40,660 bet beveik visi mūsų programos šiol pradėjo 528 00:32:40,660 --> 00:32:44,200 nors galite mačiau skyriuje, knygose, interneto nuorodos 529 00:32:44,200 --> 00:32:46,570 kad tai nėra iš tikrųjų turi negaliojančiu. 530 00:32:46,570 --> 00:32:55,820 Kitas teisėta forma tai užtruks yra int argc ir tada styginių argv []. 531 00:32:55,820 --> 00:32:57,500 Taigi, dabar, kas tai yra tai reiškia? 532 00:32:57,500 --> 00:33:01,320 Paaiškėja, kad argc, kuris yra žmogaus konvencija būtų galima pavadinti šį foo 533 00:33:01,320 --> 00:33:03,710 bet tai būtų tiesiog daug mažiau aiškus skaitytojams - 534 00:33:03,710 --> 00:33:09,330 argc tiesiog argumentas, funkcija vadinama kad iš esmės atitinka tai, ką? 535 00:33:09,330 --> 00:33:12,450 Ką argc stovėti tiems, kurie susipažinę? 536 00:33:12,450 --> 00:33:14,980 >> [Nesigirdi studentas atsakas] >> Taip, argumentų ar argumentas Count. 537 00:33:14,980 --> 00:33:16,510 Tai taip paprasta, kaip kad. 538 00:33:16,510 --> 00:33:19,160 Kiek argumentai buvo perduotas į programą? 539 00:33:19,160 --> 00:33:20,630 Ką tai reiškia? 540 00:33:20,630 --> 00:33:27,090 Jei aš paleisti į komandų eilutę kažką panašaus į tai - Apsukite metalinis garsas mario.c - 541 00:33:27,090 --> 00:33:35,440 argc, kai aš paspauskite "Enter" ketina imtis vertės 2 dalies painiai. 542 00:33:35,440 --> 00:33:40,150 Taigi paaiškėja, kad argc yra argumentas skaičius, 543 00:33:40,150 --> 00:33:46,280 tačiau dėl istorinių priežasčių, iš pačios programos pavadinimas yra įtrauktas į tą skaičių. 544 00:33:46,280 --> 00:33:51,950 Taigi argc yra 2, kai aš parašė Apsukite metalinis garsas mario.c. 545 00:33:51,950 --> 00:33:54,290 Ką argv yra? 546 00:33:54,290 --> 00:33:57,020 Visų pirma, argv atrodo eilutę, bet ne visai 547 00:33:57,020 --> 00:33:59,310 , nes paskutinį mėnesio trečiadienį ir juo labiau šiandien, 548 00:33:59,310 --> 00:34:02,890 šiuos skliaustus pažymėti, ką? Štai masyvas. 549 00:34:02,890 --> 00:34:07,110 Nėra jokios masyve skaičių, ir kad turėtų prasmės intuityviai 550 00:34:07,110 --> 00:34:10,790 , nes žmonės, kurie rašė Apsukite metalinis garsas metų tikrai turėjau ne idėja, 551 00:34:10,790 --> 00:34:16,300 Kiek žodžių žmonės kaip mes įvesti komandinėje eilutėje prieš paspausite klavišą Enter. 552 00:34:16,300 --> 00:34:22,280 >> Taigi, šiuo atveju čia jie pareiškė, pagrindinė funkcija, kaip atsižvelgiant argumentų masyvo, 553 00:34:22,280 --> 00:34:24,590 0 arba daugiau argumentų. 554 00:34:24,590 --> 00:34:26,460 Jie nežino iš anksto, kiek yra, 555 00:34:26,460 --> 00:34:29,690 todėl yra sąmoningai nepateikiama viduje šių laužtiniuose skliaustuose. 556 00:34:29,690 --> 00:34:32,750 Bet faktas, kad yra laužtiniuose skliaustuose pasako kompiuteriui, 557 00:34:32,750 --> 00:34:34,639 tikėtis masyvą. 558 00:34:34,639 --> 00:34:37,489 Argv yra tik argumentas, vektoriaus sutrumpinimas notacijos. 559 00:34:37,489 --> 00:34:39,889 Vektorius išgalvotas būdas pasakyti, masyvas, 560 00:34:39,889 --> 00:34:42,980 ir masyvas yra išgalvotas būdas pasakyti, sąrašą arba surinkimas. 561 00:34:42,980 --> 00:34:47,360 Taigi tai tiesiog reiškia, kad jei jums reikia parašyti pagrindinis, kaip tai 562 00:34:47,360 --> 00:34:51,100 , o ne, pavyzdžiui, kaip mes jau tai daro pastaruosius porą savaičių, 563 00:34:51,100 --> 00:34:54,699 jūsų programa dabar turi teisę priimti komandinės eilutės argumentai 564 00:34:54,699 --> 00:34:58,520 kad nebegali padaryti turite rašyti Mario ir tada paspauskite Enter, 565 00:34:58,520 --> 00:35:01,610 tada įveskite numerį, kaip daugelis blokai aukštos norite piramidės, 566 00:35:01,610 --> 00:35:03,100 tada paspauskite "Enter" dar kartą. 567 00:35:03,100 --> 00:35:07,720 Mes net nereikia naudoti GetString nebėra arba šiuo klausimu GetInt arba GetFloat. 568 00:35:07,720 --> 00:35:12,370 Mes galime tik tikėtis, kad vartotojas galėtų tuos žodžius komandinėje eilutėje save 569 00:35:12,370 --> 00:35:16,850 Apsukite metalinis garsas autoriai kaip ir nusprendžiau, kad būtų tikrai erzina programa 570 00:35:16,850 --> 00:35:20,550 jei sudaryti savo kodą, kurį pirmą kartą įvedėte Apsukite metalinis garsas, paspauskite Enter, 571 00:35:20,550 --> 00:35:24,090 tada mes sakėme, kad vartotojas, prašome įveskite failo, kurį norite rinkti vardą, 572 00:35:24,090 --> 00:35:26,920 tada mes įvesti mario.c ir paspauskite Enter. 573 00:35:26,920 --> 00:35:29,850 Bet tai, ką mes jau daro mūsų vartotojams pastaruosius porą savaičių. 574 00:35:29,850 --> 00:35:33,550 Mes naudojame GetString ir palaukti, kol programa veikia greitai įvesties. 575 00:35:33,550 --> 00:35:36,710 Kad nebereikia būti. 576 00:35:36,710 --> 00:35:41,160 >> Taigi šiame pavyzdyje čia, dabar mes turime string argv, 577 00:35:41,160 --> 00:35:43,390 ir tai taip pat yra supaprastinimas, 578 00:35:43,390 --> 00:35:45,610 mokymo ratai, labai greitai nukristi. 579 00:35:45,610 --> 00:35:50,860 Tai tinkamas būdas rašyti šią alternatyvią deklaraciją pagrindinis 580 00:35:50,860 --> 00:35:54,740 nes paaiškėja, kad tai, ką mes nuolat ragina eilutę iš tikrųjų turi žvaigždę, 581 00:35:54,740 --> 00:35:58,440 žvaigždutė, jo faktinis apibrėžimą, bet tai tik atrodo sudėtingas, 582 00:35:58,440 --> 00:36:02,600 tai painu iš pradžių, todėl mes supaprastinti tiesiog sukurti dvasia sinonimas 583 00:36:02,600 --> 00:36:09,340 CS50 bibliotekoje, kad žemėlapiai char * šiuo atveju daugiau patogią žodžio eilutę. 584 00:36:09,340 --> 00:36:13,180 >> Todėl galime iš tikrųjų bando tai tada. Leiskite man eiti į priekį ir atverti gedit čia. 585 00:36:13,180 --> 00:36:17,010 Leiskite man eiti į priekį ir atidaryti argv iš 1. 586 00:36:17,010 --> 00:36:21,620 Matyt Ši programa spausdina argumentus, bet ir anglų kalba, 587 00:36:21,620 --> 00:36:26,290 žiūri šį kodą, ką tai daryti konkrečiau? 588 00:36:26,290 --> 00:36:35,910 Jei aš tipo į komandų a.out foo bar, kas bus atspausdintas mano juoda ir balta lange? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, "Enter". 590 00:36:43,120 --> 00:36:48,300 Eiti į priekį. Taip. >> [Nesigirdi studentas atsakas] 591 00:36:48,300 --> 00:36:52,730 Geras. Taigi a.out, nauja linija, foo naują eilutę, baras, nauja linija. 592 00:36:52,730 --> 00:36:54,980 Kodėl taip yra? Mes tikrai gali patvirtinti tik akimirką. 593 00:36:54,980 --> 00:36:56,940 Tai yra rūšies purus eilutę kodo. 594 00:36:56,940 --> 00:36:59,560  Jis tiesiog spausdina naują eilutę tik, kad viskas gražiau ekrane. 595 00:36:59,560 --> 00:37:03,730 Tai yra kilpa, kad manimi iteravimu nuo 0 iki argc, 596 00:37:03,730 --> 00:37:07,210 ir tai yra pokyčio kiekvienos iteracijos + +. 597 00:37:07,210 --> 00:37:12,270 Todėl tai dabar sako, spausdinti eilutę, kaip teigiama šio% s. 598 00:37:12,270 --> 00:37:16,460 Argv [i] yra gana daug pati idėja iš ankstesniame pavyzdyje. 599 00:37:16,460 --> 00:37:19,580 Mes naudojamas paskambinti kintamojo s, dabar jis vadinamas, savavališkai, argv. 600 00:37:19,580 --> 00:37:24,270 Tai reiškia, spausdinti ith argumentą, kad įvedėte į komandų eilutę, 601 00:37:24,270 --> 00:37:28,690 ir po tai visa tai daroma, tiesiog gera priemonė spausdinti kitą naują eilutę. 602 00:37:28,690 --> 00:37:31,600 >> Taigi pažiūrėkime tai. Leiskite man atverti terminalo langą. 603 00:37:31,600 --> 00:37:37,470 Leiskite man sudaryti argv 1, o dabar leiskite man paleisti argv iš 1, Enter. Hmm. Gerai. 604 00:37:37,470 --> 00:37:40,850 Leiskite paleisti foo juostą. Įdomu. Baz. 605 00:37:40,850 --> 00:37:42,640 Ir jei jūs kada nors susimąstėte, kodėl aš tipo tai, 606 00:37:42,640 --> 00:37:45,010 tai tik taip pat kvailas kompiuterių mokslas konvencija. 607 00:37:45,010 --> 00:37:48,050 Pasaulis dažnai turi tik žodines rezervuotų žodžių. 608 00:37:48,050 --> 00:37:50,090 Taigi, jei norite kalbėti apie kai generinių vaistų eilutę, 609 00:37:50,090 --> 00:37:53,250 kompiuterių mokslininkai tiesiog linkę pasakyti, foo, kada jie turi atsitiktinį žodį, 610 00:37:53,250 --> 00:37:55,530 tada jie sako juostą, jei jie turi antrą atsitiktinį žodį, 611 00:37:55,530 --> 00:37:59,100 tada jie sako baz, jei jie turi 1/3 žodį, tada jie sako qux jei jie reikia ketvirtą žodį, 612 00:37:59,100 --> 00:38:01,520 ir ten didžiulis religinis diskusijos internete, kas ateina po qux 613 00:38:01,520 --> 00:38:04,940 todėl jūs galite "Google", kad išsiaiškinti, kas kitas savavališkai žodis turėtų būti. 614 00:38:04,940 --> 00:38:07,480 Bet visa tai neturi reikšmės kokia, 615 00:38:07,480 --> 00:38:10,100 nors foo bar, jei jums "Google", kad tai turi prasmę, 616 00:38:10,100 --> 00:38:12,780 etimologija ia dalis. 617 00:38:12,780 --> 00:38:17,550 >> Taigi, visi tai daro tada spausdina 1 šių kiekvienoje eilutėje stygos. 618 00:38:17,550 --> 00:38:19,900 Taigi, jei aš vietoj, nors norėjo gauti šiek tiek mėgėjas, 619 00:38:19,900 --> 00:38:22,550 tarkime, kad aš nenorėjau spausdinti kiekvieną eilutę vieną eilutę; 620 00:38:22,550 --> 00:38:26,220 Aš norėjau spausdinti visus simbolius iš kiekvieno kiekvienoje eilutėje eilutę. 621 00:38:26,220 --> 00:38:28,550 Kaip aš galėjau vietoj tai padaryti? 622 00:38:28,550 --> 00:38:33,720 Ką reikia pakeisti apie šią programą, jei aš noriu spausdinti ne kiekvieną žodį 623 00:38:33,720 --> 00:38:37,290 bet aš noriu spausdinti kiekvieno žodžio raidę laišku, 624 00:38:37,290 --> 00:38:40,590 tada kitas žodis raštas laišku? 625 00:38:40,590 --> 00:38:43,650 Kaip mes sujungti šias idėjas iki šiol? Taip. 626 00:38:43,650 --> 00:38:47,390 [Studentas]% c. >> Gerai. Taigi, mes kažkur reikia% c. 627 00:38:47,390 --> 00:38:50,680 Gerai, nes aš nenoriu spausdinti visus eilutes, noriu spausdinti simbolių. Ką dar? 628 00:38:50,680 --> 00:38:54,290 >> [Nesigirdi studentas atsakas] >> Įdomios 629 00:38:54,290 --> 00:38:56,860 Taigi mums reikia rūšiuoti antrojo aspekto čia dabar 630 00:38:56,860 --> 00:39:02,300 argv kaip masyvo, nes manote, bet tai eilučių masyvas. 631 00:39:02,300 --> 00:39:07,170 Tačiau, kaip, pavyzdžiui, prieš 15 minučių, kas eilutė? Tai simbolių masyvas. 632 00:39:07,170 --> 00:39:12,320 Taigi tikrai, argv simbolių masyvo masyvas 633 00:39:12,320 --> 00:39:14,870 matricos simbolių masyvas. 634 00:39:14,870 --> 00:39:19,170 Taigi paaiškėja, kad mes galime naudoti tik daugiau kvadratinių laikiklis žymėjimai. Todėl galime tai padaryti. 635 00:39:19,170 --> 00:39:23,650 Šio on line 19 linijos viršuje, aš ruošiuosi kartoti nuo I iki argc, 636 00:39:23,650 --> 00:39:25,760 bet tada aš ruošiuosi tai padaryti: 637 00:39:25,760 --> 00:39:27,580 už - aš negaliu naudoti, aš dabar. 638 00:39:27,580 --> 00:39:30,300 Aš dar vieną kintamąjį, nes noriu pakartoti tuos žodžius, 639 00:39:30,300 --> 00:39:32,640 , bet tada taip pat per žodžių raidėmis 640 00:39:32,640 --> 00:39:37,280 kad aš tarsi turi vertikalią ašį ir horizontalią ašį, Rūšiuoti konceptualiai. 641 00:39:37,280 --> 00:39:43,930 Taigi int j gauna 0, tada aš noriu padaryti, taip ilgai, kaip j mažiau nei j - ir aš valyti tai šiek tiek vėliau. 642 00:39:43,930 --> 00:39:48,410 Kaip aš galiu pakartoti per raidėmis eilutę? Mes padarėme tai metu senumo. 643 00:39:48,410 --> 00:39:54,670 Strlen argv [i]. Geras. 644 00:39:54,670 --> 00:39:57,860 Ir vėl, aš šiek tiek neefektyvumą čia ne kurti n ar kas, 645 00:39:57,860 --> 00:39:59,610 bet mes grįžti prie to. 646 00:39:59,610 --> 00:40:03,270 >> Taigi dabar, j + +. Dabar turiu įtrauka dar čia. 647 00:40:03,270 --> 00:40:06,950 Ką man dabar norite spausdinti ant kiekvienos iteracijos? 648 00:40:06,950 --> 00:40:09,720 [Nesigirdi studentas atsakas] >> Taigi [i] duos man žodį. 649 00:40:09,720 --> 00:40:12,910 [I] [j], tarsi matricą. 650 00:40:12,910 --> 00:40:14,810 Tie iš jūsų, su matematikos y sluoksnių, 651 00:40:14,810 --> 00:40:19,340 mes tarsi indeksavimo dar giliau į šią matricą ar šis masyvas masyvai, 652 00:40:19,340 --> 00:40:21,380 Tai 2-jų dimensijų struktūrą. 653 00:40:21,380 --> 00:40:25,070 Taigi, dabar galime pamatyti, kas vyksta čia. Leiskite man atverti savo didesnę terminalo langą. 654 00:40:25,070 --> 00:40:28,170 Leiskite man pakartotas kad argv iš 1. 655 00:40:28,170 --> 00:40:33,090 Ir aš įsukus čia, o tai yra gera pamoka, nes aš taip pat pamiršo tai padaryti. 656 00:40:33,090 --> 00:40:37,150 Netiesiogiai skelbiantis C bibliotekos funkcija "strlen 'tipo" unsigned 657 00:40:37,150 --> 00:40:40,360 Aš net žinoti, ką Šiomis priemonėmis poilsio, bet aš mačiau tai anksčiau, 658 00:40:40,360 --> 00:40:42,000 netiesiogiai skelbiantis. 659 00:40:42,000 --> 00:40:45,540 , Kai mes matome šią klaidą, ką tai paprastai reiškia? 660 00:40:45,540 --> 00:40:48,520 >> [Nesigirdi studentas atsakas] >> Aš pamiršau biblioteką iki viršaus. Bet palaukit minutėlę. 661 00:40:48,520 --> 00:40:51,690 Paprastai aš prisukamas, nes aš pamiršau CS50 biblioteką, tačiau tai yra. 662 00:40:51,690 --> 00:40:54,480 Paprastai aš įsukus nes Aš pamiršau standartinį I / O. 663 00:40:54,480 --> 00:40:57,960 Ir, tiesą sakant, aš net ne to reikia. Mes ne naudojant GetString šiandien. 664 00:40:57,960 --> 00:40:59,900 Taigi, ką aš nematomas? 665 00:40:59,900 --> 00:41:04,860 Yra ir kita biblioteka, kad dabar mes turime naudoti retkarčiais, pavadintą string.h, 666 00:41:04,860 --> 00:41:08,980 ir tai tik dar vienas biblioteka, kuri turi daugiau funkcijų, kurių nėra standartinio I / O. 667 00:41:08,980 --> 00:41:11,640 >> Taigi, grįžkime mano didelis terminalo lange. 668 00:41:11,640 --> 00:41:16,670 Gerai. Dabar, po velnių, aš manau, aš klydau. Aš naudoju CS50 biblioteką. 669 00:41:16,670 --> 00:41:18,460 Taigi, mes galime išspręsti šią problemą vienu iš 2 būdų. 670 00:41:18,460 --> 00:41:21,510 Mes galime imtis mokymo ratus dabar ir tiesiog daryti tai, 671 00:41:21,510 --> 00:41:26,600 arba tegul rūšies supaprastinti laikyti, kad tik dabar, nukopijuokite šį atgal į, 672 00:41:26,600 --> 00:41:30,180 išspręsti šią problemą, ir dabar grįžti į terminalo langą. 673 00:41:30,180 --> 00:41:33,080 Taigi, viskas būtų aišku, į CS50 bibliotekoje yra ne tik funkcijas, 674 00:41:33,080 --> 00:41:36,920 jis taip pat raktažodį eilutę, kuris yra, kodėl ta klaida tiesiog atsitiko. 675 00:41:36,920 --> 00:41:43,010 >> Taigi čia mes einame. I fixed bibliotekų klausimais. Įveskite. Geras. 676 00:41:43,010 --> 00:41:49,250 Argv 1, foo bar, "Enter". Puikus. 677 00:41:49,250 --> 00:41:52,830 Taigi dabar mes turime kiekvieną 1 už linijos spausdinta kiekvieno žodžio raidę 678 00:41:52,830 --> 00:41:55,290 nereiškia, kad labai įdomi programa, 679 00:41:55,290 --> 00:41:59,350 bet pranešimas dabar mes turime ne tik iteravimu ant žodžio galimybes 680 00:41:59,350 --> 00:42:04,090 bet ir per atskirų žodžių raidžių, kuris skamba siaubingai susipažinę 681 00:42:04,090 --> 00:42:10,330 net paprasčiausių programų, tokių kaip stengiamasi raidėmis, kaip šiuo eilutę. 682 00:42:10,330 --> 00:42:12,410 Eikime į priekį ir imtis mūsų 5-minučių pertrauką. 683 00:42:12,410 --> 00:42:14,410 Ir kai mes einame atgal, mes pradėsime kalbėti apie efektyvumą 684 00:42:14,410 --> 00:42:17,670 su kuria mes galime padaryti šiuos dalykus geriau. 685 00:42:19,370 --> 00:42:21,900 >> Gerai. Mes atgal. 686 00:42:21,900 --> 00:42:26,970 Dėka vieno iš mūsų TFS, kurie vaidina daug bananagrams 687 00:42:26,970 --> 00:42:30,000 mes iš tikrųjų turime visa krūva simbolių pas mus čia šiandien 688 00:42:30,000 --> 00:42:32,520 fiziškai įsikūnijo su šių mažai plastikinių detalių, 689 00:42:32,520 --> 00:42:36,910 ir leiskite man pasiūlyti, kad šis tuščią baltą šiferis čia atstovauja mano kompiuteryje RAM - 690 00:42:36,910 --> 00:42:39,790 nešiojamas, darbastalio, nesvarbu - ir išvaizda jo daug 691 00:42:39,790 --> 00:42:44,090 nes jei mes pradėsime Siekanina šį RAM į mažus baitų dydžio gabalėliais, 692 00:42:44,090 --> 00:42:48,970 tegul savavališkai sako, kad kažkas, kad dydis ir kad neryškus atstovauja - 693 00:42:48,970 --> 00:42:52,430 čia mes einame, ir tegul nutolinti šiek tiek čia - 694 00:42:52,430 --> 00:42:56,120 tarkime, kažką, kad dydis sudaro vieną baitą. 695 00:42:56,120 --> 00:43:00,400 Taigi, mes galime iš tikrųjų tilptų visa krūva baitais arba simbolių viduje šio atminties, 696 00:43:00,400 --> 00:43:02,860 kaip siūloma čia santykinio dydžio. 697 00:43:02,860 --> 00:43:06,780 >> Taigi, tarkime, dabar, kad tikslas yra paskirstyti atmintį eilutę. 698 00:43:06,780 --> 00:43:08,680 Kaip tai faktiškai dirba? 699 00:43:08,680 --> 00:43:11,380 Programas, mes buvo raštu, mes paprastai naudoju GetString 700 00:43:11,380 --> 00:43:16,300 bet dabar, aiškiai, tai kitas kanalas, per kurią mes galime gauti vartotojo įvesties argv 701 00:43:16,300 --> 00:43:18,190 per komandinės eilutės argumentai. 702 00:43:18,190 --> 00:43:20,580 Bet tai, kas iš tikrųjų vyksta po kapotu? 703 00:43:20,580 --> 00:43:24,920 Pasirodo, jei mes vadiname - tegul pereikite atgal į GetString - funkcija GetString 704 00:43:24,920 --> 00:43:28,190 į CS50 bibliotekos, vartotojas paskatino eilutę, 705 00:43:28,190 --> 00:43:30,780 vartotojas įveda kai kuriose žodžio - tegul bus HELLO. 706 00:43:30,780 --> 00:43:35,410 Ir mes per pastaruosius keletą savaičių buvo sakydamas, kad grįžti vertė GetString 707 00:43:35,410 --> 00:43:37,750 iš tiesų yra eilutė, kaip žodžio HELLO. 708 00:43:37,750 --> 00:43:39,660 >> Bet kas yra GetString tikrai daro? 709 00:43:39,660 --> 00:43:45,230 Kaip vartotojas Sveiki, Įveskite tipų, GetString yra suprasti, 710 00:43:45,230 --> 00:43:47,930 gerai, kiek simbolių yra? Tai H E L-L-O. 711 00:43:47,930 --> 00:43:52,500 Todėl ji turi skirti, ji turi paprašyti Operacinė sistema - Linux šiuo atveju - 712 00:43:52,500 --> 00:43:55,410 laikyti ne mažiau kaip 5 baitų HELLO. 713 00:43:55,410 --> 00:43:59,570 Ir ką ji tada pajamos daryti, kai jis gauna atgal tuos 5 baitų iš operacinės sistemos 714 00:43:59,570 --> 00:44:04,120 yra išdėstyti HELLO atgal atgal atgal atgal. 715 00:44:04,120 --> 00:44:11,070 Ir taip, kas iš tikrųjų grįžo iš GetString duomenų riekė, kad atrodo taip. 716 00:44:11,070 --> 00:44:16,850 Bet tai yra šiek tiek netikslios, nes paaiškėja, kad tai nėra taip paprasta, 717 00:44:16,850 --> 00:44:20,310 kaip tik saugoti,, labas "kompiuterio atminties 718 00:44:20,310 --> 00:44:24,140 nes tarkime, kad mano programa, kad aš rašau, C, tada ragina GetString vėl, 719 00:44:24,140 --> 00:44:28,210 ir kitas žodis vartotojas įveda į Bye, bye. 720 00:44:28,210 --> 00:44:31,300 Na, man reikia, kad tilptų kad žodis bye kažkur atmintyje. 721 00:44:31,300 --> 00:44:33,790 Aš negaliu Clobber HELLO. 722 00:44:33,790 --> 00:44:37,320 Pavyzdžiui, aš nenoriu, kad kompiuteris tiesiog pradėkite perrašyti, kaip tai 723 00:44:37,320 --> 00:44:41,400 originalus žodis, nes aš vis dar gali būti naudojant žodį HELLO kintamasis 724 00:44:41,400 --> 00:44:43,070 kažkur mano programa. 725 00:44:43,070 --> 00:44:45,900 >> Taigi B-Y-E, kad galų gale kažkur kitur atmintyje. 726 00:44:45,900 --> 00:44:50,460 Tačiau konvencija paprastai yra tai, kad kitą eilutę, jums skirti 727 00:44:50,460 --> 00:44:54,940 tikriausiai, bet ne visada, yra ketina baigti kitą atminties vietą. 728 00:44:54,940 --> 00:44:57,370 Ir jei aš ne prašė operacinę sistemą už bet kokią atminties 729 00:44:57,370 --> 00:45:01,380 , nes paskutinį kartą aš vadinamas GetString, šansai yra žodis BYE 730 00:45:01,380 --> 00:45:05,790 ketina baigti iš karto po žodžio Hello in atminties. 731 00:45:05,790 --> 00:45:10,550 Bet šiuo metu galite galbūt kai potenciali problema. 732 00:45:10,550 --> 00:45:13,310 Nes kitą gabaliukus kitą baitų atminties, kad buvo tik nemokamai - 733 00:45:13,310 --> 00:45:18,230 švaraus balto šiferis - kompiuterio atmintyje buvo šalia HELLO, 734 00:45:18,230 --> 00:45:23,670 jis jaučiasi pirmą eilutę, aš paprašiau gali staiga pakeisti 735 00:45:23,670 --> 00:45:26,410 nes aš iš esmės pasikeitė, kad ji HELLOBYE 736 00:45:26,410 --> 00:45:31,310 vietoj kažkaip demarcing Bye pradžią ir pabaigą "Hello. 737 00:45:31,310 --> 00:45:33,920 >> Taigi paaiškėja, kad tai, kas iš tiesų vyksta po gaubtu, 738 00:45:33,920 --> 00:45:37,570 , kurį galėjo prabėgomis interneto nuorodas arba skyrių arba knygų 739 00:45:37,570 --> 00:45:41,780 ar ne tik dar yra tai, kad iš tikrųjų sąmoningai demarkavimas 740 00:45:41,780 --> 00:45:45,890 tarp žodžių kompiuterio atmintyje. 741 00:45:45,890 --> 00:45:52,480 Ir iš tikrųjų, šiuo atveju čia, o ne tiesiog įdėti bye šalia HELLO, 742 00:45:52,480 --> 00:45:58,610 vietoj to, kad kompiuteris kelia ypatingą pobūdį, ypatingą null simbolių, taip sakant, 743 00:45:58,610 --> 00:46:03,050 , kuriai atstovauja įžambiu kairiniu brūkšniu 0 rodiklis. 744 00:46:03,050 --> 00:46:06,700 Taigi, ilga istorija trumpa, priminti, kad ženklai yra atstovaujama ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII yra tik kartografavimo tarp skaičių ir raidžių, 746 00:46:09,680 --> 00:46:13,870 ir dauguma iš šių laiškų pradėti maždaug 65 sostinę, 747 00:46:13,870 --> 00:46:19,780 tačiau paaiškėja, tu tikrai gali atstovauti sveikasis skaičius 0 arba dvejetainiu, 748 00:46:19,780 --> 00:46:22,690 ir paaiškėja, pasaulis nusprendė seniai, seniai: "Jūs žinote, ką?" 749 00:46:22,690 --> 00:46:27,550 "Leiskite atsargų skaičius 0 neatstovauja jokių simbolius klaviatūroje - 750 00:46:27,550 --> 00:46:30,810 "Ne raidės, ne skaičiai, ne skyrybos. 0 yra ypatingas." 751 00:46:30,810 --> 00:46:35,830 "Tai bus ypatingas null charakteris, ir mes ketiname rašyti jį kaip \ 0". 752 00:46:35,830 --> 00:46:41,170 Skirtumas yra, jei mes tiesiog parašė 0, 0 yra simbolis. 753 00:46:41,170 --> 00:46:45,700 Prisiminkite, kad yra ASCII kodai 0, 1, 2, 3 754 00:46:45,700 --> 00:46:50,570 nes simbolis 0 skiriasi nuo skaičių 0. 755 00:46:50,570 --> 00:46:54,270 Ir jūs galite pamatyti, kad jei pažvelgti atgal 1 savaitę, kai mes pirmą kartą kalbėjo apie ASCII, 756 00:46:54,270 --> 00:46:59,130 0 ir 1 ir 2 ir 3 visą kelią iki 9 turėjo savo ASCII kodus. 757 00:46:59,130 --> 00:47:02,300 Jie ne atsitiktinai, nuo 0 iki 9. Jie yra labai skirtingi. 758 00:47:02,300 --> 00:47:08,770 Taigi 0 tiesiog reiškia "Aš esu ypatinga" ir \ 0 reiškia, pažodžiui, "Aš nesu 0 charakteris". 759 00:47:08,770 --> 00:47:11,360 "Aš tai ypatingą vertę, null simbolis". 760 00:47:11,360 --> 00:47:16,930 Todėl aš iš tikrųjų reikia dar vienas iš jų, nes aš negaliu padaryti tą pačią klaidą du kartus. 761 00:47:16,930 --> 00:47:21,550 >> Taigi po žodžio bye, mes taip pat ketiname reikia dar vieną šių null simbolių. 762 00:47:21,550 --> 00:47:27,090 Leiskite man paimti mano rašiklį čia ir leiskite man greitai atkreipti kitą \ 0 763 00:47:27,090 --> 00:47:30,480 taip, kad po to, kai aš paprašiau operacinę sistemą 2 stygos 764 00:47:30,480 --> 00:47:33,270 per GetString kitą skambutį GetString, 765 00:47:33,270 --> 00:47:35,640 tai, kas iš tikrųjų atmintyje. 766 00:47:35,640 --> 00:47:39,900 Taigi, kai aš grįšiu eilutę, aš tikrai gauti atgal, kad, 767 00:47:39,900 --> 00:47:43,450 ir kada aš gausiu kitą eilutę, aš tikrai gauti atgal, kad. 768 00:47:43,450 --> 00:47:47,910 Taigi tai kyla klausimas, strlen, visų pirma, koks jis turėtų grįžti? 769 00:47:47,910 --> 00:47:54,650 Kai aš vadinu strlen eilutė ir žodis HELLO, kad vartotojas turi įvesti, 770 00:47:54,650 --> 00:47:57,800 ką mes akivaizdžiai sako, "Hello ilgis buvo prieš kelias minutes? 771 00:47:57,800 --> 00:48:01,290 Tai buvo 5, tiesa? H E L-L-O. Ir tai tikrai kaip strlen darbai. 772 00:48:01,290 --> 00:48:05,670 Ji grąžina, ką normalus žmogus būtų galima tikėtis, eilutės ilgis. 773 00:48:05,670 --> 00:48:11,030 Bet iš tikrųjų, kaip didelis ženklų, kad saugoti Apie masyvas? 774 00:48:11,030 --> 00:48:12,770 Tai tikrai 6. 775 00:48:12,770 --> 00:48:15,740 Taigi strlen nemini, kad tai jums. 776 00:48:15,740 --> 00:48:20,300 Bet po gaubtu kompiuteris iš tiesų yra 6 baitų saugoti 5-raidžių žodį, 777 00:48:20,300 --> 00:48:22,380 ir tai yra tiesa, nesvarbu, kiek laiko žodis. 778 00:48:22,380 --> 00:48:26,470 Ten visada bus ypatingas null pabaigos simbolis eilutės pabaigos 779 00:48:26,470 --> 00:48:28,800 savo bendras ilgis demarc. 780 00:48:28,800 --> 00:48:33,430 >> Taip, tada, jei esate asmuo įgyvendinimo strlen 20, prieš 30 metų, 781 00:48:33,430 --> 00:48:35,520 kaip tu apie įgyvendinimo strlen save? 782 00:48:35,520 --> 00:48:39,980 Mes priimame kaip savaime, kad jis egzistuoja, kaip mes priimame kaip savaime suprantamu dalyku, kad printf egzistuoja, 783 00:48:39,980 --> 00:48:42,850 bet jei HELLO ar toks žodis 784 00:48:42,850 --> 00:48:45,220 ir ką aš turiu atmintyje yra kažkas, kad atrodo taip, 785 00:48:45,220 --> 00:48:48,130 jei Jums teko reimplement strlen, nes jums buvo paprašyta 786 00:48:48,130 --> 00:48:50,260 arba todėl, kad, tiesą sakant, tu nežino, strlen egzistavo - 787 00:48:50,260 --> 00:48:54,280 jums teko roll šį vieną į savo - kaip tai galima įgyvendinti strlen 788 00:48:54,280 --> 00:48:57,760 kai kažką, kad atrodo taip? 789 00:48:57,760 --> 00:49:02,750 Dabar, mes žinome, eilutė yra masyvas, mes galime kartoti per kiekvieną iš atskirų simbolių 790 00:49:02,750 --> 00:49:06,320 naudojant kažką panašaus į - tegul manimi pabandyti tai padaryti skristi. 791 00:49:06,320 --> 00:49:12,060 >> Leiskite man eiti į skalbyklę. Leiskite man sukurti naują failą, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Leiskite man eiti į priekį dabar, o apima stdio.h kad mes turime prieigą prie printf. 793 00:49:19,260 --> 00:49:25,820 Leiskite man padaryti int main (void). Oh. Aš tiesiog tai padaryti savo dabar. [Chuckles] 794 00:49:25,820 --> 00:49:28,300 Ačiū. 795 00:49:28,300 --> 00:49:31,000 Tai, ką aš darau. Gerai. 796 00:49:31,000 --> 00:49:34,820 Taigi, kol aš pasuko ekrane, aš įvedėte visa tai. 797 00:49:34,820 --> 00:49:37,550 Ir dabar, ką aš ruošiuosi daryti yra tokia: 798 00:49:37,550 --> 00:49:40,360 printf ("Duok man eilutę:") 799 00:49:40,360 --> 00:49:42,700 Tai tiesiog pūkuotas instrukcijos. 800 00:49:42,700 --> 00:49:45,700 Dabar leiskite man padaryti Styginių s = GetString. 801 00:49:45,700 --> 00:49:47,260 Aš jau reikia dabar padaryti pakeitimą. 802 00:49:47,260 --> 00:49:52,740 Aš naudoju CS50 biblioteką staiga, todėl leiskite man eiti į priekį ir įvesti cs50.h. 803 00:49:52,740 --> 00:50:00,720 Ir dabar galime tai padaryti: printf ("ilgis:% d, strlen [S] - 804 00:50:00,720 --> 00:50:03,540 ir aš dar ne viskas. Ką dar turiu įtraukti į šią programą? 805 00:50:03,540 --> 00:50:05,740 >> [Studentas] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Taigi dabar mes naudojame strlen, tad įsitikinkite, kad kompiliatorius žino, jei tai, 807 00:50:10,800 --> 00:50:12,390 todėl šiek tiek normalumas patikrinti. 808 00:50:12,390 --> 00:50:16,400 Gaunu linija 8 eilutę, ir atsižvelgiant į 9, aš spausdinti savo ilgio su% d. 809 00:50:16,400 --> 00:50:19,400 Taigi eikime į priekį ir atidaryti tai padaryti. 810 00:50:19,400 --> 00:50:23,380 Mes strlen - kaupia gerai - 811 00:50:23,380 --> 00:50:30,120 strlen - leiskite man padidinti - Enter, H-E-L-L-O, "Enter". Ilgis yra 5. 812 00:50:30,120 --> 00:50:32,730 >> Gerai, kad strlen atrodo, kad darbas, bet žinojo, kad pasaulis. 813 00:50:32,730 --> 00:50:37,310 Taigi tegul dabar įgyvendinti strlen save taip. 814 00:50:37,310 --> 00:50:39,490 Leiskite man pasinaudoti šia biblioteka toli. 815 00:50:39,490 --> 00:50:42,590 Mes jau nebeturi prieigą prie string.h, nes aš net nežinau, ji egzistavo. 816 00:50:42,590 --> 00:50:45,970 Bet tai gerai, nes aš galiu įgyvendinti strlen save 817 00:50:45,970 --> 00:50:50,200 ir jį įvesties eilutę, vadinamą 818 00:50:50,200 --> 00:50:53,830 ir dabar man reikia išsiaiškinti šios eilutės ilgį. 819 00:50:53,830 --> 00:50:55,880 Taigi, kaip aš galiu tai padaryti? 820 00:50:55,880 --> 00:51:00,190 Ką daryti, jei aš - pažiūrėkime, kaip tai padaryti - Ką jūs norite daryti? 821 00:51:00,190 --> 00:51:04,130 >> [Nesigirdi studentas atsakas] >> Gerai. 822 00:51:04,130 --> 00:51:05,970 Taigi, mes galime tai padaryti įvairiais būdais krūva. Leiskite man pabandyti šio požiūrio. 823 00:51:05,970 --> 00:51:10,220 Leiskite man duoti sau yra int kintamasis i, kad aš prasideda 0. 824 00:51:10,220 --> 00:51:19,380 Ir leiskite man pasakyti štai ką: o įvesties [i] nėra lygus į tai, ką? \ 0 825 00:51:19,380 --> 00:51:23,480 Taigi, it turns out, kaip ir su visais simboliais Rengdama juos tiesiog programoje, 826 00:51:23,480 --> 00:51:25,940 turite naudoti kabutes, o ne dvigubų kabučių. 827 00:51:25,940 --> 00:51:29,250 Taigi, jei aš buvo raštu raidė a, aš norėčiau padaryti, kad B raide, aš norėčiau tai padaryti. 828 00:51:29,250 --> 00:51:33,440 Ši, priešingai, būtų eilutę, o ne individualių savybių. 829 00:51:33,440 --> 00:51:38,470 >> Taigi aš noriu \ 0 pažodžiui. Ką aš noriu daryti šio ciklo? 830 00:51:38,470 --> 00:51:42,650 Tiesą sakant, man reikia kitą kintamąjį, todėl int ilgis gauna 0. 831 00:51:42,650 --> 00:51:46,190 Net jei jūs nežinote, kodėl mes pradėjome taip, kaip mes padarėme, 832 00:51:46,190 --> 00:51:50,110 dabar, kad mes ketiname žengti šiuo keliu, ką aš noriu padaryti, 9 on-line? 833 00:51:50,110 --> 00:51:55,820 ilgis + + ir tada žemyn čia on line 10 ", grįžti ilgio. 834 00:51:55,820 --> 00:51:58,370 Taigi, kaip strlen įgyvendintas? 835 00:51:58,370 --> 00:52:00,550 Tai tikriausiai, kaip tai iš tikrųjų įgyvendinti. 836 00:52:00,550 --> 00:52:03,470 Gal asmens naudojamas už linijos, o gal ir do while cikle - kas žino? 837 00:52:03,470 --> 00:52:05,940 Mes norime iš tikrųjų turi atrodyti po gaubtu šaltinio kodą 838 00:52:05,940 --> 00:52:08,520 kai kurie failų vadinamas string.c tikriausiai. 839 00:52:08,520 --> 00:52:10,480 >> Bet čia galime galvoti apie tai, ką aš darau. 840 00:52:10,480 --> 00:52:13,640 Aš skelbiantis kintamasis vadinamas i, nustato, per kiek laiko ji lygi 0. 841 00:52:13,640 --> 00:52:17,520 Tada aš skelbiantis Kitas kintamasis vadinamas ilgis, nustato, per kiek laiko ji lygi 0. 842 00:52:17,520 --> 00:52:25,440 Tada aš sakau, o-osios veikėjas įvesties į ypatingą null pobūdžio, \ 0 nėra lygus, 843 00:52:25,440 --> 00:52:27,070 prieaugio ilgį. 844 00:52:27,070 --> 00:52:32,550 Bet kuo greičiau osios charakteris yra tai specialus simbolis, kas atsitiks su kilpa? 845 00:52:32,550 --> 00:52:36,540 Jis trumpųjų jungimų. Sustos, kuris reiškia, kad mes tada iš karto grįžti ilgis. 846 00:52:36,540 --> 00:52:40,740 >> Taigi, jei aš ne bałagan, eikime į priekį ir grįžti į mano terminalo lange. 847 00:52:40,740 --> 00:52:43,550 Leiskite man perkompiliuoti. Ir aš susukti. 848 00:52:43,550 --> 00:52:46,320 Nesuderinama pakartotinis aprašas bibliotekų funkcija strlen. 849 00:52:46,320 --> 00:52:48,650 Taigi aš bandžiau gauti per protingas čia mano paties labui. 850 00:52:48,650 --> 00:52:51,610 Kompiliatorius iš tikrųjų žino, kad yra funkcija, vadinama strlen 851 00:52:51,610 --> 00:52:55,290 nors mes ne biblioteką. Tai gerai. Koks skirtumas. 852 00:52:55,290 --> 00:52:58,230 Mes tiesiog ketina bendradarbiauti tada. Leiskite pervadinti šį ilgį. 853 00:52:58,230 --> 00:53:04,110 Leiskite man pakeisti jo naudojimą tam tikro ilgio atkarpomis, čia, ir tai leis Apsukite metalinis garsas laimingesni. 854 00:53:04,110 --> 00:53:08,900 Kaip panaikinti, nes kai kurios iš šių funkcijų yra taip darn bendras 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - jie iš tikrųjų turi rūšiuoti specialų statusą. 856 00:53:12,390 --> 00:53:15,310 Ir taip Apsukite metalinis garsas tiesiog žino apie juos šiek tiek kažką ypatingo. 857 00:53:15,310 --> 00:53:18,760 Tai ne visada su daugeliu funkcijų, todėl tai, kodėl mes turime rėkė. 858 00:53:18,760 --> 00:53:21,350 >> Leiskite man pabandyti dar kartą. Laimei, jis dirbo tą laiką. 859 00:53:21,350 --> 00:53:23,560 Taigi dabar leiskite man paleisti savo strlen programą. 860 00:53:23,560 --> 00:53:29,740 Give me a eilutė: H E L-L-O Įveskite. Ir aš įsukus. 861 00:53:29,740 --> 00:53:34,750 Kodėl? >> [Nesigirdi studentas atsakas] >> Taip. 862 00:53:34,750 --> 00:53:39,180 Taigi, aš turiu save čia labai gražus begalinis ciklas 863 00:53:39,180 --> 00:53:42,270 nes nors aš incrementing ilgį kiekvienos iteracijos, 864 00:53:42,270 --> 00:53:47,860 ką aš aiškiai nedarote? Aš ne i pokyčio. Gerai. Lengva nustatyti. Taip? 865 00:53:47,860 --> 00:53:52,430 Gerai. Nr Dabar mes paleisti susipykus kai kurių kitų dažnai pasitaikanti klaida, kai man reikia skliausteliuose. 866 00:53:52,430 --> 00:53:54,430 Ir, tiesą sakant, šis kodas pradeda atrodyti negraži, 867 00:53:54,430 --> 00:53:56,460 todėl mes imtis Pabandyti išvalius šią akimirką. 868 00:53:56,460 --> 00:53:58,810 Bet dabar aš incrementing tiek ilgio ir aš. 869 00:53:58,810 --> 00:54:02,630 Atvirai kalbant, aš jau matau, galimybė tobulėti, bet mes grįžti į kad. 870 00:54:02,630 --> 00:54:05,270 >> Taigi dabar galime tiesiog įsitikinkite, kad mes bent jau daro pažangą. 871 00:54:05,270 --> 00:54:08,320 Tai nutiko iš jūsų kelias, ir aš nesirūpino paminėti tai iš anksto. 872 00:54:08,320 --> 00:54:12,420 Kai jūs turite kaip šis scenarijus nelaime, kaip jums išspręsti šią problemą 873 00:54:12,420 --> 00:54:15,130 trumpas paleisti įrenginį arba kompiuterį arba uždaryti langą? 874 00:54:15,130 --> 00:54:16,860 Tai tikrai paprasta. 875 00:54:16,860 --> 00:54:21,680 Reguliatorius C atsiųs tai mažai morkų C simbolį, ir kad tik nutraukia dauguma programų. 876 00:54:21,680 --> 00:54:25,990 Jei turite tikrai bloga begalinį ciklą, kad spausdinimo stuff be galo daug kartų, 877 00:54:25,990 --> 00:54:29,960 kartais jums gali tekti paspausti valdymo C tūkstantį kartų, kad ji iš tikrųjų išgirsti. 878 00:54:29,960 --> 00:54:33,910 Taigi, tiesiog suprasti, dabar, nes aš nieko nespausdina, tai buvo gana lengva. 879 00:54:33,910 --> 00:54:37,970 Ir techniškai, jeigu pakanka, bet aš gauti nekantrus ir aš paprastai paspauskite jį, kad daug kartų. 880 00:54:37,970 --> 00:54:43,400 >> Taigi strlen. Duok man eilutę: Hello. Jis ketina dirbti šį kartą? 881 00:54:44,580 --> 00:54:47,490 Gerai. Kita dažnai pasitaikanti klaida. Ar perkompiliuoti. 882 00:54:47,490 --> 00:54:50,430 Tai buvo apgalvotas, kad vienas. Gerai. 883 00:54:50,430 --> 00:54:54,260 Taigi strlen, H-E-L-L-O Enter. Puikus. 884 00:54:54,260 --> 00:54:55,910 Taigi dabar mes turime strlen iki 5. 885 00:54:55,910 --> 00:54:58,100 Taigi mes tiesiog reimplemented tuo ratu. 886 00:54:58,100 --> 00:55:02,080 Taigi dabar galime valyti tai padaryti, nes tai nereiškia, kad man įspūdį 887 00:55:02,080 --> 00:55:04,080 su mano kodas dizainą. 888 00:55:04,080 --> 00:55:07,200 Ką mes galime aiškiai pašalinti šioje programoje valyti tai padaryti? 889 00:55:07,200 --> 00:55:11,840 [Nesigirdi studentas atsakas] >> Taip. Pažodžiui, mes gydant I ir ilgis vienodai. 890 00:55:11,840 --> 00:55:16,440 Tad kodėl gi ne, mes tiesiog gauti protingas ir pasakyti, o ilgis? 891 00:55:16,440 --> 00:55:20,450 Atvirkščiai, tegul tik jį vadiname ilgis pradėti, inicijuoti iki 0 892 00:55:20,450 --> 00:55:23,340 nes pagal nutylėjimą eilutė neturi ilgio, kol mes išsiaiškinti, kas tai yra. 893 00:55:23,340 --> 00:55:26,160 >> Dabar mes tai padaryti, ir dabar tai yra gana elegantiškas programa. 894 00:55:26,160 --> 00:55:28,660 Vienas kintamasis. Aš išvalyti jį, sugriežtino jį. 895 00:55:28,660 --> 00:55:31,980 Taigi dabar grįžkime mano terminalo lange. Eikime į priekį ir paleisti. 896 00:55:31,980 --> 00:55:35,670 Padaryti strlen. Gerai atrodo. Dar kartą paleisti strlen Enter. 897 00:55:35,670 --> 00:55:40,680 Give me a eilutė: Sveiki, Įveskite. Ir atrodo, kad reikia dirbti kaip 5. 898 00:55:40,680 --> 00:55:45,580 Dabar aišku, jeigu aš nebuvo parašyta, pavyzdžiui, HELLO 1 eilutę 899 00:55:45,580 --> 00:55:48,840 BYE kitoje, mes galime tikrai turi kelis žodžius. 900 00:55:48,840 --> 00:55:53,150 Jei išraiška, aš iš tikrųjų norėjo įvesti HELLO, bet, pavyzdžiui, 901 00:55:53,150 --> 00:55:58,920 HELLO PASAULIS, pastaboje (įspėjime), kad tai, ką mes nebūtume čia tokia situacija, tiesa? 902 00:55:58,920 --> 00:56:00,580 , Kad būtų galima teigti, kad 2 stygos. 903 00:56:00,580 --> 00:56:06,060 Jūs tikrai gali turėti Space bar simbolių, todėl, jei mes iš tikrųjų įvestas ilgesnį frazė 904 00:56:06,060 --> 00:56:08,390 kaip Hello World, ką mes tikrai atmintyje 905 00:56:08,390 --> 00:56:12,730 atrodo šiek tiek kažką panašaus, kad. 906 00:56:12,730 --> 00:56:18,910 >> Gerai. Kokių nors klausimų apie atstovavimo čia stygų? 907 00:56:18,910 --> 00:56:20,450 Ar ne? Gerai. 908 00:56:20,450 --> 00:56:25,130 Taigi, aš anksčiau sakė, kad paskambinus strlen vėl ir vėl sąmoningai, kaip kad 909 00:56:25,130 --> 00:56:28,070 tikriausiai nėra geriausia idėja, nes jūs ketinate daryti visai daug darbo 910 00:56:28,070 --> 00:56:30,280 vėl ir vėl ir vėl. 911 00:56:30,280 --> 00:56:36,150 Iš tiesų, kokį darbą yra būtina suprasti, eilutės ilgis, matyt? 912 00:56:36,150 --> 00:56:40,720 Jūs turite pradėti iš pradžių, ir tada ieškoti, ieškoti, ieškoti, ieškoti, ieškoti 913 00:56:40,720 --> 00:56:44,930 kol galiausiai matyti, kad specialų simbolį, o tada, ah, dabar aš žinau, ilgį. 914 00:56:44,930 --> 00:56:48,040 Taigi, anksčiau, kai jau strlen vadinamas vėl ir vėl ir vėl, 915 00:56:48,040 --> 00:56:52,080 priežastis, kodėl aš pasiūlė, kad buvo kind of stupid, nes vėl, kad eilutė atrodo taip. 916 00:56:52,080 --> 00:56:54,880 Jis nesiruošia keisti kaskart pakartoti per kai kilpa, 917 00:56:54,880 --> 00:56:56,890 taip darote nereikalingo darbo. 918 00:56:56,890 --> 00:57:00,620 Tuo pačiu metu, jūs turėtumėte žinoti, kaip panaikinti, kad kaip Apsukite metalinis garsas kompiliatoriai šių dienų 919 00:57:00,620 --> 00:57:02,530 buvo sukurta per daugelį metų, 920 00:57:02,530 --> 00:57:05,690 ir kompiliatorių, rašytojai, programuotojai, yra gana protingas. 921 00:57:05,690 --> 00:57:10,170 Ir taip paaiškėja, kad Apsukite metalinis garsas ir kitos kompiliatorius iš tikrųjų gali išsiaiškinti, kad 922 00:57:10,170 --> 00:57:13,650 gerai, taip, jūs rašė strlen į Jūsų būklę, 923 00:57:13,650 --> 00:57:17,520 , kurie yra techniškai reiškia, kad mes vadiname jį vėl ir vėl ir vėl. 924 00:57:17,520 --> 00:57:21,880 Bet protingas kompiliatorius iš tikrųjų galite optimizuoti šių neturtingų vartotojų sprendimų rūšių 925 00:57:21,880 --> 00:57:23,870 iš savo kodą į žalos atlyginimą dalykų. 926 00:57:23,870 --> 00:57:27,360 >> Taigi, tai tik suvokti, kad kartais kompiliatorius yra protingesni už mus 927 00:57:27,360 --> 00:57:29,210 rūšies slėpti mūsų pačių klaidas. 928 00:57:29,210 --> 00:57:31,620 , Bet tikrai, kai jis ateina į probleminių rinkinių ir, pavyzdžiui, 929 00:57:31,620 --> 00:57:35,340 nereikia galvoti apie tuos esmės klaidingų projektinių sprendimų 930 00:57:35,340 --> 00:57:38,110 galbūt dėl ​​tos paprastos priežasties, kad mes norime daryti būdas daugiau darbo 931 00:57:38,110 --> 00:57:41,330 nei mes iš tikrųjų turi daryti. Bet kiek daugiau darbo? 932 00:57:41,330 --> 00:57:44,960 Hello world, pradėkime apibendrinti šios problemos dydį. 933 00:57:44,960 --> 00:57:48,100 Kas problemos ar problemos dydis, ilgis 934 00:57:48,100 --> 00:57:50,770 kai žodis vartotojas turi įvesti "Hello"? 935 00:57:50,770 --> 00:57:53,790 Tai matyt 5, gal 6. Plius arba minus 1. Koks skirtumas. 936 00:57:53,790 --> 00:57:55,680 Tai taip arti, mes tiesiog vadina jį 5. 937 00:57:55,680 --> 00:58:00,480 >> Taigi, kas yra problemos dydis, bandant išsiaiškinti Hello ilgis? 938 00:58:00,480 --> 00:58:06,790 Tai 1, 2, 3, 4, 5, o gal ir 6 paskutinę pobūdžio, bet galime apibendrinti, kad n. 939 00:58:06,790 --> 00:58:10,300 Taigi, n, tik kintamasis n, tai, ką kompiuterių mokslininkai paprastai naudoja 940 00:58:10,300 --> 00:58:13,890 apibūdinti problemos dydį, ir ši problema po ranka, kiek laiko yra Hello? 941 00:58:13,890 --> 00:58:17,050 Kiek laiko strlen imtis? 942 00:58:17,050 --> 00:58:21,010 Jis tampa n žingsnių siekiant, kur kiekvienas žingsnis reiškia pažvelgti simbolį, 943 00:58:21,010 --> 00:58:23,350 pažvelgti į simbolį, pažvelgti į simbolį. 944 00:58:23,350 --> 00:58:26,850 Ir mes turėjome šią diskusiją, o atgal, kažkas operacijų skaičius užtrunka. 945 00:58:26,850 --> 00:58:29,910 Mes jau pačią pirmą dieną klasėje visi nerangiai atsistoti, 946 00:58:29,910 --> 00:58:32,060 ir tada visi pradėjo Kergimas tarpusavyje 947 00:58:32,060 --> 00:58:35,990 siekiant iš tikrųjų skaičiuoti, idealiai, kiek žmonių į kambarį. 948 00:58:35,990 --> 00:58:39,860 Ir mes taip pat padarė vienas dalykas, pagal kurį, jei aš vietoj senosios mokyklos būdas 949 00:58:39,860 --> 00:58:44,800 tik pradeda 1, 2, 3, 4, 5, 6 ir tt, 950 00:58:44,800 --> 00:58:49,360 kad per daug, šią problemą dydis dydžio n. Nebuvo n žmonių kambaryje. 951 00:58:49,360 --> 00:58:52,010 Bet aš negalėjau greičiu, kad, tiesa? Pradinėje mokykloje stilius gali pradėti skaičiuoti, 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. Ir, kad jaučiasi taip daug greičiau, ir iš tikrųjų yra. 953 00:58:55,560 --> 00:59:01,720 Tai tiesiog du kartus taip greitai, bet dar kartą, jei dar 400 žmonių vaikščiojo į šį kambarį 954 00:59:01,720 --> 00:59:08,250 visi vienu metu, šie algoritmai imsis dar 400, o gal 200 veiksmus. 955 00:59:08,250 --> 00:59:13,310 >> Tačiau priešingai, jei mes tikrai gauti protingas ir mes vietoj turėti visi iš jūsų tikėtis save, 956 00:59:13,310 --> 00:59:15,280 Prisiminkite, kaip dirbo, kad algoritmas. 957 00:59:15,280 --> 00:59:17,110 Jūs visi atsistojo. Leiskite man pirmyn į tai. 958 00:59:17,110 --> 00:59:20,430 Jūs visi atsistojo, jūs suporuotas išjungtas, tada pusė iš jūsų atsisėdo, 959 00:59:20,430 --> 00:59:22,510 pusė iš jūsų atsisėdo, pusė iš jūsų atsisėdo, 960 00:59:22,510 --> 00:59:27,350 ir kiekvieno šią savaitę 0 kilpa iteracijos, mes perpus problemą po ranka 961 00:59:27,350 --> 00:59:30,040 ir išvyko į N / 2, tada N / 4, tada n / 8. 962 00:59:30,040 --> 00:59:35,350 Ir kad implikacija yra ta, kad jei dar 400 žmonės vaikščioti į kambarį, ne big deal, 963 00:59:35,350 --> 00:59:40,120 tai užtruks 1 Daugiau ritinių, o ne 400 daugiau šoviniai, o ne 200 daugiau raundų. 964 00:59:40,120 --> 00:59:43,640 Ir taip turėjo padaryti šiek tiek kažką su istorija, mes papasakojo, o atgal. 965 00:59:43,640 --> 00:59:47,750 Šis raudona linija čia yra tiesinė, tai tiesiai, ir ji apibūdinama kaip n 966 00:59:47,750 --> 00:59:50,250 nes kaip problema dydis auga, 967 00:59:50,250 --> 00:59:54,690 jei jūsų algoritmas ar programa, su kuria jūs spręsti trunka n veiksmus, 968 00:59:54,690 --> 00:59:58,620 mes galime nubraižyti kaip tiesią liniją, kur reikia daugiau laiko didesnis problemos mastą. 969 00:59:58,620 --> 01:00:03,280 Ir twosies požiūris, skaičiuojant 2, 4, 6, 8, dar yra tiesi linija, tik šiek tiek geriau. 970 01:00:03,280 --> 01:00:08,440 Tai užtrunka šiek tiek mažiau laiko, todėl, geltona linija yra žemiau raudona linija taškas taško. 971 01:00:08,440 --> 01:00:12,580 >> Bet dar geriau tai šventasis Gralis ką mes vadinami logaritminis laikas 972 01:00:12,580 --> 01:00:14,830 net jei mes dar kartą padvigubinti skaičių žmonių į kambarį, 973 01:00:14,830 --> 01:00:18,240 mes du kartus, kad telefono knygos dydžio klasės nuo pirmos dienos, 974 01:00:18,240 --> 01:00:22,310 ne big deal, ji užima daugiau 1 puslapio ašarą, trunka 1 daugiau sėdi 975 01:00:22,310 --> 01:00:25,550 siekiant išspręsti problemą, kad du kartus didesnis. 976 01:00:25,550 --> 01:00:27,460 Ir taip pokalbis mes dabar gauti pradėti yra 977 01:00:27,460 --> 01:00:30,380 kaip mes iš tikrųjų spręsti problemas efektyviau 978 01:00:30,380 --> 01:00:32,510 jei mes manome, problemų, pavyzdžiui, paprasčiausias? 979 01:00:32,510 --> 01:00:36,210 Tarkime, turime 8 duris, už kurio yra kai kurie numeriai, 980 01:00:36,210 --> 01:00:39,720 ir kiekvienas iš šių numerių nėra rūšiuojamos, bet kokiu būdu, 981 01:00:39,720 --> 01:00:42,830 jie tiesiog atsitiktiniai sveikieji skaičiai už šių durų, 982 01:00:42,830 --> 01:00:47,290 ir mes užduoti klausimą, kaip jums eiti apie tai, kaip rasti skaičių - kas žino - 983 01:00:47,290 --> 01:00:50,250 7 už šių durų? 984 01:00:50,250 --> 01:00:53,400 Ką jūs, žmogus, atlikite produktais tam kad rasti man su skaičiumi 7 985 01:00:53,400 --> 01:00:56,810 jei vėl kiekvienas iš jų yra durys ir pamatyti reikšmę, jūs turite atidaryti duris? 986 01:00:56,810 --> 01:00:59,650 Koks būtų jūsų algoritmas gal? 987 01:00:59,650 --> 01:01:05,310 >> [Nesigirdi studentas atsakas] >> Taigi pradėkite su kairės ir atidaryti duris, atidaryti duris, atidaryti duris. 988 01:01:05,310 --> 01:01:08,570 Ir blogiausiu atveju, kaip ilgai ji ketina imtis su mumis ir sužinokite, kurios numeris 7? 989 01:01:08,570 --> 01:01:12,800 Ir vėl, jie nėra rūšiuojamos, todėl tai nėra taip paprasta, kaip, gerai, aš ruošiuosi atidaryti 7-ąją duris. 990 01:01:12,800 --> 01:01:15,240 Tai gali užtrukti, maksimaliai, 8 žingsnių. 991 01:01:15,240 --> 01:01:19,940 Blogiausiu atveju, 7 atsitiktinai durų linijos galo, 992 01:01:19,940 --> 01:01:22,090 todėl mes galime turėti išbandyti visus n duris. 993 01:01:22,090 --> 01:01:24,440 Taigi dar kartą čia, mes, atrodo, linijinis algoritmas. 994 01:01:24,440 --> 01:01:27,030 Tiesą sakant, mes tai padarė tik prieš porą metų. 995 01:01:27,030 --> 01:01:29,910 Vienas savo pirmtakų ginčijo būtent ši 996 01:01:29,910 --> 01:01:32,050 kur mes neturėjome skaitmeninę versiją, mes vietoj lentos 997 01:01:32,050 --> 01:01:33,780 su kai kuriais iš popieriaus gabalų. 998 01:01:33,780 --> 01:01:36,940 Ir ką aš maniau aš norėčiau tai padaryti yra priimti greitai pažvelgti atgal, kaip tai buvo nustatyta, 999 01:01:36,940 --> 01:01:40,760 vienas iš geriausių ir galbūt labiausiai nepatogu galimybių scenoje 1000 01:01:40,760 --> 01:01:42,530 demonstravimo čia Sanders. 1001 01:01:42,530 --> 01:01:44,000 Mes turėjome 2 eilučių skaičių. 1002 01:01:44,000 --> 01:01:47,280 Mes tik ketiname pažvelgti į tai, kas vyksta čia su Sean pačiame viršuje iš šių eilučių. 1003 01:01:47,280 --> 01:01:49,660 Jeigu niekas kada nors vėl savanoriai CS50 1004 01:01:49,660 --> 01:01:52,010 mes turėjome Sean palaiminimą, kad taip kamerą, 1005 01:01:52,010 --> 01:01:54,670 , kad jis žino, kad šimtai žmonių buvo žiūrėti šį dabar metus. 1006 01:01:54,670 --> 01:01:59,500 Bet Sean padarė nuostabų darbą - O gal jis - iš tikrųjų Kaip mus rasti tam tikrą skaičių. 1007 01:01:59,500 --> 01:02:04,570 >> Taigi pažiūrėkime, kaip jis išsprendė šią algoritmą taip, kad mes atnaujinti šį pokalbį prieš ilgas 1008 01:02:04,570 --> 01:02:08,300 kaip mes rasti dalykų efektyviai. 1009 01:02:08,300 --> 01:02:12,300 [Malan video] Aš paslėpta už šių durų skaičių 7, 1010 01:02:12,300 --> 01:02:16,710 bet Paslėpti kai kurie iš šių durų, taip pat yra ir kitų ne neigiami skaičiai, 1011 01:02:16,710 --> 01:02:19,980 ir jūsų tikslas yra galvoti apie šį viršutinėje eilutėje skaičių, kaip tik masyvo 1012 01:02:19,980 --> 01:02:22,920 ar tik popieriaus lapų su numeriais, už jų seka, 1013 01:02:22,920 --> 01:02:26,960 ir jūsų tikslas yra naudoti tik viršutinį masyvą čia, man su skaičiumi 7. 1014 01:02:26,960 --> 01:02:30,800 Ir mes tada ketiname aptarti, kaip jums eiti apie tai daro. >> Gerai. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Kaip mus rasti skaičių 7, prašau. 1016 01:02:36,210 --> 01:02:38,350 [Juokas] 1017 01:02:41,610 --> 01:02:44,460 [Malan] Ne [juokas] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [juokas]. Tai nėra triukas klausimas. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Juokas] 1021 01:03:06,910 --> 01:03:10,760 Šiuo metu jūsų rezultatas yra ne labai gerai, todėl jūs galite taip pat nuolat vyksta. [Juokas] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Eiti. Atvirai kalbant, aš negaliu padėti, bet įdomu, ką jūs net galvoti apie. [Juokas] 1024 01:03:25,010 --> 01:03:28,870 Tik viršutinėje eilutėje, todėl jūs turite 3 į kairę. Taigi rasti man 7. 1025 01:03:28,870 --> 01:03:45,360 [Studentai murmantys] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Studentai murmantys] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Plojimai] 1029 01:04:01,550 --> 01:04:06,080 >> Taigi, trečiadienį, mes pasinerti į tai ir dar daugiau sudėtingus algoritmus, rasti dalykų. 1030 01:04:06,080 --> 01:04:10,200 Dabar mes palikti jus su Sean ir trečiadienį. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]