1 00:00:00,000 --> 00:00:02,200 [Powered by Google Translate] [Teden 3] 2 00:00:02,200 --> 00:00:03,950 [David J. Malan - Harvard University] 3 00:00:03,950 --> 00:00:07,140 [To je CS50. - CS50.TV] 4 00:00:07,140 --> 00:00:10,720 Naj nas usmerja v smer, kjer smo končali zadnji čas, 5 00:00:10,720 --> 00:00:13,890 ki je začel razmišljati malo več kot o sintaksi 6 00:00:13,890 --> 00:00:17,150 in poskušam razmišljati nekoliko manj pa vse minucije 7 00:00:17,150 --> 00:00:20,630 da traja nekaj časa, da se prilagodi na doslej v smislu podpičji 8 00:00:20,630 --> 00:00:22,360 in oklepaje in zavite oklepaje, 9 00:00:22,360 --> 00:00:25,630 začeti jemati stvari malo na višjo konceptualni ravni 10 00:00:25,630 --> 00:00:28,800 tako, da so težave sedaj začenjajo problemov v naslednjih nekaj tednih 11 00:00:28,800 --> 00:00:32,340 se bodo nanašale na precej višji ravni v več konceptualnih problemov 12 00:00:32,340 --> 00:00:36,310 in nekoliko manj v skladenjski, ko se vaše noge mokre 13 00:00:36,310 --> 00:00:40,090 in umazane roke z nekaj sintakse od teh zadnjih nekaj tednih. 14 00:00:40,090 --> 00:00:43,690 >> Tako opozarjajo, da je prejšnji teden smo uvedli ta pojem matrike. 15 00:00:43,690 --> 00:00:49,320 In lahko matrika v angleščini opisujejo kot kaj? >> [Neslišno študentski odziv] 16 00:00:49,320 --> 00:00:51,710 Prosim? 17 00:00:51,710 --> 00:00:54,810 Zbirka? >> [Neslišno študentski odziv] >> Dobro, dobro. 18 00:00:54,810 --> 00:00:57,820 Zbirka predmetov. Tako smo videli nize v Scratch. 19 00:00:57,820 --> 00:01:01,880 Če se je zgodilo uporabiti za pset 0 1 seznamov na praske, da lahko povlečete stvari 20 00:01:01,880 --> 00:01:05,410 kot so pomaranče in banan, popis vrst, 21 00:01:05,410 --> 00:01:07,100 To je nekako tako kot tisto, kar je matrika. 22 00:01:07,100 --> 00:01:10,980 In potem bolj tehnično, v okviru dejanskega računalnika, 23 00:01:10,980 --> 00:01:14,730 matrika je preprosto sosednje kos pomnilnika. 24 00:01:14,730 --> 00:01:18,590 Z drugimi besedami, imate bajt, nato pa še bajt, nato pa še bajt, nato pa še bajt, 25 00:01:18,590 --> 00:01:21,330 in če ste bili, da pripravi te bajte v sliki 26 00:01:21,330 --> 00:01:24,510 da bi se vrnil v back to back to back. To je tisto, kar mislimo s stikata. 27 00:01:24,510 --> 00:01:26,690 >> Tako je bajt številka 1, nato 2, nato 3. 28 00:01:26,690 --> 00:01:29,680 To ne pomeni, da se tukaj, tukaj, tukaj, tukaj. 29 00:01:29,680 --> 00:01:33,800 Matrika je stikata kos 0 ali več bajtov. 30 00:01:33,800 --> 00:01:36,160 Torej, kaj so sploh uporabna? 31 00:01:36,160 --> 00:01:40,090 Recall smo imeli to vrsto izmišljene primer shranjevanje ljudi kviz razredih v programu 32 00:01:40,090 --> 00:01:42,580 , za izračun povprečja kviz za nekatere seveda, 33 00:01:42,580 --> 00:01:46,780 in opozarjajo, da bi lahko začeli pisati, da je program, ki ga razglasi spremenljivo quiz1. 34 00:01:46,780 --> 00:01:49,550 Potem bi lahko še eno spremenljivko, imenovano quiz2. 35 00:01:49,550 --> 00:01:52,030 Ampak potem, če bi bilo 3 kvizi v tem razredu, quiz4. 36 00:01:52,030 --> 00:01:55,710 Ali pa, če je bil tedenski kviz, bi bilo quiz5, quiz6, quiz7. 37 00:01:55,710 --> 00:01:58,520 Zato bi morali vse te spremenljivke prijavljeni znotraj glavnega 38 00:01:58,520 --> 00:02:00,470 ali kje drugje v programu, 39 00:02:00,470 --> 00:02:03,870 in težave s tem pristopom, čeprav je preprosta, da samo kopiraj in prilepi, 40 00:02:03,870 --> 00:02:06,120 je to le zelo hitro postane počasna. 41 00:02:06,120 --> 00:02:09,360 Bog ne daj, da dejansko imajo 30 ali 50 kvizi kvizov. 42 00:02:09,360 --> 00:02:12,080 Če je kot visoki šoli slogu pop kviz dan, 43 00:02:12,080 --> 00:02:15,910 potem samo še smešno dolg seznam spremenljivk, ki so prijavljene, 44 00:02:15,910 --> 00:02:17,780 in to samo zelo hitro uide iz nadzora. 45 00:02:17,780 --> 00:02:20,820 Grdo je, da je težko trditi, da je tako veliko lažje, da bi slovnične napake 46 00:02:20,820 --> 00:02:23,910 če dobiš 1 število napačen nekje v programu. 47 00:02:23,910 --> 00:02:26,800 >> Tako smo uvedli pojem matriko namesto tega. 48 00:02:26,800 --> 00:02:30,760 In spomnim, da smo uvedli ta program s tem malo kaj takega. 49 00:02:30,760 --> 00:02:33,950 Naj gredo v izvorno današnjem 3 imenik ponedeljek 50 00:02:33,950 --> 00:02:37,160 in odpira niz, ki smo ga videli zadnjič. 51 00:02:37,160 --> 00:02:39,940 In čeprav je bilo nekaj novih trikov C tukaj 52 00:02:39,940 --> 00:02:41,920 Med njimi pojem konstanta, 53 00:02:41,920 --> 00:02:47,140 spomnimo, da smo objavili več lebdi v bistvu s to sintakso: 54 00:02:47,140 --> 00:02:51,750 float, potem ime spremenljivke, nato pa smo uporabili kvadratnih naramnic res prvič, 55 00:02:51,750 --> 00:02:55,450 in kaj smo naredili znotraj teh oglatih oklepajih je dejansko dal številko. 56 00:02:55,450 --> 00:02:59,780 Toda namesto da bi več, sem dal to začetnico besedo, kvizi. 57 00:02:59,780 --> 00:03:03,220 In kakšen je bil motiv za dajanje začetnico besede, kot so kvizi 58 00:03:03,220 --> 00:03:08,170 in nato z uporabo vrstice 17 je trik tukaj, da dejansko daš številko? 59 00:03:08,170 --> 00:03:11,240 Kaj je bil razlog tam? Ja. 60 00:03:11,240 --> 00:03:13,360 >> [Neslišno študentski odziv] >> Točno tako. 61 00:03:13,360 --> 00:03:16,630 Če želimo spremeniti to vrednost 2, imamo le, da ga spremeni v 1 mesto 62 00:03:16,630 --> 00:03:19,680 ker meni - jaz se ne spomnim, kaj je ta program naredil točno to, 63 00:03:19,680 --> 00:03:22,040 ampak, če ste jo pravkar posneto vidite kvize, kvize. 64 00:03:22,040 --> 00:03:24,720 Vidiš kvizi, tukaj več kvizov. 65 00:03:24,720 --> 00:03:28,180 Torej, če ne bi imeli ta konstanta, ta uporaba ostre opredeliti, 66 00:03:28,180 --> 00:03:33,320 mi pa bi vnesli 2, potem 2, potem 2, potem pa 2, kar je v redu. To bi bilo prav tako pravilna. 67 00:03:33,320 --> 00:03:36,220 Recimo, da se naslednje leto imamo 3 kvizov v CS50. 68 00:03:36,220 --> 00:03:39,190 Tako da moram iti in posodobite kodo, jo moram prevesti, 69 00:03:39,190 --> 00:03:43,820 ampak problem je, če sem naredil kakšno neumnost, kot sem omenila spregledati 1 2 70 00:03:43,820 --> 00:03:46,750 in pozabi, da vklopite 3, lahko celoten program zelo dobro prekinil. 71 00:03:46,750 --> 00:03:48,720 Torej smo samo prosi za trud. 72 00:03:48,720 --> 00:03:53,170 >> Tako pojem konstanta je vse o faktoringu od približno kos podatkov, 73 00:03:53,170 --> 00:03:56,070 ali je niz ali lastnost ali plovec ali karkoli, 74 00:03:56,070 --> 00:04:00,070 in jo razglasi za 1 mesto, tako da lahko lažje spremeniti v prihodnosti. 75 00:04:00,070 --> 00:04:03,660 In to je tudi odkrito povedano, malo lažje brati, ker če samo pomislimo na to zdaj, 76 00:04:03,660 --> 00:04:07,840 je kvizi, ali pa bi celo preimenovati to nekaj podobnega NUMBER_OF_QUIZZES 77 00:04:07,840 --> 00:04:09,430 ali kaj bolj jasno. 78 00:04:09,430 --> 00:04:11,830 Koda le postane malo bolj jasno, kaj to počne, 79 00:04:11,830 --> 00:04:15,780 in se sprašujem, kaj bi lahko malo manj, številka 2 se zgodi, da pomeni. 80 00:04:15,780 --> 00:04:18,920 Torej konstantno nima nič opraviti z bistveno nizi. 81 00:04:18,920 --> 00:04:22,990 Matrika je bil uveden na podlagi teh oglatih oklepajih. 82 00:04:22,990 --> 00:04:26,610 >> Torej opazili, da v vrstici 23 se od uporabnika zahteva, "Kakšne so bile vaše ocene kviz?" 83 00:04:26,610 --> 00:04:31,120 Potem imamo samo to zanko, ki je očitno sprašuje, si za svoje razrede. Kako? 84 00:04:31,120 --> 00:04:37,460 To ponovi 0-2. In rečem 2, ker kvizov v vseh kape je trenutno 2. 85 00:04:37,460 --> 00:04:42,310 Torej ponovi od 0 do 2, nato pa se natisne Kviz # nekaj nečesa, 86 00:04:42,310 --> 00:04:45,830 in potem se uporablja GetFloat, da bi dobili vrednost od uporabnika. 87 00:04:45,830 --> 00:04:49,050 Tako obvestilo je to le še nov del sintakse od zadnjega sredo. 88 00:04:49,050 --> 00:04:53,120 Če želite shraniti nekaj v nekem mestu v tej matriki, 89 00:04:53,120 --> 00:04:55,460 lahko ponovno uporabite oglate oklepaje. 90 00:04:55,460 --> 00:04:57,030 >> Torej je malo dihotomije tukaj. 91 00:04:57,030 --> 00:04:59,040 Ko prvič uporabite oglate oklepaje 92 00:04:59,040 --> 00:05:02,250 ga uporabljate, da določite, kako velik želite array biti. 93 00:05:02,250 --> 00:05:06,580 Ampak to naslednji kontekst tu, kjer smo ponovno zaposliti te oglate oklepaje 94 00:05:06,580 --> 00:05:10,540 pomeni, če v tem polju ne želite, da bi neko vrednost? 95 00:05:10,540 --> 00:05:13,650 In mogoče razlikovati tukaj razbrati iz konteksta. 96 00:05:13,650 --> 00:05:17,130 Obvestilo tu imamo vrsto podatkov, potem imamo ime spremenljivke, 97 00:05:17,130 --> 00:05:20,770 potem imamo oglatimi oklepaji s številko v notranjosti, podpičjem. To je to. 98 00:05:20,770 --> 00:05:22,290 Tako, da je deklaracija. 99 00:05:22,290 --> 00:05:28,390 To je tako, kot če bi to storili nekaj podobnega float float Grade1; grade2; 100 00:05:28,390 --> 00:05:31,730 ampak spet, to je naloga zelo hitro na poti preveč kopiraj, prilepi, 101 00:05:31,730 --> 00:05:34,260 Tako namesto da bi kar poenostavi kot take, 102 00:05:34,260 --> 00:05:38,800 kar pomeni, da imamo odslej razred, ki jih je mogoče shraniti v razredu 0, 103 00:05:38,800 --> 00:05:41,760 imamo še eno oceno, ki jih je mogoče shraniti na nosilcu 1, 104 00:05:41,760 --> 00:05:46,890 kaj pa če jaz Pepe in, na primer, moja zanka gre tako daleč - 105 00:05:46,890 --> 00:05:48,740 na primer, jaz bi to manjša ali enaka 106 00:05:48,740 --> 00:05:50,620 Odpoklic, ki je bil vir prejšnje napake - 107 00:05:50,620 --> 00:05:55,590 kar dejansko pomeni, da na nekaterih tretjih nenamernega ponovitvi te zanke 108 00:05:55,590 --> 00:06:00,380 Uporabljam nosilec 2. Dejansko se lahko kaj zgodilo tukaj? Prosim? 109 00:06:00,380 --> 00:06:02,860 [Študent] To bo treba zamenjati. >> Ali bo treba zamenjati? 110 00:06:02,860 --> 00:06:04,520 Kaj bi se zamenja? 111 00:06:04,520 --> 00:06:10,890 To dobesedno pravi nadomestiti tisto, kar je na voljo 2 s povratno vrednost GetFloat. 112 00:06:10,890 --> 00:06:13,690 Ampak problem je, kako velik je matrika na tej točki v zgodbi? 113 00:06:13,690 --> 00:06:17,730 [Neslišno študentski odziv] >> Matrika je še vedno le velikosti 2 114 00:06:17,730 --> 00:06:22,730 ker matrike, kot vse spremenljivke, je bila razglašena za prvo, preden smo ga uporabili, 115 00:06:22,730 --> 00:06:27,220 in smo opredelili tu, ker ta konstanta, da imam 2 ocene, da bom dal. 116 00:06:27,220 --> 00:06:29,930 >> Ampak zapomni si, računalniški znanstveniki začetek štetja od 0. 117 00:06:29,930 --> 00:06:33,620 Torej, prvi kraj v tej matriki je nosilec 0. 118 00:06:33,620 --> 00:06:40,210 Naslednja lokacija je 1. Ta stvar je vedno tako malo preveč na rob. 119 00:06:40,210 --> 00:06:42,870 Torej, z drugimi besedami, če bi dejansko imeli to vrsto - 120 00:06:42,870 --> 00:06:46,790 in da vidim, kako dobro je to sodeluje tukaj za nas - 121 00:06:46,790 --> 00:06:52,360 če imam niz, ki sem vzhičen, kot sledi 122 00:06:52,360 --> 00:06:56,750 in sem dodeljen prostor za 2 elementov, ki bi lahko črpam to, kot je ta v spomin 123 00:06:56,750 --> 00:06:58,020 če je to velika bela platno. 124 00:06:58,020 --> 00:07:00,920 To je samo RAM imam v računalniku, gig RAM, 2 nastopov RAM-a, karkoli, 125 00:07:00,920 --> 00:07:05,400 ampak ti 2 škatle zdaj posamično predstavljajo likvidna, 32 bitov. 126 00:07:05,400 --> 00:07:10,860 Torej, če sem dal 1 številko tukaj kot 1,0, potem pa sem dal še eno številko tukaj kot 3,2 127 00:07:10,860 --> 00:07:15,280 potem pa sem naredil nosilec 2, to je kot bi dal nekaj tukaj. 128 00:07:15,280 --> 00:07:17,820 In kot kaže slika, ni ničesar. 129 00:07:17,820 --> 00:07:20,450 To je nekako kot nikogaršnji zemlji, ker nisem vprašal operacijski sistem 130 00:07:20,450 --> 00:07:23,550 da mi ta tretji kviz. 131 00:07:23,550 --> 00:07:26,940 Če sem hotel, da 3. kviz, bi sem imel predvidevanjem 132 00:07:26,940 --> 00:07:31,700 prositi operacijski sistem za to razglasitvijo kvizov ne sme biti 2 133 00:07:31,700 --> 00:07:34,210 ampak namesto tega enaka 3. 134 00:07:34,210 --> 00:07:39,000 >> Torej, z drugimi besedami, je slika, ki smo dejansko imeli pri roki izgleda takole tukaj. 135 00:07:39,000 --> 00:07:42,260 To je spet nikogaršnji zemljišč. Bolje, da ne poskusite pisanje vrednosti tukaj. 136 00:07:42,260 --> 00:07:45,300 Ampak še enkrat, ker računalniški znanstveniki računajo od 0, 137 00:07:45,300 --> 00:07:49,520 Ko govorimo o tej lokaciji v polju, ki je moral biti položaj 0, 138 00:07:49,520 --> 00:07:53,890 To naj bi bilo mesto 1, in to sploh ne obstaja 139 00:07:53,890 --> 00:07:57,380 saj smo samo vprašal operacijski sistem za 2 takih krajih. 140 00:07:57,380 --> 00:08:00,130 Torej tiste, ki ste predhodnih izkušenj programskega drugih jezikih 141 00:08:00,130 --> 00:08:04,150 Morda veš, da to ni vedno tako z nizi ali stvari imenujemo vektorji. 142 00:08:04,150 --> 00:08:06,930 Namesto tega lahko samo vztrajati dodajanje in dodajanjem in dodal stvari nizi, 143 00:08:06,930 --> 00:08:10,720 ki, odkrito povedano, smo imeli možnost, da se v nič, in še zdi, da smo ga dal gor 144 00:08:10,720 --> 00:08:15,160 ker s C ste programsko veliko bolj jasno. 145 00:08:15,160 --> 00:08:17,980 To je samo ti in računalnik, prav zdaj, in se računalnik le, da bo to 146 00:08:17,980 --> 00:08:19,530 kaj vam je rekel, da ne. 147 00:08:19,530 --> 00:08:24,270 Torej, če ste le povedati, da vam 2 boje preko linije 22 tukaj, 148 00:08:24,270 --> 00:08:27,640 To je vse, kar boš dobil nazaj od operacijskega sistema: prostor za 2. 149 00:08:27,640 --> 00:08:34,049 >> Torej, vse so vaši programi bodo občasno lahko vozičkom v zvezi z nizi. 150 00:08:34,049 --> 00:08:37,520 To je nekako narave zveri, s katerim smo vsi zmotljivi, 151 00:08:37,520 --> 00:08:42,490 in na neki točki boste zelo verjetno indeks od meje svojega polja. 152 00:08:42,490 --> 00:08:45,980 In to je samo uglajen način si šel v nekaj konzole 153 00:08:45,980 --> 00:08:49,970 in kaj je le prevelika številka. Šel si preko meje svojega polja. 154 00:08:49,970 --> 00:08:51,530 Ampak zdaj je to narobe. 155 00:08:51,530 --> 00:08:54,990 Preostali del tega programa res nima nič opraviti z bistveno nizi. 156 00:08:54,990 --> 00:08:58,180 To je vse samo o neki navadno aritmetično povprečje za računalništvo. 157 00:08:58,180 --> 00:09:03,200 Torej imamo tu v ta zanka here 1. spremenljivka imenovan znesek, ki ga inicializirati na 0. 158 00:09:03,200 --> 00:09:09,020 Potem smo Ponovil od 0 do 2 in spet smo dodali v tem seštevanja spremenljivko 159 00:09:09,020 --> 00:09:12,620 i-razred, tako da nosilec 0, potem nosilec 1. 160 00:09:12,620 --> 00:09:15,130 In potem, kot bi ti naredil v osnovni šoli za izračun povprečja, 161 00:09:15,130 --> 00:09:19,420 preprosto se ta znesek, ga delimo s skupnim številom kvizi, 162 00:09:19,420 --> 00:09:22,520 nato pa za dobro mero pravimo funkcijo imenovano okroglo tukaj. 163 00:09:22,520 --> 00:09:28,580 >> Zdaj, kot stran, kaj je s tem ukvarjajo parenthetical notr na spletu 34? 164 00:09:28,580 --> 00:09:31,730 Morda bi prišel že v oddelku, niso zares govorili o tem uradno tu 165 00:09:31,730 --> 00:09:35,210 ampak kaj je to int v parens Verjetno delaš? >> [Neslišno študentski odziv] 166 00:09:35,210 --> 00:09:38,500 Ja, to se nanaša na litjem ali typecasting, 167 00:09:38,500 --> 00:09:41,690 kar pomeni, da ob 1 vrsto podatkov in jo pretvori v drugo. 168 00:09:41,690 --> 00:09:45,400 Če tega ne more storiti z vsemi vrstami podatkov, saj včasih bi bilo malo čudno. 169 00:09:45,400 --> 00:09:49,640 Ampak v tem primeru, če se donos vrednost krog je plovec 170 00:09:49,640 --> 00:09:53,880 ker je, po vsem, sem ob plovec in ga delimo s številko kot 2, 171 00:09:53,880 --> 00:09:55,840 Jaz bom dobil nazaj plovec. 172 00:09:55,840 --> 00:10:00,760 Ampak ljudje razred šole v resnici ne zanima, da je njihova povprečna je bila 93,4 173 00:10:00,760 --> 00:10:04,420 ker bodo spoznali, da so bili kdaj tako blizu tega 95 točke zaokroževanja. 174 00:10:04,420 --> 00:10:09,540 >> Zato želimo, da namesto tega uporabite int zaokrožiti vse do najbližje int, 175 00:10:09,540 --> 00:10:12,730 ki v tem primeru se bo 94 brez točke po njej. 176 00:10:12,730 --> 00:10:14,530 Tako, da je le malo matematično trik. 177 00:10:14,530 --> 00:10:17,570 In bomo prišli nazaj na ta pojem litja, saj bo imelo posledice, 178 00:10:17,570 --> 00:10:21,640 Če še niste odkrili že za problem iz 2. 179 00:10:21,640 --> 00:10:25,210 Torej matrika potem si lahko misliš - to se dogaja, da me nasmeh cel dan. 180 00:10:25,210 --> 00:10:27,830 Izgleda, da je to, če narisati sliko od tega, 181 00:10:27,830 --> 00:10:31,460 ampak ključno je, da je velikost izberemo tudi z vami 182 00:10:31,460 --> 00:10:34,050 ko ga zahteva od operacijskega sistema. 183 00:10:34,050 --> 00:10:39,460 Vsa vprašanja potem na poljih? Ja. 184 00:10:39,460 --> 00:10:47,080 [Neslišno študentski vprašanje] 185 00:10:47,080 --> 00:10:49,310 Ah, dobro vprašanje. 186 00:10:49,310 --> 00:10:53,150 Vprašanje je, kaj se zgodi z ničelno 0 v matriki? To ne obstaja v tem kontekstu. 187 00:10:53,150 --> 00:10:57,430 To obstaja samo v okviru nizov, ki smo na tem, da pride v trenutku. 188 00:10:57,430 --> 00:11:02,300 Ampak za matriko, kot v tem primeru pa boste dobili tisto, kar boste prosili za operacijski sistem. 189 00:11:02,300 --> 00:11:04,050 >> In kot stran, da ne bi bilo to jasno, 190 00:11:04,050 --> 00:11:07,030 Držim rekel prosite operacijski sistem, se obrnite na operacijski sistem. 191 00:11:07,030 --> 00:11:10,090 Operacijski sistem, kot verjetno veste, Mac OS, Windows, Linux. 192 00:11:10,090 --> 00:11:13,560 Ko kličeš funkcije, kot so GetFloat 193 00:11:13,560 --> 00:11:19,280 ali ste razglasitvi spremenljivk, kot so razredi, 194 00:11:19,280 --> 00:11:23,200 ob koncu dneva si v bistvu sprašuje, kdo drug, da bi vam ta pomnilnik 195 00:11:23,200 --> 00:11:25,940 ker smo v upanju, programerji 196 00:11:25,940 --> 00:11:28,800 Nimam pojma, kako dejansko dobil fizični dostop do spomina. 197 00:11:28,800 --> 00:11:31,100 Ampak nekdo počne: operacijski sistem. 198 00:11:31,100 --> 00:11:36,630 Torej, poleg tega nam predstavlja s precej ikon in menijev in mape in podobno 199 00:11:36,630 --> 00:11:39,050 , ki jih vidite na namizju ali Mac ali PC, 200 00:11:39,050 --> 00:11:42,240 operacijski sistemi storite tudi nizko raven vsakdanji stvari, 201 00:11:42,240 --> 00:11:44,680 zelo tehnične stvari obvladovati GB 202 00:11:44,680 --> 00:11:48,780 ali 2 gigabajta pomnilnika, ki ga imajo, upravljanje CPU, ki jih imate, in tako naprej. 203 00:11:48,780 --> 00:11:50,170 Torej, ko pišete kodo, 204 00:11:50,170 --> 00:11:53,900 ste res spotikanje v svoj operacijski sistem v tem smislu. 205 00:11:53,900 --> 00:11:55,720 Jaz bom moral zmanjšati to. V redu. 206 00:11:55,720 --> 00:11:59,980 >> Druga vprašanja o matrikah? 207 00:12:00,330 --> 00:12:02,520 Ne? Ok. 208 00:12:02,520 --> 00:12:06,680 Torej prehod seveda iz polja je dejansko na temo, ki je malo pozna. 209 00:12:06,680 --> 00:12:09,570 In smo si ogledali še tako kratek čas na tem zadnjem času preveč. 210 00:12:09,570 --> 00:12:12,500 To je bil primer iz niza sredo. 211 00:12:12,500 --> 00:12:15,060 Ta niz primerov je zelo preprost program, 212 00:12:15,060 --> 00:12:18,120 in sem dejansko poenostavljena z nekaj vrstic za namene današnjih. 213 00:12:18,120 --> 00:12:22,680 Vse to počne v vrstici 19, je dobil niz s strani uporabnika, ga shrani v spremenljivko imenovano s. 214 00:12:22,680 --> 00:12:28,670 Nato v vrstici 22 dalje pa je očitno, da je tiskanje niza 1 znak na vrstico. 215 00:12:28,670 --> 00:12:30,730 Toda kako se to počne? 216 00:12:30,730 --> 00:12:33,350 Mi smo o razglasitvi spremenljivke i, saj jo postavi enak 0, 217 00:12:33,350 --> 00:12:35,770 in to je vse stara navada zdaj. 218 00:12:35,770 --> 00:12:39,270 Nismo videli to do srede, lahko pa nekako sklepati iz njenega imena 219 00:12:39,270 --> 00:12:44,610 strlen vrne ravno kaj, ko, dana? Dolžina niza. 220 00:12:44,610 --> 00:12:47,940 Torej, če sem dajati niz, quote-konec citata David, 221 00:12:47,940 --> 00:12:51,810 to je upajmo, da bo vrnil k meni številko 5, ker Davida. 222 00:12:51,810 --> 00:12:55,600 Tako da je njen cilj v življenju je, da se niz, ali je težko kodirane z vami 223 00:12:55,600 --> 00:12:58,840 ali v tem primeru priklopljen kot spremenljivke, kot argument, 224 00:12:58,840 --> 00:13:01,980 in zneske, kakšna je dolžina tega niza je. 225 00:13:01,980 --> 00:13:06,470 >> Torej, tukaj smo zadolževanje nekaj zapisa iz prejšnjega primera kviz. 226 00:13:06,470 --> 00:13:09,390 To nima nič opraviti s plovci, nima nič opraviti s kvizi, 227 00:13:09,390 --> 00:13:13,100 vendar se izkaže, da je malo belo laž smo bili ti, saj tedna 1 228 00:13:13,100 --> 00:13:16,330 je to niz v resnici ne obstaja v C. 229 00:13:16,330 --> 00:13:20,230 Niz ob koncu dneva je res samo polje. 230 00:13:20,230 --> 00:13:25,140 To je niz bajtov, tako bajt, bajt, bajt, bajt, ki odpoklic je le 8 bitov, 231 00:13:25,140 --> 00:13:28,130 Tako kos pomnilnika, kos pomnilnika, kos pomnilnika, kos pomnilnika. 232 00:13:28,130 --> 00:13:31,210 In sredstva, s katerimi se izvaja niz 233 00:13:31,210 --> 00:13:33,070 s tem da je prvi znak tukaj, 234 00:13:33,070 --> 00:13:37,470 potem je tukaj, potem je tukaj, potem je tukaj, back to back to back v spomin računalnika. 235 00:13:37,470 --> 00:13:42,160 Torej, če boste želeli zapisati besedo, kot je HALO, bi si dal 1 znak H, 236 00:13:42,160 --> 00:13:48,240 potem E, nato pa L L, potem O - 5 znakov skupaj - nekje v RAM v računalniku. 237 00:13:48,240 --> 00:13:52,080 Toda ključna podrobnost v tem, da oni bo back to back to back za hrbet, 238 00:13:52,080 --> 00:13:54,200 v neposredni bližini drug drugega. 239 00:13:54,200 --> 00:13:58,820 Ko sem rekel, ko je [i], kar v angleščini, je to mi daje? 240 00:14:01,240 --> 00:14:04,550 Kaj s [i] predstavlja v tem primeru? Ja. 241 00:14:04,550 --> 00:14:07,800 >> [Študent] i-ti znak v nizu. >> Točno tako. I-znak v nizu. 242 00:14:07,800 --> 00:14:12,260 No, jaz se bo začela na 0, kot na moji za zanko tukaj, 243 00:14:12,260 --> 00:14:14,850 ampak to je dobro, saj se vse začne štetje od 0. 244 00:14:14,850 --> 00:14:19,160 Torej, S [0] bo predstavljajo črko H v besedi kot HALO, 245 00:14:19,160 --> 00:14:24,530 s [1], se dogaja, da predstavlja tako pismo E v besedi kot HALO, in tako naprej. 246 00:14:24,530 --> 00:14:27,130 In tisto, kar se zdi, da gre na vsaki ponovitvi te zanke 247 00:14:27,130 --> 00:14:32,780 začasno shranjevanje i-znak v spremenljivko, imenovano c, ki je le znak, 248 00:14:32,780 --> 00:14:35,010 in potem bomo tiskanje c 249 00:14:35,010 --> 00:14:37,620 tako da je na koncu dneva, kaj ta program počne, je naslednji. 250 00:14:37,620 --> 00:14:42,900 Če grem v izvorni imenik in jaz niz1 in sem šel naprej in zagon niz1, 251 00:14:42,900 --> 00:14:51,920 in potem sem vnesete besedo, kot Pozdravljeni, Enter, vse to pa je natisniti 1 znak naenkrat. 252 00:14:51,920 --> 00:14:54,010 >> Torej je priložnost za izpopolnitev tukaj. 253 00:14:54,010 --> 00:14:58,150 Nekako sem dodatno delo, čeprav je bolj jasno, morda je to način, kot je potrebno. 254 00:14:58,150 --> 00:15:03,270 Katera vrstica kode tu lahko verjetno vrgel proč skupaj? Ja. 255 00:15:03,270 --> 00:15:08,290 Linija 24. V skladu sem 24 razglasitvi spremenljivo c. 256 00:15:08,290 --> 00:15:14,320 Jaz shranjevanje i-značaj je v njej, potem pa sem z uporabo C tukaj. 257 00:15:14,320 --> 00:15:20,160 Torej, jaz sem z uporabo c, tako da imam občutek, da ne moreš kar metati linijo 24 stran. 258 00:15:20,160 --> 00:15:23,850 [Neslišno študentski komentiraj] >> Točno tako. 259 00:15:23,850 --> 00:15:26,240 Torej, ko gre za govorimo o načrtovanju programov, 260 00:15:26,240 --> 00:15:30,740 Opazili to rahlo poenostavitev kodeksa, ki je prav tako berljivo, 261 00:15:30,740 --> 00:15:34,680 toda zavedati, da je le spremenljivka, njegov podatkovni tip polja, 262 00:15:34,680 --> 00:15:38,610 tako s [i] je le, da bo, da takoj vrne na vaš i-znakov v tem nizu. 263 00:15:38,610 --> 00:15:40,620 In če želite natisniti, da je v redu. 264 00:15:40,620 --> 00:15:43,680 Moraš uporabiti% c, ker nisi tiskanje niz, 265 00:15:43,680 --> 00:15:48,520 tiskate znak v nizu, in tudi to ima za posledico tiskanje wi znak. 266 00:15:48,520 --> 00:15:51,390 In spomnim edina razlika res od prejšnjega tedna s pomočjo printf 267 00:15:51,390 --> 00:15:54,220 je, da medtem ko je v preteklih tednih bi naredili nekaj zelo preprostega 268 00:15:54,220 --> 00:15:58,510 kot ogrado% s takrat je ime niza tukaj, 269 00:15:58,510 --> 00:16:01,190 zdaj smo potapljanje globlje pod pokrovom motorja in rekel: 270 00:16:01,190 --> 00:16:06,090 Ne natisniti niz, natisniti en znak v njej. 271 00:16:06,090 --> 00:16:10,570 >> Tako lahko naredimo nekaj malo drugačnega tukaj zato, ker je 1 druga - ni napaka 272 00:16:10,570 --> 00:16:14,090 ker je ta program pravi, ampak delam nekaj neumnega 273 00:16:14,090 --> 00:16:16,810 ki sem ga omenil na kratko v sredo. 274 00:16:16,810 --> 00:16:22,680 Toda razmišljanje nazaj, kako bi se ta program je oblikovan tako še izboljšali? Ja. 275 00:16:22,680 --> 00:16:28,280 [Neslišno študentski odziv] >> O, dobro. 276 00:16:28,280 --> 00:16:32,120 Tako opozarjajo, da smo uvedli drugo spremenljivko, imenovano n zadnji čas, 277 00:16:32,120 --> 00:16:34,850 za katero se zdi, da se bomo v nasprotju, ker je moj cilj sekundo 278 00:16:34,850 --> 00:16:37,380 je bil le, da mečejo spremenljivko kot nepotrebno, 279 00:16:37,380 --> 00:16:40,700 vendar pa opozarjajo, da v sredo, smo dejansko to storil. 280 00:16:40,700 --> 00:16:46,170 Spremenil sem v zanko, da dejansko imajo vejice, potem pa se n = strlen, 281 00:16:46,170 --> 00:16:52,120 in potem sem jaz i 00:16:57,660 Kaj je temeljni dobiček, ki sem doseči s spremembo moje inicializacijo za to 283 00:16:57,660 --> 00:17:01,590 in moj pogoj, da zdaj to? >> [Neslišno študentski odziv] >> Točno tako. 284 00:17:01,590 --> 00:17:06,170 Jaz ne spominja strlen znova in znova in znova, saj spomniti, kako je za zanke del. 285 00:17:06,170 --> 00:17:08,790 Tudi če bi začeli, da bi dobili bolj zapleten prihodnost, 286 00:17:08,790 --> 00:17:12,480 opozoriti, da je stvar pred prvim podpičjem je inicializacija, ki se zgodi enkrat. 287 00:17:12,480 --> 00:17:14,359 Pogoj pa je, v sredini, 288 00:17:14,359 --> 00:17:17,710 in dobi to preveriti vsakič, ko gredo skozi zanko. 289 00:17:17,710 --> 00:17:22,420 >> Tako da je malo butast, da se sprašuje, v računalnik na isto vprašanje znova in znova - 290 00:17:22,420 --> 00:17:25,920 Kakšna je dolžina Halo? Kakšna je dolžina Halo? Kakšna je dolžina Halo? - 291 00:17:25,920 --> 00:17:29,740 saj, kot bomo videli, danes in v sredo, to pa bo zagotovo trajalo nekaj časa, 292 00:17:29,740 --> 00:17:34,320 in to ni zelo dobro izkoristiti čas, saj razbrati dolžino niza 293 00:17:34,320 --> 00:17:37,030 dejansko traja malo truda. 294 00:17:37,030 --> 00:17:39,760 To ni takojšnja, saj je v nekaterih jezikih. 295 00:17:39,760 --> 00:17:43,920 Torej, s spremembo, da je to n, cena Plačujem je kaj? 296 00:17:43,920 --> 00:17:45,640 Mi smo videli na kompromis tukaj. 297 00:17:45,640 --> 00:17:49,460 Jaz vam lahko prihrani čas, ki ga ne sprašuje isto vprašanje, prekleto znova in znova, 298 00:17:49,460 --> 00:17:51,740 ampak to bo stalo nekaj, kar je kaj? 299 00:17:51,740 --> 00:17:55,050 >> [Študent] Ste izgubili določeno količino pomnilnika. >> Točno tako. To bo stalo nekaj pomnilnika. 300 00:17:55,050 --> 00:17:56,670 Torej v tem primeru stane kaj? 301 00:17:56,670 --> 00:18:01,530 Še 32 bitov, ker n je le int, kot je predvideno z besedo int tukaj. 302 00:18:01,530 --> 00:18:03,300 Toda, ali je to v redu? 303 00:18:03,300 --> 00:18:05,800 Odkrito povedano, da je verjetno v redu, ker, če menite o tem, 304 00:18:05,800 --> 00:18:09,030 več niz je, več časa bom zapravljal 305 00:18:09,030 --> 00:18:11,920 ker strlen se dogaja, da pokličejo znova in znova in znova 306 00:18:11,920 --> 00:18:13,520 za vsako ponovitev zanke. 307 00:18:13,520 --> 00:18:18,070 In v teh dneh, moj Mac ima 2 nastopov RAM-a, v teh dneh 4 nastopov RAM-a včasih. 308 00:18:18,070 --> 00:18:22,420 Mislim, da lahko privoščijo 4 teh bajtov dejansko pospešitev stvari. 309 00:18:22,420 --> 00:18:26,590 Toda to se bo kompromis in tema res načrtovanja in računalništvu 310 00:18:26,590 --> 00:18:28,320 od nikoli dobili ničesar zastonj. 311 00:18:28,320 --> 00:18:32,880 Če želite izboljšati nekaj tukaj, boste morali plačati za to na drugi strani pa nekako. 312 00:18:32,880 --> 00:18:35,880 Prostor v odvisnosti od časa v tej zadevi. 313 00:18:35,880 --> 00:18:40,700 >> Torej, to je bilo vse, kar se proti nekaj Grobni, kot je ta, 314 00:18:40,700 --> 00:18:44,070 ki je, kot ste verjetno ugotovili, do sedaj, dejansko pravi? 315 00:18:44,070 --> 00:18:47,420 [Neslišno študentski odziv] >> Ja, tako je to, ne pozabite piti svoj Ovaltine, 316 00:18:47,420 --> 00:18:52,490 dejansko uporablja algoritem, imenovano ROT13, ROT 1-3, 317 00:18:52,490 --> 00:18:55,500 kar samo pomeni, da zavrtite vse črk 13 mest, 318 00:18:55,500 --> 00:18:58,720 kar pomeni, da bo, in nato dodamo 13 do njega in pika, pika, pika 319 00:18:58,720 --> 00:19:04,640 vse do 13. pismu stran, narediš isto stvar za B in C in za D in tako naprej. 320 00:19:04,640 --> 00:19:10,850 In tako, če bi dejansko pretvorite to sem z uporabo prehoda 13 mest, 321 00:19:10,850 --> 00:19:14,580 bomo dobili nazaj tisto malo, kar je Ralphie, ki je, ne pozabite piti svoj Ovaltine. 322 00:19:14,580 --> 00:19:18,160 Vendar sedaj problem iz 2 v standardni različici vsaj, 323 00:19:18,160 --> 00:19:21,680 morate vrste pa sami enciphering, 324 00:19:21,680 --> 00:19:25,990 in moramo nekako sprejeti na vhodu, kot je ta, in šifriranje ali dešifriranje ga. 325 00:19:25,990 --> 00:19:29,850 >> Torej, kateri od teh vrste temeljev nas pripelje do te možnosti? 326 00:19:29,850 --> 00:19:32,650 Oglejmo si na ta tretji primer tukaj. 327 00:19:32,650 --> 00:19:38,430 Najprej se imenuje ASCII. Kaj ASCII vrne? 328 00:19:38,430 --> 00:19:40,460 Ameriški standardni nabor za izmenjavo informacij, 329 00:19:40,460 --> 00:19:43,850 kar je res daleč bi rekel kaj? Kaj je ASCII? 330 00:19:43,850 --> 00:19:47,890 [Neslišno študentski odziv] >> Kaj je to? >> [Študent] znak zemljevid. >> Znak zemljevid. 331 00:19:47,890 --> 00:19:51,390 Samo preslika številke pisem, saj ima svet standardizirani 332 00:19:51,390 --> 00:19:55,380 kaj številke bo predstavljal kakšne črke, tako da se lahko vsi uporabljajo računalnike 333 00:19:55,380 --> 00:19:59,340 in vsi naši programi so združljivi le, ko gre za tiskanje stvari na zaslonu. 334 00:19:59,340 --> 00:20:04,680 Tako opozarjajo, da se zgodi, da predstavljajo 65, 97 zgodi, da zastopa male črke. 335 00:20:04,680 --> 00:20:08,510 In tako ta preprost program tukaj ASCII je izkoristila to dejstvo - 336 00:20:08,510 --> 00:20:12,770 da svet ve, da je kapital, je 65 - in to je samo tiskanje preslikavo. 337 00:20:12,770 --> 00:20:16,320 >> Torej, preden se potopite v to oznako, naj namesto tega odprl terminalsko okno. 338 00:20:16,320 --> 00:20:21,550 Naj gredo naprej in da ASCII, nato pa naj samo teči to stvar samo pokvariti rezultata. 339 00:20:21,550 --> 00:20:25,960 In to samo naredi to: res velik grafikon, da samo mi pove vse različne oznake 340 00:20:25,960 --> 00:20:27,950 za vse različne črke. 341 00:20:27,950 --> 00:20:32,100 Torej, super preprost program, vendar nisem imel na trdi oznako teh 52 vrstic izhoda: 342 00:20:32,100 --> 00:20:34,860 26 velikimi, 26 male črke. 343 00:20:34,860 --> 00:20:37,790 Namesto tega sem to naredil načrtno z nekaj zank. 344 00:20:37,790 --> 00:20:39,720 Obvestilo, kaj sem naredil tukaj. 345 00:20:39,720 --> 00:20:44,790 Jaz sem iz poudarili, je 65 od 65 do 26 +, ker sem želel, da natisnete 26 črk 346 00:20:44,790 --> 00:20:49,860 V angleške abecede, i + + na vsaki ponovitvi in ​​zdaj opazil to še enkrat. 347 00:20:49,860 --> 00:20:52,540 To je ponovitev našega prijatelja typecasting 348 00:20:52,540 --> 00:20:54,620 , s katerim pretvorite 1 vrsto podatkov v drugo 349 00:20:54,620 --> 00:20:57,480 ker kaj želim narediti v tem programu? 350 00:20:57,480 --> 00:21:02,650 Želim številčno šteje, ker to je, kako sem odraščal štetju - 65, 66, 67 in tako naprej - 351 00:21:02,650 --> 00:21:04,420 vendar ne želite natisniti samo številke. 352 00:21:04,420 --> 00:21:08,030 Želim natisniti pismo, ki ji sledi številka. 353 00:21:08,030 --> 00:21:18,640 Želim natisniti A: B: številka, številka, ampak lahko to stori z istim točno spremenljivke. 354 00:21:18,640 --> 00:21:21,630 Zato sem se izpisal% C kot ogrado za znak, 355 00:21:21,630 --> 00:21:25,080 % D kot mesto za številko ali številko. 356 00:21:25,080 --> 00:21:27,750 Kaj potem priključim za tiste 2 ograde? 357 00:21:27,750 --> 00:21:33,960 Najprej sem plug v znak protivrednosti i, potem pa natisnete i sama. 358 00:21:33,960 --> 00:21:36,400 >> Torej, opazil to preveč preprosto deluje. 359 00:21:36,400 --> 00:21:39,320 Tako kot sem lahko odda s plovcem za notr 360 00:21:39,320 --> 00:21:41,750 , da bi šel z realno število na celo število, 361 00:21:41,750 --> 00:21:46,100 Tukaj lahko grem od notr na char, kar je malo čudno - 362 00:21:46,100 --> 00:21:48,680 ne čisto preslikati na resničnem svetu - vendar v računalnike 363 00:21:48,680 --> 00:21:51,140 char je samo številka pod pokrovom motorja, 364 00:21:51,140 --> 00:21:53,590 tako da sva še tako izrecno tukaj za računalnikom, rekoč: 365 00:21:53,590 --> 00:21:58,920 printf izpiše, ne jaz kot 65 let, ga natisnete kot svojo številčno enakovredni. 366 00:21:58,920 --> 00:22:02,110 In izkazalo se je, da sem tehnično sploh ne potrebujemo. 367 00:22:02,110 --> 00:22:05,020 Kaj sem počel pred nekaj trenutki je izrecno litje 368 00:22:05,020 --> 00:22:08,760 z navedbo, kaj tip podatkov želim iti v in iz. 369 00:22:08,760 --> 00:22:11,840 Ampak sem opazil, da že imajo to c ograde% 370 00:22:11,840 --> 00:22:14,930 in ta drugi% c ogrado tukaj. 371 00:22:14,930 --> 00:22:18,880 Čeprav to ni int, računalnik se zaveda, da znak, 372 00:22:18,880 --> 00:22:21,080 to je samo int pod pokrovom. 373 00:22:21,080 --> 00:22:25,100 >> Torej, če sem dejansko prevedem to in ponovitev ASCII program, 374 00:22:25,100 --> 00:22:31,210 opazite, da še vedno deluje, ker samo računalnik se zaveda, da je ta korespondenca. 375 00:22:31,210 --> 00:22:34,870 Zdaj je bolj pomembno, da to izrecno vlivanje v svetu splavov na ints 376 00:22:34,870 --> 00:22:37,460 saj ste dejansko tako izračunanega odločitev: 377 00:22:37,460 --> 00:22:40,140 mečejo vse, kar je za decimalno vejico. 378 00:22:40,140 --> 00:22:44,990 Tukaj pa je res nič ne vrže stran, ker je samo znak številko, 379 00:22:44,990 --> 00:22:48,220 in niz je le nabor znakov. 380 00:22:48,220 --> 00:22:52,530 Torej, ko pride čas, da se izvajanje nekaterih šifriranje ali dešifriranje, 381 00:22:52,530 --> 00:22:56,770 kako to, da bomo lahko dejansko prevede kaj takega nesmisel, 382 00:22:56,770 --> 00:22:58,670 Bodite prepričani, da pijete vaš Ovaltine? 383 00:22:58,670 --> 00:23:02,700 Kaj pa, če vemo zdaj - vzemimo kot predpostavko - to je ključ, 384 00:23:02,700 --> 00:23:08,010 Številka, ki smo vrtijo vseh teh pisem, ki jih je številka 13? 385 00:23:08,010 --> 00:23:11,800 Torej smo šli od črke B vse do Ø na začetku stavka, 386 00:23:11,800 --> 00:23:14,710 Bodite prepričani, da popij Ovaltine, ker če naredim B 387 00:23:14,710 --> 00:23:19,600 in potem sem šel C, D, E, F, G, H, I, J, K, L, M, N, O, 388 00:23:19,600 --> 00:23:23,760 zato šifriranje črko B postane O 389 00:23:23,760 --> 00:23:26,570 ker sem dodal 13 za to. 390 00:23:26,570 --> 00:23:33,460 >> Torej, če želim, da dešifrirati to, sem v bistvu morali O in nato odštevanje 13 iz nje. 391 00:23:33,460 --> 00:23:36,880 Ali pa, odkrito povedano, saj je 26 črk v abecedi, to je čudovito simetrična, 392 00:23:36,880 --> 00:23:41,260 bomo lahko tudi preprosto dodate 13 in bomo dobili nazaj na črko B. 393 00:23:41,260 --> 00:23:44,290 Ampak kako si šel o izvajanju kaj takega v Caesar 394 00:23:44,290 --> 00:23:46,600 ali res manipulirajo nizov na splošno? 395 00:23:46,600 --> 00:23:51,380 Če črka B je tisto številko? 396 00:23:51,380 --> 00:23:55,290 Kaj je črka B? Torej, to je 66, kajne? 397 00:23:55,290 --> 00:23:59,220 Torej, če pismo je 65 in črka B 66, 398 00:23:59,220 --> 00:24:03,940 Tako 66, vse kar morate storiti, je dodati 13 do njega, in to mi daje 79. 399 00:24:03,940 --> 00:24:09,150 In če gremo v naši mali stanja goljufija, 79 celo zemljevidi na O. 400 00:24:09,150 --> 00:24:11,290 >> Vendar pa je malo kotno primeru tukaj. 401 00:24:11,290 --> 00:24:15,170 Kaj je, recimo, črka Z? 402 00:24:15,170 --> 00:24:20,180 Če tega ne storimo 66 + 25, da bi dobili vse tja do konca abecede, smo na 91. 403 00:24:20,180 --> 00:24:24,520 91 + 13 mi daje 104, in veš kaj? 404 00:24:24,520 --> 00:24:29,200 104 ne enako veliko tiskano črko. 405 00:24:29,200 --> 00:24:31,610 Vrnimo se na malo stanja goljufija tukaj. 406 00:24:31,610 --> 00:24:38,070 Če sem znova zagnati ta program v aparatu, obvestila, da je 104, če grem nazaj v terminalskem oknu, 407 00:24:38,070 --> 00:24:41,800 104 je očitno male črke h. 408 00:24:41,800 --> 00:24:46,400 Zato moramo nekaj ključnih trik tukaj, da bi se prepričajte, da ko začnemo ob Ž 409 00:24:46,400 --> 00:24:50,260 in dodamo 13 mu ne želimo, da samo ohraniti dinamično razvijal naprej v večje in večje številke. 410 00:24:50,260 --> 00:24:52,600 Kaj zares želite narediti? 411 00:24:52,600 --> 00:24:54,570 Hočeš okoli zaviti. 412 00:24:54,570 --> 00:25:00,250 >> Tako se je izkazalo, kot ste videli verjetno v oddelku zdaj in v spec problem zastavila 413 00:25:00,250 --> 00:25:05,730 Ugotovil je, da je to drug operater v C, ki je tudi znak za odstotek, 414 00:25:05,730 --> 00:25:11,020 ker pa smo tukaj, da uporabljajo% natančno ogrado, 415 00:25:11,020 --> 00:25:15,420 vem, da je zlasti za sklop 2 Problem pa je tudi nekako takole: 416 00:25:15,420 --> 00:25:18,990 int x = y% z. 417 00:25:18,990 --> 00:25:22,770 Naj jo predstavi kot zelo splošno obliko tega. 418 00:25:22,770 --> 00:25:25,580 Odstotek pomeni kaj v programskem jeziku? >> [Študent] modula. 419 00:25:25,580 --> 00:25:28,790 Modul, ki je uglajen način preostanek. 420 00:25:28,790 --> 00:25:31,620 Kljub temu, da je rahlo razlikuje z opredelitvijo tam, 421 00:25:31,620 --> 00:25:37,210 to pomeni, delimo z y vz, vendar ne vrne rezultat tega oddelka; 422 00:25:37,210 --> 00:25:39,650 Namesto, vrne preostanek. 423 00:25:39,650 --> 00:25:47,390 >> Torej, če je y dejansko 3 in z dejansko, 2, 3 deljeno z 2 je 1 s preostalo 1, 424 00:25:47,390 --> 00:25:51,550 Torej, kaj pravzaprav enaka x v tem primeru? 1. 425 00:25:51,550 --> 00:25:54,540 To je tako enostavno, nizko stopnjo ideja. 426 00:25:54,540 --> 00:25:56,480 Traja nekaj časa, da se vaš um ovit okoli njega 427 00:25:56,480 --> 00:25:58,740 ker je to verjetno že kar nekaj časa, odkar ste sploh imeli, da skrbi za ostanke 428 00:25:58,740 --> 00:26:01,160 in dejansko jih uporabiti za kaj namensko, 429 00:26:01,160 --> 00:26:05,290 vendar v tem primeru samo dejstvo, da lahko greš z velikim številom kot 3 430 00:26:05,290 --> 00:26:08,920 na razmeroma majhnem številu kot 2 in nato ovijte okoli učinkovito 431 00:26:08,920 --> 00:26:14,160 s pomočjo preostanek na manjšo vrednost, kot 1 se bo neprecenljiv trik 432 00:26:14,160 --> 00:26:17,690 da lahko uporabimo tako za nekaj podobnega Cezarja in to druga stvar Vigenere 433 00:26:17,690 --> 00:26:22,240 Problem nastavite na 2, ampak to se bo ponavljajoče trik skozi semester. 434 00:26:22,240 --> 00:26:24,880 Ta preprosta, enostavna ideja le ob preostanek na splošno 435 00:26:24,880 --> 00:26:26,530 se dogaja, da nam omogočajo, da po zaviti. 436 00:26:26,530 --> 00:26:31,140 In kot smo začeli igrati bolj z nizi, kot smo začeli igrati bolj s pomnilnikom sam, 437 00:26:31,140 --> 00:26:35,800 to se dogaja, da postane bolj in bolj zmogljivo trik. 438 00:26:35,800 --> 00:26:43,420 >> Torej vsa vprašanja, nato pa na ASCII ali zastopanje strun kot nizi? 439 00:26:43,420 --> 00:26:47,430 In bomo to traja 1 zareza več. Ja. 440 00:26:47,430 --> 00:26:52,350 [Neslišno študentski vprašanje] >> Dobro vprašanje. 441 00:26:52,350 --> 00:26:55,370 Kaj pomeni, če ima spremenljivka zvezdico pred njim? 442 00:26:55,370 --> 00:26:57,720 Naj odloži odgovarja, da v vsakem podrobno 443 00:26:57,720 --> 00:27:00,100 a, ki se nanaša na temo, znan kot kazalec. 444 00:27:00,100 --> 00:27:03,440 Kazalci narediti s spominom, in smo pravzaprav še danes 445 00:27:03,440 --> 00:27:06,330 ob prvi korak k tej razpravi, 446 00:27:06,330 --> 00:27:08,600 vendar za zdaj, naj se pretvarjajo, da zvezda ne obstaja 447 00:27:08,600 --> 00:27:15,380 in bomo še naprej vztrajala nize nize namesto char *, 448 00:27:15,380 --> 00:27:19,530 kar ste verjetno že videl in bom dal na zaslonu čez nekaj trenutkov kot teaser. 449 00:27:19,530 --> 00:27:23,010 Torej bomo vrnili na pot, da podrobneje, kot mnogi izmed vas bodo verjetno všeč. 450 00:27:23,010 --> 00:27:25,760 Sčasoma, ne danes. Ja. 451 00:27:25,760 --> 00:27:42,810 >> [Neslišno študentski vprašanje] 452 00:27:42,810 --> 00:27:47,080 V kakšnem kontekstu imaš zagotoviti znak za znakom? >> [Študent] Ja. 453 00:27:47,080 --> 00:27:52,130 Torej privzeto, če ne dajo +, se domneva le pozitivne številke. 454 00:27:52,130 --> 00:27:55,390 Torej, če samo napisati številko 1, je pozitivna 1. 455 00:27:55,390 --> 00:27:57,710 Če želite določiti dejansko negacijo vrednosti, 456 00:27:57,710 --> 00:28:01,060 dobesedno narediti -1 na tipkovnici. 457 00:28:01,060 --> 00:28:20,440 Ampak to verjetno ni vaše vprašanje. >> [Neslišno študentski odziv] 458 00:28:20,440 --> 00:28:22,200 >> Dobro vprašanje. Ok. 459 00:28:22,200 --> 00:28:24,970 Torej, to je to, sem se zbrati, z nekakšno napako si zašel v 460 00:28:24,970 --> 00:28:27,640 ker ste pretvorbo celo število, da znak, 461 00:28:27,640 --> 00:28:29,780 ampak nekako negativnost zapletel, 462 00:28:29,780 --> 00:28:32,380 in tako znak pravkar prišel ven munged nekako. 463 00:28:32,380 --> 00:28:36,710 Torej za zdaj, naj ti malo poenostavljam, dokler ne pridemo nazaj na tovrstne teme. 464 00:28:36,710 --> 00:28:39,570 Za zdaj razmišljati o stvareh, na ta način - in to je poenostavljanje. 465 00:28:39,570 --> 00:28:43,500 Toda v svetu celo število imate, koliko bitov na razpolago? 466 00:28:43,500 --> 00:28:45,190 Imate 32 bitov. 467 00:28:45,190 --> 00:28:49,030 In sedaj, smo se pogovarjali o skupnem številu celih lahko torej predstavljajo 468 00:28:49,030 --> 00:28:52,430 je približno 4 milijarde skupaj, ker imaš 32 bitov, 469 00:28:52,430 --> 00:28:55,100 tako da je 2 na 32, tako da je približno 4 milijarde EUR. 470 00:28:55,100 --> 00:28:58,810 Vendar pa smo videli teden ali 2 nazaj, da ne boste res imeli vrsto številk 471 00:28:58,810 --> 00:29:01,240 od 0 na do 4 milijarde. 472 00:29:01,240 --> 00:29:06,340 Razpon sega od približno namesto negativnega v pozitivno 2000000000 2000000000. 473 00:29:06,340 --> 00:29:10,990 Ampak to potem se zastavlja vprašanje, kako si predstavlja pojem negativne 2000000000 474 00:29:10,990 --> 00:29:13,260 kaj šele negativna 1? 475 00:29:13,260 --> 00:29:17,960 Za zdaj, bomo lahko poenostavljam in samo rečem, da bomo uporabljali skrajno levi bit 476 00:29:17,960 --> 00:29:22,380 od teh 32 bitov, in če je 1 je negativno število 477 00:29:22,380 --> 00:29:25,090 in če je 0 je pozitivno število. 478 00:29:25,090 --> 00:29:28,570 Problem s tem poenostavljeno zastopanje negativne številke 479 00:29:28,570 --> 00:29:33,700 je, da če je bilo namerno biti pameten in poskuša pretvoriti iz narave s številnimi 480 00:29:33,700 --> 00:29:37,190 ali obratno, da ni take stvari kot negativnega učinka. 481 00:29:37,190 --> 00:29:42,550 V svetu ASCII, ki uporablja samo 8 bitov, vse 8 od teh snovi bitov, 482 00:29:42,550 --> 00:29:46,810 in skrajno levo malo nima nič opraviti z negativnosti. 483 00:29:46,810 --> 00:29:49,670 In tako mora biti jasno, ko rečem skrajni levi bitov, 484 00:29:49,670 --> 00:29:54,610 opozoriti, da je, ko smo našo malo povezane primere v prvem tednu 485 00:29:54,610 --> 00:30:02,570 spomnimo, da smo narisal stvari, kot so 1001101, nekaj takega. 486 00:30:02,570 --> 00:30:07,210 Ko rečem skrajno levi bit, sem dobesedno pomeni 1, da napišete vso pot v levo. 487 00:30:07,210 --> 00:30:11,910 Tako v svetu znakov ni pojem negativnosti, 488 00:30:11,910 --> 00:30:16,360 tako da skrajno levo malo dejansko ima nekaj opraviti z ASCII, nič opraviti s negativnosti. 489 00:30:16,360 --> 00:30:19,390 >> Torej, to zveni kot - in izven konteksta, da je težko natančno odgovoriti - 490 00:30:19,390 --> 00:30:25,840 ampak nekako, vaša koda je begalo, da je skrajno levi bit, saj so negativno vrednost 491 00:30:25,840 --> 00:30:29,160 če je res bil del narave v vprašanju. 492 00:30:29,160 --> 00:30:32,250 In spet sem oversimplifying ker so računalniki dejansko nekaj malo Ljubitelj 493 00:30:32,250 --> 00:30:37,080 kot samo spremenili, da skrajno levi bit na 1 za negativni predznak v primerjavi z 0. 494 00:30:37,080 --> 00:30:41,270 Namesto tega, če ste radovedni, da Google, uporabite nekaj običajno imenovano dopolnilo 2 je, 495 00:30:41,270 --> 00:30:43,830 , ki je nekoliko bolj sofisticirana od pristopa 496 00:30:43,830 --> 00:30:45,490 ampak ideja je na koncu enak. 497 00:30:45,490 --> 00:30:50,530 >> Torej na kratko, je to morala storiti z dejstvom, da si masažo število v znak 498 00:30:50,530 --> 00:30:53,750 ali obratno, ampak vaša koda ni bila zaveda dejstva, 499 00:30:53,750 --> 00:30:56,510 da 1 teh bitov je pomen v številčni svetu. 500 00:30:56,510 --> 00:30:59,940 To ne velja v znak svetu. 501 00:30:59,940 --> 00:31:04,270 Ampak to se sliši, kot da določi, v tem primeru nepotreben zdaj. Druga vprašanja. 502 00:31:06,030 --> 00:31:07,110 Ok. 503 00:31:07,110 --> 00:31:11,560 Do sedaj so vsi programi, ki smo jih napišejo sprejeti prispevek morda od uporabnika 504 00:31:11,560 --> 00:31:14,330 v obliki funkcij, kot so GetInt, GetString, 505 00:31:14,330 --> 00:31:16,990 ali če ste bili pred branjem v raznih knjigah ali na spletu referenc, 506 00:31:16,990 --> 00:31:21,390 Sami se lahko uporablja funkcije, kot scanf, ki odkrito, ki jih uporabljamo v CS50 knjižnici. 507 00:31:21,390 --> 00:31:25,370 Ampak v tednu ali 2, bomo dejansko pokazali, kako se izvaja knjižnica CS50 508 00:31:25,370 --> 00:31:27,890 tako da bomo lahko ta usposabljanje kolesa off celoti. 509 00:31:27,890 --> 00:31:31,340 >> Vendar se je izkazalo, da je še en način, da se prispevek od uporabnika. 510 00:31:31,340 --> 00:31:34,670 V bistvu smo bili sami z argumenti v ukazni vrstici 511 00:31:34,670 --> 00:31:36,500 za nekaj tednov. 512 00:31:36,500 --> 00:31:41,150 Vsakič, ko smo teči Jek ali pa smo jih prikazali, da, 513 00:31:41,150 --> 00:31:45,050 nismo samo vnesli Jek, Enter, nismo vnesli narediti, Enter. 514 00:31:45,050 --> 00:31:49,340 Kaj smo ponavadi napisal besedo Jek v našem terminal pozivu operacijskega sistema Windows? 515 00:31:51,110 --> 00:31:52,900 [Študent] ime datoteke. >> Ime datoteke, kajne? 516 00:31:52,900 --> 00:31:57,560 Hello.c ali mario.c ali karkoli ustrezno ime datoteke. 517 00:31:57,560 --> 00:32:01,910 In v tem smislu, kaj ste res opravili ste vplivalo na vedenje Jek 518 00:32:01,910 --> 00:32:05,750 ker gotovo ljudje, ki so pisali Zvoka ni niti sanjalo, da je malo stara vas 519 00:32:05,750 --> 00:32:08,890 da bom napisal program, imenovan mario.c let kasneje. 520 00:32:08,890 --> 00:32:13,150 Torej si moral nekako vplivajo na obnašanje tega programa, 521 00:32:13,150 --> 00:32:18,140 in ta program Jek morala biti napisana tako, da lahko sprejme prispevke od tebe 522 00:32:18,140 --> 00:32:23,480 z dodajanjem besed na poziv, preden se uporabnik zadetki Enter. 523 00:32:23,480 --> 00:32:27,860 >> Tako se izkaže, da je za nekaj časa smo se o razglasitvi skoraj vseh naših programov 524 00:32:27,860 --> 00:32:32,840 začeti, kot je ta - int main (void) - in potem smo šli naprej 525 00:32:32,840 --> 00:32:35,110 in začel pisati svojo kodo. 526 00:32:35,110 --> 00:32:37,910 In morda imamo nekaj ostrih tudi na vrhu datoteke, 527 00:32:37,910 --> 00:32:40,660 ampak skoraj vse naše programe, ki so doslej začela s tem 528 00:32:40,660 --> 00:32:44,200 čeprav ste morda opazili v delu, v knjigah, spletne reference 529 00:32:44,200 --> 00:32:46,570 da to ne bo v resnici morala biti nična. 530 00:32:46,570 --> 00:32:55,820 Druga legitimna oblika za to, da se je int argc in nato niz argv []. 531 00:32:55,820 --> 00:32:57,500 Torej, kaj zdaj to namiguješ? 532 00:32:57,500 --> 00:33:01,320 Izkazalo se je, da je argc, ki je človek konvencija - lahko imenujemo foo, 533 00:33:01,320 --> 00:33:03,710 vendar bi to šele bilo veliko manj jasno, da bralci - 534 00:33:03,710 --> 00:33:09,330 argc preprosto ni argument za funkcijo imenuje glavni, ki predstavlja kaj? 535 00:33:09,330 --> 00:33:12,450 Kaj argc stati za tiste, ki poznajo? 536 00:33:12,450 --> 00:33:14,980 >> [Neslišno študentski odziv] >> Ja, število argumentov ali argument štetju. 537 00:33:14,980 --> 00:33:16,510 To je tako enostavno, kot to. 538 00:33:16,510 --> 00:33:19,160 Koliko argumenti so bili sprejeti v ta program? 539 00:33:19,160 --> 00:33:20,630 Kaj to pomeni? 540 00:33:20,630 --> 00:33:27,090 Če v ukazni vrstici sem teči nekaj takega - Jek mario.c, - 541 00:33:27,090 --> 00:33:35,440 argc, ko sem udaril Vpišite se dogaja, da se na vrednost, nekoliko zmedeno, 2. 542 00:33:35,440 --> 00:33:40,150 Tako se izkaže, da je argument število argc, 543 00:33:40,150 --> 00:33:46,280 vendar zaradi zgodovinskih razlogov, je ime programa samega vključen v to število. 544 00:33:46,280 --> 00:33:51,950 Torej je 2 argc, ko sem pisal Jek mario.c. 545 00:33:51,950 --> 00:33:54,290 Kaj vsebuje argv? 546 00:33:54,290 --> 00:33:57,020 Najprej, argv izgleda kot niz, vendar ne povsem 547 00:33:57,020 --> 00:33:59,310 ker je od zadnjega sredo in danes še toliko bolj, 548 00:33:59,310 --> 00:34:02,890 Ti oglati oklepaji označujejo kaj? To polje. 549 00:34:02,890 --> 00:34:07,110 Ni več v polju, in da bi bilo smiselno, intuitivno 550 00:34:07,110 --> 00:34:10,790 ker so ljudje, ki so napisali Jek leti zagotovo ni imel pojma 551 00:34:10,790 --> 00:34:16,300 Koliko besed ljudi, kot smo mi, bi vnesite v poziv, preden pritisnemo Enter. 552 00:34:16,300 --> 00:34:22,280 >> Torej v tem primeru tu niso prijavili glavna funkcija je ob paleto argumentov, 553 00:34:22,280 --> 00:34:24,590 0 ali več razlogov. 554 00:34:24,590 --> 00:34:26,460 Oni ne vedo vnaprej, koliko jih je, 555 00:34:26,460 --> 00:34:29,690 tako da namerno ni več znotraj teh oglatih oklepajih. 556 00:34:29,690 --> 00:34:32,750 Toda dejstvo, da so oglati oklepaji so tam govorijo računalnik, 557 00:34:32,750 --> 00:34:34,639 pričakujejo niz. 558 00:34:34,639 --> 00:34:37,489 Argv je samo okrajšava za zapis msgstr. 559 00:34:37,489 --> 00:34:39,889 Vektor je uglajen način niz, 560 00:34:39,889 --> 00:34:42,980 in matrika je uglajen način seznam ali zbirko. 561 00:34:42,980 --> 00:34:47,360 Torej, to samo pomeni, da če ste napisali glavni takole 562 00:34:47,360 --> 00:34:51,100 Namesto všeč, kako smo to počeli v zadnjih nekaj tednih, 563 00:34:51,100 --> 00:34:54,699 vaš program ima zdaj moč, da sprejme argumente v ukazni vrstici 564 00:34:54,699 --> 00:34:58,520 tako da ne moraš pisati Mario in nato pritisnite tipko Enter, 565 00:34:58,520 --> 00:35:01,610 vnesite v številnih, za koliko blokov visoka želite piramida biti, 566 00:35:01,610 --> 00:35:03,100 nato pritisnite tipko ENTER. 567 00:35:03,100 --> 00:35:07,720 Mi sploh ni treba uporabljati GetString več ali GetInt ali GetFloat za to zadevo. 568 00:35:07,720 --> 00:35:12,370 Mi lahko samo pričakujemo, da bo uporabnik vnesti te besede na poziv se 569 00:35:12,370 --> 00:35:16,850 tako kot avtorji Jek odločil, da bi bilo zelo nadležno Program 570 00:35:16,850 --> 00:35:20,550 Če zbrati kodo morate najprej vnesli Jek, pritisnite tipko Enter, 571 00:35:20,550 --> 00:35:24,090 potem pa je rekel, da uporabnik, vnesite ime datoteke, ki jo želite pripraviti, 572 00:35:24,090 --> 00:35:26,920 potem vnesite mario.c in pritisnite tipko Enter. 573 00:35:26,920 --> 00:35:29,850 Ampak to je točno to, kar smo počeli za naše uporabnike zadnjih nekaj tednih. 574 00:35:29,850 --> 00:35:33,550 Mi uporabljamo GetString in čakamo, da program deluje, da jih pozove na vnos. 575 00:35:33,550 --> 00:35:36,710 To ni več potrebno, da je tako. 576 00:35:36,710 --> 00:35:41,160 >> Tako v tem primeru tukaj, zdaj imamo niz argv, 577 00:35:41,160 --> 00:35:43,390 in tudi to je poenostavljanje, 578 00:35:43,390 --> 00:35:45,610 usposabljanje kolesa, ki bo kmalu prišel dol. 579 00:35:45,610 --> 00:35:50,860 To je bolj pravilen način pisanja tega alternativnega izjavo glavnega 580 00:35:50,860 --> 00:35:54,740 ker se je izkazalo, da tisto, kar kličejo niz dejansko ima zvezdo, 581 00:35:54,740 --> 00:35:58,440 zvezdica v svoji dejanski opredelitvi, vendar je to samo izgleda zapletena, 582 00:35:58,440 --> 00:36:02,600 to je zmedeno na prvi, tako da smo poenostavili le za ustvarjanje sinonim razpoloženje 583 00:36:02,600 --> 00:36:09,340 V knjižnici, ki CS50 zemljevidi char * s tem bolj uporabniku prijazen niz besed. 584 00:36:09,340 --> 00:36:13,180 >> Torej, kaj je dejansko poskusite to takrat. Naj gredo naprej in odpreti gedit tukaj. 585 00:36:13,180 --> 00:36:17,010 Naj gredo naprej in odprite argv od 1. 586 00:36:17,010 --> 00:36:21,620 Ta program natisne očitno argumentov, temveč v angleških izrazov, 587 00:36:21,620 --> 00:36:26,290 jih gledamo na to oznako, kaj to storiti natančneje? 588 00:36:26,290 --> 00:36:35,910 Če bi tip v ukazni vrstici a.out foo, postane kaj natisnjeno v mojo črno-belo okno? 589 00:36:35,910 --> 00:36:41,260 A.out foo bar, Enter. 590 00:36:43,120 --> 00:36:48,300 Pojdi. Ja. >> [Neslišno študentski odziv] 591 00:36:48,300 --> 00:36:52,730 Dobro. Torej a.out, nova, foo, nova, bar, nova vrstica. 592 00:36:52,730 --> 00:36:54,980 Zakaj je tako? Vsekakor lahko potrdi vsak trenutek. 593 00:36:54,980 --> 00:36:56,940 To je nekako mehko vrstico kode. 594 00:36:56,940 --> 00:36:59,560  Prav tako natisne novo linijo samo, da bi se stvari lepše na zaslonu. 595 00:36:59,560 --> 00:37:03,730 To je zanka, ki je ponavljanjem od 0 naprej do argc, 596 00:37:03,730 --> 00:37:07,210 in to je povečevanje na vsaki ponovitvi + +. 597 00:37:07,210 --> 00:37:12,270 Torej, to je zdaj pravi natisniti niz, kot je predvideno s to% s. 598 00:37:12,270 --> 00:37:16,460 Argv [i] je precej isto idejo iz prejšnjega primera. 599 00:37:16,460 --> 00:37:19,580 Uporabili smo, da pokličete spremenljivo s, zdaj je pozval, samovoljno, argv. 600 00:37:19,580 --> 00:37:24,270 To pomeni, da natisnete i-trditev, da je bil natipkan v ukazni vrstici, 601 00:37:24,270 --> 00:37:28,690 in potem ko je to storil stvar, samo za dober ukrep natisniti še novo vrstico. 602 00:37:28,690 --> 00:37:31,600 >> Torej, kaj je videl. Naj odpreti terminalsko okno. 603 00:37:31,600 --> 00:37:37,470 Naj pripravijo argv od 1, in zdaj mi teče argv po 1, Enter. Hmm. Ok. 604 00:37:37,470 --> 00:37:40,850 Naj teče foo bar. Zanimivo. Baz. 605 00:37:40,850 --> 00:37:42,640 In če ste se kdaj spraševali, zakaj to pišem, 606 00:37:42,640 --> 00:37:45,010 to je samo tako neumen računalništvo konvencije. 607 00:37:45,010 --> 00:37:48,050 Svet se mora le verbalne ograde za besedami. 608 00:37:48,050 --> 00:37:50,090 Torej, če želite govoriti o neki splošno nizu 609 00:37:50,090 --> 00:37:53,250 računalniški znanstveniki samo ponavadi pravijo, foo, ko potrebujejo naključno besedo, 610 00:37:53,250 --> 00:37:55,530 potem pravijo, bar, če potrebujete drugo naključno besedo, 611 00:37:55,530 --> 00:37:59,100 potem pravijo BAZ če potrebujete tretja beseda, potem pa pravijo, da če potrebujejo razvrstitev za 1/4 besedo, 612 00:37:59,100 --> 00:38:01,520 in potem je tukaj še ogromno verske razprave na spletu, kaj pride za razvrstitev za, 613 00:38:01,520 --> 00:38:04,940 tako da lahko Google, da ugotovimo, kaj bi bilo drugo poljubno beseda. 614 00:38:04,940 --> 00:38:07,480 Ampak to nimajo pomena, 615 00:38:07,480 --> 00:38:10,100 Čeprav foo bar, če Google, da to ne pomeni, so se, 616 00:38:10,100 --> 00:38:12,780 , ki je del etimologije tukaj. 617 00:38:12,780 --> 00:38:17,550 >> Torej, vse to pa počne tiska 1 od teh nizov na linijo. 618 00:38:17,550 --> 00:38:19,900 Torej, če sem namesto tega, čeprav je želel, da bi dobili malo Ljubitelj, 619 00:38:19,900 --> 00:38:22,550 Domnevam, da nisem želite natisniti vsak niz na vrstico; 620 00:38:22,550 --> 00:38:26,220 Želel sem natisniti vsak znak iz vsakega niza na linijo. 621 00:38:26,220 --> 00:38:28,550 Kako bi lahko namesto tega naredil? 622 00:38:28,550 --> 00:38:33,720 Kaj moram spremeniti o tem programu, če želim natisniti ne vsako besedo 623 00:38:33,720 --> 00:38:37,290 ampak želim, da natisnite vsako besedo pismo z dopisom z dopisom, 624 00:38:37,290 --> 00:38:40,590 potem Naslednja beseda pismo z dopisom z dopisom? 625 00:38:40,590 --> 00:38:43,650 Kako združiti te ideje doslej? Ja. 626 00:38:43,650 --> 00:38:47,390 [Študent]% c. >> Redu. Tako smo nekje potrebujemo% c. 627 00:38:47,390 --> 00:38:50,680 Dobro, ker ne želim natisniti celotne nize, želim natisniti znake. Kaj še? 628 00:38:50,680 --> 00:38:54,290 >> [Neslišno študentski odziv] >> Zanimivo. 629 00:38:54,290 --> 00:38:56,860 Zato moramo nekakšno drugo dimenzijo tukaj 630 00:38:56,860 --> 00:39:02,300 ker mislim argv kot matriko, vendar je množica nizov. 631 00:39:02,300 --> 00:39:07,170 Ampak kot, recimo, 15 minutami, kaj je niz? To je niz znakov. 632 00:39:07,170 --> 00:39:12,320 Torej res, argv je array paleto likov, 633 00:39:12,320 --> 00:39:14,870 Množica nizi znakov. 634 00:39:14,870 --> 00:39:19,170 Tako se izkaže, da ga lahko uporabljamo le bolj kvadratne notacije nosilec. Torej, kaj je to. 635 00:39:19,170 --> 00:39:23,650 Na vrhu te zanke na liniji 19, bom ponoviti od i do argc, 636 00:39:23,650 --> 00:39:25,760 potem pa bom za to: 637 00:39:25,760 --> 00:39:27,580 za - jaz ne morem uporabljati zdaj. 638 00:39:27,580 --> 00:39:30,300 Rabim še spremenljivke, ker želim ponoviti več kot besede 639 00:39:30,300 --> 00:39:32,640 potem pa tudi nad črk v besede 640 00:39:32,640 --> 00:39:37,280 Tako sem nekako imajo navpične osi in horizontalni osi, nekako konceptualno. 641 00:39:37,280 --> 00:39:43,930 Torej, int j postane 0, potem pa sem hotel narediti j dokler je j manj kot - in to bom čisto v bit. 642 00:39:43,930 --> 00:39:48,410 Kako izbirate več črk v nizu? To smo storili pred nekaj trenutki. 643 00:39:48,410 --> 00:39:54,670 Strlen od argv [i]. Dobro. 644 00:39:54,670 --> 00:39:57,860 In spet, sem kar malo neučinkovitost tukaj ne ustvarjajo n ali karkoli, 645 00:39:57,860 --> 00:39:59,610 vendar bomo vrnili k temu. 646 00:39:59,610 --> 00:40:03,270 >> Torej, zdaj j + +. Zdaj moram še alinee tukaj. 647 00:40:03,270 --> 00:40:06,950 Kaj naj zdaj želite natisniti na vsaki ponovitvi? 648 00:40:06,950 --> 00:40:09,720 [Neslišno študentski odziv] >> Tako [i] mi bo dal besedo. 649 00:40:09,720 --> 00:40:12,910 [I] [j], nekako kot matriko. 650 00:40:12,910 --> 00:40:14,810 Tisti, ki ste z ozadjem math-y, 651 00:40:14,810 --> 00:40:19,340 smo nekako indeksiranje še globlje v tej matriki ali ta množica polj, 652 00:40:19,340 --> 00:40:21,380 Ta 2-dimenzionalno strukturo. 653 00:40:21,380 --> 00:40:25,070 Torej, zdaj pa poglejmo, kaj se dogaja tukaj. Naj odpre svojo večjo terminalsko okno. 654 00:40:25,070 --> 00:40:28,170 Naj ponovitev naredili iz argv od 1. 655 00:40:28,170 --> 00:40:33,090 In sem zajebal tukaj, kar je dobra lekcija, ker sem preveč pozabil, da to storijo. 656 00:40:33,090 --> 00:40:37,150 Kaže razglasitvi C knjižnico "strlen" z nepodpisano tip "- 657 00:40:37,150 --> 00:40:40,360 Sploh ne vem, kaj ostali ta način, vendar sem videl že prej, 658 00:40:40,360 --> 00:40:42,000 implicitno razglasi. 659 00:40:42,000 --> 00:40:45,540 Vsakič, ko smo videli to napako, kaj to ponavadi pomeni? 660 00:40:45,540 --> 00:40:48,520 >> [Neslišno študentski odziv] >> Pozabil sem knjižnico do vrha. Toda počakaj malo. 661 00:40:48,520 --> 00:40:51,690 Ponavadi sem zamočil, ker sem pozabil CS50 knjižnico, ampak to je tam. 662 00:40:51,690 --> 00:40:54,480 Ponavadi sem zamočil, ker sem pozabil standardnega I / O. 663 00:40:54,480 --> 00:40:57,960 In odkrito povedano, sploh ne potrebujemo. Mi ne uporabljate GetString danes. 664 00:40:57,960 --> 00:40:59,900 Torej, kaj mi manjka? 665 00:40:59,900 --> 00:41:04,860 Obstaja še ena knjižnica, zdaj moramo uporabiti občasno imenuje string.h, 666 00:41:04,860 --> 00:41:08,980 in to je samo še ena knjižnica, ki ima več funkcij, ki niso v standardni I / O. 667 00:41:08,980 --> 00:41:11,640 >> Torej greva nazaj v mojo velika okna terminala. 668 00:41:11,640 --> 00:41:16,670 Ok. Zdaj, prekleto, mislim, da sem se motil. Bil sem z CS50 knjižnico. 669 00:41:16,670 --> 00:41:18,460 Tako bomo lahko to popravimo na enega od 2 načinov. 670 00:41:18,460 --> 00:41:21,510 Mi lahko sprejme za usposabljanje kolesa off prav zdaj, in prav to, 671 00:41:21,510 --> 00:41:26,600 ali vrsta dajva o hrani, da poenostavitev samo za zdaj, prilepiti nazaj, 672 00:41:26,600 --> 00:41:30,180 rešili ta problem, in zdaj nazaj na terminalskem oknu. 673 00:41:30,180 --> 00:41:33,080 Zato mora biti jasno, v knjižnici CS50 ni samo funkcije, 674 00:41:33,080 --> 00:41:36,920 to je tudi ključna niz, ki je razlog, zakaj je ta napaka se je pravkar zgodilo. 675 00:41:36,920 --> 00:41:43,010 >> Torej, gremo. Popravil sem obe knjižnice vprašanj. Enter. Dobro. 676 00:41:43,010 --> 00:41:49,250 Argv po 1, foo bar, Enter. Odlično. 677 00:41:49,250 --> 00:41:52,830 Torej, zdaj imamo vsako črko vsake besede natisnjene na linijo 1, 678 00:41:52,830 --> 00:41:55,290 kar ne pomeni, da za zelo zanimiv program, 679 00:41:55,290 --> 00:41:59,350 ampak obvestilo sedaj imamo sposobnost ne samo nad ponavljanjem besed 680 00:41:59,350 --> 00:42:04,090 ampak tudi v posameznih črk v besede, ki zveni grozno pozna 681 00:42:04,090 --> 00:42:10,330 da celo najpreprostejši aplikacije, kot so premešavo črk v nizu, kot je ta. 682 00:42:10,330 --> 00:42:12,410 Gremo naprej in vzamemo 5-minutni odmor tukaj. 683 00:42:12,410 --> 00:42:14,410 In ko se vrnemo, bomo začeli govoriti o učinkovitosti 684 00:42:14,410 --> 00:42:17,670 , s katerim lahko te stvari bolje. 685 00:42:19,370 --> 00:42:21,900 >> V redu. Mi smo nazaj. 686 00:42:21,900 --> 00:42:26,970 Zahvaljujoč našemu TF, ki igra veliko bananagrams, 687 00:42:26,970 --> 00:42:30,000 smo dejansko imeli cel kup znakov z nami danes 688 00:42:30,000 --> 00:42:32,520 fizično utelešenih v teh majhnih plastičnih delov, 689 00:42:32,520 --> 00:42:36,910 in mi predlagala, da ta prazen bel skrilavca tukaj predstavlja RAM v mojem računalniku - 690 00:42:36,910 --> 00:42:39,790 laptop, desktop, karkoli - in izgleda veliko njim 691 00:42:39,790 --> 00:42:44,090 ker če začnemo sekanje to RAM na majhne bajt v velikosti zrna, 692 00:42:44,090 --> 00:42:48,970 dajmo reči, da samovoljno nekaj, velikost in zamegljen predstavlja - 693 00:42:48,970 --> 00:42:52,430 tam bomo šli, in kaj je pomanjšati malo tu - 694 00:42:52,430 --> 00:42:56,120 Recimo nekaj, kar predstavlja eno velikost bajt. 695 00:42:56,120 --> 00:43:00,400 Tako smo lahko zares ustreza cel kup bajte ali znakov znotraj tega spomina, 696 00:43:00,400 --> 00:43:02,860 kot je predlagal relativnega tukaj. 697 00:43:02,860 --> 00:43:06,780 >> Torej, predvidevam, da je zdaj cilj je, da rezervirati pomnilnika za niz. 698 00:43:06,780 --> 00:43:08,680 Kako to dejansko deluje? 699 00:43:08,680 --> 00:43:11,380 V programih, ki smo jih pisali, smo ponavadi uporabljali GetString, 700 00:43:11,380 --> 00:43:16,300 zdaj pa je jasno, da je to drug kanal, preko katerega bomo lahko dobili navodilo za vnos v argv 701 00:43:16,300 --> 00:43:18,190 z argumenti v ukazni vrstici. 702 00:43:18,190 --> 00:43:20,580 Toda kaj se v resnici dogaja pod pokrovom? 703 00:43:20,580 --> 00:43:24,920 Izkazalo se je, če rečemo - gremo nazaj poiščite GetString - funkcijo GetString 704 00:43:24,920 --> 00:43:28,190 V knjižnici CS50, je uporabnik pozvan za niz, 705 00:43:28,190 --> 00:43:30,780 uporabnik vrste v neki besedi - dajmo ga pokličete Pozdravljeni. 706 00:43:30,780 --> 00:43:35,410 In smo bili pravi v zadnjih nekaj tednih, da se je donosnost vrednost GetString 707 00:43:35,410 --> 00:43:37,750 je v bistvu niz, kot je beseda Pozdravljeni. 708 00:43:37,750 --> 00:43:39,660 >> Toda kaj je GetString res delaš? 709 00:43:39,660 --> 00:43:45,230 Kot uporabnik vpiše v HELLO, Enter GetString je poskušal ugotoviti, 710 00:43:45,230 --> 00:43:47,930 ok, koliko znakov je to? To je H-E-L-L-O. 711 00:43:47,930 --> 00:43:52,500 Zato je treba dodeliti, je potrebno vprašati, operacijski sistem Linux - v tem primeru - 712 00:43:52,500 --> 00:43:55,410 vsaj 5 bajtov za shranjevanje Pozdravljeni. 713 00:43:55,410 --> 00:43:59,570 In kaj se potem nadaljuje storiti, ko je dobil nazaj tiste 5 bajtov iz operacijskega sistema 714 00:43:59,570 --> 00:44:04,120 je za postavitev HELLO back to back to back to back. 715 00:44:04,120 --> 00:44:11,070 In kaj se v resnici vrnil iz GetString je kos podatkov, ki izgleda takole. 716 00:44:11,070 --> 00:44:16,850 Ampak to je malo netočno, saj se je izkazalo, da to ni tako enostavno, 717 00:44:16,850 --> 00:44:20,310 kot le shranjevanje Pozdravljeni v spominu računalnika 718 00:44:20,310 --> 00:44:24,140 Domnevam, da zato, ker moj program, da pišem v C pokliče GetString spet, 719 00:44:24,140 --> 00:44:28,210 in naslednjo besedo uporabnik vnese v je Adijo. 720 00:44:28,210 --> 00:44:31,300 No, moram namestiti, da se beseda BYE nekje v spominu. 721 00:44:31,300 --> 00:44:33,790 Ne morem clobber Pozdravljeni. 722 00:44:33,790 --> 00:44:37,320 Na primer, jaz ne želim, da računalnik šele začetek prepisovanje takole 723 00:44:37,320 --> 00:44:41,400 prvotna beseda, saj lahko še vedno uporabljate besedo Pozdravljeni v spremenljivko 724 00:44:41,400 --> 00:44:43,070 nekje drugje v mojem programu. 725 00:44:43,070 --> 00:44:45,900 >> Torej, B-Y-E je končal nekje drugje v pomnilniku. 726 00:44:45,900 --> 00:44:50,460 Toda konvencija je običajno, da je naslednji niz lahko dodeli 727 00:44:50,460 --> 00:44:54,940 Verjetno, vendar ne vedno, se bo končala ob prvi mesto v pomnilniku. 728 00:44:54,940 --> 00:44:57,370 In če nisem vprašal operacijski sistem za vsak spomin 729 00:44:57,370 --> 00:45:01,380 od zadnjega, ko sem klical GetString, odds so besede BYE 730 00:45:01,380 --> 00:45:05,790 se bo končal takoj za besedo Pozdravljeni v pomnilniku. 731 00:45:05,790 --> 00:45:10,550 Toda na tej točki lahko morda videli, če potencialni problem pojavi. 732 00:45:10,550 --> 00:45:13,310 Ker naslednji kose spomina, naslednjih bajtov, ki so bili samo prosto - 733 00:45:13,310 --> 00:45:18,230 čisto belo skrilavec - v spomin na računalniku so bili zraven HALO, 734 00:45:18,230 --> 00:45:23,670 se počuti kot v prvem nizu sem prosil za lahko nenadoma spremeniti sedaj 735 00:45:23,670 --> 00:45:26,410 ker sem bistveno spremenila, da HELLOBYE 736 00:45:26,410 --> 00:45:31,310 namesto da bi nekako demarcing začetek adijo in konec Pozdravljeni. 737 00:45:31,310 --> 00:45:33,920 >> Tako se izkaže, da to, kar se v resnici dogaja pod pokrovom motorja, 738 00:45:33,920 --> 00:45:37,570 , ki ste jih morda zagledali na spletnih referenc ali razdelku ali knjige 739 00:45:37,570 --> 00:45:41,780 ali pa sploh ne še zdaj, je, da je pravzaprav namerno razmejitev 740 00:45:41,780 --> 00:45:45,890 med besedami v spomin računalnika. 741 00:45:45,890 --> 00:45:52,480 In v resnici, v tem primeru v tej zadevi, ne samo da BYE tik HALO, 742 00:45:52,480 --> 00:45:58,610 Namesto, računalnik daje poseben značaj, posebna null značaj, če se tako izrazim, 743 00:45:58,610 --> 00:46:03,050 ki je zastopana z označevalcem s poševnico 0. 744 00:46:03,050 --> 00:46:06,700 Tako dolgo zgodbo, opozarjajo, da so znaki predstavljeni v ASCII. 745 00:46:06,700 --> 00:46:09,680 ASCII je samo preslikava med številkami in črkami, 746 00:46:09,680 --> 00:46:13,870 in večina teh pisem začne približno 65 za kapitalske A, 747 00:46:13,870 --> 00:46:19,780 vendar se izkaže, lahko zagotovo predstavlja število 0 kot celo število ali binarno, 748 00:46:19,780 --> 00:46:22,690 in izkazalo se je svet odločil, dolgo, dolgo nazaj, "Veš kaj?" 749 00:46:22,690 --> 00:46:27,550 "Gremo rezerve številka 0 ne predstavlja nobenih znakov na tipkovnici - 750 00:46:27,550 --> 00:46:30,810 "Ni črke, številke, ne brez ločila. 0 je nekaj posebnega." 751 00:46:30,810 --> 00:46:35,830 "To se dogaja, da je treba posebno null značaj, in gremo pisati kot \ 0". 752 00:46:35,830 --> 00:46:41,170 Razlika je, če smo le napisal 0, 0, je znak. 753 00:46:41,170 --> 00:46:45,700 Spomnimo se, da so kode ASCII za 0, za 1, za 2 osebi, za 3 754 00:46:45,700 --> 00:46:50,570 ker je znak 0, se razlikuje od številke 0. 755 00:46:50,570 --> 00:46:54,270 In lahko vidite, da če pogledaš nazaj od 1. tednu, ko smo govorili o ASCII, 756 00:46:54,270 --> 00:46:59,130 0 in 1, 2 in 3 pa vse do 9 imeli svoje ASCII kode. 757 00:46:59,130 --> 00:47:02,300 Niso po naključju, od 0 do 9. Oni so zelo različni. 758 00:47:02,300 --> 00:47:08,770 Torej, 0 pomeni le: "Jaz sem poseben" in \ 0 pomeni, dobesedno, "Nisem 0 lik." 759 00:47:08,770 --> 00:47:11,360 "Jaz sem to posebno vrednost null lik." 760 00:47:11,360 --> 00:47:16,930 Zato sem dejansko potrebujejo še enega, ker ne morem narediti isto napako dvakrat. 761 00:47:16,930 --> 00:47:21,550 >> Torej, po besedi Bye smo tudi dogaja, da potrebujejo še enega od teh null znakov. 762 00:47:21,550 --> 00:47:27,090 Naj vzamem moje pero tukaj in mi hitro sestaviti novo \ 0 763 00:47:27,090 --> 00:47:30,480 tako da je po tem, ko sem vprašal, operacijski sistem za godala 2 764 00:47:30,480 --> 00:47:33,270 preko GetString sledil nov razpis za GetString, 765 00:47:33,270 --> 00:47:35,640 To je tisto, kar je dejansko v spominu. 766 00:47:35,640 --> 00:47:39,900 Torej, ko se vrnem niz, sem res dobili nazaj, da 767 00:47:39,900 --> 00:47:43,450 in ko sem dobil naslednji niz, sem res dobili nazaj, da. 768 00:47:43,450 --> 00:47:47,910 Zato se postavlja vprašanje, strlen, najprej, kaj naj bi se vrnil? 769 00:47:47,910 --> 00:47:54,650 Ko sem poklical strlen na niz s in je bila beseda HELLO, da si ga vnesli v, 770 00:47:54,650 --> 00:47:57,800 kaj smo rekli seveda dolžina Pozdravljeni bil pred nekaj minutami? 771 00:47:57,800 --> 00:48:01,290 To je bila 5, kajne? H-E-L-L-O. In to je res, kako strlen dela. 772 00:48:01,290 --> 00:48:05,670 Vrne tisto, kar bi normalen človek pričakuje dolžino niza biti. 773 00:48:05,670 --> 00:48:11,030 Toda v resnici, kako velik je niz znakov, ki se zdravo shranjevanje? 774 00:48:11,030 --> 00:48:12,770 Pravzaprav je 6. 775 00:48:12,770 --> 00:48:15,740 Torej strlen ne omenja to dejstvo za vas. 776 00:48:15,740 --> 00:48:20,300 Ampak pod pokrovom računalnik dejansko uporabo 6 bajtov za shranjevanje 5-črkovno besedo 777 00:48:20,300 --> 00:48:22,380 in to je res, ne glede na to, kako dolgo je beseda. 778 00:48:22,380 --> 00:48:26,470 Tam je vedno bo posebna zaključku null lik na koncu niza 779 00:48:26,470 --> 00:48:28,800 da demarc svojo skupno dolžino. 780 00:48:28,800 --> 00:48:33,430 >> Torej, če ste sedaj oseba za izvajanje strlen 20, 30 let nazaj, 781 00:48:33,430 --> 00:48:35,520 kako si šel o izvajanju strlen sam? 782 00:48:35,520 --> 00:48:39,980 Mi samo po sebi umevno, da obstaja, tako kot se nam zdi samoumevno, da obstaja printf, 783 00:48:39,980 --> 00:48:42,850 če pa Hello je beseda v vprašanju 784 00:48:42,850 --> 00:48:45,220 in kaj imam v spominu, je nekaj, kar je videti tako, 785 00:48:45,220 --> 00:48:48,130 če bi moral reimplement strlen, ker smo vas prosili, da 786 00:48:48,130 --> 00:48:50,260 ali zato, ker, odkrito povedano, niste vedeli obstajala strlen - 787 00:48:50,260 --> 00:48:54,280 boste morali roll tole na lastno odgovornost - kako bi lahko izvajala strlen 788 00:48:54,280 --> 00:48:57,760 kadar se dajejo nekaj, kar izgleda takole? 789 00:48:57,760 --> 00:49:02,750 Zdaj, ko vemo niz je niz, lahko izbirate v vsakem od posameznih likov 790 00:49:02,750 --> 00:49:06,320 z nekaj podobnega - poskusimo to storiti na letenje. 791 00:49:06,320 --> 00:49:12,060 >> Naj gredo v napravo. Naj ustvariti novo datoteko, strlen.c. 792 00:49:12,060 --> 00:49:19,260 Naj gredo naprej in zdaj ne vključujejo stdio.h, tako da imamo dostop do printf. 793 00:49:19,260 --> 00:49:25,820 Naj jaz int main (void). Oh. Jaz bom to sam za zdaj takrat. [Smeh] 794 00:49:25,820 --> 00:49:28,300 Hvala. 795 00:49:28,300 --> 00:49:31,000 To je tisto, kar delam. V redu. 796 00:49:31,000 --> 00:49:34,820 Torej, preden sem se obrnil na zaslonu, sem tipkal vse to. 797 00:49:34,820 --> 00:49:37,550 In zdaj, kaj bom storiti, je naslednje: 798 00:49:37,550 --> 00:49:40,360 printf ("Daj mi niz:") 799 00:49:40,360 --> 00:49:42,700 To je samo puhasto navodila. 800 00:49:42,700 --> 00:49:45,700 Zdaj pa jaz = GetString String s. 801 00:49:45,700 --> 00:49:47,260 Sem že morali nekaj spremeniti zdaj. 802 00:49:47,260 --> 00:49:52,740 Jaz sem z uporabo CS50 knjižnice naenkrat, zato naj gredo naprej in vnesite cs50.h. 803 00:49:52,740 --> 00:50:00,720 In zdaj naredimo to: printf ("dolžina:% d, strlen [i] - 804 00:50:00,720 --> 00:50:03,540 in nisem še končal. Kaj še moram dodati, da ta program? 805 00:50:03,540 --> 00:50:05,740 >> [Študent] string.h. >> String.h. 806 00:50:05,740 --> 00:50:10,800 Torej za zdaj, bomo z strlen, tako da je poskrbite, da prevajalnik ve, kje je to, 807 00:50:10,800 --> 00:50:12,390 Tako malo duševno zdravje preveriti. 808 00:50:12,390 --> 00:50:16,400 Grem niz v skladu 8, 9 in v skladu bom tiskanje po dolžini z% d. 809 00:50:16,400 --> 00:50:19,400 Torej, gremo naprej in odprite tole. 810 00:50:19,400 --> 00:50:23,380 Smo, da strlen - pripravlja redu - 811 00:50:23,380 --> 00:50:30,120 strlen - Naj povečavo - Enter, H-E-L-L-O, Enter. Dolžina je 5. 812 00:50:30,120 --> 00:50:32,730 >> Ok, strlen zdi, da dela, ampak svet vedel. 813 00:50:32,730 --> 00:50:37,310 Torej, kaj je zdaj izvajajo strlen sebe, kot sledi. 814 00:50:37,310 --> 00:50:39,490 Naj bo to knjižnico stran. 815 00:50:39,490 --> 00:50:42,590 Nimamo več dostopa do string.h, ker sploh nisem vedel, da obstaja. 816 00:50:42,590 --> 00:50:45,970 Ampak to je v redu, ker sem lahko izvaja sam strlen 817 00:50:45,970 --> 00:50:50,200 in jih sprejeti niz imenovano vhod, 818 00:50:50,200 --> 00:50:53,830 in zdaj moram ugotoviti, koliko tega niza. 819 00:50:53,830 --> 00:50:55,880 Torej, kako lahko to storim? 820 00:50:55,880 --> 00:51:00,190 Kaj pa če jaz - da vidimo, kako to storiti - Kaj hočeš narediti? 821 00:51:00,190 --> 00:51:04,130 >> [Neslišno študentski odziv] >> Ok. 822 00:51:04,130 --> 00:51:05,970 Torej, lahko to storimo v kup načinov. Naj poskusim, naj ta pristop. 823 00:51:05,970 --> 00:51:10,220 Naj dam notr spremenljivko i, zato sem se začne pri 0. 824 00:51:10,220 --> 00:51:19,380 In naj vam povem to: medtem ko je vnos [i] ni enak primer? \ 0. 825 00:51:19,380 --> 00:51:23,480 Tako se je izkazalo, tako kot v primeru vseh znakov, ko jih pišejo dobesedno v programu, 826 00:51:23,480 --> 00:51:25,940 boste morali uporabiti apostrof, ne narekovajev. 827 00:51:25,940 --> 00:51:29,250 Torej, če sem jo napisali pismo a, bi to storil, črko B, bi to storil. 828 00:51:29,250 --> 00:51:33,440 To je v nasprotju, bi bil niz, ne individualne narave. 829 00:51:33,440 --> 00:51:38,470 >> Zato želim \ 0 dobesedno. Kaj hočem storiti v to zanko? 830 00:51:38,470 --> 00:51:42,650 Pravzaprav moram še spremenljivko, zato int dolžina dobi 0. 831 00:51:42,650 --> 00:51:46,190 Tudi če ne bi bili prepričani, zakaj smo začeli tako zavzeto delati, 832 00:51:46,190 --> 00:51:50,110 zdaj, ko gremo po tej poti, kaj hočem narediti na liniji 9? 833 00:51:50,110 --> 00:51:55,820 dolžina + + in nato dol na liniji 10, donos dolžine. 834 00:51:55,820 --> 00:51:58,370 Torej, kako je strlen izvaja? 835 00:51:58,370 --> 00:52:00,550 To je dejansko izvajal verjetno takole. 836 00:52:00,550 --> 00:52:03,470 Mogoče oseba uporabila za zanke, morda, medtem ko je zanka - kdo ve? 837 00:52:03,470 --> 00:52:05,940 Mi bi res morali pogledati pod pokrov motorja pri dejanski kodi 838 00:52:05,940 --> 00:52:08,520 V nekaterih datoteki z imenom string.c verjetno. 839 00:52:08,520 --> 00:52:10,480 >> Ampak tukaj kaj je razmišljati o tem, kaj počnem. 840 00:52:10,480 --> 00:52:13,640 Jaz razglasitvi spremenljivko sem klicala, ki določa, da je enak 0. 841 00:52:13,640 --> 00:52:17,520 Jaz sem nato razglasila drugo spremenljivko z imenom dolžino, ki določa, da je enak 0. 842 00:52:17,520 --> 00:52:25,440 Potem sem rekel, medtem ko je i-znak na vhodu ni enak posebni značaj null, \ 0, 843 00:52:25,440 --> 00:52:27,070 prirastek dolžine. 844 00:52:27,070 --> 00:52:32,550 Toda takoj, ko je i-ta lik je poseben znak, kaj se dogaja z zanko? 845 00:52:32,550 --> 00:52:36,540 To kratkih stikov. To ustavi, kar pomeni, da smo nato takoj vrne dolžino. 846 00:52:36,540 --> 00:52:40,740 >> Torej, če nisem nered, gremo naprej in iti nazaj v svojo terminalsko okno. 847 00:52:40,740 --> 00:52:43,550 Naj prevedem. In sem zajebal. 848 00:52:43,550 --> 00:52:46,320 Nezdružljiva ponovna deklaracija funkcije strlen knjižnice. 849 00:52:46,320 --> 00:52:48,650 Tako sem se trudil, da bi dobili preveč pameten za moje dobro tukaj. 850 00:52:48,650 --> 00:52:51,610 Prevajalnik dejansko ve, da je funkcija imenuje strlen 851 00:52:51,610 --> 00:52:55,290 Čeprav nismo vključeni v knjižnico. To je v redu. Karkoli. 852 00:52:55,290 --> 00:52:58,230 Mi smo le, da bo potem sodelovati. Naj preimenovati dolžino. 853 00:52:58,230 --> 00:53:04,110 Naj spremenijo njegovo uporabo na dolžino tukaj, in to bo Jek srečnejši. 854 00:53:04,110 --> 00:53:08,900 Naj omenim, da zato, ker so nekateri od teh funkcij, tako prekleto pogosti - 855 00:53:08,900 --> 00:53:12,390 strlen, prinf - morajo dejansko neke vrste posebnim statusom. 856 00:53:12,390 --> 00:53:15,310 In tako Jek le malo ve, kaj posebnega o njih. 857 00:53:15,310 --> 00:53:18,760 To ni vedno velja za večino funkcij, tako da je, zakaj sva kričala. 858 00:53:18,760 --> 00:53:21,350 >> Naj poskusim še enkrat. K sreči je delal ta čas. 859 00:53:21,350 --> 00:53:23,560 Torej, zdaj mi teče svojo strlen program. 860 00:53:23,560 --> 00:53:29,740 Daj mi niz: H-E-L-L-O, Enter. In sem zamočil. 861 00:53:29,740 --> 00:53:34,750 Zakaj? >> [Neslišno študentski odziv] >> Točno tako. 862 00:53:34,750 --> 00:53:39,180 Torej imam jaz tukaj zelo lepo je videti neskončno zanko 863 00:53:39,180 --> 00:53:42,270 ker, čeprav sem povečevanje dolžine na vsaki ponovitvi 864 00:53:42,270 --> 00:53:47,860 Kaj me očitno ne gre? Jaz nisem povečevanje. Ok. Enostavna rešitev. Ja? 865 00:53:47,860 --> 00:53:52,430 Ok. No zdaj bomo Zamjeriti nekatere druge skupne napake, če rabim varovala. 866 00:53:52,430 --> 00:53:54,430 In odkrito povedano, ta oznaka se začenjajo videti grda, 867 00:53:54,430 --> 00:53:56,460 Tako bomo lahko zabodel čiščenje to v trenutku. 868 00:53:56,460 --> 00:53:58,810 Ampak zdaj sem povečevanje tako dolžino in jaz. 869 00:53:58,810 --> 00:54:02,630 Odkrito povedano, sem že videl priložnost za izboljšanje tukaj, vendar bomo vrnili k temu. 870 00:54:02,630 --> 00:54:05,270 >> Torej, zdaj pa le poskrbite, da smo vsaj napreduje. 871 00:54:05,270 --> 00:54:08,320 To se je zgodilo nekaj od tebe, in sem zanemaril omenjam vnaprej. 872 00:54:08,320 --> 00:54:12,420 Ko pa imajo to nesrečo, da scenarij, kot je ta, kako to popravimo 873 00:54:12,420 --> 00:54:15,130 kratko ponovni zagon naprave ali računalnika ali zaprli okno? 874 00:54:15,130 --> 00:54:16,860 To je pravzaprav preprost. 875 00:54:16,860 --> 00:54:21,680 Nadzor C bo poslal tale simbol korenček C, in da samo konča večino programov. 876 00:54:21,680 --> 00:54:25,990 Če imate res slab neskončno zanko, ki se tiska stuff neskončno mnogokrat, 877 00:54:25,990 --> 00:54:29,960 Včasih boste morda morali zadeti Nadzorna C tisočkrat, da bi dejansko slišali. 878 00:54:29,960 --> 00:54:33,910 Torej, samo zavedaš se zdaj, ker ne bom ničesar tiskanje, ki je bilo precej enostavno. 879 00:54:33,910 --> 00:54:37,970 In tehnično, enkrat zadostuje, vendar sem dobil neučakan in sem ponavadi zadel to, da veliko krat. 880 00:54:37,970 --> 00:54:43,400 >> Torej strlen. Daj mi niz: Pozdravljeni. Ali bo šlo tokrat? 881 00:54:44,580 --> 00:54:47,490 Ok. Druga pogosta napaka. Morali ponovno prevesti. 882 00:54:47,490 --> 00:54:50,430 To je bilo namerno, da je eden. V redu. 883 00:54:50,430 --> 00:54:54,260 Torej strlen, H-E-L-L-O, Enter. Odlično. 884 00:54:54,260 --> 00:54:55,910 Tako imamo zdaj strlen do 5. 885 00:54:55,910 --> 00:54:58,100 Tako smo dobesedno znova napisan, da je kolo. 886 00:54:58,100 --> 00:55:02,080 Torej, zdaj pa je čisto tole, ker to ne pomeni, da sem navdušena 887 00:55:02,080 --> 00:55:04,080 zasnovi mojo kodo. 888 00:55:04,080 --> 00:55:07,200 Kaj lahko jasno odpravili v ta program, da počisti to izmislil? 889 00:55:07,200 --> 00:55:11,840 [Neslišno študentski odziv] >> Ja. Dobesedno smo zdravljenje i in dolžino enako. 890 00:55:11,840 --> 00:55:16,440 Torej, zakaj ne bi raje dobil pameten in reči, pa dolžina? 891 00:55:16,440 --> 00:55:20,450 Namesto tega naj samo call it dolžina za začetek, da inicializirati na 0 892 00:55:20,450 --> 00:55:23,340 saj privzeto niz nima dolžine, dokler ne ugotovimo, kaj je to. 893 00:55:23,340 --> 00:55:26,160 >> Zdaj bomo to storili, zdaj je to zelo elegantno program. 894 00:55:26,160 --> 00:55:28,660 Ena spremenljivka. Sem ga očistiti, ga poostrili. 895 00:55:28,660 --> 00:55:31,980 Torej, zdaj gremo nazaj v svojo terminalsko okno. Gremo naprej in zagon tega. 896 00:55:31,980 --> 00:55:35,670 Naredite strlen. Izgleda dobro. Run strlen spet Enter. 897 00:55:35,670 --> 00:55:40,680 Daj mi niz: Pozdravljeni, Enter. In zdi se, da bodo delali kot 5. 898 00:55:40,680 --> 00:55:45,580 Zdaj pa mora biti jasno, če ne bi napisal, na primer, v HELLO 1 niz 899 00:55:45,580 --> 00:55:48,840 in potem BYE v drugi državi, lahko prav gotovo imeli več besede. 900 00:55:48,840 --> 00:55:53,150 Če izraz sem pravzaprav želel, da tip ni bil HELLO pa, na primer, 901 00:55:53,150 --> 00:55:58,920 Pozdravljen, svet, obvestilo, da tisto, kar nam ne bi bilo, je ta situacija tukaj, kajne? 902 00:55:58,920 --> 00:56:00,580 To bi lahko sklepali, da je to 2 strune. 903 00:56:00,580 --> 00:56:06,060 Lahko zagotovo znake, bar, prostor, tako da če bi dejansko vnesli v daljšem stavku 904 00:56:06,060 --> 00:56:08,390 kot Hello world, kaj bi res imamo v spominu 905 00:56:08,390 --> 00:56:12,730 izgleda malo kaj takega obstaja. 906 00:56:12,730 --> 00:56:18,910 >> V redu. Vsa vprašanja, nato pa predstavitev nizov tukaj? 907 00:56:18,910 --> 00:56:20,450 Ne? V redu. 908 00:56:20,450 --> 00:56:25,130 Zato sem prej povedal, da kliče strlen znova in znova, kot da namenoma 909 00:56:25,130 --> 00:56:28,070 verjetno ni najboljša ideja, saj boste, da se delaš cel kup dela 910 00:56:28,070 --> 00:56:30,280 spet in spet in spet. 911 00:56:30,280 --> 00:56:36,150 Res, kakšno delo je potrebno za ugotoviti dolžino niza, očitno? 912 00:56:36,150 --> 00:56:40,720 Boste morali začeti na začetku, nato pa poglej, poglej, poglej, poglej, poglej 913 00:56:40,720 --> 00:56:44,930 dokler ne boste končno videli, da posebni značaj, na kateri točki, ah, zdaj vem, koliko. 914 00:56:44,930 --> 00:56:48,040 Torej, prej, ko smo imeli strlen se je spet klicala in znova in znova, 915 00:56:48,040 --> 00:56:52,080 razlog, zakaj sem predlagal, da je malo butast, ker je spet, da izgleda, da je niz. 916 00:56:52,080 --> 00:56:54,880 To se ne bo spremenilo vsakič, ko Ponovil skozi neko zanko, 917 00:56:54,880 --> 00:56:56,890 tako da delaš nepotrebno delo. 918 00:56:56,890 --> 00:57:00,620 Hkrati pa bi morali vedeti, kot prahi, da prevajalniki, kot Jek v teh dneh 919 00:57:00,620 --> 00:57:02,530 so razvili v mnogih letih, 920 00:57:02,530 --> 00:57:05,690 prevajalnika in pisatelji, programerji, so zelo pametni. 921 00:57:05,690 --> 00:57:10,170 In tako se je izkazalo, da lahko Jek in drugi prevajalniki dejansko ugotovimo, da je 922 00:57:10,170 --> 00:57:13,650 ok, da si ti napisala strlen v vašem stanju, 923 00:57:13,650 --> 00:57:17,520 kar tehnično pomeni, da bi mu pravimo znova in znova in znova. 924 00:57:17,520 --> 00:57:21,880 Vendar pa lahko pametni prevajalniki dejansko optimizira tiste vrste slabih odločitev uporabnikov 925 00:57:21,880 --> 00:57:23,870 od kode za odpravo stvari. 926 00:57:23,870 --> 00:57:27,360 >> Torej ne le zavedati, da včasih prevajalnik je pametnejši od nas 927 00:57:27,360 --> 00:57:29,210 in bo nekakšen skriti svoje lastne napake. 928 00:57:29,210 --> 00:57:31,620 Ampak seveda, ko gre za problem sklopov in podobno, 929 00:57:31,620 --> 00:57:35,340 ne bi razmišljal o tem bistveno napačnih konstrukcijskih odločitev 930 00:57:35,340 --> 00:57:38,110 lahko iz preprostega razloga, da bomo opravljali tako več dela 931 00:57:38,110 --> 00:57:41,330 kot smo dejansko narediti. Ampak koliko več dela? 932 00:57:41,330 --> 00:57:44,960 V primeru Hello world, začnimo posplošiti na velikost tega problema. 933 00:57:44,960 --> 00:57:48,100 Kakšna je dolžina problem, ali je velikost problema 934 00:57:48,100 --> 00:57:50,770 ko je beseda si ga vnesli v HELLO je? 935 00:57:50,770 --> 00:57:53,790 To je očitno 5, 6 mogoče. Plus ali minus 1. Karkoli. 936 00:57:53,790 --> 00:57:55,680 To je tako blizu, da bomo samo pokliči jo 5. 937 00:57:55,680 --> 00:58:00,480 >> Torej, kaj je velikost problema tukaj, ko poskuša ugotoviti, koliko Halo? 938 00:58:00,480 --> 00:58:06,790 To je 1, 2, 3, 4, 5, 6 in morda za zadnji znak, vendar naj posploševati, da so n. 939 00:58:06,790 --> 00:58:10,300 Torej n, samo spremenljivka n, je tisto, kar bi običajno uporabljajo računalniški znanstveniki 940 00:58:10,300 --> 00:58:13,890 opisati obseg problema, problem pri roki, je, kako dolgo je halo? 941 00:58:13,890 --> 00:58:17,050 Koliko časa traja strlen? 942 00:58:17,050 --> 00:58:21,010 To traja o vrstnem redu korakov n, kjer je vsak korak pomeni pogled na naravo, 943 00:58:21,010 --> 00:58:23,350 pogled na naravo, pogled na naravo. 944 00:58:23,350 --> 00:58:26,850 In smo imeli to razpravo, medtem ko nazaj, število operacij, kar traja. 945 00:58:26,850 --> 00:58:29,910 Že prvi dan v razredu smo imeli vsi nerodno stand up, 946 00:58:29,910 --> 00:58:32,060 in potem vsi začeli off seznanjanje s seboj 947 00:58:32,060 --> 00:58:35,990 da bi se dejansko šteje idealno, koliko ljudi je bilo v sobi. 948 00:58:35,990 --> 00:58:39,860 In tako smo naredili še eno stvar, s katerim, če sem to storil namesto stara šola način 949 00:58:39,860 --> 00:58:44,800 o šele začenjajo 1, 2, 3, 4, 5, 6 in tako naprej, 950 00:58:44,800 --> 00:58:49,360 da je preveč, je velikost tega problema je bil velikosti n. Bilo je n ljudi v sobi. 951 00:58:49,360 --> 00:58:52,010 Ampak sem lahko pospeši, da se, v redu? Osnovna šola ime, da bi lahko začnemo v 2s. 952 00:58:52,010 --> 00:58:55,560 2, 4, 6, 8, 10, 12. In da se počuti tako veliko hitreje, in dejansko je. 953 00:58:55,560 --> 00:59:01,720 To je dobesedno dvakrat hitreje, vendar še enkrat, če je še 400 ljudi, ki je vstopil v ta prostor 954 00:59:01,720 --> 00:59:08,250 vse naenkrat, bi ti algoritmi sprejeti še 400 ali pa 200 korakov. 955 00:59:08,250 --> 00:59:13,310 >> Ampak po drugi strani, če bi res dobil pameten in smo namesto tega vsi vi sami računajo, 956 00:59:13,310 --> 00:59:15,280 spomnimo, kako, da algoritem deluje. 957 00:59:15,280 --> 00:59:17,110 Vsi ste vstal. Dovolite mi, da hitro naprej s tem. 958 00:59:17,110 --> 00:59:20,430 Vsi ste vstal, si seznanjena off, potem polovica vas sedel, 959 00:59:20,430 --> 00:59:22,510 polovica vas sedel, pol ti sedel, 960 00:59:22,510 --> 00:59:27,350 in na vsaki ponovitvi te zanke iz tednu 0, smo prepolovili problem pri roki 961 00:59:27,350 --> 00:59:30,040 in odšel na n / 2, potem je n / 4, potem je n / 8. 962 00:59:30,040 --> 00:59:35,350 In posledice tega je, da če je še 400 ljudi, ki hodijo v sobo, ni nič takega, 963 00:59:35,350 --> 00:59:40,120 da bo nam 1 rundo, ne pa 400 več krogov, ne pa 200 več krogih. 964 00:59:40,120 --> 00:59:43,640 In tako se zgodba nam povedali nekaj časa nazaj je bilo narediti nekaj, kar s tem. 965 00:59:43,640 --> 00:59:47,750 Ta rdeča črta tukaj je linearna, to je naravnost, in je označen kot n 966 00:59:47,750 --> 00:59:50,250 ker je velikost problema raste, 967 00:59:50,250 --> 00:59:54,690 če je vaš algoritem ali program, s katerim ste reševanje traja n ukrepe, 968 00:59:54,690 --> 00:59:58,620 bomo lahko narišete kot ravne črte, kjer je potrebno več časa, večja je velikost problema. 969 00:59:58,620 --> 01:00:03,280 In twosies pristop, štetje 2, 4, 6, 8, še vedno ravna črta, samo malo bolje. 970 01:00:03,280 --> 01:00:08,440 To traja malo manj časa, tako da je rumena črta je pod rdečo črto točko za točko. 971 01:00:08,440 --> 01:00:12,580 >> Toda še bolje je ta sveti gral, kar smo poimenovali logaritemski čas 972 01:00:12,580 --> 01:00:14,830 kjer čeprav smo spet podvojilo število ljudi v prostoru, 973 01:00:14,830 --> 01:00:18,240 smo dvojno velikost te imenika iz prvega razreda, 974 01:00:18,240 --> 01:00:22,310 Nič takega, da traja še 1 stran solzo, traja 1 več sedel 975 01:00:22,310 --> 01:00:25,550 da bi rešili problem, ki je dvakrat večji. 976 01:00:25,550 --> 01:00:27,460 In tako smo zdaj dobili pogovor, da začnete ob je 977 01:00:27,460 --> 01:00:30,380 Kako bomo dejansko učinkovito reševanje problemov 978 01:00:30,380 --> 01:00:32,510 Če menimo, najpreprostejši problemi, kot je ta? 979 01:00:32,510 --> 01:00:36,210 Recimo, da imamo 8 vrata, za katerimi so nekatere številke, 980 01:00:36,210 --> 01:00:39,720 in vsak izmed teh številk ni razvrščen na kakršen koli način, 981 01:00:39,720 --> 01:00:42,830 oni so samo naključna cela Za temi vrati, 982 01:00:42,830 --> 01:00:47,290 in smo vprašati, kako si šel o iskanju številke - kdo ve - 983 01:00:47,290 --> 01:00:50,250 7 Za temi vrati? 984 01:00:50,250 --> 01:00:53,400 Kaj bi ti, človek, ne da bi našli mi številko 7 985 01:00:53,400 --> 01:00:56,810 če še enkrat vsaka od teh so vrata in videti vrednost moraš odpreti vrata? 986 01:00:56,810 --> 01:00:59,650 Kakšen bi bil vaš algoritem bo morda? 987 01:00:59,650 --> 01:01:05,310 >> [Neslišno študentski odziv] >> Torej, začnite z levo in odpre vrata, odpri vrata, odpri vrata. 988 01:01:05,310 --> 01:01:08,570 In v najslabšem primeru, kako dolgo bo trajalo, da se nam najti številko 7? 989 01:01:08,570 --> 01:01:12,800 In spet, oni niso razporejene, tako da to ni tako enostavno, kot dobro, bom odpreti 7. vrata. 990 01:01:12,800 --> 01:01:15,240 Lahko nas bo, maksimalno, 8 korakov. 991 01:01:15,240 --> 01:01:19,940 V najslabšem primeru, 7 je naključno na samem koncu linije vrat, 992 01:01:19,940 --> 01:01:22,090 zato bomo morda morali poskusiti vse n vrata. 993 01:01:22,090 --> 01:01:24,440 Torej, še enkrat tukaj, se zdi, da imajo linearno algoritem. 994 01:01:24,440 --> 01:01:27,030 V bistvu smo to naredili le nekaj let nazaj. 995 01:01:27,030 --> 01:01:29,910 Eden od vaših prednikov je bilo postavljeno s točno to 996 01:01:29,910 --> 01:01:32,050 kjer nismo imeli digitalne različice, smo namesto tega imeli tablo 997 01:01:32,050 --> 01:01:33,780 z nekaterimi kos papirja na njem. 998 01:01:33,780 --> 01:01:36,940 In tisto, kar sem mislil, da bom naredil, je na hitro pogledamo nazaj, kako je to šlo, 999 01:01:36,940 --> 01:01:40,760 eden najboljših in morda najbolj nenavadnih priložnosti na odru 1000 01:01:40,760 --> 01:01:42,530 da imajo dokaz tukaj na Sanders. 1001 01:01:42,530 --> 01:01:44,000 Imeli smo 2 niza številk. 1002 01:01:44,000 --> 01:01:47,280 Mi smo samo še pogledati, kaj se dogaja tukaj s Seanom za sam vrh teh vrstic. 1003 01:01:47,280 --> 01:01:49,660 Če ni nihče nikoli več prostovoljcev CS50, 1004 01:01:49,660 --> 01:01:52,010 smo imeli blagoslov Sean je, da se to ohrani na kamero, 1005 01:01:52,010 --> 01:01:54,670 tako, da ve, da je na stotine ljudi, so gledal to zdaj že več let. 1006 01:01:54,670 --> 01:01:59,500 Toda Sean naredil neverjetno delo - ali kajne? - Na dejansko ugotovitev nam posebno številko. 1007 01:01:59,500 --> 01:02:04,570 >> Torej, da vidimo, kako se je rešiti ta algoritem, tako da bomo spet ta pogovor kmalu 1008 01:02:04,570 --> 01:02:08,300 kako bomo našli stvari učinkovito. 1009 01:02:08,300 --> 01:02:12,300 [Malan na videu] sem se skriva za temi vrati številko 7, 1010 01:02:12,300 --> 01:02:16,710 vendar spravljen v nekaterih od teh vrat in še druge, ki niso negativne številke, 1011 01:02:16,710 --> 01:02:19,980 in vaš cilj je, da razmišljajo o tem zgornji vrstici številk samo matriko 1012 01:02:19,980 --> 01:02:22,920 ali pa samo zaporedje kos papirja s številkami stojijo za njimi, 1013 01:02:22,920 --> 01:02:26,960 in vaš cilj je, da uporabljate samo zgornji niz tu našli mi številko 7. 1014 01:02:26,960 --> 01:02:30,800 In mi smo potem bo kritiko, kako iti na to početje. >> Redu. 1015 01:02:30,800 --> 01:02:33,880 [Malan] Najdi nam številko 7, prosim. 1016 01:02:36,210 --> 01:02:38,350 [Smeh] 1017 01:02:41,610 --> 01:02:44,460 [Malan] No [smeh] 1018 01:02:45,760 --> 01:02:58,080 5, 19, 13, [smeh]. To ni trik. 1019 01:03:00,560 --> 01:03:02,390 1. 1020 01:03:04,560 --> 01:03:06,910 [Smeh] 1021 01:03:06,910 --> 01:03:10,760 Na tej točki je vaša ocena ni zelo dobra, tako da boste lahko tudi naprej. [Smeh] 1022 01:03:12,490 --> 01:03:14,070 3. 1023 01:03:17,340 --> 01:03:23,480 Pojdi. Odkrito povedano, ne morem pomagati, ampak se sprašujem, kaj bi sploh razmišljal o tem. [Smeh] 1024 01:03:25,010 --> 01:03:28,870 Le zgornji vrstici, tako da imaš 3 levo. Zato mi najdi 7. 1025 01:03:28,870 --> 01:03:45,360 [Učenci godrnjajo] 1026 01:03:46,270 --> 01:03:49,870 [Malan] 17. 1027 01:03:49,870 --> 01:03:55,460 [Učenci godrnjajo] 1028 01:03:56,920 --> 01:04:01,550 [Malan] 7! [Aplavz] 1029 01:04:01,550 --> 01:04:06,080 >> Torej, v sredo bomo potopite v to in bolj sofisticirane algoritme za iskanje stvari. 1030 01:04:06,080 --> 01:04:10,200 Za zdaj bomo pustil s Seanom in se vidimo v sredo. 1031 01:04:11,280 --> 01:04:13,000 [CS50.TV]