[Powered by Google Translate] DAVID J. Malan: Dobře, to je CS50, a to je Začátek týdne dva. Děkuju. Začněme zde s telefonní hovor. Chystám se vytočit 617-bug-CS50. CS50: To je CS50. Pro raketoplánu Boy, stiskněte 1. Chcete-li začít znovu, stiskněte tlačítko 9. DAVID J. Malan: Tak řekl pro Shuttle Boy, stiskněte 1. Takže budeme stiskněte 1. CS50: Jaký je váš původ? Pro quad, stiskněte tlačítko 1. Mather, stiskněte tlačítko 2. Boylston, stiskněte tlačítko 3. Lamont, stiskněte 4. Mem Hall, stiskněte tlačítko 5. Chcete-li začít znovu, stiskněte tlačítko 0. DAVID J. Malan: Budeme stiskněte 1 pro čtyřkolky. CS50: Další shuttle listy téhle chvíli na odpoledne 01:10, a pak na 13:20, 13:30, 13:40. To je CS50. DAVID J. Malan: Tak to je CS50 hlas. A to je příklad druhů závěrečných prací, pro instance, můžete ukousnout směrem konec semestru. Například, že existuje shuttleboy.cs50.net - vlastně projekt, který jsem poprvé psal po užití CS51 zpět, když jsem byl vysokoškolák. A inspirace zde bylo tehdy, všechno, co měl, byl vytištěné plány shuttle bus, a tam nebyl žádný Pojem hledá věci on-line. A tak nějak jsem holubice v jednom víkendu, přelije přes vytisknout plán, a přenést ji do počítačového programu. V té době, počítačový program náhodou napsáno v C. A skutečně běžel jej zadáním Shuttle Boy na bliká výzvu, jako jsme to dělali doposud. Ale v průběhu let, je to vyvinulo do okamžiku Zprávy bot. Je to vyvinulo v poslední době do této stránky, do SMS-nástroj, stejně jako v tomto hlasové nástroj. A to je se zmínit o druzích věcí, které můžete udělat pro sebe tím, že semestr konce. Například, tam, verze SMS kyvadlové Boy děje fungovat takto. Pokud se na vašem mobilním telefonu, odešlete textovou zprávu na 41411 a pak poslat zvláštní symbol sboy, pro Shuttle Boy, následuje A a B, kde A je původ a B je cíl - Například, Boylston Space Quad - co byste měli vrátit během několika sekund je textový Zpráva z raketoplánu Boy říct přesně, kdy Příštích několik raketoplány jsou od tohoto okamžiku bude, že bod B. A to je obecnější příklad toho, co je známo jako pomocí API. Tak například, to je zde právě shuttleboy.cs50.net, Skutečný web-based inkarnací tohoto. Ale údaje, které podtrhuje a další aplikace, které CS50 vyvinula jsou vystaveny všem zde ve formě rozhraní API, rozhraní pro programování aplikací. A to je jen fantazie způsob, jak říct, že lidé jako my na Internet a další strávili nějaký čas vytvoření software, který můžete použít, aby se chytit data z nás a pak stavět své vlastní aplikace na vrcholu tohoto datového souboru. Tak například, to Kyvadlový Boy API strana, která sem se stane, že v CS50 manuálu, v podstatě dokumenty jak můžete jít o žádat CS50 servery pro data. Například, pokud jste obeznámeni s CSV soubory, čárka oddělené hodnoty, to jsou jen jakési rychlé a špinavé Excel-jako soubory. Takže se můžete zeptat Kyvadlová Boy všech dat na všech domů a jejich GPS souřadnice, a budete mít zpět, v podstatě, spreadsheet, jako že pak můžete přečíst v programu vlastní a pak generovat výsledky, stejně jako kyvadlová Boy sám se stane, že dělá. Pro ty známější, více moderních datových reprezentací patří JSON, JavaScript Object Notation. Něco se vrátí k vám k konec semestru. Ale znovu, to je jen jeden z několika vlastního API CS50 je. A zajímavá věc je nyní, v těchto dnech, Facebook a Twitter a Google a skoro každý populární webové stránky z tam má nějaký API, což znamená, že pokud si přečtete dokumentace na svých internetových stránkách, se přihlásit k účet, pak můžete začít psát software na vrcholu bez ohledu na nástroje, nebo údaje, které společnost poskytuje tam. A tak jeden z našich vlastních výukových kolegy o pár let zpět napsal verzi Mac tohoto. Takže na odkaz s názvem Mac zde vlevo nahoře, můžete skutečně stáhnout Mac OS widget, který běží na vašem vlastním počítači Mac, aby učinili stejné druhy věcí. Takže je to všechno o budování na vrcholu dat, jako jsou tyto. Ale o tom ke konci semestru. Takže pojďme ponořit do opravdu rychle k chybě, jen trochu dostat věci zahřeje dnes, a vzpomenu na některé věci, které jsme se na poslední týden. Zejména, nechte mě jít napřed a vytáhnout, řekněme, tento příklad zde. Buggy1.c, to je k dispozici na internetových stránkách kursu kdybyste Líbí jej stáhnout a hrabat kolem sebe. Ale pojďme přiblížit zde na tomto poměrně krátkém programu, a jen super-rychlé rekapitulace některých ze základních stavebních bloků, které opravdu se chystáte jen začít užívat za samozřejmost. Takže modré věci, v řádcích 1 až 9, jsou jen softball otázky. Tak to jsou jen komentáře. Nemají funkční význam. Ale oni jsou komentáře v tom smyslu, že to bere na vědomí, že Já, člověk, se na sebe tak, že v přednášce a po přednáška, mohu vlastně vzpomenout, co tento program dělá, aniž byste museli číst přes to řádek po řádku a obnovovat historii v mé mysli. Navíc, když jsem předat tento program někomu jinému, jako je si, že je to mnohem jasnější pro vás, protože připomínek, jako je tato, co program je skutečně dělá, nebo alespoň to, co Program to má dělat. Zda je či není, že je to správné, je jiná věc úplně. Nyní, v C, s multi-line připomínky, připomínají, že on-line jeden tady je magický symbol, / *. To znamená, že tady je začátek komentáře. A na ničem jiném nezáleží, dokud se nedostanete na konec zakončení, který je * /, naopak. Takže skutečnost, že mám 80-nějaké podivné hvězdy zde od zleva doprava, je opravdu jen estetický detail. To nemá funkční význam. Nyní, jak o souladu 11? Co to dělat v Laicky řečeno? Co je to? PUBLIKUM: Zahrnuje standard. DAVID J. Malan: OK, dobře. Takže to zahrnuje stdio.h knihovnu. Takže co to znamená? No, v tomto souboru, stdio.h, jsou celá parta funkce prohlášení - to znamená, že kód, který někdo napsal. A dokonalý příklad funkce, která je deklarována v stdio.h je - které oblíbenou teď? Takže printf, jeden z nejčastějších z nich použít, určitě brzy, od té knihovny je tam. Kdybych vyloučit, že řádek kódu, zvonění bude ječet na mě něco o použití nepřiznanou symbol. Něco nehlášené je pravděpodobně klíčové slovo, protože jsme neinformovali kompilátor, co printf vypadá Líbí pokud zahrneme tento řádek. A ještě na Zemi, opravdu, co to linka říká, je otevřít tento soubor, stdio.h, všude tam, kde je to na výkon serveru pevný disk, nebo spotřebič na pevný disk, a copy-paste je tady do mého souboru, aniž bych museli udělat ručně. Teď, když jsme se sem na hlavní, zanedlouho začneme škádlit sebe, co int a co void je. Ale teď, pojďme se podívat na tři řádky v rámci 15 až 17. Tady jsem tvrdit, as buggy. Linka 7 ve svých připomínkách říká: "Pokud tisk 10 hvězdičky, ale není. "Proč to netiskne, ve skutečnosti, 10 takové hvězdy? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Přesně tak. Takže si, že začínáme počítat od 0. A to je vlastně konvence v programování a počítačové vědy obecně, začíná počítat od 0 místo 1. A to opravdu jen vychází ze skutečnosti, že, pro instance, když jsme měli osm lidí na jevišti, kdy nikdo zvednutím ruky, byli všechny efektivně nuly. A tak je to jen trochu počítačové úmluvy tak, Proto, kdo počítat od 0. Pokud je to nejnižší číslo, můžete reprezentovat v binárním formátu. Tak tady jsme začali inicializace i na 0. Jsme nastavili i rovná 0. Ale pak jsem udělal tuto chybu tady, říká i je menší než nebo rovná 10. Ale pokud si myslíte, že přes kdybych začal na 0 a pak jdu až 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, já jsem vlastně bude vytisknout 11 hvězd na obrazovce, protože jsem šel do na a rovná 10. Tak snadno opravit tady pak je to, co? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Stačí změnit to na méně než. Pokud opravdu chcete, jsi to mohl udělat. Ale obecně, je, že odsuzoval. A tak začíná počítat od 0, je prostě něco, co byste měli obvykle zvyknout. A teď, co o celé konstrukce ve sama o sobě? Tento řádek 15 demarks cyklu for. Takže, není funkce. Je to jen konstatování. Je to opakování konstrukt, jako jsme viděli v Scratch. A to má tři části. Všimněte si, že zde je první část na v levé části středníkem. Tam je střední část mezi dvěma středníky. A pak je tu pravá část na pravé druhé středníkem. Nyní, první z nich má co? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Zpět tam? Jo? Diváků: Inicializace. DAVID J. Malan: Inicializace. Takže co to znamená? Jsme deklarovali proměnnou s názvem i. Je typu int, protože jsem zadán int i. A já inicializaci i na hodnotu 0. Tak co to vlastně říká? Je to skutečně říká k počítači hej, dej mi dost paměti, dostatek paměti RAM, aby se vešly číslo, a pak dal číslo 0 v tomto bloku paměti RAM. A jako stranou, jak velká je int typicky alespoň uvnitř spotřebiče? Diváků: 32 bit. DAVID J. Malan: 32 bitů. Takže to znamená, že mi 32 bitů, jinak známý jako 4 bajty, a dal hodnotu 0 v něm, což je docela snadné, protože Znamená to jen, vyber všechny bity, které se 0. Takže teď, druhá část je zde podmínka. A podmínka je, jak již název napovídá, je to, co je kontrolována znovu a znovu a znovu o tom, zda je to pravda, nebo ne. Takže je to jen říká proveďte následující řádky kódu - konkrétně linka 16, protože to je jediný členité jeden pod - tak dlouho, jak jsem je menší než 10. A po každé iteraci prostřednictvím tohoto vedení, proveďte inkrementace, který je v tomto případě i + +. Nyní, to nemusí být i + +. Mohlo by to být i -. Ale když jsem to udělal, co se chování děje být z tohoto programu? PUBLIKUM: to bude nekonečná smyčka. DAVID J. Malan: to bude nějaký nekonečné smyčce, pokud budeme mít štěstí po negativním 2000000000 nebo tak. Možná, že věci se zalomí kolem, jen podle povahy konečném počet bitů, které jsme byly přiděleny pro int. Ale je to jistě bude přecházet daleko více než 10 a určitě víc než 11 krát zde. A teď, stejně jako stranou, si uvědomit, že i + + a i - jsou opravdu jen syntaktický cukr. Je to jen zkrácený zápis pro to, co je trochu víc výslovně napsáno takto: i = i + 1. , Která je identická se i + +. Je to prostě vypadá hezčí říct i + +. Je to stručnější, srozumitelnější. A tak většina lidí, že místo. To je však totožný funkčně na to, co jsme právě viděli. Takže ve zkratce, rychlá oprava je zde jen říct iteraci i od 0 po celou cestu až na méně než 10. A pak budeme skutečně dostat 10 hvězd. Tak pojďme to zkusit. Dovolte mi, abych otevřít terminál v dolní části. Nech mě jít do adresáře, který je in A budu kompilovat ručně pomocí Clang pro teď. A já jdu sestavit to jako buggy1.c, Enter. A teď buggy1, proč je tam žádný takový soubor nebo adresář volal buggy1? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo. Takže je to vlastně říká a.out. Takže vzpomínám-li stačí spustit řinčet, kde zvonění je kompilátor, a nemusíte zadat název, který chcete dát do svého programu, to bude výchozí a.out. Takže opravdu, když to ls - oops. A já didn't - Black-and-white problém některé jste museli čelit byla stanovena. Ale dovolte mi, abych to. Tam máme a.out na levé straně tam. Takže musíme běžet a.out místo buggy1. Tak nech mě jít dál a dělat to. . / A.out, Enter. A já jsem zřejmě neměl dělat co? Diváků: Uložit. DAVID J. Malan: Zachraňte mého soubor. Tak, že je snadno vyřešit tím, že udeří Control S, nebo jít do Soubor, Uložit, stejně jako ve většině programů. Nech mě jít sem dolů, je vymazat obrazovku, spusťte jej znovu. A je tu ještě chyba. Takže to, co se děje - PUBLIKUM: Ty jsi zkompilovat. DAVID J. Malan: Ah, dobře. Nechtěl jsem zkompilovat. Stejně jako idiot, dívám se na kód aby viděli, co se děje. Takže zvonění buggy1.c, nyní a.out. A uf, zachránil. Takže to vypadá trochu ošklivá, protože neexistuje žádný nový řádek kdekoliv v programu. Ale zase, že je to jen estetický detail. A alespoň pokud budeme počítat ty, měli bychom nyní vidí 10 takové hvězdy. No, co tento druhý warm-up například? Takže v buggy2, tvrdím, že tato verze také budou vytištěny 10 hvězd, jeden na řádek. Takže tentokrát, mám znak nového řádku, jen aby se věci trochu hezčí. Ale místo toho, co jsem si je to. Tak mě nech dělat řinčet buggy2.c, Enter. Teď je to zase jen a.out. Enter. Vidím jen jednu novou linku, jen poslední nový řádek pohybuje moje výzva na další řádek. A přesto jasně jsem tisk *, pak nový řádek, *, Pak nový řádek. Ale co je to bug tady? Jo? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Přesně tak. Takže na rozdíl od některých jazycích, jako je Python, kde odsazení skutečnosti má funkční význam, v jazyk C - jak uvidíme, PHP, JavaScript - odsazení je opravdu jen pro prospěch lidskému. Takže skutečnost, že jsem odsazený řádek 16 a 17 vypadá skvěle, ale nemá funkční význam zde. Pokud chci oba řádky spustit jako součást pro smyčka, pak musím uvést je do složených závorek tím, že dělá to. Můžete snížit tento roh a vynechat složené závorky-li to Co je případ? PUBLIKUM: Jen jeden řádek. DAVID J. Malan: Jen jeden řádek. Takže to je tak nějak pěkné syntaxi detailu tak, aby nemusíte ztrácet čas psát tři řádky, z nichž dva jsou Složené závorky, stačí napsat jediný řádek kódu. Ale pokud máte dva nebo více řádků, jsme opravdu potřeba udělat. Tak teď se mi zachránit to. Nech mě jít dopředu a znovu spustit zvonění. Pak mi dovolte spusťte a.out, a teď jsem si jim jedno na řádek. Nyní, a.out je opět trochu hloupé jméno pro program. Jak poznám, zvonění skutečně mi název souboru to je více uživatelsky přívětivé, jako buggy2 sám? Trochu jasněji? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: OK, tak jsem se mohl skutečně čerpat velmi uživatelsky příjemný zkratka a jen psát, aby buggy2. Nechci specifikovat. C v tomto případě, a stiskněte klávesu Enter. A co si dělá, je to překládá buggy2.c pro mě žádá řinčet to udělat. Konkrétně, volá řinčet, běží řinčet pomocí mnohem více argumenty příkazového řádku nebo přepínače, než jsem skutečně potřebují. V době, budeme vracet k tomu, co všichni těchto různých mystické dvojdomými výrazy rozumí. Ale teď, to je jen uložení mi problémy s nutnosti pamatovat si a museli psát si všechny ty různé dvojdomými výrazy. A obráceně to nakonec je že teď mám buggy2. Pokud chci udělat ručně, když jsem Místo toho můžete udělat - řinčení-o buggy2 a pak buggy2.c. A to bude podobně mi soubor s názvem buggy2. Takže ve zkratce, zvonění je kompilátor. Udělejte je jen uživatelsky příjemný nástroj, který budeme používat více a více, protože to prostě začíná zjednodušit věci pro nás. A vracíme 0, konečně. Pro tuto chvíli, jen proto, že, ale začneme legraci, že část dnes a ve středu. Jakékoliv dotazy týkající se něco z toho? Jo? PUBLIKUM: [Neslyšitelné] ls v uvozovkách tam? DAVID J. Malan: OK. Když jsem napsal ls v uvozovkách, který byl mi dělají nějaké kouzlo v zákulisí opravit chybu. Zapomněl jsem, jak jsme říkal mnozí z vás na diskusní fóra, zajímavosti - uděláme to teď - sudo yum-y aktualizace appliance50. Jejda, že to je napsána správně. Takže přístroj je jako operační systém. Je to běh tohoto operačního systému s názvem Fedora. A teď, protože mé pomalé připojení k internetu, mám Opravdu hosed to. Takže běží sudo yum aktualizace, jak jsme ti dělat v Problém set, je v podstatě rád běží automatických aktualizací v Mac OS nebo Windows. A důvod, proč pro spuštění tohoto na samém začátku Problém set proto, že když jsme vytvořili přístroj, I zpackal, a náhodou jsem dělal všechny programy vypadají černá na černé obrazovce, což je důvod, proč nejste vidět je Ve výchozím nastavení. Ale nejnovější verze spotřebiče řeší to. A já zařídím, že během přestávky jednou jsem internet připojení. Takže citace jen skrývá svou chybu, velmi diskrétně, zřejmě. Další otázky? Ano? PUBLIKUM: Kde se, aby přišel z? [Neslyšitelné] DAVID J. Malan: Dobrá otázka. Pokud přece dělá pochází? Je Linux program, který je již mnoho let, dokud před CS50. A je dodáván s operačním systémem, jako je Fedora. Nepochází z CS50 knihovny. Ve skutečnosti, jen věci, které přicházejí z CS50 knihovny tak daleko, že jsme viděli, jsou GetString, GetInt, všichni ty si funkce, a slovo řetězec, a na některé rozsahu, slovo bool. Ale budeme dráždit, že od sebe, když jsme do toho ponořit do CS50 Přístroj sám o sobě. Takže ano, ještě jedna otázka zde. PUBLIKUM: Když jsi řekl, make a pak buggy, jak dělá Počítač vědět [neslyšitelné]? DAVID J. Malan: Dobrá otázka. Takže když stačí spustit, aby buggy1 nebo se buggy2, jak to, aby vědět? Takže ve výchozím nastavení, pokud zadáte, aby buggy1, aby vzhled pro soubor s názvem buggy1.c. A pak to provede příslušné řinčet příkazy, čímž přepíše výchozí výstupní soubor s názvem a.out. Ve skutečnosti, když se podíváme na to, co dělat, co - pojďme ukončení tohoto. Pokud se podíváme na to, co dělat se skutečně dělá, aby buggy2, je to už aktuální. Dovolte mi tedy odstranit rm příkazu, Program jsem psal dříve. Psaní Y-E-S potvrdit, že chci odstranit. Kdybych teď udělat, aby si všimněte, že v této velmi dlouhé řadě, tam je to poslední věc, kterou tady,-o buggy2. Všechny značka dělá se kolem tohoto argumentu, tak mluvit, Řinčet, takže nemám psát sám. Dobře, tak rychle pár administrativních oznámení. Takže pro oblasti, které oficiálně začalo letos Neděle, budete vždy chtít, aby, pokud máte jednu, notebook. Pokud nemáte notebook, se dostat ven mi klesá mi e-mail. A budeme vymyslet postup. Co obecně najdete v sekci je, že jsou součástí koncepční, část hands-on. Budeme konkrétně využít část otázek, část Tento týden je problém set, projít některé z koncepční materiál z přednášky. A to je vše v aktuálním problému sady. A budeme také ponořit se do některých hands-o činnosti, někdy které budou muset být předloženy, někdy která nebude. Například, tento první týden, že to znamenalo, stejně jako warm-up cvičení. A zjistíte, že tyto problémy jsou opravdu jen to. Jsou znamenalo velmi malý, ale ne nezbytně triviální programy napsat, které nejsou nutně vzrušující samy o sobě, ale jsou zde dobré možnosti pro cvičit se syntaxí, s novými funkcemi, v pohodlí sekce, kde budete mít několik svých spolužáků prezentovat jako stejně jako vaše TF. A co budeme dělat v průběhu času, je použít nástroj nazvaný CS50 prostory, , kdy místo jen pomocí CS50 Appliance, budete si muset vybrat místo toho jít na webovou stránku v prohlížeči, kde si budete moci psát kód v okně prohlížeče při sekci. A pak, když se přihlásíte, můžete vaše vyučování kolega pak zobrazí co to je píšete na obrazovce ve vašem prohlížeči Okno se na přední části třídy, ať už anonymně nebo veřejně, tak, že on nebo ona může pak projít s tví spolužáci, co jsi udělal dobře, co jsi neudělal dobře. A opět, buďte ujištěni, to vše může být pěkně anonymní. Ale to bude pěkná příležitost pro mnohem více interaktivita, než něco jako přednášky umožňuje. Mezitím, budeme mít tyto věci nazvaný výborný profily, které jsou volitelné, ale jsou otevřené pro každého v třídy, takže můžete udělat více společně pro Problém nastavit jednu. Tady je plán. To je také zveřejněn na domovské stránce cs50.net. Všimněte si, že tam bude hacker specifické jeden zítra odpoledne. A budeme točit jeden dnes a jeden zítra a post ty on-line do 24 hodin. Takže pokud nemůžete provádět žádné z těchto časů, ne se bát. A opět, plán je nyní online na cs50.net. Pokud jde o krájení sám, měli byste se dostali email pokyn, abyste šli do kurzu domovskou stránku najít z vašeho oddílu. Je-li život se změnil a je třeba změnit bod, není problém. Vraťte se na tuto stejnou adresu URL, cs50.net/section, singulární, a budete vyplnit podobný formulář, takže můžete pak nám své preference. A budeme sledovat do konce týdne, jak na to, co můžeme ubytovat. Minulý týden, připomenout, že jsme navrhli pomocí CS50 diskutovat, Předmět je diskuze nástrojem, v přednášce. Takže jsme měli 40 otázek, které byly položeny a zodpovězena během přednášky. Takže to vypadalo, že funguje dobře, takže budeme pokračovat se snaží udělat to. Pokud se během přednášky, to není jen pocit, pohodlné zvyšování tvá ruka, není problém. Přejít na cs50.net/discuss, psát tam, a jeden z našich výuky chlapi budou buď přijmout elektronicky nebo zvýšit jejich Použité vaším jménem anonymně se zeptat, v závislosti na povaze otázky. A, pokud jde o zpětné vazby, bude obecně psets být vrátil do týdne. Vzhledem k tomu, že trvá chvíli pro oddíly pro dosažení rovnováha, první Pset, 0 a 1, se trochu zpoždění, neboť se věci uklidní. Ale zůstaňte naladěni na to v příštích týdnech. Dobře, tak mi dovolte dát na můj vážný hlas na chvíli. Takže je to vlastně zajímavé klima být s tuto diskusi, co se všechny jiné děje na akademické půdě s ním související. Ale CS50 má jistě své historii této konkrétní téma, v jak hodně jako každý rok, tento kurz, pro mnohé let, Ad-desky zhruba 3% třídy. Tento poslední rok, 2011, CS50 Ad-Boarded 35 studentů. To není, myslím, že vzhledem k nedostatku jasnosti. Si uvědomit, že se v průběhu jeho osnovy, tam je strana Prohlášení o vysvětlení, kde linky jsou. Tentýž prohlášení se opakuje na každém jednom z Problém nastaví na straně jedné. Tak jsem zmínil to dnes opravdu jen, aby se lidé mající na paměti to. A my jsme se snažili různé věci. A to, co jsem si myslel, budeme dělat dnes je jen chvilku na vlastně se podívat na některé z posledních případů, které mají přijít. Spíše než udržovat tyto jako malé špinavé tajemství, ve skutečnosti poukázat na to, co studenti udělali a jak jsme objevili to a to, co opravdu zastřešujícím motivace je pro i tenhle rozhovor. Takže s tím řekl, že linka je v podstatě to - dle osnov, jste vítáni, doporučujeme, aby mluvit se spolužáky. To je celý smysl má tato spolupráce úřední hodiny v Annenberg a povzbuzování lidí k Závěrečný projekt spolupracovat. Ale linka je vypracován, když přijde čas, aby skutečně psát vaše konečné řešení. Mluvení v angličtině, v pohodě, mluvit v pseudokódu, úplně v pohodě. Emaily spolužák si PSet, nechat je prohlédnout na obrazovce jako hands pokračovat v psaní, přes čáru stejně. Líbí se podívat do učebních osnov pro jednotlivé linky. Ale jen dokresluje obraz o tom, jak je to bohužel reality, si uvědomit, že existují webové stránky tam, že mají řešení z této třídy a mnoha dalších tříd. Skutečnost, že jste vy nebo přibližně 3% z vás ví, že toto existuje Znamená to, že víme, že to existuje. Skutečnost, že existují stránky jako to, kde se může zaplatit někoho, kdo skutečně udělat váš problém sady - to bylo skutečný případ, který přišel loni. To je webové stránky s názvem odesk.com. A Tim bylo jméno osoby, která byla zde vysílání na tento web a požádal někoho, aby mu PSet 7 v tento konkrétní případ. No, odesk.com je velmi Google-moci, a my se velmi dobrý Googling. Také zde existují místa - a tohle je spíše otřesné, upřímně řečeno. [Smích] DAVID J. Malan: legrační věc, o tomto webu, je-li čtete stránku O, mluví o jejich firemní kultura a jak zákaznický servis je jejich číslo jedna prioritou, aby se ujistil, že vaše úkoly se obrátil na čase. Ale ve vší vážnosti, opět skutečnost, že by tyto stránky existují, si uvědomit, my taky, jsou vědomi Tyto druhy míst. A aby vám pocit, co tvoří tuto obecně trvá, jsme obvykle nemají velké aféry, kde se lidé spolupracují na jakékoliv masovém měřítku, ale spíše je tato pozdně noční chvíle slabosti, kde máte tak co dělat, je to 04:00, jste vyčerpaná, a myslet na sebe, dobře, nech mě stačí se podívat na mé spolubydlící je nebo mého přítele kód nebo podobné. A projevy to bohužel zahrnují Student Předložením něco takového a Student B předkládání něco takového, což jistě v počítači věda třídy, je pozoruhodně snadné pro počítačové vědce k detekci se softwarem. To je další obyčejný paradigma, kde jste druh pracuje po boku někoho, možná mluví v Anglicky, dobře, pseudokód. Ale pak přijde čas na skutečně předložit, a psets Jen si vyměnili prostřednictvím e-mailu nebo Dropbox nebo podobně. Ale v pokusu, aby to méně zřejmé, že toto je co se stalo, pak je to to, co se nám. To taky, nevypne se dobře psané kusy software, jako bychom měli skutečně odhalit tyto druhy věcí. A skutečně to, co děláme, je běh software, který srovnává všechny letošní podání proti všem minulý rok je podání, proti všemu, co jsme našli na Internet, proti každé pracovní stránkách venku. Je to všechno velmi automatizovaný. A tak jsme to opravdu ve velkém spravedlnosti na 97%, kteří jsou opravdu funguje své prdele v tomto av dalších třídy a uvedení do všech tohoto úsilí tak, že práce oni nakonec předloží je jejich vlastní. A můžu jít na věky. To je jen několik z loňských případech. Několik studentů nám tyto soubory shodně pro PSet 2, Pset 3, Pset 4, Pset 5, Pset 6, Pset 9. V tomto případě, je to kvíz 0 a v posledním roce, kdy dva Studenti nám shodně tuto větu z mnoha jiní, "Žádost typu -" tečka, tečka, tečka. Takže i ve třídě 600 jsme to zjistí na předložené kvízy. Takže ve zkratce, tento - upřímně řečeno, nesnáším mít tento druh konverzace - ale to je opravdu úmyslné úsilí v letošním roce, aby se pokusili snížit toto číslo. Protože i když jsme říkají, že tyto druhy věcí každé rok, myslím, že realitu že pobýval na něm několik více sekund, než je obvyklé, a vlastně jen poukazuje na že to, co se může zdát jako, eh, ne tak velký problém, alespoň si vzpomenu na tomto konkrétním okamžiku, a to jak v spravedlivě přiznat sami a na své spolužáky zde. Takže pokud budete mít jakékoliv dotazy ohledně kde je hranice je, prosím, jen natáhnout ruku ke mně osobně. Ale odpověď je vždy naprosto zdůraznil Na last minute, hotovosti v pozdní den. Nebo jestli je to věc, že ​​nemá žádné pozdní dny, upřímně, napište mi osobně. Budeme něco vymyslet. Prosím, nedávejte svůj čas tady na Harvardu v ohrožení. Teď jsem si myslel, že bychom měli náladu, a tak jsem zahrnul jako další snímek. [Smích] DAVID J. Malan: Tato webová stránka byla skvělá. Vlastně jsem trochu roztržitý. Tam je to jeden. A pak tenhle byl úžasný. Dobře, tak si tohoto kotěte pozdě v noci při tato rozhodnutí. Dobře, tak zpět do více zábavy a méně závažné věci, jako je podmínek. Dobře, tak jsme si povídali krátce o nich. To je něco, co je asi dost známé z svět Scratch. A ve světě Scratch, máme tuto potřebu někdy jít dělat vidličky na silnici. Buď to, nebo to, nebo tu druhou věc tady. A když chceme udělat, můžeme použít v C nyní, tuto možnost, pokud else. A pak tady máme booleovských výrazů. Například, Booleovské výrazy tady, můžeme OR dohromady, v tom smyslu, že mají tuto podmínku OR tato podmínka. Můžeme A dohromady, v tom smyslu, že chceme zkontrolovat tento stav, přičemž tato podmínka. A tady máme switch nyní, což není tak podobně syntakticky na ty druhy podmínek, ale nám umožňuje dělat ekvivalent if, else if, else if, else v případě, a jako jednoduše výčet jim případ od případu by případ od případu. Takže jsme viděli ty minule. A pak jsme začali se dotýká věcí, jako smyčky. Viděli jsme jednu z nich před chvílí. Ale jsou tyto další smyčkování konstrukce. Například, tento zde. Takže zatímco (podmínka), dělat tuto věc znovu a znovu. Takže v podstatě, co se zdá být odlišný od tohoto pro smyčce a tento zatímco smyčka zde? To pro smyčce a tento smyčce while. Jo? Co je to? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Dobré. Takže zatímco v cyklu for podmínkou, že je jasně více syntaxe. Tam je to inicializace, je tu tato aktualizace. V cyklu while, je to prostě tento stav. Takže se zdá, že je to trochu zredukováno proti pro smyčka, což znamená, že pokud chceme mít proměnné a chceme mít inkrementace, skutečnosti máme k udělat tuto věc sami. Tak nech mě jít napřed a otevřít gedit. Dovolte mi, abych na ni přepnete zařízení. A řekněme, udělat rychlý malý příklad, že rozlišuje jeden z nich z druhé. A v zadní části mé mysli tady, měl bych říct jednu věc. I výslovně uvedeno jméno Tim. Tim byl vlastně někdo, že student se snažil najít dělat jejich domácí úkol pro ně. Neměli jsme žádné Tim v tomto konkrétním bodě. Takže si uvědomit, abych zveřejněny studenta, to není studentem. Byla to náhodná osoba na internetu dělat věci o serveru proxy v loňském roce. Tak jsme zjistili, že taky. Takže v tomto případě zde, nechte mě jít napřed a otevřít nový soubor. Soubor, Nový. To mi dává kartu zde. Nech mě jít dopředu a uložit jej jako loop.c. Nech mě jít a klikněte na tlačítko Uložit. A pak tady dole, pojďme do toho a začněte psát # Include . Dovolte mi, abych Zoom Teď uděláme int main (void). Teď mě nech jít dál a dělat for (int i = 0; i < oh, 10, i + +). A teď budu pokračovat a to vytisknout hvězdu, která mi dělali dříve. A pak na konci tohoto programu, jsme jen tak vytisknout nový řádek, jen proto, že moje výzva nevypadá všude chaotický. návrat 0. Zdá se syntakticky korektní? Tak daleko. Tak uvidíme. Dovolte mi tedy vzdálíte, jít do mého terminálovém okně. A nech mě jít napřed a spustit smyčku, protože jsem volal toto věc loop.c. Takže si smyčku. Zdá se, že sestavení OK. Dovolte mi, abych běžet smyčku, a teď Enter. A zdá se, že vytisknout 10 hvězd. Takže řekněme, převést tuto smyčky while a vidět, co druhy otázek jsme zakopnout. Takže místo toho, nechte mě jít sem a říct, když jsem je méně než 10 - dovolte mi, abych se zbavit smyčky for. OK, takže máme pár problémů, které v. Takže stav je stejný, ale já jsem samozřejmě chybí inicializace. Jsem chybí inkrementace. Takže to, co by měl kompilátor pravděpodobně řekni mi, když se snažím sestavit tento program? Jo? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Dobré. Takže to bude říkat něco jako neoficiální - v tomto případě, že proměnná i. A skutečně, použijte nehlášené identifikátor i. A tak to je v rozporu s jazycích jako PHP a Python a Ruby, s níž někteří z vás by mohl být obeznámeni, kde můžete to prostě začít používat proměnné chtě-nechtě, a nemusíte se starat o vyhlášení jim explicitně vždy. V C a v jazycích, jako je Java a C + +, musíte být Super explicitní. A pokud chcete proměnnou s názvem i, musíš mi říct, jaké proměnné je. Takže budeme muset opravit takto. Budu muset jít sem a zadejte int i; proto, Jsem deklaroval proměnnou s názvem i. Teď jsem přeskočil jeden krok. Já jsem samozřejmě není inicializována, ale uvidíme, jestli to na Alespoň značek zvonění přestaň si stěžovat. Takže dovolte mi, abych předělal tento program. Dobře, teď je to jen stěžovat z jiného důvodu. "Proměnná" i "je inicializována při použití zde." Dobře, tak to je docela jasné. Inicializován jen znamená nastavení je rovna hodnotě. A my jsme neudělali, takže zkusím rovná 0. Nyní se pojďme zkusit to znovu a znovu spustit zvonění. Zpracovala tentokrát. A já jsem o tom jej spustit. Ale velký starý nekonečná smyčka, protože jsem to udělal inicializace, udělal jsem podmínku, ale já jsem nikdy nedělal jakýkoliv druh inkrementace. Tak jak to mám udělat v inkrementace? No, v cyklu while, to vypadá, budu mít na to uvnitř smyčky, protože podobně jako první týden příklady dělat smyčky konstrukce, jako s ponožky a self-počítání, co jsme museli udělat něco na samém konci, rád se vrátit na další řádek. Co když půjdu do toho a to i + + tady? Pojďme ani zkompilovat to. Chyť mě už. Co je tady špatně? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Tak to rozhodně není int. Je to i. A složené závorky, jako dříve, odsazení nestačí. Takže teď jsem se to postavit. Takže když jsem je menší než 10, vytisknout hvězdu, pak zvyšovat i. A způsob, jakým při smyčka funguje tak, že jakmile hit Spodní část smyčky, která je v tomto případě vypadá řádku 10, to jít zpátky do řady 6, na kterém místě podmínka bude znovu. A pokud je i nadále nižší než 10, uděláme linky 8 a pak 9, pak budeme hit 10, a vrátit se do 6, znovu a znovu a znovu a znovu, tak dlouho, jak jsem je menší než 10. Takže pojďme znovu spustit, aby tady. Dobře, jsme sestavili v pořádku. Dovolte mi, abych znovu-run smyčky. A teď to vlastně vypadá, že pracuje. Takže plusy a minusy tady? No, zatím je to vlastně není celý PLO - tak roztomilý. Dobře, že je - ach, to byla nehoda. Dobře, tak pojďme zpět k cyklu for. Takže pro smyček jsou pěkné, protože jste super explicitní. A i když jsou trochu neohrabaný psát, že je to velmi silný a to vám umožní udělat více věcí najednou. While se nezdá, že obrovské množství hodnoty jen Zatím, protože to vypadá, budeme muset udělat více práce. Musíme dát inicializace sem se aktualizovat tady dole, a musíme mít na paměti, aby to všechno. Tak uvidíme, v čase, který while skutečně půjčit samy do několika různých kontextech, různé údaje struktury, jako seznamy a hašovacích tabulek, co se dostaneme mid-semestr. Ale teď, vím, že tam je to třetí typ známý jako do- while. A my jsme viděli tuto krátce. A to by mohlo být super užitečné s PSet 1. Kdykoliv budete chtít něco udělat, a pak zkontrolujte, zda uživatel spolupracoval, a pokud ne, udělejte to znovu, do- zatímco smyčka půjčuje sebe k tomuto druhu logiky. Vzhledem k tomu, jak objednávat od shora dolů zde naznačuje, to doslovně znamená to. A to znovu a znovu, možná to, co to mělo být? Možná to znamená volání GetInt nebo GetString a pak kontrolou hodnoty GetInt nebo GetString a pak křičí na uživatele, pokud to není spolupracovali a požádal je, znovu a znovu a znovu. Kam chcete udělat něco jednou, pak zkontrolovat nějakou podmínku. Tak pojďme to zkusit. Dovolte mi, abych skutečně změnit to nyní na do-while. A já jdu dál a proveďte následující. Takže postupujte následovně. Pojďme udělat int i = GetInt (), ale pojďme se nejprve sdělit uživateli co dělat. Tak trochu jiný tentokrát. "Dejte mi int". Takže budu používat printf za to. A teď jdu tady dole, a já udělám to když jsem je, řekněme, větší než - uvidíme, i je, řekněme, méně než 0, nebo i je větší než 10. Jinými slovy, chci číslo 1-9, jen libovolně. Takže jsem pomocí kombinovaného logický výraz zde ujistit, že i je menší než 0 nebo větší než 10, ve kterém případ, že bych se to udělat smyčku opět zde. Takže znovu, to - zatímco i je menší než 0 nebo i je větší než 10. Takže teď pojďme dál a udělat to jednou udělali jsme to. Pojďme udělat rychlou kontrolu zdravý rozum. printf ("Díky, i je% d", i). Takže tento jednoduchý program požádá uživatele o int, je si jistý, že je to v nějakém rozsahu, 1-9 včetně, a pak děkuje uživatele připomeňte jim, co právě napsal v, stejně jako malý přece nejsou kontroly. Ale uvidíme, jestli to funguje, jak bylo zamýšleno. Nech mě jít hlavou sem a znovu spustit, aby smyčku. Hmm. "Použití nehlášené identifikátor" i "". To je divné. Myslel jsem, že jsme se rozhodli, že. Stejný jev se ale jiný kód. Jo? PUBLIKUM: [Neslyšitelné] uvnitř dva, musíme [Neslyšitelné]. DAVID J. Malan: Přesně tak. Takže to vlastně vede nás k tématu známé jako rozsah. Ukazuje se, že C, opět, je to opravdu vás doslova. A pokud se vám něco takového, kde si deklarovat int a pak přiřadit mu nějakou hodnotu, ale vy, že uvnitř pár složených závorek, co dělá, je, že C se předpokládá, že chtějí jen ty 32 bitů známé jako i existovat uvnitř souvislosti s těmito složenými závorkami, v souvislosti s linií 6 až 9. Tak jsem je deklarován, a to je přiřazen hodnota v řádku 8, ale jakmile se dostanete mimo linka 9 pod ortézy kudrnaté, i již není v rozsah, abych tak řekl. S-C-O-P-E. Je to již ve správném kontextu. Takže teď není i tak, je to, jako bychom neměli ani prohlásil to vůbec. Takže to, co je oprava a pak na něco takového, pokud Důvodem je to, že i je deklarována v rámci složených závorek, které je zřejmě špatné? Tady? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo. Takže můžeme inicializovat to venku. Tak nech mě jít dopředu a odstraňte z prohlášení části který spočívá I specifikovat typ, a dovolte mi, abych to tady. Takže v řádku 5, nyní říká, že "Dejte mi int." Nazvěme to i. Všimněte si, v řádku 9, nechci to udělat, protože jsem již mají 32 bitů. Nechci se zeptat počítač pro různé 32 bitů. Chci používat tytéž 32 bitů. A teď, protože jsem je deklarována v souladu 5, je to stále legit použít v souladu 11 a řádek 12. Tak zkusím překompilovat to a vidět pokud zvonění přestane řvát. aby smyčku. Takže teď je to "implicitní deklarace funkce "GetInt" je neplatný v C99. "Co je to? Jo? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo. Takže teď, že jsem vlastně pomocí GetInt, to není něco, že právě přichází s C. To pochází z CS50. Takže potřebujeme tady. A nech mě jít zpátky do řádku dole zde a znovu spusťte make. Dobře, konečně. Nyní jsme se rozhodl, že i druhý chybu. Dovolte mi, abych nyní spustit smyčku a uvidíme, co se stane. "Dejte mi int." Dám to 11. Dám to -1. Dám to foo. Dám to 5. A teď to opravdu funguje. Ale řádku změnit z nějakého důvodu zde. Proč se to říct, opakování jedné z těchto časů, ale dejte mi int další třikrát? Proč je to, že chování liší? PUBLIKUM: Dal jí řetězec. DAVID J. Malan: Je nám líto,? PUBLIKUM: Dal jsi jí řetězec. DAVID J. Malan: Jo. Tak jsme to řetězec v této třetí pokus, když jsem napsal foo. Foo je řetězec. Je to samozřejmě není int. A způsob, jakým CS50 provedlo GetInt je, že jsme nekontrolovat, pokud něco je méně než 0 nebo větší než 10 pro vás, protože jak víme, předem, jaké int chcete? Ale můžeme minimálně zkontrolovat pro vás, to si uživatelský nejméně zadejte celé číslo? A kdyby ne, jsme křičet na uživatele zadáním "opakování" na obrazovce. Takže teď máme program, který je smyčkovací. Dobře. Nyní, který z nich je něco jako lepší konstrukce? Takže tohle je místo, kde se věci začnou se dostat trochu chaotický, je Skutečnost, že musíte mít na paměti, jak deklarovat proměnnou sem Chcete-li používat uvnitř některých Složené závorky a mimo. Ale i kdyby to vypadá trochu záhadný na první pohled, jen znovu vzpomenout na jednoduchou logiku. Aby bylo možné použít cokoliv v jazyce C, ať už je to funkce nebo je to proměnná, musíte zahrnout, pokud je to funkce v některých knihovny, nebo budete muset prohlásit ho. Ale teď musíte být extra dbát na skutečnost, že jste prohlášením v pravém rozsahu. Nejste uvedení příliš těsně uvnitř závorek. Dovolte mi tedy skutečně vrátit. Vrátíme-li se k našemu například z dříve, a já jdu zpět na pro int, int i = 0; i <10; i + +, a já to printf hvězdy, jako je tento, a pak zavřete paren, a nyní printf i nyní - Podle stejné logiky, co se stane, když se snažím sestavit tento program? Diváků: Neplatný identifikátor. DAVID J. Malan: Takže je to další neplatný identifikátor, nedeklarovaný identifikátor. Nyní, důvodem je trochu jiný. Je tu samozřejmě žádné složené závorky zde, ale stejné idea, stejný příběh rozsah platí. Pokud jste deklarovali proměnnou jako i uvnitř pro smyčce, i když jste výslovně zapsán kudrnaté šle, myslím, že z nich psychicky ještě, že tam, kde případ i je platná pouze uvnitř smyčky for. To není platné, jakmile se dostanete na další řádek, který v V tomto případě je nyní 10. Takže jen několik otázek, z rozsahu a podobně. Dobře, nějaké otázky? Dobře, takže tohle je triviální malého programu, tisk jen malé hvězdy. Ale uvidíme, jestli si pamatujete tuto píseň zde. To je neuvěřitelně otravné píseň děti zpívali na škola autobus a podobně. Ale co je hezké na tom je, že to má tento cykličnosti, přičemž je to "99 lahví piva na zdi, 99 lahví piva. Vezměte jeden dolů, projít kolem, 98 lahví piva na zeď. "A pak píseň opakuje 97, pak 96, pak 95, pak 94, celou cestu až na 0, pokud jste skutečně dostali, že Pokud na sběrnici. Tak to je pěkný program se trochu nářadí, protože my Bože, jestli byste mohl jen implementovat to s několika řádků kódu, můžete vyplivnout celý text k této song docela rychle. Ale na cestě, můžeme začít hned šprýmaři odděleně některé z těchto základních smyčkování konstrukty a nyní také zavést funkce, které budeme psát sami, návrat hodnot že jsme se projít kolem. Ale nejdřív, proč nejdeme dopředu a vzít naše pět minut rozbít tu? A když se vrátíme, budeme zpívat tuto píseň. Dobře, tak jsme se vrátili. A když říkám, že nyní budeme zpívat tuto píseň, myslím programově, ne slovně. Takže tu máme beer1.c, což je jedna implementace této zvláštní píseň. A jen proto, aby bylo jasno, pro ty, kteří neznají, co ta věc vypadá, nech mě jít napřed a aby beer1, Enter. Nyní mi dovolte běžet beer1, a to, co uvidíme - kolik lahví piva bude? Budu psát 99, stejně jako píseň říká. Enter. A teď, když jsme se procházet - oops - pokud bychom procházet přes to všechno, uvidíme, že Tento skutečně zpívat celou písničku. Počkejte chvilku. Můj scroll bar je trochu zpackal. Pojďme používat větší okna. Takže beer1, 99, tam jdeme. Takže tu máme celou skladbu, zpívaný mnohem rychleji NAVRŽENÝM počítač, než by to mohlo být u nás. Takže upozornění, když jde o cyklickou povahu zde. Říká 99, pak 99, pak "vzít jednu dolů, předat ji kolem, "pak 98. A teď se opakuje znovu a znovu. Takže je to vlastně ideální příležitost pro jakési konstrukce cyklu. Všimněte si, že jsem trochu řezání roh zde. Všimněte si, že říkám "98 lahví piva na zdi, 97 lahví piva na zdi, "a že je to tak že když se dostaneme k jednomu lahví piva, nemám se starat o anglické gramatiky. Ale můžeme také opravit s trochou pokud stav, možná. Pokud je toto číslo je singulární, jděte do toho a říct "láhev", jinak, pokud je to množné číslo, řekněme "lahve". Ale teď, jsem úplně řezání, která roh. Tak se podíváme, co tu máme. Takže máme několik poznámek na vrcholu. Jsem včetně těchto dvou knihoven, as jsme obyčejně byli. A teď mi dovolte přejděte dolů na první skutečné řádky kódu. Řádek 17 začíná hlavní. Linka 21 a 20 má kolik lahví piva bude? A pak jsem zavolat GetInt. A teď mám trochu zdravý rozum kontroly. Tak to je konvence, že budeme nyní začít přijímat na přísněji kontrolovat vstup uživatele. Někdy si prostě nechtějí, aby přiměli je znovu a znovu a znovu. Pokud uživatel šrouby a nespolupracuje, v pořádku. Ukončete a prostě se s nimi vypořádat. A tak to je to, co tady dělám. Jestliže je n menší než 1, já jen tak křičet na uživatele, "Promiň, to nedává smysl." A pak budu libovolně vrátit 1. Takže znovu, je to jen konvence zvyknout. Pro tuto chvíli, si to o víře. Ale až do teď, jsme vždy vrací 0, protože jsme řekli vrací 0 označuje, co? Diváků: Úspěch. DAVID J. Malan: Úspěch, to je všechno. Takže teď, že jsme konečně začínají přemýšlet o tom, non-úspěchy - jinými slovy, rohové případy, chybové podmínky - teď mám nekonečnou nabídku, nebo alespoň čtyři miliardy možné věci, které se mohou pokazit v mých programech. A můžu začít přiřadit jim jednotlivé číslice. Nyní, obecně stačí jen návrat něco jiného než 0. Takže budeme jednoduše vrátit 1 pro teď. Ale důvodem pro vrácení 1 je, že jakmile se vrátíte 1, odhadnout, co se stane se zbytkem programu? To zastaví. To je všechno. Takže skutečnost, že se vracím 1 je účinně zkratování tohoto programu popravu, aby nic pod linii 27 bude pokračovat v provádění. Jakmile hlavní vrátí, že je to. Dobře, takže pokud uživatel nemá spolupracovat a dojdeme řádek 30 protože napsal v legitimním číslo, tady je moje provádění této písně. Tak jsem poprvé vytisknout znak nového řádku, jen pro estetika. Nyní mám pro smyčce. A všimněte si, že dělám věci trochu jiného směru. Nemám dělat méně, než, nemám k tomu + +. Mohu říci, místo inicializovat proměnnou i, nastavte ji rovno n je počet uživatel napsal v, proveďte následující, tak pokud i je větší než 0, pak i - jakmile jste dokončil jeden iteraci tohoto cyklu. Takže můžeme odpočítávat pomocí smyčky for stejně. Nyní, to je docela hodně týden jedna věc teď, s printf. Takže tisku "lahve% d piva na zdi." Print "% d láhve piva. "" Vezmi si jeden dolů, projít kolem. "Tisk "% D lahví piva na zdi." Takže je to stále% d, ale Všimněte si, že argument funkce printf se mění. Po čárkou, já jsem, protože chci říct 99. Po tomto čárkou, já jsem, protože chci říct 99. Po tomto čárkou, mám i - 1, protože chci říct 98 v Tento první iteraci, a tak dále. A teď tady dole, budu muset nějakou blbou malou poznámku. A pak řádek 42, vracím 0 konvencí, znamenat, že všechno je v pořádku. A co když jsem podělal? Co by mohlo běžnou chybou tady být? No, co kdybych náhodou řekl dobře, já chci počítat až 0, chci 0 lahví piva na zdi? Tak jsem řekl, i je větší než nebo rovno 0. Co to bude příznak, který nyní vidím, jestli jsem překompilovat beer1 a spustit? Diváků: Negativní. DAVID J. Malan: Jo, bude to jít negativní. To je off-by-one chyba, neuvěřitelně Běžnou chybou dělat. Pojďme skutečně jít zpět do okna terminálu a to tady, tak můžeme vidět více najednou. Zadejte, 99 lahví piva. Zavřít, ale šli jsme někdy tak trochu příliš daleko. Zpívali jsme píseň příliš daleko, tak, že nyní hit záporné číslo. Takže to není úplně fungovat. Dobře, takže můžeme snadno opravit, že jde zpátky do způsob, jak to kdysi bylo. Ale co jsou některé možnosti nyní zlepšení? No, dovolte mi otevřít beer2.c a přejděte sem a vzít podívej se na tuto verzi. Co je první věc, která vyskočí na vás, jak různé v této verzi zde? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo, takže nic víc jsem, protože došlo k mi víte co, já se ptám uživatele pro n, a pak jsem nastavení i se rovnat k n, a pak měním i, ale já jsem nikdy dotýká n znovu. Tak co to sakra byl bod z vás přidělování další 32 bitů tzv. i jen proto, že mohu mít jinou proměnnou? Takže v tomto případě, tak nějak jsem uznal, že zbytečné charakteristika. A já jsem teď chtěl říct, když n je větší než 0, přejděte dopředu a vytisknout stejnou písničku, předáním n k printf jako Druhý argument, a n - 1 jako druhý argument tady. A pak na každé iteraci tohoto cyklu, jděte do toho a jen decrement n sám. Nyní, funkčně, tento program bude totožné. Kdybych zadejte 99, n začíná v 99. I dekrement, dekrement, dekrement, útlum. Jdu si celou cestu až k "jedné láhve piva na stěna, jedna láhev piva. Vezměte jeden dolů, projít kolem. 0 lahví piva na zdi. "Konec, protože jsem se podmínka správné. Je to větší než 0. Nechtěl jsem, aby tuto chybu. Tak který je lepší, verze jeden nebo verzi dva? Slyšel jsem spoustu reptání pro dva. Proč dva? Co je to? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Oh, dobře. Takže to nepůjde pod 0, ale pamatujte, ve verzi jedna, Originální správnou verzi nešel pod 0 obou. Takže pamatujte, že je to správná verze. Tak ať je to alespoň tyto dvě správné verze. Co je argumentem ve prospěch verze dva být, mmm, lépe? Jo? PUBLIKUM: To zabírá méně místa. DAVID J. Malan: Dobře, tak to zabírá méně místa, ne? Vzhledem k tomu, který se používá verze 32 bitů pro n, a pak další 32 bitů pro i. Verze dvě používá pouze 32 bitů pro n, tak, aby Zdá se, že plus. Ostatní myšlenky? Má někdo chtěl argumentovat ve prospěch jednoho? Jo? PUBLIKUM: Musíte použít další řádek kódu pro n -. DAVID J. Malan: Dobře, jistě. Takže to je fér. Takže to jen, alespoň pro mě - Chci říct, tohle skutečně cítí trochu Messier, skutečnost, že Nemohu nějak zapouzdřit všechny mé logiky v jednom překrásná line, pro smyčce, protože pro smyčce může. Tady, jsem tak trochu se k obratu na této n - Na konci smyčky, protože je to logicky nutné. Ale docela to leští mi špatně, jen proto, že Zdá se odděleně od logiky se zde, i když, znovu, je to nutné. Ostatní myšlenky? Jo? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo. Takže co když místo toho, na konci skladby, chtěl vytisknout znovu název písně? Jako "Díky za hraní 99 lahví piva", nebo něco hloupé takhle? Ale jde o to, co jste chtěli přístup k původní hodnoty. Skutečnost, že jste mutované nebo změnit n na každém iterace, a proto se zničil jeho původní hodnotu znamená, že prostě nemůže dělat, že na konci. Nyní, pravděpodobně jsme jasně nechceme dělat , že v tomto programu. Takže koho to zajímá? Ale to je velmi platný bod. A abych byl upřímný, je to opravdu nikdo správná odpověď zde. Jsou oba stejně správné. Mohl bych být přesvědčen o tom, v obou směrech. Nebudu říkat, že, obecně, je to dobrá zásada, pokud požádal uživatele o nějaké hodnoty a je uložen v proměnné jako n, jen trochu na principu, že je to asi dobře aby, že kolem. A jakákoliv data, která chcete mutovat znovu a znovu, jen dát si kopii této proměnné, jen proto, že jste mají přístup k originálu. Nacházíte se tráví 32 více bitů, ale realita je to počítač, software, dva gigabajty paměti RAM v těchto dnech, a my jsme hašteření přes 32 bitů? Opravdu není tak velký problém. A i na tomto zařízení zde, s polovinou koncertu nebo gigabyte RAM, 32 bitů oproti 64 bitů, není tak velký problém. Jistě dnes, to bude tak ohromen podle velikosti samotném programu, který bude několik set kB, ne-li několik megabajtů, v těchto dnech. Takže rozumné obavy, ne jediná správná odpověď. Ale aspoň to jsou myšlenky, které by se měly začít projít vaší mysli? Protože v PSet 0, i když opravdu jen čekal, správnost, nebo alespoň popření různé chyby, že můžete se setkali, jak jsme vpřed, design bude dalším klíčovým aspektem, a to jak z psaní kódu a také naše hodnocení kód. A tak alespoň dát si na věci, jako je tento. A jen proto, že něco funguje neznamená že je to dobré, neznamená, že je to dobře navržen. A to je jedna z věcí, které výuky lektorů a problém sady nám pomůže škádlit část v průběhu času. No, co asi, řekněme, tuto verzi tady? Dovolte mi, abych něco trochu sexy tady za chvíli. Nejprve mi dovolte se zbavit toho. A teď pojďme vyřešit tento gramatický problém. Takže v této verzi, chci opravit gramatiku tak, aby spíše než jen říct vsunutá s, stejně jako "láhev" nebo "lahve" - Nechci snižovat, aby roh - Chci také dynamicky vytisknout slovo "lahve" nebo "láhev", čímž se pomocí těchto% s zástupné symboly dnes. Tak jsem třeba podmíněně zjistit, jaká je hodnota i. A jestli je to 1, chci říct, "láhev", a pokud je to něco jiného, ​​chci říct, "lahví". Tak zkusme to. Takže pokud i == 1, pak nechte mě jít dopředu a prohlásit - Potřebuji řetězec, tak ať mi to řetězec s1, protože je to První řetězec já se starám o právě teď. Já řeknu "láhev". A pak, uvidíme, string s2 - a já ti to vysvětlím, kam jdu za chvíli - "Lahve". Takže připomenout, že v této písni, musíme být schopni tisknout věci, dvě různá slova potenciálně. Takže když se podíváme zpátky, zjistíte, že když se dostaneme do tento příklad zde, "dvě lahve piva na stěně, dvě láhve piva, vzít jednu dolů, projít kolem ", chci Tento čtvrtý řádek se dnes říká, "jednu láhev piva na zeď ". Tak jsem třeba rozhodnout, chci říct," lahví "nebo "Bottle"? Takže budu libovolně říct, dobře, Jdu nyní deklaruje proměnnou s názvem S1, řetězec jeden, který je dostane zapojený sem i zde, protože tato slova jsou vždy shodné, jen proto, že z povaha písně. A já jdu volat s2, co slovo chci nakonec se objeví tady. Nyní, doslova, 99 krát z 100, to bude být stejný v obou těchto případech, protože 3 je množné číslo, 2 je množné číslo, 4 je množné. Ale v tomto případě rohu, kde se dostaneme do 2 a pak 1, nebo dokonce 1 a pak 0, musím tuto logiku. Tak jsem se strávit nějaký čas v mém kódu dostat toto právo. Takže pokud jsem to, když jsem == 1, pak nastavit s1 rovná "láhev" a s2 rovno "lahví", protože to bude pro 1 Láhev, a to bude pro 0 lahví. A tohle, co to představuje? Jen aby bylo jasno. To je jen poznámka. Takže skutečnost, že můžete mít jednořádkové komentáře se rozumí vás může vyjádřit svůj kód, jako je tento, ale další společné paradigma, také je, že pokud máte super krátkou frázi, která Chcete se vžít a je to jen čitelnější, aby to přímo na konci řádku kódu, můžete naprosto něco takového. Takže co teď, pokud to udělat? Else pokud je i není rovno 1. Takže bang rovná - Vykřičník je známý jako "bang". Takže bang = 1. Takže pokud je i není rovno 1, co mám místo toho chcete dělat? No, první slovo, které jsem chci být co? Takže řetězec 1 by měla být "lahve" pro pluralitních lahví, a pak to bude množné "lahve" dobře, protože teď. A uvidíme, jestli to tak skutečně dostane k nám na kde chceme jít. Takže teď, když jsem se posunout dolů tady, všimněte si, že jsem připojením nejen já, ale s1. Jsem zapojíte i a S1. A pak se zde, že jsem mínus 1, který je stejný jako před, ale s2. Jinými slovy, chci anglické slovo změnit na základě Na základě této logiky. Nyní je tu už některé problémy v tomto kódu. Co je rozbité už z brány tady? Jo? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Přesně tak. Takže jsem už porušil lekci rozsahu. Tak jsem prohlásil s1 a s2, ale udělal jsem to uvnitř Složené závorky, což znamená, jo, bude tento kód fungovat až do řádku 42, ale jakmile jsem narazila řádek 43, hádejte co ne již existuje? No, víš co je již v rozsahu - ani s1 nebo s2. Takže musíme to opravit. Dovolte mi tedy odstranit prohlášení. A nechám názvy proměnných a odstranit to tady a odstranit to tady. A v tom, co řádky by měly opravdu prohlásit tyto věci? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo, tak asi přímo tady, 33-ish. Takže řetězce s1 a pak řetězec s2. A ukázalo se, já to zvládnu. Pokud jste prohlašuje dvě proměnné stejného typu, můžete skutečně stačí použít čárku a to, že v C. Všechny Dobře, takže teď mám dvě proměnné - s1 a s2. Já přiřadit jim hodnoty v těchto podmínky zde, nebo zde. A pak jsem pomocí je dole. Jak dobře se to nyní bude fungovat? No, je to stále trochu buggy, ale pojďme alespoň vidět jak daleko jsme se dostali. Tak nech mě jít dopředu a dělat beer3. Je to beer3? Jo, to je beer3. A teď mi dovolte pokračovat a spustit beer3. 399 99. Pravděpodobně můžeme přeskočit většinu z nich. A tady dole, podívej se na to. "Jedna láhev piva na zdi, jedna láhev piva, se jeden dole, projít kolem, 0 lahví piva na zdi. " Ale já jsem kreslení pozornost pouze polovinu roztoku. Druh podělal zde. Takže se zdá, že rohové případy nastávají, pokud i rovnají tomu, co dvě hodnoty? PUBLIKUM: 2, 1. DAVID J. Malan: 2 a 1. Není to 1 a ne 1. Je to opravdu jen tyto dvě poslední sloky této písně. Takže to, co mám místo toho chcete dělat? Tak se mi zdá, že chytil na případ, kdy pokud je i == až 1, pak první slovo je "láhev", ale druhé slovo je "lahve". Ale tady, chci to změnit, aby bylo == 2. A pokud tomu tak je, co já chci první slovo má být? PUBLIKUM: "Láhve". DAVID J. Malan: "Láhve", tak za dvě láhve. A pak je zde slovo by mělo být - PUBLIKUM: "Bottle". DAVID J. Malan: "Bottle", singulární. Dobře, pojďme vzdálíte, vrátit se sem, re-spusťte make, re-run beer3, typ 99 znovu. Dobře, "Segmentation fault (core dumpingové)." Co jsem udělal špatně? PUBLIKUM: Nemáte hodnotu [neslyšitelnou]. DAVID J. Malan: Ah, vynikající bod. Dobře, tak co je špatně? Takže segmentation fault, a my vlastně bude vidět tento docela několikrát v budoucnosti, záměrně. Ale teď, co to vlastně znamená? Segmentation fault téměř vždy znamená, že máte nějak se pokusil o přístup paměti, RAM v počítači, že nevlastníte, že jste ve skutečnosti požádal operační systém pro. Takže v tomto případě, upozornění, co jsem udělal, což je vadný v mém logice. Jsem převedl S1 a S2 hodnotu, pokud i rovná 1. Také jsem udělal, že když jsem se rovná 2. Ale já jsem to neudělal v nekonečné řadě dalších možnosti - zejména, 3 nebo 4, nebo tečka, tečka, tečka, 99. Takže jedna oprava by to mohlo být jen pojďme mají jiného stavu. A nech mě jít sem a říct s1 rovná - co by mělo být? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: "Láhve", protože v běžném případě, je to jen samé. Takže se rovná quote, konec citátu, "lahve." Takže pro množný láhve, a pak tady, plurálové lahví. Dobře, takže teď mi dovolte vrátit se k mému terminálovém okně, rekompilovat, re-spustit. 99. Uff. A pojďme udělat rychlý zdravý rozum kontrolu. Technicky, že chceme, aby si všechny tyto, aby se ujistil jsou správná, ale pojďme se podívat na nejméně známé viníky. 3 láhve, 2 láhve, 2 láhve, 1 láhev, 1 láhev, 0 láhve. Zdá se, že se alespoň stanovit je pro teď. Ale úlovek je, že to, co bůh hrozné bordel je to jen vyřešit hloupý jeden znak gramatické detail. Takže tam je trochu toho důvodu, že jsem řez tohoto koutu dříve, protože je to jen zcela nepříjemné muset napsat tolik kód. Ale ukazuje se, že je tu něco víc elegantní způsoby vyjadřující přesně to samé. A můžeme to takto. Dovolte mi, abych ponechat na obrazovce na chvíli a představit něco známý jako ternární operátor. To je tak trochu one-vložky, která je jen chtěl, aby se naše žije trochu svůdnější, jak slíbil. A já budu dělat to takto. Dej mi řetězec s názvem s1, a dovolte mi, abych přiřadit to následujícím způsobem. (I == 1)? "Láhev", jinak "lahve". String s2 dostane (i == 2)? "Láhev", jinak "lahve". Takže to, co je tedy rozdíl? Tyto dva řádky kódu, tvrdím, může nahradit celou nepořádek. Tak říkám, že nepořádek, jen proto, že druh tře mi špatně, že je to tak mnoho řádků kódu. Není špatné. Není to špatný design. Stejně jako, to je naprosto správné a naprosto v pořádku. Ale kódování dostane únavné, pokud budete mít možnost vyjádřit se tak zatraceně konkrétně znovu a znovu a znovu s jednoduchou scénář takhle. Takže C má některé klávesové zkratky, jako je tento. Takže to v podstatě říká, deklarovat řetězec s názvem s1 a přiřadit buď tato hodnota, nebo je tato hodnota pokud je i == - líto, měl to říct jasněji. Deklarovat proměnnou s1, přiřadit jí tuto hodnotu, pokud je to pravda. V opačném případě, přiřaďte tuto hodnotu. Takže jinými slovy, to je druh jednořádkovém způsobu říká-li jiný, ale dělá úkol na cestě. Takže pokud i = 1, pak jděte do toho a říkají "láhev". A pak to ostatní, nazývat to "lahve". Mezitím, s2, Druhé slovo, které je třeba definovat, jestli i rovná 2, sejdeme se nastavit s2 na "láhev". V opačném případě, nastavte ji na "lahví". A co to znamená, teď je můžu projít a odstranit všechny ty řádky kódu. A když říkám, poněkud směšně, že je to teď svůdnější, je to sexy v druhu stylistické smyslu. Skutečnost, že funkčně, tento kód bude skutečně udělat přesně to samé. A i když to může vypadat trochu záhadný na první pohled, protože jsme to viděli tuto konstrukci před, tak bych tvrdí, že to nakonec bude mnohem víc čitelné a tak mnohem jednodušší pro my lidé se trochu pochopit, protože nyní můžete jen číst Kód na jednom řádku. Je to stále podobné ducha tehdy, pokud je to stav a pak je to to, co je uvnitř, pokud, a to je to, co je uvnitř jiného. Ale můžeme udělat jen mnohem více elegantně. A když jsem teď zpátky k mému terminálu, co budou všechna z těchto linek a nahradil je jen těch dvou, rekompilovat, re-run lahví piva s 99, všimněte si, že moje gramatika je, ve skutečnosti, stále správná. Takže znovu, něco začít. 2 láhve piva, 1 láhev piva. Vypadá dobře. Jo. Tak tady to máme mnohem stručnější řešení. Tak tohle taky, jak si získat více vyhovuje C, ne nutně s prvním PSet nebo i druhé, ale si uvědomit, že tyto pojmy nám umožní dělat věci stále více elegantně. Nyní se pojďme udělat jednu věc zde. Nech mě jít napřed a otevřít return1.c. Nyní pojďme začít řešit další problém způsobem, který nám umožňuje psát sofistikovanější kód. Tak tady je to jednoduchý malý program, jehož smysl života je zvýšit hodnoty. A skutečně, pojďme o krok zpět. Nech mě to udělat ručně. Dovolte mi, abych to patří a int main (void). A dovolte mi, abych volání této increment.c. A co chci dělat? Chystám se jít dopředu a říct něco jako - budeme volat čísla stejná - int x. Takže int x dostane 2; printf x je% d, nový řádek, x. Takže píšu rychle, ale nějak známé věci nyní. Pak budu dělat x + +. Pak budu tisknout stejnou větu znovu. A pak budu vracet 0 jen ukončete program. Dobře, tak to je program, který zvýší číslo. Je to první bude inicializovat něco 2, a pak je to bude zvyšovat, a vytisknout znovu. Takže pojďme spustit přírůstek, neuvěřitelně jednoduchý program. Předpokládejme však, že teď, že chci, aby kostka hodnotu, tak se něco poněkud subjektivní. A já vlastně chci dělat x dostane kostku něj. Takže bych mohl použít to, co se nazývá funkce pow, ale já ne Opravdu víte, kde to je ještě. Takže budu dělat to staromódním způsobem. x krát který se rovná x krát x krát x. Takže jsem Cubing hodnotu, že se vynásobí sám znovu a znovu, tak, že se se výkon z 3 v tomto případě. Takže teď čísla bych tisknout by měla být, jak uvidíme zde - aby přírůstek, takže je to vlastně není opravdu zvýšit už, ale necháme jméno sám - 2 a pak 8. Nyní máme začátky příležitost pro zdokonalování zde, přičemž tato cubing věc násobení čísla sama o sobě sama o sobě sama o sobě se cítí jako by to mohlo být jen vhodné mít jako funkce, podobně jako někdo rozhodl lety - víte, trochu užitečná, pokud jeden z nás se posadí a píše printf tak, že zbytek světa se mohou použít, proč bychom si sednout a napsat funkci nazvanou krychle , který toto Cubing pro nás, takže jsme se nemuseli ručně provádět pojem Cubing hodnoty zde? Tak jednoduchý příklad, ale pojďme dál a použít je jako možnost napsat vlastní funkci. Tak zatím, jsme používá pouze hlavní, a jsme použili jiné Funkce lidí, ale my jsme nenapsal naše vlastní. Tak jdeme na to. Chystám se jít dopředu a napsat funkci nazvanou krychle. A já budu mít to trvat vstup. Takže jeho vstupní bude celé číslo. A co to bude dělat? Bude to prohlásit int výstup = vstup krát vstup krát vstup. A pak to bude vrátit tento výstup. A pak jsem musel být konkrétní teď. Tato funkce bude vracet hodnotu typu int. Takže tady je pak, jak byste psát své vlastní funkce. Si nejprve ujasnit, co je jméno vašeho Funkce bude. A obecně, něco vysvětlovací je dobré, tak budu říkají krychle. Pak budete muset určit, co to bude vrátit, co je jeho výstup bude. A nemáme, že mnoho možností ještě. Int, char, float, bool, string. Pro tuto chvíli, budu držet s int, protože chci to vrátí celočíselnou hodnotu. Pak budete muset určit, co jeho vstupy, pokud existují, jsou. A pokud kostka argument, trvá něco mezi závorky, musíte dát tento argument název tak, aby můžete volat to něco, co se ti, kterým se provádí, nebo písemně tato funkce, a budete muset dát typ, který v této Případ bude int. Takže ve zkratce, kostka je funkce, která vezme celé číslo jako vstup a vrátí celočíselnou jako výstup. Takže to, co to dělá s tou vstup? No, v řádku 14, prohlašuji proměnnou zvanou výstup, a já přiřadit jí hodnotu, vstupní krát vstup časy vstupní. A pak jsem se vrátit výstup. Tak jak je mohu použít tohle? Co mám změnit tyto zvýrazněné znaky na řádku 7 k, myslíš? PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Jo, tak kostka x. Takže x je proměnná, což znamená, že má určitou hodnotu. Naštěstí, to je typu integer. A protože x je int, to znamená, že mohu předat ji do krychle. A i když jsem přepsání hodnotu x s ​​hodnotou z krychle x, jak tomu bylo doposud, kdykoliv budete mají znaménko rovná se a řádek kódu, je ke stažení na pravé straně se provede, a pak dostane přiřazený hodnota na levé straně. Takže pořadí operací je, jak bychom doufat. Takže to funguje? No, nechte mě jít sem dolů. Dovolte mi, abych otevřou své okno terminálu. Dovolte mi, abych se, aby přírůstek, Enter. "Implicitní prohlášení o funkce" krychle ", je neplatný v C99. "Jak stranou, C99 odkazuje na jazyce C, jak to bylo definovány v roce 1999, který byl update přes verzi z 1989, což je změna přes původní. Tak to je vše, co znamená. Takže co to znamená, že "implicitní prohlášení funkce "kostka" je neplatná? "Je to přímo tady. Je to přímo tady v souladu 12. PUBLIKUM: [neslyšitelnou]. DAVID J. Malan: Co je to? PUBLIKUM: To ne dříve. DAVID J. Malan: To není před. Tak tohle je věc. C je druh hloupý, nebo C kompilátory jsou trochu hloupé. Jsou opravdu jen to, co řeknete, aby dělali. A oni, zejména, pouze si přečíst kód top dolů, zleva doprava. Takže pokud kompilátor, zvonění, čte kód, řádek 1, je zjistí, jak to udělat. Oh, tady je hlavní. Dobře, nech mě jít napřed a deklarovat proměnnou x. Dovolte mi, abych něco tisknete. Linka 7, co to sakra je krychle? Není to prohlásil v stdio.h. To nepřichází s C. Nemám tušení, co dělat. A tak zvonění jen kaucí a ukončen s tímto chybovým hlášením. Takže můžeme opravit v několika způsoby. Naučíme klap, co kostka je jen o pohybu, pokud prohlášení. Tak jsem vyjmout a vložit ho na vrcholu hlavní. Nyní si uvědomit, že jen proto, že hlavní není první, je to ještě provedeny ve výchozím nastavení. Hlavní je hlavní. Je to výchozí název funkce. Nezáleží na tom, je-li v souboru. Ale alespoň teď zvonění viděl kostku, než jsem ji používat. Tak uvidíme, jestli zvonění je šťastnější. Udělejte přírůstek, to zkompilovat tento čas. Dovolte mi, abych běžet přírůstek. A skutečně, zdá se, že funguje. Nyní, můžete přijít se scénáři nakonec, kde to není možné, aby všechny funkce nad všechny ostatní funkce. Budete uvíznou v této nekonečné smyčce ve skutečnosti, pokud ten chlap chce být, ale to chlap musí být tam. Takže nemusí vždy fungovat. Takže naštěstí, C má více elegantní řešení. Chystám se dát to zpátky, kde to bylo, jen proto, že jsem preferují, jako v zásadě, že hlavní vždy na vrcholu, protože je to jen hezké vidět, co tento program se ve výchozím nastavení. A co budu dělat, až tady se prohlásit to, co se nazývá prototyp. Chystám se znovu prohlašuji, že kostka funkci doslova kopírování a vkládání. Vlastně, to není doslova. Takže doslova kopírování a vkládání řádku 15 nahoře souladu 6. Nezáleží na tom, jaký postoj to skončí na. Stává se, že je na lince 4. Ale to musí být před hlavní. Ale všimněte si rozdílu. Linka 4 konce středníkem, což znamená, hej, Řinčet, věřte mi za to, že existuje funkce tzv. kostku, která vezme int a vrací int. Ale já nejsem ti to říct, co to je. Jen vím, že jsem slíbit, že ti nakonec. A skutečně, teď je to v pořádku, že je to dole. Takže je to obecně lepší, protože pak v horní části váš soubor, stačí odříkat, rapid-fire, jeden řádek Každý, jaké názvy vašich funkcí, jaké jsou jejich vstupy jsou, jaké jsou jejich výstupy jsou. A být jasnější, vstupní obecně znamená argument nebo parametr, synonymem. Výstup se rozumí návratovou hodnotu, co to ruka se ke mně. Takže v tomto případě zde, že kostka prohlášena v horní části, ale definován, jinak známá jako realizován, v dolní části. Takže teď se vraťme sem a znovu spustit tento. Takže teď mě nech jít dopředu a znovu spustit, aby, znovu spustit přírůstek. A nyní se zdá, že funguje v pohodě. Takže teď můžeme jít dopředu a vytknout něco jako Pivo příklad do této čtvrté verze. Dovolte mi tedy přejděte sem. A zjistíte, že jsem tak trochu vzal tuto lekci k srdci právě teď. Skutečnost, že jsem zpíval stejnou sloku znovu a znovu a znovu, stejně Chorus Line v písni, cítil Rád proč ne já faktorem, který se do funkce? A skutečně, mělo by to být jedna z motivací. Kromě toho, že někdo jiný na světě mohl chtít použít kostky funkci - to je dobrý důvod k faktoru něco a napsat svůj vlastní vlastní funkce - v případě, že je kus kódu ve vašem programu, který právě dělá koncepční pocit, že tak nějak chceš, aby to Název - jako v tomto případě, sbor - pak může podobně napsat, že jako samostatná funkce. Nemusíte psát vše v hlavním pokud to jen cítí čistší oddělit ji a dát mu jméno. Takže v tomto případě zde si všimněte, že mám komentář na vrcholu Tato funkce, která právě zpívá o tom, uvedené počty lahví. Všimněte si, že nemám potřebu volat tyto věci vstupní a výstupní. Ve skutečnosti, tentokrát jsem volal můj vstup B pro láhev. A všimněte si, tady, void naznačuje, co? To chorus - PUBLIKUM: Má ho nemohla vrátit. DAVID J. Malan: nevrací hodnotu. A skutečně, funkce nemají vracet hodnoty. Mohou jenom něco. Mohou mít co se nazývá vedlejší účinky, které v této případ je jen celá parta tisku na obrazovce. Tak zjistíte, že tento kód zde, jsem doslova ukradl předchozí příklad. Jediný rozdíl je, namísto použití i jako můj proměnná, jsem nyní používá b jako můj proměnné. Tak jsem si b tady dole, mám b tady dole, mám b minus 1 tady. Ale kód je přesně stejný. Ale jen ti ukáže hned, jak můžeme použít, nechte mě jít dopředu a skutečně změnit to být pro smyčce. for (int i = n; i> n, i -). Tak jsem ukradl, že z našeho předchozího příkladu. Dříve, to je v souladu 37 vyplývá, že bych začal zpívat tento nepříjemný píseň. Ale místo toho, já jen tak nyní volají sbor i. Hotovo. Takže teď v každé iteraci tohoto cyklu, říkám to jiné funkce, chorus, že jsem se náhodou psát. To nebyla napsána někým jiným lety. Ale chorus, mezitím, používá printf pro tisk z těchto čtyř linek. Ale fakt, že volám refrén znovu a znovu v roce loop znamená, že budu se dostat, na samém konci, přesně stejný song, jak jsem se tak daleko. Takže ve zkratce, teď, když se podívám zpátky na můj kód, i když funkčně je to stejné, zjistíte, že je to začíná být ještě více čitelné. Já přesně nevím, jak GetInt je realizován. Upřímně řečeno, nevím, jak je implementována chorus. Ale to nezáleží na mně. Nezajímá mě, protože teď můžu nějak, jako člověk, přečtěte si to z vrcholu k dolní části. A protože funkce jsou pojmenovány podle toho, co dělat, můj kód je stále čitelný. A jak naše programy dostat mnohem složitější - podle semestru je konec, budete psát stovky řádků kódu v jazycích jako PHP a JavaScriptu a jako - zjistíte, že je to tak mnohem jednodušší, než si udržet přehled o co jsi udělal. A když začnete spolupracovat s přáteli nebo partnery nebo kolegy, budete moci psát mnohem více masivní programy od spuštění vykonávat tyto základní stavební kameny. Takže s tím řekl, proč ne my říkáme den? A my se uvidíme ve středu. [APPLAUSE]