[Powered by Google Translate] DAVID J. Malan: Dobre, to je CS50, a to je
Začiatok týždňa dva.
Ďakujem.
Začnime tu s telefónny hovor.
Chystám sa vytočiť 617-bug-CS50.
CS50: To je CS50.
Pre raketoplánu Boy, stlačte 1.
Ak chcete začať znovu, stlačte tlačidlo 9.
DAVID J. Malan: Tak povedal pre Shuttle Boy, stlačte 1.
Takže budeme stlačte 1.
CS50: Aký je váš pôvod?
Pre quad, stlačte tlačidlo 1.
Mather, stlačte tlačidlo 2.
Boylston, stlačte tlačidlo 3.
Lamont, stlačte 4.
Mem Hall, stlačte tlačidlo 5.
Ak chcete začať znovu, stlačte tlačidlo 0.
DAVID J. Malan: Budeme stlačte 1 pre štvorkolky.
CS50: Ďalšie shuttle listy tejto chvíli na popoludnie 01:10, a
potom na 13:20, 13:30, 13:40.
To je CS50.
>> DAVID J. Malan: Tak to je CS50 hlas.
A to je príklad druhov záverečných prác, pre
inštancie, môžete odhryznúť smerom
koniec semestra.
Napríklad, že existuje shuttleboy.cs50.net -
vlastne projekt, ktorý som prvýkrát písal po užití CS51
späť, keď som bol vysokoškolák.
A inšpirácia tu bolo vtedy, všetko, čo mal, bol
vytlačené plány shuttle bus, a tam nebol žiadny
Pojem hľadá veci on-line.
A tak nejako som holubica v jednom víkende, preleje cez
vytlačiť plán, a preniesť ju do počítačového programu.
V tej dobe, počítačový program náhodou napísané
v C. A skutočne bežal ho zadaním Shuttle Boy na
bliká výzvu, ako sme to robili doteraz.
Ale v priebehu rokov, je to vyvinulo do okamihu
Správy topánok.
Je to vyvinulo v poslednej dobe do tejto stránky, do
SMS-nástroj, rovnako ako v tomto hlasové nástroj.
A to je sa zmieniť o druhoch vecí, ktoré môžete
urobiť pre seba tým, že semester konca.
>> Napríklad, tam, verzia SMS kyvadlovej Boy deje
fungovať takto.
Ak sa na vašom mobilnom telefóne, odošlite textovú správu na 41411 a
potom poslať zvláštne symbol sboy, pre Shuttle Boy,
nasleduje A a B, kde A je pôvod a B je
cieľ -
Napríklad, Boylston Space Quad -
čo by ste mali vrátiť v priebehu niekoľkých sekúnd je textový
Správa z raketoplánu Boy povedať presne, kedy
Nasledujúcich niekoľko raketoplány sú od tohto okamihu bude, že
bod B.
A to je všeobecnejší príklad toho, čo je známe ako
pomocou API.
>> Tak napríklad, to je tu práve shuttleboy.cs50.net,
Skutočný web-based inkarnácií tohto.
Ale údaje, ktoré podčiarkuje a ďalšie aplikácie, ktoré CS50
vyvinula sú vystavené všetkým tu vo forme
rozhrania API, rozhranie pre programovanie aplikácií.
A to je len fantázia spôsob, ako povedať, že ľudia ako my na
Internet a ďalšie strávili nejaký čas vytvorenia
softvér, ktorý môžete použiť, aby sa chytiť dáta z nás a
potom stavať svoje vlastné aplikácie na vrchole
tohto dátového súboru.
Tak napríklad, to Kyvadlový Boy API strana, ktorá sem
sa stane, že v CS50 manuálu, v podstate dokumenty
ako môžete ísť o žiadať CS50 servery pre dáta.
Napríklad, ak ste oboznámení s CSV súbory, čiarka
oddelené hodnoty, to sú len akési rýchle a špinavé
Excel-ako súbory.
Takže sa môžete opýtať Kyvadlová Boy všetkých dát na všetky
domov a ich GPS súradnice, a budete mať
späť, v podstate, spreadsheet, ako že
potom môžete prečítať v programe vlastné a potom
generovať výsledky, rovnako ako kyvadlová Boy sám
sa stane, že robí.
Pre tých známejšia, viac moderných dátových reprezentáciou
patrí JSON, JavaScript Object notácie.
Niečo sa vráti k vám k
koniec semestra.
>> Ale znova, to je len jeden z niekoľkých vlastného API CS50 je.
A zaujímavá vec je teraz, v týchto dňoch, Facebook a
Twitter a Google a skoro každý populárne webové stránky z
tam má nejaký API, čo znamená, že ak budete čítať
dokumentácie na svojich internetových stránkach, sa prihlásiť k
účet, potom môžete začať písať softvér na vrchole
bez ohľadu na nástroje, alebo údaje, ktoré spoločnosť poskytuje tam.
A tak jeden z našich vlastných výučbových kolegami o pár rokov späť
napísal verzii Mac tohto.
Takže na odkaz s názvom Mac tu vľavo hore, môžete skutočne
stiahnuť Mac OS widget, ktorý beží na vašom vlastnom počítači Mac, aby urobili
rovnaké druhy vecí.
Takže je to všetko o budovanie na vrchole dát, ako sú tieto.
Ale o tom ku koncu semestra.
>> Takže poďme ponoriť do naozaj rýchlo k chybe, len trochu dostať
veci zahreje dnes, a spomeniem na niektoré
veci, ktoré sme sa na posledný týždeň.
Najmä, nechajte ma ísť napred a vytiahnuť, povedzme,
tento príklad tu.
Buggy1.c, to je k dispozícii na internetových stránkach kurzu keby ste
Páči ho stiahnuť a hrabať okolo seba.
Ale poďme priblížiť tu na tomto pomerne krátkom programe, a len
super-rýchle rekapitulácia niektorých zo základných stavebných blokov, ktoré
naozaj sa chystáte len začať užívať za samozrejmosť.
>> Takže modré veci, v riadkoch 1 až 9, sú len
softball otázky.
Tak to sú len komentáre.
Nemajú funkčný význam.
Ale oni sú komentáre v tom zmysle, že to berie na vedomie, že
Ja, človek, sa na seba tak, že v prednáške a po
prednáška, môžem vlastne spomenúť, čo tento program
robí, bez toho aby ste museli čítať cez to riadok po riadku a
obnovovať históriu v mojej mysli.
Navyše, keď som odovzdať tento program niekomu inému, ako je
si, že je to oveľa jasnejšie pre vás, pretože pripomienok, ako je táto,
čo program je skutočne robí, alebo aspoň to, čo
Program to má robiť.
Či je alebo nie je, že je to správne, je iná vec úplne.
Teraz, v C, s multi-line pripomienky, pripomínajú, že on-line
jeden tu je magický symbol, / *.
To znamená, že tu je začiatok komentáre.
A na ničom inom nezáleží, kým sa nedostanete na koniec zakončenie,
ktorý je * /, naopak.
Takže skutočnosť, že mám 80-nejaké podivné hviezdy tu od
zľava doprava, je naozaj len estetický detail.
To nemá funkčný význam.
>> Teraz, ako o súlade 11?
Čo to robiť v Laicky povedané?
Čo je to?
PUBLIKUM: Zahŕňa štandard.
DAVID J. Malan: OK, dobre.
Takže to zahŕňa stdio.h knižnicu.
Takže čo to znamená?
No, v tomto súbore, stdio.h, sú celá partia
funkcia vyhlásenie -
to znamená, že kód, ktorý niekto napísal.
A dokonalý príklad funkcie, ktorá je deklarovaná v
stdio.h je -
ktoré obľúbenú teraz?
Takže printf, jeden z najčastejších z nich použiť, určite
čoskoro, od tej knižnice je tam.
Keby som vylúčiť, že riadok kódu, zvonenie bude jačať
na mňa niečo o použití nepriznanú symbol.
Niečo nelegálnej je pravdepodobne kľúčové slovo, pretože
sme neinformovali kompilátor, čo printf vyzerá
Páči ak zahrnieme tento riadok.
A ešte na Zemi, naozaj, čo to linka hovorí, je
otvoriť tento súbor, stdio.h, všade tam, kde je to na výkon servera
pevný disk, alebo spotrebič na pevný disk, a copy-paste je
tu do môjho súboru, bez toho aby som
museli urobiť ručne.
>> Teraz, keď sme sa sem na hlavnej, onedlho začneme
podpichovať seba, čo int a čo void je.
Ale teraz, poďme sa pozrieť na tri riadky
v rámci 15 až 17.
Tu som tvrdiť, as buggy.
Linka 7 vo svojich pripomienkach hovorí: "Ak tlač 10
hviezdičky, ale nie je. "Prečo to netlačí, v skutočnosti,
10 také hviezdy?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Presne tak.
Takže si, že začíname počítať od 0.
A to je vlastne konvencie v programovaní a
počítačovej vedy všeobecne, začína počítať
od 0 miesto 1.
A to naozaj len vychádza zo skutočnosti, že, pre
inštancie, keď sme mali osem ľudí na javisku, kedy
nikto zdvihnutím ruky, boli
všetky efektívne nuly.
A tak je to len trochu počítačovej dohovoru tak,
preto, aby začnite počítať od 0.
Ak je to najnižšie číslo, môžete reprezentovať v binárnom formáte.
>> Tak tu sme začali inicializácia aj na 0.
Sme nastavili aj rovná 0.
Ale potom som urobil túto chybu tu, hovorí i je menšie ako alebo
rovná 10.
Ale ak si myslíte, že napriek keby som začal na 0 a potom idem
až 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ja som vlastne bude
vytlačiť 11 hviezd na obrazovke, pretože som išla hore
na a rovná 10.
Tak ľahko opraviť tu potom je to, čo?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Stačí zmeniť to na menej než.
Ak naozaj chcete, si to mohol urobiť.
Ale všeobecne, je, že odsudzoval.
A tak začína počítať od 0, je proste niečo, čo by ste mali
zvyčajne zvyknúť.
A teraz, čo o celej konštrukcie vo sama o sebe?
Tento riadok 15 demarks cyklu for.
Takže, nie je funkcia.
Je to len konštatovanie.
Je to opakovanie konštrukt, ako sme videli v Scratch.
A to má tri časti.
Všimnite si, že tam je prvá časť na
v ľavej časti bodkočiarkou.
Tam je stredná časť medzi dvoma bodkočiarkami.
A potom je tu pravá časť vpravo
druhej bodkočiarkou.
Teraz, prvý z nich má čo?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Späť tam?
Jo?
Divákov: Inicializácia.
>> DAVID J. Malan: Inicializácia.
Takže čo to znamená?
Sme deklarovali premennú s názvom i
Je typu int, pretože som zadaný int i
A ja inicializácii aj na hodnotu 0.
Tak čo to vlastne hovorí?
Je to skutočne hovorí k počítaču hej, daj mi dosť
pamäte, dostatok pamäte RAM, aby sa zmestili číslo, a potom dal
číslo 0 v tomto bloku pamäte RAM.
A ako stranou, aká veľká je int typicky aspoň vnútri
spotrebiče?
Divákov: 32 bit.
DAVID J. Malan: 32 bitov.
Takže to znamená, že mi 32 bitov, inak známy ako 4 bajty,
a dal hodnotu 0 v ňom, čo je celkom jednoduché, pretože
Znamená to len, nastaviť všetky bity na 0.
>> Takže teraz, druhá časť je tu podmienka.
A podmienka je, ako už názov napovedá, je to, čo je kontrolovaná
znova a znova a znova o tom, či je to pravda, alebo nie.
Takže je to len hovorí vykonajte nasledujúce riadky kódu -
konkrétne linka 16, pretože to je jediný členité jeden
pod -
tak dlho, ako som ich menší ako 10.
A po každej iterácii prostredníctvom tohto vedenia, vykonajte
inkrementace, ktorý je v tomto prípade aj + +.
Teraz, nemá byť i + +.
Mohlo by to byť aj -.
Ale keď som to urobil, čo sa správanie deje
byť z tohto programu?
PUBLIKUM: to bude nekonečná slučka.
DAVID J. Malan: to bude nejaký nekonečnej slučke,
ak budeme mať šťastie po negatívnom 2000000000 alebo tak.
Možno, že veci sa zalomia okolo, len podľa povahy konečnom
počet bitov, ktoré sme boli pridelené pre int.
Ale je to určite bude prechádzať ďaleko viac než 10 a
určite viac ako 11 krát tu.
>> A teraz, rovnako ako stranou, si uvedomiť, že aj + + a aj -
sú naozaj len syntaktickú cukor.
Je to len skrátený zápis pre to, čo je trochu viac
výslovne napísané takto:
i = i + 1.
, Ktorá je identická so i + +.
Je to proste vyzerá krajšie povedať i + +.
Je to stručnejší, zrozumiteľnejšie.
A tak väčšina ľudí, že miesto.
To je však totožný funkčne na
to, čo sme práve videli.
Takže v skratke, rýchla oprava je tu len povedať iterácii aj
od 0 po celú cestu až na menej ako 10.
A potom budeme skutočne dostať 10 hviezd.
>> Tak poďme to skúsiť.
Dovoľte mi, aby som otvoriť terminál v dolnej časti.
Nechaj ma ísť do adresára, ktorý je in
A budem kompilovať ručne pomocou Clang pre teraz.
A ja idem zostaviť to ako buggy1.c, Enter.
A teraz buggy1, prečo je tam žiadny takýto súbor alebo adresár
volal buggy1?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Jo.
Takže je to vlastne hovorí a.out.
Takže spomínam Ak stačí spustiť rinčať, kde zvonenie je
kompilátor, a nemusíte zadať názov, ktorý chcete
dať do svojho programu, to bude predvolený a.out.
Takže naozaj, keď to ls -
oops.
A ja didn'ti - na čierne a biele problém niektoré
ste museli čeliť bola stanovená.
Ale dovoľte mi, aby som to.
Tam máme a.out na ľavej strane tam.
Takže musíme bežať a.out miesto buggy1.
>> Tak nechaj ma ísť ďalej a robiť to.
. / A.out, Enter.
A ja som zrejme nemal robiť čo?
Divákov: Uložiť.
DAVID J. Malan: Zachráňte môjho súbor.
Tak, že je ľahko vyriešiť tým, že udrie Control S, alebo ísť do
Súbor, Uložiť, rovnako ako vo väčšine programov.
Nechaj ma ísť sem dole, je vymazať obrazovku, spustite ho znova.
A je tu ešte chyba.
Takže to, čo sa deje -
PUBLIKUM: Ty si skompilovať.
DAVID J. Malan: Ah, dobre.
Nechcel som skompilovať.
Rovnako ako idiot, pozerám sa na kód aby videli, čo sa deje.
Takže zvonenie buggy1.c, teraz a.out.
A uf, zachránil.
>> Takže to vyzerá trochu škaredá, pretože neexistuje žiadny nový riadok
kdekoľvek v programe.
Ale zase, že je to len estetický detail.
A aspoň pokiaľ budeme počítať tie, mali by sme
teraz vidí 10 také hviezdy.
No, čo tento druhý warm-up napríklad?
Takže v buggy2, tvrdím, že táto verzia tiež budú vytlačené
10 hviezd, jeden na riadok.
Takže tentoraz, mám znak nového riadku, len aby sa
veci trochu krajší.
Ale namiesto toho, čo som si to.
Tak ma nechaj robiť rinčať buggy2.c, Enter.
Teraz je to zase len a.out.
Enter.
Vidím len jednu novú linku, len posledný nový riadok
pohybuje moja výzva na ďalší riadok.
A napriek tomu jasne som tlač *, potom nový riadok,
*, Potom nový riadok.
Ale čo je to bug tu?
Jo?
PUBLIKUM: [nepočuteľnú].
>> DAVID J. Malan: Presne tak.
Takže na rozdiel od niektorých jazykoch, ako je Python, kde odsadenie
skutočnosti má funkčný význam, v
jazyk C -
ako uvidíme, PHP, JavaScript -
odsadenie je naozaj len pre prospech ľudskému.
Takže skutočnosť, že som odsadený riadok 16 a 17 vyzerá skvele,
ale nemá funkčné význam tu.
Ak chcem oba riadky spustiť ako súčasť pre
slučka, potom musím uviesť ich do zložených zátvoriek tým, že robí to.
Môžete znížiť tento roh a vynechať zložené zátvorky ak to
Čo je prípad?
PUBLIKUM: Len jeden riadok.
DAVID J. Malan: Len jeden riadok.
Takže to je tak nejako pekné syntax detailu tak, aby
nemusíte strácať čas písať tri riadky, z ktorých dva sú
Zložené zátvorky, stačí napísať jediný riadok kódu.
Ale ak máte dva alebo viac riadkov, sme
naozaj potrebné urobiť.
>> Tak teraz sa mi zachrániť to.
Nechaj ma ísť dopredu a znovu spustiť zvonenie.
Potom mi dovoľte spustite a.out, a teraz som si im jedno na riadok.
Teraz, a.out je opäť trochu hlúpe meno pre program.
Ako spoznám, zvonenie skutočne mi názov súboru
to je viac užívateľsky prívetivé, ako buggy2 sám?
Trochu jasnejšie?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: OK, tak som sa mohol skutočne čerpať veľmi
užívateľsky príjemný skratka a len písať, aby buggy2.
Nechcem špecifikovať. C v tomto prípade, a stlačte klávesu Enter.
A čo si robí, je to prekladá buggy2.c pre mňa
žiada rinčať to urobiť.
Konkrétne, volá rinčať, beží rinčať pomocou oveľa viac
argumenty príkazového riadku alebo prepínače, než som skutočne potrebujú.
V dobe, budeme vracať k tomu, čo všetci týchto rôznych
mystické dvojdomými výrazy rozumie.
Ale teraz, to je len uloženie mi problémy s
nutnosti pamätať si a museli písať si všetky tie
rôzne dvojdomými výrazy.
A naopak to nakoniec je
že teraz mám buggy2.
Ak chcem urobiť ručne, keď som
Namiesto toho môžete urobiť -
rinčanie-o buggy2 a potom buggy2.c.
A to bude podobne mi súbor s názvom buggy2.
>> Takže v skratke, zvonenie je kompilátor.
Urobte je len užívateľsky príjemný nástroj, ktorý budeme používať viac
a viac, pretože to jednoducho začína
zjednodušiť veci pre nás.
A vraciame 0, konečne.
Pre túto chvíľu, len preto, že, ale začneme srandu, že časť
dnes a v stredu.
Akékoľvek otázky týkajúce sa niečo z toho?
Jo?
PUBLIKUM: [Nepočuteľné]
ls v úvodzovkách tam?
DAVID J. Malan: OK.
Keď som napísal ls v úvodzovkách, ktorý bol mi robia nejaké kúzlo
v zákulisí opraviť chybu.
Zabudol som, ako sme hovoril mnohí z vás na
diskusné fóra, zaujímavosti -
urobíme to teraz - sudo yum-y aktualizácia appliance50.
Jejda, že to je napísaná správne.
Takže prístroj je ako operačný systém.
Je to beh tohto operačného systému s názvom Fedora.
A teraz, pretože moje pomalé pripojenie k internetu, mám
Naozaj hosed to.
Takže beží sudo yum aktualizácie, ako sme ti robiť v
Problém set, je v podstate rád beží automatických aktualizácií
v Mac OS alebo Windows.
A dôvod pre spustenie to na samom začiatku
Problém set preto, že keď sme vytvorili prístroj, I
zpackal, a náhodou som robil všetky programy vyzerajú
čierna na čiernej obrazovke, čo je dôvod, prečo nie ste vidieť je
V predvolenom nastavení.
Ale najnovšie verzie spotrebiče rieši to.
A ja zariadim, že počas prestávky raz som internet
pripojenie.
>> Takže citácie len skrýva svoju chybu, veľmi diskrétne,
zrejme.
Ďalšie otázky?
Áno?
PUBLIKUM: Kde sa, aby prišiel z?
[Nepočuteľné]
DAVID J. Malan: Dobrá otázka.
Ak predsa robí pochádza?
Je Linux program, ktorý je už mnoho rokov, kým
pred CS50.
A je dodávaný s operačným systémom, ako je Fedora.
Nepochádza z CS50 knižnice.
V skutočnosti, len veci, ktoré prichádzajú z CS50 knižnice
tak ďaleko, že sme videli, sú GetString, GetInt, všetci
ty si funkcie, a slovo reťazec, a na niektoré
rozsahu, slovo bool.
Ale budeme dráždiť, že od seba, keď sme do toho ponoriť do CS50
Prístroj sám o sebe.
>> Takže áno, ešte jedna otázka tu.
PUBLIKUM: Keď si povedal, make a potom buggy, ako robí
Počítač vedieť [nepočuteľné]?
DAVID J. Malan: Dobrá otázka.
Takže keď stačí spustiť, aby buggy1 alebo sa buggy2, ako
to, aby vedieť?
Takže v predvolenom nastavení, ak zadáte, aby buggy1, aby vzhľad pre
súbor s názvom buggy1.c.
A potom to vykoná príslušné rinčať príkazy,
čím prepíše predvolený výstupný súbor s názvom a.out.
V skutočnosti, keď sa pozrieme na to, čo robiť, čo -
poďme ukončenie tohto.
Ak sa pozrieme na to, čo robiť so skutočne robí, aby buggy2,
je to už aktuálne.
Dovoľte mi teda odstrániť rm príkazu,
Program som písal predtým.
Písanie Y-E-S potvrdiť, že chcem odstrániť.
Keby som teraz urobiť, aby si všimnite, že v tejto veľmi dlhej rade,
tam je to posledná vec, ktorú tu,-o buggy2.
Všetky značka robí sa okolo tohto argumentu, tak hovoriť,
Rinčať, takže nemám písať sám.
>> Dobre, tak rýchlo pár administratívnych
oznámenia.
Takže pre oblasti, ktoré oficiálne začalo tento rok
Nedeľa, budete vždy chcieť, aby, ak
máte jednu, notebook.
Ak nemáte notebook, sa dostať von mi
klesá mi e-mail.
A budeme vymyslieť postup.
Čo všeobecne nájdete v sekcii je, že sú súčasťou
koncepčné, časť hands-on.
Budeme konkrétne využiť časť otázok, časť
Tento týždeň je problém set, prejsť niektoré z
koncepčný materiál z prednášky.
A to je všetko v aktuálnom probléme sady.
A budeme tiež ponoriť sa do niektorých hands-o činnosti, niekedy
ktoré budú musieť byť predložené, niekedy
ktorá nebude.
Napríklad, tento prvý týždeň, že to znamenalo, rovnako ako
warm-up cvičenie.
A zistíte, že tieto problémy sú naozaj len to.
Sú znamenalo veľmi malý, ale nie nevyhnutne
triviálne programy napísať, ktoré nie sú nevyhnutne
vzrušujúce samy o sebe, ale sú tu dobré možnosti pre
cvičiť so syntaxou, s novými funkciami, v pohodlí
sekcie, kde budete mať niekoľko svojich spolužiakov prezentovať ako
rovnako ako vaše TF.
>> A čo budeme robiť v priebehu času, je použiť nástroj nazvaný CS50 priestory,
, Kedy miesto len pomocou CS50 Appliance, budete si musieť vybrať
namiesto toho ísť na webovú stránku v prehliadači, kde si budete môcť
písať kód v okne prehliadača pri sekcii.
A potom, keď sa prihlásite, môžete vaše vyučovanie kolega potom zobrazí
čo to je píšete na obrazovke vo vašom prehliadači
Okno sa na prednej časti triedy, či už anonymne alebo
verejne, tak, že on alebo ona môže potom prejsť s
tvoji spolužiaci, čo si urobil dobre, čo si neurobil dobre.
A opäť, buďte si istý, to všetko môže byť pekne anonymný.
Ale to bude pekná príležitosť pre oveľa viac
interaktivita, než niečo ako prednášky umožňuje.
>> Medzitým, budeme mať tieto veci nazvaný výborný
profily, ktoré sú voliteľné, ale sú otvorené pre každého v
trieda, takže si môžete urobiť viac kolektívne pre
Problém nastaviť jednu.
Tu je plán.
To je tiež zverejnený na domovskej stránke cs50.net.
Všimnite si, že tam bude hacker špecifické
jeden zajtra popoludní.
A budeme točiť jeden dnes a jeden zajtra a post tie
on-line do 24 hodín.
Takže ak nemôžete vykonávať žiadne z týchto časov, nie sa báť.
A opäť, plán je teraz online na cs50.net.
>> Pokiaľ ide o krájanie sám, mali by ste sa dostali
email pokyn, aby ste išli do kurzu domovskú stránku nájsť
z vášho oddielu.
Ak je život sa zmenil a je potrebné zmeniť bod,
nie je problém.
Vráťte sa na túto rovnakú adresu URL, cs50.net/section, singulární,
a budete vyplniť podobný formulár, takže môžete
potom nám svoje preferencie.
A budeme sledovať do konca týždňa, ako na to, čo môžeme
ubytovať.
Minulý týždeň, pripomenúť, že sme navrhli pomocou CS50 diskutovať,
Predmet je diskusia nástrojom, v prednáške.
Takže sme mali 40 otázok, ktoré boli položené a
zodpovedaná počas prednášky.
Takže to vyzeralo, že funguje dobre, takže budeme pokračovať
sa snaží urobiť to.
Ak sa počas prednášky, to nie je len pocit, pohodlné zvyšovanie
tvoja ruka, nie je problém.
Prejsť na cs50.net/discuss, písať tam, a jeden z našich výučby
chlapi budú buď prijať elektronicky alebo zvýšiť ich
Použité vaším menom anonymne sa opýtať, v závislosti
na povahe otázky.
A, pokiaľ ide o spätné väzby, bude všeobecne psets byť
vrátil do týždňa.
Vzhľadom k tomu, že trvá chvíľu pre oddiely pre dosiahnutie
rovnováha, prvý Pset, 0 a 1, sa trochu
oneskorenie, pretože sa veci upokoja.
Ale zostaňte naladení na to v najbližších týždňoch.
>> Dobre, tak mi dovoľte dať na môj vážny
hlas na chvíľu.
Takže je to vlastne zaujímavé klímy sa
s túto diskusiu, čo sa všetky iné
deje na akademickej pôde s ním súvisiace.
Ale CS50 má iste svoje histórii tejto konkrétnej
tému, v ako veľa ako každý rok, tento kurz, pre mnohých
rokov, Ad-dosky približne 3% triedy.
Tento posledný rok, 2011, CS50 Ad-Boarded 35 študentov.
To nie je, myslím, že vzhľadom na nedostatok jasnosti.
Si uvedomiť, že sa v priebehu jeho osnovy, tam je strana
Vyhlásenie o vysvetlenie, kde linky sú.
Ten istý vyhlásenie sa opakuje na každom z
Problém nastaví na strane jednej.
>> Tak som spomenul to dnes naozaj len, aby sa
ľudia majúci na pamäti to.
A my sme sa snažili rôzne veci.
A to, čo som si myslel, budeme robiť dnes je len chvíľku na
vlastne sa pozrieť na niektoré z posledných prípadov, ktoré majú prísť.
Skôr než udržiavať tieto ako malé špinavé tajomstvo, v skutočnosti
poukázať na to, čo študenti urobili a ako sme objavili
to a to, čo naozaj zastrešujúcim motivácia je pre
aj tento rozhovor.
Takže s tým povedal, že linka je v podstate to -
podľa osnov, ste vítaní, odporúčame, aby
hovoriť so spolužiakmi.
To je celý zmysel má táto spolupráca
úradné hodiny v Annenberg a povzbudzovanie ľudí k
Záverečný projekt spolupracovať.
Ale čiara, keď príde čas, aby skutočne písať
vaše konečné riešenie.
Hovorenie v angličtine, v pohode, hovoriť v pseudokódu,
úplne v pohode.
Emaily spolužiak si PSet, nechať ich prehliadnuť
na obrazovke ako hands pokračovať v písaní,
cez čiaru rovnako.
Páči sa pozrieť do učebných osnov pre jednotlivé linky.
>> Ale len dokresľuje obraz o tom, ako je to bohužiaľ
reality, si uvedomiť, že existujú webové stránky tam, že
majú riešenie z tejto triedy a mnohých ďalších tried.
Skutočnosť, že ste vy alebo približne 3% z vás vie, že toto existuje
Znamená to, že vieme, že to existuje.
Skutočnosť, že existujú stránky ako to, kde sa
môže zaplatiť niekoho, kto skutočne urobiť váš problém sady - to bolo
skutočný prípad, ktorý prišiel vlani.
To je webové stránky s názvom odesk.com.
A Tim bolo meno osoby, ktorá bola tu vysielania na
tento web a požiadal niekoho, kto by jeho PSet 7 v
tento konkrétny prípad.
No, odesk.com je veľmi Google-moci, a my sa
veľmi dobrý Googling.
Tiež tu existujú miesta - a toto je skôr
otrasné, úprimne povedané.
[Smiech]
DAVID J. Malan: legrační vec, o tomto webe, ak je
čítate stránku O, hovorí o ich firemnej
kultúra a ako zákaznícky servis je ich číslo jedna
prioritou, aby sa ubezpečil, že vaše úlohy sa
obrátil na čase.
>> Ale vo všetkej vážnosti, opäť, skutočnosť, že tieto stránky
existujú, si uvedomiť, my taky, sú vedomí
Tieto druhy miest.
A aby vám pocit, čo tvorí túto všeobecne
trvá, sme zvyčajne nemajú veľké aféry, kde sa ľudia
spolupracujú na akékoľvek masovom meradle, ale skôr
je táto neskoro nočné chvíle slabosti, kde máte tak
čo robiť, je to 04:00, ste vyčerpaná, a
myslieť na seba, dobre, nechaj ma stačí sa pozrieť na moje
spolubývajúci je alebo môjho priateľa kód alebo podobné.
A prejavy to bohužiaľ zahŕňajú Student
Predložením niečo také a Student B predkladanie
niečo také, čo iste v počítači
veda triedy, je pozoruhodne jednoduché pre počítačové vedcov
k detekcii so softvérom.
To je ďalší obyčajný paradigma, kde ste druh
pracuje po boku niekoho, možno hovorí v
Anglicky, dobre, pseudokód.
Ale potom príde čas na skutočne predložiť, a psets
Len si vymenili prostredníctvom e-mailu alebo Dropbox alebo podobne.
Ale v pokuse, aby to menej zrejmé, že toto je
čo sa stalo, potom je to to, čo sa nám.
To taky, nevypne sa dobre písané kusy
softvér, ako by sme mali skutočne odhaliť
tieto druhy vecí.
A skutočne to, čo robíme, je beh softvér, ktorý porovnáva všetky
tohtoročné podanie proti všetkým minulý rok je
podanie, proti všetkému, čo sme našli na
Internet, proti každej pracovnej stránkach vonku.
Je to všetko veľmi automatizovaný.
A tak sme to naozaj vo veľkom spravodlivosti na 97%, ktorí
sú naozaj funguje svoje prdele v tomto av ďalších
triedy a uvedenie do všetkých tohto úsilia tak, že práca
oni nakoniec predloží je ich vlastné.
A môžem ísť na veky.
>> To je len niekoľko z vlaňajších prípadoch.
Niekoľko študentov nám tieto súbory zhodne pre PSet 2,
Pset 3, Pset 4, Pset 5, Pset 6, Pset 9.
V tomto prípade, je to kvíz 0 a v poslednom roku, keď dvaja
Študenti nám zhodne túto vetu z mnohých
iní, "Žiadosť typu -" bodka, bodka, bodka.
Takže aj v triede 600 sme to zistí
na predložené kvízy.
Takže v skratke, tento - úprimne povedané, neznášam mať tento druh
konverzácie - ale to je naozaj úmyselné úsilie
v tomto roku, aby sa pokúsili znížiť toto číslo.
Pretože aj keď sme hovoria, že tieto druhy vecí každej
rok, myslím, že realitu že zdržiaval na ňom niekoľko
viac sekúnd, než je obvyklé, a vlastne len poukazuje na
že to, čo sa môže zdať ako, eh, nie tak veľký problém, aspoň
si spomeniem na tomto konkrétnom okamihu, a to ako v spravodlivo priznať
sami a na svojich spolužiakov tu.
Takže ak budete mať akékoľvek otázky ohľadom kde je hranica
je, prosím, len natiahnuť ruku ku mne osobne.
Ale odpoveď je vždy úplne zdôraznil Na
last minute, hotovosti v neskorej deň.
Alebo či je to vec, že ​​nemá žiadne neskoré dni,
úprimne, napíšte mi osobne.
Budeme niečo vymyslieť.
Prosím, nedávajte svoj čas tu na Harvarde v ohrození.
>> Teraz som si myslel, že by sme mali náladu, a tak som
zahrnul ako ďalšiu snímku.
[Smiech]
DAVID J. Malan: Táto webová stránka bola skvelá.
Vlastne som trochu roztržitý.
Tam je to jeden.
A potom tento bol úžasný.
Dobre, tak si tohto mačiatka neskoro v noci pri
tieto rozhodnutia.
Dobre, tak späť do viac zábavy a menej závažné veci, ako je
conditions.
>> Dobre, tak sme sa rozprávali krátko o nich.
To je niečo, čo je asi dosť známe z
svet Scratch.
A vo svete Scratch, máme túto potrebu niekedy
ísť robiť vidličky na ceste.
Buď to, alebo to, alebo tú druhú vec tu.
A keď chceme urobiť, môžeme použiť v C teraz, túto možnosť, ak
else.
A potom tu máme booleovských výrazov.
Napríklad, Booleovské výrazy tu, môžeme OR
dohromady, v tom zmysle, že sa majú túto podmienku OR
táto podmienka.
Môžeme A dohromady, v tom zmysle, že chceme, aby
skontrolovať tento stav, pričom táto podmienka.
A tu máme switch teraz, čo nie je tak
podobne syntakticky na tie druhy podmienok, ale
nám umožňuje robiť ekvivalent if, else if, else if, else
v prípade, a ako jednoducho výpočet im prípad od prípadu
by prípad od prípadu.
Takže sme videli tie minule.
A potom sme začali sa dotýka vecí, ako slučky.
Videli sme jednu z nich pred chvíľou.
Ale sú tieto ďalšie smyčkování konštrukcie.
>> Napríklad, tento tu.
Takže zatiaľ čo (podmienka), robiť túto vec znova a znova.
Takže v podstate, čo sa zdá byť odlišný od tohto
pre sláčiky a tento kým slučka tu?
To pre sláčiky a tento slučke while.
Jo?
Čo je to?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Dobré.
Takže kým v cykle for podmienkou, že je jasne
viac syntaxe.
Tam je to inicializácia, je tu táto aktualizácia.
V cykle while, je to proste tento stav.
Takže sa zdá, že je to trochu zredukované proti pre
slučka, čo znamená, že ak chceme mať premenné a chceme
mať inkrementace, skutočnosti máme k
urobiť túto vec sami.
>> Tak nechaj ma ísť napred a otvoriť gedit.
Dovoľte mi, aby som na ňu prepnete zariadenie.
A povedzme, urobiť rýchly malý príklad, že
rozlišuje jeden z nich z druhej.
A v zadnej časti mojej mysli tu, mal by som povedať jednu vec.
Aj výslovne uvedené meno Tim.
Tim bol vlastne niekto, že študent sa snažil nájsť robiť
ich domácu úlohu pre ne.
Nemali sme žiadne Tim v tomto konkrétnom bode.
Takže si uvedomiť, aby som zverejnené študenta, to nie je študentom.
Bola to náhodná osoba na internete robiť veci
o serveri proxy v minulom roku.
Tak sme zistili, že taky.
Takže v tomto prípade tu, nechajte ma ísť napred a
otvoriť nový súbor.
Súbor, Nový.
To mi dáva kartu tu.
Nechaj ma ísť dopredu a uložiť ho ako loop.c.
Nechaj ma ísť a kliknite na tlačidlo Uložiť.
A potom tu dole, poďme do toho a začnite písať
# Include .
Dovoľte mi, aby som Zoom
Teraz urobíme int main (void).
Teraz ma nechaj ísť ďalej a robiť for (int i = 0; i <
oh, 10, i + +).
A teraz budem pokračovať a to vytlačiť hviezdu, ktorá mi
robili predtým.
A potom na konci tohto programu, sme len tak
vytlačiť nový riadok, len preto, že moja výzva
nevyzerá všade chaotický.
návrat 0.
Zdá sa syntakticky korektné?
Tak ďaleko.
Tak uvidíme.
>> Dovoľte mi teda vzdialite, ísť do môjho terminálovom okne.
A nechaj ma ísť napred a spustiť slučku, pretože som volal toto
vec loop.c.
Takže si slučku.
Zdá sa, že zostavenie OK.
Dovoľte mi, aby som bežať slučku, a teraz Enter.
A zdá sa, že vytlačiť 10 hviezd.
Takže povedzme, previesť túto slučky while a vidieť, čo
druhy otázok sme zakopnúť.
Takže namiesto toho, nechajte ma ísť sem a povedať, keď som ich
menej ako 10 -
dovoľte mi, aby som sa zbaviť slučky for.
OK, takže máme pár problémov, ktoré v
Takže stav je rovnaký, ale ja som samozrejme chýbajú
inicializácia.
Som chýba inkrementace.
Takže to, čo by mal kompilátor pravdepodobne povedz mi, keď sa snažím
zostaviť tento program?
Jo?
PUBLIKUM: [nepočuteľnú].
>> DAVID J. Malan: Dobré.
Takže to bude hovoriť niečo ako neoficiálny - v tomto
prípade, že premenná i
A skutočne, použite nelegálnej identifikátor i
A tak to je v rozpore s jazykoch ako PHP a
Python a Ruby, s ktorou niektorí z vás by mohol byť oboznámení,
kde môžete to jednoducho začať používať premenné
chtiac-nechtiac, a nemusíte sa starať o vyhlásení im
explicitne vždy.
V C a v jazykoch, ako je Java a C + +, musíte byť
Super explicitné.
A ak chcete premennú s názvom i, musíš mi povedať,
aké premenné je.
Takže budeme musieť opraviť takto.
Budem musieť ísť sem a zadajte int i; preto,
Som deklaroval premennú s názvom i
Teraz som preskočil jeden krok.
Ja som samozrejme nie je inicializovaná, ale uvidíme, či to na
Aspoň značiek zvonenie prestaň sa sťažovať.
Takže dovoľte mi, aby som prerobil tento program.
>> Dobre, teraz je to len sťažovať
z iného dôvodu.
"Premenná" i "je inicializovaná pri použití tu." Dobre, tak
to je docela jasné.
Inicializovaný len znamená nastavenie je rovná hodnote.
A my sme neurobili, takže skúsim rovná 0.
Teraz sa poďme skúsiť to znova a znova spustiť zvonenie.
Spracovala tentoraz.
A ja som o tom ho spustiť.
Ale veľký starý nekonečná slučka, pretože som to urobil
inicializácia, urobil som podmienku, ale ja som nikdy nerobil
akýkoľvek druh inkrementace.
Tak ako to mám urobiť v inkrementace?
No, v cykle while, to vyzerá, budem mať
na to vnútri slučky, pretože podobne ako prvý
týždeň príklady robiť slučky konštrukcie, ako s
ponožky a self-počítanie, čo sme museli urobiť
niečo na samom konci, rád sa vrátiť na ďalší riadok.
Čo keď pôjdem do toho a to aj + + tu?
Poďme ani skompilovať to.
Chyť ma už.
Čo je tu zle?
PUBLIKUM: [nepočuteľnú].
>> DAVID J. Malan: Tak to rozhodne nie je int.
Je to i
A zložené zátvorky, ako predtým,
odsadenie nestačí.
Takže teraz som sa to postaviť.
Takže keď som je menšia ako 10, vytlačiť hviezdu,
potom zvyšovať i
A spôsob, akým pri slučka funguje tak, že akonáhle hit
Spodná časť slučky, ktorá je v tomto prípade vyzerá riadku 10,
to ísť späť do radu 6, na ktorom mieste
podmienka bude znovu.
A ak je aj naďalej nižší ako 10, urobíme linky 8 a
potom 9, potom budeme hit 10, a vrátiť sa do 6, znovu a
znova a znova a znova, tak dlho, ako som ich menší ako 10.
Takže poďme znova spustiť, aby tu.
>> Dobre, sme zostavili v poriadku.
Dovoľte mi, aby som znovu-run slučky.
A teraz to vlastne vyzerá, že pracuje.
Takže plusy a mínusy tu?
No, zatiaľ je to vlastne nie je celý PLO -
tak roztomilý.
Dobre, že je - ach, to bola nehoda.
Dobre, tak poďme späť k cyklu for.
Takže pre slučiek sú pekné, pretože ste super explicitné.
A aj keď sú trochu neohrabaný písať, že je to
veľmi silný a to vám umožní urobiť
viac vecí naraz.
While sa nezdá, že obrovské množstvo hodnoty len
Zatiaľ, pretože to vyzerá, budeme musieť urobiť viac práce.
Musíme dať inicializácia sem sa
aktualizovať tu dole, a musíme mať na pamäti, aby to všetko.
Tak uvidíme, v čase, ktorý while skutočne požičať
samy do niekoľkých rôznych kontextoch, rôzne údaje
štruktúry, ako zoznamy a hašovacia tabuliek, čo sa dostaneme
mid-semester.
Ale teraz, viem, že tam je to tretí typ známy ako do-
while.
A my sme videli túto krátko.
A to by mohlo byť super užitočné s PSet 1.
Kedykoľvek budete chcieť niečo urobiť, a potom skontrolujte, či
užívateľ spolupracoval, a ak nie, urobte to znova, do-
kým slučka požičiava seba k tomuto druhu logiky.
Vzhľadom k tomu, ako objednávať od zhora nadol tu naznačuje,
to doslovne znamená to.
A to znova a znova, možno to, čo to malo byť?
Možno to znamená volaní GetInt alebo GetString a potom
kontrolou hodnoty GetInt alebo GetString a potom kričí
na užívateľa, ak to nie je spolupracovali a požiadal ich,
znovu a znovu a znovu.
Kam chcete urobiť niečo raz,
potom skontrolovať nejakú podmienku.
>> Tak poďme to skúsiť.
Dovoľte mi, aby som skutočne zmeniť to teraz na do-while.
A ja idem ďalej a vykonajte nasledujúce.
Takže postupujte nasledovne.
Poďme urobiť int i = GetInt (), ale poďme sa najprv oznámiť užívateľovi
čo robiť.
Tak trochu iný tentoraz.
"Dajte mi int".
Takže budem používať printf za to.
A teraz idem tu dole, a ja urobím to
keď som ich, povedzme, väčšie ako -
uvidíme, aj je, povedzme, menej než 0, alebo aj je
väčší ako 10.
Inými slovami, chcem číslo 1-9, len
ľubovoľne.
Takže som pomocou kombinovaného logický výraz tu
uistiť, že aj je menší než 0 alebo väčší ako 10, v ktorom
prípad, že by som sa to urobiť slučku opäť tu.
Takže znovu, to -
zatiaľ čo aj je menší než 0 alebo aj je väčší ako 10.
>> Takže teraz poďme ďalej a urobiť to raz urobili sme to.
Poďme urobiť rýchlu kontrolu zdravý rozum.
printf ("Vďaka, aj je% d", i).
Takže tento jednoduchý program požiada užívateľa o int,
je si istý, že je to v nejakom rozsahu, 1-9 vrátane,
a potom ďakuje užívateľa pripomeňte im, čo práve
napísal v, rovnako ako malý predsa nie sú kontroly.
Ale uvidíme, či to funguje, ako bolo zamýšľané.
Nechaj ma ísť hlavou sem a znovu spustiť, aby slučku.
Hmm.
"Použitie nelegálnej identifikátor" i "". To je divné.
Myslel som, že sme sa rozhodli, že.
Rovnaký jav sa ale iný kód.
Jo?
PUBLIKUM: [Nepočuteľné] vnútri dva, musíme
[Nepočuteľné].
>> DAVID J. Malan: Presne tak.
Takže to vlastne vedie nás k téme známej ako rozsah.
Ukazuje sa, že C, opäť, je to naozaj vás doslova.
A ak sa vám niečo také, kde si deklarovať int
a potom priradiť mu nejakú hodnotu, ale vy, že vo vnútri
pár zložených zátvoriek, čo robí, je, že C sa predpokladá, že
chcú len tie 32 bitov známe ako aj existovať v rámci
súvislosti s týmito zloženými zátvorkami, v súvislosti s líniou
6 až 9. Tak som ich deklarovaný, a to je priradený
hodnota v riadku 8, ale akonáhle sa dostanete mimo
linka 9 pod ortézy kučeravé, aj už nie je v
rozsah, aby som tak povedal.
S-C-O-P-E. Je to už v správnom kontexte.
Takže teraz nie je aj tak, je to, ako by sme nemali ani
vyhlásil to vôbec.
>> Takže to, čo je oprava a potom na niečo také, ak
Dôvodom je to, že aj je deklarovaná v rámci zložených zátvoriek, ktoré
je zrejme zlé?
Tu?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Jo.
Takže môžeme inicializovať to vonku.
Tak nechaj ma ísť dopredu a odstráňte z vyhlásenia časti ktorý spočíva
Aj špecifikovať typ, a dovoľte mi, aby som to tu.
Takže v riadku 5, teraz hovorí, že "Dajte mi int." Nazvime to i
Všimnite si, v riadku 9, nechcem to urobiť, pretože som
už majú 32 bitov.
Nechcem sa opýtať počítač pre
rôzne 32 bitov.
Chcem používať tie isté 32 bitov.
A teraz, pretože som ich deklarovaná v súlade 5, je to stále legit
použiť v súlade 11 a riadok 12.
>> Tak skúsim prekompilovať to a vidieť
ak zvonenie prestane revať.
aby slučku.
Takže teraz je to "implicitná deklarácia funkcie
"GetInt" je neplatný v C99. "Čo je to?
Jo?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Jo.
Takže teraz, že som vlastne pomocou GetInt, to nie je niečo,
že práve prichádza s C. To pochádza z CS50.
Takže potrebujeme tu.
A nechaj ma ísť späť do riadku dole
tu a znova spustite make.
Dobre, konečne.
Teraz sme sa rozhodol, že aj na inú chybu.
Dovoľte mi, aby som teraz spustiť slučku a uvidíme, čo sa stane.
"Dajte mi int." Dám to 11.
Dám to -1.
Dám to foo.
Dám to 5.
A teraz to naozaj funguje.
Ale riadku zmeniť z nejakého dôvodu tu.
Prečo sa to povedať, opakovanie jednej z týchto čias, ale dajte mi
int ďalšie trikrát?
Prečo je to, že správanie líši?
PUBLIKUM: Dal jej reťazec.
DAVID J. Malan: Je nám ľúto,?
PUBLIKUM: Dal si jej reťazec.
DAVID J. Malan: Jo.
Tak sme to reťazec v tejto tretí pokus,
keď som napísal foo.
Foo je reťazec.
Je to samozrejme nie je int.
A spôsob, akým CS50 vykonalo GetInt je, že sme
nekontrolovať, ak niečo je menej ako 0 alebo väčšia ako 10
pre vás, pretože ako vieme, vopred, aké
int chcete?
Ale môžeme minimálne skontrolovať pre vás, to si užívateľský najmenej
zadajte celé číslo?
A keby nie, sme kričať na užívateľa zadaním "opakovanie" na
obrazovke.
>> Takže teraz máme program, ktorý je smyčkovací. Dobre.
Teraz, ktorý z nich je niečo ako lepší konštrukcia?
Takže toto je miesto, kde sa veci začnú sa dostať trochu chaotický,
Skutočnosť, že musíte mať na pamäti, ako deklarovať premennú sem
Ak chcete používať vnútri niektorých
Zložené zátvorky a mimo.
Ale aj keby to vyzerá trochu záhadný na prvý
pohľad, len znovu spomenúť na jednoduchú logiku.
Aby bolo možné použiť čokoľvek v jazyku C, či už je to funkcia alebo
je to premenná, musíte zahrnúť, ak je to funkcia
v niektorých knižnice, alebo budete musieť vyhlásiť ju.
Ale teraz musíte byť extra dbať na skutočnosť, že
ste vyhlásením v pravom rozsahu.
Nie ste uvedenie príliš tesne vnútri zátvoriek.
>> Dovoľte mi teda skutočne vrátiť.
Ak sa vrátime k nášmu napríklad z minulosti, a ja idem
späť na pre int, int i = 0; i <10; i + +, a ja
to printf hviezdy, ako je tento, a potom zatvorte párenie, a teraz
printf aj teraz -
Podľa rovnakej logiky, čo sa stane, keď sa snažím
zostaviť tento program?
Divákov: Neplatný identifikátor.
DAVID J. Malan: Takže je to ďalší neplatný identifikátor,
nedeklarovaný identifikátor.
Teraz, dôvodom je trochu iný.
Je tu samozrejme žiadne zložené zátvorky tu, ale rovnaké
idea, rovnaký príbeh rozsah platí.
Ak ste deklarovali premennú ako aj vo vnútri
pre sláčiky, aj keď ste výslovne napísal kučeravé
traky, myslím, že z nich psychicky ešte, že tam, kde
prípad aj je platná iba vnútri slučky for.
To nie je platné, akonáhle sa dostať na ďalší riadok, ktorý v
V tomto prípade je teraz 10.
Takže len niekoľko otázok, z rozsahu a podobne.
Dobre, nejaké otázky?
>> Dobre, takže toto je triviálne malého programu,
tlač len malé hviezdy.
Ale uvidíme, či si pamätáte túto pieseň tu.
To je neuveriteľne otravné pieseň deti spievali na
školský autobus a podobne.
Ale čo je pekné na tom je, že to má tento cyklickosti,
pričom je to "99 fliaš piva na stene,
99 fliaš piva.
Vezmite jeden dole, prejsť okolo, 98 fliaš piva na
múr. "A potom pieseň opakuje 97, potom 96, potom
95, potom 94, celú cestu až na 0, ak ste skutočne dostali, že
Ak na zbernicu.
Tak to je pekný program sa trochu náradie, pretože my
Bože, či by ste mohol len implementovať to s niekoľkými
riadkov kódu, môžete vypľuť celý text k tejto
song celkom rýchlo.
Ale na ceste, môžeme začať hneď šprýmař oddelene niektoré
z týchto základných smyčkování konštrukty a teraz tiež
zaviesť funkcie, ktoré budeme písať sami, návrat hodnôt
že sme sa prejsť okolo.
Ale najprv, prečo nejdeme dopredu a vziať naše päť minút
rozbiť tú?
A keď sa vrátime, budeme spievať túto pieseň.
>> Dobre, tak sme sa vrátili.
A keď hovorím, že teraz budeme spievať túto pieseň, myslím
programovo, nie slovne.
Takže tu máme beer1.c, čo je jedna implementácia tejto
osobitnú pieseň.
A len preto, aby bolo jasno, pre tých, ktorí nepoznajú, čo
tá vec vyzerá, nechaj ma ísť napred
a aby beer1, Enter.
Teraz mi dovoľte bežať beer1, a to, čo uvidíme - koľko fliaš
piva bude?
Budem písať 99, rovnako ako pieseň hovorí.
Enter.
A teraz, keď sme sa prechádzať -
oops - ak by sme prechádzať cez to všetko, uvidíme, že
Tento skutočne spievať celú pesničku.
Počkajte chvíľku.
Môj scroll bar je trochu spackal.
Poďme používať väčšie okná.
Takže beer1, 99, tam ideme.
Takže tu máme celú skladbu, spievaný oveľa rýchlejšie
počítač, ako by to mohlo byť u nás.
Takže upozornenie, keď ide o cyklickú povahu tu.
Hovorí 99, potom 99, potom "vziať jednu dole, odovzdať ju
okolo, "potom 98.
A teraz sa opakuje znova a znova.
>> Takže je to vlastne ideálna príležitosť pre akési
konštrukcie cyklu.
Všimnite si, že som trochu rezanie roh tu.
Všimnite si, že hovorím "98 fliaš piva na stene,
97 fliaš piva na stene, "a že je to tak
že keď sa dostaneme k jednému fliaš piva, nemám
sa starať o anglickej gramatiky.
Ale môžeme tiež opraviť s trochou ak
stav, možno.
Ak je toto číslo je singulární, choďte do toho a povedať "fľašu",
inak, ak je to množné číslo, povedzme "fľaše".
Ale teraz, som úplne rezanie, ktorá roh.
Tak sa pozrieme, čo tu máme.
Takže máme niekoľko poznámok na vrchole.
Som vrátane týchto dvoch knižníc, as
sme obyčajne boli.
A teraz mi dovoľte prejdite nadol na prvý
skutočné riadky kódu.
Riadok 17 začína hlavné.
Linka 21 a 20 má koľko fliaš piva bude?
A potom som zavolať GetInt.
A teraz mám trochu zdravý rozum kontroly.
>> Tak to je konvencie, že budeme teraz začať prijímať na
prísnejšie kontrolovať vstup užívateľa.
Niekedy si jednoducho nechcú, aby prinútili ich znovu
a znova a znova.
Pokiaľ užívateľ skrutky a nespolupracuje, v poriadku.
Ukončite a jednoducho sa s nimi vysporiadať.
A tak to je to, čo tu robím.
Ak je n menšie ako 1, ja len tak kričať na užívateľa,
"Prepáč, to nedáva zmysel." A potom budem
ľubovoľne vrátiť 1.
Takže znova, je to len konvencie zvyknúť.
Pre túto chvíľu, si to o viere.
Ale až do teraz, sme vždy vracia 0, pretože
sme povedali vracia 0 označuje, čo?
Divákov: Úspech.
DAVID J. Malan: Úspech, to je všetko.
Takže teraz, že sme konečne začínajú premýšľať o tom,
non-úspechy -
inými slovami, rohové prípady, chybové podmienky -
teraz mám nekonečnú ponuku, alebo aspoň štyri miliardy
možné veci, ktoré sa môžu pokaziť v mojich programoch.
A môžem začať priradiť im jednotlivé číslice.
Teraz, všeobecne stačí len návrat
niečo iné ako 0.
Takže budeme jednoducho vrátiť 1 pre teraz.
Ale dôvodom pre vrátenie 1 je, že akonáhle sa vrátite
1, odhadnúť, čo sa stane so zvyškom programu?
To zastaví.
To je všetko.
Takže skutočnosť, že sa vraciam 1 je účinne
skratovaniu tohto programu popravu, aby
nič pod líniu 27 bude pokračovať v realizácii.
Akonáhle hlavné vráti, že je to.
>> Dobre, takže ak užívateľ nemá spolupracovať a dôjdeme riadok 30
pretože napísal v legitímnym číslo, tu je moja
vykonávanie tejto piesne.
Tak som prvýkrát vytlačiť znak nového riadku, len pre
estetika.
Teraz mám pre sláčiky.
A všimnite si, že robím veci trochu
iného smeru.
Nemám robiť menej, než, nemám k tomu + +.
Môžem povedať, miesto inicializovať premennú i, nastavte ju rovno
n, číslo užívateľa zadané v, potom to nasledujúce, tak
ak aj je väčšia ako 0, potom aj -
akonáhle ste dokončil jeden iterácii tohto cyklu.
Takže môžeme odpočítavať pomocou slučky for rovnako.
Teraz, to je docela hodně týždeň jedna vec teraz, s printf.
Takže tlače "fľaše% d piva na stene." Print "% d
fľaše piva. "" Vezmi si jeden dole, prejsť okolo. "Tlač
"% D fliaš piva na stene." Takže je to stále% d, ale
Všimnite si, že argument funkcie printf sa mení.
Po čiarkou, ja som, pretože chcem povedať 99.
Po tomto čiarkou, ja som, pretože chcem povedať 99.
Po tomto čiarkou, mám i - 1, pretože chcem povedať 98 v
Tento prvý iterácii, a tak ďalej.
A teraz tu dole, budem musieť nejakú blbú malú poznámku.
A potom riadok 42, vraciam 0 konvencií, znamenať, že
všetko je v poriadku.
>> A čo keď som podelal?
Čo by mohlo bežnou chybou tu byť?
No, čo keby som náhodou povedal dobre, ja chcem počítať
až 0, chcem 0 fliaš piva na stene?
Tak som povedal, aj je väčší alebo rovné 0.
Čo to bude príznak, ktorý teraz vidím, či som prekompilovať
beer1 a spustiť?
Divákov: Negatívne.
DAVID J. Malan: Jo, bude to ísť negatívne.
To je off-by-one chyba, neuveriteľne
Bežnou chybou robiť.
Poďme skutočne ísť späť do okna terminálu a to
tu, tak môžeme vidieť viac naraz.
Zadajte, 99 fliaš piva.
Zavrieť, ale išli sme niekedy tak trochu príliš ďaleko.
Spievali sme pieseň príliš ďaleko, tak, že teraz hit
záporné číslo.
Takže to nie je úplne fungovať.
>> Dobre, takže môžeme ľahko opraviť, že sa vracia do
spôsob, ako to kedysi bolo.
Ale čo sú niektoré možnosti teraz
zlepšenie?
No, dovoľte mi otvoriť beer2.c a prejdite sem a zobrať
pozri sa na túto verziu.
Čo je prvá vec, ktorá vyskočí na vás, ako rôzne
v tejto verzii tu?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Jo, takže nič viac som, pretože došlo k
mi viete čo, ja sa pýtam užívateľa pre n, a potom som
nastavenie aj sa rovnať k n, a potom mením aj, ale ja som nikdy
dotýka n znovu.
Tak čo to sakra bol bod z vás prideľovanie ďalšie 32
bitov tzv i len preto, že môžem mať inú premennú?
Takže v tomto prípade, tak nejako som uznal, že zbytočné
charakteristika.
A ja som teraz chcel povedať, keď n je väčšie ako 0, prejdite
dopredu a vytlačiť rovnakú pesničku, odovzdaním n k printf ako
Druhý argument, a n - 1 ako druhý argument tu.
A potom na každej iterácii tohto cyklu, choďte do toho a len
decrement n sám.
Teraz, funkčne, tento program
bude totožné.
Keby som zadajte 99, n začína v 99.
Aj dekrement, dekrement, dekrement, útlm.
Idem si celú cestu až k "jednej fľaše piva na
stena, jedna fľaša piva.
Vezmite jeden dole, prejsť okolo.
0 fliaš piva na stene. "Koniec, pretože som
sa podmienka správne.
Je to väčšie ako 0.
Nechcel som, aby túto chybu.
>> Tak ktorý je lepší, verzia jeden alebo verziu dva?
Počul som veľa reptania pre dvoch.
Prečo dva?
Čo je to?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Oh, dobre.
Takže to nepôjde pod 0, ale pamätajte, vo verzii jedna,
Originálne správnu verziu nešiel pod 0 oboch.
Takže pamätajte, že je to správna verzia.
Tak nech je to aspoň tieto dve správne verzie.
Čo je argumentom v prospech verzia
dva byť, mmm, lepšie?
Jo?
PUBLIKUM: To zaberá menej miesta.
DAVID J. Malan: Dobre, tak to zaberá menej miesta, nie?
Vzhľadom k tomu, ktorý sa používa verzia 32 bitov pre n, a potom ďalšie
32 bitov pre i
Verzia dve používa iba 32 bitov pre n, tak, aby
Zdá sa, že plus.
Ostatné myšlienky?
Má niekto chcel argumentovať v prospech jedného?
Jo?
PUBLIKUM: Musíte použiť ďalší riadok kódu pre n -.
>> DAVID J. Malan: Dobre, určite.
Takže to je fér.
Takže to len, aspoň pre mňa -
Chcem povedať, toto skutočne cíti trochu Messier, skutočnosť, že
Nemôžem nejako zapouzdřit všetky moje logiky v jednom
prekrásna line, pre slučky, ako pre sláčiky môže.
Tu, som tak trochu sa k obratu na tejto n -
Na konci slučky, pretože
je to logicky nutné.
Ale celkom to leští mi zle, len preto, že
Zdá sa oddelene od logiky sa tu, aj keď,
znova, je to nutné.
Ostatné myšlienky?
Jo?
PUBLIKUM: [nepočuteľnú].
>> DAVID J. Malan: Jo.
Takže čo keď miesto toho, na konci skladby, chcel
vytlačiť znovu názov piesne?
Ako "Vďaka za hranie 99 fliaš piva", alebo niečo
hlúpe takto?
Ale ide o to, čo ste chceli prístup k pôvodnej hodnoty.
Skutočnosť, že ste mutované alebo zmeniť n na každom
iterácie, a preto sa zničil jeho pôvodnú hodnotu
znamená, že jednoducho nemôže robiť, že na konci.
Teraz, pravdepodobne sme jasne nechceme robiť
, Že v tomto programe.
Takže koho to zaujíma?
Ale to je veľmi platný bod.
A aby som bol úprimný, je to naozaj nikto
správna odpoveď tu.
Sú obaja rovnako správne.
Mohol by som byť presvedčený o tom, v oboch smeroch.
Nebudem hovoriť, že, všeobecne, je to dobrá zásada, ak
požiadal užívateľa o nejakej hodnoty a je uložený v premennej
ako n, len trochu na princípe, že je to asi dobre
aby, že okolo.
A akékoľvek dáta, ktoré chcete mutovať znova a znova, len
dať si kópiu tejto premennej, len preto, že ste
majú prístup k originálu.
Nachádzate sa trávia 32 viac bitov, ale realita je to
počítač, softvér, dva gigabajty pamäte RAM v týchto dňoch,
a my sme hašterenie cez 32 bitov?
Naozaj nie je tak veľký problém.
A aj na tomto zariadení tu, s polovicou koncertu alebo
gigabyte RAM, 32 bitov oproti 64 bitov,
nie je tak veľký problém.
Iste dnes, to bude tak ohromený podľa veľkosti
samotnom programe, ktorý bude mať niekoľko stoviek
kB, ak nie niekoľko megabajtov, v týchto dňoch.
>> Takže rozumné obavy, nie jediná správna odpoveď.
Ale aspoň to sú myšlienky, ktoré by mali začať na
prejsť vašej mysle?
Pretože v PSet 0, aj keď naozaj len čakal,
správnosť, alebo aspoň popretie rôzne chyby, že
môžete sa stretli, ako sme vpred, dizajn
bude ďalším kľúčovým aspektom, a to ako z písania kódu
a tiež naše hodnotenie kód.
A tak aspoň dať si na veci, ako je tento.
A len preto, že niečo funguje neznamená že je to dobré,
neznamená, že je to dobre navrhnutý.
A to je jedna z vecí, ktoré výučby lektorov a
problém sady nám pomôže podpichovať časť v priebehu času.
>> No, čo asi, povedzme, túto verziu tu?
Dovoľte mi, aby som niečo trochu sexy tu za chvíľu.
Najprv mi dovoľte sa zbaviť toho.
A teraz poďme vyriešiť tento gramatický problém.
Takže v tejto verzii, chcem opraviť gramatiku tak, aby
skôr než len povedať vsunutie s, rovnako ako "fľašu"
alebo "fľaše" -
Nechcem znižovať, aby roh -
Chcem tiež dynamicky vytlačiť slovo "fľaše"
alebo "fľašu", čím sa pomocou týchto% s zástupné symboly dnes.
Tak som potrebné podmienečne zistiť, aká je hodnota i
A či je to 1, chcem povedať, "fľašu", a ak je to niečo
iného, ​​chcem povedať, "fliaš". Tak skúsme to.
Takže ak aj == 1, potom nechajte ma ísť dopredu a vyhlásiť -
Potrebujem reťazec, tak nech mi to reťazec s1, pretože je to
Prvý reťazec ja sa starám o práve teraz.
Ja poviem "fľašu". A potom, uvidíme, string
s2 - a ja ti to vysvetlím, kam idem za chvíľu -
"Fľaše". Takže pripomenúť, že v tejto piesni, musíme byť schopní
tlačiť veci, dve rôzne slová potenciálne.
Takže keď sa pozrieme späť, zistíte, že keď sa dostaneme do
tento príklad tu, "dve fľaše piva na stene,
dve fľaše piva, vziať jednu dole, prejsť okolo ", chcem
Tento štvrtý riadok sa dnes hovorí, "jednu fľašu piva na
múr ". Tak som potrebné rozhodnúť, chcem povedať," fliaš "alebo
"Bottle"? Takže budem ľubovoľne povedať, dobre,
Idem teraz deklaruje premennú s názvom S1, reťazec
jeden, ktorý ich dostane zapojený sem aj tu,
pretože tieto slová sú vždy zhodné, len preto, že z
povaha piesne.
A ja idem volať s2, čo slovo chcem
nakoniec sa objaví tu.
Teraz, doslova, 99 krát z 100, to bude
rovnaký v oboch týchto prípadoch, pretože 3 je množné číslo, 2 je
množné číslo, 4 je množné.
Ale v tomto rohu prípade, kedy sa dostaneme do 2 a potom 1, alebo
dokonca 1 a potom 0, musím túto logiku.
Tak som sa stráviť nejaký čas v mojom kóde dostať toto právo.
Takže ak som to, keď som == 1, potom nastaviť s1 rovná "fľašu"
a s2 presne "fliaš", pretože to bude pre 1
Fľaša, a to bude pre 0 fliaš.
A toto, čo to predstavuje?
Len aby bolo jasno.
To je len poznámka.
Takže skutočnosť, že môžete mať jednoriadkové komentáre sa rozumie vás
môže vyjadriť svoj kód, ako je tento, ale ďalšie spoločné
paradigma, tiež je, že ak máte super krátku frázu, ktorá
Chcete sa vžiť a je to len čitateľnejší, aby
to priamo na konci riadku kódu, môžete
úplne niečo takého.
>> Takže čo teraz, ak to urobiť? Else ak je aj nie je rovné 1.
Takže bang rovná -
Výkričník je známy ako "bang".
Takže bang = 1.
Takže ak je aj nie je rovné 1, čo mám namiesto toho chcete robiť?
No, prvé slovo, ktoré som chcem byť čo?
Takže reťazec 1 by mala byť "fľaše" pre pluralitných fliaš,
a potom to bude množné "fľaše" dobre, pretože teraz.
A uvidíme, či to tak skutočne dostane k nám na
kde chceme ísť.
Takže teraz, keď som sa posunúť dole tu, všimnite si, že som pripojením
nielen ja, ale s1.
Som zapojíte i a S1.
A potom sa tu, že som mínus 1, ktorý je rovnaký ako
pred, ale s2.
Inými slovami, chcem anglické slovo zmeniť na základe
Na základe tejto logiky.
Teraz je tu už niektoré problémy v tomto kóde.
Čo je rozbité už z brány tu?
Jo?
PUBLIKUM: [nepočuteľnú].
>> DAVID J. Malan: Presne tak.
Takže som už porušil lekciu rozsahu.
Tak som vyhlásil s1 a s2, ale urobil som to vnútri
Zložené zátvorky, čo znamená, jo, bude tento kód fungovať až
do riadku 42, ale akonáhle som narazila riadok 43, hádajte čo nie
už existuje?
No, vieš čo je už v rozsahu - ani s1 alebo s2.
Takže musíme to opraviť.
Dovoľte mi teda odstrániť vyhlásenie.
A nechám názvy premenných a odstrániť to tu
a odstrániť to tu.
A v tom, čo riadky by mali naozaj vyhlásiť tieto veci?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Jo, tak asi
priamo tu, 33-ish.
Takže reťazca s1 a potom reťazec s2.
A ukázalo sa, ja to zvládnem.
Ak ste prehlasuje dve premenné rovnakého typu,
môžete skutočne stačí použiť čiarku a to, že v C. Všetky
Dobre, takže teraz mám dve premenné -
s1 a s2.
Ja priradiť im hodnoty v týchto
podmienky tu, alebo tu.
A potom som pomocou je dole.
Ako dobre sa to teraz bude fungovať?
>> No, je to stále trochu buggy, ale poďme aspoň vidieť
ako ďaleko sme sa dostali.
Tak nechaj ma ísť dopredu a robiť beer3.
Je to beer3?
Jo, to je beer3.
A teraz mi dovoľte pokračovať a spustiť beer3.
399 99.
Pravdepodobne môžeme preskočiť väčšinu z nich.
A tu dole, pozri sa na to.
"Jedna fľaša piva na stene, jedna fľaša piva, sa
jeden dole, prejsť okolo, 0 fliaš piva na stene. "
Ale ja som kreslenie pozornosť iba polovicu roztoku.
Druh podelal tu.
Takže sa zdá, že rohové prípady nastávajú, ak aj rovnajú tomu, čo
dve hodnoty?
PUBLIKUM: 2, 1.
DAVID J. Malan: 2 a 1.
Nie je to 1 a nie 1.
Je to naozaj len tieto dve posledné slohy tejto piesne.
Takže to, čo mám namiesto toho chcete robiť?
Tak sa mi zdá, že chytil na prípad, kedy ak je i == až 1,
potom prvé slovo je "fľašu", ale druhé slovo
je "fľaše". Ale tu, chcem to zmeniť, aby bolo == 2.
A ak to tak je, čo ja chcem
prvé slovo má byť?
PUBLIKUM: "Fľaše".
DAVID J. Malan: "Fľaše", tak za dve fľaše.
A potom je tu slovo by malo byť -
PUBLIKUM: "Bottle".
DAVID J. Malan: "Bottle", singulární.
>> Dobre, poďme vzdialite, vrátiť sa sem, re-spustite make,
re-run beer3, typ 99 znovu.
Dobre, "Segmentation fault (core dumpingové)."
Čo som urobil zle?
PUBLIKUM: Nemáte hodnotu [nepočuteľnú].
DAVID J. Malan: Ah, vynikajúci bod.
Dobre, tak čo je zle?
Takže Segmentation fault, a my vlastne bude vidieť
tento docela niekoľkokrát v budúcnosti, zámerne.
Ale teraz, čo to vlastne znamená?
Segmentation fault takmer vždy znamená, že máte
nejako sa pokúsil o prístup pamäte, RAM v počítači,
že nevlastníte, že ste v skutočnosti požiadal
operačný systém pre.
Takže v tomto prípade, upozornenia, čo som urobil, čo je
chybný v mojom logike.
Som previedol S1 a S2 hodnotu, ak aj rovná 1.
Tiež som urobil, že keď som sa rovná 2.
Ale ja som to neurobil v nekonečnej rade ďalších
možnosti -
najmä, 3 alebo 4, alebo bodka, bodka, bodka, 99.
Takže jedna oprava by to mohlo byť len poďme
majú iného stavu.
A nechaj ma ísť sem a povedať s1 rovná -
čo by malo byť?
PUBLIKUM: [nepočuteľnú].
>> DAVID J. Malan: "Fľaše", pretože v bežnom prípade,
je to len samé.
Takže sa rovná quote, koniec citátu, "fľaše." Takže pre množné
fľaše, a potom tu, plurálovej fliaš.
Dobre, takže teraz mi dovoľte vrátiť sa k môjmu terminálovom okne,
rekompilovat, re-spustiť.
99.
Uff.
A poďme urobiť rýchly zdravý rozum kontrolu.
Technicky, že chceme, aby si všetky tieto, aby sa ubezpečil
sú správne, ale poďme sa pozrieť na
najmenej známe vinníkov.
3 fľaše, 2 fľaše, 2 fľaše, 1
fľaša, 1 fľaša, 0 fľaše.
Zdá sa, že sa aspoň stanoviť je pre teraz.
Ale úlovok je, že to, čo boh hrozné bordel je to
len vyriešiť hlúpy
jeden znak gramatické detail.
Takže tam je trochu toho dôvodu, že som rez tohto kúta
skôr, pretože je to len celkom nepríjemné musieť
napísať toľko kód.
Ale ukazuje sa, že je tu niečo viac elegantné spôsoby
vyjadrujúce presne to isté.
A môžeme to takto.
>> Dovoľte mi, aby som ponechať na obrazovke na chvíľu a
predstaviť niečo známy ako ternárny operátor.
To je tak trochu one-vložky, ktorá je len chcel, aby sa naše
žije trochu zvodnejšie, ako sľúbil.
A ja budem robiť to takto.
Daj mi reťazec s názvom s1, a dovoľte mi, aby som
priradiť to nasledujúcim spôsobom.
(I == 1)?
"Fľaša", inak "fľaše". String s2 dostane (i == 2)?
"Fľaša", inak "fľaše".
Takže to, čo je teda rozdiel?
Tieto dva riadky kódu, tvrdím, môže
nahradiť celú neporiadok.
Tak hovorím, že neporiadok, len preto, že druh trie mi
zle, že je to tak veľa riadkov kódu.
Nie je zlé.
Nie je to zlý dizajn.
Rovnako ako, to je úplne správne a úplne v poriadku.
Ale kódovanie dostane únavné, ak budete mať možnosť vyjadriť sa tak
zatraceně konkrétne znovu a znovu a znovu s jednoduchou
scenár takhle.
Takže C má niektoré klávesové skratky, ako je tento.
Takže to v podstate hovorí, deklarovať reťazec s názvom s1 a
priradiť buď táto hodnota, alebo je táto hodnota ak je i == -
ľúto, mal to povedať jasnejšie.
Deklarovať premennú s1, priradiť jej túto hodnotu, ak je to pravda.
V opačnom prípade, priraďte túto hodnotu.
Takže inými slovami, to je druh jednoriadkové spôsobu
hovorí Ak iný, ale robí úlohu na ceste.
Takže ak i = 1, potom choďte do toho a hovoria "fľašu". A
potom to ostatné, nazývať to "fľaše". Medzitým, s2,
Druhé slovo, ktoré je potrebné definovať, či aj rovná 2, zídeme sa
nastaviť s2 na "fľašu". V opačnom prípade, nastavte ju na "fliaš". A čo
to znamená, teraz ich môžem prejsť a odstrániť všetky
tie riadky kódu.
A keď hovorím, trochu smiešne, že je to teraz
zvodnejšie, je to sexy v druhu štylistické zmysle.
Skutočnosť, že funkčne, tento kód bude skutočne
urobiť presne to isté.
A aj keď to môže vyzerať trochu záhadný na prvý
pohľad, pretože sme to videli túto konštrukciu pred, tak by som
tvrdí, že to nakoniec bude oveľa viac
čitateľné a tak oveľa jednoduchšie pre my ľudia sa trochu
pochopiť, pretože teraz môžete len čítať
Kód na jednom riadku.
Je to stále podobné ducha vtedy, ak je to
stav a potom je to to, čo je vo vnútri, ak, a to
je to, čo je vo vnútri iného.
Ale môžeme urobiť len oveľa viac elegantne.
>> A keď som teraz späť k môjmu terminálu, čo budú všetky
z týchto liniek a nahradil ich len tých dvoch,
rekompilovat, re-run fliaš piva s 99, všimnite si, že moja
gramatika je, v skutočnosti, stále správna.
Takže znova, niečo začať.
2 fľaše piva, 1 fľašu piva.
Vyzerá dobre.
Jo.
Tak tu to máme oveľa stručnejší riešenie.
Tak toto taky, ako si získať viac vyhovuje C, nie
nutne s prvým PSet alebo aj druhé, ale
si uvedomiť, že tieto pojmy nám umožní robiť veci stále
viac elegantne.
Teraz sa poďme urobiť jednu vec tu.
Nechaj ma ísť napred a otvoriť return1.c.
Teraz poďme začať riešiť ďalší problém spôsobom, ktorý
nám umožňuje písať sofistikovanejšie kód.
>> Tak tu je to jednoduchý malý program, ktorého zmysel života
je zvýšiť hodnoty.
A skutočne, poďme o krok späť.
Nechaj ma to urobiť ručne.
Dovoľte mi, aby som to patrí a int main (void).
A dovoľte mi, aby som volanie tejto increment.c.
A čo chcem robiť?
Chystám sa ísť dopredu a povedať niečo ako -
budeme volať čísla rovnaká -
int x.
Takže int x dostane 2; printf x je% d, nový riadok, x.
Takže píšem rýchlo, ale nejako známe veci teraz.
Potom budem robiť x + +.
Potom budem tlačiť rovnakú vetu znovu.
A potom budem vracať 0 len ukončite program.
Dobre, tak to je program, ktorý
zvýši číslo.
Je to prvá bude inicializovať niečo 2, a potom je to
bude zvyšovať, a vytlačiť znovu.
>> Takže poďme spustiť prírastok, neuveriteľne jednoduchý program.
Predpokladajme však, že teraz, že chcem, aby kocka hodnotu, tak sa
niečo trochu subjektívne.
A ja vlastne chcem robiť x dostane kocku neho.
Takže by som mohol použiť to, čo sa nazýva funkcia pow, ale ja nie
Naozaj viete, kde to je ešte.
Takže budem robiť to staromódnym spôsobom.
x krát ktorý sa rovná x krát x krát x.
Takže som Cubing hodnotu, že sa vynásobí sám znovu
a znova, tak, že sa sa výkon
z 3 v tomto prípade.
Takže teraz čísla by som tlačiť by mala byť, ako uvidíme
tu - aby prírastok, takže je to vlastne nie je naozaj zvýšiť
už, ale necháme meno sám -
2 a potom 8.
Teraz máme začiatky príležitosť pre zdokonaľovanie
tu, pričom táto cubing vec násobenie čísla
sama o sebe sama o sebe sama o sebe sa cíti ako by to mohlo byť len
vhodné mať ako funkcia, podobne ako niekto rozhodol
rokmi - viete, trochu užitočná, ak jeden z nás sa posadí
a píše printf tak, že zvyšok sveta sa môžu použiť,
prečo by sme si sadnúť a napísať funkciu nazvanú kocky
, Ktorý toto Cubing pre nás, takže sme sa nemuseli ručne
vykonávať pojem Cubing hodnoty tu?
>> Tak jednoduchý príklad, ale poďme ďalej a použiť ich ako
možnosť napísať vlastnú funkciu.
Tak zatiaľ, sme používa iba hlavné, a sme použili iné
Funkcia ľudí, ale my sme nenapísal naše vlastné.
Tak ideme na to.
Chystám sa ísť dopredu a napísať funkciu nazvanú kocky.
A ja budem mať to trvať vstup.
Takže jeho vstupné bude celé číslo.
A čo to bude robiť?
Bude to vyhlásiť int výstup = vstup krát vstup
krát vstup.
A potom to bude vrátiť tento výstup.
A potom som musel byť konkrétne teraz.
Táto funkcia bude vracať hodnotu typu int.
Takže tu je potom, ako by ste písať svoje vlastné funkcie.
Si najprv ujasniť, čo je meno vášho
Funkcia bude.
A všeobecne, niečo vysvetľovacie je dobré, tak budem
hovoria kocky.
Potom budete musieť určiť, čo to bude vrátiť, čo je
jeho výstup bude.
A nemáme, že veľa možností ešte.
Int, char, float, bool, string.
Pre túto chvíľu, budem držať s int, pretože chcem to
vráti celočíselnú hodnotu.
Potom budete musieť určiť, čo jeho vstupy, ak existujú, sú.
A ak kocka argument, trvá niečo medzi
zátvorky, musíte dať tento argument názov tak, aby
môžete volať to niečo, čo sa ti, ktorým sa vykonáva, alebo písomne
táto funkcia, a budete musieť dať typ, ktorý v tejto
Prípad bude int.
Takže v skratke, kocka je funkcia, ktorá zoberie celé číslo
ako vstup a vráti celočíselnú ako výstup.
>> Takže to, čo to robí s tou vstup?
No, v riadku 14, vyhlasujem premennú zvanú výstup, a ja
priradiť jej hodnotu, vstupné krát vstup časy vstupné.
A potom som sa vrátiť výstup.
Tak ako ich môžem použiť toto?
Čo mám zmeniť tieto zvýraznené znaky na riadku
7 k, myslíš?
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Jo, tak kocka x.
Takže x je premenná, čo znamená, že má určitú hodnotu.
Našťastie, to je typu integer.
A pretože x je int, to znamená, že môžem odovzdať ju do kocky.
A to aj napriek tomu som prepísanie hodnotu x s ​​hodnotou
z kocky x, ako tomu bolo doteraz, kedykoľvek budete
majú znamienko rovná sa a riadok kódu na stiahnutie na pravej
sa vykoná, a potom dostane priradený
hodnota na ľavej strane.
Takže poradie operácií je, ako by sme dúfať.
Takže to funguje?
No, nechajte ma ísť sem dole.
Dovoľte mi, aby som otvoria svoje okno terminálu.
Dovoľte mi, aby som sa, aby prírastok, Enter.
"Implicitná vyhlásenie o funkcie" kocky ", je neplatný v
C99. "Ako stranou, C99 odkazuje na jazyku C, ako to bolo
definované v roku 1999, ktorý bol update cez verzii z
1989, čo je zmena v priebehu pôvodnej.
Tak to je všetko, čo znamená.
>> Takže čo to znamená, že "implicitné vyhlásenie
funkcia "kocka" je neplatná? "Je to priamo tu.
Je to priamo tu v súlade 12.
PUBLIKUM: [nepočuteľnú].
DAVID J. Malan: Čo je to?
PUBLIKUM: To nie skôr.
DAVID J. Malan: To nie je pred.
Tak toto je vec.
C je druh hlúpy, alebo C kompilátory sú trochu hlúpe.
Sú naozaj len to, čo poviete, aby robili.
A oni, najmä, len si prečítať kód top dole,
zľava doprava.
Takže ak kompilátor, zvonenie, číta kód, riadok 1, je
zistí, ako to urobiť.
Oh, tu je hlavné.
Dobre, nechaj ma ísť napred a deklarovať premennú x.
Dovoľte mi, aby som niečo tlačíte.
Linka 7, čo to sakra je kocka?
Nie je to vyhlásil v stdio.h.
To neprichádza s C. Nemám tušenie, čo robiť.
A tak zvonenie len kaucií a ukončený s týmto chybovým hlásením.
Takže môžeme opraviť v niekoľkými spôsobmi.
Naučíme klap, čo kocka je len o pohybe, ak
vyhlásenie.
Tak som vybrať a vložiť ho na vrchole hlavnej.
Teraz si uvedomiť, že len preto, že hlavná nie je prvý, je to
ešte vykonané v predvolenom nastavení.
Hlavné je hlavné.
Je to predvolený názov funkcie.
Nezáleží na tom, ak je v súbore.
Ale aspoň teraz zvonenie videl kocku, než som ju používať.
Tak uvidíme, či zvonenie je šťastnejší.
Urobte prírastok, to skompilovať tento čas.
>> Dovoľte mi, aby som bežať prírastok.
A skutočne, zdá sa, že funguje.
Teraz, môžete prísť so scenármi nakoniec, kde
to nie je možné, aby všetky funkcie
nad všetky ostatné funkcie.
Budete uviaznu v tejto nekonečnej slučke v skutočnosti,
ak ten chlap chce byť, ale to
chlap musí byť tam.
Takže nemusí vždy fungovať.
Takže našťastie, C má viac elegantné riešenie.
Chystám sa dať to späť, kde to bolo, len preto, že som
preferujú, ako v zásade, že hlavná vždy
na vrchole, pretože je to len pekné vidieť, čo tento program
sa v predvolenom nastavení.
A čo budem robiť, až tu sa vyhlásiť to, čo sa nazýva
prototyp.
Chystám sa znovu prehlasujem, že kocka funkciu doslova
kopírovanie a vkladanie.
Vlastne, to nie je doslova.
Takže doslova kopírovanie a vkladanie riadku 15
hore súlade 6.
Nezáleží na tom, aký postoj to skončí na.
Stáva sa, že je na linke 4.
Ale to musí byť pred hlavnou.
Ale všimnite si rozdiel.
Linka 4 konca bodkočiarkou, čo znamená, hej,
Rinčať, verte mi za to, že existuje funkcia
tzv kocku, ktorá vezme int a vracia int.
Ale ja nie som ti to povedať, čo to je.
Len viem, že som sľúbiť, že ti nakoniec.
A skutočne, teraz je to v poriadku, že je to dole.
>> Takže je to všeobecne lepšie, pretože potom v hornej časti
váš súbor, stačí odriekať, rapid-fire, jeden riadok
Každý, aké názvy vašich funkcií, aké sú ich
vstupy sú, aké sú ich výstupy sú.
A byť jasnejšie, vstupné všeobecne znamená argument alebo
parameter, synonymom.
Výstup sa rozumie návratovú hodnotu, čo to
ruka sa ku mne.
Takže v tomto prípade tu, že kocka vyhlásená v hornej časti, ale
definovaný, inak známa ako realizovaný, v dolnej časti.
Takže teraz sa vráťme sem a znova spustiť tento.
Takže teraz ma nechaj ísť dopredu a znovu spustiť, aby, znovu spustiť prírastok.
A teraz sa zdá, že funguje v pohode.
Takže teraz môžeme ísť dopredu a vytknúť niečo ako
Pivo príklad do tejto štvrtej verzie.
Dovoľte mi teda prejdite sem.
A zistíte, že som tak trochu vzal túto lekciu k srdcu práve teraz.
Skutočnosť, že som spieval rovnakú slohu znova a
znovu a znovu, rovnako Chorus Line v piesni, cítil
Rád prečo nie ja faktorom, ktorý sa do funkcie?
A skutočne, malo by to byť jedna z motivácií.
Okrem toho, že niekto iný na svete mohol chcieť
použiť kocky funkciu -
to je dobrý dôvod na faktor niečo a napísať svoj
vlastné vlastné funkcie -
v prípade, že je kus kódu vo vašom programe, ktorý práve robí
koncepčné pocit, že tak nejako chceš, aby to
Názov - ako v tomto prípade, zbor -
potom môže podobne napísať, že ako samostatná funkcia.
Nemusíte písať všetko v hlavnom pokiaľ to len
cíti čistejšie oddeliť ju a dať mu meno.
>> Takže v tomto prípade tu si všimnite, že mám komentár na vrchole
Táto funkcia, ktorá práve spieva o tom,
uvedené počty fliaš.
Všimnite si, že nemám potrebu volať tieto
veci vstupné a výstupné.
V skutočnosti, tentoraz som volal môj vstup B pre fľašu.
A všimnite si, tu, void naznačuje, čo?
To chorus -
PUBLIKUM: Má ho nemohla vrátiť.
DAVID J. Malan: nevracia hodnotu.
A skutočne, funkcie nemajú vracať hodnoty.
Môžu len niečo.
Môžu mať čo sa nazýva vedľajšie účinky, ktoré v tejto
prípad je len celá partia tlače na obrazovke.
Tak zistíte, že tento kód tu, som doslova ukradol
predchádzajúci príklad.
Jediný rozdiel je, namiesto použitia aj ako môj
premenná, som teraz používa b ako môj premenné.
Tak som si b tu dole, mám b tu dole, mám b
mínus 1 tu.
Ale kód je presne rovnaký.
Ale len tí ukáže hneď, ako môžeme použiť, nechajte ma ísť
dopredu a skutočne zmeniť to byť pre sláčiky.
for (int i = n; i> n, i -).
>> Tak som ukradol, že z nášho predchádzajúceho príkladu.
Predtým, to je v súlade 37 vyplýva, že by som začal
spievať tento nepríjemný pieseň.
Ale namiesto toho, ja len tak teraz volajú zbor i
Hotovo.
Takže teraz v každej iterácii tohto cyklu, hovorím to iné
funkcie, chorus, že som sa náhodou písať.
To nebola napísaná niekým iným rokmi.
Ale chorus, medzitým, používa printf pre tlač
z týchto štyroch liniek.
Ale fakt, že volám refrén znovu a znovu v roku
loop znamená, že budem sa dostať, na samom konci,
presne rovnaký song, ako som sa tak ďaleko.
Takže v skratke, teraz, keď sa pozriem späť na môj kód, aj keď
funkčne je to rovnaké, zistíte, že je to
začína byť ešte viac čitateľné.
Ja presne neviem, ako GetInt
je realizovaný.
Úprimne povedané, neviem, ako je implementovaná chorus.
Ale to nezáleží na mne.
Nezaujíma ma, pretože teraz môžem nejako, ako človek, prečítajte si
to z vrcholu k dolnej časti.
A pretože funkcie sú pomenované podľa toho, čo
robiť, môj kód je stále čitateľný.
A ako naše programy dostať oveľa zložitejšie -
podľa semestra je koniec, budete písať stovky riadkov
kódu v jazykoch ako PHP a JavaScriptu a ako -
zistíte, že je to tak oveľa jednoduchšie, ako si udržať prehľad o
čo si urobil.
A keď začnete spolupracovať s priateľmi alebo
partnermi alebo kolegami, budete môcť písať oveľa viac
masívne programy od spustenia vykonávať tieto základné
stavebné kamene.
>> Takže s tým povedal, prečo nie my hovoríme deň?
A my sa uvidíme v stredu.
[APPLAUSE]