[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]