[Powered by Google Translate] DAVID J. Malan: Dobre. To je CS50, a to je koniec týždňa dva. Ak očakávate, že hlad po tejto dobe zajtra, viem, že s tým budeme zvolať ako malé skupiny zajtra, vo štvrtok, 13:15. Tam je to URL tu, ak chcete RSVP. Priestor je obmedzený, preto prosím ospravedlňte, ak bol formulár vyplnený až v čase, keď vyplniť to. Ďalšie URL hoci to by mohlo byť zaujímavé je to. Takže len asi mesiac času, kurz sa bude k dispozícii všetky všeobecnejšie cez EDX, cez ktoré ľudia na internete budú možnosť sledovať spolu, angažovať sa v priebehu pomerne aktívne, v skutočnosti. Budú používať CS50 Appliance a CS50 diskutovať a väčšinu rôzne softvérové ​​nástroje, ktoré sme už používali tento semester. A jednou z iniciatív by sme chceli, aby sa na ako experiment v tomto roku je vidieť, koľko obsahu môžeme preložiť do iných hovorený a písané jazyky. Takže ak by ste mohli mať záujem o účasť v tomto projekte, podľa ktorého budeme poskytovať anglické prepisy a titulky pre kurz je prednášky a šortky a semináre a profily a podobne - ak hovoríte plynulo alebo písať plynule nejaký iný jazyk, by sa radi vtiahnuť vás do tohto projektu, kedy budete mať na jednom alebo viacerých Videá, ich prevedenie do jazyka poznáte celkom dobre. Ak chcete dať vám pocit rozhranie, tam je to web-based užívateľské rozhranie že budeme používať, že vytvorí v podstate užívateľské rozhranie, ako je tento. Toto bolo mi učil niektoré Halloween pred. A na pravej strane tam v čiernom vedľa týchto časových pečiatok, uvidíte rôzne veci, ktoré vyšli z mojich úst, že deň. A potom pod ním, budete môcť previesť do nejakého iného jazyka. Presne to, čo je mapovanie medzi, v tomto prípade, anglický a, povedzme, španielsky. Takže je to vlastne veľmi užívateľsky príjemný nástroj. Môžete pretáčať dopredu veľmi rýchlo pomocou klávesových skratiek. Takže ak by ste chceli zúčastniť tohto experimentu a mať vaše slová vidieť a čítať potenciálne tisíce ľudí tam, prosím, čo majú pocit, možnosť zúčastniť. Teraz jedno slovo o mačiatko od pondelka, inak sme poslali príliš strašidelné správy. Si uvedomiť, že pracovný čas navrhnúť a ako sekcia naznačujú, Konštrukcia predmetu je veľmi veľa sa študenti spolupracujú a hovorí k práci problémových súborov a problémy spoločne. A naozaj linka práve prichádza do, opäť, práca, ktorú nakoniec by mal predložiť by mal byť váš vlastný. A tak je to, úplne úprimne - v úradných hodinách, je to úplne normálne - je to úplne očakávať, dokonca - na chatovanie s niektorými priatelia vedľa vás. Ak on alebo ona sa stretáva s nejakým témou, a ty si ako, oh, hlboko mi, aby som vám pohľad niektorých riadok kódu, ktorý som napísal. To je v poriadku. To sa stáva. A to je veľmi priaznivé, myslím, s procesom učenia. Ak line, opäť dostane prešiel je, keď hlava je trochu naklonil nad tu príliš veľa sekúnd alebo minút pre ktoré naozaj majú len bol odblokovanie príležitosť pre svojho priateľa. A iste, keď sa veci vymieňajú prostredníctvom e-mailu a Dropbox a ako, aj tu je rad. Takže v každom prípade, cítiť pohodlne a cítiť povzbudení k chatovať s priateľmi a spolužiaci o psets a ďalšie. A len uvedomiť, že to, čo si nakoniec že by mali byť naozaj produkt vašej tvorby a nie niekto iný. Takže v rovnakom štýle plyšové stvorenia, môžete viete o tom chlapovi tu. Tak toto je desivo gýčovité film z rokov. Každý, kto sem videl Spaceballs? Dobrá. Tak dobré číslo tu. Tak toto je naša úžasne akademický spôsob zavádzania dnes nakoniec pojem kryptografie. A tak jeden z problémov domény špecifické pre PSet 2, ktorá príde z neskorej zajtra večer, je ponoriť sa do sveta kryptografie, ktorá je umenie šifrovanie alebo kódovanie informácií. A to nakoniec týka svete bezpečnosti. Teraz zabezpečenia pre väčšinu nás prichádza v podobe pomerne svetských mechanizmov. Každý z nás má používateľské mená a heslá. A každý z nás má veľmi zlé používateľské mená a heslá, s najväčšou pravdepodobnosťou. Ak je heslo rovnaké na niekoľkých webových stránkach, že to asi nie je najlepší nápad, ako budeme diskutovať na semester konci. Ak heslo je napísané na lepiacej poznámku - nie je vtip - na vašom monitor, to tiež nemusí byť nutne najlepší dizajn, ale celkom obyčajný jav. A ak si nie ste s použitím kryptografie na šifrovanie hesiel, ktoré sú obzvlášť zraniteľné. Takže ak si myslíte, že ste bol výborný múdra majúci skrytú Word dokumentu niekde na pevnom disku, ktorý má všetky vaše heslá, ale je to v priečinku, ktorá nikto to bude vyzerať v, že tiež nie je moc bezpečný mechanizmus. A tak to, čo Pset 2 sa predstaví, je to umenie kryptografie a zakódovanie informácie, takže veci ako heslá sú všetky bezpečnejšie. Tak, aby motivoval tento veľmi reálne problém s veľmi non-real-world scenár, dovoľte mi, aby som vám predstavil jednu z našich obľúbených klipov sem z toho film, Spaceballs. [PREHRÁVANIE] -Prilba, môžete zloduch, čo sa deje? Čo robíte s mojou dcérou? -Dovoľte, aby som vám predstavil brilantný mladý plastického chirurga, Dr Philip Schlotkin, najväčší nosa muž v celej vesmír a Beverly Hills. -Vaše Výsosti. -Nose práce? Nerozumiem. Už mala na nose. Bolo to sladké 16 prítomná. -Nie, to nie je to, čo si myslíte. Je to oveľa, oveľa horšie. Ak mi nedáš kombinácii s tienením ovzdušia, bude Dr Schlotkin dať svoju dcéru späť svoj starý nos. -Nie! Kde si to vzal? -Dobre. Poviem. Poviem. -Nie, ocko, no. Nesmiete. -Ty si pravdu, má drahá. Bude sa mi cnieť si nový nos. Ale ja vám nepoviem im kombinácie bez ohľadu na to, čo. -Veľmi dobre. Dr Schlotkin, urobiť si najhoršie. -Rado sa stalo. -Nie! Počkať, počkať. Poviem. Poviem. -Vedel som, že to bude fungovať. Dobre, daj mi to. -Kombinácia je jedna. -One. -One. -Two. -Two. -Two. -Tri -Tri. -Tri. -Four. -Four. -Four. -Five -Five. -Five. -Takže kombinácia je jeden, dva, tri, štyri, päť. To je nejblbější kombinácia, akú som kedy v živote počul. To je ten druh vecí, idiot bude mať na jeho batožine. -Ďakujem vám, Vaša Výsosť. -Čo si urobil? -Vypol som múru. -Nie, to nie. Vypnete celý film. -Musel som stlačil zlé tlačidlo. -No, dal ju späť. Dajte film späť. -Áno, pane. Áno, pane. -Poďme, Erna. Poď, Gretchen. Samozrejme, že viem, že budem ešte musieť účtovať vám za to. -No, fungovalo to? Kde je brána? -To fungovalo, pane. Máme kombináciu. -Veľká. Teraz môžeme vziať aj tú poslednú závan čerstvého vzduchu z planéty Druidia. Čo je to kombinácia? -Jedna, dve, tri, štyri, päť. -Jedna, dve, tri, štyri, päť? -Áno. -To je úžasné. Mám rovnakú kombináciu na mojom batožine. Pripravte Spaceball 1 k okamžitému odletu. -Áno, pane. -A zmeniť kombináciu na mojej batožiny. -Au! [END videoprehrávanie] DAVID J. Malan: úžasné film, ktorý by mal teraz všetci vidia. Takže súvislosti je, že s nezabezpečenými údaje pochádza príležitosť zašifrovať a škriabať ho. A tak to, napríklad, je príklad šifrované správe. To vlastne hovorí, že niečo v angličtine. Ale to zjavne nie je úplne zrejmé. A my prídeme kruh dnes šprýmař oddelene, čo to tajné správa je tu. Ale v reálnom svete počítačov, veci sa ani nepozrel, ako by mohli byť anglických fráz. Napríklad, to je to, čo môžete nájsť na štandardného Linux alebo Mac alebo Unix počítač v súbore, ktorý bol kedysi nazývaný súbor s heslami. V súčasnej dobe, je to už sa sťahoval do iných miest. Ale keď sa pozriete na správnom mieste v systéme, uvidíte nielen svoj meno alebo iných ľudí na systéme, ale uvidíte, šifrovaná verzia svoje heslo. Naozaj, slovo krypta sa navrhuje, aby nasledujúce veci sú šifrované. A táto séria zdanlivo náhodných písmen a znakov a čísel a atď možno dešifrovať iba všeobecne poznať nejaké tajomstvo - Tajné slovo, tajné číslo. A tak skutočne, umenie kryptografia v konečnom dôsledku sa scvrkáva veriť niektorých triedenie a vedel niečo, čo niekto iný nemá. Budeme skúmať to v trochu podrobnejšie dnes v PSet prísť. A teraz slovo na Pass / Fail. Tak predovšetkým, ako niektorí z vás sa ponorila do PSet 1, spotrebič, a úplne nový svet pre seba, si uvedomil, že frustrácia a zmätenosť a len technické problémy sa dajú očakávať. Najmä s prvým Pset, kde je to proste tak moc nového, len na to, oboznámení s ls a cd a všetkých týchto tajomných príkazov v novom prostredí. A to je oddelený od skutočného materiálu a programovanie sám. Takže si uvedomiť, tiež to, že tam sú určite úradné hodiny, ktoré existujú ako nosná konštrukcia. Sekcia začať tento rok v nedeľu. Ale čo je najdôležitejšie, ak máte pocit, proste, že to nie je svet pre teba, si uvedomiť, že je to naozaj len nejakú dobu trvať. A bol to nie pre túto príležitosť pred rokmi pre mňa vezme triedu vyhovel / nevyhovel, úprimne, nikdy by som si dokonca nastaviť nohu v triede. A môžete zmeniť až do, povedzme, piaty pondelok v kurze. Takže ak ste na okraji teraz si uvedomiť, že skôr než hlavu do inej Vody úplne, to určite zvážte len zmenou na prijatie / odmietnutie. Opäť platí, že to nie je naozaj to kultúra tu na Harvarde branie vecí vyhovel / nevyhovel, pretože každý chce naozaj dosiahnuť lepšie výsledky, alebo. Ale úprimne povedané, je to skvelý spôsob, ako sa snaží niečo, že možno nie byť oboznámení s vami. A ty skončíš robiť vo väčšine prípadov celkom dobre, možno veľa k prekvapeniu. A v Konkrétnejšie, čo si myslím, vyhovel / nevyhovel všeobecne robí, najmä ak ste si mohli skúsenosti s PSet 0, ak ste dal v 10 hodín, 15 hodín, 25 hodín do niektorých PSet - a ty si len búchanie vaša hlava proti múru, a je to stále výborný neskoro v noci, ale vy ste vzali PSet ako 90% z cesty, viete, že jednoducho nemôže prísť na jednu vec - vyhovel / nevyhovel naozaj berie zmiernilo triedy ako je táto, kde si môžete radiť z šťastne hovorí jo, ja viem, že to nie je dokonalé. Ale ja pracoval som prdel na to. Som celkom spokojný s tým, kde to skončilo. A že bude spĺňať očakávania vyhovuje / nevyhovuje. Takže sa majte na pamäti, že. Dobrá. Takže tí z vás, ktorí sa usilovne snažia využiť Harvardskú univerzitu Wi-Fi vedieť že je CS50 SSID, Wi-Fi pripojenie sa vznáša, že ste môže mať väčšie šťastie pre. Je to trochu paradoxné, že heslo pre toto - ak by ste chceli vyskúšať pripojenie k to pre lepšiu rýchlosť a dajte nám vedieť, pokiaľ to nie je lepšie - je jeden, dva, tri, štyri, päť, celú cestu až na osem, pretože osem je bezpečnejšie ako päť. Takže ak potrebujete Wi-Fi hesla, pripojiť sa k CS50 bezdrôtovo tu. Jedna, dva, tri, štyri, päť, šesť, sedem, osem. A príspevok na CS50 Diskutovať ak máte stále prerušované problémy s pripojením, a necháme právomoci, ktoré budú poznať pre tento priestor. Dobrá. Tak rýchly teaser, najmä pre tých z vás, ktorí sú ventilátor chlapcov a dievčat všetkých vecí Apple. To, čo som vyhrabal z niekoľko rokov späť bola tento súbor tu, ilock.c, len druh urobiť konkrétnejšie a zložitejšie niektoré z viac základných C programy sme písali. Tak som otvoril tento súbor, ilock.c. Je k dispozícii na prednášky stránke pre dnešok. Na ľavej strane, uvidíte dlhý zoznam funkcií. Takže ten chlapík, ktorý napísal tento spísal mnoho funkcií, viac ako len hlavná. Použil veľa knižníc tu. A ak začneme rolovanie, čo to vlastne je, je veľmi najprv, ja verím, bezva pre pôvodný iPhone. Ak by ste chceli, aby útek z väzenia pôvodnej iPhone, čo znamená, že untether to z AT & T a skutočne nainštalovať špeciálny softvér na neho a robiť veci, že Apple nechcel, aby ľudia mohli - dobre, niekto vzal čas, aby zistili, ako presne by mohol zneužiť softvér chyby, omyly, chyby, v softvéru Apple. A tak sa narodil ilock.c. Že ak zostavujú ho na počítači ho a nainštaloval na iPhone tejto bol pripojený k počítaču prostredníctvom, povedzme, USB kábel, by to vám administratívne alebo root oprávnenia na vašom iPhone a nechať si urobiť celkom veľa čo chcete. A tak tam bolo to fascinujúce hra na mačku a myš medzi Apple a zvyšok sveta, najmä ako oni, rovnako ako mnoho firiem, v snahe zaistiť ich veci dole tak, aby si môžete robiť len s tým, čo majú v úmysle. Ale vďaka ľuďom, ako je tento a ich chápanie low-level detaily a, v tomto prípade, C programovanie a veľa známych konštruktov že sme začali hrať s, ste schopní skutočne využívajú hardvér v spôsobe vidíte fit a nie nutne nejaký právnickej osoby. Tak napríklad, nemám tušenie, čo to robí. Ale getVersion znie celkom jednoduché. A vyzerá to, že je to funkcia, ktorá táto osoba napísala. Vezmite nejaký integer ako argument, nič nevracia, ale Zdá sa, slučky s pre slučky tu a ak stave, ak podmienka, zlomiť, a nejako súvisí s číslom verzie. Ak by sme posunúť dole - aj keď veľa z týchto kľúčových slov sa bude nové, a tam je veľa funkcií v tú sme nikdy nevideli a možno už nikdy vidieť cez priebeh semestra - na konci dňa, to sa riadi rovnakými pravidlami a logiku, že sme boli hrať s tak ďaleko. Tak toto je príliš starý na to bezva váš iPhone 3s alebo 4s alebo 5s čoskoro, v týchto dňoch, ale viem, že je to všetko moc pochádza z tohto sveta, že máme skočil do. Takže poďme sa pozrieť na trochu jednoduchý príklad. Tento, len preto, aby si ohriať nejakú syntaxou a tiež niektoré ďalšie údaje typ, ktorý sme hovorili o ale naozaj vidieť v C. Tak toto je súbor s názvom positive1.c. A za pripomienky v hornej, to len vyžaduje, aby používateľ zaistiť kladné číslo. Takže je to príklad do-while, čo je pekné pre užívateľa-interactive programy, kde potrebujete oznámiť užívateľovi, aby niečo urobiť. A v prípade, že nebudete spolupracovať, ste kričať na ne, alebo odmietnuť ich vstup. Názorný príklad, budem robiť linky 19 až 24 tak dlho, kým má používateľ mi nedal kladné číslo. Teraz tento detail tu na riadku 18, prečo prehlasujem n nad to celé opakovanie konštrukcia oproti hneď vedľa riadku 22, kde som vlastne jedno, dostať n? Jo? [Nepočuteľné] DAVID J. Malan: Jo, tak to otázka rozsahu. A v laického hľadiska, čo sa rozsahu týka? Jo? [Nepočuteľné] DAVID J. Malan: Môžeš hovoriť trochu hlasnejšie? SPEAKER 1: Kde máte prístup k danej premennej. DAVID J. Malan: Perfect. Kde môžete získať prístup k danej premennej. A všeobecne, pravidlo bolo doteraz, že rozsah pôsobnosti niektorých premenná je definovaná v najnovších zložených zátvoriek, ktoré ste videli. A tak v tomto prípade, keď som urobil chybu deklarovať n on-line 22, že linka bude fungovať. Ja by som si int, a ja by som dal to do tej premennej n v súlade 22. Ale ktorý riadok kódu by teraz netuším, čo hovorím? Tak 25, a ukázalo sa, 24, a tiež, pretože v tomto prípade, nespadá z zložených zátvoriek. Takže len trochu na obtiaž, ale veľmi ľahko vyriešiť tým, že jednoducho vyhlásením premenná mimo funkciu samotnej. Teraz uvidíme, ešte dnes, môžete ísť ešte o krok ďalej. A môžete dokonca dostať trochu lenivý - a to nie je možné odporučiť, všeobecne - ale mohli ste dokonca leniví a dať premennú globálne, aby som tak povedal, nie vnútri funkcie, nie sú vo vnútri slučky, ale v samotnom súbore, mimo všetkých funkcií, ktoré ste napísal, ako som to urobil tu na linke 15. Ale to je všeobecne odsudzovaný. Ale uvedomiť to je riešenie niekedy iné problémy, ako budem nakoniec vidieť. Takže teraz, necháme to takto. Ale uvidíme, či môžeme prepísať to len začať vyjadrovať sami trochu inak. Takže tento program, len aby bolo jasno, je positive1. Nechaj ma ísť napred tu a vo svojom terminálovom okne, aby positive1, Enter. Zostavuje, v poriadku. Chystám sa spustiť positive1, stlačte klávesu Enter. Žiadam, aby ste mi celé kladné číslo. Poviem -1. To nefungovalo. 0, 99, to vyzerá, že funguje. Možno nie najprísnejšie test. Ale aspoň je to pekné sanity kontrola, či sme na správnej ceste. Takže teraz ma nechaj ísť dopredu a otvorte verzii dvaja z tohto. A čo je odlišné už? To sa robí to isté. Ale čo skáče tak, ako je zreteľne iný tentoraz? Jo, tak to bool zelene. Gedit je zdôraznené v zelenom tohto kľúčového slova známe ako bool, ktorá je dátový typ. To nie je to, postavený v roku pre všetky verzie C. Musíte zahrnúť konkrétne knižnice. V našom prípade, som zahrnul CS50 knižnicu tak, že sme majú prístup k bool. Ale v riadku 18, sa zdá, že majú logickú hodnotu tu nazýva vďačný. Takže som mohla zavolať to niečo. Ale ja to nazval vďačný len trochu sprostredkovať nejaký sémantický význam. Tak spočiatku na linke 18, nie som zrejme vďačný, pretože Logická hodnota vďačný je inicializovaný na hodnotu false v riadku 18. A potom sa zdá, to, čo som tu urobil v riadkoch 21 až 23 je, že som práve druh prepísaný môj logiku. Takže nie funkčne odlišné. Ale v riadku 22, už som či int užívateľ predpokladu je väčšia ako 0, potom som jednoducho zmeniť hodnotu vďačný true. A prečo som to urobil? Vzhľadom k tomu, v súlade 25, zdá sa, že budem kontrolovať stav. Do tejto slučky, zatiaľ čo vďačná je false. Takže navrhujem to ako alternatíva k variante jedna, pretože je to aspoň trochu viac intuitívne, snáď. Je to trochu viac uzemnený v angličtine. Takže urobte nasledovné, keď nie ste vďační, alebo keď vďačný je false. A tentoraz, taky som zrejme nezaujíma spomenúť, čo užívateľ napísal v oznámení, pretože tam žiadna premenná n Takže vlastne, I - malá biela lož tam. Funkčne, program je trochu iný, akonáhle sa dostaneme na dno to preto, že nie som si spomenul, čo n je. Ale ja som chcel ukázať aj tu, že aj keď sme videli GetInt a GetString sa používa na pravej strane znamienko rovná sa tak ďaleko, aby spomenuli sme si hodnotu, technicky, to nie je nevyhnutne nutné. Ak z nejakého dôvodu jednoducho nezaujíma uložiť hodnotu, chcete len kontrolovať hodnotu, zistíte, že môžeme jednoducho napísať toto ako GetInt otvorený parenie, úzkym párenie. Táto funkcia bude vracať hodnotu, ako sme hovorili. Bude to vám späť int. A tak ak ste psychicky myslíte že sa to stáva, keď píšem v 99, GetInt vráti číslo 99. A tak koncepčne, je to ako by môj kód bol v skutočnosti to. Takže ak 99 je naozaj väčší ako 0, potom vďačný stáva pravdou. Potom linka 25 si uvedomuje, ooh, už sme to urobili, lebo som teraz vďačná. A v súlade 26, sme jednoducho povedať, vďaka za kladné celé číslo, bez ohľadu na to stalo sa. Teraz sa poďme urobiť mierny syntaktickú cukor tu, aby som tak povedal. Poďme sa pozrieť, či sa nám podarí vyčistiť tento riadok 25 s touto treťou a poslednou rozptylu v positive3. Takže všimnete jediný rozdiel je, čo riadok kódu? Jo, tak 25. A sme naozaj videli túto trik len zatiaľ. Ale my sme vidieť výkričník v pondelok, čo označuje, čo? Takže nie, alebo negácie. Tak sa boolovská a otočiť jeho hodnotu. Pravda sa stáva false. False stáva pravdou. Takže to, navrhujem, je ešte trochu viac intuitívne spôsob, ako písanie kódu, pretože som stále inicializovať vďačný false. Stále to nasledujúce. Nastavil som vďačný na hodnotu true, keď príde čas. Ale teraz môžete naozaj len preložiť tento kód slovne zľava doprava, kým nie vďačná. Vzhľadom k tomu, bang, alebo výkričník, označuje pojem nie je, takže zatiaľ čo nie je vďačný. Takže znova, sme nezaviedli žiadne nové koncepty na sebe. Hovorili sme o tom Booleans staré, keď sme hrali s Scratch. Ale uvedomujem si môžeme len začať písať náš kód v mnohými rôznymi spôsobmi. Takže najmä v pset1, ak ste trochu snaží prísť na spôsob, ako napísať nejaký program, kurzy máte šťastie, pretože tam to bude nejaký počet riešení, ktoré sa môže stať pri. Napríklad, to je len tri aj pre najjednoduchšie programov. Dobrá. A teraz spomínam v pondelok, sme odišli na túto nôtu s návratových hodnôt. Takže vôbec prvýkrát, sme napísali program, ktorý nie je len mať hlavné, má tiež svoju vlastnú funkciu, ktorá som napísal tu. Takže v súlade 31 až 34, som realizovala kocky funkciu. Nie je to zložité. Je to len a časy a časy a, v tomto prípade. Ale čo je dôležité, na tom je, že som pri vstupe vo forme a Vraciam sa výstup v podobe časov a časov. Takže teraz mám možnosť, rovnako ako som sa printf sám, volať táto funkcia volaním kocky funkcie. A kocky funkcie má nejaký vstup. A kocky funkcia vráti nejaký výstup. A tak na rozdiel od, printf len niečo urobil. To sa nič nevracia že záležalo - aj keď, ako stranou, to vráti hodnotu. Môžete len všeobecne ignorovať. Printf len niečo urobil. To malo vedľajší účinok tlače na obrazovke. Naopak tu, máme kocky funkciu, ktorá skutočne vráti niečo. Tak to je všeobecne - pre tých, ktorí poznajú toto, je to pomerne jednoduché nápad. Ale pre tých menej oboznámení s touto myšlienkou odovzdávanie na vstupoch a získanie späť výstupy, skúsme len niečo super jednoduchý. Je niekto pohodlný prichádza na pódium krátko? Tie majú byť pohodlné s kamerou vy, rovnako. Jo. Dobre, Ako sa voláte? KEN: Ken. DAVID J. Malan: Ken. Dobre, Ken. Poď hore. Takže Ken bude funkcia druhov tu. A poďme ďalej a urobiť to. Poďme si trochu fantázie. Rád Vás vidím. Vitajte na stredu záujmu. Dobrá. Ideme na toto tlačidlo tady. Dobrá. Tak tu máte moderný tabuľu. A to, čo som ich hlavné funkcie, napríklad. A nemám iPad v ruke. Nemám naozaj spomenúť, ako sa - no, vlastne, nemožno povedať, že. Ja naozaj nemám dobrý rukopis. A tak teda, chcem tlačiť niečo na obrazovke pre mňa. Takže ja som bol hlavný program. A ja budem mať vás povedať, napíšte v mojom kuracím nuly a potom odovzdá vám vstup. Tak ako hlúpe hoci toto cvičenie je, pojem funkcií a volanie funkcie a vracia funkciu naozaj scvrkáva na to. Ja som hlavné. Práve som napísal printf ("niečo") na obrazovke. Bežím tento program. A akonáhle printf volaná, trvá jeden argument - alebo jeden parameter, niekedy - medzi úvodzovkami. Tu je to, že argument. Ja odovzdaním do Ken. Teraz je to čierna skrinka písomnej určitý počet rokov, pred ktoré zrejme vie, ako tlačiť veci na obrazovke. Takže, vykonať. To nie je zlé. Takže, veľmi dobrá. Takže teraz Ken sa vykonáva spustením. Vie potrebné Podaj mi niečo späť? Takže nie, že sme videli doteraz. Opäť platí, že printf sa skutočne vráti číslo. Ale budeme ignorovať, že pre túto chvíľu, pretože sme nikdy používal to. Tak to je to pre Kena. A tak teraz hlavné vráti na vykonanie - Hlavným preberá ovládanie programu znova, pretože tento riadok kódu, printf, sa vykonáva spustením. A ideme o našej ceste vykonávajúceho akékoľvek iné linky sú tam. Dobrá. Takže teraz skúsme trochu iný príklad. A tentoraz tu, poďme sa najprv vyčistiť obrazovku tu. A tentoraz, budeme robiť Cubing funkciu. Ale tentoraz som očakávať, že výstupné hodnoty. Tak poďme do toho a urobiť to. Takže teraz mám riadok kódu, ktorý hovorí, že x = kocka (x). Takže vlastne rokov 's - riadok kódu, odvolanie, vyzerá to. x = kocka (x). Tak ako sa to bude fungovať? Tak poďme ďalej a dá vám bielu obrazovku znova. A ja sa chystám napísať hneď dole na hodnotu x, ktorá v tejto chvíli v čas sa stane byť, povedzme, 2, aby to jednoduché. Tak som napísal na kus papiera hodnota 2, čo je moja hodnota x. Podal som ju Ken. KEN: A ja som len napísať odpoveď? DAVID J. Malan: Jo, poďme stačí napísať odpoveď. Dobre. A teraz sa musí vrátiť mi niečo. Takže - perfektné. Pekný SEGUE. Takže teraz podá mi hodnotu 8, v tomto prípade. A čo s tým mám robiť? No, vlastne, uvidíme. Získať toto právo. Čo mám robiť s tým? Teraz budem brať túto hodnotu a skutočne uložiť v tých Rovnaké bitov v pamäti. Ale upozornenie, som tak trochu zápasí tu. Som trochu zmätený, pretože kam som vlastne písať hodnotu x? Vzhľadom k tomu, čo som práve urobil, je fyzicky ručne Ken kus papiera , Ktorá mala hodnotu 2, ktorý bol x. A skutočne, to je presne to, čo sa stane. Tak to dopadá, že pri volaní funkcie, a odovzdáte v argumente Páči "Hello World", alebo predáte argument ako 2, všeobecne, že ste odovzdaním kópie tohto argumentu. A tak rovnako ako som napísal číslo 2 tu a podal ju Ken, že musí byť znamená, že som ešte kópiu hodnoty 2 niekde. Pretože naozaj, teraz, že som sa dostal späť hodnotu 8, musím sa vrátiť do RAM a skutočne zapísať 8, kde som kedysi mal číslo 2. Takže vizuálne zapamätať si túto predstavu odovzdaním doslova kópie hodnoty. Ken robí svoju vec, podá mi niečo - v tomto prípade, hodnota ako 8. A potom som musel urobiť niečo s touto hodnotou, ak som Chcem, aby to okolo. Takže toto všetko bude až príliš dobre, než dlhý. Mockrát vám ďakujem za túto demo tu, Kena. Dobrá. Veľmi dobre. Tak uvidíme, ako to nakoniec sa vzťahuje na niektoré z funkcií volanie, že sme boli tu. Tak nechaj ma ísť napred a priviesť nás späť k Cubing napríklad tu. A zistíte, že ak chceme, aby skutočne začať užívať toto ďalej, budeme musieť dbať na to, že sa počet x, ktorá je momentálne prešiel v tu sa líši od toho, čo je skutočne odovzdaný do funkcie. Takže znovu, to prešiel kópia sa stane docela Germaine za chvíľu. Takže poďme sa pozrieť na niečo, čo nie je úplne správne pracovať ešte. Chystám sa ísť dopredu a otvorte tretiny buggy príklad, ktorý je postihnutý prírodou. A volá sa buggy3, a to implementuje vymieňať funkciu. Takže tu máme hlavnú funkciu, ktorá x a y ľubovoľne inicializovaný 1 a 2, resp. Mohli by sme použiť GetInt, ale my jednoducho potrebujeme jednoduché cvičenie. Takže je to pevne ako 1 a 2. V riadkoch 21 a 22, my zrejme vytlačiť X a Y, jedno na riadok. Potom, na riadku 23, tvrdím ja vymieňať tieto hodnoty, bodka, bodka, bodka. Som zrejme volať funkcie v súlade s názvom 24 odkladacou ktorý berie dva argumenty. Je to úplne legitímne pre funkcie, aby sa dva argumenty. Videli sme printf to už. Takže výmena zrejme trvá x a y. A ako už názov napovedá, dúfam, že to bude zameniť tieto dve hodnoty. Tak som tvrdiť, on-line 25, vymenil. A ja dotlač x a y za predpokladu, že že som skutočne prehodenie. Ale keď som vlastne tento program spustiť - dovoľte mi, aby som otvoriť okno terminálu. Dovoľte mi, aby som buggy3. Ako názov napovedá, toto nie je skončí dobre. Pretože keď som sa Enter Všimnite si, že x je 1. y je 2. A ešte na konci programu, sú stále ešte v skutočnosti, rovnaký. Takže na základe preukázania práve s Kenom, čo sa vlastne deje? No, poďme sa ponoriť do tohto swapu funkcie. Je to super krátky. Je to len pár riadkov kódu dlho. Ale čo je to zásadný problém založený na jednoduchom príbehu povedal, tu s Kenom? Prečo je výmena chybné? [Nepočuteľné] Presne tak. Takže sme ukladanie na kópiu, nie je premenná sám. Inými slovami, swap zrejme prijíma dva argumenty, int. A to je ľubovoľne nazýva a b A tu, som prešiel v x a y, ktoré sú príslušne 1 a 2. Ale ja nie som doslova prechádzať v x. Nie som doslova prechádzať v y. Ja som okolo kópiu X a kópie y. Je to ako skoro, ako by si skopírovať a vložiť do prehodiť hodnoty, aby chcete, aby sa skutočne manipulovať. Takže ak je to ten prípad, kedy som sa, program, kto vykonávajúci potrubia 35, potom 36 - keď som si na riadku 37, v tomto bode v príbehu, čo je hodnota? V tomto bode príbehu, linka 37, aká je hodnota v tomto bode? Tak to by malo byť len 1. Je to tak? Vzhľadom k tomu, x bola odovzdaná ako prvý argument. A táto funkcia jednoducho svojvoľne volá svoju prvú argument,. Podobne je y, druhý argument. A je to len svojvoľne volá druhý argument b Teraz je táto dichotómia je vlastne celkom jednoduché vysvetlenie. Premýšľajte o tom. Nikto z nás sa stretol osobu, ktorá napísal printf. Takže určite, on alebo ona nemá tušenie, čo naše premenné o 30 rokov neskôr sa chystáte byť nazývaný. Takže tam musí byť rozdiel medzi tým, čo hovoríte premenné v Funkcia píšete a čo hovoríte premenné vo funkciách ktorá vás volanie alebo použitie. Takže inými slovami, napísal som svoje premenné ako x a y. Ale ak niekto iný písal odkladacie funkciu, on alebo ona rozhodne nebude vedieť, čo moje premenné sa bude nazývaný. So uvedomiť, že to je dôvod, prečo ste túto dualitu mien. Technicky, mohol by som to náhodou. Ale oni by ešte byť predávané ako kópia. Bolo by to čisto náhoda, esteticky, ak ten človek, ktorý napísal Odkladacia použil rovnaké názvy. Dobrá. Takže v tomto bode príbehu, linka 37, je 1. b je 2. A teraz mám postupovať, aby swap. No v prvom rade mi dovoľte, aby som vlastne robiť to oveľa jednoduchšie. Ja neviem, čo tie tri riadky kódu robia. Dovoľte mi, aby som to. b dostane. dostane b Hotovo. Prečo je tento zlomený, logicky? Je to druh intuitívne vec, nie? Tak sa stáva b A b stáva. Ale problém je, že akonáhle linka 37 vykonáva, čo je hodnota a B? Rovnaký, 1. Pretože ste clobbered, aby som tak povedal, ste zmenili b rovnať. Takže akonáhle linka 37 je vykonaný, je to skvelé. Teraz máte dve kópie čísla 1 vnútorné tejto funkcie. Takže keď hovoríte, v súlade 38, dostane b, dobre, že ste trochu v háji. Vzhľadom k tomu, ste len priradenie 1-1. Ste trochu stratila hodnotu, ktorú záležalo. Takže v pôvodnej verzii tohto, zistíte, čo som urobil. Som miesto toho mala tretina riadok kódu, ktorý vyzeral ako toto. Prehlasujem, dočasnú premennú - tmp je veľmi bežné meno dočasné premenné. Je to int, pretože sa musí zhodovať, čo chcem urobiť kópiu. Aj uložiť kópiu vnútri tmp. Takže akonáhle linka 37 je vykonaný, hodnota je - rýchle sanity check - 1. Hodnota b je 2. A hodnota tmp je tiež 1. Takže teraz som spustiť linku 38. Takže akonáhle linka 38 vykoná, má na hodnotu b A b je 2. Takže je teraz 2. Takže v tomto bode príbehu, je 2, b je 2, a tmp je 1. Takže teraz logicky, môžeme len PLOP TMP je hodnota v b. A sme hotoví. Takže sme vyriešili tento problém. Bohužiaľ, keď som spustiť tento program v tejto podobe, to robí nie vlastne zameniť všetky hodnoty. Ale aby bolo jasno, prečo? Opravil som logický problém z pred chvíľou. Ale znova, keď spustenie programu, x a y sa nemení do konca tento program poprava. [Nepočuteľné] DAVID J. Malan: Tak sme sa vrátili nič. Tak to je pravda. Ale ukazuje sa, že je tu trochu problém, pretože tu tak ďaleko, Jediná vec, sme boli schopní sa vrátiť, je jedna vec. A to je obmedzenie C. Môžete vrátiť iba skutočne jednu hodnotu, v tom prípade, ja som trochu trčať pretože som sa mohol vrátiť novú hodnotu x alebo by som mohol vrátiť nová hodnota y. Ale ja chcem obaja staré. Takže návratu nie je jednoduché riešenie tu. Ale problém zásadne je dôvod, prečo? Čo sme vlastne vymenili? a b Ale aj b sú kópie x a y, čo znamená, že to urobil všetko práce - práve sme strávili ako tri minúty hovorí o swapu funkcie a všetci traja z týchto premenných. A to je skvelé, úplne správny v izolácii. Ale A a B je rozsah len je v týchto líniách tu. Tak ako pre sláčiky, ak ste deklarovať integer aj vo vnútri pre loop - podobne, ak ste deklarovať a b vnútri funkcie, ktorá ste napísali, sú platné iba vo vnútri tejto funkcie. Čo znamená, že akonáhle swap je vykonané vykonávanie a ideme z linky 24 do linka 25, x a y sa nemení vôbec. Práve ste zbytočne veľa času vymieňať kópie premenných. Tak to dopadá, že riešenie je to vlastne non-zrejmé. To nie je úplne dostačujúce pre návrat hodnoty, pretože môžeme vrátiť iba jednu hodnotu. A ja naozaj chcem vymeniť oba X a Y súčasne. Takže ideme vrátiť k tomu. Ale teraz si uvedomiť, že problém zásadne vychádza zo skutočnosti, že a a b sú kópie. A sú v ich vlastnom rozsahu. No, poďme sa pokúsiť vyriešiť nejakým spôsobom. Dovoľte mi, aby som skutočne prejdite sem a otvoriť, povedzme, štvrtú variantu z toho, buggy4. A čo toto? To je podobný, ale jednoduchšie problém pozrieť sa na predtým, než sme sa stab na riešenie. Tento program sa nazýva prírastok. A to zrejme inicializuje celé číslo x na 1 v riadku 18. Aj potom tvrdí, x je 1. Potom som tvrdenie zvyšovanie, bodka, bodka, bodka. Potom som zavolať prírastok. Ale potom v riadkoch 22 a 23, tvrdím, že to bola zvýšená. Tvrdím x je teraz nech je to čokoľvek, 2 pravdepodobne. Ale tento program je buggy. V čom je problém? Jo? [Nepočuteľné] DAVID J. Malan: Presne tak. Takže x bol vyhlásený zrejme na riadku 18. To je vnútri zložených zátvoriek hlavné je. Takže jednoduchá odpoveď tu je to, že dobre, x existuje tu. To neexistuje v súlade 32. Takže tento program vlastne nie je ani skompilovať. Kompilátor, keď som sa kompilácie tento kód, bude na mňa kričať o nejakej nelegálnej identifikátora alebo niečo v tom zmysle. V skutočnosti, skúsme to. To je, aby buggy4. Tu to je. Použitie nelegálnej Identifikátor x v súlade 32. A skutočne, buďme konkrétnejší tu dnes tak, že je to užitočné v úradné hodiny a doma. Všimnite si, že je to trochu záhadne písomná. Ale skutočnosť, že zvonenie je na nás kričali, riekol: buggy4.c: 32:5, je v skutočnosti užitočné. To znamená, že chyba je na riadku 32 v znakovú pozíciu päť. Takže jedna, dva, tri, štyri, päť. To je, v skutočnosti, kde je problém. A tiež mať na pamäti pri úradných hodinách aj doma, budem mať šťastie tu. Mám jednu chybu. Bude to pomerne ľahko opraviť. Ale ak sa dostanete celú obrazovku plnú ohromujúcich chybových správ, opäť, Uvedomujem si, že najspodnejšej jeden by mohol byť len symptomatická Vrchný ty. Takže vždy naháňať svoje chyby z top-down. Vzhľadom k tomu, že by mohlo byť len daisy-chain efekt, ktorý naznačuje, vás majú omnoho viac problémov, ako ste vlastne robiť. Tak ako by sme mohli opraviť, ak je mojím cieľom zvýšiť x? Čo je to? Dobre. Takže môžeme x globálne. Poďme sa na zástupcu, ktorého som varoval o tom skôr. Ale sakra, my len potrebujeme rýchlu opravu. Takže povedzme, že int x tu. To robí x globálne. Takže teraz hlavné má prístup k nemu. A prírastok k nemu má prístup. A tak nechaj ma ísť napred a skompilovať to teraz. Urobte buggy4, Enter. Zdá sa, že zostavenie teraz. Spustite buggy4, a zdá sa, že skutočne funguje. Teraz sa jedná o jeden z týchto vecí - robiť, čo hovorím, nie ako ja, ako som práve urobil tu. Pretože všeobecne, naše programy sa dostaneme oveľa zaujímavejšie a oveľa dlhšie, než toto. A ak vaše riešenie životných problémov je len ah, dať všetky premenné v hornej časti súboru, veľmi rýchlo to programy sa desivo ťažké riadiť. To je ťažšie vymyslieť nové názvy premenných. To je ťažšie pochopiť, čo je premenná robí čo. A tak všeobecne, to nie je dobré riešenie. Takže ideme na to lepšie. Nechceme používať globálnu premennú tu. Ja chcem zvýšiť x. Tak som mohol, samozrejme - na konci dňa, je to trochu hlúpe príbehu, pretože sme jednoducho urobiť to. Ale keď som o tom nevedel tohto subjektu, alebo som nesmel zmeniť v hlavnom samo o sebe, ako by inak by som implementovať Ken tu, to čas, aby kocka, ale môžete zvyšovať? Ako môžem zmeniť túto vec tu? Jo. [Nepočuteľné] DAVID J. Malan: Dobre, dobre. Tak prečo by som odovzdať x? A potom sa skôr ako vrátiť, prečo jednoducho nemôžem robiť return x + 1? Teraz, pár ďalších vecí, musieť zmeniť tu. Som na správnej ceste. Čo ešte musím trik? Niekto iný. Jo? [Nepočuteľné] DAVID J. Malan: Musím zmeniť návratový typ prírastku pretože to nie je neplatné. Void znamená nič sa vracané. Ale jasne, teraz je to. Takže to musí zmeniť na int byť v súlade s tým, čo Ja som vlastne vracia. Teraz niečo iné je stále buggy tu. Jo? [Nepočuteľné] DAVID J. Malan: Tak som potrebné zvýšiť x? [Nepočuteľné] DAVID J. Malan: Ah, tak musím prejsť x. Tak som potrebné urobiť tu. Takže prototypu, musím to zmeniť tu. Tak to sa musí stať int. To sa musí stať - hmm. Vlastne som chybu tu. Poďme opraviť tento prvý. Čo by to vlastne byť? Tak to musí byť niečo, čo int. Mohlo by to byť x. Ale úprimne povedané, ak začnete volať všetky svoje premenné x, to dostane menej a menej jasné, ktorý je ktorý. Takže povedzme, ľubovoľne vybrať iný konvencie pre moje pomocné funkcie, funkcie píšem. Nazveme to. Alebo by sme mohli nazvať - ​​nazvime to even_number byť ešte jasnejšie. Tak som sa musel vrátiť, čo je číslo plus 1. A teraz musím zmeniť jednu vec sem a jeden Ďalšia vec, ktorú tu. Čo mám zmeniť na riadku 21 ako prvý? Musím priradiť k x. Tak som si len volať zmien rastu x. Musím si pamätať odpoveď zmenou hodnoty x na na ľavej strane. A aj keď x je teraz na ľavej a pravej, že je úplne v poriadku, pretože pravá strana sa vykoná, prvý potom dostane zvalil do ľavého ručné vec, x je v tomto prípade. A potom konečne, je to ľahké opraviť teraz. To by malo len odpovedať, čo je dole. Int číslo. Dobrá. Takže celá partia zmien pre naozaj hlúpe funkcií. Ale zástupcu z vecí, ktoré budeme stále chcú robiť. Tak, aby buggy4. Ja som podelal niekde. Ach môj bože. Päť chýb v, rád, šesť-line program. Takže to, čo sa deje na linke 18, znak 5? Dobrá. Tak som si určil, že tento int. Dobrá. Tak uvidíme, veľa ďalších chýb. Ach môj bože. 19, 18, 21. Ale znova, nech to jednoducho vyčistiť obrazovku - Control L tu - a re-run zvonenie. Takže päť problémov je vlastne len, že jeden. Tak teraz poďme bežať buggy4, Enter. Uff. x bol zvýšený správne. Dobrá. Akékoľvek otázky na to, ako zvýšiť počty? Jo? SPEAKER 2: Prečo je to, že môžete len zmeniť x na číslo v premennej meno a budete vedieť, čo máte na mysli? DAVID J. Malan: Dobrá otázka. Ako to, že som si len zmeniť x na číslo a program bude vedieť, okamžite? Takže znova, myslím, že na to, ako túto abstrakciu. Takže keď som hlavnej a Ken je inkrementálny, úprimne povedané, je mi to jedno čo Ken volá jeho iPad. Nezaujíma ma, čo hovorí niečo, čo má čo do činenia s jeho vykonávaním tejto funkcie. Tak toto je implementačný detail, že som, hlavné, nie musieť starať o A tak jednoducho mení dôsledne ju vnútri funkcie, číslo tu a číslo tu, je všetko to trvá tak dlho, ako som prekompilovať. Je to niečo ako keď si myslíte, že o tom - mnohí z nás, tých z vás, vodiča licencie, ktorí si poháňané, alebo ak ste dokonca riadený v aute - väčšina z nás nemá potuchy, ako auto funguje pod kapotou. A doslova, keď otvoríte kapotu, väčšina z nás - vrátane mňa - sa nebude naozaj vedieť, čo sa pozeráme na. Niečo ako sa môžete cítiť s vecami, ako je toto teraz. Ale my naozaj nemáme starať, ako auto funguje. Nemáme sa starať, čo všetko z tyčí a piestov a káblov vo vnútri auto vlastne robia. Takže niečo ako to, čo hovoríte piest nezáleží tu v tomto prípade. Rovnaký nápad. Jo? [Nepočuteľné] DAVID J. Malan: Ak by bolo viac použití variabilného chvíľu xa pred, vy, programátor, by museli zmeniť je všade. Alebo by ste mohli doslova robiť Súbor, Ponuka, a potom Nájsť / Nahradiť, niečo také. Ale budete musieť urobiť týchto zmien sami. Musíte byť v súlade. [Nepočuteľné] DAVID J. Malan: najmä, aby ako tu? Ak to bolo int iné číslo? Jo. Takže, aby záležitosti, keď voláte funkciu. Takže ak by som sa volať prírastok tu niečo niečo čiarka, je tu priame mapovanie. Prvá premenná, ako sa to volá, je vyrobený kópiu prvý Argument tu. Je nám ľúto, nemalo by to byť zátvorka. Druhý argument sa zoradia s druhým. Takže poradí, áno, záleží. Dobrá. Prepáč, že som vzal dlhú cestu, aby sa tam dostať. Ďalšie otázky? Dobrá. Tak uvidíme, či nemôžeme namaľovať obraz o tom, čo sa skutočne deje tu pod pokrievku, aby som tak povedal. Tak to je obdĺžnik, ktorý by mohol predstavovať pamäte počítača. Takže aj keď máte tušenie, ako pamäť funguje a ako RAM funguje, aspoň Predpokladáme, že máte kytice z nej v týchto dňoch. Máš megabajtov nej. Máš gigabajtov nej. A my vieme, z týždňa nuly, že byte je práve to, čo? 8 bitov. Správne, takže 8 nuly a jednotky. Takže ak váš počítač má koncert RAM, dve giga RAM v týchto dňoch, budete mať miliarda 2000000000 bajtov pamäte, alebo približne 8 miliárd 16000000000 bitov, vo vnútri vášho počítača. Teraz na rozdiel od malého Woolly napríklad Willy, to nie je magnetické častice zvyčajne už. Stále viac, v laptopoch aspoň to SSD disky, SSD, že Práve ste žiadne pohyblivé časti. Je to všetko elektronické. Je to všetko na základe elektrina. Takže myslíte, že, aj keď, v tomto obdĺžniku ako práve predstavuje jeden alebo dva GB pamäte, ktoré máte. Takže je to kus pamäte. Teraz svet výpočtovej techniky má druh rozdelených off kusy Pamäť robiť rôzne veci. Tak napríklad, ak je to váš počítač RAM - ako navrhuje obdĺžnik tam - Ukazuje sa, že podľa konvencie, v hornej časti pamäte RAM, takže hovoriť, je všeobecne to, čo sa nazýva textový segment. Tí sú nuly a tie, ktoré ste zostavili. Takže keď sme sa pozrel pod pokrievku, čo a.out je, že všetky Nuly a jednotky - pri spustení programu, sú tieto nuly a jedničky načítať z pevného disk na niečo, čo nazýva RAM. A v pamäti RAM, to dali na vrchole. Teraz zatiaľ máte iné veci. Inicializovaná dáta, neinicializovaný dát. Tieto dva riadky pamäti odkazujú na globálne premenné, ktoré nemusíte sa často používajú. Ale niekedy, keď to urobíte, skončí tam rovnako. Potom je tu niektoré ďalšie veci. Premenné prostredie, ktoré nebude tráviť toľko času na. Ale potom dve dôležité veci, ktoré sa vrátia po celé toto semester, zásobník a halda. Takže väčšina z pamäti počítača je vyhradený pri spustení programu pre niečo ako balíček, a niečo, čo nazýva haldy. A nebudeme hovoriť o haldy dnes, ale my hovorí o zásobníka. A stack je chcel vykúzliť vizuál ako jedálne jedlo podnosy v Mather dome alebo tam, kde sa stalo, že v krajine, kde jedáleň pracovníci čistiť každý deň. Oni vyskladať až od podlahy nahor. A podobne v pamäti, že je to myšlienka na niečo na stack, uvedenie niečo na stacku, uvedenie niečo na zásobníku. A čo máme na mysli toto? Dobre, poďme priblížiť len na dolnej polovici obrázku, počítač je RAM, navrhnúť nasledujúce. Ukazuje sa, že pri spustení programu, ako je a.out alebo ahoj, čo program, je to, že ste napísali, znovu, sú tieto nuly a jedničky načítať z pevného disku - čo je dlhodobé skladovanie, zostane tam aj keď zatiahnite - načítaný do pamäte RAM. RAM je rýchlejší ako pevné disky. Je to menšia než pevné disky. Ale to je miesto, kde žijú programy, zatiaľ čo vy používate je. Takže ste dvakrát kliknite na program, na Mac alebo PC - je to načítaný z pevný disk do pamäte RAM. Akonáhle je načítaný do pamäte RAM, sa nuly a jedničky ísť na ceste hore, tzv texte segmente. Ale potom, akonáhle váš program v skutočnosti spustí, hlavné funkcia sa nazýva. A hlavné, ako sme videli, často lokálne premenné. A to má ints a reťazce a pripaľuje a podobne. Takže ak váš program, ktorý ste napísali, alebo program, ktorý ste poklepanie používa niektoré premenné vo vnútri hlavnej, oni skončí na Spodná časť vášho stacku pamäti, aby som tak povedal. Teraz konkrétnejšie, čo to vlastne znamená? To jednoducho znamená, že ak sme sa chystali číslovať veci - Ak by sme chceli, aby počet bajtov pamäte RAM v počítači, zistíte, že to by mohlo byť byte číslo nula. To by mohlo byť byte číslo jedna, dva, tri, štyri, päť, šesť, všetky spôsob, ako sa rád - 2000000000 by sa celú cestu tam hore. Takže inými slovami, keď hovoríme o pamäti RAM alebo pamäte, pokiaľ ide o bytoch, je len znamená, že niekto sa rozhodol, čo číslovať každý tie kúsky pamäti. Takže keď budete potrebovať 32 bitov na int, alebo budete potrebovať 8 bitov pre Char, kde sa, že skončí v pamäti? No koncepčne, len skončí na dne tejto čomu sa hovorí zásobníka. Ale čo je zaujímavé, teraz je, keď hlavné volá funkcie. Predpokladajme, že funkciu nazvanú foo, len ľubovoľný názov. Čo sa stane, je hlavné je v dolnej časti tohto zásobníka pamäte. Foo teraz je kladený na vrchole hlavnej pamäte. Takže nejaké lokálne premenné, ktoré foo má skončiť druh koncepčne vyššie tie hlavné. Ak foo volá inú funkciu nazvanú bar, tieto premenné skončí tu. Ak bar volá niečo iné, tu, tu, tu. Takže to, čo je na tom zaujímavé spustenie programu je to, že ako volať funkcie, a keďže tieto funkcie volať funkcie, a ako tieto funkcie volať funkcie, si vybudovať tento balík funkcií v pamäti. A len raz za funkcie vráti sa môžete začať sa, že pamäť vrátiť. Takže jedným z najjednoduchších spôsobov, ako beží z pamäte v počítačovom programe je písať funkcie, ktoré sa nikdy nevráti. Tak napríklad, poďme preukázať až s zámerne buggy program. Nechaj ma ísť napred a nenechám # include , int main (void). A ja budem robiť, keď (2> 1), ktorý pravdepodobne nebude nikdy zmeniť na nás. A nechaj ma ísť napred teraz a robiť printf. Vlastne, že to bude menej vizuálne zaujímavé. Poďme to. Pre int (i = 0; i> 0). Poďme urobiť túto chybu, i + +. A nech to nie je printf tu. Poďme praktizovať to, čo som kázal. Poďme mať metódu tu. Void chorus, a povieme int i A potom som chcel povedať, printf - oh, poďme urobiť to zaujímavejšie. Poďme vlastne nevytlačí vôbec nič. Jednoducho to. Chorus (i). Dobrá. Tak to je buggy pretože prečo? Ja som to vymyslela, ako som ísť, pretože program nie je v skutočnosti nič záujmu. Ale to nie je cieľom. Cieľom je napísať program, ktorého hlavnou funkciou je čo robí, očividne? Zavolajte sám. A skutočne, nepotrebujeme slučku. Poďme ešte zjednodušiť tým, len tak, aby sme nestratili zo zreteľa fakt zásadná chyba. Hlavné vyzýva zbor spievať nejakú chór. Potom som urobil niečo hlúpe, a ja som mal refrén volanie refrén, pretože som predpokladal, niekto iný bude implementovať možná. A teraz to nebude zostavovať ešte. Musím urobiť, čo? Potrebujem prototyp, nezabudnite. Tak som potrebné mať tu void chór (int i);. Takže teraz, keď pôjdem tu - vlastne, poďme použite väčšie okno. Poďme ďalej a urobiť zbor. Poďme ďalej a urobiť zbor. Použitie nezisteného vydražiteľa i Oh, to bolo hlúpe. Nepotrebujeme argument. Jednoducho to. Kiež sme začali týmto spôsobom. Bolo by to oveľa jednoduchšie program písať. Takže tam. Teraz poďme ku mne terminálovom okne, re-run Clang. A je to tu. To bol naozaj rýchly. Čo sa vlastne práve stalo, keď? No, teraz budem pridávať tlačovú linku, takže môžeme vidieť. Takže mi dovoľte povedať printf, povedzme, že som tu. Dobre, žiadne premenné, necháme to takto. Dovoľte mi, aby som znova spustite make. Dovoľte mi, aby som znovu-run chorus. A poď. Len tak ďalej. Ako stranou, prečo sa nezrútil? Segmentation fault stalo super rýchly predtým. [Nepočuteľné] DAVID J. Malan: Presne tak. Tak to trvá dobu tlače. Je to len má viac práce na počítači v rámci. A je to tu. Segmentation fault. Tak zistíte, ako rýchlo programy beží. Ak si nie ste tlače nič, super rýchly. Ale my stále túto Segmentation fault, pretože to, čo sa deje? No, ak si myslíte, že o tom, ako je váš počítač pamäť stanovený, tento Stáva sa hlavným. Ale tu - povedzme, nazývajú tento refrén, a hovorme tejto chór. A teraz keď to urobím svoje estetiku právo, je to len povedať chór, chorus, chorus, chorus, chorus, chorus, chorus, do najmenších podrobností. A nakoniec, čo sa bude diať? Ak veľký obrázok doslova je to, čo sa práve deje koncepčne? V zásobníku prekročení haldy. Alebo ešte horšie, stačí prekročení všetko, vrátane textového segmentu, ktorý je Nuly a tie, ktoré predstavujú svoj program. Stručne povedané, je to proste super, super zlý. Je to tak? Váš program sa vymkla kontrole. Používate spôsobom viac pamäte, ako ste zamýšľali všetko kvôli hlúpe chyba, v tomto prípade. Alebo v tomto prípade, veľmi zámerne vykonáva funkcie volať seba. Teraz to nie je tak zlé. Funkcia volania sa vlastne má veľkú silu keď ju použijete správne. Osobne som nepoužil správne tu. Takže to nie je tak zlé. Ale fakt, že som vlastne nikdy prestať volať sám je základným slabosť tu tohto programu. Tak kam ideme s tým všetkým? No, čo sa skutočne deje? Keď zavolám prírastok funkcie, ako by sme robili v tých príkladoch, Mám hodnotu ako 1, že som sa prejsť dovnútra Aj odovzdať kópiu číslo jedna. Tak sa stane nasledujúce. Tak poďme do prírastku príklade. A tento chlapík tamto. Tak tu je to, čo sa vlastne deje. Keď som volal prírastok, a ja odovzdať x, obrazovo, čo je tu deje, je to - či budem mať hodnotu 1 uloženú tu, a ja som vlastne volajú prírastok, ktorý sa teraz nazýva refrén - jo, to je hádzanie ma tu. Takže povedzme tento prírastok. A my nevieme, čo to ďalšie funkcie to bude. Takže čo sa vlastne deje, je tu niekde v hlavnej, mám kus pamäť, ktorá je uloženie čísla 1. Keď hovorím, prírastok, ja som s použitím iného kus pamäte, ale teraz som majú kópiu 1. Keď som zvýšte túto hodnotu, to sa stáva 2 - hrozne napísaný na Obrazovka tu. Ale potom, čo sa stane, akonáhle prírastku vráti? Táto pamäť len dostane odovzdaný späť do operačného systému, čo znamená, že všetky ste urobil, je nič užitočného. Ten, ktorý bol pôvodne obsiahnutý v main je stále v skutočnosti neexistujú. Tak kam pôjdeme s tým? No, ukázalo sa, že v pamäti máte tento chrbtom k sebe postupnosť bytov, ktoré si môžete dať veci dovnútra A ukázalo sa, že sme už videli niečo, čo zahŕňa uvedenie veci späť k sebe, aby sa chrbtom k sebe. Čo je reťazec, založený na týždeň a teraz sa týždeň dva? Takže je to len zbierka postáv. Tak to dopadá, rovnako ako si môžete dať čísla v pamäti, podobne môžete dal znakov v pamäti. A akonáhle začneme putting znaky v pamäti späť k sebe dozadu, aby späť, sa ukazuje, že s najjednoduchšie veci, ako je pre sláčiky alebo kým slučka, môžeme určiť iteráciou - zľava doprava cez znakov v reťazci - a začať masírovať ich do rôznych postáv úplne. By sa mohlo stať B. B by sa mohol stať C. Takže nakoniec môžeme vziať Anglické vety, ktoré skutočne zmysel a previesť každý z tých, listy jeden po čase prechádzal našej pamäti počítača vľavo právo skutočne šifrovanie. Takže poďme sa náš päťminútovú prestávku tu, a až sa vrátime, stretneme sa kto tento proces zakódovania informácií. Dobrá. Takže ako sme sa vrhnúť na nejaký krypto a tieto veci tzv pole, dovoľte mi, aby som pauza pre prípadné otázky, pretože mám pocit, že som naozaj trochu zmätené niektorých tieto témy. Takže poďme opraviť hneď, či môžeme. Tak sme sa rozprávali o návratových hodnôt. Hovorili sme o argumenty. A hovorili sme o tomto pojme, ktorý sa vrátime v nasledujúcich týždňoch príde, nahliadnutie pamäte ako celú partiou týchto naukladaných podnosy, aby som tak povedal. Od dolnej hore, tak, že každý zásobník, ktorý sa dal na stack predstavuje funkcia, ktorá je v súčasnej dobe nazýva. Nejaké otázky? Tak čo - skúsim pokladám otázku. Stále kazí, ale teraz to - you've všetci videli chlapcovu tvár. Takže sa vrátime k tomu. Dovoľte mi teda položiť otázku tu. Dovoľte mi, aby som zjednodušiť to späť k tomu, čo bolo predtým, než niektoré z našich predchádzajúcich Q & A. A skutočnosť, že prírastok má otvorenú zátvorku, int číslo, uzavretá zátvorky. Čo int číslo predstavuje? [Nepočuteľné] DAVID J. Malan: argument. Dobre, ale čo je to argument? [Nepočuteľné] DAVID J. Malan: Je nám ľúto, čo to je? SPEAKER 3: Niečo vám prejsť dovnútra DAVID J. Malan: Dobre. Takže niečo, že odovzdáte palcov A všeobecnejšie, je to len vstup. Ak píšete funkciu a túto funkciu je zmysel života, je to niečo trochu iného každom použití, potom jediný spôsob, ako Aby sa tak stalo skutočne sa zdá byť to, aby sa vstupom tak, aby sa môže robiť niečo iné s tým vstupom zakaždým. Takže budete musieť zadať dve veci, keď funkcia má vstupy. Musíte zadať meno, ktoré chcete, aby sa týmto vstupom, čisto pre vlastné pohodlie, takže môžete odkazovať sa na to vo funkcii, ktorá vám yourself písanie, ako som tu v súlade 32. Ale tiež je potrebné zadať jej typ, pretože C je programovací jazyk že len vyžaduje že ak chcete premennú, budete musieť povedať počítači, čo Dátový typ je, z veľkej časti tak, že to vie, koľko bitov sa prideliť pre uvedené premenné. Vzhľadom k tomu, že by mohlo byť šesť - Ospravedlňujeme sa, nebude to šesť. To môže byť 16. To môže byť 8. To môže byť 32, dokonca 64. Ale počítač potrebuje vedieť. Teraz int na ľavej strane predstavuje to, čo naopak? [Nepočuteľné] DAVID J. Malan: Čo je to? [Nepočuteľné] DAVID J. Malan: Typ funkcie, a konkrétnejšie, typ jeho výstupu. Právo. Takže vzhľadom k tomu, vec v zátvorke predstavuje jeho vklad, ak existuje, je vec vľavo predstavuje jeho výstupu. A v tomto prípade, prírastok zrejme vráti int. A tak int je návratový typ tejto funkcie. Čo to znamená vrátiť? Doslova, môžete použiť kľúčové slovo návrat. A potom, keď to, čo sa vracia do pravej kľúčového slova je integer, potom je to skutočne v súlade s tým, čo sme sľúbili. Dalo by sa to urobiť niečo také - ahoj, svet - pretože to je reťazec. Je zrejmé, že je to celé číslo. Takže v skratke, záťaž je naozaj na nás, programátor, ako špecifické k tomu, čo sa vraciame a potom vlastne ísť o vrátení. A potom, aby sa tad jasnejšie kontext - tu je znovu. Kontext - Veľkým prekvapením prichádza len chvíľu. Kontext tu teraz je, že váš počítač je pamäť, opäť, gigabyte, dva gigabajty, čokoľvek. Možno je to viac. Možno je to menej. Ale počítač považuje to, že majú rôzne oddiely. Niečo je tam dole. Niečo iného ide tam. Rôzne veci ide v stredu. A dnes, práve sme začať rozprávať tento príbeh. Ale vrátime sa na tento v priebehu času. Pre túto chvíľu, len kúsok pamäte naozaj záleží, je text segmentu preto, že práve predstavuje nuly a tie, že zvonenie sa na výstup. Takže pri spustení príkazu na klávesnici, ako a.out, alebo double kliknite na ikonu v systéme Mac OS alebo Windows, je váš program načítať z pevného ísť do pamäte RAM. A to zvalil na vrchole RAM počítača, aby som tak povedal. Teraz medzitým, ako váš program spustí a hlavné je volaná v program, ktorý písal alebo program Microsoft alebo Apple písal, niektorý z jeho lokálne premenné skončí tam dole na dne pamäti vášho počítača. Ale ak hlavné volá inú funkciu, ktorá sama o sebe má premenné alebo Tvrdenia, ktoré skončili nad ním. A ak táto funkcia volá niečo, oni skončia nad ním, nad ním, nad ním. A iba raz funkcií sa vykonáva spustením robí balík zásobníkov, tak hovoriť, začnú sa dostať nižšie a nižšie. A to je to, čo potom, v kocke, vysvetľuje, prečo, keď budete volať kocka - alebo volajte prírastok - vy okolo v kópii hodnoty. A čo to znamená, obrazovo je to, že ste doslova písať číslo 1 v inej časti pamäte, meniace sa, že 1-2, v prípade, že prírastok - alebo na 8, v prípade, že kocky - a potom hádzať, že pamäť sa preč akonáhle prírastkom alebo kocky funkcia vracia. Otázka. [Nepočuteľné] DAVID J. Malan: Kde - globálne premenné sú uložené v to, čo je v súčasnej dobe volal inicializované dáta alebo neinicializovaný dát. Rozdiel je, ak máte globálne premenné, a priradiť ju okamžite hodnota sa rovná registrovať, to skončí na vrchole. A ak si len povedať, int x bodkočiarku bez hodnoty, skončí mierne nižšia RAM jednoducho podľa konvencie. Ďalšie otázky. Dobrá. Takže tento obrázok vráti, ako sme si silnejší s tým, čo môžeme urobiť s počítačom. Ale teraz, poďme sa stručne úvod do kryptografie, špecifický druh kryptografia, ktorá sa nerieši všetky problémy sveta, ale to riešiť niektoré z nich. V tomto prípade tu máme niečo, čo nazýva tajný kľúč kryptografie. A tajný kľúč kryptografia, ako už názov napovedá, pochádza jeho bezpečnosť z tajomstiev. Tak napríklad, ak ste späť na základnej škole a ste okolo malé tajomstvo milostný list pre chlapca alebo dievča sa tlakom na - ak chcel odovzdať, že cez publikum, pravdepodobne by sa písať taká poznámka v angličtine alebo aký je váš rodný jazyk, je, skôr si môže zašifrovať. Alebo môžete len poslať textovú správu v týchto dňoch. Ale možno v skutočnosti odovzdať im odkaz v celej triede. A k tomu to bezpečne, tak aby vaši priatelia a učiteľ Neviem, čo píšete, môžete prísť s pomerne jednoduchou algoritmus - mladý, že ste mohol byť - len vyškriabať slová. Takže namiesto písania, môžete si napísať B. Miesto B, môžete si napísať C. Miesto C, môžete napísať D, a tak ďalej. Alebo by ste mohli prísť s sofistikovanejšie preklad listov na rôznych písmen. Ale úlovok je chlapec alebo dievča, ktoré posielate na vedomie potrebuje niečo vedieť. Čo je to, čo, samozrejme? Rovnako ako to, čo vaše tajomstvo. Rovnako ako to, čo je, že mapovanie medzi AS a BS a CS a DS? Je to jednoduchým pridaním, aby som tak povedal, na každú z listov ísť od A do B, B a C? Je to zložitejšie, ako to? Takže vy a vaša rozdrviť potrebujete mať túto tajnú informáciu. Ale je tu trochu catch-22 tu. Ak je to vôbec prvýkrát, posielate milostný list prostredníctvom triedy, ako je ten chlapec, alebo dievča bude vedieť, čo je tajomstvo ešte je? Takže tajný šifrovací kľúč nevyrieši všetky problémy sveta. A je to vlastne vzťah, ktorý sa vrátime do k semester Koniec. Podobne, žiadny z nás asi niekedy poslal - podobne, sa väčšina z nás nevie niekto, že pracuje, napríklad na Amazon.com. A napriek tomu, mnohí z nás pravdepodobne kúpil veci na Amazon.com. A my sme sa učili predpokladať, že tieto e-commerce transakcie sú bezpečné. Je to tak? Adresa URL pravdepodobne hovorí https. Tam je možná hlúpa ikona visiaceho zámku niekde. Tam je nejaká kryptografie zabezpečenie informácií o kreditnej karte medzi vami a Amazon.com. A napriek tomu, ak kryptografie znamená vedieť, nejaké tajomstvo, a napriek tomu nemám Poznáte niekoho na Amazon, a ja som rozhodne nie sú usporiadané akékoľvek Tajomstvo s niekým na Amazon, ako sa môj počítač, alebo môj prehliadač robiť toto? No, ukázalo sa, že je to iné typy kryptografie celkom, ktoré rieši tento problém. Ale pre dnešok, budeme sústrediť na jednoduchý, kde si môžete dohodnúť vo vopred vedieť nejaké tajomstvo, rovnako ako plus 1 alebo nejaké mapovanie medzi AS a BS. A proces kryptografie všeobecne zahŕňa to. Máte nejaký obyčajný text, je znázornené tu vľavo. Môžete ho spustiť cez nejaký druh algoritmu alebo postupu pre šifrovanie ho. Možno, že to len sa stane B, B sa stáva C. A potom skončiť s šifrovaný text. Medzitým, akonáhle váš rozdrviť dostane tajnú poznámku, on alebo ona má potom dešifrovať to tým, že všeobecne zmeny tohto algoritmu tak, aby si späť na obyčajný text. Teraz tam sú fyzické inkarnácie tohto. Napríklad, to je malé tajomstvo dekodér krúžok. A to je krúžok v tom zmysle, že sú dva vytočí tu. Na vonkajšej okraji tejto veci, je tu písmená A až Z, aj keď to v náhodnom poradí. A na vnútornej strane, je to vlastne niektoré čísla, je taká, že s týmto krúžok, môžete trochu zase zvonka, ale nie vo vnútri, aby line up čísla s písmenami. A v klipe, ktorý sa chystáte vidieť - z ktorých niektoré môžu byť vidieť 24/7 okolo Vianoc z filmu s názvom Vianočný príbeh. Uvidíte, že malý Ralphie bol tak dychtivý zistiť, čo malý sirota Annie je tajný odkaz bol k nemu, ktoré boli oznámené, myslím, že vo tvorí numerických správ na sériovom krabici. A vy ste musel zbierať všetky tie malé karty, ktoré boli dodané v obilí poľa. Vy ste mali na e-mail im palce Vy ste mali dostať späť tajný dekodéru prsteň, takže si môžete konečne prísť čo je mapovanie medzi písmenami a číslicami, alebo písmená a písmená. Tak som vám tento krátky klip z A Christmas Story motivovať PSet 2 a naša diskusia, vo chvíli, polí. Takže tu máme Ralphie. [PREHRÁVANIE] -Či už je to všetkým známe a rôzne, že Ralph Parker je vymenovaný člen Little Orphan Annie kruhu tajné a je oprávnený ku všetkým so cťou a výhody vyskytujúce nej. -Signed, Little Orphan Annie. Podpísal, Pierre Andre! V atramentu! Vyznamenania a výhody, ktoré už vo veku deviatich. Poď, dáme sa do toho. Nepotrebujem All That Jazz o pašerákov a pirátov. -Počúvajte zajtra večer na záverečnej dobrodružstvo Black Pirate Ship. Teraz je čas na tajné správy Annie pre vás členovia Tajného kruhu. Pamätajte si, deti, môžu len členovia tajnej kruhu Annie dekódovať Annie je tajný odkaz. Nezabudnite, Annie je v závislosti na vás. Nastavte svoje špendlíky B2. Tu je správa. 12, 11 - -Ja som vo svojom prvom tajnej schôdzke. -14, 11, 18, 16 - -Pierre bol vo veľkej hlasovej večer. Mohol by som povedať, že dnešná správa je naozaj dôležité. -3, 25. To je správa z Annie sama. Pamätajte si, že nikomu to nehovorte. -90 Sekúnd neskôr, som v jedinej miestnosti v dome, kde deväťročný chlapec mohol sedieť v súkromí a dekódované. Aha, B. som išiel na ďalšie. E. Prvé slovo je byť. S. Prichádzalo to teraz ľahšie. U. -Oh, no tak, Ralphie. Musím ísť. -Budem hneď dole, ma. -Gee výtvarník. -T, O. Uistite sa, že. Uistite sa, že to, čo? Čo bolo Little Orphan Annie snaží povedať? Uistite sa, že to, čo? -Ralphie! Randy má ísť. Mohol by si prosím prísť? -Dobre, ma. Hneď som von. -Bola som bližšie. Napätie bolo hrozné. Čo to bolo? Osud planéty môže visieť na vlásku. -Ralphie! Randy má ísť. -Budem mať pravdu von, preboha. -Gee, skoro tam. Moje prsty letel. Moja myseľ bola oceľová pasca. Každý pórov vibrovaním. To bolo skoro jasno. Áno, áno, áno, áno. -Uistite sa, že piť svoju Ovaltine. Ovaltine? Podradný komerčné? Skurvysyna. [END videoprehrávanie] DAVID J. Malan: Tak tu to máme kryptografiu. Tak ako v počítači môžeme ísť o zavádzanie alebo predstavujúce veci, ako je tento? No, my potrebujeme spôsob, ako vyjadriť seba trochu pružnejšie než naše premenné, doteraz dovolené. Sme mali ints. Sme mali znakov. Sme mali plaváky a dvojlôžkových a niekoľko ďalších. Ale to sú jednotlivé kusy pamäte, ktoré nie sú naozaj nám umožňujú vyjadriť veci, ako slov a viet a fráz. Naozaj, sme len také veci reťazca. Sľúbili sme, že je to naozaj len zjednodušenie v CS50 knižnica, ktorá sme v úmysle odtrhnite. A tak poďme začať robiť, že tu. Nechaj ma ísť ďalej a otvoriť súbor - Všetky tieto súbory sú k dispozícii ako obvykle on-line - volal array.c vyriešiť problém nesúvisí s reťazcami, ale že maľuje obrázok tu o tom, ako by sme mohli použiť niečo ako pole. Pole je dátový typ. Je to typ premennej, druhov, ktorý má viac menších dátových typov vnútri neho chrbtom k sebe k sebe dozadu. Tak napríklad, ak chceme napísať malý program, ktorý vám dáva kvíz priemer na kurz ako 50, ktorá má dva kvízy, mohli by ste veľmi ľahko napísať tento program - na základe aj na niektoré z minulého týždňa materiálu - pomocou GetInt a pár premenných. Int quiz1, int quiz2, a je to celkom jednoduché. Možno je to 10, 20 riadkov kódu, max, realizovať program, ktorý sa spýta užívateľ na dva kvízy skóre a potom vypočíta ich priemer pridaním spoločne, delenie dvoma, a potom tlač výsledkov. By sme pravdepodobne mohli urobiť celkom ľahko teraz po niektoré počet minút. Ale problém je, že predpokladám, že 50 mala tri kvízy alebo štyri. Predpokladajme, že ste chceli použiť rovnaký program pre triedu, ktorá mala týždenný kvízy. Premýšľajte o triedy, ktorá sa raz týždenne kvízy. Ak je ako 16 alebo týždňov, v semestri, teraz máte 16 premenných - int quiz1, int quiz2, int quiz3, int quiz4. Akonáhle začnete vidieť túto redundanciu, tento kopírovanie a vkladanie kódu, mal by začať robiť si prajete tam bol lepší spôsob. A našťastie, pretože pole, tam je. Takže ideme na to. Po prvé, dovoľte mi predstaviť veľmi jednoduchú vec, že ​​sme sa nepoužíva tak ďaleko, ale uvidíte to občas v kóde. To je to, čo sa všeobecne nazýva konštanta. Takže je to konštanta v tom zmysle, že táto hodnota nikdy sa mení. Ľudská konvencie pri vytváraní konštanta je použiť všetky kapitál listy, len preto, že to naozaj stojí v kóde. A špeciálne kľúčové slovo, ktoré používate v C je # define. Takže keď poviete # define, potom medzeru, potom slovo, ktoré chcete použiť pre na konštantnej meno, a potom je hodnota konštanty. Takže upozornenie, toto je odlišné od priradenia niečo premenné. Nie je znamienko rovnosti. Nie je bodkočiarka. To je to, čo je všeobecne známe ako preprocesoru smernice, ale na že iný čas. Pre túto chvíľu, to vytvára nemenný nazýva hodnota kvízy, ktorých skutočná číselná hodnota je 2. Takže kdekoľvek vidíte kvízy, kvízy, kvízy v tomto súbore, ktorý je len číslo 2. Teraz, keď sa pozriem na hlavnú teraz, poďme sa pozrieť, ako to funguje. Spočiatku to vyzerá trochu záhadný. Ale je to všetko veci z prvej týždeň. Požiadajte užívateľa, pre stupne. Ako to urobíme? No, v riadku 22 - to je naozaj šťavnaté časť - Prehlasujem, float, ale nie len jeden float. Som prehlasuje, skôr pole pohyblivou rádovou čiarkou. To je premenná bude nazývaný stupňa, ako vyplýva tu. Ale jediný kus novej syntax potom sú tieto hranaté zátvorky, skutočnosť, že som povedal, float stupňa a potom otvorte konzolu a potom číslo. Všimnite si, či je to konštanta, je to rovnako ako sme to urobili. To znamená, hey počítač, dať mi dva plaváky, a poďme spoločne volať je stupňa. Toto je v kontraste k oveľa nudnejšie procesu, ako je tento. Float grade1, float grade2, a tak ďalej. Takže poľa nám umožňuje realizovať túto myšlienku, ale oveľa menej ledabolo, v takým spôsobom, že môžeme napísať jeden riadok kódu namiesto, povedzme, 16 pre 16 týždeň semestra. Tak som nechcel, aby tvrdo kód 2, pretože ak si myslíte, že o tom teraz logicky - Predpokladám, že budúci rok CS50 zmeny 3 kvízy miesto. A ja som mal číslo 2 tu. Mal som číslo 2 tu. Mal som číslo 2 tu. Mal som číslo 2 tu. To sa stáva veľmi únavné a veľmi ľahko pokaziť a náhodne zmeniť jedna hodnota na hodnotu 3 a chýbať inú hodnotu 2. Takže budem miesto abstraktné toto preč a použiť táto konštanta, že jej názov napovedá, nikdy nemení. A teraz, bez ohľadu na to, či máme rôzne kvízy ešte tento rok alebo budúci rok, som musieť zmeniť na jednom mieste, tu hore. Takže to je všetko, konštanta je. Medzitým, nová pojmovým znakom je to, že z poľa. Takže hranaté zátvorky mi toľko plaváky a umožňuje mi kolektívne nazývajú stupňa tu. Takže teraz sa pozrieme, čo budem robiť. Tu v súlade 24 je začiatok slučky for. To je naozaj nič vymysleného. Je to len pomocou kvízov miesto hard-kódované číslo. Ale nič intelektuálne inak, tam z minulého týždňa. To je len printf. Takže printf ("kvíz číslo% d% d"), pretože chcem vytlačiť dať mi kvíz číslo jedna z dvoch a potom dva z dvoch. Takže je to čisto estetická vec. Ale zaujímavá časť je teraz v súlade 27. Aby bolo možné vyplniť v jednom z dvoch zástupných symbolov s plávajúcou čiarkou hodnota, môžete opäť použiť hranaté zátvorky. V tomto prípade, ja som s použitím aj preto, že to pre sláčiky začala s i rovná akú hodnotu, zrejme? 0. Tak na prvý iterácii tohto slučky, je to, ako ja napísal v kóde. Ale na druhej iterácii tohto slučky, je to, ako ja napísal v mojom kóde. Ale fakt, že som pomocou premennej je perfektný, pretože, ako už názov navrhuje, je to rôzne jej hodnotu na každej iterácii. Takže som vyplnenie tohto poľa jeden bod v čase. Čo to pole vyzerá? No, dôvod, prečo som kreslil to super jednoduchý obdĺžnik na obrazovke tu predtým bol z tohto dôvodu. Pole je len kus pamäte nasleduje ďalší kus pamäte, nasleduje ďalší kus pamäte, a tak ďalej. Takže ak má pole je veľkosti 2, v tomto prípade tu, by som mala robiť podľa písanie v mojich kvízov skóre, ako je tu. Mám 100 na tento jeden. A potom som dostal 99 na tento jeden. Potom je táto pamäť môže vôbec použiť, pretože som sa len opýtal počítač pre pole o veľkosti 2. Tieto štvorce sú tam stále. Je to tak? Stále máte dva gigabajty RAM, aj keď ste len žiada pre dva plaváky. Takže myšlienka polí je, že počítač jednoducho vezme kus pamäte a potom rozdeľuje menšie kusy chrbtom k sebe k sebe dozadu. A tak to je všetko, pole je. Je to súvislá kus pamäte, vnútri ktoré si môžete dať veci. Teraz sa to stane a potom robiť len nejaké nudné aritmetiku. Keby som prejdite tu, to je miesto, kde som sa potom určiť iteráciou cez pole. Som prišiel s súčtu všetkých hodnôt v poli. A potom som použiť koleso funkcie tu skutočne robiť Celkovo delené kvízy. Ale dovoľte mi, aby som mávať ruku na to ako akýsi dosť aritmetiky pre teraz. Ale všetko, čo robí pre mňa nakoniec je výpočet priemeru. Takže prvý kvíz a druhý kvíz, delené 2, a potom tlač to sa ako int. Ale poďme teraz prechod na iný príklad s názvom string1, ktorý maľuje podobný obraz, ale pomocou reťazca. Nechaj ma ísť napred a zjednodušiť tým, len na chvíľu. A odpusť odsadenie pre teraz. Oznámenie v súlade 19 tohto príkladu, mám reťazec od užívateľa. Všimnime si ale to, čo som robil ďalší v radoch 22 vpred. Ja som vlastne iterácie od i do - a to je nový trik - strlen, dĺžka reťazca. To je funkcia, ktorá prichádza s C, že ak odovzdať reťazec, to vám povie si, koľko znakov je v tomto reťazci. To je všetko. Skutočnosť, že je to strlen miesto reťazca dĺžky je len preto, že je to stručnejší. Pred 30 rokmi, sa páčila písať veci ako stručne, ako je to možné. Takže sme stále tento dohovor tu. i + + znamená len zvyšovať aj v každej iterácii. A teraz si toho všimnúť, čo je naozaj zaujímavé. Takže v riadku 24, hovorím počítač, dajte mi charakter, osem bity, a nazývať to c Ale čo je to na pravej strane hovorí? V angličtine, čo to predstavuje? [Nepočuteľné] DAVID J. Malan: Presne tak. Daj mi prvý znak v poli. Alebo všeobecnejšie, daj mi i-ty znak v poli. A uvedomiť si, že je to dôležité dnes, ako počítačoví vedci, sme vlastne počítať od 0. Nemusíte uváženia teraz začať robiť to. Teraz sa majú správať v súlade s počítačom očakávania a počítať od nuly, pretože [0] bude prvý znak v reťazci. [1] bude druhý. [2] bude tretí, a tak ďalej. Takže tohto programu, keď som skompilovať - ​​to je, opäť, string1. Tak, aby string1. A teraz som bežať string1 vo svojom terminálovom okne. Je to čakanie na vstup, tak budem písať, povedzme, Dávidovi. Enter. A teraz sa vytlačí DAVID všetko na rôznych tratiach, pretože upozornenie, čo robím. Ja tlače jeden znak v čase. Teraz nebudeme zachádzať do podrobností dnes na túto tému. Ale ja som odstránil pred chvíľou tejto kontroly tu. Ukazuje sa, že v prípade, že používateľ je nechová, sporné, alebo len zmätený, môžete skutočne nedávajú reťazec obšírnejšie. Ak stlačíte zlé tlačidlo na klávesnici, môžete dať no reťazec vôbec. Alebo ak ste škodlivý, môžete skúsiť vložiť do spoločnosti GIGABYTE, to stojí esej vyplniť tento reťazec. A ak je počítač spustený z pamäte, sa ukazuje, že ideme získať späť túto špeciálnu hodnotu s názvom null. Takže teraz, len viem, že tam je to špeciálna hodnota zvaná null že nám umožní skontrolovať, kedy sme z pamäte, okrem iného. Ale keď otvorím sa teraz řetězec2, všimnete jeden rozdiel tu. Všimnite si, jeden rozdiel tu s string2. S string2, to pre sláčiky je trochu iný. Dovoľte mi, aby som odstrániť nuly, takže môžeme hovoriť o tých niekedy inokedy. Ale to, čo je o pre sláčiky tentoraz? A môžem sa vrátiť k predchádzajúcemu príkladu. Tak to je verzia dva. Toto je verzia jedna. Jedna, dva, jedna, dve. Takže strlen hovor je kde? Je to v prvej časti slučky for. Akékoľvek myšlienky, prečo to robím? Jo. [Nepočuteľné] DAVID J. Malan: Takže nemáme volanie funkcie zakaždým. Presne tak. Spomeňte si na slučiek, ktoré sú super jednoduchý, akonáhle trochu chápať, že toto je inicializácia stav, a aktualizácie. Problém je v tom, že táto podmienka sa deje na každom iterácia slučky. A tak v tomto príklade tu, čo je zlé o tom že toto je moja podmienka? Voláte strlen znovu a znovu a znovu. Ale potom, čo som napísal v roku DAVID, dĺžka tohto reťazca je päť. A že to nebude meniť na každej iterácii slučky, pretože reťazec je stále D - V-I-D. Tak to je náznak, čo sa deje, aby sa stal stále dôležitejšie nápad známy ako konštrukčný rozhodnutie, kde - jednoducho nemajú aby počítač robiť zbytočnú prácu. Teraz rovnako ako plížiť náhľad PSet 2, PSet 2 v štandardnej edícii, je bude výzvou, aby ste skutočne realizovať určitý počet šifier, niektoré počet šifrovacích algoritmov, takže si môžete aj šifrovať a dešifrovať tajné správy, podobne ako na jednej Ralphie tam dekódovať. V hackerské vydanie PSet 2, budeme ísť trochu ďalej. Budeme vám odovzdá súbor od skutočného počítačového systému, ktorý obsahuje celá partia užívateľských mien a skutočných zašifrovaných hesiel, a výzva pre hacker vydanie bude bezva týchto hesiel a obrázok čo kryptografie alebo čo tajomstvo bolo použité skutočne generovanie týchto hesiel. A ak budeme to urobiť pomocou novej funkcie tu o C, ktorá dám stačí demo, známy ako argumenty príkazového riadku. Tak to dopadá, ako si niektorí z vás možno videli v oddiele alebo v učebniciach, Hlavným nemusí vždy byť neplatné v zátvorkách. Ukazuje sa, že hlavnou môže tiež byť písaný ako to, s dvoma argumentmi, argc a ArGV, kde argc je počet slov, ktoré zadáte po v programe názov na príkazovom riadku. A ArGV je skutočná slová. A ako hranaté zátvorky tam naznačujú, ArGV je zrejme poľa. Je to bude reťazec za reťazec po reťazec v pamäti. Takže to, čo budeme môcť robiť, počnúc PSet 2, je niečo také. Ak urobím argv1, ktorý je príkladom vrátime do pondelka, a spustite to, zistíte, že to nevyzerá na nič zatiaľ. Je to len vytlačí jeho vlastné meno. Ale keď poviem zbohom triedy, všimnite si, že tento program zrejme opakuje nad každým zo slov, ktoré boli zadané na príkazovom riadku. A prostriedky, ktoré získame prístup k slov, ktoré užívateľ zadali na príkazovom riadku je zmena hlavné, počnúc tento víkend, od int main (void) int main (argc, ArGV). A tak sa zrodí argumenty príkazového riadku. A akonáhle sa dostanete naozaj sofistikovaný na to, budete môcť písať Naozaj Tripp programy, ako je tento, ktorá sem ide nad rámec niektoré funkcie, že sme urobili tak ďaleko, ale všetko celkom silný. Takže necháme to s tým na obrazovke. A uvidíme sa v pondelok.