1 00:00:00,000 --> 00:00:02,270 [Powered by Google Translate] [Tjedan 2, nastavak] 2 00:00:02,270 --> 00:00:04,220 [David J. Malan, Sveučilište Harvard] 3 00:00:04,220 --> 00:00:06,880 [Ovo je CS50. - CS50.TV] 4 00:00:06,880 --> 00:00:10,990 U redu. Ovo je CS50, i to je kraj tjedna dva. 5 00:00:10,990 --> 00:00:14,410 Ako očekujete da ćete biti gladni oko tog vremena sutra, 6 00:00:14,410 --> 00:00:18,620 znam da ćemo sazvati kao male skupine sutra, četvrtak, 13:15. 7 00:00:18,620 --> 00:00:21,360 Tu je ovaj URL ovdje ako želite RSVP. 8 00:00:21,360 --> 00:00:26,740 Prostor je ograničen, pa molimo oprostiti ako oblik je popunio u vrijeme kada ispunite ovo. 9 00:00:26,740 --> 00:00:29,300 Drugi URL, ipak, da bi moglo biti od interesa je to. 10 00:00:29,300 --> 00:00:32,369 U samo oko mjesec dana, tečaj će biti dostupan 11 00:00:32,369 --> 00:00:36,890 sve više šire putem EDX, preko kojeg ljudi na internetu će se moći pratiti uz, 12 00:00:36,890 --> 00:00:39,380 uključe u tijeku prilično aktivno, u stvari. 13 00:00:39,380 --> 00:00:42,270 Oni će se koristiti CS50 CS50 Appliance i Raspravljajte 14 00:00:42,270 --> 00:00:45,490 a većina od različitih programskih alata koje smo već koriste ovaj semestar. 15 00:00:45,490 --> 00:00:48,710 A jedna od inicijativa bismo željeli da se na kao eksperiment ove godine 16 00:00:48,710 --> 00:00:51,930 je da se vidi koliko sadržaj možemo prevesti 17 00:00:51,930 --> 00:00:53,960 u drugim izgovorenih i napisanih jezika. 18 00:00:53,960 --> 00:00:57,500 Dakle, ako ste možda imaju interes za sudjelovanje u ovom projektu 19 00:00:57,500 --> 00:01:02,270 kojim ćemo osigurati engleskog transkripte i titlova za tečaj predavanja 20 00:01:02,270 --> 00:01:05,450 i gaćice i seminari i profili i slično, 21 00:01:05,450 --> 00:01:08,200 ako tečno ili pisati tečno neki drugi jezik, 22 00:01:08,200 --> 00:01:12,290 mi bi voljeli da vam se uključe u ovaj projekt kojim vas odvesti na jedan ili više videozapisa, 23 00:01:12,290 --> 00:01:15,200 ih prevodio na jezik znate prilično dobro. 24 00:01:15,200 --> 00:01:18,700 >> Da vam dati osjećaj sučelja, tu je ova web-based korisničko sučelje 25 00:01:18,700 --> 00:01:22,090 da ćemo se pomoću koje će stvoriti bitno je UI ovako. 26 00:01:22,090 --> 00:01:24,290 To je mene učeći neke Halloween prije, 27 00:01:24,290 --> 00:01:27,390 i na desnoj strani tamo u crnoj pored tih vremenskih pečata, 28 00:01:27,390 --> 00:01:31,210 ćete vidjeti razne stvari koje su došle iz usta taj dan, 29 00:01:31,210 --> 00:01:34,850 i onda ispod njega ćete moći prevesti na neki drugi jezik 30 00:01:34,850 --> 00:01:38,690 točno ono što je mapiranje između, u ovom slučaju, engleski i, recimo, španjolski. 31 00:01:38,690 --> 00:01:40,440 Dakle, to je zapravo vrlo user-friendly alat. 32 00:01:40,440 --> 00:01:43,370 Možete premotati i brzo naprijed vrlo lako s prečaca na tipkovnici. 33 00:01:43,370 --> 00:01:47,490 Dakle, ako želite sudjelovati u ovom eksperimentu i imati svoje riječi vidjeti i pročitati 34 00:01:47,490 --> 00:01:51,850 potencijalno tisuća ljudi vani, molimo Vas da se slobodno sudjelovati. 35 00:01:51,850 --> 00:01:54,350 Jedna riječ o mačića od ponedjeljka. 36 00:01:54,350 --> 00:02:00,350 Da ne smo poslali pretjerano zastrašujuće poruku, učinite shvatiti da, kao radno vrijeme sugeriraju 37 00:02:00,350 --> 00:02:03,300 i kao dijelovi sugeriraju, dizajn naravno je vrlo 38 00:02:03,300 --> 00:02:07,360 da su učenici surađuju i govori da rade kroz problema seta 39 00:02:07,360 --> 00:02:11,260 i problemi zajedno, i stvarno linija samo svodi na, 40 00:02:11,260 --> 00:02:16,010 opet, rad u konačnici poslati trebao biti vaš vlastiti. 41 00:02:16,010 --> 00:02:18,860 I tako sasvim iskreno, u uredovno vrijeme to je sasvim normalno, 42 00:02:18,860 --> 00:02:22,240 to totalno očekuje se čak, da se razgovor s nekim prijateljem pored vas. 43 00:02:22,240 --> 00:02:24,370 >> Ako on ili ona se bori s nekim temu, a ti si kao, 44 00:02:24,370 --> 00:02:27,940 "Oh, dobro, neka mi vam dati uvid u neke linije koda koji sam ja napisao," to je u redu, 45 00:02:27,940 --> 00:02:31,250 se to dogodi, a to je jako puno pridonosi, mislim, s procesom učenja. 46 00:02:31,250 --> 00:02:36,750 Gdje je linija dobiva prešao je kada je glava vrsta naginje ovamo za daleko previše sekundi 47 00:02:36,750 --> 00:02:41,160 ili minuta za to stvarno samo su deblokadi prilika za svog prijatelja, 48 00:02:41,160 --> 00:02:44,160 i svakako kada se stvari mijenjaju preko e-maila i Dropbox i slično, 49 00:02:44,160 --> 00:02:45,640 tamo je linija. 50 00:02:45,640 --> 00:02:48,620 Dakle, svim sredstvima osjećaju ugodno i osjećaju ohrabreni da razgovor s prijateljima 51 00:02:48,620 --> 00:02:52,810 i kolege o psets i više i samo shvatiti da je ono što u konačnici predati 52 00:02:52,810 --> 00:02:57,340 stvarno treba biti proizvod vašeg stvaranja, a ne netko drugi. 53 00:02:57,340 --> 00:03:00,490 I tako jedan od domena specifičnih problema za pset2, 54 00:03:00,490 --> 00:03:04,740 koji će izaći kasno sutra navečer, je zaroniti u svijet kriptografije, 55 00:03:04,740 --> 00:03:08,970 što je umjetnost šifriranjem ili remećenje informacije, 56 00:03:08,970 --> 00:03:12,600 i to u konačnici odnosi na svijet sigurnosti. 57 00:03:12,600 --> 00:03:16,560 Sada, sigurnost za većinu nas dolazi u obliku prilično svjetovnim mehanizama. 58 00:03:16,560 --> 00:03:19,050 Svi od nas imaju korisnička imena i lozinke, 59 00:03:19,050 --> 00:03:23,450 i svi mi imamo jako loš korisnička imena i lozinke, najvjerojatnije. 60 00:03:23,450 --> 00:03:28,240 >> Ako je vaša lozinka je isti na više stranica, to vjerojatno nije najbolja ideja, 61 00:03:28,240 --> 00:03:30,070 kao što ćemo raspraviti prema semestra kraja. 62 00:03:30,070 --> 00:03:34,720 Ako je vaša lozinka je napisan na sticky note - nije šala - na monitoru, 63 00:03:34,720 --> 00:03:38,350 da previše ne mora nužno biti najbolji dizajn, ali sasvim uobičajena pojava. 64 00:03:38,350 --> 00:03:42,470 A ako ne koristite kriptografiju za šifriranje vaše lozinke, 65 00:03:42,470 --> 00:03:44,210 oni su posebno osjetljivi. 66 00:03:44,210 --> 00:03:47,270 Dakle, ako mislite da ste se super pametan vlasništvo skriveni Word dokument 67 00:03:47,270 --> 00:03:49,910 negdje na tvrdom disku koji ima sve svoje lozinke 68 00:03:49,910 --> 00:03:53,670 ali to je u mapu da nitko ne ide gledati u, da previše nije vrlo siguran mehanizam. 69 00:03:53,670 --> 00:03:56,990 I tako ono što pset2 će uvesti je ova umjetnost kriptografije 70 00:03:56,990 --> 00:04:02,010 i remećenje informacije, tako da stvari kao što su lozinke sve više siguran. 71 00:04:02,010 --> 00:04:05,790 Kontekst je da s nesigurnim podacima 72 00:04:05,790 --> 00:04:07,930 dolazi priliku da ga šifriranje i da ga otimati. 73 00:04:07,930 --> 00:04:11,470 I tako to, na primjer, je primjer šifrirane poruke. 74 00:04:11,470 --> 00:04:14,700 To zapravo govori nešto na engleskom, ali to očito nije u potpunosti jasno. 75 00:04:14,700 --> 00:04:18,279 I mi ćemo doći puni krug danas zafrkavati, osim što je to tajna poruka ovdje je. 76 00:04:18,279 --> 00:04:23,490 No, u stvarnom svijetu računala, stvari uopće ne izgledaju kao da bi mogao biti engleski izrazi. 77 00:04:23,490 --> 00:04:28,430 Na primjer, to je ono što bi mogli naći na standardnom Linux ili Mac ili UNIX računala 78 00:04:28,430 --> 00:04:32,070 u datoteku koja je nekad davno nazvao lozinka datoteku. 79 00:04:32,070 --> 00:04:34,200 >> Danas je bio premješten na drugim mjestima. 80 00:04:34,200 --> 00:04:39,210 No, ako pogledate na pravom mjestu na sustavu, vidjet ćete ne samo svoje korisničko ime 81 00:04:39,210 --> 00:04:43,400 ili da od drugih ljudi u sustavu, ali vidjet ćete šifriranu verziju svog lozinkom. 82 00:04:43,400 --> 00:04:47,980 Doista, riječ kripta postoji sugerira da sljedeća stvar je šifriran, 83 00:04:47,980 --> 00:04:52,680 i ova serija naizgled slučajnih slova i znakova i brojeva i tako dalje 84 00:04:52,680 --> 00:04:56,480 može dešifrirati samo općenito znajući neke tajne - 85 00:04:56,480 --> 00:04:58,840 tajna riječ, tajni broj - 86 00:04:58,840 --> 00:05:03,160 i tako doista, umjetnost kriptografije konačnici svodi na povjerenje nekakve 87 00:05:03,160 --> 00:05:05,650 i znajući nešto što netko drugi ne. 88 00:05:05,650 --> 00:05:10,090 Dakle, mi ćemo istražiti to malo detaljnije i danas u pset doći. 89 00:05:10,090 --> 00:05:12,200 A sada riječ o pass / fail. 90 00:05:12,200 --> 00:05:15,360 Pogotovo što neki od vas su zaronili u pset1, aparati, 91 00:05:15,360 --> 00:05:19,080 i vrlo novi svijet za sebe, shvatiti da frustracije i zbunjenost 92 00:05:19,080 --> 00:05:21,700 i samo tehničke poteškoće su prilično se očekuje, 93 00:05:21,700 --> 00:05:24,180 pogotovo s prvim pset, gdje postoji samo toliko nova, 94 00:05:24,180 --> 00:05:27,730 samo upoznati sa ls i cd i svi ovi skrivenim naredbe 95 00:05:27,730 --> 00:05:33,050 i novo okruženje, te da je odvojen od stvarnog materijala i sama programiranje. 96 00:05:33,050 --> 00:05:36,940 Dakle, shvatite previše da postoje sigurno radno vrijeme koje postoje kao potpornu strukturu. 97 00:05:36,940 --> 00:05:38,880 >> Sekcije početi ovaj dolazak nedjelja. 98 00:05:38,880 --> 00:05:42,960 Ali što je najvažnije, ako ste osjećaj samo da to nije svijet za vas, 99 00:05:42,960 --> 00:05:44,710 shvatiti da je to zapravo samo ne uzeti vremena. 100 00:05:44,710 --> 00:05:48,600 A da nije za ovu priliku godina za mene uzimanje klase pass / fail, 101 00:05:48,600 --> 00:05:50,990 iskreno, ja nikad ne bi ni kročiti u učionici. 102 00:05:50,990 --> 00:05:53,690 A možete to promijeniti do, recimo, peti ponedjeljak je, naravno, 103 00:05:53,690 --> 00:05:58,280 pa ako ste na rubu sada, shvatite da umjesto glave u nekim drugim vodama uopce, 104 00:05:58,280 --> 00:06:01,260 ne sigurno uzeti u obzir samo mijenjaju proći / ne. 105 00:06:01,260 --> 00:06:04,570 Opet, ne postoji stvarno ta kultura ovdje na Harvardu uzimanja stvari proći / ne 106 00:06:04,570 --> 00:06:08,670 jer svatko stvarno želi postići ili overachieve, 107 00:06:08,670 --> 00:06:11,130 ali iskreno, ovo je prekrasan način pokušava nešto 108 00:06:11,130 --> 00:06:16,720 da ne bi moglo biti poznato na vas, a vi ćete završiti radi, u većini slučajeva, sasvim u redu, 109 00:06:16,720 --> 00:06:18,210 možda puno na svoj iznenađenje. 110 00:06:18,210 --> 00:06:20,980 I u više konkretnim uvjetima, što mislim proći / ne općenito ne, 111 00:06:20,980 --> 00:06:22,940 posebno kao što ste možda doživjeli s pset0, 112 00:06:22,940 --> 00:06:26,560 ako ste stavili u 10 sati, 15 sati, 25 sata na nekom pset 113 00:06:26,560 --> 00:06:29,920 a vi ste samo lupanje glavom o zid i to je sve super kasno noću 114 00:06:29,920 --> 00:06:33,950 ali ste uzeli pset 90% na putu, a vi jednostavno ne mogu shvatiti jednu stvar, 115 00:06:33,950 --> 00:06:36,520 proći / ne stvarno potrebno rub off klase kao što je ovaj, 116 00:06:36,520 --> 00:06:39,100 gdje možete sortirati od sretno reći: "Dobro, znam da neće biti savršena, 117 00:06:39,100 --> 00:06:42,350 ali sam radila moje dupe off na to, prilično sam sretan s kojima je završio ", 118 00:06:42,350 --> 00:06:44,850 i da će ispuniti očekivanja za pass / fail. 119 00:06:44,850 --> 00:06:47,540 Dakle, ne to na umu. U redu. 120 00:06:47,540 --> 00:06:50,520 >> Dakle, one od vas koji su se borili za korištenje Harvard University Wi-Fi, 121 00:06:50,520 --> 00:06:54,780 znam da postoji CS50 SSID, Wi-Fi veze, plutajući oko 122 00:06:54,780 --> 00:06:56,490 da li možda imati više sreće za. 123 00:06:56,490 --> 00:07:00,130 To je malo ironično da lozinka za to, ako želite probati povezivanje to 124 00:07:00,130 --> 00:07:08,350 za boljim brzinama - i javite nam ako to nije bolje - je 12.345, sve do 8 125 00:07:08,350 --> 00:07:10,910 jer 8 je sigurniji od pet. 126 00:07:10,910 --> 00:07:16,910 Dakle, ako vam je potrebna Wi-Fi lozinku, povezati CS50 bežično ovdje, 12345678, 127 00:07:16,910 --> 00:07:20,380 i post na CS50 Raspravljajte ako još uvijek imate problema s povezivanjem s prekidima, 128 00:07:20,380 --> 00:07:25,420 a mi ćemo pustiti ovlasti koje se znaju za taj prostor. U redu. 129 00:07:25,420 --> 00:07:32,230 Tako brzo zadirkivač, pogotovo za one od vas koji su ventilator dječaci i djevojčice od svih stvari Apple. 130 00:07:32,230 --> 00:07:37,460 Ono što sam iskopao od prije nekoliko godina vratio je ovu sliku ovdje, iUnlock.c, 131 00:07:37,460 --> 00:07:39,930 samo vrsta čine više betona i složenije 132 00:07:39,930 --> 00:07:42,560 neke od osnovnih C programa smo pisali. 133 00:07:42,560 --> 00:07:46,910 Tako sam otvorio ovu sliku, iUnlock.c. To je dostupan na stranici Predavanja za danas. 134 00:07:46,910 --> 00:07:49,810 Na lijevoj strani možete vidjeti dugačak popis funkcija. 135 00:07:49,810 --> 00:07:53,230 Dakle, čovjek koji je napisao ovo napisao gore puno funkcija, više nego samo glavni. 136 00:07:53,230 --> 00:07:57,340 On se koristi cijela hrpa knjižnicama ovdje, a ako počnemo listanje, 137 00:07:57,340 --> 00:08:04,890 što to zapravo je prvi, ja vjerujem, prasak za originalni iPhone. 138 00:08:04,890 --> 00:08:09,830 >> Kada ste htjeli jailbreak izvorni iPhone, što znači da untether iz AT & T 139 00:08:09,830 --> 00:08:13,710 i zapravo instalirati poseban softver na njega i raditi stvari koje Apple nije želio ljudi učiniti, 140 00:08:13,710 --> 00:08:18,480 netko uzeo vremena za shvatiti točno kako bi mogli iskoristiti softverske nedostatke, 141 00:08:18,480 --> 00:08:22,690 pogreške, kukci, u Apple softvera, a time je rođen iUnlock.c-- 142 00:08:22,690 --> 00:08:26,760 da, ako ga sastavio na računalu i instalirati na iPhone 143 00:08:26,760 --> 00:08:29,430 koji je povezan s računalom putem, recimo, USB kabel, 144 00:08:29,430 --> 00:08:32,450 to bi vam dati administrativne ili korijen privilegije na vašem iPhone 145 00:08:32,450 --> 00:08:34,620 i neka vas učiniti prilično puno što god želite. 146 00:08:34,620 --> 00:08:36,400 I tako je bilo to fascinantno mačka i miš igra 147 00:08:36,400 --> 00:08:39,340 između Apple i ostatka svijeta, posebice jer se oni, kao i mnogih tvrtki, 148 00:08:39,340 --> 00:08:43,350 pokušati zaključati svoje stvari dolje, tako da možete učiniti samo s njim što namjeravaju. 149 00:08:43,350 --> 00:08:47,360 No, zahvaljujući ljudima kao što je ovaj i razumijevanje low-level detalja - 150 00:08:47,360 --> 00:08:50,830 i, u ovom slučaju C programiranje - i puno poznatih konstrukata 151 00:08:50,830 --> 00:08:55,280 da smo počeli igrati sa, vi ste u mogućnosti da se stvarno iskoristiti hardver 152 00:08:55,280 --> 00:08:59,250 na način što vidite stane, a ne nužno neki korporativni entitet. 153 00:08:59,250 --> 00:09:01,600 Tako na primjer, nemam pojma što se sve ovo radi, 154 00:09:01,600 --> 00:09:03,580 ali GetVersion zvuči prilično jednostavan, 155 00:09:03,580 --> 00:09:05,710 i to izgleda ovako je funkcija da je ta osoba napisala. 156 00:09:05,710 --> 00:09:09,250 Potrebno je nekakav cijeli kao argument, ne vraća ništa, 157 00:09:09,250 --> 00:09:13,710 ali čini se da petlja s for petlje ovdje i ako stanje, ako se stanje pauze, 158 00:09:13,710 --> 00:09:16,770 i nekako se odnosi na brojeve verzija, ako mi se pomaknite prema dolje, 159 00:09:16,770 --> 00:09:19,650 iako mnoge od tih ključnih riječi će biti nova. 160 00:09:19,650 --> 00:09:22,590 I tu je cijeli niz funkcija u ovdje nikada nismo vidjeli i nikad ne može vidjeti 161 00:09:22,590 --> 00:09:24,350 tijekom semestra. 162 00:09:24,350 --> 00:09:29,160 >> Na kraju dana, slijedi ista pravila i logike da smo igrati s tako daleko. 163 00:09:29,160 --> 00:09:34,340 Dakle, ovo je daleko prestara za ispucati svoj iPhone 3S 4ke ili će uskoro 5s ovih dana, 164 00:09:34,340 --> 00:09:38,830 ali znam da je to sve jako puno izvedeni iz ovog svijeta da smo zaronili u. 165 00:09:38,830 --> 00:09:42,280 Ajmo pogledati malo više jednostavnom primjeru: 166 00:09:42,280 --> 00:09:46,260 ovaj jedan, samo da bi se grijao s nekom sintaksom i neki drugi tip podataka 167 00:09:46,260 --> 00:09:48,910 da smo razgovarali o, ali nisu stvarno vidio u C. 168 00:09:48,910 --> 00:09:53,670 Ovo je datoteka zove positive1.c, a po komentarima na vrhu, 169 00:09:53,670 --> 00:09:56,070 to samo zahtijeva da korisnik pružiti pozitivan broj. 170 00:09:56,070 --> 00:09:59,910 Dakle, to je primjer ne-while petlje, koja je lijepo za korisnika interaktivne programe 171 00:09:59,910 --> 00:10:02,070 gdje morate reći korisniku da učinite nešto, 172 00:10:02,070 --> 00:10:05,530 a ako oni ne surađuju li vikati na njih ili odbiti njihov doprinos. 173 00:10:05,530 --> 00:10:10,480 Slučaj u točki: Ja ću učiniti linije 19 do 24 174 00:10:10,480 --> 00:10:14,620 tako dugo dok korisnik nije mi dao pozitivan broj. 175 00:10:14,620 --> 00:10:21,340 Ovaj detalj ovdje na liniji 18, zašto sam proglasiti n iznad cijele ove petlje gradnje 176 00:10:21,340 --> 00:10:26,870 za razliku od tik do linije 22, gdje sam zapravo stalo da se n? Da. 177 00:10:26,870 --> 00:10:29,330 [Student] Opseg. >> Da, tako da je ovo pitanje opsega. 178 00:10:29,330 --> 00:10:31,770 I u laik uvjete, što se odnose na opseg? 179 00:10:34,880 --> 00:10:41,560 Da. >> [Nečujno učenik odgovor] >> Možete li govoriti malo glasnije? 180 00:10:41,560 --> 00:10:45,440 [Student] Gdje možete pristupiti tu varijablu. >> Savršeno. 181 00:10:45,440 --> 00:10:47,610 Gdje možete pristupiti određenu varijablu. 182 00:10:47,610 --> 00:10:50,990 I općenito, pravilo dosad je bio da je opseg nekih varijabla 183 00:10:50,990 --> 00:10:56,140 definiran posljednjim vitičastih zagrada koje ste vidjeli. 184 00:10:56,140 --> 00:11:03,070 >> I tako, u ovom slučaju, ako sam napravio pogrešku tvrdeći n na liniji 22, da linija će raditi. 185 00:11:03,070 --> 00:11:10,840 Ja bih dobiti int, i ja bih ga stavio u tu varijablu n u skladu 22, 186 00:11:10,840 --> 00:11:17,060 ali koja linija koda sada bi imao pojma što pričam? >> [Student] 25. 187 00:11:17,060 --> 00:11:23,840 [Malan] 25, i to ispada 24, kao i zato što je u ovom slučaju pada izvan vitičastih zagrada. 188 00:11:23,840 --> 00:11:28,550 Dakle, samo malo smetnja, ali vrlo lako riješiti jednostavno izjavljujući varijabla 189 00:11:28,550 --> 00:11:30,700 izvan funkcije sama. 190 00:11:30,700 --> 00:11:32,760 Vidjet ćemo kasnije danas možete otići korak dalje 191 00:11:32,760 --> 00:11:34,940 čak i ako bi mogao dobiti malo lijeni. 192 00:11:34,940 --> 00:11:39,660 A to je da se ne preporučuje u cjelini, ali čak mogao dobiti lijen 193 00:11:39,660 --> 00:11:44,150 i staviti varijablu na globalnoj razini, da se tako izrazim, ne unutar funkcije, a ne unutar petlje, 194 00:11:44,150 --> 00:11:49,800 ali u datoteci sama, izvan svih funkcija ste napisali, kao što sam učinio ovdje na liniji 15. 195 00:11:49,800 --> 00:11:55,220 To se obično frowned, ali shvatite ovo je rješenje ponekad do drugih problema, 196 00:11:55,220 --> 00:11:56,910 kao što smo na kraju ćemo vidjeti. 197 00:11:56,910 --> 00:11:59,500 Dakle, za sada ćemo ga ostaviti kao što je ovaj, ali neka je vidjeti ako mi može prepisati ovo 198 00:11:59,500 --> 00:12:02,360 samo za početak izražavanje sebe malo drugačije. 199 00:12:02,360 --> 00:12:05,550 Ovaj program, samo da bude jasno, je positive1. 200 00:12:05,550 --> 00:12:11,980 Dopustite mi da ide naprijed i ovdje u mom terminal prozoru napraviti positive1, Enter. 201 00:12:11,980 --> 00:12:15,080 Sastavlja ok. Idem pokrenuti positive1, pritisnite Enter. 202 00:12:15,080 --> 00:12:19,250 Zahtijevam da li mi dati pozitivan cijeli broj. Reći ću -1. To nije uspjelo. 203 00:12:19,250 --> 00:12:22,340 0, 99. To mi se čini da rade. 204 00:12:22,340 --> 00:12:25,310 Možda ne najrigoroznije testiranje, ali barem je lijepo razum ček 205 00:12:25,310 --> 00:12:27,100 da smo na pravom putu. 206 00:12:27,100 --> 00:12:29,570 >> Pa sada neka mi ići naprijed i otvoriti verziju dva toga, 207 00:12:29,570 --> 00:12:32,800 i ono što je drugačije već? 208 00:12:32,800 --> 00:12:39,030 Ona provodi istu stvar, ali ono što je iskakanja kao jasno različite ovom trenutku? 209 00:12:40,790 --> 00:12:47,090 Ovo bool u zelenom. To je istaknuto u zeleno, ovo ključnih poznat kao bool, koji je tip podataka. 210 00:12:47,090 --> 00:12:50,510 To ne dolazi ugrađen u svim verzijama C. 211 00:12:50,510 --> 00:12:52,650 Trebate uključiti određenu biblioteku. 212 00:12:52,650 --> 00:12:56,460 U našem slučaju, ja uključen CS50 knjižnicu, tako da imamo pristup bool. 213 00:12:56,460 --> 00:12:59,860 No, u skladu 18, mi se čini da imaju Boolean vrijednost ovdje zove zahvalni. 214 00:12:59,860 --> 00:13:02,190 Mogao sam nazvao ništa, ali sam to nazvao zahvalan 215 00:13:02,190 --> 00:13:04,750 samo da nekako prenijeti neke semantičke značenje. 216 00:13:04,750 --> 00:13:07,700 Dakle, u početku na liniji 18, ja sam očito nije zahvalan 217 00:13:07,700 --> 00:13:12,230 jer Boolean vrijednost zahvalni inicijaliziran na false u skladu 18. 218 00:13:12,230 --> 00:13:16,500 A onda čini ono što sam učinio ovdje u linijama 21 do 23. 219 00:13:16,500 --> 00:13:19,200 je sam samo vrsta prepisivati ​​moj logiku. 220 00:13:19,200 --> 00:13:26,100 Dakle, ne funkcionalno različiti, ali u skladu 22 sada sam provjeriti je li int korisnik je pružio 221 00:13:26,100 --> 00:13:31,360 je veća od 0, onda sam jednostavno promijenite vrijednost zahvalni istina. 222 00:13:31,360 --> 00:13:35,590 A zašto mi to učiniti? Budući da je u skladu 25, očito ću provjeriti stanje. 223 00:13:35,590 --> 00:13:39,760 Učinite ovu petlju dok zahvalna je lažna. 224 00:13:39,760 --> 00:13:42,960 Tako sam predložio ovo kao alternativa za verziju 1 225 00:13:42,960 --> 00:13:47,050 jer to je barem malo više intuitivno možda, to je malo više utemeljena na engleskom jeziku. 226 00:13:47,050 --> 00:13:51,980 Dakle, učiniti sljedeće dok niste zahvalni ili dok zahvalna je lažna. 227 00:13:51,980 --> 00:13:56,220 I ovaj put sam previše očito ne zanima da zapamtite ono što korisnik unese u 228 00:13:56,220 --> 00:14:00,050 jer najave nema varijabla n, tako da zapravo, malo bijelog laž postoji. 229 00:14:00,050 --> 00:14:03,290 >> Funkcionalno, program je malo drugačija kad dođemo do dna to 230 00:14:03,290 --> 00:14:04,960 jer nisam sjećanja na ono što je n. 231 00:14:04,960 --> 00:14:09,120 Ali ja sam htjela pokazati ovdje da, iako smo vidjeli GetInt 232 00:14:09,120 --> 00:14:13,780 i GetString se koristi i na desnoj strani znaka jednakosti dosad 233 00:14:13,780 --> 00:14:17,310 tako da mi se sjetiti vrijednost, tehnički, to nije nužno potrebno. 234 00:14:17,310 --> 00:14:20,290 Ako iz bilo kojeg razloga jednostavno ne briga za spremanje vrijednosti, 235 00:14:20,290 --> 00:14:25,540 samo želite provjeriti vrijednost, primijetiti da možemo jednostavno napisati ovo kao GetInt, 236 00:14:25,540 --> 00:14:27,320 otvorena zagrada, blizu zagr. 237 00:14:27,320 --> 00:14:30,570 To je funkcija će vratiti vrijednost, kao da smo bili govori. 238 00:14:30,570 --> 00:14:32,220 To će vam vratiti int. 239 00:14:32,220 --> 00:14:34,460 I tako, ako ste mentalno mislim da se to dogodi, 240 00:14:34,460 --> 00:14:38,190 kad sam upisati 99, GetInt vraća broj 99, 241 00:14:38,190 --> 00:14:41,840 i tako konceptualno, to je kao da mi je kod su zapravo to. 242 00:14:41,840 --> 00:14:45,950 Dakle, ako 99 je doista veći od 0, tada zahvalni postaje istina, 243 00:14:45,950 --> 00:14:50,810 zatim linija 25 shvaća ooh, mi smo učinili jer sam sada zahvalni, 244 00:14:50,810 --> 00:14:53,970 te u skladu 26, mi jednostavno reći: "Hvala za pozitivan cijeli broj!" 245 00:14:53,970 --> 00:14:55,960 bez obzira na to dogodilo se. 246 00:14:55,960 --> 00:14:59,140 Sada ćemo napraviti malu sintaktičkih šećer ovdje, da se tako izrazim. 247 00:14:59,140 --> 00:15:04,670 Hajdemo vidjeti možemo li počistiti ovu liniju 25 sa ovom trećem i posljednjem varijanti u positive3. 248 00:15:04,670 --> 00:15:13,600 >> Obavijest jedina razlika sada je ono linija koda? >> [Student] 25. >> [Malan] Da, 25 godina. 249 00:15:13,600 --> 00:15:17,680 I nismo si stvarno vidio ovaj trik samo još, ali mi nisu vidjeli uskličnik u ponedjeljak, 250 00:15:17,680 --> 00:15:21,070 koja označava što? >> [Student] Ne. >> Ne ili negacija. 251 00:15:21,070 --> 00:15:23,510 Tako se Boolean vrijednost i okrenuti svoju vrijednost. 252 00:15:23,510 --> 00:15:25,810 Istina postaje lažno, lažno postaje istina. 253 00:15:25,810 --> 00:15:30,420 Dakle, ovo, ja bih predložiti, je čak i malo više intuitivan način pisanja koda 254 00:15:30,420 --> 00:15:33,430 jer sam još uvijek inicijalizirati zahvalan lažna, ja još uvijek učiniti sljedeće, 255 00:15:33,430 --> 00:15:36,010 Postavio sam zahvalan istina kad dođe vrijeme, 256 00:15:36,010 --> 00:15:40,880 ali sada zaista možete jednostavno prevesti ovaj kod verbalno lijeva na desno, 257 00:15:40,880 --> 00:15:45,630 dok je (zahvalni!), jer prasak ili uskličnik označava pojam ne, 258 00:15:45,630 --> 00:15:47,580 pa dok ne zahvalni. 259 00:15:47,580 --> 00:15:49,900 Pa opet, ne bismo uveli neke nove koncepte po sebi. 260 00:15:49,900 --> 00:15:53,730 Razgovarali smo o logičke natrag kada smo igrali s nule, 261 00:15:53,730 --> 00:15:56,720 ali shvatite sada možemo samo početi pisati našu kôda na mnogo različitih načina. 262 00:15:56,720 --> 00:16:01,060 Dakle, posebno u pset1 ako ste vrsta bore shvatiti način da se napiše neki program, 263 00:16:01,060 --> 00:16:04,340 izgledi su da ste u sreću, jer ne može biti bilo koji broj rješenja 264 00:16:04,340 --> 00:16:06,110 da li se može dogoditi nakon. 265 00:16:06,110 --> 00:16:10,500 Na primjer, ovo je samo 3 za čak najjednostavniji programa. U redu. 266 00:16:10,500 --> 00:16:14,200 I sad sjetiti u ponedjeljak smo otišli na ove bilješke s povratnih vrijednosti. 267 00:16:14,200 --> 00:16:18,450 Tako je za vrlo prvi put pisali smo program koji ne samo da imaju glavno; 268 00:16:18,450 --> 00:16:22,550 ona također ima svoju vlastitu prilagođenu funkciju da sam napisao ovdje. 269 00:16:22,550 --> 00:16:26,810 Dakle, u skladu 31 do 34 sam provela kocke funkciju. 270 00:16:26,810 --> 00:16:30,240 To nije složen. To je samo * * u ovom slučaju. 271 00:16:30,240 --> 00:16:34,750 No, ono što je važno o tome da je uzimam ulaz u obliku 272 00:16:34,750 --> 00:16:39,180 i sam vraća izlaz u obliku * a *. 273 00:16:39,180 --> 00:16:43,560 Dakle, sada imam sposobnost, baš kao i ja se s prinf sama, 274 00:16:43,560 --> 00:16:47,240 pozvati ovu funkciju pozivom na kocke funkciju. 275 00:16:47,240 --> 00:16:51,970 >> A kocka funkcija uzima neki ulaz, a kocka funkcija vraća neku izlaz. 276 00:16:51,970 --> 00:16:56,960 Nasuprot tome, printf upravo učinio nešto. 277 00:16:56,960 --> 00:17:00,840 To nisu vratili ništa da mi stalo, iako kao stranu to ne vratiti vrijednost; 278 00:17:00,840 --> 00:17:03,110 samo općenito ga ignorirati. 279 00:17:03,110 --> 00:17:06,510 Printf upravo učinio nešto. Ona je imala nuspojava ispis na zaslonu. 280 00:17:06,510 --> 00:17:11,770 Za razliku od ovdje, imamo kocke funkciju, koja je zapravo vraća nešto. 281 00:17:11,770 --> 00:17:15,520 Dakle, za one upoznati s ovim, to je prilično jednostavan ideja. 282 00:17:15,520 --> 00:17:19,640 No, za one manje upoznati s ovom idejom prolazi u ulaza i izlaza dobivanje natrag, 283 00:17:19,640 --> 00:17:21,950 pokušajmo samo nešto super jednostavna. 284 00:17:21,950 --> 00:17:25,490 Je li itko ugodno dolazi na pozornicu nakratko? 285 00:17:25,490 --> 00:17:28,040 Morate biti udoban s kamerom na vas kao dobro. Da? Ok. 286 00:17:28,040 --> 00:17:31,240 Koje je vaše ime? >> [Student] Ken. >> Ken. U redu. Ken, dolaze na gore. 287 00:17:31,240 --> 00:17:35,050 Ken će biti funkcija sorti ovdje. 288 00:17:35,050 --> 00:17:38,720 Idemo naprijed i to učiniti. Idemo malo fancy. 289 00:17:38,720 --> 00:17:42,260 Drago mi je. Dobrodošli na središnjoj pozornici. U redu. 290 00:17:42,260 --> 00:17:46,640 Ajmo pogoditi ovaj gumb ovdje. U redu. 291 00:17:46,640 --> 00:17:49,820 Dakle ovdje imate modernu školsku ploču, 292 00:17:49,820 --> 00:17:53,470 i što sam je glavna funkcija, na primjer, 293 00:17:53,470 --> 00:17:56,460 i nemam iPad u ruci. 294 00:17:56,460 --> 00:17:59,710 >> Ja stvarno ne sjećam kako - Pa, ja ne mogu reći da. 295 00:17:59,710 --> 00:18:02,480 Ja ne stvarno imati dobar rukopis, 296 00:18:02,480 --> 00:18:05,520 i stoga želim da nešto ispisati na zaslonu za mene. 297 00:18:05,520 --> 00:18:12,040 Ja sam se glavni program, a ja ću imati što reći 298 00:18:12,040 --> 00:18:16,720 ga pisati u mom pilećeg nule i onda prolazi vam ulaz. 299 00:18:16,720 --> 00:18:20,400 Dakle, iako je glup ova vježba je pojam funkcije i poziva funkciju 300 00:18:20,400 --> 00:18:22,400 i vraća funkciju zapravo svodi na to. 301 00:18:22,400 --> 00:18:26,260 Ja sam glavni, ja sam samo napisao printf, citat-završiti citat nešto na ekranu, 302 00:18:26,260 --> 00:18:29,110 Ja sam trčanje ovaj program, i čim printf dobiva zove, 303 00:18:29,110 --> 00:18:32,880 to traje jedan argument ili jedan parametar ponekad između dvostrukih navodnika. 304 00:18:32,880 --> 00:18:35,880 Ovdje je taj argument. Ja sam ga prolazi na Kena. 305 00:18:35,880 --> 00:18:39,020 On je crna kutija napisao neki broj godina prije 306 00:18:39,020 --> 00:18:41,510 izgleda da je samo zna kako ispisati stvari na zaslonu. 307 00:18:41,510 --> 00:18:43,150 Dakle izvršiti. 308 00:18:49,280 --> 00:18:51,280 To nije loše. Vrlo dobro. 309 00:18:51,280 --> 00:18:55,510 Tako sada Ken je učinio izvršenja. Da li je potrebno predati mi ništa natrag? 310 00:18:55,510 --> 00:18:57,470 Nije da smo vidjeli dosad. 311 00:18:57,470 --> 00:19:00,460 Opet, printf zapravo ne vraća broj, ali mi ćemo zanemariti činjenicu da za sada 312 00:19:00,460 --> 00:19:03,470 jer nikada nismo ga koristiti. Dakle, to je to za Kena. 313 00:19:03,470 --> 00:19:08,580 I tako sada glavni preuzima kontrolu programa ponovno 314 00:19:08,580 --> 00:19:11,060 jer je to linija koda, printf, radi izvršenja. 315 00:19:11,060 --> 00:19:14,050 I idemo o našem putu, izvršenje bilo druge linije su tu. 316 00:19:14,050 --> 00:19:17,320 Dakle, sada idemo pokušati malo drugačiji primjer. 317 00:19:17,320 --> 00:19:24,940 Ovaj put ovdje neka prvi brisanje zaslona, ​​a ovaj put ćemo napraviti cubing funkciju, 318 00:19:24,940 --> 00:19:27,080 ali ovaj put, ja očekujem izlaznu vrijednost. 319 00:19:27,080 --> 00:19:29,180 >> Dakle, idemo naprijed i to učiniti. 320 00:19:29,180 --> 00:19:35,790 Sada imam liniju koda koji kaže x dobiva kocku x. 321 00:19:41,370 --> 00:19:46,370 Linija koda, podsjetimo, izgleda ovako: x = kocka (x); 322 00:19:46,370 --> 00:19:50,930 Pa kako će to raditi? Idemo naprijed i dati vam bijeli zaslon opet. 323 00:19:50,930 --> 00:19:54,070 Ja ću zapisati sada vrijednost x, 324 00:19:54,070 --> 00:20:01,400 koja je u ovom trenutku događa da se, recimo, dva držati ga jednostavno. 325 00:20:01,400 --> 00:20:06,150 Napisao sam dolje na komad papira vrijednost 2, što je moja vrijednost x. 326 00:20:06,150 --> 00:20:10,920 Ja ga predati na Kena. >> I ja sam samo napisati odgovor? >> Da, hajdemo samo napisati odgovor. 327 00:20:12,760 --> 00:20:18,940 Ok. I sad on mora vratiti mi nešto. Savršeno. Lijepo segue. 328 00:20:18,940 --> 00:20:23,120 Dakle, sada mi je ruke unatrag vrijednost 8, u ovom slučaju, i što da radim s njim? 329 00:20:23,120 --> 00:20:28,250 Zapravo - ajmo vidjeti, dobili to pravo. Što ću učiniti s njom? 330 00:20:28,250 --> 00:20:33,440 Sada ću uzeti tu vrijednost i zapravo ga pohraniti u tim istim bitova u memoriji. 331 00:20:33,440 --> 00:20:35,170 Ali primijetite Nekako sam bori ovdje. 332 00:20:35,170 --> 00:20:38,210 Ja sam malo zbunjen, jer gdje sam zapravo napisati vrijednost x, 333 00:20:38,210 --> 00:20:43,150 jer ono što sam upravo učinio je fizički ruka Ken komad papira koji je imao vrijednost 2, 334 00:20:43,150 --> 00:20:46,590 koji je bio x, i doista, to je upravo ono što se dogodilo. 335 00:20:46,590 --> 00:20:50,210 Tako ispada da kada nazovete funkciju i da prođe u argumentu 336 00:20:50,210 --> 00:20:53,290 kao halo, svijet ili što prođe u argument kao 2, 337 00:20:53,290 --> 00:20:57,110 općenito, ti si u prolazu primjerak tog argumenta. 338 00:20:57,110 --> 00:21:00,730 I tako kao što sam zapisao broj dva ovdje i predao ga Ken, 339 00:21:00,730 --> 00:21:04,720 da mora značiti da još uvijek imam kopiju vrijednosti dva negdje 340 00:21:04,720 --> 00:21:08,890 jer doista, sad da sam se vratio vrijednost 8, moram se vratiti u RAM 341 00:21:08,890 --> 00:21:12,130 i zapravo napiši 8 gdje sam nekada imao broj dva. 342 00:21:12,130 --> 00:21:16,950 Dakle, vizualno, zapamtiti ovaj pojam prolaze, doslovno, kopiju vrijednosti. 343 00:21:16,950 --> 00:21:20,780 >> Ken radi njegova stvar, mi pruži natrag nešto - u ovom slučaju vrijednost kao 8 - 344 00:21:20,780 --> 00:21:24,980 i onda moram nešto učiniti s tom vrijednosti, ako želim to zadržati. 345 00:21:24,980 --> 00:21:29,650 Dakle, sve to će se vratiti u biti sve previše upoznat prije dugo. 346 00:21:29,650 --> 00:21:34,920 Hvala vam toliko za ovaj demo ovdje, Kena. [Pljesak] 347 00:21:34,920 --> 00:21:36,920 Vrlo dobro učinio. 348 00:21:36,920 --> 00:21:42,690 Idemo vidjeti kako to u konačnici odnosi na neke od funkcija poziva da smo radili ovdje. 349 00:21:42,690 --> 00:21:47,910 Dopustite mi ići naprijed i vratiti nas u cubing primjer ovdje. 350 00:21:47,910 --> 00:21:53,300 Primjetite da ako želimo da se zapravo početi uzimati ovo dalje, 351 00:21:53,300 --> 00:21:57,570 ćemo morati biti svjesni činjenice da je broj x koji je prošao se ovdje 352 00:21:57,570 --> 00:22:01,530 se razlikuje od onoga što je zapravo prenosi u funkciji. 353 00:22:01,530 --> 00:22:05,880 Pa opet, to proći primjerak će postati vrlo povezan u samo trenutak. 354 00:22:05,880 --> 00:22:09,580 Idemo pogledati nešto što ne sasvim rade upravo gostiju. 355 00:22:09,580 --> 00:22:13,250 Ja ću ići naprijed i otvoriti trećine lud primjer, koji je manjkav po prirodi, 356 00:22:13,250 --> 00:22:18,550 i to se zove buggy3 i implementira zamjene funkciju. 357 00:22:18,550 --> 00:22:25,110 Ovdje imamo glavnu funkciju da je x i y samovoljno pokrenutog na jedan i dva, respektivno. 358 00:22:25,110 --> 00:22:27,700 Mogli bismo koristiti GetInt, ali samo mi treba jednostavan vježbe, 359 00:22:27,700 --> 00:22:30,170 tako da je teško kodirana kao jedan i dva. 360 00:22:30,170 --> 00:22:35,340 U linijama 21 i 22, što je očito isprintati X i Y, jedan po retku. 361 00:22:35,340 --> 00:22:39,720 Tada se na liniji 23, tvrdim ja sam zamjene tih vrijednosti, točka, točkica, točaka. 362 00:22:39,720 --> 00:22:44,170 Ja očito pozvati funkciju u skladu 24 tzv zamjena koja uzima dva argumenta. 363 00:22:44,170 --> 00:22:48,300 Totalno čitljiv za funkcije uzeti dva argumenta. Vidjeli smo printf to već. 364 00:22:48,300 --> 00:22:51,830 >> Dakle, zamjena očito ima X i Y, i kao što mu ime sugerira, 365 00:22:51,830 --> 00:22:54,670 Ja se nadam da će to zamijeniti ove dvije vrijednosti. 366 00:22:54,670 --> 00:23:00,090 Pa onda ja tvrdim na liniji 25 "zamijenili!" i ja ispišite xiy 367 00:23:00,090 --> 00:23:03,070 pod pretpostavkom da su oni zapravo ste bili zamijenili. 368 00:23:03,070 --> 00:23:06,080 Ali, ako sam zapravo pokrenuti ovaj program - neka mi otvoriti prozor terminala, 369 00:23:06,080 --> 00:23:09,860 neka mi napraviti buggy3 - kao što ime sugerira, to ne ide do kraja i 370 00:23:09,860 --> 00:23:15,770 jer kad sam pogodio Enter, primijetiti da x je 1, y je 2, 371 00:23:15,770 --> 00:23:19,420 i još na kraju programa, oni su još uvijek, u stvari, isto. 372 00:23:19,420 --> 00:23:22,960 Dakle, na temelju demonstracije samo sada s Kenom, što se zapravo događa? 373 00:23:22,960 --> 00:23:28,710 Ajmo zaronite u ovom swapu funkciji. To je super kratka. To je samo nekoliko linija koda dugo. 374 00:23:28,710 --> 00:23:34,520 No, ono što je temeljni problem temelji se na jednostavnom priča se ovdje s Kenom? 375 00:23:34,520 --> 00:23:36,670 Zašto je zamjena slomljena? 376 00:23:36,670 --> 00:23:39,660 [Student] Ti si pohranu na kopiju, a ne varijabilnom. 377 00:23:39,660 --> 00:23:43,980 Točno. Mi pohranu na kopiju, a ne varijabla sama. 378 00:23:43,980 --> 00:23:47,170 Drugim riječima, swap navodno traje dva argumente, Int, 379 00:23:47,170 --> 00:23:49,370 i to samovoljno zove i b, 380 00:23:49,370 --> 00:23:54,420 i ovdje sam prošao u X i Y, koji su redom 1 i 2, 381 00:23:54,420 --> 00:23:58,770 ali ja ne doslovno prolazi u x, nisam doslovno prolazi u y, 382 00:23:58,770 --> 00:24:01,450 Ja sam prolazeći kopiju x i kopiju y. 383 00:24:01,450 --> 00:24:04,510 To je gotovo kao da ste kopirati i zalijepiti u swapa 384 00:24:04,510 --> 00:24:07,810 vrijednosti koje želite to zapravo manipulirati. 385 00:24:07,810 --> 00:24:14,480 Dakle, ako je to slučaj, kada sam program početak izvršenja liniju 35 onda 36, 386 00:24:14,480 --> 00:24:18,650 kad dođem na liniji 37, u ovom trenutku u priči, što je vrijednost? 387 00:24:21,040 --> 00:24:25,050 U ovom trenutku u priči, linije 37, što je vrijednost u ovom trenutku? >> [Student] 1. 388 00:24:25,050 --> 00:24:29,280 [Malan] To samo treba biti 1, desno, jer x donesen kao prvi argument, 389 00:24:29,280 --> 00:24:33,080 i ova funkcija samo proizvoljno poziva svoj prvi argument je. 390 00:24:33,080 --> 00:24:38,200 Slično je y drugi argument, a to je samo proizvoljno pozivom drugi argument b. 391 00:24:38,200 --> 00:24:40,990 >> Ova dihotomija je zapravo prilično jednostavno objašnjeno. Razmislite o tome. 392 00:24:40,990 --> 00:24:43,320 Nitko od nas su se susreli osobu koja je napisao printf, 393 00:24:43,320 --> 00:24:50,770 pa sigurno, on ili ona nema pojma što naši varijable 30 godina kasnije se ide da se zove. 394 00:24:50,770 --> 00:24:56,650 Dakle, mora postojati razlika između onoga što nazivamo varijable u funkcijama pišete 395 00:24:56,650 --> 00:25:02,080 i ono što nazivamo varijable u funkcijama ste pozivali ili korištenjem. 396 00:25:02,080 --> 00:25:05,340 Dakle, drugim riječima, ja sam napisao moje varijable kao X i Y, 397 00:25:05,340 --> 00:25:08,890 ali ako netko je napisao swap funkciju, on ili ona sigurno ne bi znao 398 00:25:08,890 --> 00:25:10,690 što moji varijable će se zvati, 399 00:25:10,690 --> 00:25:13,830 tako shvatiti da je to razlog zašto ste ovu dvojnost imena. 400 00:25:13,830 --> 00:25:16,750 Tehnički, mogao sam to učiniti slučajno, 401 00:25:16,750 --> 00:25:20,080 ali oni će i dalje biti donesen kao kopija. 402 00:25:20,080 --> 00:25:23,650 To bi bila samo čista slučajnost estetski ako je ta osoba koja je napisala zamjenu 403 00:25:23,650 --> 00:25:26,150 imao koristi ista imena. 404 00:25:26,150 --> 00:25:32,370 Dakle, u ovom trenutku u priči, linije 37, 1, b 2, a sada sam nastaviti kako bi ih zamijeniti. 405 00:25:32,370 --> 00:25:34,900 Prije svega, dopustite mi da zapravo to učiniti mnogo više jednostavno. 406 00:25:34,900 --> 00:25:36,690 Ne znam što ti tri linije koda su radili. 407 00:25:36,690 --> 00:25:41,210 Dopustite mi samo to: b =; = b; učinjeno. 408 00:25:41,210 --> 00:25:44,690 Zašto je to slomljen, logično? 409 00:25:46,490 --> 00:25:48,900 To je vrsta intuitivnog stvar, zar ne? 410 00:25:48,900 --> 00:25:52,560 Tako postaje b i b postaje, 411 00:25:52,560 --> 00:25:57,730 ali problem je u tome da čim linije 37 izvršava, što je vrijednost A i B? 412 00:25:57,730 --> 00:26:03,410 Isti, jedan, jer ste razbijen, da se tako izrazim, ti si se promijenio b jednaka. 413 00:26:03,410 --> 00:26:08,890 Tako jednom linije 37 je pogubljen, to je super, sada imate dvije kopije broj 1 414 00:26:08,890 --> 00:26:13,350 unutar ove funkcije, pa onda kad kažeš u skladu 38 = b, 415 00:26:13,350 --> 00:26:17,640 ste vrsta pijan jer ste samo dodjeljivanjem 1 do 1. 416 00:26:17,640 --> 00:26:20,580 Vi ste vrsta izgubila vrijednost koju stalo. 417 00:26:20,580 --> 00:26:23,220 Dakle, u originalnoj verziji to primijetiti ono što sam učinio. 418 00:26:23,220 --> 00:26:26,850 Ja umjesto imao trećine liniju koda koji je izgledao ovako. 419 00:26:26,850 --> 00:26:28,580 Izjavljujem privremenu varijablu. 420 00:26:28,580 --> 00:26:32,170 >> MPT je vrlo čest naziv za privremenu varijablu, a to je int 421 00:26:32,170 --> 00:26:34,580 jer mora odgovarati što želim napraviti kopiju. 422 00:26:34,580 --> 00:26:39,770 Ja pohraniti kopiju unutrašnjosti tmp, pa nakon linije 37 je pogubljen, 423 00:26:39,770 --> 00:26:45,860 vrijednost je - brzo razum ček - 1, vrijednost b je 2, 424 00:26:45,860 --> 00:26:48,970 i vrijednost tmp je 1. 425 00:26:48,970 --> 00:26:52,060 Dakle, sada sam izvršiti liniju 38. 426 00:26:52,060 --> 00:27:00,540 Nakon linija 38 izvršava, preuzima vrijednosti b. I b je 2, pa je sada dvije. 427 00:27:00,540 --> 00:27:05,210 Tako u ovom trenutku u priči, je 2, b je 2, a tmp je 1, 428 00:27:05,210 --> 00:27:11,060 pa sad logično, mi može samo pasti MPT je vrijednost u b i mi smo gotovi. 429 00:27:11,060 --> 00:27:12,800 Tako smo riješiti taj problem. 430 00:27:12,800 --> 00:27:17,720 Nažalost, kad sam pokrenuti ovaj program u ovom obliku, to zapravo ne zamijene nikakve vrijednosti. 431 00:27:17,720 --> 00:27:20,100 Ali da bude jasno, zašto? 432 00:27:23,660 --> 00:27:26,450 Sredio sam logički problem od samo trenutak prije, 433 00:27:26,450 --> 00:27:31,020 ali opet, ako sam pokrenuti ovaj program, x i y ostaju nepromijenjene 434 00:27:31,020 --> 00:27:33,310 do kraja programa izvršavanja. 435 00:27:33,310 --> 00:27:37,220 [Nečujno učenik komentar] >> nismo vratili ništa, tako da je to istina. 436 00:27:37,220 --> 00:27:39,670 No, ispostavilo se da je malo problem ovdje jer dosad, 437 00:27:39,670 --> 00:27:44,170 Jedino smo bili u mogućnosti vratiti je jedna stvar, a to je ograničenje C. 438 00:27:44,170 --> 00:27:49,070 Vi samo mogu vratiti stvarno jedna vrijednost, u kojem slučaju Nekako sam zapeo ovdje 439 00:27:49,070 --> 00:27:53,310 jer bih se mogao vratiti na novu vrijednost x ili bih se mogao vratiti na novu vrijednost y, 440 00:27:53,310 --> 00:27:55,190 ali ja želim i leđa. 441 00:27:55,190 --> 00:27:58,650 Dakle povratka nije jednostavno rješenje ovdje. 442 00:27:58,650 --> 00:28:01,710 No, problem je fundamentalno zašto? Što smo zapravo zamijenili? 443 00:28:01,710 --> 00:28:04,190 [Student] i b. >> A i b. 444 00:28:04,190 --> 00:28:08,230 No, i b su kopije X i Y, što znači da upravo učinio sve ovo djelo, 445 00:28:08,230 --> 00:28:11,650 samo smo proveli tri minuta govori o swap funkciju i sve tri od tih varijabli, 446 00:28:11,650 --> 00:28:15,420 i to je super, savršeno točno u izolaciji, 447 00:28:15,420 --> 00:28:20,740 ali i B opseg samo je u tim linijama ovdje. 448 00:28:20,740 --> 00:28:24,790 >> Dakle, baš kao i za petlju, ako proglasiti integer ja unutar for petlje, 449 00:28:24,790 --> 00:28:28,760 Isto tako, ako ste proglašenja A i B unutar funkcije koje ste pismeni, 450 00:28:28,760 --> 00:28:33,320 oni vrijede samo unutar te funkcije, što znači da čim swap učinio izvršenja 451 00:28:33,320 --> 00:28:38,470 i idemo iz linije 24 do linije 25, X i Y nisu uopće promijenio. 452 00:28:38,470 --> 00:28:42,790 Vi samo izgubiti puno vremena zamjene kopije varijabli. 453 00:28:42,790 --> 00:28:47,010 Tako ispada da je rješenje za to je zapravo ne-očigledan. 454 00:28:47,010 --> 00:28:50,670 To nije sasvim dovoljan za povratak vrijednosti, jer samo možemo vratiti jednog vrijednost, 455 00:28:50,670 --> 00:28:53,470 a ja stvarno ne želim mijenjati i xiy u isto vrijeme, 456 00:28:53,470 --> 00:28:55,210 tako da ćemo morati vratiti na to. 457 00:28:55,210 --> 00:29:01,020 Ali za sada, shvatite da je problem u osnovi izvedena iz činjenice da su A i B primjeraka 458 00:29:01,020 --> 00:29:03,630 i oni su u svom djelokrugu. 459 00:29:03,630 --> 00:29:05,050 Idemo pokušati riješiti to na neki način. 460 00:29:05,050 --> 00:29:11,250 Dopustite mi zapravo dođite ovamo i otvoriti, recimo, četvrtina varijantu to, buggy4. 461 00:29:11,250 --> 00:29:13,370 Što je to? 462 00:29:13,370 --> 00:29:17,810 To je slično, ali jednostavniji problem pogledati prije nego što smo se rana na to rješavanje. 463 00:29:17,810 --> 00:29:24,190 Ovaj program se zove prirast, a to očito inicijalizira je x cijeli broj 1 na liniji 18. 464 00:29:24,190 --> 00:29:28,150 I onda zahtjevu x je 1, onda sam zahtjevu "povećavanjem ..." 465 00:29:28,150 --> 00:29:33,730 I onda nazvati prirast, ali onda u redovima 22 i 23, ja tvrdim da je bio porastao, 466 00:29:33,730 --> 00:29:40,220 Tvrdim x je sada bez obzira na to je - dva, vjerojatno - ali ovaj program je lud. 467 00:29:40,220 --> 00:29:42,610 U čemu je problem? 468 00:29:43,440 --> 00:29:50,160 Da. >> [Nečujno učenik response] >> Točno. 469 00:29:50,160 --> 00:29:52,490 Dakle, x je proglašen, očito, na liniji 18. 470 00:29:52,490 --> 00:29:54,700 To je u glavnom u vitičastim zagradama. 471 00:29:54,700 --> 00:29:58,440 Dakle, jednostavan odgovor je da, dok x ne postoji ovdje, 472 00:29:58,440 --> 00:30:03,930 to ne postoji u liniji 32, tako da je ovaj program zapravo uopće neće sastaviti. 473 00:30:03,930 --> 00:30:07,940 Prevodilac kad sam probati sastavljanju ovaj kod će vikati na mene 474 00:30:07,940 --> 00:30:14,100 o nekim neprijavljenog identifikator ili nešto u tom smislu. U stvari, pokušajmo. 475 00:30:14,100 --> 00:30:18,470 Ovo je napraviti buggy4. Tu je. 476 00:30:18,470 --> 00:30:22,110 Koristite neprijavljenog identifikator "X" u skladu 32. 477 00:30:22,110 --> 00:30:25,580 A zapravo, budimo precizniji danas ovdje, tako da je to korisno 478 00:30:25,580 --> 00:30:27,580 u uredovno vrijeme i kod kuće. 479 00:30:27,580 --> 00:30:29,300 >> Primijetit ćete da je to malo šifrirano napisano. 480 00:30:29,300 --> 00:30:37,270 No, činjenica da zveka ima vikao na nas, rekavši buggy4.c: 32:5, je zapravo korisno. 481 00:30:37,270 --> 00:30:42,050 To znači da je pogreška na liniji 32 u znaka pet. 482 00:30:42,050 --> 00:30:46,700 Dakle 1, 2, 3, 4, 5. To je, u stvari, gdje je problem. 483 00:30:46,700 --> 00:30:49,790 I također, također, imati na umu u uredovno vrijeme i kod kuće, ja sam sretan ovdje. 484 00:30:49,790 --> 00:30:52,990 Imam jedan pogrešku. To će biti relativno lako popraviti. 485 00:30:52,990 --> 00:30:55,990 Ali ako se cijeli ekran pun neodoljiv poruka o pogrešci, 486 00:30:55,990 --> 00:31:00,330 opet shvatiti da najniži jedna samo može biti simptomatična najviši jedan. 487 00:31:00,330 --> 00:31:03,450 Dakle, uvijek juriti dolje svoje greške iz vrha prema dolje 488 00:31:03,450 --> 00:31:05,820 jer postoji samo može biti učinak lančana 489 00:31:05,820 --> 00:31:09,240 koji se upućuje imate način više problema nego što zapravo rade. 490 00:31:09,240 --> 00:31:15,150 Dakle, kako bismo mogli popraviti ako mi je cilj povećavati x? >> [Student] Make x globalno. 491 00:31:15,150 --> 00:31:17,060 Ok, tako da možemo napraviti x globalno. 492 00:31:17,060 --> 00:31:20,480 Ajmo uzeti prečac koji sam upozorio ranije, ali dovraga, samo mi treba brzo popraviti, 493 00:31:20,480 --> 00:31:25,730 pa recimo samo int x ovdje. To čini x globalno. 494 00:31:25,730 --> 00:31:31,800 Dakle, sada glavni ima pristup do njega i prirast ima pristup do njega, 495 00:31:31,800 --> 00:31:34,110 pa neka mi ići naprijed i sastaviti to sada. 496 00:31:34,110 --> 00:31:37,630 Napravite buggy4, Enter. Čini se da sastaviti sada. 497 00:31:37,630 --> 00:31:41,230 Ajmo pokrenuti buggy4. A čini se da se zapravo radi. 498 00:31:41,230 --> 00:31:45,150 Ovo je jedna od tih stvari koje se rade kao što sam rekao, ne kao ja, 499 00:31:45,150 --> 00:31:47,010 kao što sam učinio ovdje, jer u cjelini, 500 00:31:47,010 --> 00:31:50,440 naši programi su idući u dobiti mnogo zanimljivije i puno više od toga, 501 00:31:50,440 --> 00:31:56,390 i ako je vaš rješenje životnih problema samo staviti sve varijable na vrhu datoteke, 502 00:31:56,390 --> 00:31:59,690 vrlo brzo ne programi dobili horrifically teško upravljati. 503 00:31:59,690 --> 00:32:02,190 Ona dobiva teže smisliti nove varijable imena, 504 00:32:02,190 --> 00:32:05,240 to dobiva teže shvatiti što varijabla radi ono, 505 00:32:05,240 --> 00:32:08,460 i tako u cjelini, to nije dobro rješenje. 506 00:32:08,460 --> 00:32:10,030 Pa hajdemo to učiniti bolje. 507 00:32:10,030 --> 00:32:12,160 Mi ne želimo koristiti globalnu varijablu ovdje. 508 00:32:12,160 --> 00:32:16,240 >> Ja ne želim da prirast x, tako da sam mogao očito - 509 00:32:16,240 --> 00:32:18,670 Na kraju dana, to je poput glupog priče, jer smo upravo to - 510 00:32:18,670 --> 00:32:24,450 ali ako ne znam o tom operateru ili nisam smjela da ga promijeniti u glavnom sama, 511 00:32:24,450 --> 00:32:30,730 kako bi drugi mogao sam provesti Kena ovamo ovaj put ne kocka, ali povećajte? 512 00:32:31,380 --> 00:32:33,190 Kako mogu promijeniti tu stvar ovdje? Da. 513 00:32:33,190 --> 00:32:38,480 [Student] Pass u x, a zatim se vratiti [nečujno] >> Dobro, dobro. 514 00:32:38,480 --> 00:32:41,900 Pa zašto ne bih proći u x i onda umjesto da ga vrate, 515 00:32:41,900 --> 00:32:44,870 zašto ne bih baš ne vratiti x + 1. 516 00:32:44,870 --> 00:32:47,710 Par više stvari moraju promijeniti ovdje. Ja sam na pravom putu. 517 00:32:47,710 --> 00:32:49,770 Što još trebam Tweak? Netko drugi. Da. 518 00:32:49,770 --> 00:32:51,740 [Nečujno učenik odgovor] 519 00:32:51,740 --> 00:32:54,730 Trebam promijeniti povratnu vrstu prirasta, jer to ne poništava. 520 00:32:54,730 --> 00:32:57,780 Void znači ništa se ne vraća, ali jasno je sada, 521 00:32:57,780 --> 00:32:59,830 pa to treba promijeniti - >> [student] int. 522 00:32:59,830 --> 00:33:02,740 int biti u skladu s god sam zapravo vraćaju. 523 00:33:02,740 --> 00:33:05,180 Sada je nešto drugo još uvijek lud ovdje. Da. 524 00:33:05,180 --> 00:33:08,400 [Nečujno učenik odgovor] >> [Malan] Pa moram povećavati x? 525 00:33:08,400 --> 00:33:12,080 [Nečujno učenik odgovor] >> [Malan] Ah, pa moram proći x. 526 00:33:12,080 --> 00:33:16,660 Dakle, moram to učiniti ovdje. >> [Nečujno učenik komentar] 527 00:33:16,660 --> 00:33:20,050 [Malan] Pa prototip, moram promijeniti ovaj ovdje. 528 00:33:20,050 --> 00:33:22,930 Dakle, to mora postati int, to mora postati - 529 00:33:22,930 --> 00:33:25,620 hmm, ja zapravo imaju bug ovdje dolje. Ajmo riješiti ovo jednom prvi. 530 00:33:25,620 --> 00:33:29,590 Što bi to zapravo biti? To je dobio biti int nešto. 531 00:33:29,590 --> 00:33:32,700 To bi mogao biti x, ali iskreno, ako početi zovete sve svoje varijable x, 532 00:33:32,700 --> 00:33:35,390 to će dobiti manje i manje jasno što je što. 533 00:33:35,390 --> 00:33:39,560 >> Dakle, neka je samo proizvoljno odabrati neku drugu konvenciji imenovanja za moje pomagač funkcije, 534 00:33:39,560 --> 00:33:41,940 funkcije pišem. Mi ćemo ga nazvati, ili možemo ga nazvati - 535 00:33:41,940 --> 00:33:45,010 Nazovimo to broj biti još precizniji. 536 00:33:45,010 --> 00:33:47,560 Pa onda moram vratiti ono što je broj plus 1, 537 00:33:47,560 --> 00:33:50,740 i sada moram promijeniti jednog druga stvar ovdje i jedna druga stvar ovdje. 538 00:33:50,740 --> 00:33:54,350 Što moram promijeniti na liniji 21 prvi? >> [Nečujno učenik odgovor] 539 00:33:54,350 --> 00:33:57,610 [Malan] Moram ga dodijeliti x. Ja ne mogu samo pozvati prirasta (x). 540 00:33:57,610 --> 00:34:01,960 Moram se sjetiti odgovor promjenom vrijednost od x na lijevoj strani. 541 00:34:01,960 --> 00:34:04,680 I premda x je sada na lijevo i desno, to je potpuno u redu 542 00:34:04,680 --> 00:34:08,860 jer desna strana dobiva pogubili prvi onda dobiva plopped u lijevoj stvar - 543 00:34:08,860 --> 00:34:10,600 x u ovom slučaju. 544 00:34:10,600 --> 00:34:12,159 I onda na kraju, to je lako popraviti sada. 545 00:34:12,159 --> 00:34:17,230 Ovo je samo trebao odgovarati što je dolje, int broj. 546 00:34:17,230 --> 00:34:20,570 Dakle, cijela hrpa promjena za stvarno glupo funkciji 547 00:34:20,570 --> 00:34:24,420 ali predstavnik stvari koje mi se sve ćete želite učiniti. 548 00:34:24,420 --> 00:34:27,090 Tako bi buggy4. Ja sam zeznuo negdje. 549 00:34:27,090 --> 00:34:30,139 Oh, moj Bože. Pet pogrešaka u 6-line programa. 550 00:34:30,139 --> 00:34:35,690 Dakle, ono što je krivo na liniji 18, lik 5? 551 00:34:35,690 --> 00:34:39,610 Dakle, moram da objavim ovo, Int. 552 00:34:39,610 --> 00:34:41,920 Idemo vidjeti. Postoji cijela hrpa drugih pogrešaka. 553 00:34:41,920 --> 00:34:47,010 Oh, moj Bože - 19, 18, 21 -, ali opet, neka je samo brisanje zaslona, ​​Upravljačka L ovdje, 554 00:34:47,010 --> 00:34:49,380 i ponovno jeka. 555 00:34:49,380 --> 00:34:51,340 Dakle, pet problema je zapravo samo da je 1. 556 00:34:51,340 --> 00:34:57,520 Dakle, sada idemo pokrenuti buggy4, Enter. Uh, x je porastao ispravno. 557 00:34:57,520 --> 00:35:02,720 U redu. Sva pitanja o tome kako za povećanje broja? Da. 558 00:35:02,720 --> 00:35:09,870 [Nečujno učenik pitanje] >> Dobro pitanje. 559 00:35:09,870 --> 00:35:14,220 Kako to da ja mogu samo promijeniti x broju i program će odmah znati? 560 00:35:14,220 --> 00:35:16,200 >> Opet, mislim da je to ovaj apstrakcije. 561 00:35:16,200 --> 00:35:21,600 Dakle, ako sam glavni i Ken je prirast, iskreno, ne zanima me što Ken poziva svoju ipad. 562 00:35:21,600 --> 00:35:26,570 Ne zanima me što on naziva sve što ima veze s njegovom provedbom ove funkcije. 563 00:35:26,570 --> 00:35:33,340 Ovo je implementacija detalj koji sam, uglavnom, ne morate brinuti o tome. 564 00:35:33,340 --> 00:35:38,250 I tako jednostavno mijenja dosljedno unutar funkcije - broj ovdje i broj ovdje - 565 00:35:38,250 --> 00:35:40,960 Sve je to traje tako dugo kao što sam rekompiliranje. 566 00:35:40,960 --> 00:35:44,180 To je vrsta kao i ako mislite o tome mnogi od nas, one od vas s vozačkih dozvola 567 00:35:44,180 --> 00:35:46,770 koji su vođeni ili ako čak sam odvezao u automobilu, 568 00:35:46,770 --> 00:35:50,950 većina nas nema pojma kako se auto radi ispod haube. 569 00:35:50,950 --> 00:35:54,970 I doslovno, ako vam se otvoriti haubu, većina nas - uključujući i mene - 570 00:35:54,970 --> 00:35:56,940 se ne događa da znam što gledamo, 571 00:35:56,940 --> 00:35:59,220 vrsta kao što ste možda osjećaju stvari kao što je ovaj sada. 572 00:35:59,220 --> 00:36:01,480 Ali mi stvarno ne moraju brinuti kako automobil radi, 573 00:36:01,480 --> 00:36:05,970 nemamo da briga što sve šipke i klipova i kablova unutar od auta 574 00:36:05,970 --> 00:36:08,160 se zapravo radi. 575 00:36:08,160 --> 00:36:12,770 Dakle, nešto poput onoga što vi zovete klip ne smeta ovdje, u ovom slučaju. Sve ideja. 576 00:36:12,770 --> 00:36:25,300 Da. >> [Nečujno učenik pitanje] 577 00:36:25,300 --> 00:36:29,180 Ako postoji više koristi od varijabilnog Xa trenutak prije, 578 00:36:29,180 --> 00:36:32,150 ti, programer, morat će ih promijeniti posvuda. 579 00:36:32,150 --> 00:36:36,600 Ili ste doslovno mogli učiniti File, Izbornik, a zatim Nađi, Zamijeni - takvo nešto - 580 00:36:36,600 --> 00:36:39,170 ali ti si idući u morati napraviti tih promjena sebe. 581 00:36:39,170 --> 00:36:47,450 Morate biti dosljedna. >> [Student] Ako postoji više varijabli [nečujan] 582 00:36:47,450 --> 00:36:53,100 Posebno bi kao ovdje, ako je to int drugi broj? >> [Student] Točno. 583 00:36:53,100 --> 00:36:56,590 [Malan] Aha. Red je važno kada se zovete funkciju. 584 00:36:56,590 --> 00:37:00,050 >> Dakle, ako sam se zovete prirast ovdje s nečim zarez nešto, 585 00:37:00,050 --> 00:37:01,680 postoji izravna mapiranje. 586 00:37:01,680 --> 00:37:05,690 Prvi varijabla, bez obzira na to zove, je napravio kopiju prve svađe oko ovdje. 587 00:37:05,690 --> 00:37:07,760 Oprostite. To ne bi trebalo biti zagrada. 588 00:37:07,760 --> 00:37:11,490 Drugi argument linije se s jednom drugom. Tako bi, da je bitno. U redu. 589 00:37:11,490 --> 00:37:17,020 Oprostite. Uzeo sam dug put kako do njih doći. Ostala pitanja? U redu. 590 00:37:17,020 --> 00:37:20,610 Dakle, neka je vidjeti ako ne možemo slikati sliku o tome što se zapravo događa ovdje 591 00:37:20,610 --> 00:37:23,090 ispod haube, da se tako izrazim. 592 00:37:23,090 --> 00:37:26,640 To je pravokutnik koji bi mogli predstavljati memoriju računala. 593 00:37:26,640 --> 00:37:30,970 Čak i ako nemate pojma koliko memorije radi ili koliko RAM djela, 594 00:37:30,970 --> 00:37:33,940 barem pretpostaviti da imate grozdovima to ovih dana. 595 00:37:33,940 --> 00:37:36,280 Imaš megabajta njega, imaš gigabajta njega, 596 00:37:36,280 --> 00:37:40,870 a znamo iz tjedna 0 da bajt je samo ono što? >> [Student] 8 bita. 597 00:37:40,870 --> 00:37:42,950 8 bita, zar ne? Dakle, osam nula i jedan. 598 00:37:42,950 --> 00:37:45,880 Dakle, ako vaše računalo ima koncert RAM-a, 2 gigs od RAM-a ovih dana, 599 00:37:45,880 --> 00:37:55,030 imate milijardu ili dvije milijarde bajtova memorije ili otprilike 8000000000 ili 16 milijarda bitova 600 00:37:55,030 --> 00:37:56,890 unutar vašeg računala. 601 00:37:56,890 --> 00:38:00,590 Za razliku od malog wooly Willy primjer, to nije magnetske čestice obično više. 602 00:38:00,590 --> 00:38:04,450 Sve - u prijenosnim računalima barem - to je solid state diskova, SSD-ovi, 603 00:38:04,450 --> 00:38:08,580 samo da nemaju pokretnih dijelova. To je sve elektronički. To je sve struja-based. 604 00:38:08,580 --> 00:38:14,060 Dakle, mislite o ovom pravokutnika kao samo predstavlja jedan ili dva gigabajta memorije koje imate. 605 00:38:14,060 --> 00:38:16,020 >> Dakle, to je komad memorije. 606 00:38:16,020 --> 00:38:19,830 Svijet informatike je vrsta odvojen 607 00:38:19,830 --> 00:38:22,950 komadi memorije učiniti različite stvari. 608 00:38:22,950 --> 00:38:27,190 Na primjer, ako je to vaše računalo RAM-a, kako je predloženo od strane pravokutnika tamo, 609 00:38:27,190 --> 00:38:31,130 ispada da po konvenciji, na vrhu vašeg RAM-a, da se tako izrazim, 610 00:38:31,130 --> 00:38:33,660 općenito je ono što se zove tekst segmentu. 611 00:38:33,660 --> 00:38:36,740 Oni su 0s i 1s da ste sastavili. 612 00:38:36,740 --> 00:38:39,020 Dakle, kada smo gledali ispod haube na ono što je a.out, 613 00:38:39,020 --> 00:38:41,980 sve ove 0s i 1s, kada pokrenete program, 614 00:38:41,980 --> 00:38:46,290 one 0s i 1s se učitava s tvrdog diska u nešto što se zove RAM-a, 615 00:38:46,290 --> 00:38:49,320 i u RAM oni stavili na vrhu. 616 00:38:49,320 --> 00:38:52,770 U međuvremenu, imate i druge stvari: inicijalizirati podatke, uninitialize podatke. 617 00:38:52,770 --> 00:38:57,510 Ti dvije swaths memorije pogledajte globalnih varijabli, koje često ne koriste 618 00:38:57,510 --> 00:39:00,760 ali ponekad ako to ne učinite, oni završiti tamo gore, kao dobro. 619 00:39:00,760 --> 00:39:04,260 Zatim tu je neke druge stvari: varijable okruženja, koje nećemo potrošiti puno vremena na, 620 00:39:04,260 --> 00:39:06,860 ali onda dvije važne stvari koje će se vratiti tijekom semestra, 621 00:39:06,860 --> 00:39:08,550 stog i hrpa. 622 00:39:08,550 --> 00:39:12,210 Dakle, većina računala memorije rezerviran kada je pokrenut program 623 00:39:12,210 --> 00:39:15,370 za nešto što se zove snop i nešto što se zove hrpu. 624 00:39:15,370 --> 00:39:18,840 Nećemo govoriti o hrpi danas, ali mi ćemo govoriti o dimnjaka. 625 00:39:18,840 --> 00:39:24,600 Stog je značilo da dočarati vizualni od blagovaonici obrok ladice u Mather House 626 00:39:24,600 --> 00:39:28,110 ili gdje god vam se dogoditi da bude gdje osoblje blagovaonica čiste ih svaki dan, 627 00:39:28,110 --> 00:39:30,180 ih stog gore od poda na gore, 628 00:39:30,180 --> 00:39:34,550 i slično, u sjećanju, tu je ova ideja stavljanja nešto na hrpu, 629 00:39:34,550 --> 00:39:36,860 stavljajući nešto na hrpu, stavljajući nešto na hrpi. 630 00:39:36,860 --> 00:39:38,240 A što mi znači ova? 631 00:39:38,240 --> 00:39:41,860 >> Ajmo povećate samo u donjoj polovici ove slike, na računalu RAM, 632 00:39:41,860 --> 00:39:44,330 predložiti sljedeće. 633 00:39:44,330 --> 00:39:48,170 Ispada da kad pokrenete program kao što je a.out ili Hello - 634 00:39:48,170 --> 00:39:50,100 god program je da ste pismeni - 635 00:39:50,100 --> 00:39:54,020 opet, oni 0s i 1s se učitava s tvrdog diska, što je dugoročno skladištenje, 636 00:39:54,020 --> 00:39:57,230 ostaje tamo, čak i kada ste povucite utikač, učita u RAM. 637 00:39:57,230 --> 00:40:00,610 RAM je brže od tvrdih diskova - to je manji od tvrdih diskova - 638 00:40:00,610 --> 00:40:03,300 ali to je gdje programi živjeti dok god ih izvodi. 639 00:40:03,300 --> 00:40:08,230 Dakle, dvostruko kliknuti program na Mac ili PC, to je učitan s tvrdog diska u RAM. 640 00:40:08,230 --> 00:40:11,520 Čim se to učita u RAM, 0s i 1s ići na putu vrhu, 641 00:40:11,520 --> 00:40:16,610 Takozvani tekst segmentu, ali onda čim se vaš program zapravo počinje prikazivati, 642 00:40:16,610 --> 00:40:21,360 glavna funkcija se zove, a glavni, kao što smo vidjeli, često ima lokalne varijable, 643 00:40:21,360 --> 00:40:24,870 i ima Ints i gudače i znakovi i slično. 644 00:40:24,870 --> 00:40:29,180 Dakle, ako vaš program koji ste napisali ili program koji ste dvostruko su kliknuli 645 00:40:29,180 --> 00:40:32,970 koristiti neke varijable unutar glavnih, 646 00:40:32,970 --> 00:40:37,240 oni završiti na dnu stog memorije, da se tako izrazim. 647 00:40:37,240 --> 00:40:39,410 Konkretnije, što to zapravo znači? 648 00:40:39,410 --> 00:40:48,450 To samo znači da ako idemo na broj bajtova RAM na računalu, 649 00:40:48,450 --> 00:40:55,750 primijetiti da bi to moglo biti byte broj 0, to može biti byte broj 1, 2, 3, 4, 5, 6, 650 00:40:55,750 --> 00:41:01,480 sve do 2 milijarde će biti sve gore na vrhu. 651 00:41:01,480 --> 00:41:05,880 Dakle, drugim riječima, kada govorimo o RAM-a ili memorije u smislu bajtovima, 652 00:41:05,880 --> 00:41:11,500 to samo znači da je netko odlučio što će prebrojiti svaki od tih komade memorije. 653 00:41:11,500 --> 00:41:16,650 Dakle, kada vam je potrebno 32 bita za int ili trebate osam bitova za char, 654 00:41:16,650 --> 00:41:18,840 gdje su završiti u sjećanju? 655 00:41:18,840 --> 00:41:22,350 >> Koncepcijski, oni samo završiti na dnu ove stvari zove stog. 656 00:41:22,350 --> 00:41:25,870 No, ono što je zanimljivo sada kada je glavni poziva funkcija - 657 00:41:25,870 --> 00:41:28,750 Pretpostavljam funkciju pod nazivom Foo, samo proizvoljna ime - 658 00:41:28,750 --> 00:41:32,330 što se događa je glavni je na dnu ovog stog memorije; 659 00:41:32,330 --> 00:41:35,680 foo sada staviti na vrhu glavni u sjećanju. 660 00:41:35,680 --> 00:41:40,990 Dakle, sve lokalne varijable koje foo je završiti neku vrstu konceptualno iznad onih u glavni. 661 00:41:40,990 --> 00:41:47,070 Ako foo zove drugi funkciju zvanu bar one varijable završiti ovdje. 662 00:41:47,070 --> 00:41:50,120 Ako bar zove nešto drugo, ovdje, ovdje, ovdje. 663 00:41:50,120 --> 00:41:53,830 Dakle, ono što je zanimljivo o pokretanju programa je u tome što vi zovete funkcije 664 00:41:53,830 --> 00:41:57,750 i kao one funkcije poziva funkcije kao i one funkcije poziva funkcije, 665 00:41:57,750 --> 00:42:01,470 da podigne ovu hrpu funkcija u memoriji. 666 00:42:01,470 --> 00:42:06,890 I samo jednom funkcija vraća ne počnete dobivanje tog memoriju natrag. 667 00:42:06,890 --> 00:42:10,860 Dakle, jedan od najlakših načina da ponestane memorije računalnog programa 668 00:42:10,860 --> 00:42:14,360 je napisati funkcije koje nikada ne vrate. 669 00:42:14,360 --> 00:42:18,900 Tako na primjer, neka je pokazati koliko s namjerom buggy programa. 670 00:42:18,900 --> 00:42:22,230 Pusti me naprijed i nemojte # include , 671 00:42:22,230 --> 00:42:25,000 int main (void), 672 00:42:25,000 --> 00:42:32,940 i ja ću to učiniti dok (2> 1), koji vjerojatno neće nikada neće promijeniti na nas, 673 00:42:32,940 --> 00:42:37,560 i neka mi sada ići naprijed i učiniti printf. 674 00:42:37,560 --> 00:42:40,700 Zapravo, to će biti manje vizualno zanimljiva. Ajmo to učiniti. 675 00:42:40,700 --> 00:42:50,240 Za int i = 0; ja> 0 - ajmo napraviti takvu pogrešku - i + +. 676 00:42:50,240 --> 00:42:52,720 I nemojmo printf ovdje. Ajmo vježbati ono što sam propovijedao. 677 00:42:52,720 --> 00:43:00,190 Popijmo metodu ovdje, šupljikave zbor, a mi ćemo reći int i, 678 00:43:00,190 --> 00:43:06,830 i onda ću reći printf - ne, ajmo napraviti ovo više zanimljiv. 679 00:43:06,830 --> 00:43:15,790 Ajmo zapravo ne ispisivati ​​ništa at svi. Ajmo to: zbor (ja). 680 00:43:15,790 --> 00:43:20,390 U redu. Dakle, ovo je lud, jer zašto? 681 00:43:20,390 --> 00:43:23,380 Ja izmišljam kao što sam ići jer je program zapravo ne učiniti ništa od interesa. 682 00:43:23,380 --> 00:43:25,320 >> No, to nije cilj. 683 00:43:25,320 --> 00:43:29,630 Cilj je napisati program čiji je glavna funkcija što radi, očito? 684 00:43:30,720 --> 00:43:32,860 Se poziva. I zapravo, ne trebamo petlju. 685 00:43:32,860 --> 00:43:37,200 Ajmo još pojednostaviti to samo kako ne bi izgubili iz vida stvarno temeljnog bug. 686 00:43:37,200 --> 00:43:39,640 Glavni pozivi zbor pjevati neki refren, 687 00:43:39,640 --> 00:43:41,440 onda sam učinio nešto glupo i imao sam refren zborski poziva 688 00:43:41,440 --> 00:43:43,760 jer sam preuzeo netko drugi će to provesti, možda, 689 00:43:43,760 --> 00:43:47,210 a sad to ne ide sastaviti još. Trebam učiniti što? 690 00:43:47,210 --> 00:43:49,970 Trebam prototip, zapamtite. 691 00:43:49,970 --> 00:43:56,110 Dakle, moram imati ovdje void refren (int i); 692 00:43:56,110 --> 00:43:59,210 Pa sad ako odem ovdje dolje - zapravo, ajmo koristiti veći prozor. 693 00:43:59,210 --> 00:44:01,980 Idemo naprijed i napraviti refren. 694 00:44:01,980 --> 00:44:06,490 Idemo naprijed i napraviti refren. 695 00:44:06,490 --> 00:44:08,370 Korištenje neprijavljenog identifikatora i. 696 00:44:08,370 --> 00:44:12,500 Oh, to je glupo. Mi ne trebamo argument. Ajmo to učiniti. 697 00:44:12,500 --> 00:44:16,370 Volio bih da smo počeli na ovaj način. To bi bilo puno lakše program za pisanje. 698 00:44:16,370 --> 00:44:25,590 Tu. Sada idemo do mog prozora terminala, repriza zveka, i ovdje mi ići. 699 00:44:25,590 --> 00:44:28,460 To je bilo jako brzo. 700 00:44:28,460 --> 00:44:31,150 Što se zapravo dogodilo baš, iako? 701 00:44:31,150 --> 00:44:33,730 Pa, sada ću dodati liniju ispisa tako možemo vidjeti. 702 00:44:33,730 --> 00:44:43,490 Dopustite mi da kažem printf ("Ja sam ovdje") - nema varijable. Mi ćemo ga ostaviti kao što je to. 703 00:44:43,490 --> 00:44:47,480 Dopustite mi ponoviti napraviti. Dopustite mi ponoviti refren. 704 00:44:47,480 --> 00:44:57,380 I ... hajde. Imajte ide. 705 00:44:57,380 --> 00:44:59,930 Kao na stranu, zašto je ne srušio još? 706 00:44:59,930 --> 00:45:02,080 Segmentacija kriv dogodilo superbrzo prije. 707 00:45:02,080 --> 00:45:06,570 [Nečujno učenik odgovor] >> Točno. Dakle, potrebno je mnogo vremena za ispis, zar ne? 708 00:45:06,570 --> 00:45:08,610 Potrebno je samo više raditi na računalu je dio. 709 00:45:08,610 --> 00:45:10,620 I to je to: Segmentacija kriv. 710 00:45:10,620 --> 00:45:12,340 >> Dakle primijetiti koliko brzo programi pokrenuti. 711 00:45:12,340 --> 00:45:14,130 Ako ne ispisuje ništa, super brzo. 712 00:45:14,130 --> 00:45:18,770 Ali mi još uvijek imamo ovu segmentacije grešku jer ono što se događa? 713 00:45:18,770 --> 00:45:21,210 Ako mislite o tome vašeg računala memorije rasprostire se, 714 00:45:21,210 --> 00:45:28,740 se to dogodi, biti glavni, ali ovdje ćemo samo nazovite ovaj refren, a nazovimo ovu refren. 715 00:45:28,740 --> 00:45:34,550 I sad, ako ja moje estetiku pravo, ovo je samo htio reći zbor, zbor, zbor, 716 00:45:34,550 --> 00:45:40,550 zbor, zbor, zbor, zbor, oglas nauseum, i na kraju, ono što će se dogoditi? 717 00:45:40,550 --> 00:45:45,630 Ako velika slika, doslovno, je to, što se upravo događa konceptualno? 718 00:45:46,520 --> 00:45:48,630 Stog prekoračenja hrpi. 719 00:45:48,630 --> 00:45:51,940 Ili, još gore, samo prekoračenje sve, uključujući tekst segmentu, 720 00:45:51,940 --> 00:45:54,590 koji je 0s i 1s da predstavljaju svoj program. 721 00:45:54,590 --> 00:45:57,080 Ukratko, to je samo super, super loše. 722 00:45:57,080 --> 00:45:58,830 Vaš program spiralu izvan kontrole. 723 00:45:58,830 --> 00:46:01,220 Vi koristite način više memorije nego što namjerava 724 00:46:01,220 --> 00:46:03,960 sve zbog glupog pogreške u ovom slučaju, 725 00:46:03,960 --> 00:46:08,040 ili u ovom slučaju vrlo namjerno učinio funkcija se zove. 726 00:46:08,040 --> 00:46:09,500 Sada, to nije sve loše. 727 00:46:09,500 --> 00:46:13,800 Funkcije se pozivaju zapravo ima veliku moć kada ga koristite pravilno. 728 00:46:13,800 --> 00:46:15,800 Nisam ga se pravilno koristi ovdje. 729 00:46:15,800 --> 00:46:19,780 Dakle, to nije sve loše, ali je činjenica da sam zapravo nikada prestati sebe zove 730 00:46:19,780 --> 00:46:23,520 je temeljna slabost ovdje ovog programa. 731 00:46:23,520 --> 00:46:26,400 Dakle, gdje ćemo uz sve ovo? Što se zapravo događa? 732 00:46:26,400 --> 00:46:30,340 Kad sam nazvati prirast funkcije kao što smo radili u tim primjerima, 733 00:46:30,340 --> 00:46:33,420 Imam vrijednost kao jedan koji sam proći u. 734 00:46:33,420 --> 00:46:37,570 Ja proći u kopiji broj jedan, tako da sljedeće dogoditi. 735 00:46:37,570 --> 00:46:44,240 Idemo u prirasta primjer, ovaj tip upravo ovdje. 736 00:46:44,240 --> 00:46:46,870 Evo što se zapravo događa. 737 00:46:46,870 --> 00:46:53,400 Kad sam nazvati prirasta i ja proći u x, slikovito, ono što se ovdje događa je to. 738 00:46:53,400 --> 00:46:59,520 >> Ako imam vrijednost jednog pohranjeni ovdje, a ja zapravo nazvati prirasta, 739 00:46:59,520 --> 00:47:04,330 koji se sada zove refren - ipad me bacanje izvan ovdje. 740 00:47:04,330 --> 00:47:09,760 Nazovimo ovu prirasta, a mi ne znamo što je to sljedeća funkcija će biti. 741 00:47:09,760 --> 00:47:14,840 Dakle, ono što se zapravo događa je ovdje negdje u glavni imam komad memorije 742 00:47:14,840 --> 00:47:17,000 da je spremanje broj 1. 743 00:47:17,000 --> 00:47:19,380 Kad sam nazvati prirasta, ja sam koristeći drugi komad memorije, 744 00:47:19,380 --> 00:47:21,230 ali sada imam jedan primjerak. 745 00:47:21,230 --> 00:47:26,660 Kad sam povećajte tu vrijednost, to postaje 2, 746 00:47:26,660 --> 00:47:30,560 ali onda ono što se događa čim prirasta vraća? 747 00:47:30,560 --> 00:47:33,630 Ova memorija samo dobiva vrati na operativnom sustavu, 748 00:47:33,630 --> 00:47:37,450 što znači sve što ste učinili ništa korisno. 749 00:47:37,450 --> 00:47:43,120 1 koji je izvorno bio sadržan u glavnom je još uvijek zapravo postoji. 750 00:47:43,120 --> 00:47:44,890 Dakle, gdje ćemo s tim? 751 00:47:44,890 --> 00:47:49,770 Ispada da je u sjećanju imate ovaj back-to-back slijed bajtova 752 00:47:49,770 --> 00:47:53,050 da možete staviti stvari u, a ispada da smo već vidjeli nešto 753 00:47:53,050 --> 00:47:55,390 koja uključuje stavljanje stvari natrag na leđa natrag na leđa. 754 00:47:55,390 --> 00:47:59,860 Što je niz temelji na tjedan 1 i sada tjedan dva? 755 00:48:00,020 --> 00:48:01,980 To je samo skup znakova. 756 00:48:01,980 --> 00:48:04,310 Tako ispada baš kao što možete staviti brojeve u memoriji, 757 00:48:04,310 --> 00:48:06,990 Slično možete staviti znakove u sjećanju. 758 00:48:06,990 --> 00:48:10,530 A kad ćemo početi stavljanjem znakova u memoriji natrag na natrag na leđa uz leđa, 759 00:48:10,530 --> 00:48:13,620 ispada da koriste najjednostavnije stvari kao za petlje ili while petlja, 760 00:48:13,620 --> 00:48:17,170 možemo ponoviti s lijeva na desno preko znakova u nizu 761 00:48:17,170 --> 00:48:20,600 i početi ih masirati u različite likove uopce - 762 00:48:20,600 --> 00:48:23,370 mogla postati b, b mogao postati c - 763 00:48:23,370 --> 00:48:27,780 tako da u konačnici, možemo uzeti englesku rečenicu koja zapravo ima smisla 764 00:48:27,780 --> 00:48:30,310 i pretvoriti svaki od tih slova jednu po jednu 765 00:48:30,310 --> 00:48:34,400 šetnjom kroz naše memorije računala s lijeva na desno kako bi zapravo šifriranje. 766 00:48:34,400 --> 00:48:35,810 Tako ćemo uzeti našu pet minuta pauze ovdje, 767 00:48:35,810 --> 00:48:40,730 a kad se vratimo, bit ćemo početi ovaj proces remećenje informacije. 768 00:48:42,020 --> 00:48:43,520 >> U redu. 769 00:48:43,520 --> 00:48:48,070 Prije nego što zaronite u nekim kripto i te stvari naziva polja, 770 00:48:48,070 --> 00:48:51,470 neka mi pauza za sva pitanja jer se osjećam kao da sam stvarno vrsta promašeni 771 00:48:51,470 --> 00:48:54,080 neke od tih tema. Tako ćemo popraviti sada, ako možemo. 772 00:48:54,080 --> 00:48:58,700 Mi smo samo razgovarali o povratnih vrijednosti, razgovarali smo o argumentima, 773 00:48:58,700 --> 00:49:03,250 i razgovarali smo o tom pojmu, što ćemo se vratiti u tjednima koji dolaze, 774 00:49:03,250 --> 00:49:08,720 gledanja memoriju kao cijela hrpa ovih naslaganih ladice, da se tako izrazim, 775 00:49:08,720 --> 00:49:12,660 od dna na gore, tako da je svaka ladica da se stavi na stog 776 00:49:12,660 --> 00:49:16,530 predstavlja funkciju koja trenutno se zove. 777 00:49:17,900 --> 00:49:20,260 Ima li pitanja? 778 00:49:20,260 --> 00:49:22,640 Dopustite mi postaviti pitanje ovdje. 779 00:49:22,640 --> 00:49:27,890 Dopustite mi da pojednostaviti ovaj leđa na ono što je bilo prije neke naše ranije Q & A. 780 00:49:27,890 --> 00:49:35,570 Činjenica da je prirast ima otvorenu zagradu, int broj, zatvoren zagradama - 781 00:49:35,570 --> 00:49:39,110 što ne int broj predstavlja? 782 00:49:39,110 --> 00:49:42,790 [Student] argument. >> Argument. Ok. No, ono što je argument? 783 00:49:42,790 --> 00:49:46,370 [Nečujno učenik odgovor] >> Što je to? >> [Student] Nešto što prođete u. 784 00:49:46,370 --> 00:49:49,940 Ok, tako nešto da prođe u. I općenito, to je samo ulaz. 785 00:49:49,940 --> 00:49:52,450 Ako ste pisali funkciju i tu funkciju je svrhu u životu 786 00:49:52,450 --> 00:49:55,770 je učiniti nešto malo drugačije svaki put kada ga koristiti, 787 00:49:55,770 --> 00:50:00,110 onda jedini način da se to dogodi stvarno čini da bi se to osigurati sa ulaza 788 00:50:00,110 --> 00:50:03,510 tako da se može napraviti nešto drugačije s tim input svaki put. 789 00:50:03,510 --> 00:50:06,650 >> Dakle, potrebno je navesti dvije stvari kada funkcija uzima ulaz. 790 00:50:06,650 --> 00:50:09,590 Morate navesti naziv koji želite dati taj ulaz 791 00:50:09,590 --> 00:50:12,700 čisto za svoju korist, tako da se može odnositi na njega 792 00:50:12,700 --> 00:50:16,540 u funkciji da ste sami pišete, kao što sam učinio ovdje u liniji 32. 793 00:50:16,540 --> 00:50:20,800 No, također je potrebno da odredite svoj tip jer je C programski jezik 794 00:50:20,800 --> 00:50:25,940 samo da zahtijeva da ako želite varijablu, morate reći računalu što tip podataka je, 795 00:50:25,940 --> 00:50:30,200 u velikom dijelu, tako da se ne zna koliko je bita izdvojiti za tu varijablu 796 00:50:30,200 --> 00:50:33,020 jer bi to moglo biti 6 - Nažalost, to neće biti šest. 797 00:50:33,020 --> 00:50:37,080 To može biti 16, to može biti 8, to može biti 32, čak i 64, 798 00:50:37,080 --> 00:50:39,130 ali računalo mora znati. 799 00:50:39,130 --> 00:50:43,180 Sada, int na lijevoj strani predstavlja ono što je, za razliku? 800 00:50:46,350 --> 00:50:48,850 [Nečujno učenik odgovor] >> Što je to? >> [Student] Tip funkciji. 801 00:50:48,850 --> 00:50:53,610 Vrsta funkciju i, točnije, tip njegove proizvodnje. Točno. 802 00:50:53,610 --> 00:50:57,380 Dakle, dok je stvar u zagradi predstavlja njegov ulaz, ako ih ima, 803 00:50:57,380 --> 00:50:59,660 stvar s lijeve strane predstavlja svoj izlaz. 804 00:50:59,660 --> 00:51:03,530 I u ovom slučaju, prirast očito vraća int, 805 00:51:03,530 --> 00:51:07,690 i tako int je povratni tip ove funkcije. 806 00:51:07,690 --> 00:51:09,340 Što to znači da se vrate? 807 00:51:09,340 --> 00:51:15,090 Doslovno, koristite ključne povratak i onda ako je ono što se vraćaju 808 00:51:15,090 --> 00:51:18,600 desno od ključne riječi je cijeli broj, 809 00:51:18,600 --> 00:51:21,660 zatim da je doista u skladu s onim što smo obećali. 810 00:51:21,660 --> 00:51:26,410 Vi ne bi mogao učiniti nešto ovako - Zdravo, svijet - jer to je niz. 811 00:51:26,410 --> 00:51:28,860 >> Očito, to nije cijeli broj. 812 00:51:28,860 --> 00:51:33,140 Dakle, u kratko, teret je stvarno na nas, programer, biti specifičan 813 00:51:33,140 --> 00:51:37,770 kao što smo se vraćaju i onda zapravo ide o tome povratka. 814 00:51:37,770 --> 00:51:43,440 Kontekst ovdje sada da vaše računalo 'pamćenje je gigabajt, dva gigabajta - 815 00:51:43,440 --> 00:51:45,920 god - možda je to i više, možda je manje, 816 00:51:45,920 --> 00:51:49,050 ali računalo ga pogleda kao da različite dijelove. 817 00:51:49,050 --> 00:51:51,200 Nešto ide tamo dolje, nešto drugo ide gore, 818 00:51:51,200 --> 00:51:54,290 različite stvari ide u sredini, a danas smo samo početi ispričati priču, 819 00:51:54,290 --> 00:51:56,340 ali vratit ćemo se na ovaj tijekom vremena. 820 00:51:56,340 --> 00:51:59,980 Za sada, samo komad memorije mi stvarno stalo je tekst segment 821 00:51:59,980 --> 00:52:03,360 jer da samo predstavlja 0s i 1s da zveka je outputted. 822 00:52:03,360 --> 00:52:06,050 Dakle, kada ste pokrenuti naredbu na tipkovnici kao a.out 823 00:52:06,050 --> 00:52:09,110 ili dvaput kliknite ikonu na Mac OS ili Windows, 824 00:52:09,110 --> 00:52:11,880 Vaš program se učitava s tvrdog diska u RAM 825 00:52:11,880 --> 00:52:16,330 i to je plopped na vrhu vašeg računala RAM-a, da se tako izrazim. 826 00:52:16,330 --> 00:52:20,450 U međuvremenu, kao i vaš program počinje prikazivati ​​i glavni dobiva zove 827 00:52:20,450 --> 00:52:23,640 u programu što je napisao ili program Microsoft ili Apple je napisao, 828 00:52:23,640 --> 00:52:27,860 bilo koji od njegovih lokalnih varijabli završiti tamo dolje na dnu vašeg računala memorije. 829 00:52:27,860 --> 00:52:33,230 Ali ako glavni pozivi još jedna funkcija koja sama ima varijable ili argumenti, oni završiti iznad nje. 830 00:52:33,230 --> 00:52:36,680 A ako je to funkcija poziva nešto, oni kraj gore iznad njega, iznad njega, iznad njega. 831 00:52:36,680 --> 00:52:41,460 >> I samo jednom funkcija se obavlja izvršenje ne stog ladice, da se tako izrazim, 832 00:52:41,460 --> 00:52:43,240 početi da se niže i niže. 833 00:52:43,240 --> 00:52:48,250 A to je ono što se tada, u malom, objašnjava zašto kada nazovete kocku 834 00:52:48,250 --> 00:52:51,550 ili nazovete prirasta, koju prolazi u kopiju vrijednosti. 835 00:52:51,550 --> 00:52:55,520 A što to znači slikovito je da doslovno pišeš broj 1 836 00:52:55,520 --> 00:53:00,460 u drugom dijelu memorije, promjene koje jedan do dva u slučaju prirasta 837 00:53:00,460 --> 00:53:04,820 ili da se sastoji od 8 u slučaju kocke, a zatim bacanje da pamćenje daleko 838 00:53:04,820 --> 00:53:09,140 čim prirasta ili kocka funkcija vraća. Pitanje. 839 00:53:09,140 --> 00:53:12,900 [Student] Gdje su globalne varijable pohranjuju? 840 00:53:12,900 --> 00:53:18,100 Globalne varijable su pohranjene u ono što se trenutno zove se inicijalizirati podatke ili nepokrenute podataka, 841 00:53:18,100 --> 00:53:21,920 Razlika je u tome, ako imate globalnu varijablu, a vi ga odmah dodijeliti vrijednost 842 00:53:21,920 --> 00:53:24,640 sa znakom jednakosti, to završi na vrhu tamo, 843 00:53:24,640 --> 00:53:29,200 i ako samo reći int x; bez vrijednosti, to završi nešto niži u RAM 844 00:53:29,200 --> 00:53:31,710 jednostavno konvenciji. 845 00:53:31,710 --> 00:53:34,940 Ostala pitanja? U redu. 846 00:53:34,940 --> 00:53:37,340 Dakle, ova slika će se vratiti kao što smo dobili više snažan 847 00:53:37,340 --> 00:53:39,170 s tim što možemo učiniti s računalom, 848 00:53:39,170 --> 00:53:42,720 ali za sada, neka je imaju kratak uvod u kriptografiju, 849 00:53:42,720 --> 00:53:46,080 specifična vrsta kriptografije koja ne riješiti sve svjetske probleme 850 00:53:46,080 --> 00:53:47,720 ali ne rješava neke od njih. 851 00:53:47,720 --> 00:53:51,700 U ovom slučaju ovdje, imamo nešto što se zove tajna-ključ kriptografija. 852 00:53:51,700 --> 00:53:56,410 Tajna-ključ kriptografija, kao što ime sugerira, potječe iz sigurnosti tajnu. 853 00:53:56,410 --> 00:54:00,690 >> Na primjer, ako ste bili u osnovnoj školi i da ste bili prolazi malo slovo tajnu ljubavnu 854 00:54:00,690 --> 00:54:04,850 na dječaka ili djevojčicu ste bili zaljubila, ako ste htjeli da prođe tu poruku kroz publiku, 855 00:54:04,850 --> 00:54:08,380 vjerojatno ne bi napisati takvo znanje engleskog ili što god vaš materinji jezik je. 856 00:54:08,380 --> 00:54:13,340 Umjesto toga, možda ćete ga kodirati ili možda samo im poslati SMS poruku ovih dana. 857 00:54:13,340 --> 00:54:15,460 No, možda zapravo prođe im notu cijelom razredu. 858 00:54:15,460 --> 00:54:18,700 A za to sigurno na takav način da vaši prijatelji i nastavnike 859 00:54:18,700 --> 00:54:22,650 ne znam što ti pišeš, možda ćete doći do prilično jednostavnog algoritma, 860 00:54:22,650 --> 00:54:25,920 Mlada iako bi moglo biti, samo otimati riječi. 861 00:54:25,920 --> 00:54:28,130 Dakle, umjesto pisanja možda pisati b, 862 00:54:28,130 --> 00:54:30,220 umjesto b možda pisati c, 863 00:54:30,220 --> 00:54:32,140 umjesto c možda napisati d, i tako dalje. 864 00:54:32,140 --> 00:54:34,360 Ili ste mogli doći do više sofisticirane prijevoda 865 00:54:34,360 --> 00:54:36,720 slova na različitim slovima. 866 00:54:36,720 --> 00:54:39,740 No, kvaka je dječak ili djevojčica na koju šaljete ovu bilješku 867 00:54:39,740 --> 00:54:45,020 treba nešto znati, a to je ono što, očito? >> [Student] Što šaljete. 868 00:54:45,020 --> 00:54:49,720 Što tvoja tajna je, poput onoga da je mapiranje između-a i B i C je i d'e. 869 00:54:49,720 --> 00:54:54,650 Je li to samo dodao jedan za svaki od slova ići od A do B, B i C? 870 00:54:54,650 --> 00:54:56,670 Je li to složeniji od toga? 871 00:54:56,670 --> 00:55:01,540 >> Dakle, vi i vaš simpatiju trebaju imati ovu tajnu informaciju, 872 00:55:01,540 --> 00:55:03,190 ali tu je vrsta ulova-22 ovdje. 873 00:55:03,190 --> 00:55:06,830 Ako je ovo vrlo prvi put šaljete ovo ljubavno pismo preko klase, 874 00:55:06,830 --> 00:55:10,720 kako je da je dječak ili djevojčica će znati što je tajna, čak je? 875 00:55:10,720 --> 00:55:13,930 Dakle, tajna-ključ kripto ne riješiti sve svjetske probleme, 876 00:55:13,930 --> 00:55:16,320 i tu je zapravo odnos ovdje da ćemo se vratiti prema semestra kraja. 877 00:55:16,320 --> 00:55:25,110 Isto to većina od nas ne zna nekoga da radi, na primjer, na Amazon.com, 878 00:55:25,110 --> 00:55:28,190 i još mnogi od nas vjerojatno su kupili stvari na Amazon.com, 879 00:55:28,190 --> 00:55:31,990 a mi smo učili pretpostaviti da ti e-commerce transakcija sigurna. 880 00:55:31,990 --> 00:55:36,470 URL vjerojatno kaže HTTPS, tu je možda glupo lokota ikona negdje, 881 00:55:36,470 --> 00:55:39,930 postoji neka vrsta kriptografije osiguravanje vaše podatke o kreditnoj kartici 882 00:55:39,930 --> 00:55:42,160 između vas i Amazon.com. 883 00:55:42,160 --> 00:55:45,430 A još ako kriptografija uključuje znajući neke tajne 884 00:55:45,430 --> 00:55:48,620 i još ne znam nikoga na Amazonu, a ja sam sigurno nije dogovoreno bilo kakve tajne 885 00:55:48,620 --> 00:55:52,710 s nekim na Amazonu, kako je moje računalo ili moj preglednik to? 886 00:55:52,710 --> 00:55:55,720 Ispada da je druge vrste kriptografije uopce da riješi taj problem. 887 00:55:55,720 --> 00:55:57,670 No, za danas, mi ćemo se fokusirati na jednostavan jedan 888 00:55:57,670 --> 00:56:00,290 gdje možete dogovoriti unaprijed znati neke tajne 889 00:56:00,290 --> 00:56:03,760 kao jedan ili nekom mapiranje između a i b-a. 890 00:56:03,760 --> 00:56:05,840 A proces kriptografije općenito uključuje ovo. 891 00:56:05,840 --> 00:56:08,620 Imate neki običan tekst, prikazano ovdje na lijevoj strani, 892 00:56:08,620 --> 00:56:12,930 ćete ga pokrenuti kroz neku vrstu algoritma ili postupka za šifriranjem - 893 00:56:12,930 --> 00:56:15,100 možda je to samo postaje b, b postaje c - 894 00:56:15,100 --> 00:56:17,490 a zatim ćete završiti s šifrirana. 895 00:56:17,490 --> 00:56:20,380 U međuvremenu, nakon što svoju simpatiju prima ovu tajnu notu, 896 00:56:20,380 --> 00:56:24,200 on ili ona mora onda dešifrirati to po pravilu unazad da algoritam 897 00:56:24,200 --> 00:56:27,190 kako da biste dobili leđa običan tekst. 898 00:56:27,190 --> 00:56:28,960 Postoje fizičke inkarnacije to. 899 00:56:28,960 --> 00:56:31,680 >> Na primjer, to je mala tajna dekoder prsten, 900 00:56:31,680 --> 00:56:35,110 i to je prsten u smislu da postoje dvije biranja ovdje. 901 00:56:35,110 --> 00:56:38,490 Na vanjskom rubu ove stvari, tu je slova od A do Z, 902 00:56:38,490 --> 00:56:40,340 iako su u slučajnim redoslijedom, 903 00:56:40,340 --> 00:56:42,880 i iznutra, tu je zapravo neki brojevi 904 00:56:42,880 --> 00:56:46,620 tako da s ovim prstenom možete vrsta okrenuti izvana, ali ne unutar 905 00:56:46,620 --> 00:56:49,140 kako bi se postroje brojeve sa slovima. 906 00:56:49,140 --> 00:56:53,020 Iz filma pod nazivom Božićna priča, vidjet ćete da je malo Ralphie 907 00:56:53,020 --> 00:56:58,000 bio toliko nestrpljiv da shvatiti što malo siroče Annie tajna poruka bila s njim 908 00:56:58,000 --> 00:57:02,570 koji je komunicirao, mislim, u obliku brojčanih poruka na kutiji žitarica 909 00:57:02,570 --> 00:57:07,220 i morali ste da se akumuliraju sve malo kartice koje ste dobili u kutiji žitarica, 910 00:57:07,220 --> 00:57:09,770 imali ste ih poslati u, morali ste se vratiti tajni dekodera prsten 911 00:57:09,770 --> 00:57:13,910 tako da napokon mogu shvatiti što je mapiranje između slova i brojki 912 00:57:13,910 --> 00:57:15,550 ili slova i slova. 913 00:57:15,550 --> 00:57:19,520 Kako u računalu možemo ići o primjeni ili predstavljaju stvari kao što je ovaj? 914 00:57:19,520 --> 00:57:22,560 Trebamo način izražavanja sebe malo više fleksibilno 915 00:57:22,560 --> 00:57:25,080 nego naši varijable dosad su dozvoljeni. 916 00:57:25,080 --> 00:57:29,000 Mi smo imali Ints, imali smo slova, imali smo pliva i dubl i nekoliko drugih, 917 00:57:29,000 --> 00:57:34,200 ali oni su pojedini komadi memorije koja stvarno ne dozvoljavaju nam da izraziti stvari 918 00:57:34,200 --> 00:57:36,440 kao riječi i rečenica i fraza. 919 00:57:36,440 --> 00:57:38,630 Doista, mi smo pozvani takve stvari konce, 920 00:57:38,630 --> 00:57:42,660 ali smo obećanje da je to zapravo samo pojednostavljenje u CS50 knjižnici 921 00:57:42,660 --> 00:57:45,540 da smo s namjerom da guliti natrag. 922 00:57:45,540 --> 00:57:47,500 I tako krenimo učiniti da se ovdje. 923 00:57:47,500 --> 00:57:49,840 Pusti me naprijed i otvoriti datoteku - 924 00:57:49,840 --> 00:57:54,100 sve ove datoteke dostupni su, kao i obično, on-line - tzv array.c 925 00:57:54,100 --> 00:57:58,960 riješiti problem nevezano za gudače, ali da daje sliku ovdje 926 00:57:58,960 --> 00:58:01,520 kako bismo mogli koristiti nešto što se zove polje. 927 00:58:01,520 --> 00:58:04,050 >> Niz je tip podataka. 928 00:58:04,050 --> 00:58:10,730 To je tip varijable vrsta koja ima više manjih vrsta podataka u njoj 929 00:58:10,730 --> 00:58:12,680 natrag na leđa natrag na leđa. 930 00:58:12,680 --> 00:58:16,980 Tako na primjer, ako smo htjeli napisati mali program koji vam daje svoj komentar prosjek 931 00:58:16,980 --> 00:58:19,780 za tečaj kao 50 koji ima dva kvizove, 932 00:58:19,780 --> 00:58:23,450 da bi se vrlo lako napisati ovaj program koji se temelji i na neke od prošlotjednog materijala 933 00:58:23,450 --> 00:58:28,830 pomoću GetInt i nekoliko varijabli: int quiz1, int quiz2. 934 00:58:28,830 --> 00:58:30,550 I to je prilično jednostavan. 935 00:58:30,550 --> 00:58:33,500 To je možda 10, 20 linija koda max provesti program 936 00:58:33,500 --> 00:58:38,940 da pita korisnika za dva kviz rezultate i zatim izračunava njihov prosjek 937 00:58:38,940 --> 00:58:42,020 dodajući ih zajedno, dijeljenjem dva, a zatim ispisuje rezultate. 938 00:58:42,020 --> 00:58:46,400 Vjerojatno smo mogli učiniti da prilično lako sada nakon nekog broja minuta. 939 00:58:46,400 --> 00:58:49,450 No, problem je u tome da pretpostavimo da je 50 imala 3 ili 4 kvizova. 940 00:58:49,450 --> 00:58:52,830 Pretpostavimo da ste htjeli koristiti isti program za klasu koja je imala tjedno kvizova. 941 00:58:52,830 --> 00:58:55,100 Razmislite o razredu koji je tjednik kvizovi. 942 00:58:55,100 --> 00:58:58,840 Ako je 16 ili tako tjedana u semestru, sada imate 16 varijabli: 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 Čim počnete vidjeti ovu redundantnost, to kopiranje i lijepljenje kôda, 945 00:59:06,870 --> 00:59:09,810 to bi trebalo početi da želite tamo bili bolji način. 946 00:59:09,810 --> 00:59:13,610 I hvala bogu, jer matrica je. Tako ćemo to učiniti. 947 00:59:13,610 --> 00:59:16,700 Prvo, neka mi predstaviti vrlo jednostavnu stvar da nismo ste koristili do sada, 948 00:59:16,700 --> 00:59:18,820 ali vidjet ćete ga povremeno u kodu. 949 00:59:18,820 --> 00:59:21,270 >> To je ono što se općenito zove konstanta. 950 00:59:21,270 --> 00:59:24,410 Dakle, to je konstanta u smislu da ta vrijednost ne mijenja. 951 00:59:24,410 --> 00:59:26,450 Ljudska konvencija pri izradi konstanta 952 00:59:26,450 --> 00:59:30,420 je koristiti sva velika slova samo tako da se stvarno ističe u svom kodu, 953 00:59:30,420 --> 00:59:34,270 i posebna ključna riječ koju koriste u C # define. 954 00:59:34,270 --> 00:59:39,970 Dakle, možemo reći # define, zatim razmak, a zatim riječ koju želite koristiti za konstantu imena 955 00:59:39,970 --> 00:59:41,730 a zatim se za vrijednost konstante. 956 00:59:41,730 --> 00:59:44,710 Obavijest to je razlikuje od dodjele nešto u varijablu. 957 00:59:44,710 --> 00:59:46,430 Nema znaka jednakosti, nema zarez. 958 00:59:46,430 --> 00:59:49,140 To je ono što je općenito poznat kao preprocesor direktive, 959 00:59:49,140 --> 00:59:50,840 ali više na tom drugom vremenu. 960 00:59:50,840 --> 00:59:56,350 Za sada, to stvara nepromjenjivu vrijednost zove KVIZOVI 961 00:59:56,350 --> 00:59:58,290 čiji je stvarni numerička vrijednost je 2. 962 00:59:58,290 --> 01:00:02,180 Pa gdje ste vidjeli kvizovi, kvizovi, kvizovi tijekom ove datoteke, 963 01:00:02,180 --> 01:00:04,230 to je samo broj 2. 964 01:00:04,230 --> 01:00:06,550 Ako gledam glavni sada, hajdemo vidjeti kako se to radi. 965 01:00:06,550 --> 01:00:09,770 Prvo to izgleda malo zagonetan, ali to je sve stvari iz tjedna 1. 966 01:00:09,770 --> 01:00:12,210 Pitajte korisnika za ocjenama. Kako ćemo to učiniti? 967 01:00:12,210 --> 01:00:17,350 U skladu 22 - ovo je stvarno sočan dio - Ja proglasiti plovak 968 01:00:17,350 --> 01:00:23,240 ali ne samo jedan plovak. Ja sam izjavljuje, nego niz plutajući-point vrijednosti. 969 01:00:23,240 --> 01:00:27,700 To varijabla će biti pozvani razreda, kao podrazumijevana ovdje, 970 01:00:27,700 --> 01:00:31,420 ali samo dio nove sintakse onda su ti četvornih zagrade. 971 01:00:31,420 --> 01:00:37,280 Činjenica da sam rekao plutaju razreda, a zatim otvoriti konzole i zatim broj - 972 01:00:37,280 --> 01:00:40,980 primijetiti ako je to konstanta je to baš kao što smo to učinili - 973 01:00:40,980 --> 01:00:46,840 to znači, "Hej računalo, daj mi dvije pliva i ajmo kolektivno nazivaju ih razreda." 974 01:00:46,840 --> 01:00:51,780 >> To je u suprotnosti s puno više zamoran proces ovako: float Grade1; 975 01:00:51,780 --> 01:00:54,580 plutaju grade2, i tako dalje. 976 01:00:54,580 --> 01:00:58,310 Dakle, niz nam omogućuje da provedbu tu ideju, ali mnogo manje messily, 977 01:00:58,310 --> 01:01:04,560 na takav način da možemo napisati jedan redak koda umjesto, recimo, 16 za 16-tjednu semestra. 978 01:01:04,560 --> 01:01:09,060 Nisam želio da teško kod dvije, jer ako mislite o tome sada logično, 979 01:01:09,060 --> 01:01:12,560 Pretpostavljam da iduće godine CS50 promjene 3 kvizovi umjesto 980 01:01:12,560 --> 01:01:15,010 i imala sam broj dva ovdje, imao sam broj dva ovdje, 981 01:01:15,010 --> 01:01:17,210 Imao sam broj dva ovdje, broj 2 ovdje. 982 01:01:17,210 --> 01:01:19,890 To postaje vrlo zamorno i vrlo lako zeznuti 983 01:01:19,890 --> 01:01:26,550 i da slučajno promijeniti jednog vrijednost 3 i propustiti neke druge vrijednosti dva. 984 01:01:26,550 --> 01:01:30,660 Dakle, ja ću umjesto apstraktne to daleko i koristiti ovu konstantu koja, 985 01:01:30,660 --> 01:01:32,520 kao što mu ime sugerira, nikada ne mijenja. 986 01:01:32,520 --> 01:01:35,870 A sada, bez obzira da li imamo različite kvizove ovu godinu ili sljedeću, 987 01:01:35,870 --> 01:01:39,380 Samo moram ga promijeniti na jednom mjestu ovdje na vrhu. 988 01:01:39,380 --> 01:01:41,230 Dakle, to je sve što je konstanta. 989 01:01:41,230 --> 01:01:47,100 U međuvremenu, novi konceptualni značajka je da je niz. 990 01:01:47,100 --> 01:01:55,030 Dakle uglatih zagrada mi dati toliko pliva i omogućuje mi da kolektivno zovemo ih razreda ovdje. 991 01:01:55,030 --> 01:01:56,720 Dakle, sada ćemo vidjeti što ću učiniti. 992 01:01:56,720 --> 01:01:59,220 Ovdje u skladu 24 je početak za petlju. 993 01:01:59,220 --> 01:02:03,380 >> Ovo je stvarno ništa fancy. To je samo pomoću KVIZOVI umjesto tvrdog kodiranom broju. 994 01:02:03,380 --> 01:02:06,740 Ali nema ništa intelektualno drukčiji postoji od prošlog tjedna. 995 01:02:06,740 --> 01:02:11,650 Ovo je samo printf, pa printf ("Kviz #% d od% d:") 996 01:02:11,650 --> 01:02:16,670 jer ja samo želim isprintati daj mi kviz broj 1 u 2, a zatim 2 od 2. 997 01:02:16,670 --> 01:02:18,480 Dakle, ovo je čisto estetska stvar. 998 01:02:18,480 --> 01:02:21,000 No, najzanimljiviji dio je sada u redu 27. 999 01:02:21,000 --> 01:02:27,840 Kako bi se popunila u jednom od dva rezerviranih s pomičnim zarezom, 1000 01:02:27,840 --> 01:02:29,640 opet koristiti uglate zagrade. 1001 01:02:29,640 --> 01:02:35,170 U ovom slučaju, ja sam pomoću jer to za petlje je započeo s ja izjednačavanje što vrijednost, očito? 1002 01:02:35,170 --> 01:02:36,670 [Student] 0. >> [Malan] 0. 1003 01:02:36,670 --> 01:02:40,990 Dakle, na prvoj iteraciji ove petlje, to je kao da sam ovo napisao u kodu, 1004 01:02:40,990 --> 01:02:46,310 ali na drugoj iteraciji ove petlje, to je kao da sam ovo napisao u mom kodu. 1005 01:02:46,310 --> 01:02:49,970 No, činjenica da sam koristeći varijablu je savršen, jer, kao što ime sugerira, 1006 01:02:49,970 --> 01:02:52,600 to je različite svoju vrijednost na svakoj iteraciji 1007 01:02:52,600 --> 01:02:55,900 pa sam popunjavanje tom obilju jedno mjesto na vrijeme. 1008 01:02:55,900 --> 01:02:57,380 Što to polje izgleda? 1009 01:02:57,380 --> 01:03:01,570 Razlog zbog kojeg sam nacrtao super jednostavan pravokutnik na zaslonu ovdje prije bio iz tog razloga. 1010 01:03:01,570 --> 01:03:05,590 Niz je samo komad memorije slijedi drugi komad memorije 1011 01:03:05,590 --> 01:03:08,570 slijedi drugi komad memorije i tako dalje. 1012 01:03:08,570 --> 01:03:13,120 Dakle, ako moj polje je veličine 2 u ovom slučaju ovdje, sve bih raditi 1013 01:03:13,120 --> 01:03:20,200 upisivanjem u mojim kviz rezultate ovdje sviđa - Dobio sam 100 na ovom jednom, a onda sam dobio 99 na ovom jednom - 1014 01:03:20,200 --> 01:03:24,970 onda ova memorija možda čak i ne mogu koristiti jer sam samo pitao računalo 1015 01:03:24,970 --> 01:03:26,840 za niz veličine 2. 1016 01:03:26,840 --> 01:03:28,600 Ti kvadrati su još uvijek tamo, zar ne? 1017 01:03:28,600 --> 01:03:32,670 Vi još uvijek imate dva gigabajta RAM-a, čak i ako samo pitate za dva kola. 1018 01:03:32,670 --> 01:03:36,840 Dakle, ideja iza polja je da računalo traje samo komad memorije 1019 01:03:36,840 --> 01:03:41,340 a zatim razdijeliti manjih komada natrag na leđa natrag na leđa. 1020 01:03:41,340 --> 01:03:43,310 I tako to je sve niz je. 1021 01:03:43,310 --> 01:03:47,350 >> To je granični komad memorije unutar kojih možete staviti stvari. 1022 01:03:47,350 --> 01:03:50,700 To se događa onda napraviti samo neki dosadan aritmetiku. 1023 01:03:50,700 --> 01:03:54,640 Ako sam dođite ovdje, ovo je mjesto gdje sam tada ponoviti preko polja. 1024 01:03:54,640 --> 01:03:58,020 Ja se s zbroja svih vrijednosti u polju, 1025 01:03:58,020 --> 01:04:02,470 i onda sam koristiti okrugli funkciju ovdje zapravo zbroj podijeljen kvizovima. 1026 01:04:02,470 --> 01:04:06,320 No, dopustite mi mahati moje ruke na to kao svojevrsno dovoljno aritmetike za sada. 1027 01:04:06,320 --> 01:04:08,370 No, sve što radi za mene konačnici je računanje prosjeka. 1028 01:04:08,370 --> 01:04:13,580 Tako je prvi kviz plus drugi kviz podijeljena dva, a zatim ga ispisuje kao int. 1029 01:04:13,580 --> 01:04:17,280 Ali neka je sada prijelaz na drugi primjer zove string1, 1030 01:04:17,280 --> 01:04:20,700 koji oslikava sličnu sliku, ali pomoću žice. 1031 01:04:20,700 --> 01:04:23,940 Pusti me naprijed i pojednostaviti to samo na trenutak. 1032 01:04:23,940 --> 01:04:27,090 Oprosti uvlačenje za sada. 1033 01:04:27,090 --> 01:04:30,870 Obavijest u skladu 19. ovoga primjer, ja dobiti niz od korisnika. 1034 01:04:30,870 --> 01:04:34,640 No, ono što sam primijetio pored radim u redovima 22 naprijed. 1035 01:04:34,640 --> 01:04:41,250 Ja sam zapravo Ponavljanje iz i do - i to je novi trik - strlen, dužina niza. 1036 01:04:41,250 --> 01:04:44,880 To je funkcija koja dolazi s C da ako prođe ga niz, 1037 01:04:44,880 --> 01:04:47,730 to vam govori koliko su likovi u tom nizu. To je sve. 1038 01:04:47,730 --> 01:04:51,550 A činjenica da je strlen umjesto niza duljine je samo zato što je više jezgrovit. 1039 01:04:51,550 --> 01:04:55,100 Prije trideset godina, ljudi volio pisati stvari kao jezgrovito je to moguće, 1040 01:04:55,100 --> 01:04:57,630 pa smo je zadržao tu konvenciju ovdje. 1041 01:04:57,630 --> 01:05:00,660 i + + samo znači da sam povećavati u svakoj iteraciji. 1042 01:05:00,660 --> 01:05:02,990 I sada primijetiti, što je jako zanimljivo. 1043 01:05:02,990 --> 01:05:09,180 U skladu 24, kažem, "Računalo, daj mi znak, 8 bita, i to nazvati c." 1044 01:05:09,180 --> 01:05:12,630 No, ono što je ovaj na desnoj strani govori? 1045 01:05:13,490 --> 01:05:16,530 U engleskom jeziku, što znači da predstavljaju? 1046 01:05:16,530 --> 01:05:18,730 [Student] Prvi znak u polju. 1047 01:05:18,730 --> 01:05:20,790 Točno. Daj mi prvi znak u nizu. 1048 01:05:20,790 --> 01:05:24,090 Ili, općenito, daj mi ith znak u polju. 1049 01:05:24,090 --> 01:05:26,100 I shvatiti da je važno da sada kao računalnih znanstvenika, 1050 01:05:26,100 --> 01:05:27,890 mi zapravo računajući od 0. 1051 01:05:27,890 --> 01:05:29,720 >> Vi nemate diskrecije sada početi raditi ovo. 1052 01:05:29,720 --> 01:05:34,160 Sada imate da se ponašaju u skladu s računalom očekivanja i brojati od 0 1053 01:05:34,160 --> 01:05:38,180 jer [0] će biti prvi znak u nizu, 1054 01:05:38,180 --> 01:05:42,150 [1] će biti drugi, [2] će biti treći, i tako dalje. 1055 01:05:42,150 --> 01:05:49,720 Dakle, ovaj program, ako sam ga sastaviti, to je opet string1, tako da bi string1, 1056 01:05:49,720 --> 01:05:54,670 i sada sam pokrenuti string1 u mom prozor terminala. 1057 01:05:54,670 --> 01:05:58,330 To je čekao ulaz, pa ću upisati u Davidu, Enter 1058 01:05:58,330 --> 01:06:02,540 a sada ispisuje Davidu sve na različitim linijama, jer obavijest što radim. 1059 01:06:02,540 --> 01:06:05,820 Ja sam ispis jednog znaka na vrijeme. 1060 01:06:05,820 --> 01:06:10,100 Nećemo ulaziti u detalje i danas o tome, ali sam izbrisao trenutak prije ove provjere ovdje. 1061 01:06:10,100 --> 01:06:15,480 Ispada da ako korisnik ispravno, suparnički, ili samo zbunjeni, 1062 01:06:15,480 --> 01:06:20,210 zapravo možete uspjeti dati niz neke dužine. 1063 01:06:20,210 --> 01:06:22,860 Ako pogodak pogrešnu tipku na tipkovnici, možda ne daju niz na sve, 1064 01:06:22,860 --> 01:06:26,950 ili ako ste zlonamjerni, možete pokušati zalijepiti u gigabajt vrijedi za esej 1065 01:06:26,950 --> 01:06:29,290 ispuniti ovaj niz, a ako računalo ponestane memorije, 1066 01:06:29,290 --> 01:06:32,710 Ispada da ćemo dobiti natrag ovu posebnu vrijednost zove NULL. 1067 01:06:32,710 --> 01:06:35,580 Dakle, za sada, samo znam da je ovo posebna vrijednost zove NULL 1068 01:06:35,580 --> 01:06:39,580 koji će nam omogućiti da provjerite kada smo iz memorije, između ostalog. 1069 01:06:39,580 --> 01:06:45,630 Ali, ako sam otvoriti sada string2, primijetit jedan razliku ovdje. 1070 01:06:45,630 --> 01:06:48,210 Obavijest jedna razlika ovdje s string2. 1071 01:06:48,210 --> 01:06:51,340 S string2, to za petlje je malo drugačija. 1072 01:06:51,340 --> 01:06:55,010 >> Dopustite mi izbrisati ugašenih, tako da možemo govoriti o onima drugi put. 1073 01:06:55,010 --> 01:06:57,800 Što je drugačije u for petlji ovaj put? 1074 01:06:59,620 --> 01:07:01,670 Ja mogu ići natrag u prethodnom primjeru. 1075 01:07:01,670 --> 01:07:08,580 Tako da je verzija 2, ovo je verzija 1. 1, 2. 1076 01:07:08,580 --> 01:07:11,980 1, 2. 1077 01:07:13,520 --> 01:07:16,660 Strlen poziv je gdje? 1078 01:07:16,660 --> 01:07:18,860 To je u prvom dijelu za petlju. 1079 01:07:18,860 --> 01:07:21,830 Bilo misli o tome zašto radim ovo? Da. 1080 01:07:21,830 --> 01:07:24,560 [Student] Pa ne zovu funkcija svaki put. 1081 01:07:24,560 --> 01:07:26,440 [Malan] Dakle, mi ne poziva funkcija svaki put. Točno. 1082 01:07:26,440 --> 01:07:28,300 Podsjetimo iz petlje za koje su oni super jednostavna 1083 01:07:28,300 --> 01:07:31,770 nakon što vrsta shvatiti da je to inicijalizacije, stanje i ažuriranje. 1084 01:07:31,770 --> 01:07:34,750 Problem je u tome što uvjet događa na svakom iteracija petlje. 1085 01:07:34,750 --> 01:07:40,010 I tako u ovom primjeru ovdje, ono što je loše o činjenici da je ovo moje stanje? 1086 01:07:40,010 --> 01:07:41,830 [Student] Ti si pozivom strlen. 1087 01:07:41,830 --> 01:07:44,340 [Malan] Vi zovete strlen opet i opet i opet. 1088 01:07:44,340 --> 01:07:47,410 Ali jednom sam upisali u Davida, duljina tog niza je 5, 1089 01:07:47,410 --> 01:07:49,650 i to se neće promijeniti na svakom iteracija petlje 1090 01:07:49,650 --> 01:07:51,670 jer je string još D-a-v-i-d. 1091 01:07:51,670 --> 01:07:55,320 Dakle, ovo je naznaka na ono što će postati sve važniji ideja 1092 01:07:55,320 --> 01:08:00,410 poznat kao dizajna odluke gdje jednostavno ne bi računalo učiniti nepotreban posao. 1093 01:08:00,410 --> 01:08:03,920 >> Baš kao doušnik pregled pset2, pset2 u standardnom izdanju 1094 01:08:03,920 --> 01:08:07,030 će vam izazov da se zapravo provesti neki broj šifre, 1095 01:08:07,030 --> 01:08:10,410 neki broj algoritme šifriranja, tako da možete i šifriranje 1096 01:08:10,410 --> 01:08:13,840 i dekriptirati tajne poruke puno poput jednog Ralphie postoji dekodirati. 1097 01:08:13,840 --> 01:08:16,810 U hakerske izdanju pset2, idemo ići malo dalje. 1098 01:08:16,810 --> 01:08:19,649 Mi ćemo predati vam datoteku iz stvarnog računalnog sustava 1099 01:08:19,649 --> 01:08:23,479 koji sadrži hrpu korisničkih imena i lozinki stvarnih šifrirane, 1100 01:08:23,479 --> 01:08:26,939 i izazov za hakerske izdanje će biti ispucati one lozinke 1101 01:08:26,939 --> 01:08:33,200 i shvatiti što kriptografije ili ono što je tajna koristi za generiranje zapravo one lozinke. 1102 01:08:33,200 --> 01:08:36,109 A mi ćemo to učiniti pomoću novu značajku ovdje o C 1103 01:08:36,109 --> 01:08:40,630 da ću vam dati samo demo poznat kao naredbenog retka argumente. 1104 01:08:40,630 --> 01:08:44,229 Ispada, kao što neki od vas možda vidio u dijelu ili u udžbenicima, 1105 01:08:44,229 --> 01:08:48,260 Glavna ne mora uvijek biti nevažeće u zagradama. 1106 01:08:48,260 --> 01:08:52,430 Ispada da glavna također može pisati ovako, s dva argumenta, 1107 01:08:52,430 --> 01:08:56,870 argc i argv, gdje argc je broj riječi 1108 01:08:56,870 --> 01:09:00,020 da upišete nakon što je program imena na naredbenog retka 1109 01:09:00,020 --> 01:09:03,420 i argv je stvarni riječi. 1110 01:09:03,420 --> 01:09:07,540 I kao uglatim zagradama tamo sugeriraju, argv je očito polje. 1111 01:09:07,540 --> 01:09:12,210 To će biti niz nakon niza nakon niza u sjećanju. 1112 01:09:12,210 --> 01:09:16,010 >> Dakle, ono što ćemo biti u mogućnosti to učiniti počevši s pset 2 je nešto poput ovoga. 1113 01:09:16,010 --> 01:09:21,350 Ako sam napraviti argv1, što je primjer vratit ćemo se u ponedjeljak, i pokrenuti ga, 1114 01:09:21,350 --> 01:09:23,370 primijetiti da to ne čini ništa učiniti još. 1115 01:09:23,370 --> 01:09:25,490 To samo ispisuje svoje ime. 1116 01:09:25,490 --> 01:09:31,479 Ali ako kažem zbogom klase, obavijest da je ovaj program očito ponovi 1117 01:09:31,479 --> 01:09:35,479 tijekom svake od riječi koje su upisali u redak. 1118 01:09:35,479 --> 01:09:41,630 A način na koji ćemo dobiti pristup riječi koje korisnik unese u redak 1119 01:09:41,630 --> 01:09:49,160 je promjenom glavni počinju ovog vikenda od int main (void) int main (argc, argv) 1120 01:09:49,160 --> 01:09:52,050 i tako će biti rođen naredbenog retka argumente. 1121 01:09:52,050 --> 01:09:57,100 I jednom kada se stvarno sofisticiran na to, vi ćete biti u mogućnosti pisati stvarno trippy programe 1122 01:09:57,100 --> 01:09:59,610 kao što je ovaj ovdje, koji ide iznad i izvan 1123 01:09:59,610 --> 01:10:03,940 neke od funkcionalnosti koje smo učinili do sada, ali sve vrlo moćan. 1124 01:10:03,940 --> 01:10:08,950 >> Dakle, ostavit ćemo to s tim na ekranu, a mi ćemo vas vidjeti u ponedjeljak. 1125 01:10:17,570 --> 01:10:20,000 >> [CS50.TV]