1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [2 tedna, Nadaljevanje] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Harvard University] 3 00:00:04,220 --> 00:00:06,880 [To je CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 V redu. To je CS50, in to je konec tedna 2. 5 00:00:10,990 --> 00:00:14,410 Če pričakujete, da bo lačen, v tem času jutri 6 00:00:14,410 --> 00:00:18,620 vemo, da bomo za sklic kot majhno skupino jutri, v četrtek, 13:15. 7 00:00:18,620 --> 00:00:21,360 Tam je to URL tukaj, če želite RSVP. 8 00:00:21,360 --> 00:00:26,740 Vesolje je omejeno, zato vas prosimo, oprostite, če je obrazec zapolnil čas, ki ga izpolnite tole. 9 00:00:26,740 --> 00:00:29,300 Še en URL, čeprav je, da bi bilo koristno, je to. 10 00:00:29,300 --> 00:00:32,369 V skoraj času enega meseca, tečaj se bo na voljo 11 00:00:32,369 --> 00:00:36,890 še toliko bolj na splošno prek EDX, prek katerega bodo ljudje na internetu lahko sledite skupaj, 12 00:00:36,890 --> 00:00:39,380 sodelovanje v okviru zelo aktivno, v resnici. 13 00:00:39,380 --> 00:00:42,270 Prišli bodo z uporabo aparata CS50 in CS50 Razprava 14 00:00:42,270 --> 00:00:45,490 in najbolj različnih programskih orodij, ki smo jih že bili z uporabo tega semestra. 15 00:00:45,490 --> 00:00:48,710 In ena od pobud bi radi prevzeli kot poskus letos 16 00:00:48,710 --> 00:00:51,930 je videti, koliko vsebine lahko prevedete 17 00:00:51,930 --> 00:00:53,960 v druge ustne in pisne jezikih. 18 00:00:53,960 --> 00:00:57,500 Torej, če imate morda interes za sodelovanje pri tem projektu 19 00:00:57,500 --> 00:01:02,270 s katerimi bomo zagotovili English prepisov in podnapisov za predavanja teku na 20 00:01:02,270 --> 00:01:05,450 in kratke hlače, seminarji in drugi profili in podobno, 21 00:01:05,450 --> 00:01:08,200 če govorim tekoče ali berljivost nek drug jezik, 22 00:01:08,200 --> 00:01:12,290 mi bi radi, da vas vključijo v ta projekt, s katerim boste lahko na enem ali več videoposnetkov 23 00:01:12,290 --> 00:01:15,200 jih prevede v jezik, ki ga poznamo zelo dobro. 24 00:01:15,200 --> 00:01:18,700 >> Da bi vam občutek vmesnika, tam je spletni uporabniški vmesnik 25 00:01:18,700 --> 00:01:22,090 da bomo uporabljali, da bo v bistvu ustvarili uporabniški vmesnik, kot je ta. 26 00:01:22,090 --> 00:01:24,290 To se je učil me nekaj Halloween nazaj, 27 00:01:24,290 --> 00:01:27,390 in na desni strani tam v črni barvi dostavo v teh časovnih žigov, 28 00:01:27,390 --> 00:01:31,210 boste videli različne stvari, ki ste jih dobili iz mojih ust, da je dan, 29 00:01:31,210 --> 00:01:34,850 in nato pod njo boste lahko prevesti v drug jezik 30 00:01:34,850 --> 00:01:38,690 točno to, kar je preslikava med, v tem primeru, angleškem in, recimo, španski. 31 00:01:38,690 --> 00:01:40,440 Tako da je pravzaprav zelo uporabniku prijazno orodje. 32 00:01:40,440 --> 00:01:43,370 Lahko nazaj in hitro naprej zelo hitro z bližnjicami na tipkovnici. 33 00:01:43,370 --> 00:01:47,490 Torej, če bi želeli sodelovati v tem poskusu in so vaše besede videti in brati 34 00:01:47,490 --> 00:01:51,850 s potencialno tisoče ljudi, tam, prosim, vas prosimo za sodelovanje. 35 00:01:51,850 --> 00:01:54,350 Ena beseda o mucka od ponedeljka. 36 00:01:54,350 --> 00:02:00,350 Da ne smo poslali preveč grozljivo sporočilo, se zavedamo, da je, kot kažejo uradne ure 37 00:02:00,350 --> 00:02:03,300 in kot kažejo oddelki, oblikovanje tečaja je zelo 38 00:02:03,300 --> 00:02:07,360 da so učenci sodelujejo in se pogovarjam z dela zaradi težav zbirk 39 00:02:07,360 --> 00:02:11,260 in težave skupaj, in res je linija samo pridejo na, 40 00:02:11,260 --> 00:02:16,010 Ponovno naj bi delo, ki ga na koncu lahko predložijo svoje. 41 00:02:16,010 --> 00:02:18,860 In tako čisto po pravici povedano, v uradnih ur je popolnoma normalno, 42 00:02:18,860 --> 00:02:22,240 to je popolnoma mogoče celo pričakovati, da bo klepet s prijateljem nekaj zraven tebe. 43 00:02:22,240 --> 00:02:24,370 >> Če on ali ona se bori z nekaterimi temo in si tako, 44 00:02:24,370 --> 00:02:27,940 "No, naj vam vpogled v nekatere vrstice kode, ki sem ga napisal,» da je v redu, 45 00:02:27,940 --> 00:02:31,250 se to zgodi, in to je zelo ugodno, mislim, da s procesom učenja. 46 00:02:31,250 --> 00:02:36,750 Če je linija dobi prečka, ko je glava nekako nagiba tukaj za veliko preveč sekund 47 00:02:36,750 --> 00:02:41,160 ali minut za to res pravkar bila sprostitev priložnost za prijatelja, 48 00:02:41,160 --> 00:02:44,160 in seveda, ko se stvari izmenjujejo prek e-pošte in Dropbox in podobno, 49 00:02:44,160 --> 00:02:45,640 Tudi tam je postavka. 50 00:02:45,640 --> 00:02:48,620 Torej, z vsemi sredstvi, se počutite udobno in navdaja za klepet s prijatelji 51 00:02:48,620 --> 00:02:52,810 in sošolci o psets in več in le spoznali, da tisto, kar v končni fazi predložiti 52 00:02:52,810 --> 00:02:57,340 Morala bi biti plod vaše ustvarjanje in ne kdo drug. 53 00:02:57,340 --> 00:03:00,490 In tako eden od domensko specifičnih težav za pset2, 54 00:03:00,490 --> 00:03:04,740 , ki bo izšla konec jutri zvečer, je, da se potopite v svet kriptografiji 55 00:03:04,740 --> 00:03:08,970 , ki je umetnost za šifriranje podatkov ali premešavo, 56 00:03:08,970 --> 00:03:12,600 in to na koncu se nanaša na svetu varnosti. 57 00:03:12,600 --> 00:03:16,560 Zdaj, varnost za večino od nas prihaja v obliki dokaj preprostega mehanizmov. 58 00:03:16,560 --> 00:03:19,050 Vsi nas imajo imena in gesla, 59 00:03:19,050 --> 00:03:23,450 in vsi imajo zelo slabe imena in gesla, verjetno. 60 00:03:23,450 --> 00:03:28,240 >> Če vaše geslo je isti na več spletnih mestih, to verjetno ni najboljša ideja, 61 00:03:28,240 --> 00:03:30,070 kot bomo razpravljali proti koncu semester. 62 00:03:30,070 --> 00:03:34,720 Če je geslo napisano na lepljivo opombo - ni šala - na monitorju, 63 00:03:34,720 --> 00:03:38,350 tudi to ni nujno najboljša oblika, vendar precej pogost pojav. 64 00:03:38,350 --> 00:03:42,470 In če ga ne uporabljate kriptografije za šifriranje gesel, 65 00:03:42,470 --> 00:03:44,210 so še posebej ranljivi. 66 00:03:44,210 --> 00:03:47,270 Torej, če mislite, da ste super pametni, ki jih imajo skrite Wordov dokument 67 00:03:47,270 --> 00:03:49,910 nekje na trdem disku, ki je vse svoje gesel 68 00:03:49,910 --> 00:03:53,670 vendar je v mapi, da nihče ne bo videti v, da tudi ni zelo varen mehanizem. 69 00:03:53,670 --> 00:03:56,990 In kaj bo prinesla pset2 je to umetnost kriptografije 70 00:03:56,990 --> 00:04:02,010 in šifriranje podatkov, tako da so stvari, kot so gesla, vse bolj varno. 71 00:04:02,010 --> 00:04:05,790 Okoliščine v tem, da z negotovimi podatkov 72 00:04:05,790 --> 00:04:07,930 prihaja priložnost za šifriranje in ga scramble. 73 00:04:07,930 --> 00:04:11,470 In tako je to, na primer, je primer šifrirano sporočilo. 74 00:04:11,470 --> 00:04:14,700 To je dejansko nekaj reče v angleščini, vendar to očitno ni popolnoma jasno. 75 00:04:14,700 --> 00:04:18,279 In bomo cel krog danes draži narazen, kaj je ta skrivnost sporočilo tukaj. 76 00:04:18,279 --> 00:04:23,490 Toda v resničnem svetu računalnikov, stvari ne izgledajo kot bi lahko bile angleški stavki. 77 00:04:23,490 --> 00:04:28,430 Na primer, to je tisto, kar boste morda našli na standardnem Linux ali Mac računalnikom ali UNIX 78 00:04:28,430 --> 00:04:32,070 v datoteko, ki je bila nekoč, ko se imenuje datoteka skupine. 79 00:04:32,070 --> 00:04:34,200 >> Danes je bil prestavljen na drugih mestih. 80 00:04:34,200 --> 00:04:39,210 Ampak, če pogledaš na pravem mestu, v sistemu, boste videli ne samo svoje uporabniško ime 81 00:04:39,210 --> 00:04:43,400 ali drugih oseb v sistemu, vendar pa boste videli šifrirano različico svoje geslo. 82 00:04:43,400 --> 00:04:47,980 Dejansko je beseda grobnica je nakazovalo, da je naslednja stvar šifrirano, 83 00:04:47,980 --> 00:04:52,680 in ta niz na videz naključnih črk in številk in znakov in tako naprej 84 00:04:52,680 --> 00:04:56,480 mogoče dešifrirati samo s splošno vedo nekaj skrivnosti - 85 00:04:56,480 --> 00:04:58,840 Skrivnost besedo, skrivnost številka - 86 00:04:58,840 --> 00:05:03,160 in tako dejansko umetnost kriptografije navsezadnje izvira zaupati neke vrste 87 00:05:03,160 --> 00:05:05,650 in vedo nekaj, kar nekdo drug ne. 88 00:05:05,650 --> 00:05:10,090 Torej bomo raziskovali to v malo bolj podrobno danes in v pset se nadaljuje. 89 00:05:10,090 --> 00:05:12,200 In sedaj beseda o ustreznosti / neustreznosti. 90 00:05:12,200 --> 00:05:15,360 Še posebej, ker so nekateri izmed vas vrgli v pset1, Aparati, 91 00:05:15,360 --> 00:05:19,080 in zelo nov svet za sebe, zavedaš, da frustracije in zmedenost 92 00:05:19,080 --> 00:05:21,700 in samo tehnične težave so precej ki jih lahko pričakujemo, 93 00:05:21,700 --> 00:05:24,180 še posebej s prvim pset, kjer se je samo toliko novega, 94 00:05:24,180 --> 00:05:27,730 Samo seznanjanja z ls in cd in vse te skrivnostne ukazi 95 00:05:27,730 --> 00:05:33,050 in novo okolje, in da je ločena od dejanskega materiala in se programiranja. 96 00:05:33,050 --> 00:05:36,940 Torej zavedati tudi, da gotovo obstajajo uradne ure, ki obstajajo kot podporne strukture. 97 00:05:36,940 --> 00:05:38,880 >> Skupine začeli to prihaja nedelja. 98 00:05:38,880 --> 00:05:42,960 Najpomembneje pa je, če se počutiš tako, da to ni svet za vas, 99 00:05:42,960 --> 00:05:44,710 Zavedajo se, da res ne vzemite čas. 100 00:05:44,710 --> 00:05:48,600 In če ne bi bilo za to priložnost pred leti me jemanja razred / neustreznosti, 101 00:05:48,600 --> 00:05:50,990 Iskreno, jaz ne bi nikoli niti stopil v razredu. 102 00:05:50,990 --> 00:05:53,690 In lahko spremenite do, recimo, 5. ponedeljek v letu, 103 00:05:53,690 --> 00:05:58,280 tako da, če ste na robu zdaj spoznali, da namesto glavo v nekaterih drugih vodah v celoti, 104 00:05:58,280 --> 00:06:01,260 Ne samo meni, gotovo se preusmeri na / neustreznosti. 105 00:06:01,260 --> 00:06:04,570 Tudi tu ni ravno ta kultura tukaj na Harvardu sprejemati stvari / neustreznosti 106 00:06:04,570 --> 00:06:08,670 ker vsi res želi doseči ali presegla, 107 00:06:08,670 --> 00:06:11,130 vendar odkrito povedano, to je čudovit način, da poskuša nekaj iz 108 00:06:11,130 --> 00:06:16,720 da morda ne poznate, pa boste na koncu delaš, v večini primerov zelo dobro, 109 00:06:16,720 --> 00:06:18,210 morda veliko na svoj presenečenje. 110 00:06:18,210 --> 00:06:20,980 In bolj konkretno, kaj si mislim o ustreznosti / neustreznosti običajno počne, 111 00:06:20,980 --> 00:06:22,940 še posebej, kot ste verjetno doživeli s pset0, 112 00:06:22,940 --> 00:06:26,560 če daš na 10 ur, 15 ur, 25 ur na nekaj pset 113 00:06:26,560 --> 00:06:29,920 in ti si samo tolkel glavo ob zid in to je pridobivanje zelo pozno ponoči 114 00:06:29,920 --> 00:06:33,950 ampak ste posneli pset 90% poti in si ne more ugotoviti, eno stvar, 115 00:06:33,950 --> 00:06:36,520 / neustreznosti res potrebno rob off razreda, kot je ta, 116 00:06:36,520 --> 00:06:39,100 kjer lahko nekako veselo rekel: "Vem, da ni popoln, 117 00:06:39,100 --> 00:06:42,350 ampak sem delal mojo rit off na to, da sem kar zadovoljen s tem, kje je končal, " 118 00:06:42,350 --> 00:06:44,850 in da bo izpolnil pričakovanja za / neustreznosti. 119 00:06:44,850 --> 00:06:47,540 Torej, imejte to v mislih. V redu. 120 00:06:47,540 --> 00:06:50,520 >> Tisti med vami, ki so si prizadevale, da uporabite Harvard University Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 vem, da obstaja CS50 SSID, Wi-Fi povezave, plava po 122 00:06:54,780 --> 00:06:56,490 , da boste imeli več sreče za. 123 00:06:56,490 --> 00:07:00,130 To je nekoliko ironično, da je geslo za to, če bi želeli, da se poskusite povezati s to 124 00:07:00,130 --> 00:07:08,350 Za boljše hitrosti - in nam sporočite, če to ni bolje - je 12345, vse tja do 8 125 00:07:08,350 --> 00:07:10,910 ker je 8 bolj varen kot 5. 126 00:07:10,910 --> 00:07:16,910 Torej, če potrebujete Wi-Fi gesla, brezžično povezavo z CS50 tukaj, 12345678, 127 00:07:16,910 --> 00:07:20,380 in post na CS50 Pogovorite se, če imate še vedno občasne težave z omrežno povezljivostjo, 128 00:07:20,380 --> 00:07:25,420 in bomo o tem obvestili pooblastila, ki jih poznate, za ta prostor. V redu. 129 00:07:25,420 --> 00:07:32,230 Tako hitro teaser, zlasti za tiste, ki ste fan fantje ali dekleta vseh Apple stvari. 130 00:07:32,230 --> 00:07:37,460 Kaj sem izkopal iz nekaj let nazaj, je bila to sliko tukaj, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 samo zato, da bi nekako bolj konkretna in bolj zapletene 132 00:07:39,930 --> 00:07:42,560 nekaj več osnovnih programov C smo bili pisanja. 133 00:07:42,560 --> 00:07:46,910 Zato sem odprl to datoteko, iUnlock.c. To je na voljo na predavanja strani za danes. 134 00:07:46,910 --> 00:07:49,810 Na levi strani si lahko ogledate dolg seznam funkcij. 135 00:07:49,810 --> 00:07:53,230 Torej človek, ki je napisal to napisala veliko funkcij, več kot le glavni. 136 00:07:53,230 --> 00:07:57,340 Bil je cel kup knjižnic tukaj, če bomo začeli pomikati skozi, 137 00:07:57,340 --> 00:08:04,890 kaj to sploh je, je bila prva, verjamem, crack za izvirno iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Ko boste želeli Bjekstvo iz zapora iPhone izvirno, kar pomeni, da untether od AT & T 139 00:08:09,830 --> 00:08:13,710 in dejansko namestiti posebno programsko opremo, in počnejo stvari, da Apple ne želite, da ljudje naredijo, 140 00:08:13,710 --> 00:08:18,480 nekdo vzel čas, da ugotovimo, kako točno bi lahko izkoristili pomanjkljivosti programske opreme, 141 00:08:18,480 --> 00:08:22,690 napake, žuželke, v programsko opremo Apple, in tako se je rodil iUnlock.c, - 142 00:08:22,690 --> 00:08:26,760 da, če ga pripravijo na računalnik in jo namestiti na iPhone 143 00:08:26,760 --> 00:08:29,430 , ki je bil povezan z računalnikom prek, recimo, kabel USB, 144 00:08:29,430 --> 00:08:32,450 To bi vam upravne ali root privilegije na vaš iPhone 145 00:08:32,450 --> 00:08:34,620 in pustite, da vam zal veliko vse, kar si želite. 146 00:08:34,620 --> 00:08:36,400 In tako je bilo to zanimivo igro mačke in miši 147 00:08:36,400 --> 00:08:39,340 med Apple in drugod po svetu, še zlasti če se, tako kot mnoga podjetja, 148 00:08:39,340 --> 00:08:43,350 poskušajo blokirati svoje stvari navzdol, tako da lahko le to z njim, kaj nameravajo. 149 00:08:43,350 --> 00:08:47,360 Ampak hvala za ljudi, kot je ta, in razumevanje nizki ravni podrobnosti - 150 00:08:47,360 --> 00:08:50,830 in v tem primeru C programiranje - in veliko poznanih konstruktov 151 00:08:50,830 --> 00:08:55,280 da smo začeli igrati z njimi boste lahko resnično vzvoda strojne opreme 152 00:08:55,280 --> 00:08:59,250 na način, ki vam ustreza, in ni nujno, da nekaj podjetij subjekt. 153 00:08:59,250 --> 00:09:01,600 Tako na primer, nimam pojma, kaj vse to počne, 154 00:09:01,600 --> 00:09:03,580 ampak GetVersion zveni zelo enostavno, 155 00:09:03,580 --> 00:09:05,710 in izgleda, da je to funkcija, ki je napisal ta oseba. 156 00:09:05,710 --> 00:09:09,250 To traja neko celo število kot argument, ne vrne ničesar, 157 00:09:09,250 --> 00:09:13,710 vendar se zdi, da z zanko za zanko tukaj in če je pogoj, če premoru stanja, 158 00:09:13,710 --> 00:09:16,770 in nekako se nanaša na različico številk, če se pomaknite navzdol 159 00:09:16,770 --> 00:09:19,650 čeprav je veliko teh ključnih besed se bo novo. 160 00:09:19,650 --> 00:09:22,590 In tam je cel kup funkcij tukaj še nikoli nismo videli in ne bodo nikoli videli 161 00:09:22,590 --> 00:09:24,350 tekom semestra. 162 00:09:24,350 --> 00:09:29,160 >> Ob koncu dneva, sledi enaka pravila in logiko, da smo se igrali z doslej. 163 00:09:29,160 --> 00:09:34,340 Torej, to je sedaj prestar za crack vaš iPhone 3s ali 4s ali kmalu 5s teh dneh, 164 00:09:34,340 --> 00:09:38,830 vendar vem, da je vse zelo izhaja iz tega sveta, ki smo se vrgli v. 165 00:09:38,830 --> 00:09:42,280 Oglejmo pogled na malo bolj preprost primer: 166 00:09:42,280 --> 00:09:46,260 ta, da se samo ogreti z nekaj sintakse ter tudi nekatere druge vrste podatkov 167 00:09:46,260 --> 00:09:48,910 da smo govorili, niso pa res videl v C. 168 00:09:48,910 --> 00:09:53,670 To je datoteka z imenom positive1.c, in na pripombe na vrhu, 169 00:09:53,670 --> 00:09:56,070 to samo zahteva, da si zagotovi pozitivno število. 170 00:09:56,070 --> 00:09:59,910 Torej je primer do-while zanko, ki je prijazen do uporabnikov interaktivnih programov 171 00:09:59,910 --> 00:10:02,070 , kjer boste morali povedati, da uporabnik nekaj storiti, 172 00:10:02,070 --> 00:10:05,530 in če ne sodelujejo kričiš na njih ali zavrne njihov prispevek. 173 00:10:05,530 --> 00:10:10,480 Zadeva točke: bom naredil linije 19 do 24 174 00:10:10,480 --> 00:10:14,620 tako dolgo, dokler uporabnik ni dal pozitivno število. 175 00:10:14,620 --> 00:10:21,340 Ta podrobnost je tukaj na liniji 18, zakaj sem nad tem razglasila n celo večkratno gradnjo 176 00:10:21,340 --> 00:10:26,870 v nasprotju z tik ob liniji 22, kjer sem se dejansko skrbi, da bi dobili n? Ja. 177 00:10:26,870 --> 00:10:29,330 [Študent] Področje. >> Ja, tako je to vprašanje obsega. 178 00:10:29,330 --> 00:10:31,770 In v smislu navadnega je, kaj se nanašajo na področje? 179 00:10:34,880 --> 00:10:41,560 Ja. >> [Neslišno študentski odziv] >> Lahko govoriš malo glasneje? 180 00:10:41,560 --> 00:10:45,440 [Študent] Če imate dostop do te spremenljivke. >> Odlično. 181 00:10:45,440 --> 00:10:47,610 Če imate dostop do določene spremenljivke. 182 00:10:47,610 --> 00:10:50,990 In na splošno pravilo palca je bila doslej, da je obseg del spremenljivke 183 00:10:50,990 --> 00:10:56,140 je opredeljena z najnovejšimi zavite oklepaje, ki ste jih videli. 184 00:10:56,140 --> 00:11:03,070 >> In tako v tem primeru, če sem naredil napako razglasitvi n na liniji 22, ki bo linija deluje. 185 00:11:03,070 --> 00:11:10,840 Rad bi dobil int, in jaz bi ga v tem spremenljivko n, v vrstico 22, 186 00:11:10,840 --> 00:11:17,060 vendar pa bi vrstico kode, ki zdaj nimajo pojma, kaj sem govoril? >> [Študent] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, in se izkaže, 24, pa tudi zato, ker v tem primeru ne spada med zavite oklepaje. 188 00:11:23,840 --> 00:11:28,550 Torej samo malo nadloga, ampak zelo enostavno rešiti tako, da preprosto razglasi spremenljivka 189 00:11:28,550 --> 00:11:30,700 zunaj same funkcije. 190 00:11:30,700 --> 00:11:32,760 Bomo videli kasneje danes lahko še en korak naprej 191 00:11:32,760 --> 00:11:34,940 in bi lahko celo malo leni. 192 00:11:34,940 --> 00:11:39,660 In to ni priporočljivo, da se na splošno, ampak lahko bi celo dobili leni 193 00:11:39,660 --> 00:11:44,150 in dal spremenljivko na svetovni ravni, da se tako izrazim, ne znotraj funkcije, ne znotraj zanke, 194 00:11:44,150 --> 00:11:49,800 ampak samo datoteko, izven vseh funkcij ste napisali, kot sem tukaj na spletu 15. 195 00:11:49,800 --> 00:11:55,220 To se običajno namrščil, vendar zavedaš, da je to rešitev, včasih na druge težave, 196 00:11:55,220 --> 00:11:56,910 kot bomo videli na koncu. 197 00:11:56,910 --> 00:11:59,500 Za zdaj ga bomo kar tako pustili, pa da vidimo, če lahko to zapišemo 198 00:11:59,500 --> 00:12:02,360 Samo začeti izražanje sebe malo drugače. 199 00:12:02,360 --> 00:12:05,550 Ta program, tako da je jasno, je positive1. 200 00:12:05,550 --> 00:12:11,980 Naj gredo naprej in tukaj v moji terminalsko okno, da positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Prevede v redu. Jaz grem teči positive1, pritisnite tipko Enter. 202 00:12:15,080 --> 00:12:19,250 Zahtevam, da mi daš pozitivno celo število. Jaz bom rekel -1. To ni delovalo. 203 00:12:19,250 --> 00:12:22,340 0, 99. To se mi zdi za delo. 204 00:12:22,340 --> 00:12:25,310 Morda ne najbolj strog preskus, najmanj pa je lepo duševnega zdravja prijava 205 00:12:25,310 --> 00:12:27,100 da smo na pravi poti. 206 00:12:27,100 --> 00:12:29,570 >> Torej, zdaj pa grem naprej in odprite različico 2 tega, 207 00:12:29,570 --> 00:12:32,800 in kaj je drugačen že? 208 00:12:32,800 --> 00:12:39,030 Izvaja isto stvar, ampak kaj skakali kot očitno tokrat drugače? 209 00:12:40,790 --> 00:12:47,090 Ta bool v zeleni barvi. To je poudarjeno v zeleni barvi, je to ključno besedo znan kot int, ki je vrsto podatkov. 210 00:12:47,090 --> 00:12:50,510 Saj to, da ni vgrajena v vseh različicah C. 211 00:12:50,510 --> 00:12:52,650 Morate tudi posebno knjižnico. 212 00:12:52,650 --> 00:12:56,460 V našem primeru sem vključil CS50 knjižnico, tako da imamo dostop do int. 213 00:12:56,460 --> 00:12:59,860 Toda v vrstico 18, se zdi, da ima logično vrednost, tukaj imenujejo hvaležen. 214 00:12:59,860 --> 00:13:02,190 Lahko bi imenoval ničesar, ampak sem klicala, da hvaležen 215 00:13:02,190 --> 00:13:04,750 samo da nekako prenesti nekaj pomensko pomen. 216 00:13:04,750 --> 00:13:07,700 Torej, najprej na liniji 18, jaz sem hvaležen, očitno ne 217 00:13:07,700 --> 00:13:12,230 ker je logično vrednost hvaležen initialized na false v skladu 18. 218 00:13:12,230 --> 00:13:16,500 In potem se zdi, kaj sem naredil tukaj v vrsticah 21 do 23 219 00:13:16,500 --> 00:13:19,200 Pravkar sem se nekako predelajo mojo logiko. 220 00:13:19,200 --> 00:13:26,100 Torej ni funkcionalno drugačen, ampak v vrstico 22 Zdaj pa preveri, če je uporabnik int pod pogojem, 221 00:13:26,100 --> 00:13:31,360 večji od 0, potem pa sem preprosto spremenite vrednost hvaležen, da res. 222 00:13:31,360 --> 00:13:35,590 In zakaj sem to storil? Ker je v skladu 25, očitno bom preverijo stanje. 223 00:13:35,590 --> 00:13:39,760 Ali to zanko, medtem ko je hvaležen, je napačen. 224 00:13:39,760 --> 00:13:42,960 Zato sem predlagal, da je to alternativa različici 1 225 00:13:42,960 --> 00:13:47,050 ker je vsaj malo bolj intuitivna morda, da je malo bolj utemeljena v angleščini. 226 00:13:47,050 --> 00:13:51,980 Torej, naredite naslednje ko nisi hvaležen, ali pa hvaležen, je napačen. 227 00:13:51,980 --> 00:13:56,220 In tokrat tudi jaz očitno ne skrbi, da se spomnimo, kaj si ga vnesli v 228 00:13:56,220 --> 00:14:00,050 ker obvestilo ni spremenljivka n, tako da pravzaprav malo belo laž tam. 229 00:14:00,050 --> 00:14:03,290 >> Funkcionalno je program nekoliko drugačna, ko bomo prišli do dna 230 00:14:03,290 --> 00:14:04,960 ker jaz ne spomnimo, kaj je n. 231 00:14:04,960 --> 00:14:09,120 Ampak sem hotel dokazati, da sem tudi, da čeprav smo videli GetInt 232 00:14:09,120 --> 00:14:13,780 GetString in se uporabljajo na desni strani enačaj doslej 233 00:14:13,780 --> 00:14:17,310 tako, da se spomnimo na vrednost, tehnično, to ni nujno potrebno. 234 00:14:17,310 --> 00:14:20,290 Če iz kakršnega koli razloga preprosto ne zanima, da shranite vrednost, 235 00:14:20,290 --> 00:14:25,540 želite samo preveriti vrednost, opazite, da smo lahko enostavno napisati, da je to GetInt, 236 00:14:25,540 --> 00:14:27,320 paren odprta, blizu paren. 237 00:14:27,320 --> 00:14:30,570 Ta funkcija vrača vrednost, kot smo bili pravi. 238 00:14:30,570 --> 00:14:32,220 To se dogaja, da vam vrne int. 239 00:14:32,220 --> 00:14:34,460 In tako, če menite, psihično se to dogaja, 240 00:14:34,460 --> 00:14:38,190 ko sem tipa v 99, GetInt vrne številko 99, 241 00:14:38,190 --> 00:14:41,840 in tako konceptualno, to je, kot da moja koda bilo dejansko to. 242 00:14:41,840 --> 00:14:45,950 Torej, če je 99 res večje od 0, potem postane res hvaležen, 243 00:14:45,950 --> 00:14:50,810 potem linija 25 se zaveda, ooh, smo storili zato, ker sem zdaj hvaležen, 244 00:14:50,810 --> 00:14:53,970 in v skladu 26, preprosto rekel: "Hvala za pozitivno celo!" 245 00:14:53,970 --> 00:14:55,960 karkoli se je zgodilo, da je. 246 00:14:55,960 --> 00:14:59,140 Zdaj pa naredimo rahlo skladenjsko sladkorja tu, tako rekoč. 247 00:14:59,140 --> 00:15:04,670 Bomo videli, če bomo lahko počisti to vrstico 25 s tem tretji in zadnji varianti v positive3. 248 00:15:04,670 --> 00:15:13,600 >> Obvestilo edina razlika je, kaj vrstico kode? >> [Študent] 25. >> [Malan] Ja, 25. 249 00:15:13,600 --> 00:15:17,680 In nikoli nismo zares videl ta trik samo še, ampak nismo videli klicaj v ponedeljek, 250 00:15:17,680 --> 00:15:21,070 kar pomeni kaj? >> [Študent] Ni. Ne >> ali negacija. 251 00:15:21,070 --> 00:15:23,510 Tako da Boolova vrednost in flip svojo vrednost. 252 00:15:23,510 --> 00:15:25,810 Res postane false, false postane resnica. 253 00:15:25,810 --> 00:15:30,420 Torej je to, jaz bi predlagal, je še malo bolj intuitiven način pisanja kode 254 00:15:30,420 --> 00:15:33,430 ker sem še vedno inicializirati hvaležen za lažno, še vedno naredite, 255 00:15:33,430 --> 00:15:36,010 Sem iz hvaležen res, ko pride čas, 256 00:15:36,010 --> 00:15:40,880 zdaj pa res samo prevesti to kodo ustno leve proti desni, 257 00:15:40,880 --> 00:15:45,630 while (hvaležna!), ker poka ali klicaj pomeni pojem ni 258 00:15:45,630 --> 00:15:47,580 zato pa ni hvaležen. 259 00:15:47,580 --> 00:15:49,900 Torej, še enkrat, da nismo uvedli nobenih novih konceptov na sebi. 260 00:15:49,900 --> 00:15:53,730 Pogovarjala sva se o Booleans nazaj, ko smo igrali z Scratch, 261 00:15:53,730 --> 00:15:56,720 toda zavedati, zdaj pa smo lahko le začeli pisati svojo kodo na več različnih načinov. 262 00:15:56,720 --> 00:16:01,060 Torej, še posebej, če ste pset1 vrsta bori, da ugotovimo, kako, da napišete nekaj program, 263 00:16:01,060 --> 00:16:04,340 Možnosti so, da ste v srečo, ker ne more biti poljubno število rešitev 264 00:16:04,340 --> 00:16:06,110 da lahko naletite na. 265 00:16:06,110 --> 00:16:10,500 Na primer, to je samo 3 za celo najpreprostejši programov. V redu. 266 00:16:10,500 --> 00:16:14,200 In zdaj opozarjajo na ponedeljek smo odšli na to opombo s izračunani vrednosti. 267 00:16:14,200 --> 00:16:18,450 Torej, za zelo prvič smo pisali program, ki ne le imela glavno; 268 00:16:18,450 --> 00:16:22,550 ima tudi svoj lasten funkcijo, ki sem ga napisal tukaj. 269 00:16:22,550 --> 00:16:26,810 Torej, v skladu z 31 34 sem izvedel kocke funkcijo. 270 00:16:26,810 --> 00:16:30,240 To ni zapletena. To je samo * a * v tej zadevi. 271 00:16:30,240 --> 00:16:34,750 Toda, kaj je pomembno pa je, da sem ob vložek v obliki 272 00:16:34,750 --> 00:16:39,180 in sem vrnil izhod v obliki * a *. 273 00:16:39,180 --> 00:16:43,560 Zdaj sem imel možnost, tako kot sem se z prinf samo, 274 00:16:43,560 --> 00:16:47,240 za klic te funkcije tako, da zahteva funkcijo kocke. 275 00:16:47,240 --> 00:16:51,970 >> In kocka funkcija traja nekaj vložek, in kocka funkcija vrne neko moč. 276 00:16:51,970 --> 00:16:56,960 Nasprotno, le printf naredila. 277 00:16:56,960 --> 00:17:00,840 To ni vrnil vse, kar smo skrbeli, čeprav je namenjen le-ta vrne vrednost; 278 00:17:00,840 --> 00:17:03,110 si ponavadi prezreti. 279 00:17:03,110 --> 00:17:06,510 Printf pravkar naredil nekaj. To je stranski učinek tiskanja na zaslonu. 280 00:17:06,510 --> 00:17:11,770 V nasprotju s tem moramo kocke funkcijo, ki dejansko vrne nekaj. 281 00:17:11,770 --> 00:17:15,520 Torej za tiste, seznanjeni s tem, da je dokaj enostavna ideja. 282 00:17:15,520 --> 00:17:19,640 Toda za tiste, ki še ne poznate te ideje poteka v vhodov in izhodov dobili nazaj, 283 00:17:19,640 --> 00:17:21,950 poskusimo le nekaj super enostavno. 284 00:17:21,950 --> 00:17:25,490 Ali kdo udobno prihaja na oder za kratek čas? 285 00:17:25,490 --> 00:17:28,040 Moraš biti zadovoljni s kamero na vas. Ja? Ok. 286 00:17:28,040 --> 00:17:31,240 Kako ti je ime? >> [Študent] Ken. >> Ken. V redu. Ken, pridi gor. 287 00:17:31,240 --> 00:17:35,050 Ken se bo funkcija vrste tukaj. 288 00:17:35,050 --> 00:17:38,720 Pojdimo naprej in to je to. Gremo malo domišljije. 289 00:17:38,720 --> 00:17:42,260 Me veseli, da sva se spoznala. Dobrodošli v središču pozornosti. V redu. 290 00:17:42,260 --> 00:17:46,640 Gremo ta gumb tukaj. V redu. 291 00:17:46,640 --> 00:17:49,820 Torej, tukaj imate sodobno tabli, 292 00:17:49,820 --> 00:17:53,470 in kaj sem jaz, je glavna funkcija, na primer, 293 00:17:53,470 --> 00:17:56,460 in nimam iPad v moji roki. 294 00:17:56,460 --> 00:17:59,710 >> Ne spomnim se, kako - No, ne morem reči. 295 00:17:59,710 --> 00:18:02,480 Jaz nimam dobrih rokopis, 296 00:18:02,480 --> 00:18:05,520 in da zato hočem natisniti nekaj na zaslonu za mene. 297 00:18:05,520 --> 00:18:12,040 Jaz sem pa glavni program, in bom, da vam to povem 298 00:18:12,040 --> 00:18:16,720 tako, da ga v mojem pisanju piščanca praske in nato mimo vas vnosa. 299 00:18:16,720 --> 00:18:20,400 Tako neumno, čeprav je ta vaja je pojem funkcij in kliče funkcijo 300 00:18:20,400 --> 00:18:22,400 in vračanje funkcijo res izvira do tega. 301 00:18:22,400 --> 00:18:26,260 Jaz sem glavni, pravkar sem napisal printf, citiram, konec citata nekaj na zaslonu, 302 00:18:26,260 --> 00:18:29,110 Tečem ta program, in takoj, ko dobi printf pozval, 303 00:18:29,110 --> 00:18:32,880 se vzame en argument ali en parameter včasih med dvojnimi narekovaji. 304 00:18:32,880 --> 00:18:35,880 Tukaj je ta argument. Bom gre v Ken. 305 00:18:35,880 --> 00:18:39,020 Je črna skrinjica napisal nekaj več leti 306 00:18:39,020 --> 00:18:41,510 , ki očitno ve, kako natisniti stvari na zaslonu. 307 00:18:41,510 --> 00:18:43,150 Torej izvesti. 308 00:18:49,280 --> 00:18:51,280 To ni slabo. Zelo dobro. 309 00:18:51,280 --> 00:18:55,510 Torej, zdaj je naredil Ken izvršitve. Ali je potrebno, da bi mi karkoli? 310 00:18:55,510 --> 00:18:57,470 Saj ne, da smo videli doslej. 311 00:18:57,470 --> 00:19:00,460 Spet printf, dejansko vrne število, vendar bomo prezreti, da za zdaj 312 00:19:00,460 --> 00:19:03,470 saj nikoli nismo uporabljali. Tako da je pri Kenu. 313 00:19:03,470 --> 00:19:08,580 In zdaj glavni prevzame nadzor programa ponovno 314 00:19:08,580 --> 00:19:11,060 ker je ta vrstica kode, printf, se opravi izvršitve. 315 00:19:11,060 --> 00:19:14,050 In gremo o naši poti, izvajanje kakršne koli druge linije so tam. 316 00:19:14,050 --> 00:19:17,320 Torej, zdaj poskusimo nekoliko drugačen primer. 317 00:19:17,320 --> 00:19:24,940 Tokrat sem dajmo 1. počistite zaslon, in tokrat bom naredil cubing funkcijo, 318 00:19:24,940 --> 00:19:27,080 tokrat pa pričakujem, da bo izhodno vrednost. 319 00:19:27,080 --> 00:19:29,180 >> Torej, gremo naprej in to je to. 320 00:19:29,180 --> 00:19:35,790 Zdaj imam vrstico kode, ki pravi x dobi kocko x. 321 00:19:41,370 --> 00:19:46,370 Vrstica kode, odpoklic, izgleda takole: x = kocka (x); 322 00:19:46,370 --> 00:19:50,930 Torej, kako se bo to delovalo? Gremo naprej in dal bel zaslon znova. 323 00:19:50,930 --> 00:19:54,070 Jaz bom zapisal zdaj vrednost x, 324 00:19:54,070 --> 00:20:01,400 ki je v tem trenutku zgodi, da se, recimo, 2 naj bo enostavno. 325 00:20:01,400 --> 00:20:06,150 Sem zapisal na list papirja, vrednost 2, kar je moja vrednost x. 326 00:20:06,150 --> 00:20:10,920 Sem ga predati Ken. >> In sem napisal odgovor? >> Ja, kaj je samo napisal odgovor. 327 00:20:12,760 --> 00:20:18,940 Ok. In sedaj ima vrniti mi nekaj. Popolno. Lepo segue. 328 00:20:18,940 --> 00:20:23,120 Torej, zdaj mi roke nazaj na vrednost 8, v tem primeru, in kaj naj naredim z njim? 329 00:20:23,120 --> 00:20:28,250 Pravzaprav - poglejmo, dobil to pravico. Kaj bom z njim? 330 00:20:28,250 --> 00:20:33,440 Zdaj bom izkoristil to vrednost in dejansko ga shranite v teh bitov pomnilnika. 331 00:20:33,440 --> 00:20:35,170 Ampak opazil sem nekako borila tukaj. 332 00:20:35,170 --> 00:20:38,210 Jaz sem malo zmeden, saj kje sem dejansko napisal vrednost x, 333 00:20:38,210 --> 00:20:43,150 ker tisto, kar sem pravkar naredil, je fizično ročno Ken kos papirja, ki je imel vrednost 2, 334 00:20:43,150 --> 00:20:46,590 ki je bila x in seveda, to je natančno tisto, kar se je zgodilo. 335 00:20:46,590 --> 00:20:50,210 Tako se izkaže, da je, ko kličemo funkcijo in hodite v argumentu 336 00:20:50,210 --> 00:20:53,290 kot zdravo, svet ali hodite v argument kot 2, 337 00:20:53,290 --> 00:20:57,110 Na splošno ti gre v kopiji te trditve. 338 00:20:57,110 --> 00:21:00,730 In tako kot sem napisal številko 2 tukaj, in ga izročil Kenu, 339 00:21:00,730 --> 00:21:04,720 da je pomenilo, da sem še vedno kopijo vrednosti 2 nekje 340 00:21:04,720 --> 00:21:08,890 saj res, zdaj, ko sem prišel nazaj na vrednost 8, moram iti nazaj v RAM 341 00:21:08,890 --> 00:21:12,130 in dejansko napišite 8, kjer sem nekoč imel številko 2. 342 00:21:12,130 --> 00:21:16,950 Tako vizualno, se spomnite tega pojma poteka v dobesedno kopijo vrednosti. 343 00:21:16,950 --> 00:21:20,780 >> Ken pa njegova stvar, mi roke spet nekaj - v tem primeru vrednost kot 8 - 344 00:21:20,780 --> 00:21:24,980 in potem sem moral nekaj storiti s to vrednostjo, če želim, da ostane okoli. 345 00:21:24,980 --> 00:21:29,650 Torej bo vse to vrnil, da je vse preveč seznanjeni kmalu. 346 00:21:29,650 --> 00:21:34,920 Najlepša hvala za ta demo tukaj, Ken. [Aplavz] 347 00:21:34,920 --> 00:21:36,920 Zelo dobro opravljeno. 348 00:21:36,920 --> 00:21:42,690 Poglejmo, kako je to v končni fazi se nanaša na nekatere funkcije kliče, da smo bili tu. 349 00:21:42,690 --> 00:21:47,910 Naj gredo naprej in nas pripelje nazaj cubing primer tukaj. 350 00:21:47,910 --> 00:21:53,300 Obvestilo, da če želimo dejansko začnete jemati to še dodatno, 351 00:21:53,300 --> 00:21:57,570 bomo morali biti pozorni na dejstvo, da se je število x je, da je prenesel tukaj 352 00:21:57,570 --> 00:22:01,530 je drugačen od tistega, kar je dejansko prenesena v funkciji. 353 00:22:01,530 --> 00:22:05,880 Torej, še enkrat, to mimo kopija bo postal precej nem čez nekaj trenutkov. 354 00:22:05,880 --> 00:22:09,580 Oglejmo si na nekaj, kar ne deluje čisto prav je prazna. 355 00:22:09,580 --> 00:22:13,250 Grem, da gredo naprej in odprite tretji primer hroščat, ki je pomanjkljiv, po naravi 356 00:22:13,250 --> 00:22:18,550 in se imenuje buggy3 in izvaja swapping funkcijo. 357 00:22:18,550 --> 00:22:25,110 Tukaj imamo glavno funkcijo, ki je x in y samovoljno inicializiranega za 1 in 2, v tem zaporedju. 358 00:22:25,110 --> 00:22:27,700 Mi lahko uporabite GetInt, vendar potrebujete le preprosto vajo 359 00:22:27,700 --> 00:22:30,170 tako da je težko kodirane kot 1 in 2. 360 00:22:30,170 --> 00:22:35,340 V vrsticah 21 in 22, se očitno izpisal X in Y, 1 na linijo. 361 00:22:35,340 --> 00:22:39,720 Nato v vrstici 23, trdim, sem zamenjala te vrednote, pika, pika, pika. 362 00:22:39,720 --> 00:22:44,170 Jaz očitno poklicati funkcijo v skladu 24 ti swap, ki traja 2 argumente. 363 00:22:44,170 --> 00:22:48,300 To je popolnoma zakonit, za funkcije, da se 2 argumente. Videli smo printf to že. 364 00:22:48,300 --> 00:22:51,830 >> Torej, zamenjava očitno meni, X in Y, in kot že ime pove, 365 00:22:51,830 --> 00:22:54,670 Upam, da se bo zamenjal te 2 vrednosti. 366 00:22:54,670 --> 00:23:00,090 Torej trdim na liniji 25 "zamenjali!" in sem ponatis x in y 367 00:23:00,090 --> 00:23:03,070 ob predpostavki, da ste bili dejansko zamenjani. 368 00:23:03,070 --> 00:23:06,080 Ampak, če sem dejansko zagon tega programa - naj odpre terminalsko okno, 369 00:23:06,080 --> 00:23:09,860 dovolite mi, da buggy3 - kot že ime pove, to ne bo dobro končalo 370 00:23:09,860 --> 00:23:15,770 ker ko sem pritisnite tipko Enter, opazite, da je x 1, y 2, 371 00:23:15,770 --> 00:23:19,420 in še na koncu programa, so še vedno v bistvu isto. 372 00:23:19,420 --> 00:23:22,960 Torej, temelji na dokazu pravkar z Ken, kaj se pravzaprav dogaja? 373 00:23:22,960 --> 00:23:28,710 Naj se potopite v to swap funkcijo. To je super kratki. To je le nekaj vrstic kode dolgo. 374 00:23:28,710 --> 00:23:34,520 Toda kaj je temeljna težava temelji na preprosti zgodbi povedal tukaj s Ken? 375 00:23:34,520 --> 00:23:36,670 Zakaj je zamenjava pokvarjen? 376 00:23:36,670 --> 00:23:39,660 [Študent] si shranite v kopijo, ne spremenljivke. 377 00:23:39,660 --> 00:23:43,980 Točno tako. Mi smo za shranjevanje kopijo, ni je spremenljivka sama. 378 00:23:43,980 --> 00:23:47,170 Z drugimi besedami, zamenjava očitno traja 2 argumente, int, 379 00:23:47,170 --> 00:23:49,370 in se je samovoljno imenuje in b, 380 00:23:49,370 --> 00:23:54,420 in tukaj sem opravil v x in y, ki so oziroma 1 in 2, 381 00:23:54,420 --> 00:23:58,770 ampak jaz ne dobesedno poteka v x, ne bom dobesedno poteka v y, 382 00:23:58,770 --> 00:24:01,450 Jaz sem mimo kopijo x in kopijo y. 383 00:24:01,450 --> 00:24:04,510 To je skoraj tako, kot da ste kopirali in prilepili v zamenjavo 384 00:24:04,510 --> 00:24:07,810 vrednosti, ki jih želite, da se dejansko manipulira. 385 00:24:07,810 --> 00:24:14,480 Torej, če je to tako, ko sem program za začetek izvršitve linije 35, nato 36, 386 00:24:14,480 --> 00:24:18,650 ko pridem v skladu 37, na tej točki v zgodbo, kaj je vrednost? 387 00:24:21,040 --> 00:24:25,050 Na tej točki v zgodbo, linija 37, kar je vrednost v tem trenutku? >> [Študent] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] mora biti samo 1, v redu, saj je x sprejet kot prvi argument, 389 00:24:29,280 --> 00:24:33,080 in ta funkcija le arbitrarno kliče svoj prvi argument za. 390 00:24:33,080 --> 00:24:38,200 Podobno je y drugega argumenta, in to je le arbitrarno kliče drugega argumenta b. 391 00:24:38,200 --> 00:24:40,990 >> Ta dihotomija je pravzaprav precej enostavno razložiti. Premisli. 392 00:24:40,990 --> 00:24:43,320 Nihče od nas ni srečal osebo, ki je napisal printf, 393 00:24:43,320 --> 00:24:50,770 tako gotovo, on ali ona nima pojma, kaj so naše spremenljivke 30 let kasneje se dogaja, da se imenuje. 394 00:24:50,770 --> 00:24:56,650 Torej je treba razlikovati med pravite spremenljivke v funkcijah pišete 395 00:24:56,650 --> 00:25:02,080 in kaj praviš spremenljivke v funkcijah kličeš ali uporabo. 396 00:25:02,080 --> 00:25:05,340 Torej, z drugimi besedami, ki sem jih napisal svoje spremenljivk, x in y, 397 00:25:05,340 --> 00:25:08,890 ampak, če je nekdo drug napisal swap funkcijo, on ali ona zagotovo ne bi vedel 398 00:25:08,890 --> 00:25:10,690 kaj moje spremenljivke se bodo pozval, 399 00:25:10,690 --> 00:25:13,830 Tako, da je to, zakaj ste to dvojnost imen. 400 00:25:13,830 --> 00:25:16,750 Tehnično sem lahko to po naključju, 401 00:25:16,750 --> 00:25:20,080 vendar bi bile še vedno sprejet kot kopije. 402 00:25:20,080 --> 00:25:23,650 To bi šele bilo čisto naključje estetsko, če je oseba, ki je napisal swap 403 00:25:23,650 --> 00:25:26,150 bila uporabljena ista imena. 404 00:25:26,150 --> 00:25:32,370 Torej, v tem trenutku v zgodbi, linija 37, je 1, b 2, in zdaj bom nadaljeval, da jih swap. 405 00:25:32,370 --> 00:25:34,900 Najprej naj dejansko to veliko bolj preprosto. 406 00:25:34,900 --> 00:25:36,690 Ne vem, kaj ti 3 vrstic kode so počeli. 407 00:25:36,690 --> 00:25:41,210 Naj samo to: b =; = b; storiti. 408 00:25:41,210 --> 00:25:44,690 Zakaj je to napačno, logično? 409 00:25:46,490 --> 00:25:48,900 To je nekako intuitivno stvar, kajne? 410 00:25:48,900 --> 00:25:52,560 Torej zapade b in b postane, 411 00:25:52,560 --> 00:25:57,730 ampak problem je, da takoj, ko je linija 37 izvaja, kaj je vrednost A in B? 412 00:25:57,730 --> 00:26:03,410 Enako, 1, ker ste clobbered, če se tako izrazim, ste spremenili b, da enaka. 413 00:26:03,410 --> 00:26:08,890 Torej, ko je linija 37 izvršena, je to super, zdaj imaš 2 kopije številka 1 414 00:26:08,890 --> 00:26:13,350 znotraj te funkcije, tako da potem, ko pravite, v skladu 38 = b, 415 00:26:13,350 --> 00:26:17,640 ste nekako zajebali, ker ste šele dodeljevanje 1-1. 416 00:26:17,640 --> 00:26:20,580 Si nekako izgubila vrednost, ki jo zanimalo. 417 00:26:20,580 --> 00:26:23,220 Torej, v prvotni različici tega opazil, kaj sem storil. 418 00:26:23,220 --> 00:26:26,850 Sem imel namesto tretjo linijo kode, ki je izgledal takole. 419 00:26:26,850 --> 00:26:28,580 Izjavljam, začasno spremenljivko. 420 00:26:28,580 --> 00:26:32,170 >> NTU je zelo pogosto ime za začasno spremenljivko, in to je int 421 00:26:32,170 --> 00:26:34,580 ker je za tekmo, kaj želim narediti kopijo. 422 00:26:34,580 --> 00:26:39,770 I shranite kopijo notranjosti tmp, tako da, ko je linija 37 izvršen, 423 00:26:39,770 --> 00:26:45,860 vrednost je - hitro sanity check - 1, vrednost B je 2, 424 00:26:45,860 --> 00:26:48,970 in vrednost tmp je tudi 1. 425 00:26:48,970 --> 00:26:52,060 Zdaj sem izvesti linijo 38. 426 00:26:52,060 --> 00:27:00,540 Ko vrstica 38 izvaja, prevzame vrednosti b. In b je bilo: 2, tako da je zdaj 2. 427 00:27:00,540 --> 00:27:05,210 Torej, na tej točki v zgodbo, je 2, b 2 in tmp je 1, 428 00:27:05,210 --> 00:27:11,060 tako da zdaj logično, smo lahko vrednost preprosto Pljuskanje NTU je v b in smo končali. 429 00:27:11,060 --> 00:27:12,800 Tako smo rešili ta problem. 430 00:27:12,800 --> 00:27:17,720 Na žalost, ko sem zagon tega programa v tej obliki, se dejansko ne zamenjajo nobenih vrednosti. 431 00:27:17,720 --> 00:27:20,100 Vendar mora biti jasno, zakaj? 432 00:27:23,660 --> 00:27:26,450 Popravil sem logično težave s samo trenutek nazaj, 433 00:27:26,450 --> 00:27:31,020 ampak spet, če sem teči ta program, x in y ostajajo nespremenjene 434 00:27:31,020 --> 00:27:33,310 do konca izvajanja programa. 435 00:27:33,310 --> 00:27:37,220 [Neslišno študentski komentiraj] >> nismo vrnili ničesar, tako da je res. 436 00:27:37,220 --> 00:27:39,670 Vendar se je izkazalo, da je malo problem, ker sem tako daleč, 437 00:27:39,670 --> 00:27:44,170 Edina stvar, ki smo jo bili sposobni vrniti, je ena stvar, in to je omejitev C. 438 00:27:44,170 --> 00:27:49,070 Lahko samo vrne res eno vrednost, pri čemer sem nekako obtičal tukaj 439 00:27:49,070 --> 00:27:53,310 ker sem lahko vrne novo vrednost x, ali sem lahko vrne novo vrednost y, 440 00:27:53,310 --> 00:27:55,190 ampak želim tako nazaj. 441 00:27:55,190 --> 00:27:58,650 Torej se ne vrača enostavna rešitev tukaj. 442 00:27:58,650 --> 00:28:01,710 Ampak problem je bistveno zakaj? Kaj smo dejansko zamenjali? 443 00:28:01,710 --> 00:28:04,190 [Študent], in b. >> In b. 444 00:28:04,190 --> 00:28:08,230 Ampak a in b so kopije x in y, kar pomeni, da smo pravkar naredil vse to delo, 445 00:28:08,230 --> 00:28:11,650 sva preživela 3 minut govoril o zamenjavi funkcije in vse 3 teh spremenljivk, 446 00:28:11,650 --> 00:28:15,420 in to je super, popolnoma prav v izolaciji, 447 00:28:15,420 --> 00:28:20,740 a in področje B je le, da je v teh vrsticah tukaj. 448 00:28:20,740 --> 00:28:24,790 >> Torej, tako kot za zanke, če ugotovi, celo število i notranjost za zanke, 449 00:28:24,790 --> 00:28:28,760 Podobno, če ste razglasitvi in ​​b notranjost funkcije, ki ste jih napisali, 450 00:28:28,760 --> 00:28:33,320 oni so veljavna samo znotraj te funkcije, kar pomeni, da takoj po zamenjavi storil Izvršitveni 451 00:28:33,320 --> 00:28:38,470 in gremo od vrstice do vrstice 24 25, so x in y ni spremenil. 452 00:28:38,470 --> 00:28:42,790 Pravkar si zapravil veliko časa delili kopije spremenljivk. 453 00:28:42,790 --> 00:28:47,010 Tako se izkaže, da je rešitev za to dejansko ni očitno. 454 00:28:47,010 --> 00:28:50,670 To ni čisto dovolj za vrnitev vrednot, saj bomo lahko le vrne vrednost 1, 455 00:28:50,670 --> 00:28:53,470 in res želim, da bi zamenjali x in y sta ob istem času, 456 00:28:53,470 --> 00:28:55,210 Tako se bomo morali vrniti k temu. 457 00:28:55,210 --> 00:29:01,020 Toda za zdaj ugotovili, da je vprašanje bistveno izhaja iz dejstva, da sta A in B kopije 458 00:29:01,020 --> 00:29:03,630 in so na svojem področju. 459 00:29:03,630 --> 00:29:05,050 Poskusimo rešiti to na nek način. 460 00:29:05,050 --> 00:29:11,250 Naj se dejansko pomaknete nazaj in odprla, recimo, 1/4 varianta to, buggy4. 461 00:29:11,250 --> 00:29:13,370 Kaj praviš na to? 462 00:29:13,370 --> 00:29:17,810 To je podobno, vendar enostavnejši problem pogledati, preden bomo stab na to rešitev. 463 00:29:17,810 --> 00:29:24,190 Ta program se imenuje prirastek, in je očitno inicializira celo število x, 1 v skladu 18. 464 00:29:24,190 --> 00:29:28,150 Nato sem trdijo x 1, nato pa sem trdijo, "povečevanje ..." 465 00:29:28,150 --> 00:29:33,730 Nato sem poklical prirastek, nato pa v vrsticah 22 in 23, trdim, da so se postopoma povečuje, 466 00:29:33,730 --> 00:29:40,220 Trdim x Zdaj je, kar je - 2, verjetno -, vendar je ta program nečistnik. 467 00:29:40,220 --> 00:29:42,610 V čem je težava? 468 00:29:43,440 --> 00:29:50,160 Ja. >> [Neslišno študentski odziv] >> Točno tako. 469 00:29:50,160 --> 00:29:52,490 Tako je bila razglašena x, seveda, na spletu 18. 470 00:29:52,490 --> 00:29:54,700 To je znotraj zavitih oklepajih je glavni. 471 00:29:54,700 --> 00:29:58,440 Torej preprost odgovor tukaj je, da medtem ko x obstaja tukaj, 472 00:29:58,440 --> 00:30:03,930 ne obstaja v skladu 32, tako da je ta program dejansko sploh ne bo prevesti. 473 00:30:03,930 --> 00:30:07,940 Prevajalnik, ko sem poskusil priprave tega kodeksa se bo vpij name 474 00:30:07,940 --> 00:30:14,100 o nekaterih neprijavljeno identifikator ali nekaj v tem smislu. V bistvu, dajmo poskusiti. 475 00:30:14,100 --> 00:30:18,470 To je lahko buggy4. Tukaj je. 476 00:30:18,470 --> 00:30:22,110 Uporaba "x" neprijavljeno identifikator v skladu 32. 477 00:30:22,110 --> 00:30:25,580 In dejansko, bodimo bolj jasno danes, tako da je to koristno 478 00:30:25,580 --> 00:30:27,580 V uradnih ur in doma. 479 00:30:27,580 --> 00:30:29,300 >> Obvestilo, da je malo cryptically napisal. 480 00:30:29,300 --> 00:30:37,270 Toda dejstvo, da je Jek vpil na nas, pravijo buggy4.c: 32:5, je celo uporabno. 481 00:30:37,270 --> 00:30:42,050 To pomeni, da je napaka na liniji 32 na položaju 5 znakov. 482 00:30:42,050 --> 00:30:46,700 Torej 1, 2, 3, 4, 5. To je v resnici, kje je problem. 483 00:30:46,700 --> 00:30:49,790 In tudi preveč, ne pozabite na uradnih ur in doma, sem srečen tukaj. 484 00:30:49,790 --> 00:30:52,990 Imam samo eno napako. To se dogaja, da je relativno enostavno popraviti. 485 00:30:52,990 --> 00:30:55,990 Ampak, če boste dobili celoten zaslon poln ogromnega sporočil o napakah, 486 00:30:55,990 --> 00:31:00,330 ponovno spoznali, da bi Najnižja eno samo simptomatsko z vrhunskim 1. 487 00:31:00,330 --> 00:31:03,450 Torej vedno lovil svoje napake od zgoraj navzdol 488 00:31:03,450 --> 00:31:05,820 saj lahko samo verige daisy učinek 489 00:31:05,820 --> 00:31:09,240 , ki predlaga, da imate tako več težav, kot jih dejansko storiti. 490 00:31:09,240 --> 00:31:15,150 Torej, kako bi lahko to popravimo, če je moj cilj je, da prirastek x? >> [Študent] Naredite x globalna. 491 00:31:15,150 --> 00:31:17,060 Ok, tako da lahko naredimo x globalna. 492 00:31:17,060 --> 00:31:20,480 Oglejmo bližnjico, ki sem opozoril že prej, ampak vraga, smo morali hitro popraviti, 493 00:31:20,480 --> 00:31:25,730 Tako recimo int x tukaj. To naredi x globalna. 494 00:31:25,730 --> 00:31:31,800 Torej, zdaj je glavni dostop do njega in prirastek je dostop do njega, 495 00:31:31,800 --> 00:31:34,110 in zato naj gredo naprej in zbira sedaj. 496 00:31:34,110 --> 00:31:37,630 Naredite buggy4, Enter. Zdi se, da zdaj pripraviti. 497 00:31:37,630 --> 00:31:41,230 Naj teče buggy4. In zdi se, da dejansko delajo. 498 00:31:41,230 --> 00:31:45,150 To je ena od teh stvari, ki jih je naredil kot sem rekel, ne tako kot jaz, 499 00:31:45,150 --> 00:31:47,010 kot sem pravkar naredil tukaj, ker na splošno 500 00:31:47,010 --> 00:31:50,440 naši programi bodo dobili veliko bolj zanimivo in veliko dlje, kot je ta, 501 00:31:50,440 --> 00:31:56,390 in če je vaša rešitev za težave v življenju je samo dal vse spremenljivke na vrhu datoteke, 502 00:31:56,390 --> 00:31:59,690 Zelo hitro se programi dobili grozljivo težko upravljati. 503 00:31:59,690 --> 00:32:02,190 To postane težje izmisliti nove imeni spremenljivk, 504 00:32:02,190 --> 00:32:05,240 postane težje razumeti, kaj spremenljivka kaj počne, 505 00:32:05,240 --> 00:32:08,460 in tako na splošno, da to ni dobra rešitev. 506 00:32:08,460 --> 00:32:10,030 Torej, kaj je to bolje. 507 00:32:10,030 --> 00:32:12,160 Ne želimo uporabiti globalno spremenljivko tukaj. 508 00:32:12,160 --> 00:32:16,240 >> Rad bi prirastek x, tako da sem lahko očitno - 509 00:32:16,240 --> 00:32:18,670 Na koncu dneva, to je nekako neumno zgodbo, ker smo ravno to - 510 00:32:18,670 --> 00:32:24,450 če pa nisem vedel o tem operaterju, ali pa ni bilo dovoljeno spremeniti v main sama, 511 00:32:24,450 --> 00:32:30,730 kako pa bi lahko izvajala Ken sem tokrat ne kocko, ampak prirastek? 512 00:32:31,380 --> 00:32:33,190 Kako spremenimo te stvari tukaj? Ja. 513 00:32:33,190 --> 00:32:38,480 [Študent] Pass v x in se nato vrnite [neslišno] >> Dobro, dobro. 514 00:32:38,480 --> 00:32:41,900 Torej, zakaj ne bi šel mimo mene in x in potem ne vrne, 515 00:32:41,900 --> 00:32:44,870 Zakaj ne bi preprosto ne vrne x + 1. 516 00:32:44,870 --> 00:32:47,710 Nekaj ​​več stvari je tukaj spremenilo. Sem na pravi poti. 517 00:32:47,710 --> 00:32:49,770 Kaj še moram poteg? Nekdo drug. Ja. 518 00:32:49,770 --> 00:32:51,740 [Neslišno študentski odziv] 519 00:32:51,740 --> 00:32:54,730 Moram spremeniti vrnitev vrsto prirastka, ker ne nična. 520 00:32:54,730 --> 00:32:57,780 Praznina pomeni nič se vrne, ampak zdaj je jasno, 521 00:32:57,780 --> 00:32:59,830 tako da mora to spremeniti, da - >> [študentski] int. 522 00:32:59,830 --> 00:33:02,740 int biti v skladu s kar sem dejansko vrnil. 523 00:33:02,740 --> 00:33:05,180 Zdaj nekaj drugega je še vedno buggy tukaj. Ja. 524 00:33:05,180 --> 00:33:08,400 [Neslišno študentski odziv] >> [Malan] Torej moram prirastek x? 525 00:33:08,400 --> 00:33:12,080 [Neslišno študentski odziv] >> [Malan] Ah, tako da moram opraviti x. 526 00:33:12,080 --> 00:33:16,660 Torej moram narediti tukaj. >> [Neslišno študentski komentar] 527 00:33:16,660 --> 00:33:20,050 [Malan] Torej prototip, moram spremeniti to tukaj. 528 00:33:20,050 --> 00:33:22,930 Torej, to je, da postane int, to mora postati - 529 00:33:22,930 --> 00:33:25,620 hmm, pravzaprav imam hrošča tukaj. Spravimo tole prvi. 530 00:33:25,620 --> 00:33:29,590 Kaj bi to dejansko bilo? To je dobil, da je nekaj int. 531 00:33:29,590 --> 00:33:32,700 Lahko bi bilo x, vendar odkrito povedano, če ste začeli klicati vse vaše x spremenljivke, 532 00:33:32,700 --> 00:33:35,390 to se dogaja, da se vse manj jasno, kdo je kdo. 533 00:33:35,390 --> 00:33:39,560 >> Vzemiva poljubno izberete drug način poimenovanja za moj pomočnik funkcij, 534 00:33:39,560 --> 00:33:41,940 funkcije pišem. Bomo rekli, ali pa bi ga lahko imenovali - 535 00:33:41,940 --> 00:33:45,010 Naj bo število še bolj izrazita. 536 00:33:45,010 --> 00:33:47,560 Torej moram vrniti ne glede na število plus 1, 537 00:33:47,560 --> 00:33:50,740 in zdaj moram spremeniti 1 druga stvar tukaj in še ena stvar, ki sem gor. 538 00:33:50,740 --> 00:33:54,350 Kaj moram spremeniti na spletu 21 prvi? >> [Neslišno študentski odziv] 539 00:33:54,350 --> 00:33:57,610 [Malan] Imam jih dodeli x. Ne morem poklicati prirastek (x). 540 00:33:57,610 --> 00:34:01,960 Moram se spomniti odgovora s spremembo vrednosti x na levi strani. 541 00:34:01,960 --> 00:34:04,680 In čeprav je x sedaj na levi in ​​desni, to je popolnoma v redu 542 00:34:04,680 --> 00:34:08,860 ker postane desna stran izvrši, potem pa dobi plopped v levem stvar - 543 00:34:08,860 --> 00:34:10,600 x v tem primeru. 544 00:34:10,600 --> 00:34:12,159 In potem končno, to je enostavno popraviti zdaj. 545 00:34:12,159 --> 00:34:17,230 To naj bi samo tekmo, kaj je spodaj, int številko. 546 00:34:17,230 --> 00:34:20,570 Torej cel kup sprememb za res neumno funkcijo 547 00:34:20,570 --> 00:34:24,420 vendar reprezentativen stvari, da bomo vedno bolj želijo storiti. 548 00:34:24,420 --> 00:34:27,090 Torej, da buggy4. Sem nekje zajebali. 549 00:34:27,090 --> 00:34:30,139 Oh, moj bog. Pet napak v 6-line programa. 550 00:34:30,139 --> 00:34:35,690 Torej, kaj je narobe na liniji 18, značaj 5? 551 00:34:35,690 --> 00:34:39,610 Torej moram prijaviti to, int. 552 00:34:39,610 --> 00:34:41,920 Pa poglejmo. Obstaja cel kup drugih napak. 553 00:34:41,920 --> 00:34:47,010 Oh, moj bog - 19, 18, 21 -, vendar še enkrat, kaj je samo počistite zaslon, Nadzorna L tukaj 554 00:34:47,010 --> 00:34:49,380 in ponovitev Jek. 555 00:34:49,380 --> 00:34:51,340 Torej 5 problemov, ki je pravzaprav zgolj 1. 556 00:34:51,340 --> 00:34:57,520 Torej, zdaj pa teče buggy4, Enter. Uh, je bilo x poveča pravilno. 557 00:34:57,520 --> 00:35:02,720 V redu. Vsa vprašanja o tem, kako prirastek številke? Ja. 558 00:35:02,720 --> 00:35:09,870 [Neslišno študentski vprašanje] >> Dobro vprašanje. 559 00:35:09,870 --> 00:35:14,220 Kako to, da sem lahko samo spremeniti x na številko in program bo takoj vedeli? 560 00:35:14,220 --> 00:35:16,200 >> Še enkrat, mislim, da je to abstrakcijo. 561 00:35:16,200 --> 00:35:21,600 Torej, če sem glavni in Ken je prirastek, odkrito povedano, mi ni mar, kaj Ken zahteva njegov iPad. 562 00:35:21,600 --> 00:35:26,570 Ni mi mar, kaj se kliče vse, kar ima opraviti z njegovim izvajanjem te funkcije. 563 00:35:26,570 --> 00:35:33,340 To je podrobno izvajanje, da sem glavni, ne bi bilo treba skrbeti. 564 00:35:33,340 --> 00:35:38,250 In tako preprosto spreminjanje dosledno znotraj funkcije - številka in številka tu tu - 565 00:35:38,250 --> 00:35:40,960 je vse, kar traja tako dolgo, kot sem prevedem. 566 00:35:40,960 --> 00:35:44,180 To je neke vrste všeč, če menite, da o mnogih izmed nas, tiste, ki ste dovoljenj voznika 567 00:35:44,180 --> 00:35:46,770 ki so posledica ali če ste še vozi v avtu, 568 00:35:46,770 --> 00:35:50,950 večina od nas nima pojma, kako avto deluje pod pokrovom. 569 00:35:50,950 --> 00:35:54,970 In dobesedno, če odpreš pokrov motorja, večina od nas - vključno z mano - 570 00:35:54,970 --> 00:35:56,940 ne bomo zares vedeli, kaj smo iskali na, 571 00:35:56,940 --> 00:35:59,220 nekako tako kot bi se počutite s takimi stvarmi tem zdaj. 572 00:35:59,220 --> 00:36:01,480 Ampak ne bomo res morali skrbeti, kako avto deluje, 573 00:36:01,480 --> 00:36:05,970 nimamo na skrbi, kaj vse palice in bati in kablov v notranjosti vozila 574 00:36:05,970 --> 00:36:08,160 dejansko delaš. 575 00:36:08,160 --> 00:36:12,770 Torej nekaj podobnega, kar imenujete bat ni pomembno, tukaj, v tej zadevi. Enako ideja. 576 00:36:12,770 --> 00:36:25,300 Ja. >> [Neslišno študentski vprašanje] 577 00:36:25,300 --> 00:36:29,180 Če obstaja več uporabe variabilnega trenutku Xa nazaj 578 00:36:29,180 --> 00:36:32,150 da bi programer, imate, da jih spremenite povsod. 579 00:36:32,150 --> 00:36:36,600 Ali pa bi lahko dobesedno storiti datoteke, Meni in nato Najdi, Zamenjaj - nekaj takega - 580 00:36:36,600 --> 00:36:39,170 vendar boste morali sami temi spremembami. 581 00:36:39,170 --> 00:36:47,450 Moraš biti dosledni. >> [Študent] Če obstaja več spremenljivk [neslišno] 582 00:36:47,450 --> 00:36:53,100 Zlasti, da tako kot tukaj, če je to int drugo številko? >> [Študent] Pravilno. 583 00:36:53,100 --> 00:36:56,590 [Malan] Ja. Da bi zadeve, ko kličete funkcijo. 584 00:36:56,590 --> 00:37:00,050 >> Torej, če sem klical prirastek tu z nekaj vejicami nekaj, 585 00:37:00,050 --> 00:37:01,680 obstaja neposredna preslikava. 586 00:37:01,680 --> 00:37:05,690 Prva spremenljivka, kar se imenuje, je naredil kopijo prvega argumenta tam. 587 00:37:05,690 --> 00:37:07,760 Žal mi je. To ne bi smelo biti oklepaj. 588 00:37:07,760 --> 00:37:11,490 Drugi argument poravna z druge. Tako da, ja, zadeve. V redu. 589 00:37:11,490 --> 00:37:17,020 Žal mi je. Vzel sem dolgo pot do tja. Druga vprašanja? V redu. 590 00:37:17,020 --> 00:37:20,610 Torej, da vidimo, če ne moremo naslikati sliko, kaj se pravzaprav dogaja 591 00:37:20,610 --> 00:37:23,090 Pod pokrovom motorja, tako rekoč. 592 00:37:23,090 --> 00:37:26,640 To je pravokotnik, ki lahko predstavljajo pomnilnik računalnika. 593 00:37:26,640 --> 00:37:30,970 Tudi če nimate pojma, kako spomin deluje in kako deluje RAM, 594 00:37:30,970 --> 00:37:33,940 vsaj predpostavimo, da imate grozde njim v teh dneh. 595 00:37:33,940 --> 00:37:36,280 Imaš megabajtov to, da imaš GB njo, 596 00:37:36,280 --> 00:37:40,870 in vemo, da iz tedna 0 Bajt je samo, kaj? >> [Študent] 8 bitov. 597 00:37:40,870 --> 00:37:42,950 8 bitov, kajne? Torej 8 ničle in 1. 598 00:37:42,950 --> 00:37:45,880 Torej, če ima računalnik koncert RAM, 2 nastopov RAM-a v teh dneh, 599 00:37:45,880 --> 00:37:55,030 imate milijard 2000000000 bajtov pomnilnika ali približno 8 milijard evrov oziroma 16000000000 bitov 600 00:37:55,030 --> 00:37:56,890 notranjost računalnika. 601 00:37:56,890 --> 00:38:00,590 Za razliko od na primer malo Woolyja Willy, to ni magnetni delci, tipično več. 602 00:38:00,590 --> 00:38:04,450 Vedno bolj - v prenosnih računalnikih najmanj - to je Solid State diski SSD,, 603 00:38:04,450 --> 00:38:08,580 Samo, da nimajo gibljivih delov. To je vse elektronsko. To je vse električne energije, ki temelji. 604 00:38:08,580 --> 00:38:14,060 Torej menite o tem pravokotniku kot samo predstavlja 1 ali 2 GB pomnilnika, ki jih imate. 605 00:38:14,060 --> 00:38:16,020 >> Torej je kos pomnilnika. 606 00:38:16,020 --> 00:38:19,830 V svetu računalništva je nekako ločen 607 00:38:19,830 --> 00:38:22,950 kose pomnilnika za različne stvari. 608 00:38:22,950 --> 00:38:27,190 Na primer, če je to računalnika RAM, kot ga je predlagala pravokotnik tam, 609 00:38:27,190 --> 00:38:31,130 Izkazalo se je, da je po dogovoru na vrhu vašega RAM-a, če se tako izrazim, 610 00:38:31,130 --> 00:38:33,660 Na splošno, kaj se ti besedilo segment. 611 00:38:33,660 --> 00:38:36,740 Tisti, ki so 0s in 1s, da ste pripravljeni. 612 00:38:36,740 --> 00:38:39,020 Torej, ko smo si ogledali pod pokrovom, kaj a.out je 613 00:38:39,020 --> 00:38:41,980 Vse to 0s in 1s, ko zaženete program, 614 00:38:41,980 --> 00:38:46,290 tisti 0s in 1s so obremenjena s trdega diska v nekaj, kar ti RAM, 615 00:38:46,290 --> 00:38:49,320 in v RAM oni dajo na vrhu. 616 00:38:49,320 --> 00:38:52,770 Medtem pa imate tudi druge stvari: Inicializacija podatkov, ustavljanja podatkov. 617 00:38:52,770 --> 00:38:57,510 Ti 2 redi pomnilnika se nanašajo na globalnih spremenljivk, ki jih ne uporabljate pogosto 618 00:38:57,510 --> 00:39:00,760 ampak včasih, če boste to storili, končajo tam kot dobro. 619 00:39:00,760 --> 00:39:04,260 Potem je tu še nekatere druge stvari: spremenljivke okolja, ki jih ne bodo porabili veliko časa za, 620 00:39:04,260 --> 00:39:06,860 potem pa bo 2 pomembni stvari, da pridejo nazaj skozi semester, 621 00:39:06,860 --> 00:39:08,550 kup in kup. 622 00:39:08,550 --> 00:39:12,210 Tako je večina spomin računalnika pridržane ko teče program 623 00:39:12,210 --> 00:39:15,370 za nekaj, kar se imenuje sklad, in nekaj, kar ti kup. 624 00:39:15,370 --> 00:39:18,840 Ne bomo govorili o kupu danes, pa bomo govorili o svežnju. 625 00:39:18,840 --> 00:39:24,600 Sveženj naj bi pričarali vizualno izmed restavracij pladnje obrokov dvorana v Parlamentu Mather 626 00:39:24,600 --> 00:39:28,110 ali kjer koli se zgodi, da je tam, kjer jedilnica osebja, ki jih čistijo vsak dan, 627 00:39:28,110 --> 00:39:30,180 jih zlagajo od tal gor, 628 00:39:30,180 --> 00:39:34,550 in podobno, v spomin pa je ta ideja, ki postavlja nekaj na kup, 629 00:39:34,550 --> 00:39:36,860 dajanje kaj na kup, dajanje nekaj na kup. 630 00:39:36,860 --> 00:39:38,240 In kaj mislimo s tem? 631 00:39:38,240 --> 00:39:41,860 >> Naj povečaj le na spodnji polovici slike, računalnika RAM, 632 00:39:41,860 --> 00:39:44,330 predlagati naslednje. 633 00:39:44,330 --> 00:39:48,170 Izkazalo se je, da ko zaženete program, kot a.out oz Hello - 634 00:39:48,170 --> 00:39:50,100 ne glede na program, ki ste napisali - 635 00:39:50,100 --> 00:39:54,020 spet so se 0s in 1s naložiti s trdega diska, ki je dolgoročno skladiščenje, 636 00:39:54,020 --> 00:39:57,230 tam tudi ostane, tudi če si potegnite vtikač, naložen v RAM. 637 00:39:57,230 --> 00:40:00,610 RAM je hitrejši od trdih diskov - to je manjša od trdih diskov - 638 00:40:00,610 --> 00:40:03,300 ampak to je, kadar programi v živo, ko ste jih izvaja. 639 00:40:03,300 --> 00:40:08,230 Torej dvokliknete program na Mac ali PC, je to naložiti s trdega diska v RAM. 640 00:40:08,230 --> 00:40:11,520 Takoj, ko je naložen v RAM, 0s in 1s iti na poti na vrh, 641 00:40:11,520 --> 00:40:16,610 ti besedilo segment, nato pa takoj, ko se začne program dejansko deluje, 642 00:40:16,610 --> 00:40:21,360 Glavna funkcija se imenuje, in glavni, kot smo videli, je pogosto lokalnih spremenljivk, 643 00:40:21,360 --> 00:40:24,870 in ima ints in godala in znakov, in podobno. 644 00:40:24,870 --> 00:40:29,180 Torej, če vaš program, ki ste napisali ali program, ki ste jo dvakrat kliknili 645 00:40:29,180 --> 00:40:32,970 uporabljajo nekatere spremenljivke znotraj glavnih, 646 00:40:32,970 --> 00:40:37,240 končajo na dnu kup pomnilnika, tako rekoč. 647 00:40:37,240 --> 00:40:39,410 Bolj natančno, kaj to dejansko pomeni? 648 00:40:39,410 --> 00:40:48,450 To samo pomeni, da če smo bili, da bo število bajtov RAM-a v računalniku, 649 00:40:48,450 --> 00:40:55,750 opazite, da je to morda bajt številka 0, to je lahko bajt številka 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 vse tja do 2000000000, bi bilo pa vse tja gor na vrhu. 651 00:41:01,480 --> 00:41:05,880 Torej, z drugimi besedami, ko govorimo o RAM in spomin glede bajte, 652 00:41:05,880 --> 00:41:11,500 to samo pomeni, da se je nekdo odločil, kaj oštevilčite vsako od teh kose pomnilnika. 653 00:41:11,500 --> 00:41:16,650 Torej, ko boste potrebovali 32 bitov za notr ali pa boste potrebovali 8 bitov za char, 654 00:41:16,650 --> 00:41:18,840 kje se končajo v spomin? 655 00:41:18,840 --> 00:41:22,350 >> Konceptualno so pravkar končali na dnu te stvari imenovani dimnik. 656 00:41:22,350 --> 00:41:25,870 Ampak kaj je zanimivo, zdaj, ko glavna zahteva funkcija - 657 00:41:25,870 --> 00:41:28,750 Predvidevam funkcijo imenovano foo, le poljubno ime - 658 00:41:28,750 --> 00:41:32,330 kaj se zgodi, glavno je na dnu te kup spomin; 659 00:41:32,330 --> 00:41:35,680 foo je zdaj dal na vrhu glavnega pomnilnika. 660 00:41:35,680 --> 00:41:40,990 Torej, vse lokalne spremenljivke, ki se končajo foo nekakšno konceptualno poleg tistih v glavnem. 661 00:41:40,990 --> 00:41:47,070 Če foo poziva novo funkcijo, imenovano bar, te spremenljivke končal tukaj. 662 00:41:47,070 --> 00:41:50,120 Če vrstica zahteva nekaj drugega, tukaj, tukaj, tukaj. 663 00:41:50,120 --> 00:41:53,830 Torej, kaj je zanimivo teče program, ki je, kot praviš funkcije 664 00:41:53,830 --> 00:41:57,750 in ker te funkcije klic funkcije in tiste funkcije, kot klice funkcij, 665 00:41:57,750 --> 00:42:01,470 si zgraditi to kup funkcij v spominu. 666 00:42:01,470 --> 00:42:06,890 In le enkrat vrne se začnete dobili ta vrnil spomin. 667 00:42:06,890 --> 00:42:10,860 Torej, eden izmed najlažjih načinov, da zmanjka pomnilnika v računalniškem programu 668 00:42:10,860 --> 00:42:14,360 je, da napišete funkcije, ki jih nikoli ne vrnejo. 669 00:42:14,360 --> 00:42:18,900 Tako na primer, kaj je pokazati toliko z namerno buggy programa. 670 00:42:18,900 --> 00:42:22,230 Naj gredo naprej in ne vključujejo # , 671 00:42:22,230 --> 00:42:25,000 int main (void) 672 00:42:25,000 --> 00:42:32,940 in jaz bom naredil, medtem ko (2> 1), ki verjetno ne bo nikoli sprememb na nas, 673 00:42:32,940 --> 00:42:37,560 in mi daj zdaj in ne printf. 674 00:42:37,560 --> 00:42:40,700 Pravzaprav, da se dogaja, da je manj vizualno zanimive. Naredimo to. 675 00:42:40,700 --> 00:42:50,240 Za int i = 0; i> 0 - dajmo to napako - i + +. 676 00:42:50,240 --> 00:42:52,720 In da ne printf tukaj. Naj praksi, kar sem pridigal. 677 00:42:52,720 --> 00:43:00,190 Pa način tu, nična refren, in bomo rekli, int i, 678 00:43:00,190 --> 00:43:06,830 in potem bom printf rekel - ne, naredimo to bolj zanimivo. 679 00:43:06,830 --> 00:43:15,790 Naj se dejansko ne natisne ničesar. Naj samo to: Refren (i). 680 00:43:15,790 --> 00:43:20,390 V redu. Torej, to je Otroški voziček zakaj? 681 00:43:20,390 --> 00:43:23,380 Delam to gor, kot sem šel, ker je program dejansko ne storiti ničesar interesov. 682 00:43:23,380 --> 00:43:25,320 >> Ampak to ni cilj. 683 00:43:25,320 --> 00:43:29,630 Cilj je, da napišete program, katerega glavna funkcija pa kaj, očitno? 684 00:43:30,720 --> 00:43:32,860 Sam klic. In pravzaprav ne potrebujemo zanko. 685 00:43:32,860 --> 00:43:37,200 Naj tudi poenostaviti to samo zato, da ne pozabimo na res temeljne napake. 686 00:43:37,200 --> 00:43:39,640 Glavna zahteva chorus peti nekaj refren, 687 00:43:39,640 --> 00:43:41,440 Potem pa sem naredil nekaj neumnega in sem imel refren refren klica 688 00:43:41,440 --> 00:43:43,760 Predvideval sem, da zato, ker je nekdo je, da bo njegovo izvajanje mogoče, 689 00:43:43,760 --> 00:43:47,210 in zdaj se to ne bo še prevesti. Moram narediti kaj? 690 00:43:47,210 --> 00:43:49,970 Rabim prototip, spomnim se. 691 00:43:49,970 --> 00:43:56,110 Torej moram imeti gor void refren (int i); 692 00:43:56,110 --> 00:43:59,210 Torej, zdaj, če grem dol - pravzaprav, kaj je uporabiti večje okno. 693 00:43:59,210 --> 00:44:01,980 Gremo naprej in da refren. 694 00:44:01,980 --> 00:44:06,490 Gremo naprej in da refren. 695 00:44:06,490 --> 00:44:08,370 Uporaba neprijavljenega identifikatorja i. 696 00:44:08,370 --> 00:44:12,500 Oh, to je bilo neumno. Ne potrebujemo argument. Naj samo to. 697 00:44:12,500 --> 00:44:16,370 Želim si, da bi začeli na ta način. Bilo bi veliko lažje napisati program. 698 00:44:16,370 --> 00:44:25,590 Tukaj. Zdaj greva v mojo terminalsko okno, zaženite Jek in gremo. 699 00:44:25,590 --> 00:44:28,460 To je bilo res hitro. 700 00:44:28,460 --> 00:44:31,150 Kaj se je dejansko zgodilo, kajne? 701 00:44:31,150 --> 00:44:33,730 No, zdaj bom dodati tiskanja linijo, tako da bomo videli. 702 00:44:33,730 --> 00:44:43,490 Naj povem printf ("Tukaj sem") - brez spremenljivke. Bomo pustiti tako. 703 00:44:43,490 --> 00:44:47,480 Naj bo ponovitev. Naj ponovitev refren. 704 00:44:47,480 --> 00:44:57,380 In ... daj no. Kar naprej. 705 00:44:57,380 --> 00:44:59,930 Kot prahi, zakaj je ni doživel še? 706 00:44:59,930 --> 00:45:02,080 Segmentacija je zgodila napaka, super hitro, preden. 707 00:45:02,080 --> 00:45:06,570 [Neslišno študentski odziv] >> Točno tako. Zato je potreben čas za tiskanje, kajne? 708 00:45:06,570 --> 00:45:08,610 Samo traja več dela o delu računalnika. 709 00:45:08,610 --> 00:45:10,620 In to je to: Segmentacija napaka. 710 00:45:10,620 --> 00:45:12,340 >> Torej, opazil, kako hitro delovanje programov. 711 00:45:12,340 --> 00:45:14,130 Če ne tiska nič, super hiter. 712 00:45:14,130 --> 00:45:18,770 Ampak še vedno imam to napako segmentacije, ker kaj se je dogajalo? 713 00:45:18,770 --> 00:45:21,210 Če menite, da o tem, kako je vaš računalnik pomnilnik je določeno, 714 00:45:21,210 --> 00:45:28,740 To se zgodi, da je glavna, ampak tukaj kaj je samo to imenujemo refren, in recimo ta refren. 715 00:45:28,740 --> 00:45:34,550 In zdaj, če jaz moje estetiko v redu, to je samo hotel reči, zbor, zbor, zbor, 716 00:45:34,550 --> 00:45:40,550 zbor, zbor, zbor, zbor, ad nauseum, in na koncu, kaj se bo zgodilo? 717 00:45:40,550 --> 00:45:45,630 Če velika slika, dobesedno, je to, kaj se je pravkar zgodilo konceptualno? 718 00:45:46,520 --> 00:45:48,630 Sveženj prekoračitve kup. 719 00:45:48,630 --> 00:45:51,940 Ali, še huje, si prekoračil vse, vključno z besedilom segmentu, 720 00:45:51,940 --> 00:45:54,590 ki je 0s in 1s, ki predstavljajo svoj program. 721 00:45:54,590 --> 00:45:57,080 Skratka, to je samo super, super slabo. 722 00:45:57,080 --> 00:45:58,830 Vaš program je spiraled izpod nadzora. 723 00:45:58,830 --> 00:46:01,220 Tako boste uporabljali več pomnilnika, kot si namenjen 724 00:46:01,220 --> 00:46:03,960 Vse zaradi neumne napake v tej zadevi, 725 00:46:03,960 --> 00:46:08,040 ali je v tem primeru zelo namerno naredil Funkcija se kliče. 726 00:46:08,040 --> 00:46:09,500 No, to še ni vse slabo. 727 00:46:09,500 --> 00:46:13,800 Funkcije se kliče dejansko ima veliko moč, če ga uporabljate pravilno. 728 00:46:13,800 --> 00:46:15,800 Nisem ga uporablja pravilno tukaj. 729 00:46:15,800 --> 00:46:19,780 Torej, to ni vse slabo, ampak dejstvo, da nikoli nisem ustaviti sebe kliče 730 00:46:19,780 --> 00:46:23,520 Temeljna slabost tukaj tega programa. 731 00:46:23,520 --> 00:46:26,400 Torej, kam gremo z vsem tem? Kaj se v resnici dogaja? 732 00:46:26,400 --> 00:46:30,340 Ko sem poklical prirastek funkcije, kot smo počeli v tistih primerih, 733 00:46:30,340 --> 00:46:33,420 Imam vrednost kot 1, da sem noter padejo 734 00:46:33,420 --> 00:46:37,570 Grem mimo v kopiji številka 1, tako da se zgodi naslednje. 735 00:46:37,570 --> 00:46:44,240 Pojdimo v prirastka na primer tale tu. 736 00:46:44,240 --> 00:46:46,870 Evo, kaj se pravzaprav dogaja. 737 00:46:46,870 --> 00:46:53,400 Ko sem poklical prirastek in sem mimo in x, slikovno, kaj se dogaja tukaj je ta. 738 00:46:53,400 --> 00:46:59,520 >> Če sem imel vrednost 1 shranjene tukaj in dejansko sem poklical prirastek, 739 00:46:59,520 --> 00:47:04,330 ki se zdaj imenuje zbor - iPad me je vrgel tukaj. 740 00:47:04,330 --> 00:47:09,760 Recimo ta korak, in ne vemo, kaj to naslednji funkcijo bo. 741 00:47:09,760 --> 00:47:14,840 Torej, kaj se pravzaprav dogaja tu nekje v glavnem imam kos pomnilnika 742 00:47:14,840 --> 00:47:17,000 da je shranjevanje številko 1. 743 00:47:17,000 --> 00:47:19,380 Ko sem poklical prirastek, sem z drugo kos pomnilnika, 744 00:47:19,380 --> 00:47:21,230 zdaj pa imam izvod 1. 745 00:47:21,230 --> 00:47:26,660 Ko sem prirastek te vrednosti, to postane 2, 746 00:47:26,660 --> 00:47:30,560 ampak kaj se zgodi takoj, ko prirastka vrne? 747 00:47:30,560 --> 00:47:33,630 Ta spomin dobi samo vrnejo na operacijski sistem, 748 00:47:33,630 --> 00:47:37,450 kar pomeni, da vse, kar ste storili nič koristno. 749 00:47:37,450 --> 00:47:43,120 Za 1, ki je bil prvotno iz main je še dejansko obstaja. 750 00:47:43,120 --> 00:47:44,890 Torej, kam gremo s tem? 751 00:47:44,890 --> 00:47:49,770 Izkazalo se je, da je v spomin imate to back-to-back zaporedje bajtov 752 00:47:49,770 --> 00:47:53,050 , ki jih lahko dajo stvari v in izkazalo se je, da smo že videli nekaj 753 00:47:53,050 --> 00:47:55,390 ki vključuje dajanje stvari, back to back to back to back. 754 00:47:55,390 --> 00:47:59,860 Kaj je niz temelji na teden 1 teden in zdaj 2? 755 00:48:00,020 --> 00:48:01,980 To je samo zbirka znakov. 756 00:48:01,980 --> 00:48:04,310 Tako se izkaže, prav tako lahko postavite številke v spominu, 757 00:48:04,310 --> 00:48:06,990 Podobno lahko postavite znake v spominu. 758 00:48:06,990 --> 00:48:10,530 In ko smo začeli polaganje znake v spomin na hrbtni strani v back to back, 759 00:48:10,530 --> 00:48:13,620 Izkazalo se je, da z uporabo najenostavnejših stvari, kot za zanke ali while zanko, 760 00:48:13,620 --> 00:48:17,170 lahko izbirate od leve proti desni nad znakov v nizu 761 00:48:17,170 --> 00:48:20,600 in jih začele vmasirajte v različnih likov v celoti - 762 00:48:20,600 --> 00:48:23,370 bi lahko postala b, lahko postanejo b c - 763 00:48:23,370 --> 00:48:27,780 tako da se na koncu lahko vzamemo angleški stavek, ki dejansko ima smisel 764 00:48:27,780 --> 00:48:30,310 in pretvorbo vsakega od teh pisem 1 v času 765 00:48:30,310 --> 00:48:34,400 s hojo skozi spomin našega računalnika z leve proti desni, da bi dejansko šifriranje. 766 00:48:34,400 --> 00:48:35,810 Torej vzamemo 5-minutni odmor tukaj 767 00:48:35,810 --> 00:48:40,730 in ko se vrnemo, bomo začeli ta proces kodiranja informacij. 768 00:48:42,020 --> 00:48:43,520 >> V redu. 769 00:48:43,520 --> 00:48:48,070 Preden smo se potopite v nekaj CRYPTO in te stvari se imenuje nizi 770 00:48:48,070 --> 00:48:51,470 Naj premor za vsa vprašanja, ker se počutim, kot da sem res nekako zmedeno 771 00:48:51,470 --> 00:48:54,080 nekatere od teh tem. Torej, kaj je zdaj popraviti, če lahko. 772 00:48:54,080 --> 00:48:58,700 Pravkar smo govorili o izračunani vrednosti, smo se pogovarjali o argumentov, 773 00:48:58,700 --> 00:49:03,250 in smo se pogovarjali o tem pojmu, ki jih bomo vrnili v prihodnjih tednih, 774 00:49:03,250 --> 00:49:08,720 gledanja spomin kot cel kup zloženih teh plošč, če se tako izrazim, 775 00:49:08,720 --> 00:49:12,660 od spodaj gor, tako da ima vsaka posoda, ki dobi dal na kupu 776 00:49:12,660 --> 00:49:16,530 predstavlja funkcijo, ki je trenutno imenovan. 777 00:49:17,900 --> 00:49:20,260 Kakšno vprašanje? 778 00:49:20,260 --> 00:49:22,640 Naj postavite vprašanje tukaj. 779 00:49:22,640 --> 00:49:27,890 Naj poenostaviti to nazaj, kar je bil pred nekaj naše prejšnje Q & A. 780 00:49:27,890 --> 00:49:35,570 Dejstvo, da je prirastek ima odprto oklepajev, int številko, zaprt oklepajev - 781 00:49:35,570 --> 00:49:39,110 kaj int številka predstavlja? 782 00:49:39,110 --> 00:49:42,790 [Študent] argument. >> Argument. Ok. Toda kaj je razlog? 783 00:49:42,790 --> 00:49:46,370 [Neslišno študentski odziv] >> Kaj je to? >> [Študent] Nekaj, kar boste peljali noter 784 00:49:46,370 --> 00:49:49,940 V redu, torej nekaj, kar boste peljali noter In bolj na splošno, to je samo vhod. 785 00:49:49,940 --> 00:49:52,450 Če ste napisali funkcijo in to funkcijo opravlja v namen v življenju 786 00:49:52,450 --> 00:49:55,770 je narediti nekaj drugačnega vsakič, ko ga uporabljate, 787 00:49:55,770 --> 00:50:00,110 potem bi bil edini način, da se to res zgodilo, se zdi, da se ji z močjo 788 00:50:00,110 --> 00:50:03,510 tako da lahko narediš nekaj drugačnega s tem vhodu vsakič. 789 00:50:03,510 --> 00:50:06,650 >> Torej boste morali določiti dve stvari, ko se funkcija vhoda. 790 00:50:06,650 --> 00:50:09,590 Morate navesti ime, ki ga želite dati to vhod 791 00:50:09,590 --> 00:50:12,700 zgolj za svojo lastno udobje, tako da boste potrebovali 792 00:50:12,700 --> 00:50:16,540 v funkciji, ki jo sami pišete, kot sem jaz tukaj, v skladu 32. 793 00:50:16,540 --> 00:50:20,800 Vendar pa boste morali navesti svoje vrste, saj je C programski jezik 794 00:50:20,800 --> 00:50:25,940 da tako zahteva, da se, če želite spremenljivko, boste morali povedati računalnik, kaj podatkovni tip je, 795 00:50:25,940 --> 00:50:30,200 v veliki meri tako, da se ve, koliko bitov dodeliti za to spremenljivko 796 00:50:30,200 --> 00:50:33,020 ker bi bilo 6 - žal, da ne bo 6. 797 00:50:33,020 --> 00:50:37,080 Lahko je 16, je lahko 8, je lahko 32, celo 64, 798 00:50:37,080 --> 00:50:39,130 ampak računalnik mora vedeti. 799 00:50:39,130 --> 00:50:43,180 Zdaj, int na levi strani predstavlja, kaj je v nasprotju? 800 00:50:46,350 --> 00:50:48,850 [Neslišno študentski odziv] >> Kaj je to? >> [Študent] Vrsta funkcije. 801 00:50:48,850 --> 00:50:53,610 Vrsta funkcije, natančneje, vrsta njegove proizvodnje. Prav. 802 00:50:53,610 --> 00:50:57,380 Torej, ker je stvar v oklepaju predstavlja vložek, če obstaja, 803 00:50:57,380 --> 00:50:59,660 stvar na levi predstavlja svojo proizvodnjo. 804 00:50:59,660 --> 00:51:03,530 In v tem primeru, prirastek očitno vrača int, 805 00:51:03,530 --> 00:51:07,690 in tako int je vrnitev tip te funkcije. 806 00:51:07,690 --> 00:51:09,340 Kaj to pomeni, da se vrnete? 807 00:51:09,340 --> 00:51:15,090 Dobesedno, uporabite ključno besedo return in potem, če kaj vrača 808 00:51:15,090 --> 00:51:18,600 na desni strani je ključna beseda celo število, 809 00:51:18,600 --> 00:51:21,660 Takrat je namreč v skladu s tem, kar smo obljubili. 810 00:51:21,660 --> 00:51:26,410 Ti ne bi naredil kaj takega - Pozdravljen svet - ker to je niz. 811 00:51:26,410 --> 00:51:28,860 >> Očitno je, da ni celo število. 812 00:51:28,860 --> 00:51:33,140 Torej na kratko, breme je res na nas, programer, da je specifična 813 00:51:33,140 --> 00:51:37,770 o tem, kaj smo vračajo in nato dejansko iti na njeno vrnitev. 814 00:51:37,770 --> 00:51:43,440 Kontekst zdaj tukaj, je, da računalnika spomin GB, 2 GB - 815 00:51:43,440 --> 00:51:45,920 karkoli - morda je več, morda je manj, 816 00:51:45,920 --> 00:51:49,050 ampak računalnik ga vidi kot ob različnih oddelkov. 817 00:51:49,050 --> 00:51:51,200 Nekaj ​​gre dol, nekaj drugega gre gor, 818 00:51:51,200 --> 00:51:54,290 različne stvari gre v sredini in danes smo pravkar začeli pripovedujejo zgodbo, 819 00:51:54,290 --> 00:51:56,340 vendar bomo vrnili k temu daljšem časovnem obdobju. 820 00:51:56,340 --> 00:51:59,980 Za zdaj je le del spomina res skrbi, je del besedila 821 00:51:59,980 --> 00:52:03,360 ker to preprosto pomeni, da 0s in 1s Jek je izhodne. 822 00:52:03,360 --> 00:52:06,050 Torej, ko zaženete ukaz na tipkovnici, kot a.out 823 00:52:06,050 --> 00:52:09,110 ali pa dvojno kliknite na ikono na Mac OS ali Windows, 824 00:52:09,110 --> 00:52:11,880 tvoj program je naložen s trdega diska v RAM 825 00:52:11,880 --> 00:52:16,330 in to je plopped na vrhu RAM računalnika, tako rekoč. 826 00:52:16,330 --> 00:52:20,450 Medtem ko se vaš program zažene in glavni gets imenovane 827 00:52:20,450 --> 00:52:23,640 V programu, ki ga je napisal ali program Microsoft ali Apple je zapisal, 828 00:52:23,640 --> 00:52:27,860 koli od njegovih lokalnih spremenljivk končala tam spodaj na dnu pomnilnika računalnika. 829 00:52:27,860 --> 00:52:33,230 Ampak, če glavna zahteva druga funkcija, ki ima samo po sebi spremenljivk ali argumentov, se končajo nad njo. 830 00:52:33,230 --> 00:52:36,680 In če je ta funkcija zahteva nekaj, končajo nad njim, nad njim, nad njo. 831 00:52:36,680 --> 00:52:41,460 >> In šele ko je funkcija opravi izvršilni ne kup plošč, tako rekoč, 832 00:52:41,460 --> 00:52:43,240 začno nižje in nižje. 833 00:52:43,240 --> 00:52:48,250 In to je tisto, nato pa na kratko pojasni, zakaj, ko pokličete kocko 834 00:52:48,250 --> 00:52:51,550 ali pokličete prirastek, ti ​​gre v kopiji vrednosti. 835 00:52:51,550 --> 00:52:55,520 In kaj to pomeni slikovno je, da ste dobesedno pisati številko 1 836 00:52:55,520 --> 00:53:00,460 v drugem delu pomnilnika, ki spreminja 1-2 v primeru prirastka 837 00:53:00,460 --> 00:53:04,820 ali do 8, v primeru kocke in nato vrgel proč, da je spomin 838 00:53:04,820 --> 00:53:09,140 takoj, ko je prirastek ali vrne funkcija kocke. Vprašanje. 839 00:53:09,140 --> 00:53:12,900 [Študent] Če so globalne spremenljivke shranijo? 840 00:53:12,900 --> 00:53:18,100 Globalne spremenljivke so shranjene v kaj se trenutno sprožijo inicializiran podatki ali nezaceto podatkov, 841 00:53:18,100 --> 00:53:21,920 Razlika je, če imate globalno spremenljivko in jo dodeliti takoj vrednosti 842 00:53:21,920 --> 00:53:24,640 z enačajem, se konča na vrhu tam, 843 00:53:24,640 --> 00:53:29,200 in če si rekel int x; brez vrednosti, se konča nekoliko nižja v RAM 844 00:53:29,200 --> 00:53:31,710 samo po dogovoru. 845 00:53:31,710 --> 00:53:34,940 Druga vprašanja? V redu. 846 00:53:34,940 --> 00:53:37,340 Tako bo ta slika prišla nazaj, smo dobili močnejši 847 00:53:37,340 --> 00:53:39,170 s tem, kaj lahko storimo z računalnikom, 848 00:53:39,170 --> 00:53:42,720 vendar za zdaj, imejmo kratek uvod v kriptografijo, 849 00:53:42,720 --> 00:53:46,080 posebna vrsta kriptografije, ki ne rešuje vseh težav na svetu 850 00:53:46,080 --> 00:53:47,720 vendar pa rešiti nekatere od njih. 851 00:53:47,720 --> 00:53:51,700 V tem primeru je tukaj imamo nekaj, kar ti skrivnost-ključi. 852 00:53:51,700 --> 00:53:56,410 Secret-ključi, kot že ime pove, ima svojo varnost s skrivnostjo. 853 00:53:56,410 --> 00:54:00,690 >> Na primer, če ste bili že v osnovni šoli in si mimo malo črko skrivno ljubezen 854 00:54:00,690 --> 00:54:04,850 za fanta ali dekle si drobljenje naprej, če želiš prenesti to sporočilo z občinstvom, 855 00:54:04,850 --> 00:54:08,380 verjetno ne bi napisal takšne opombo v angleščini ali karkoli vaš materni jezik. 856 00:54:08,380 --> 00:54:13,340 Nasprotno, lahko šifriranje ali pa morda samo jim pošljete sporočilo v teh dneh. 857 00:54:13,340 --> 00:54:15,460 Morda pa bi si dejansko pass jim seznanil celotnem razredu. 858 00:54:15,460 --> 00:54:18,700 In to storiti varno, tako da vaši prijatelji in učitelji 859 00:54:18,700 --> 00:54:22,650 Ne vem, kaj pišete, boste morda prišli do dokaj preprost algoritem, 860 00:54:22,650 --> 00:54:25,920 mladi, čeprav bi moral biti, da samo Izokrenuti besede. 861 00:54:25,920 --> 00:54:28,130 Torej, namesto pisanja lahko napišete b, 862 00:54:28,130 --> 00:54:30,220 Namesto b lahko napišete c, 863 00:54:30,220 --> 00:54:32,140 Namesto c lahko napišete d, in tako naprej. 864 00:54:32,140 --> 00:54:34,360 Ali pa bi lahko prišli do bolj zapletenega prevod 865 00:54:34,360 --> 00:54:36,720 pisem z različnimi črkami. 866 00:54:36,720 --> 00:54:39,740 Ampak ulov je fant ali dekle, ki jim pošiljate to sporočilo 867 00:54:39,740 --> 00:54:45,020 treba vedeti nekaj, kar je tisto, kar je očitno? >> [Študent] Kaj ste pošiljanje. 868 00:54:45,020 --> 00:54:49,720 Kakšna je tvoja skrivnost je, kot se je, da je kartiranje med in B-jev in c je in d'i. 869 00:54:49,720 --> 00:54:54,650 Ali je to samo dodal 1 za vsako od pisem, ki gredo od A do B, b, c,? 870 00:54:54,650 --> 00:54:56,670 Je bolj zapleten kot to? 871 00:54:56,670 --> 00:55:01,540 >> Torej vi in ​​vaš simpatijo morajo imeti te tajne informacije, 872 00:55:01,540 --> 00:55:03,190 vendar pa je nekako Catch-22 tukaj. 873 00:55:03,190 --> 00:55:06,830 Če je to zelo prvič ste pošiljanje to ljubezensko pismo z razredom, 874 00:55:06,830 --> 00:55:10,720 kako se ta fant ali dekle bo vedel, kaj je skrivnost tudi ni? 875 00:55:10,720 --> 00:55:13,930 Zato tajni ključ, crypto ne rešuje vseh težav na svetu, 876 00:55:13,930 --> 00:55:16,320 in tam je dejansko razmerje sem, da se bomo vrnili k koncu semester. 877 00:55:16,320 --> 00:55:25,110 Prav tako pa večina izmed nas ne pozna nekoga, ki dela na primer na Amazon.com, 878 00:55:25,110 --> 00:55:28,190 in še mnogi od nas verjetno kupil stvari na Amazon.com, 879 00:55:28,190 --> 00:55:31,990 in že smo se naučili, da domnevajo, da so ti e-poslovanju, varna. 880 00:55:31,990 --> 00:55:36,470 URL verjetno pravi https, da je morda neumno malo ključavnico ikona nekje, 881 00:55:36,470 --> 00:55:39,930 obstaja neke vrste kriptografije zagotavljanje podatkov o kreditni kartici 882 00:55:39,930 --> 00:55:42,160 med vami in Amazon.com. 883 00:55:42,160 --> 00:55:45,430 In vendar, če kriptografija vključuje vedo nekaj skrivnosti 884 00:55:45,430 --> 00:55:48,620 in še ne vem kdo na Amazon in sem zagotovo ni urejeno vse vrste tajnosti 885 00:55:48,620 --> 00:55:52,710 z nekom na Amazon, kako je moj računalnik ali moj brskalnik to počne? 886 00:55:52,710 --> 00:55:55,720 Izkazalo se je, da je druga vrsta kriptografije v celoti, da bi rešili ta problem. 887 00:55:55,720 --> 00:55:57,670 Toda danes, se bomo osredotočili na preproste 1 888 00:55:57,670 --> 00:56:00,290 kjer se lahko dogovorite vnaprej vedeti nekaj skrivnosti 889 00:56:00,290 --> 00:56:03,760 kot 1 ali nekaj kartiranje med je in B-jev. 890 00:56:03,760 --> 00:56:05,840 In proces kriptografije splošno vključuje to. 891 00:56:05,840 --> 00:56:08,620 Imaš nekaj golo besedilo, prikazano tukaj na levi strani, 892 00:56:08,620 --> 00:56:12,930 ga boste pognali skozi neke vrste algoritem, postopek za njegovo šifriranje - 893 00:56:12,930 --> 00:56:15,100 Mogoče je to le postane b, c b postaja - 894 00:56:15,100 --> 00:56:17,490 in potem na koncu z Zakrivena. 895 00:56:17,490 --> 00:56:20,380 Medtem, ko vaš simpatijo prejme to skrivnost, upoštevajte, 896 00:56:20,380 --> 00:56:24,200 on ali ona mora nato dešifrira s splošno spreminjanje tega algoritma 897 00:56:24,200 --> 00:56:27,190 tako, da se vrnem golo besedilo. 898 00:56:27,190 --> 00:56:28,960 Obstajajo fizične inkarnacije tega. 899 00:56:28,960 --> 00:56:31,680 >> Na primer, to je skrivnost dekoder obroč, 900 00:56:31,680 --> 00:56:35,110 in to je prstan v smislu, da obstajata dva pokliče tukaj. 901 00:56:35,110 --> 00:56:38,490 Na zunanjem obodu to stvar, tam črke od A do Z, 902 00:56:38,490 --> 00:56:40,340 čeprav so si v naključnem vrstnem redu, 903 00:56:40,340 --> 00:56:42,880 in na notranji strani, tam je pravzaprav nekaj številk 904 00:56:42,880 --> 00:56:46,620 tako, da s tem prstanom lahko nekako obrnejo navzven, ne pa znotraj 905 00:56:46,620 --> 00:56:49,140 da se postavijo v vrsto črk. 906 00:56:49,140 --> 00:56:53,020 Od filma se imenuje Božična zgodba, boste videli, da je malo Ralphie 907 00:56:53,020 --> 00:56:58,000 je bil tako želijo ugotoviti, kaj je skrivnost sporočilo Little Orphan Annie je bila z njim 908 00:56:58,000 --> 00:57:02,570 , ki so bili posredovani, mislim, v obliki številčnih sporočil na žit polje 909 00:57:02,570 --> 00:57:07,220 in boste imeli, da se kopičijo vse majhne kartice, ki je prišel v žitnega polja, 910 00:57:07,220 --> 00:57:09,770 ste imeli, da jih pošljete na, si moral priti nazaj skrivnost obroč dekoder 911 00:57:09,770 --> 00:57:13,910 tako da lahko končno ugotovimo, kaj je preslikava med črkami in številkami 912 00:57:13,910 --> 00:57:15,550 ali črke in črke. 913 00:57:15,550 --> 00:57:19,520 Kako v računalnik, lahko gremo o izvajanju ali predstavlja stvari, kot je ta? 914 00:57:19,520 --> 00:57:22,560 Moramo priti od sebe izražanje malo bolj fleksibilno 915 00:57:22,560 --> 00:57:25,080 kot naši spremenljivke so doslej dovoljeno. 916 00:57:25,080 --> 00:57:29,000 Imeli smo ints, smo imeli znakov, da sva imela boje in v dvojicah in nekaj drugih, 917 00:57:29,000 --> 00:57:34,200 ampak to so posamezni kosi pomnilnika, ki v resnici ne nam omogočajo, da izrazijo stvari 918 00:57:34,200 --> 00:57:36,440 kot besed in stavkov in izrazov. 919 00:57:36,440 --> 00:57:38,630 Dejansko smo tako imenovane strune stvari, 920 00:57:38,630 --> 00:57:42,660 ampak obljubim, da je to res samo poenostavitev v knjižnici CS50 921 00:57:42,660 --> 00:57:45,540 da smo nameravajo lupine nazaj. 922 00:57:45,540 --> 00:57:47,500 In tako začnimo za to tukaj. 923 00:57:47,500 --> 00:57:49,840 Naj gredo naprej in odpiranje datotek - 924 00:57:49,840 --> 00:57:54,100 Vse te datoteke so na voljo, kot ponavadi, na spletu - ti array.c 925 00:57:54,100 --> 00:57:58,960 rešiti problem, ki ni povezan s strunami, ampak da naslika sliko tukaj 926 00:57:58,960 --> 00:58:01,520 o tem, kako jih bomo uporabili nekaj, kar se imenuje polje. 927 00:58:01,520 --> 00:58:04,050 >> Matrika je podatkovni tip. 928 00:58:04,050 --> 00:58:10,730 To je tip spremenljivke sort, ki ima več manjših vrste podatkov znotraj njega 929 00:58:10,730 --> 00:58:12,680 back to back to back to back. 930 00:58:12,680 --> 00:58:16,980 Tako na primer, če bi želel napisati malo program, ki vam daje svoj kviz povprečje 931 00:58:16,980 --> 00:58:19,780 za tečaj kot 50, ki ima 2 kvizi, 932 00:58:19,780 --> 00:58:23,450 bi lahko zelo enostavno napisati ta program, ki temelji tudi na nekaterih snovi prejšnji teden 933 00:58:23,450 --> 00:58:28,830 z GetInt in nekaj spremenljivk: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 In to je zelo enostavno. 935 00:58:30,550 --> 00:58:33,500 To je morda 10, 20 vrstic kode max izvajati program 936 00:58:33,500 --> 00:58:38,940 da vpraša uporabnika za 2 kviz rezultatov in nato izračuna njihovo povprečje 937 00:58:38,940 --> 00:58:42,020 jih dodate skupaj delimo z 2, nato pa tiskanje rezultatov. 938 00:58:42,020 --> 00:58:46,400 Mi bi morali storiti, da kar takoj zdaj po določenem številu minut. 939 00:58:46,400 --> 00:58:49,450 Ampak problem je, da predvidevam, da je 50 imelo 3 ali 4 kvizi. 940 00:58:49,450 --> 00:58:52,830 Recimo, da ste želeli uporabiti isti program za razred, ki je imel tedensko kvizov. 941 00:58:52,830 --> 00:58:55,100 Pomislite na razred, ki je tedensko kvizov. 942 00:58:55,100 --> 00:58:58,840 Če je 16 tednov ali tako v semestru, imate zdaj 16 spremenljivk: 943 00:58:58,840 --> 00:59:03,030 int quiz1, int quiz2, int quiz3, int quiz4. 944 00:59:03,030 --> 00:59:06,870 Takoj, ko boste začeli videvati to odpuščanje, to kopiranje in lepljenje kode, 945 00:59:06,870 --> 00:59:09,810 da bi začeli, da bi si želel je bilo bolje tako. 946 00:59:09,810 --> 00:59:13,610 In na srečo, saj je nizi. Torej, kaj je to. 947 00:59:13,610 --> 00:59:16,700 Najprej naj vam predstavim zelo preprosta stvar, ki smo jih doslej niso uporabljali, 948 00:59:16,700 --> 00:59:18,820 vendar boste ugotovili, da občasno v kodi. 949 00:59:18,820 --> 00:59:21,270 >> To je tisto, kar je splošno imenujemo konstanta. 950 00:59:21,270 --> 00:59:24,410 Torej, to je stalnica v smislu, da se ta vrednost ne spremeni. 951 00:59:24,410 --> 00:59:26,450 Konvencije o človekovih pri ustvarjanju stalen 952 00:59:26,450 --> 00:59:30,420 je, da uporabite vse velike tiskane črke le tako, da resnično izstopa v kodi, 953 00:59:30,420 --> 00:59:34,270 in posebne ključne besede, ki jih uporabljate v C # je definirati. 954 00:59:34,270 --> 00:59:39,970 Tako smo rekli # define, nato presledek, nato pa besedo, ki jo želite uporabiti za ime konstanta je 955 00:59:39,970 --> 00:59:41,730 in potem je vrednost nespremenjena. 956 00:59:41,730 --> 00:59:44,710 Obvestilo je drugačen od dodeljevanju nekaj spremenljivko. 957 00:59:44,710 --> 00:59:46,430 Ni enečaju, ni podpičje. 958 00:59:46,430 --> 00:59:49,140 To je tisto, kar je splošno znano kot Preprocessor direktive, 959 00:59:49,140 --> 00:59:50,840 a več o tem kdaj drugič. 960 00:59:50,840 --> 00:59:56,350 Za zdaj, to ustvarja nespremenljivo vrednost, imenovano Kvizi 961 00:59:56,350 --> 00:59:58,290 katere dejanski številčna vrednost je 2. 962 00:59:58,290 --> 01:00:02,180 Torej, kjerkoli vidite, kvizi, kvizi, kvizi vsej tej zadevi, 963 01:00:02,180 --> 01:00:04,230 to je samo številka 2. 964 01:00:04,230 --> 01:00:06,550 Če gledam na glavni zdaj, da vidimo, kako to deluje. 965 01:00:06,550 --> 01:00:09,770 Najprej izgleda malce skrivnosten, vendar je vse stvari iz tedna 1. 966 01:00:09,770 --> 01:00:12,210 Vprašaj uporabnika za razrede. Kako to storiti? 967 01:00:12,210 --> 01:00:17,350 V vrstico 22 - to je res sočen del - izjavljam, plovec 968 01:00:17,350 --> 01:00:23,240 pa ne samo ena drsenje. Jaz sem razglasitvi, temveč niz plavajočo vejico vrednosti. 969 01:00:23,240 --> 01:00:27,700 Ta spremenljivka se dogaja, da se imenuje razrede, kot je vsebovano tukaj, 970 01:00:27,700 --> 01:00:31,420 ampak le del nove sintakse potem so ti oglati oklepaj. 971 01:00:31,420 --> 01:00:37,280 Dejstvo, da sem rekel obtoku ocene in nato oklepaj in nato številne - 972 01:00:37,280 --> 01:00:40,980 opazite, če je to konstanta je to tako, kot smo to naredili - 973 01:00:40,980 --> 01:00:46,840 to pomeni, "Hej računalnik, daj mi 2 plovce in greva skupaj jim pravimo razredov." 974 01:00:46,840 --> 01:00:51,780 >> To je v nasprotju z veliko bolj dolgočasno proces takole: float Grade1; 975 01:00:51,780 --> 01:00:54,580 float grade2, in tako naprej. 976 01:00:54,580 --> 01:00:58,310 Torej matrika nam omogoča, da izvajajo to zamisel, vendar veliko manj messily, 977 01:00:58,310 --> 01:01:04,560 na tak način, da lahko pišemo 1 vrstico kode, namesto, recimo, 16 za 16-tedenski semester. 978 01:01:04,560 --> 01:01:09,060 Nisem hotel, da težko kodo 2, ker če menite o tem zdaj logično, 979 01:01:09,060 --> 01:01:12,560 Predvidevam, naslednje leto CS50 spremembe 3 kvizi namesto 980 01:01:12,560 --> 01:01:15,010 in sem imel številko 2 tukaj, sem imel številko 2 tukaj, 981 01:01:15,010 --> 01:01:17,210 Imel sem tu številko 2, število 2 tukaj. 982 01:01:17,210 --> 01:01:19,890 To postane zelo dolgočasno in zelo težko zajebal 983 01:01:19,890 --> 01:01:26,550 in da se po nesreči spremenite vrednost 3 1 in pogrešam kakšno drugo vrednost 2. 984 01:01:26,550 --> 01:01:30,660 Zato bom namesto abstraktnih to stran, uporabite to stalnico, ki bo 985 01:01:30,660 --> 01:01:32,520 Kot pove že ime, se ne spreminja. 986 01:01:32,520 --> 01:01:35,870 In sedaj ne glede na to, ali imamo različne kvize letos ali naslednje, 987 01:01:35,870 --> 01:01:39,380 Pravkar sem se, da ga spremeni na enem mestu gor na vrhu. 988 01:01:39,380 --> 01:01:41,230 Tako, da je vse, kar je konstanta. 989 01:01:41,230 --> 01:01:47,100 Medtem pa nova konceptualna značilnost je, da za matriko. 990 01:01:47,100 --> 01:01:55,030 Tako so oglati oklepaji, da mi to veliko boje in mi omogoča skupno jim pravimo ocene tukaj. 991 01:01:55,030 --> 01:01:56,720 In zdaj poglejmo, kaj bom naredil. 992 01:01:56,720 --> 01:01:59,220 Tukaj, v skladu 24 je za začetek zanke. 993 01:01:59,220 --> 01:02:03,380 >> To je res nič posebnega. To je samo s kvizi namesto težko kodirane številke. 994 01:02:03,380 --> 01:02:06,740 Ampak ni nič drugačen intelektualno tam od prejšnjega tedna. 995 01:02:06,740 --> 01:02:11,650 To je samo printf, zato printf ("Kviz #% d od% d:") 996 01:02:11,650 --> 01:02:16,670 ker želim, da natisnete daj mi test, številka 1 na 2 in nato 2 od 2. 997 01:02:16,670 --> 01:02:18,480 Torej, to je zgolj estetski stvar. 998 01:02:18,480 --> 01:02:21,000 Toda zanimivo je zdaj v skladu 27. 999 01:02:21,000 --> 01:02:27,840 Da bi zapolnili v enem od dveh ogradi s plavajočo vejico vrednosti, 1000 01:02:27,840 --> 01:02:29,640 boste ponovno uporabiti oglate oklepaje. 1001 01:02:29,640 --> 01:02:35,170 V tem primeru, sem uporabljam, ker je ta zanka se je začelo z i izenačila kaj vrednost, očitno? 1002 01:02:35,170 --> 01:02:36,670 [0] študent. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Torej na prvi ponovitvi te zanke je, kot da sem to napisal v šifrah, 1004 01:02:40,990 --> 01:02:46,310 ampak na drugi ponovitvi te zanke je, kot da sem to napisal v svoji kodi. 1005 01:02:46,310 --> 01:02:49,970 Toda dejstvo, da sem z uporabo spremenljivke je kot nalašč, saj, kot že ime pove, 1006 01:02:49,970 --> 01:02:52,600 to je različno svojo vrednost na vsaki ponovitvi 1007 01:02:52,600 --> 01:02:55,900 tako da sem za polnjenje tem polju eno mesto naenkrat. 1008 01:02:55,900 --> 01:02:57,380 Kaj to polje videti? 1009 01:02:57,380 --> 01:03:01,570 Razlog, da sem prišla do super preprost pravokotnik na zaslonu tukaj, preden je bila iz tega razloga. 1010 01:03:01,570 --> 01:03:05,590 Matrika je le kos pomnilnika sledil nov kos pomnilnika 1011 01:03:05,590 --> 01:03:08,570 sledijo drug kos pomnilnika in tako naprej. 1012 01:03:08,570 --> 01:03:13,120 Torej, če mi je matrika velikosti 2 v tem primeru tu, bi morala delati 1013 01:03:13,120 --> 01:03:20,200 z vpisom v mojih rezultatov kviza kot tukaj - imam 100, glede tega, potem pa sem dobil 99, glede tega - 1014 01:03:20,200 --> 01:03:24,970 potem ta spomin celo ne uporabljajo, saj sem samo vprašal računalnik 1015 01:03:24,970 --> 01:03:26,840 za matriko velikosti 2. 1016 01:03:26,840 --> 01:03:28,600 Ti trgi so še vedno tam, kajne? 1017 01:03:28,600 --> 01:03:32,670 Imate še 2 GB RAM-a, tudi če ste le prosi za 2 plovcev. 1018 01:03:32,670 --> 01:03:36,840 Torej, ideja je, da se nizi računalnik samo traja kos pomnilnika 1019 01:03:36,840 --> 01:03:41,340 in nato porazdeli manjše kose back to back to back to back. 1020 01:03:41,340 --> 01:03:43,310 In da je vse, kar je matrika. 1021 01:03:43,310 --> 01:03:47,350 >> To je mejna kos notranji spomin, ki lahko dajo stvari. 1022 01:03:47,350 --> 01:03:50,700 To se zgodi, da naredite le malo dolgočasno računanje. 1023 01:03:50,700 --> 01:03:54,640 Če bi se pomaknite dol, to je, če sem potem ponoviti čez polje. 1024 01:03:54,640 --> 01:03:58,020 Sem prišel s seštevanjem vse vrednosti v matriki, 1025 01:03:58,020 --> 01:04:02,470 in potem sem uporabljati okrogle funkcije tu dejansko storiti znesek deljeno s kvizi. 1026 01:04:02,470 --> 01:04:06,320 Ampak mi pomahal z roko si to kot nekakšen dovolj aritmetične za zdaj. 1027 01:04:06,320 --> 01:04:08,370 Ampak vse to počne zame konec koncev se izračuna povprečje. 1028 01:04:08,370 --> 01:04:13,580 Torej, najprej kviz plus 2. kviz deli z 2 in nato tiskanje kot notr. 1029 01:04:13,580 --> 01:04:17,280 Ampak kaj je zdaj prehod na drug primer, imenovano niz1, 1030 01:04:17,280 --> 01:04:20,700 ki riše podobno sliko, ampak s pomočjo vrvice. 1031 01:04:20,700 --> 01:04:23,940 Naj gredo naprej in poenostaviti le za trenutek. 1032 01:04:23,940 --> 01:04:27,090 Oprostite zamik za zdaj. 1033 01:04:27,090 --> 01:04:30,870 Obvestilo v vrstici 19 tega primera, sem dobil niz s strani uporabnika. 1034 01:04:30,870 --> 01:04:34,640 Toda opazil, kaj sem počel v naslednji vrsticah 22 naprej. 1035 01:04:34,640 --> 01:04:41,250 Jaz sem pravzaprav ponavljanjem od i do - in to je nov trik - strlen, dolžina niza. 1036 01:04:41,250 --> 01:04:44,880 To je funkcija, ki ima C, če se boste peljali to niz, 1037 01:04:44,880 --> 01:04:47,730 vam pove, koliko znakov je v tem nizu. To je vse. 1038 01:04:47,730 --> 01:04:51,550 In dejstvo, da je strlen namesto dolžine niza je samo zato, ker je bolj skope. 1039 01:04:51,550 --> 01:04:55,100 Pred tridesetimi leti so ljudje všeč, da napišete stvari, kot so na kratko je to mogoče, 1040 01:04:55,100 --> 01:04:57,630 zato smo ohraniti to konvencijo tukaj. 1041 01:04:57,630 --> 01:05:00,660 i + + pomeni le i prirastek v vsaki ponovitvi. 1042 01:05:00,660 --> 01:05:02,990 In zdaj opazil to, kar je res zanimivo. 1043 01:05:02,990 --> 01:05:09,180 V skladu 24, sem rekel, "Computer, daj mi znak, 8 bitov, in ga imenujemo c." 1044 01:05:09,180 --> 01:05:12,630 Ampak kaj je to na desni strani govoriš? 1045 01:05:13,490 --> 01:05:16,530 V angleščini, kaj to pomeni? 1046 01:05:16,530 --> 01:05:18,730 [Študent] Prvi znak v polje. 1047 01:05:18,730 --> 01:05:20,790 Točno tako. Daj mi prvi znak v polje. 1048 01:05:20,790 --> 01:05:24,090 Ali bolj splošno, daj mi wi znak v polje. 1049 01:05:24,090 --> 01:05:26,100 In spoznali, da je zdaj pomembno, da so znanstvenike s področja računalništva, 1050 01:05:26,100 --> 01:05:27,890 smo dejansko šteje od 0. 1051 01:05:27,890 --> 01:05:29,720 >> Ti nimajo diskrecijske zdaj začeti s tem. 1052 01:05:29,720 --> 01:05:34,160 Zdaj imate, da se obnašajo v skladu s pričakovanji računalnika in šteje od 0 1053 01:05:34,160 --> 01:05:38,180 ker [0] se bo prvi znak v nizu, 1054 01:05:38,180 --> 01:05:42,150 [1] se bo drugi [2], se bo tretji, in tako naprej. 1055 01:05:42,150 --> 01:05:49,720 Torej ta program, če sem prevedel, to je spet niz1, zato poskrbite niz1, 1056 01:05:49,720 --> 01:05:54,670 in zdaj sem teči niz1 v mojem terminalskem oknu. 1057 01:05:54,670 --> 01:05:58,330 Čaka na vhod, tako da bom s tipom z Davidom, Enter 1058 01:05:58,330 --> 01:06:02,540 in zdaj se natisne Davidu vse na različnih progah, ker obvestilo, kaj delam. 1059 01:06:02,540 --> 01:06:05,820 Jaz tiskanje en znak naenkrat. 1060 01:06:05,820 --> 01:06:10,100 Mi ne bo šel v podrobnosti, je danes na tem, ampak sem izbrisal nekaj trenutkov pred tem preverite tukaj. 1061 01:06:10,100 --> 01:06:15,480 Izkazalo se je, da če se uporabnik ne deluje pravilno, kontradiktornost, ali pa samo zmeden, 1062 01:06:15,480 --> 01:06:20,210 lahko dejansko ne bi prinesla niz obširneje. 1063 01:06:20,210 --> 01:06:22,860 Če ste zadeli napačno tipko na tipkovnici, lahko dajo nobenega niza sploh, 1064 01:06:22,860 --> 01:06:26,950 ali če ste zlobni, lahko poskusite prilepite v vrednosti Gigabyte z dne esej 1065 01:06:26,950 --> 01:06:29,290 zapolniti to niz, in če računalniku zmanjka spomina, 1066 01:06:29,290 --> 01:06:32,710 Izkazalo se je, da bomo dobili nazaj, to posebno vrednost, imenovan NULL. 1067 01:06:32,710 --> 01:06:35,580 Torej za zdaj, samo vem, da je to posebna vrednost, se imenuje NULL 1068 01:06:35,580 --> 01:06:39,580 ki nam bo omogočilo, da preveri, ko smo iz spomina, med drugim. 1069 01:06:39,580 --> 01:06:45,630 Ampak, če sem odprla zdaj niz2, opazil eno razliko tukaj. 1070 01:06:45,630 --> 01:06:48,210 Obvestilo eno razliko tukaj z niz2. 1071 01:06:48,210 --> 01:06:51,340 Z niz2, ta zanka je malo drugačna. 1072 01:06:51,340 --> 01:06:55,010 >> Naj brisanje ničel, tako da lahko govorimo o tistih, drugič. 1073 01:06:55,010 --> 01:06:57,800 V čem se razlikuje za zanko tokrat? 1074 01:06:59,620 --> 01:07:01,670 Lahko grem nazaj na prejšnji primer. 1075 01:07:01,670 --> 01:07:08,580 Torej, to je različica 2, to je različica 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Strlen klic je kje? 1078 01:07:16,660 --> 01:07:18,860 To je v prvi del za zanko. 1079 01:07:18,860 --> 01:07:21,830 Vsak misli, zakaj to delam? Ja. 1080 01:07:21,830 --> 01:07:24,560 [Študent] Torej ne kliči funkcije vsak čas. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Torej ne kliči funkcije vsak čas. Točno tako. 1082 01:07:26,440 --> 01:07:28,300 Odpoklic iz for zanke, ki so si zelo enostavna 1083 01:07:28,300 --> 01:07:31,770 ko boste nekako razumeli, da je to inicializacijo, pogoj, in posodobitve. 1084 01:07:31,770 --> 01:07:34,750 Težava je v tem, da je pogoj zgodi na vsaki ponovitvi zanke. 1085 01:07:34,750 --> 01:07:40,010 In tako se je v tem primeru v tej zadevi, kar je slabo, da je to moje stanje? 1086 01:07:40,010 --> 01:07:41,830 [Študent] kličeš strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] kličeš strlen znova in znova in znova. 1088 01:07:44,340 --> 01:07:47,410 Toda, ko sem tipkal z Davidom, dolžina tega niza je 5, 1089 01:07:47,410 --> 01:07:49,650 in to ne bo spremenilo na vsaki ponovitvi zanke 1090 01:07:49,650 --> 01:07:51,670 ker je še niz D-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Torej, to je namig, kaj se dogaja, da postane bolj pomembna ideja 1092 01:07:55,320 --> 01:08:00,410 znan kot oblikovalska odločitev, če le ne bo računalnik naredil nepotrebno delo. 1093 01:08:00,410 --> 01:08:03,920 >> Tako kot slepar predogled pset2, pset2 v standardni različici 1094 01:08:03,920 --> 01:08:07,030 vas bo izpodbijala dejansko izvajajo nekaj več šifre, 1095 01:08:07,030 --> 01:08:10,410 nekaj več algoritmi šifriranja, tako da lahko oba šifriranje 1096 01:08:10,410 --> 01:08:13,840 in dešifriranje sporočila, podobno kot tajni eni Ralphie je dešifriral. 1097 01:08:13,840 --> 01:08:16,810 V hacker izdaji pset2 smo šli malo naprej. 1098 01:08:16,810 --> 01:08:19,649 Bomo izročil datoteko iz dejanskega računalniškega sistema 1099 01:08:19,649 --> 01:08:23,479 , ki vsebuje cel kup imen in dejanskih šifriranih gesel, 1100 01:08:23,479 --> 01:08:26,939 in izziv za hacker različico se bo crack teh gesel 1101 01:08:26,939 --> 01:08:33,200 in ugotoviti, kaj je kriptografija ali kaj skrivnost je bila uporabljena za dejansko pridobivanje teh gesel. 1102 01:08:33,200 --> 01:08:36,109 In bomo to z novo funkcijo tukaj na K 1103 01:08:36,109 --> 01:08:40,630 da ti dam samo demo, znano kot argumenti v ukazni vrstici. 1104 01:08:40,630 --> 01:08:44,229 Izkazalo se je, kot morda nekateri od vas videl v oddelku ali v učbenikih, 1105 01:08:44,229 --> 01:08:48,260 Glavna nima vedno za neveljavne v oklepajih. 1106 01:08:48,260 --> 01:08:52,430 Izkaže se, da lahko glavni zapišemo tudi takole, z dvema argumentov, 1107 01:08:52,430 --> 01:08:56,870 argc in argv, kjer argc je število besed 1108 01:08:56,870 --> 01:09:00,020 da vnesete po imenu programa na vaš ukazni vrstici 1109 01:09:00,020 --> 01:09:03,420 in argv je dejanska besede. 1110 01:09:03,420 --> 01:09:07,540 In ko so oglati oklepaji tam kažejo, argv je očitno polje. 1111 01:09:07,540 --> 01:09:12,210 To se dogaja, da je niz po nizu po nizu v pomnilniku. 1112 01:09:12,210 --> 01:09:16,010 >> Torej, kaj bomo mogli storiti, začenši s pset 2, je nekaj takega. 1113 01:09:16,010 --> 01:09:21,350 Če naredim argv1, ki je na primer, da bomo vrnili v ponedeljek, in prost dostop, 1114 01:09:21,350 --> 01:09:23,370 opazili, da se ne zdi, da storiti ničesar še. 1115 01:09:23,370 --> 01:09:25,490 Prav tako natisne svoje ime. 1116 01:09:25,490 --> 01:09:31,479 Ampak, če rečem zbogom razred, obvestilo, da ta program očitno ponavlja 1117 01:09:31,479 --> 01:09:35,479 v vsakem od besed, ki so vnesli v ukazno vrstico. 1118 01:09:35,479 --> 01:09:41,630 In sredstvo, s katerim bomo pridobili dostop do besed, ki jih je uporabnik natipkan na poziv 1119 01:09:41,630 --> 01:09:49,160 je s spremembo glavna začne ta vikend od int main (void) int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 s tem pa bo rodil v ukazni vrstici argumente. 1121 01:09:52,050 --> 01:09:57,100 In ko se res sofisticiran na to, boste lahko pisali programe res trippy 1122 01:09:57,100 --> 01:09:59,610 kot je tale tukaj, ki gre nad in preko 1123 01:09:59,610 --> 01:10:03,940 nekatere funkcije smo naredili doslej, ampak vse zelo močna. 1124 01:10:03,940 --> 01:10:08,950 >> Torej bomo pustim pri tem na zaslonu in vam bomo videli v ponedeljek. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]