[Powered by Google Translate] DAVID J. Malan: Dobře.
To je CS50, a to je konec týdne dva.
Pokud očekáváte, že hlad po této době zítra, vím, že s tím budeme
svolat jako malé skupiny zítra, ve čtvrtek, 13:15.
Tam je to URL zde, pokud chcete RSVP.
Prostor je omezený, proto prosím omluvte, pokud byl formulář vyplněn až v době, kdy
vyplnit to.
Další URL ačkoli to by mohlo být zajímavé je to.
>> Takže jen asi měsíc času, kurz se bude k dispozici
všechny obecněji přes EDX, přes které lidé na internetu budou
možnost sledovat spolu, angažovat se v průběhu poměrně aktivně, ve skutečnosti.
Budou používat CS50 Appliance a CS50 diskutovat a většina z
různé softwarové nástroje, které jsme již používali tento semestr.
A jednou z iniciativ bychom chtěli, aby se na jako experiment v letošním roce
je vidět, kolik obsahu můžeme přeložit do jiných mluvený a
psané jazyky.
Takže pokud byste mohli mít zájem o účast v tomto projektu, podle něhož
budeme poskytovat anglické přepisy a titulky pro kurz je
přednášky a šortky a semináře a profily a podobně -
pokud mluvíte plynule nebo psát plynně nějaký jiný jazyk, by se
rádi vtáhnout vás do tohoto projektu, kdy budete mít na jednom nebo více z
Videa, jejich převedení do jazyka znáte docela dobře.
Chcete-li dát vám pocit rozhraní, tam je to web-based uživatelské rozhraní
že budeme používat, že vytvoří v podstatě uživatelské rozhraní, jako je tento.
Toto bylo mi učil některé Halloween před.
A na pravé straně tam v černém vedle těchto časových razítek,
uvidíte různé věci, které vyšly z mých úst, že den.
A pak pod ním, budete moci převést do nějakého jiného jazyka.
Přesně to, co je mapování mezi, v tomto případě, anglický
a, řekněme, španělsky.
Takže je to vlastně velmi uživatelsky příjemný nástroj.
Můžete přetáčet dopředu velmi rychle pomocí klávesových zkratek.
Takže pokud byste chtěli zúčastnit tohoto experimentu a mít vaše slova
vidět a číst potenciálně tisíce lidí tam, prosím, co mají pocit,
možnost účastnit.
>> Nyní jedno slovo o kotě od pondělí, jinak jsme poslali příliš
strašidelné zprávy.
Si uvědomit, že pracovní doba navrhnout a jako sekce naznačují,
Konstrukce předmětu je velmi mnoho se studenti spolupracují a
mluví k práci problémových souborů a problémy společně.
A opravdu linka právě přichází do, opět, práce, kterou nakonec
by měl předložit by měl být váš vlastní.
A tak je to, zcela upřímně - v úředních hodinách, je to úplně normální -
je to úplně očekávat, dokonce - k chatování s některými
přátelé vedle vás.
Jestliže on nebo ona se potýká s nějakým tématem, a ty jsi jako, oh, hluboko
mi, abych vám pohled některých řádek kódu, který jsem napsal.
To je v pořádku.
To se stává.
A to je velmi příznivé, myslím, s procesem učení.
Pokud line, opět dostane přešel je, když hlava je trochu naklonil nad
zde příliš mnoho sekund nebo minut pro které opravdu mají jen
byl odblokování příležitost pro svého přítele.
A jistě, když se věci vyměňují prostřednictvím e-mailu a Dropbox a
jako, i zde je řada.
Takže v každém případě, cítit pohodlně a cítit povzbuzeni k chatovat s přáteli
a spolužáci o psets a další.
A jen uvědomit, že to, co si nakonec že by měly být opravdu
produkt vaší tvorby a ne někdo jiný.
>> Takže ve stejném stylu plyšové stvoření, můžete
víte o tom chlapovi tady.
Tak tohle je děsivě kýčovité film z let.
Každý, kdo sem viděl Spaceballs?
Dobrá.
Tak dobré číslo zde.
Tak toto je naše úžasně akademický způsob zavádění dnes nakonec
pojem kryptografie.
A tak jeden z problémů domény specifické pro PSet 2, která přijde
z pozdní zítra večer, je ponořit se do světa kryptografie, která
je umění šifrování nebo kódování informací.
A to nakonec týká světě bezpečnosti.
>> Nyní zabezpečení pro většinu nás přichází v podobě poměrně světských mechanismů.
Každý z nás má uživatelská jména a hesla.
A každý z nás má velmi špatné uživatelská jména a hesla, s největší pravděpodobností.
Pokud je heslo stejné na několika webových stránkách, že to asi není
nejlepší nápad, jak budeme diskutovat na semestr konci.
Pokud heslo je napsané na lepicí poznámku - není vtip - na vašem
monitor, to taky nemusí být nutně nejlepší design, ale docela obyčejný
jev.
A pokud si nejste s použitím kryptografie k šifrování hesel, které jsou
obzvláště zranitelné.
Takže pokud si myslíte, že jste byl výborný chytrá mající skrytou Word
dokumentu někde na pevném disku, který má všechna vaše hesla, ale
je to ve složce, která nikdo to bude vypadat v, že také není moc
bezpečný mechanismus.
A tak to, co Pset 2 se představí, je to umění kryptografie a
zakódování informace, takže věci jako hesla jsou
všechny bezpečnější.
Tak, aby motivoval tento velmi reálné problém s velmi non-real-world
scénář, dovolte mi, abych vám představil jednu z našich oblíbených klipů sem z toho
film, Spaceballs.
>> [PŘEHRÁVÁNÍ]
-Přilba, můžete zloduch, co se děje?
Co děláte s mou dcerou?
-Dovolte, abych vám představil brilantní mladý plastického chirurga, Dr. Philip
Schlotkin, největší nosu muž v celé
vesmír a Beverly Hills.
-Vaše Výsosti.
-Nose práce?
Nerozumím.
Už měla na nose.
Bylo to sladké 16 přítomna.
-Ne, to není to, co si myslíte.
Je to mnohem, mnohem horší.
Pokud mi nedáš kombinaci se stíněním vzduchu, bude Dr. Schlotkin
dát svou dceru zpět svůj starý nos.
-Ne!
Kde jsi to vzal?
-Dobře.
Řeknu.
-Ne, tati, no.
Nesmíte.
-Ty jsi pravdu, má drahá.
Bude se mi stýskat si nový nos.
Ale já vám neřeknu jim kombinace bez ohledu na to, co.
-Velmi dobře.
Dr. Schlotkin, udělat si nejhorší.
-Rádo se stalo.
-Ne!
Počkat, počkat.
Řeknu.
-Věděl jsem, že to bude fungovat.
Dobře, dej mi to.
-Kombinace je jedna.
-One.
-Two.
-Tři
-Tři.
-Four.
-Five
-Five.
-Takže kombinace je jeden, dva, tři, čtyři, pět.
To je nejblbější kombinace, jakou jsem kdy v životě slyšel.
To je ten druh věcí, idiot bude mít na jeho zavazadlech.
-Děkuji vám, Vaše Výsosti.
-Co jsi udělal?
-Vypnul jsem zdi.
-Ne, to ne.
Vypnete celý film.
-Musel jsem stiskl špatné tlačítko.
-No, dal ji zpět.
Dejte film zpět.
-Ano, pane.
Ano, pane.
-Pojďme, Erna.
Pojď, Gretchen.
Samozřejmě, že vím, že budu ještě muset účtovat vám za to.
-No, fungovalo to?
Kde je brána?
-To fungovalo, pane.
Máme kombinaci.
-Velká.
Nyní můžeme vzít i tu poslední závan čerstvého vzduchu z planety Druidia.
Co je to kombinace?
-Jedna, dvě, tři, čtyři, pět.
-Jedna, dvě, tři, čtyři, pět?
-Ano.
-To je úžasné.
Mám stejnou kombinaci na mém zavazadle.
Připravte Spaceball 1 k okamžitému odletu.
-Ano, pane.
-A změnit kombinaci na mé zavazadla.
-Au!
[END VIDEOPŘEHRÁVÁNÍ]
>> DAVID J. Malan: úžasné film, který by měl nyní všichni vidí.
Takže souvislosti je, že s nezajištěnými údaje pochází příležitost
zašifrovat a škrábat ho.
A tak to, například, je příklad šifrované zprávě.
To vlastně říká, že něco v angličtině.
Ale to zjevně není zcela zřejmé.
A my přijdeme kruh dnes šprýmaři odděleně, co to tajné
zpráva je zde.
Ale v reálném světě počítačů, věci se ani nepodíval, jako by mohli
být anglických frází.
Například, to je to, co můžete najít na standardního Linux nebo Mac nebo
Unix počítač v souboru, který byl kdysi nazýván soubor s hesly.
V současné době, je to už se stěhoval do jiných míst.
Ale když se podíváte na správném místě v systému, uvidíte nejen svůj
jméno nebo jiných lidí na systému, ale uvidíte,
šifrovaná verze své heslo.
Opravdu, slovo krypta se navrhuje, aby následující věci jsou šifrována.
A tato série zdánlivě náhodných písmen a znaků a čísel a
atd. lze dešifrovat pouze obecně znát nějaké tajemství -
Tajné slovo, tajné číslo.
A tak skutečně, umění kryptografie v konečném důsledku se scvrkává věřit některých
třídění a věděl něco, co někdo jiný nemá.
Budeme zkoumat to v trochu podrobněji dnes v PSet přijít.
>> A nyní slovo na Pass / Fail.
Tak především, jak někteří z vás se ponořila do PSet 1, spotřebič, a
zcela nový svět pro sebe, si uvědomil, že frustrace a
zmatenost a jen technické problémy se dají očekávat.
Zejména s prvním Pset, kde je to prostě tak moc nového, jen na to,
obeznámeni s ls a cd a všechny tyto tajemné příkazy v novém prostředí.
A to je oddělený od skutečného materiálu a programování sám.
Takže si uvědomit, také to, že tam jsou určitě úřední hodiny, které existují jako
nosná konstrukce.
Sekce začít letos v neděli.
Ale co je nejdůležitější, pokud máte pocit, prostě, že to není
svět pro tebe, si uvědomit, že je to opravdu jen nějakou dobu trvat.
A byl to ne pro tuto příležitost před lety pro mne vezme třídu
vyhověl / nevyhověl, upřímně, nikdy bych si dokonce nastavit nohu ve třídě.
A můžete změnit až do, řekněme, pátý pondělí v kurzu.
Takže pokud jste na okraji teď si uvědomit, že spíše než hlavu do jiné
Vody úplně, to určitě zvažte jen změnou k přijetí / zamítnutí.
Opět platí, že to není opravdu to kultura zde na Harvardu braní věcí
vyhověl / nevyhověl, protože každý chce opravdu dosáhnout lepších výsledků, nebo.
Ale upřímně řečeno, je to skvělý způsob, jak se snaží něco, že možná ne
být obeznámeni s vámi.
A ty skončíš dělat ve většině případů docela dobře, možná
hodně k překvapení.
A v Konkrétněji, co si myslím, vyhověl / nevyhověl obecně dělá,
zejména pokud jste si mohli zkušenosti s PSet 0, pokud jste dal
v 10 hodin, 15 hodin, 25 hodin do některých PSet - a ty jsi jenom bouchání
vaše hlava proti zdi,
a je to stále výborný pozdě v noci,
ale vy jste vzali PSet jako 90% z cesty,
víte, že prostě nemůže přijít na jednu věc -
vyhověl / nevyhověl opravdu bere zmírnilo třídy jako je tato, kde si můžete řadit
ze dne šťastně říká jo, já vím, že to není dokonalé.
Ale já pracoval jsem prdel na to.
Jsem docela spokojený s tím, kde to skončilo.
A že bude splňovat očekávání vyhovuje / nevyhovuje.
Takže se mějte na paměti, že.
>> Dobrá.
Takže ti z vás, kteří se usilovně snaží využít Harvardskou univerzitu Wi-Fi vědět
že je CS50 SSID, Wi-Fi připojení se vznáší, že jste
může mít větší štěstí pro.
Je to trochu paradoxní, že heslo pro toto - pokud byste chtěli vyzkoušet
připojení k to pro lepší rychlosti a dejte nám vědět, pokud to není lepší -
je jeden, dva, tři, čtyři, pět, celou cestu až na osm, protože osm je
bezpečnější než pět.
Takže pokud potřebujete Wi-Fi hesla, připojit se k CS50 bezdrátově zde.
Jedna, dva, tři, čtyři, pět, šest, sedm, osm.
A příspěvek na CS50 Diskutovat pokud máte stále přerušované problémy s připojením,
a necháme pravomoci, které budou znát pro tento prostor.
>> Dobrá.
Tak rychlý teaser, zejména pro ty z vás, kteří jsou ventilátor chlapců a dívek
všech věcí Apple.
To, co jsem vyhrabal z několik let zpět byla tento soubor zde, ilock.c, jen
druh učinit konkrétnější a složitější některé z více základních C
programy jsme psali.
Tak jsem otevřel tento soubor, ilock.c.
Je k dispozici na přednášky stránce pro dnešek.
Na levé straně, uvidíte dlouhý seznam funkcí.
Takže ten chlapík, který napsal tento sepsal mnoho funkcí,
víc než jen hlavní.
Použil spoustu knihoven zde.
A pokud začneme rolování, co to vlastně je, je velmi
nejprve, já věřím, bezva pro původní iPhone.
Pokud byste chtěli, aby útěk z vězení původní iPhone, což znamená, že untether
to z AT & T a skutečně nainstalovat speciální software na něj a dělat věci,
že Apple nechtěl, aby lidé mohli -
dobře, někdo vzal čas, aby zjistili, jak přesně by mohl zneužít
software chyby, omyly, chyby, v softwaru Apple.
A tak se narodil ilock.c.
Že pokud sestavují jej na počítači jej a nainstaloval na iPhone této
byl připojen k počítači prostřednictvím, řekněme, USB kabel, by to vám
správní nebo root oprávnění na vašem iPhone a nechat si udělat docela hodně
co chcete.
>> A tak tam bylo to fascinující hra na kočku a myš mezi Apple a
zbytek světa, zejména jako oni, stejně jako mnoho firem, ve snaze zajistit
jejich věci dolů tak, aby si můžete dělat jen s tím, co mají v úmyslu.
Ale díky lidem, jako je tento a jejich chápání low-level
detaily a, v tomto případě, C programování a spoustu známých konstruktů
že jsme začali hrát s, jste schopni skutečně využívají
hardware ve způsobu vidíte fit a ne nutně nějaký právnické osoby.
Tak například, nemám tušení, co to dělá.
Ale getVersion zní docela jednoduché.
A vypadá to, že je to funkce, která tato osoba napsala.
Vezměte nějaký integer jako argument, nic nevrací, ale
Zdá se, smyčky s pro smyčky zde a pokud stavu, pokud podmínka,
zlomit, a nějak souvisí s číslem verze.
Pokud bychom posunout dolů -
i když mnoho z těchto klíčových slov se bude nové, a tam je
spoustu funkcí v tu jsme nikdy neviděli a možná už nikdy vidět přes
průběh semestru -
na konci dne, to se řídí stejnými pravidly a logiku, že jsme byli
hrát s tak daleko.
Tak tohle je příliš starý na to bezva váš iPhone 3s nebo 4s nebo 5s brzy, v těchto dnech,
ale vím, že je to všechno moc pochází z tohoto světa, že máme
skočil do.
>> Takže pojďme se podívat na trochu jednoduchý příklad.
Tenhle, jen proto, aby si ohřát nějakou syntaxí a také některé další údaje
typ, který jsme mluvili o ale opravdu vidět v C. Tak tohle je
soubor s názvem positive1.c.
A za připomínky v horní, to jen požaduje, aby uživatel zajistit
kladné číslo.
Takže je to příklad do-while, což je hezké pro uživatele-interactive
programy, kde potřebujete sdělit uživateli, aby něco udělat.
A v případě, že nebudete spolupracovat, jste křičet na ně, nebo odmítnout jejich vstup.
Názorný příklad, budu dělat linky 19 až 24 tak dlouho, dokud má uživatel
mi nedal kladné číslo.
Nyní tento detail zde na řádku 18, proč prohlašuji n nad to celé
opakování konstrukce oproti hned vedle řádku 22, kde jsem
vlastně jedno, dostat n?
Jo?
[Neslyšitelné]
>> DAVID J. Malan: Jo, tak to otázka rozsahu.
A v laického hlediska, co se rozsahu vztahuje?
Jo?
[Neslyšitelné]
DAVID J. Malan: Můžeš mluvit trochu hlasitěji?
SPEAKER 1: Kde máte přístup k dané proměnné.
DAVID J. Malan: Perfect.
Kde můžete získat přístup k dané proměnné.
A obecně, pravidlo bylo dosud, že rozsah působnosti některých
proměnná je definována v nejnovějších složených závorek, které jste viděli.
A tak v tomto případě, když jsem udělal chybu deklarovat n on-line 22,
že linka bude fungovat.
Já bych si int, a já bych dal to do té proměnné n v souladu 22.
Ale který řádek kódu by teď netuším, co mluvím?
Tak 25, a ukázalo se, 24, a také, protože v tomto případě, nespadá
z složených závorek.
Takže jen trochu na obtíž, ale velmi snadno vyřešit tím, že prostě prohlášením
proměnná mimo funkci samotné.
>> Teď uvidíme, ještě dnes, můžete jít ještě o krok dále.
A můžete dokonce dostat trochu líný -
a to není možno doporučit, obecně -
ale mohli jste dokonce líní a dát proměnnou globálně, abych tak řekl, ne
uvnitř funkce, nejsou uvnitř smyčky, ale v samotném souboru, mimo
všech funkcí, které jste napsal, jak jsem to udělal tady na lince 15.
Ale to je obecně odsuzován.
Ale uvědomit to je řešení někdy jiné problémy, jak budem
nakonec vidět.
Takže teď, necháme to takhle.
Ale uvidíme, jestli můžeme přepsat to jen začít vyjadřovat sami
trochu jinak.
>> Takže tento program, jen aby bylo jasno, je positive1.
Nech mě jít napřed tady a ve svém terminálovém okně, aby positive1, Enter.
Sestavuje, v pořádku.
Chystám se spustit positive1, stiskněte klávesu Enter.
Žádám, abyste mi celé kladné číslo.
Řeknu -1.
To nefungovalo.
0, 99, to vypadá, že funguje.
Možná ne nejpřísnější test.
Ale aspoň je to pěkné sanity kontrola, zda jsme na správné cestě.
Takže teď mě nech jít dopředu a otevřete verzi dva z tohoto.
A co je odlišné už?
To se provádí totéž.
Ale co skáče tak, jak je zřetelně jiný tentokrát?
Jo, tak to bool zeleně.
Gedit je zdůrazněno v zeleném tohoto klíčového slova známé jako bool,
která je datový typ.
To není to, postavený v roce pro všechny verze C. Musíte zahrnout
konkrétní knihovny.
V našem případě, jsem zahrnul CS50 knihovnu tak, že jsme
mají přístup k bool.
Ale v řádku 18, se zdá, že mají logickou hodnotu zde nazývá vděčný.
Takže jsem mohla zavolat to něco.
Ale já to nazval vděčný jen trochu zprostředkovat nějaký sémantický význam.
Tak zpočátku na lince 18, nejsem zřejmě vděčný, protože
Logická hodnota vděčný je inicializován na hodnotu false v řádku 18.
A pak se zdá, to, co jsem tady udělal v řádcích 21 až 23 je, že jsem právě
druh přepsán můj logiku.
Takže ne funkčně odlišné.
Ale v řádku 22, již jsem zda int uživatel předpokladu je větší než
0, pak jsem jednoduše změnit hodnotu vděčný true.
A proč jsem to udělal?
Vzhledem k tomu, v souladu 25, zdá se, že budu kontrolovat stav.
Do této smyčky, zatímco vděčná je false.
>> Takže navrhuji to jako alternativa k variantě jedna, protože je to alespoň
trochu více intuitivní, snad.
Je to trochu více uzemněný v angličtině.
Takže proveďte následující, když nejste vděční, nebo když vděčný je false.
A tentokrát, taky jsem zřejmě nezajímá vzpomenout, co uživatel napsal
v oznámení, protože tam žádná proměnná n.
Takže vlastně, I -
malá bílá lež tam.
Funkčně, program je trochu jiný, jakmile se dostaneme na dno
to proto, že nejsem si vzpomněl, co n je.
Ale já jsem chtěl ukázat i zde, že i když jsme viděli GetInt a
GetString se používá na pravé straně znaménko rovná se tak daleko, aby
vzpomněli jsme si hodnotu, technicky, to není nezbytně nutné.
Pokud z nějakého důvodu prostě nezajímá uložit hodnotu, chcete jen
kontrolovat hodnotu, zjistíte, že můžeme jednoduše napsat toto jako GetInt otevřený
paren, úzkým paren.
Tato funkce bude vracet hodnotu, jak jsme říkali.
Bude to vám zpět int.
A tak pokud jste psychicky myslíte že se to stává, když píšu v 99, GetInt
vrátí číslo 99.
A tak koncepčně, je to jako by můj kód byl ve skutečnosti to.
Takže pokud 99 je opravdu větší než 0, pak vděčný stává pravdou.
Pak linka 25 si uvědomuje, ooh, už jsme to udělali, protože jsem teď vděčná.
A v souladu 26, jsme prostě říci, díky za kladné celé číslo, bez ohledu na to
stalo se.
>> Nyní se pojďme udělat mírný syntaktický cukr zde, abych tak řekl.
Pojďme se podívat, jestli se nám podaří vyčistit tento řádek 25 s touto třetí a poslední rozptylu
v positive3.
Takže všimnete jediný rozdíl je, co řádek kódu?
Jo, tak 25.
A jsme opravdu viděli tuto trik jen zatím.
Ale my jsme vidět vykřičník v pondělí, což označuje co?
Takže ne, nebo negace.
Tak se booleovskou hodnotu a otočit jeho hodnotu.
Pravda se stává false.
False stává pravdou.
Takže to, navrhuji, je ještě trochu více intuitivní způsob, jak
psaní kódu, protože jsem stále inicializovat vděčný false.
Pořád to následující.
Nastavil jsem vděčný na hodnotu true, když přijde čas.
Ale teď můžete opravdu jen přeložit tento kód slovně zleva doprava,
zatímco ne vděčná.
Vzhledem k tomu, bang, nebo vykřičník, označuje pojem není, takže zatímco
není vděčný.
>> Takže znovu, jsme nezavedly žádné nové koncepty na sobě.
Mluvili jsme o tom Booleans zpátky, když jsme hráli s Scratch.
Ale uvědomuji si můžeme jen začít psát náš kód v
mnoha různými způsoby.
Takže zejména v pset1, pokud jste trochu snaží přijít na způsob, jak
napsat nějaký program, kurzy máte štěstí, protože tam to bude nějaký
počet řešení, které se může stát při.
Například, to je jen tři i pro nejjednodušší programů.
Dobrá.
A teď vzpomínám v pondělí, jsme odjeli na tuto notu s návratových hodnot.
Takže vůbec poprvé, jsme napsali program, který není jen mít hlavní,
má také svou vlastní funkci, která jsem napsal tady.
Takže v souladu 31 až 34, jsem realizovala krychle funkci.
Není to složité.
Je to jen a časy a časy a, v tomto případě.
Ale co je důležité, na tom je, že jsem při vstupu ve formě a
Vracím se výstup v podobě časů a časů.
>> Takže teď mám možnost, stejně jako jsem se printf sám, volat
tato funkce voláním krychle funkce.
A krychle funkce má nějaký vstup.
A krychle funkce vrátí nějaký výstup.
A tak na rozdíl od, printf jen něco udělal.
To se nic nevrací že záleželo - i když, jak
stranou, to vrátí hodnotu.
Můžete jen obecně ignorovat.
Printf jen něco udělal.
To mělo vedlejší účinek tisku na obrazovce.
Naopak zde, máme krychle funkci, která
skutečně vrátí něco.
>> Tak to je obecně -
pro ty, kteří znají toto, je to poměrně jednoduché nápad.
Ale pro ty méně obeznámeni s touto myšlenkou předávání na vstupech a získání
zpět výstupy, zkusme jen něco super jednoduchý.
Je někdo pohodlný přichází na pódium krátce?
Ty mají být pohodlné s kamerou vy, stejně.
Jo.
Dobře, Jak se jmenujete?
KEN: Ken.
DAVID J. Malan: Ken.
Dobře, Ken.
Pojď nahoru.
Takže Ken bude funkce druhů zde.
A pojďme dál a udělat to.
Pojďme si trochu fantazie.
Rád Vás vidím.
Vítejte na středu zájmu.
Dobrá.
Jdeme na toto tlačítko tady.
Dobrá.
Tak tady máte moderní tabuli.
A to, co jsem je hlavní funkce, například.
A nemám iPad v ruce.
Nemám opravdu vzpomenout, jak se - no, vlastně, nelze říci, že.
Já opravdu nemám dobrý rukopis.
A tak tedy, chci tisknout něco na obrazovce pro mě.
>> Takže já jsem byl hlavní program.
A já budu mít vás říci, napište v mém kuřecím nuly a
pak předá vám vstup.
Tak jako hloupé ačkoli toto cvičení je, pojem funkcí a volání
funkce a vrací funkci opravdu scvrkává na to.
Já jsem hlavní.
Právě jsem napsal printf ("něco") na obrazovce.
Běžím tento program.
A jakmile printf volána, trvá jeden argument - nebo jeden parametr,
někdy -
mezi uvozovkami.
Zde je to, že argument.
Já předáním do Ken.
Teď je to černá skříňka písemné určitý počet let, před které zřejmě
ví, jak tisknout věci na obrazovce.
>> Takže, provést.
To není špatné.
Takže, velmi dobrá.
Takže teď Ken se provádí spuštěním.
Ví třeba Podej mi něco zpět?
Takže ne, že jsme viděli doposud.
Opět platí, že printf se skutečně vrátí číslo.
Ale budeme ignorovat, že pro tuto chvíli, protože jsme nikdy používal to.
Tak to je to pro Kena.
A tak teď hlavní vrátí k provedení -
Hlavním přebírá ovládání programu znovu, protože tento řádek kódu,
printf, se provádí spuštěním.
A jdeme o naší cestě vykonávajícího jakékoli jiné linky jsou tam.
>> Dobrá.
Takže teď zkusme trochu jiný příklad.
A tentokrát zde, pojďme se nejprve vyčistit obrazovku zde.
A tentokrát, budeme dělat Cubing funkci.
Ale tentokrát jsem očekávat, že výstupní hodnoty.
Tak pojďme do toho a udělat to.
Takže teď mám řádek kódu, který říká, že x = kostka (x).
Takže vlastně let's -
řádek kódu, odvolání, vypadá to.
x = kostka (x).
Tak jak se to bude fungovat?
Tak pojďme dál a dá vám bílou obrazovku znovu.
A já se chystám napsat hned dolů na hodnotu x, která v tuto chvíli v
čas se stane být, řekněme, 2, aby to jednoduché.
Tak jsem napsal na kus papíru hodnota 2,
což je moje hodnota x.
Podal jsem ji Ken.
KEN: A já jsem jen napsat odpověď?
DAVID J. Malan: Jo, pojďme stačí napsat odpověď.
Dobře.
A teď se musí vrátit mi něco.
Takže -
perfektní.
Pěkný SEGUE.
>> Takže teď podá mi hodnotu 8, v tomto případě.
A co s tím mám dělat?
No, vlastně, uvidíme.
Získat toto právo.
Co mám dělat s tím?
Teď budu brát tuto hodnotu a skutečně uložit v těch
Stejné bitů v paměti.
Ale upozornění, jsem tak trochu zápasí zde.
Jsem trochu zmatený, protože kam jsem vlastně psát hodnotu x?
Vzhledem k tomu, co jsem právě udělal, je fyzicky ručně Ken kus papíru
, která měla hodnotu 2, který byl x.
A skutečně, to je přesně to, co se stane.
Tak to dopadá, že při volání funkce, a předáte v argumentu
Líbí "Hello World", nebo předáte argument jako 2, obecně, že jste
předáním kopie tohoto argumentu.
A tak stejně jako jsem napsal číslo 2 zde a podal ji Ken, že musí být
znamená, že jsem ještě kopii hodnoty 2 někde.
Protože opravdu, teď, že jsem se dostal zpět hodnotu 8, musím se vrátit do
RAM a skutečně zapsat 8, kde jsem kdysi měl číslo 2.
>> Takže vizuálně zapamatovat si tuto představu předáním doslova
kopie hodnoty.
Ken dělá svou věc, podá mi něco - v tomto případě,
hodnota jako 8.
A pak jsem musel udělat něco s touto hodnotou, pokud jsem
Chci, aby to kolem.
Takže tohle všechno bude až příliš dobře, než dlouhý.
Mockrát vám děkuji za tuto demo zde, Kena.
Dobrá.
Velmi dobře.
Tak uvidíme, jak to nakonec se vztahuje k některé z funkcí
volání, že jsme byli tady.
Tak nech mě jít napřed a přivést nás zpět k Cubing například zde.
A zjistíte, že pokud chceme, aby skutečně začít užívat toto dále, budeme
muset dbát na to, že se počet x, která je momentálně prošel v
zde se liší od toho, co je skutečně předán do funkce.
Takže znovu, to prošel kopie se stane docela
Germaine za chvíli.
>> Takže pojďme se podívat na něco, co není úplně správně pracovat ještě.
Chystám se jít dopředu a otevřete třetiny buggy příklad, který
je stižen přírodou.
A jmenuje se buggy3, a to implementuje vyměňovat funkci.
Takže tu máme hlavní funkci, která x a y libovolně inicializován
1 a 2, resp.
Mohli bychom použít GetInt, ale my prostě potřebujeme jednoduché cvičení.
Takže je to pevně jako 1 a 2.
V řádcích 21 a 22, my zřejmě vytisknout X a Y, jedno na řádek.
Pak, na řádku 23, tvrdím já vyměňovat tyto hodnoty, tečka, tečka, tečka.
Jsem zřejmě volat funkce v souladu s názvem 24 odkládací
který bere dva argumenty.
Je to naprosto legitimní pro funkce, aby se dva argumenty.
Viděli jsme printf to už.
Takže výměna zřejmě trvá x a y.
A jak již název napovídá, doufám, že to bude
zaměnit tyto dvě hodnoty.
Tak jsem tvrdit, on-line 25, vyměnil.
A já dotisk x a y za předpokladu, že
že jsem skutečně prohozeny.
Ale když jsem vlastně tento program spustit -
dovolte mi, abych otevřít okno terminálu.
Dovolte mi, abych buggy3.
Jak název napovídá, toto není skončí dobře.
Protože když jsem se Enter Všimněte si, že x je 1.
y je 2.
A ještě na konci programu, jsou stále ještě ve skutečnosti, stejný.
>> Takže na základě prokázání právě s Kenem, co se vlastně děje?
No, pojďme se ponořit do tohoto swapu funkce.
Je to super krátký.
Je to jen pár řádků kódu dlouho.
Ale co je to zásadní problém založen na jednoduchém příběhu řekl,
tady s Kenem?
Proč je výměna vadné?
[Neslyšitelné]
Přesně tak.
Takže jsme ukládání na kopii, není proměnná sám.
Jinými slovy, swap zřejmě přijímá dva argumenty, int.
A to je libovolně nazývá a b.
A tady, jsem prošel v x a y, které jsou příslušně 1 a 2.
Ale já nejsem doslova procházet v x.
Nejsem doslova procházet v y.
Já jsem kolem kopii X a kopie y.
Je to jako skoro, jako by si zkopírovat a vložit do prohodit hodnoty, aby
chcete, aby se skutečně manipulovat.
Takže pokud je to ten případ, kdy jsem se, program, kdo vykonávající
potrubí 35, pak 36 -
když jsem si na řádku 37, v tomto bodě v příběhu, co je hodnota?
V tomto bodě příběhu, linka 37, jaká je hodnota v tomto bodě?
Tak to by mělo být jen 1.
Je to tak?
Vzhledem k tomu, x byla předána jako první argument.
A tato funkce prostě svévolně volá svou první argument,.
Podobně je y, druhý argument.
A je to jen svévolně volá druhý argument b.
>> Nyní je tato dichotomie je vlastně docela jednoduché vysvětlení.
Přemýšlejte o tom.
Nikdo z nás se setkal osobu, která napsal printf.
Takže jistě, on nebo ona nemá tušení, co naše proměnné o 30 let později se chystáte
být nazýván.
Takže tam musí být rozdíl mezi tím, co říkáte proměnné v
Funkce píšete a co říkáte proměnné ve funkcích která vás
volání nebo použití.
Takže jinými slovy, napsal jsem své proměnné jako x a y.
Ale pokud někdo jiný psal odkládací funkci, on nebo ona rozhodně
nebude vědět, co moje proměnné se bude nazýván.
Takže si uvědomit, že to je důvod, proč jste tuto dualitu jmen.
Technicky, mohl bych to náhodou.
Ale oni by ještě být předávány jako kopie.
Bylo by to čistě náhoda, esteticky, pokud ten člověk, který napsal
Odkládací použil stejné názvy.
>> Dobrá.
Takže v tomto bodě příběhu, linka 37, je 1.
b je 2.
A teď mám postupovat, aby swap.
No v první řadě mi dovolte, abych vlastně dělat to mnohem jednodušeji.
Já nevím, co ty tři řádky kódu dělají.
Dovolte mi, abych to.
b dostane.
dostane b.
Hotovo.
Proč je tento zlomený, logicky?
Je to druh intuitivní věc, ne?
Tak se stává b.
A b stává.
Ale problém je, že jakmile linka 37 provádí, co je
hodnota a B?
Stejný, 1.
Protože jste clobbered, abych tak řekl, jste změnili b rovnat.
Takže jakmile linka 37 je proveden, je to skvělé.
Nyní máte dvě kopie čísla 1 vnitřní této funkce.
Takže když říkáte, v souladu 38, dostane b, dobře, že jste trochu v háji.
Vzhledem k tomu, jste jen přiřazení 1-1.
Jste trochu ztratila hodnotu, kterou záleželo.
>> Takže v původní verzi tohoto, zjistíte, co jsem udělal.
Jsem místo toho měla třetina řádek kódu, který vypadal jako toto.
Prohlašuji, dočasnou proměnnou - tmp je velmi běžné jméno
dočasné proměnné.
Je to int, protože se musí shodovat, co chci udělat kopii.
I uložit kopii uvnitř tmp. Takže jakmile linka 37 je proveden,
hodnota je -
rychlé sanity check -
1.
Hodnota b je 2.
A hodnota tmp je také 1.
Takže teď jsem spustit linku 38.
Takže jakmile linka 38 provede, má na hodnotu b.
A b je 2.
Takže je nyní 2.
Takže v tomto bodě příběhu, je 2, b je 2,
a tmp je 1.
Takže teď logicky, můžeme jen plop TMP je hodnota v b..
A jsme hotovi.
>> Takže jsme vyřešili tento problém.
Bohužel, když jsem spustit tento program v této podobě, to dělá ne vlastně zaměnit
všechny hodnoty.
Ale aby bylo jasno, proč?
Opravil jsem logický problém z před chvílí.
Ale znovu, když spuštění programu, x a y se nemění do konce
tento program poprava.
[Neslyšitelné]
DAVID J. Malan: Tak jsme se vrátili nic.
Tak to je pravda.
Ale ukazuje se, že je tu trochu problém, protože tady tak daleko,
Jediná věc, jsme byli schopni se vrátit, je jedna věc.
A to je omezení C. Můžete vrátit pouze skutečně jednu hodnotu,
v tom případě, já jsem trochu trčet
protože jsem se mohl vrátit novou hodnotu x nebo bych mohl vrátit
nová hodnota y.
Ale já chci oba zpátky.
Takže návratu není jednoduché řešení zde.
Ale problém zásadně je důvod, proč?
Co jsme vlastně vyměnili?
a b.
Ale i b jsou kopie x a y, což znamená, že to udělal všechno
práce - právě jsme strávili jako tři minuty mluví o swapu
funkce a všichni tři z těchto proměnných.
A to je skvělé, naprosto správný v izolaci.
Ale A a B je rozsah pouze je v těchto liniích zde.
Tak jako pro smyčce, pokud jste deklarovat integer i uvnitř pro
loop - podobně, pokud jste deklarovat a b uvnitř funkce, která
jste napsali, jsou platné pouze uvnitř této funkce.
Což znamená, že jakmile swap je provedeno provádění a jdeme z linky 24 do
linka 25, x a y se nemění vůbec.
Právě jste zbytečně spoustu času vyměňovat kopie proměnných.
>> Tak to dopadá, že řešení je to vlastně non-zřejmé.
To není zcela dostačující pro návrat hodnoty, protože můžeme
vrátit pouze jednu hodnotu.
A já opravdu chci vyměnit oba X a Y současně.
Takže jdeme vrátit k tomu.
Ale teď si uvědomit, že problém zásadně vychází ze skutečnosti,
že a a b jsou kopie.
A jsou v jejich vlastním rozsahu.
No, pojďme se pokusit vyřešit nějakým způsobem.
Dovolte mi, abych skutečně přejděte sem a otevřít, řekněme, čtvrtou variantu
z toho, buggy4.
A co tohle?
To je podobný, ale jednodušší problém podívat se na předtím, než jsme se stab na
řešení.
Tento program se nazývá přírůstek.
A to zřejmě inicializuje celé číslo x na 1 v řádku 18.
I pak tvrdí, x je 1.
Pak jsem tvrzení zvyšování, tečka, tečka, tečka.
Pak jsem zavolat přírůstek.
Ale pak v řádcích 22 a 23, tvrdím, že to byla zvýšena.
Tvrdím x je nyní ať je to cokoliv, 2 pravděpodobně.
>> Ale tento program je buggy.
V čem je problém?
Jo?
[Neslyšitelné]
DAVID J. Malan: Přesně tak.
Takže x byl vyhlášen zřejmě na řádku 18.
To je uvnitř složených závorek hlavní je.
Takže jednoduchá odpověď zde je to, že dobře, x existuje zde.
To neexistuje v souladu 32.
Takže tento program vlastně není ani zkompilovat.
Kompilátor, když jsem se kompilace tento kód, bude na mě křičet
o nějaké nehlášené identifikátoru nebo něco v tom smyslu.
Ve skutečnosti, zkusme to.
To je, aby buggy4.
Tady to je.
Použití nehlášené Identifikátor x v souladu 32.
A skutečně, buďme konkrétnější zde dnes tak, že je to užitečné v
úřední hodiny a doma.
Všimněte si, že je to trochu záhadně písemná.
Ale skutečnost, že zvonění je na nás řvali, řka:
buggy4.c: 32:5, je ve skutečnosti užitečné.
To znamená, že chyba je na řádku 32 v znakovou pozici pět.
Takže jedna, dva, tři, čtyři, pět.
To je, ve skutečnosti, kde je problém.
A také mít na paměti při úředních hodinách i doma, budu mít štěstí tady.
Mám jednu chybu.
Bude to poměrně snadno opravit.
Ale pokud se dostanete celou obrazovku plnou ohromujících chybových zpráv, opět,
Uvědomuji si, že nejspodnější jeden by mohl být jen symptomatická
Vrchní ty.
Takže vždy honit své chyby z top-down.
Vzhledem k tomu, že by mohlo být jen daisy-chain efekt, který naznačuje, vás
mají mnohem více problémů, než jste vlastně dělat.
>> Tak jak bychom mohli opravit, pokud je mým cílem zvýšit x?
Co je to?
Dobře.
Takže můžeme x globální.
Pojďme se na zástupce, kterého jsem varoval o tom dříve.
Ale sakra, my jen potřebujeme rychlou opravu.
Takže řekněme, že int x tady.
To dělá x globální.
Takže teď hlavní má přístup k němu.
A přírůstek k němu má přístup.
A tak nech mě jít napřed a zkompilovat to teď.
Udělejte buggy4, Enter.
Zdá se, že sestavení teď.
Spusťme buggy4, a zdá se, že skutečně funguje.
Nyní se jedná o jeden z těchto věcí -
dělat, co říkám, ne jako já, jak jsem právě udělal tady.
Protože obecně, naše programy se dostaneme mnohem zajímavější a
mnohem déle, než tohle.
A pokud vaše řešení životních problémů je jen ah, dát všechny
proměnné v horní části souboru, velmi rychle to programy se
děsivě obtížné řídit.
To je těžší vymyslet nové názvy proměnných.
To je těžší pochopit, co je proměnná dělá co.
>> A tak obecně, to není dobré řešení.
Takže jdeme na to lepší.
Nechceme používat globální proměnnou zde.
Já chci zvýšit x.
Tak jsem mohl samozřejmě -
na konci dne, je to trochu hloupé příběhu, protože jsme prostě udělat to.
Ale když jsem o tom nevěděl tohoto subjektu, nebo jsem nesměl
změnit v hlavním samo o sobě, jak by jinak bych implementovat Ken tady, to
čas, aby kostka, ale můžete zvyšovat?
Jak mohu změnit tuto věc tady?
Jo.
[Neslyšitelné]
DAVID J. Malan: Dobře, dobře.
Tak proč bych předat x?
A pak se spíše než vrátit, proč prostě nemůžu dělat return x + 1?
Nyní, pár dalších věcí, muset změnit zde.
Jsem na správné cestě.
Co ještě musím trik?
Někdo jiný.
Jo?
[Neslyšitelné]
DAVID J. Malan: Musím změnit návratový typ přírůstku
protože to není neplatné.
Void znamená nic se vracené.
Ale jasně, teď je to.
Takže to musí změnit na int být v souladu s tím, co
Já jsem vlastně vrací.
>> Nyní něco jiného je stále buggy tady.
Jo?
[Neslyšitelné]
DAVID J. Malan: Tak jsem třeba zvýšit x?
[Neslyšitelné]
DAVID J. Malan: Ah, tak musím projít x.
Tak jsem třeba udělat tady.
Takže prototypu, musím to změnit tady.
Tak to se musí stát int.
To se musí stát -
hmm.
Vlastně jsem chybu tady.
Pojďme opravit tenhle první.
Co by to vlastně být?
Tak to musí být něco, co int.
Mohlo by to být x.
Ale upřímně řečeno, pokud začnete volat všechny své proměnné x, to dostane
méně a méně jasné, který je který.
Takže řekněme, libovolně vybrat jiný konvence pro mé
pomocné funkce, funkce píšu.
Nazveme to.
Nebo bychom mohli nazvat - nazvěme to even_number být ještě jasněji.
Tak jsem se musel vrátit, co je číslo plus 1.
A teď musím změnit jednu věc sem a jeden
Další věc, kterou tady.
Co mám změnit na řádku 21 jako první?
Musím přiřadit k x.
Tak jsem si jen volat změn růstu x.
Musím si pamatovat odpověď změnou hodnoty x na
na levé straně.
A i když x je nyní na levé a pravé, že je naprosto v pořádku, protože
pravá strana se provede, první pak dostane svalil do levého
ruční věc, x je v tomto případě.
A pak konečně, je to snadné opravit teď.
To by mělo jen odpovídat, co je dole.
Int číslo.
>> Dobrá.
Takže celá parta změn pro opravdu hloupé funkcí.
Ale zástupce z věcí, které budeme stále chtějí dělat.
Tak, aby buggy4.
Já jsem podělal někde.
Ach můj bože.
Pět chyb v, rád, šest-line program.
Takže to, co se děje na lince 18, znak 5?
Dobrá.
Tak jsem si určil, že tento int.
Dobrá.
Tak uvidíme, spoustu dalších chyb.
Ach můj bože.
19, 18, 21.
Ale znovu, ať to prostě vyčistit obrazovku -
Control L zde - a re-run zvonění.
Takže pět problémů je vlastně jen, že jeden.
Tak teď pojďme běžet buggy4, Enter.
Uff.
x byl zvýšen správně.
>> Dobrá.
Jakékoliv dotazy na to, jak zvýšit počty?
Jo?
SPEAKER 2: Proč je to, že můžete jen změnit x na číslo v proměnné
jméno a budete vědět, co máte na mysli?
DAVID J. Malan: Dobrá otázka.
Jak to, že jsem si jen změnit x na číslo a program bude vědět,
okamžitě?
Takže znovu, myslím, že na to, jak tuto abstrakci.
Takže když jsem hlavní a Ken je inkrementální, upřímně řečeno, je mi to jedno
co Ken volá jeho iPad.
Nezajímá mě, co říká něco, co má co do činění s jeho prováděním
této funkce.
Tak tohle je implementační detail, že jsem, hlavní, ne
muset starat o.
A tak prostě mění důsledně ji uvnitř funkce, číslo zde
a číslo zde, je vše to trvá tak dlouho, jak jsem překompilovat.
Je to něco jako když si myslíte, že o tom - mnozí z nás, ty z vás, řidiče
licence, kteří si poháněné, nebo pokud jste dokonce řízený v autě -
většina z nás nemá ponětí, jak auto funguje pod kapotou.
A doslova, když otevřete kapotu, většina z nás - včetně mě -
se nebude opravdu vědět, co se díváme na.
Něco jako se můžete cítit s věcmi, jako je tohle teď.
Ale my opravdu nemáme starat, jak auto funguje.
Nemáme se starat, co všechno z tyčí a pístů a kabelů uvnitř
auto vlastně dělají.
>> Takže něco jako to, co říkáte pístu nezáleží
zde v tomto případě.
Stejný nápad.
Jo?
[Neslyšitelné]
DAVID J. Malan: Pokud by bylo více použití variabilního chvíli xa před,
vy, programátor, by musely změnit je všude.
Nebo byste mohli doslova dělat Soubor, Nabídka, a pak Najít / Nahradit,
něco takového, že.
Ale budete muset udělat těchto změn sami.
Musíte být v souladu.
[Neslyšitelné]
DAVID J. Malan: zejména, aby jako tady?
Pokud to bylo int jiné číslo?
Jo.
Takže, aby záležitosti, když voláte funkci.
Takže pokud bych se volat přírůstek zde něco něco čárka,
je tu přímé mapování.
První proměnná, jak se to jmenuje, je vyroben kopii první
Argument tady.
Je nám líto, nemělo by to být závorka.
Druhý argument se seřadí s druhým.
>> Takže pořadí, ano, záleží.
Dobrá.
Promiň, že jsem vzal dlouhou cestu, aby se tam dostat.
Další otázky?
Dobrá.
Tak uvidíme, jestli nemůžeme namalovat obraz o tom, co se skutečně děje
zde pod pokličku, abych tak řekl.
Tak to je obdélník, který by mohl představovat paměti počítače.
Takže i když máte tušení, jak paměť funguje a jak RAM funguje, alespoň
Předpokládáme, že máte kytice z ní v těchto dnech.
Máš megabajtů ní.
Máš gigabajtů ní.
A my víme, z týdne nuly, že byte je právě to, co?
8 bitů.
Správně, takže 8 nuly a jedničky.
Takže pokud váš počítač má koncert RAM, dvě giga RAM v těchto dnech, budete mít
miliarda 2000000000 bajtů paměti, nebo zhruba 8 miliard 16000000000
bitů, uvnitř vašeho počítače.
Nyní na rozdíl od malého Woolly například Willy, to není magnetické částice
obvykle už.
Stále více, v laptopech alespoň to SSD disky, SSD, že
Právě jste žádné pohyblivé části.
Je to všechno elektronické.
Je to všechno na základě elektřina.
Takže myslíte, že, i když, v tomto obdélníku jako právě představuje jeden nebo dva
GB paměti, které máte.
>> Takže je to kus paměti.
Nyní svět výpočetní techniky má druh rozdělených off kusy
Paměť dělat různé věci.
Tak například, pokud je to váš počítač RAM - jak navrhuje
obdélník tam - Ukazuje se, že podle konvence, v horní části paměti RAM, takže
mluvit, je obecně to, co se nazývá textový segment.
Ti jsou nuly a ty, které jste sestavili.
Takže když jsme se podíval pod pokličku, co a.out je, že všechny
Nuly a jedničky -
při spuštění programu, jsou tyto nuly a jedničky načíst z pevného
disk na něco, co nazývá RAM.
A v paměti RAM, to dali na vrcholu.
Nyní zatím máte jiné věci.
Inicializovaná data, neinicializované dat.
Tyto dva řádky paměti odkazují na globální proměnné, které
nemusíte se často používají.
Ale někdy, když to uděláte, skončí tam stejně.
Pak je tu některé další věci.
Proměnné prostředí, které nebude trávit tolik času na.
Ale pak dvě důležité věci, které se vrátí po celé toto
semestr, zásobník a halda.
>> Takže většina z paměti počítače je vyhrazen při spuštění programu pro
něco jako balíček, a něco, co nazývá haldy.
A nebudeme mluvit o haldy dnes, ale my
mluví o zásobníku.
A stack je chtěl vykouzlit vizuál jako jídelny
jídlo podnosy v Mather domě nebo tam, kde se stalo, že v zemi, kde
jídelna pracovníci čistit každý den.
Oni vyskládat až od podlahy nahoru.
A podobně v paměti, že je to myšlenka na něco na
stack, uvedení něco na stacku, uvedení něco na zásobníku.
A co máme na mysli toto?
Dobře, pojďme přiblížit jen na dolní polovině obrázku, počítač je
RAM, navrhnout následující.
Ukazuje se, že při spuštění programu, jako je a.out nebo ahoj, co
program, je to, že jste napsali,
znovu, jsou tyto nuly a jedničky načíst z pevného disku - což je
dlouhodobé skladování, zůstane tam i když zatáhněte -
načten do paměti RAM.
RAM je rychlejší než pevné disky.
Je to menší než pevné disky.
Ale to je místo, kde žijí programy, zatímco vy používáte je.
>> Takže jste dvakrát klikněte na program, na Mac nebo PC - je to načten z
pevný disk do paměti RAM.
Jakmile je načten do paměti RAM, se nuly a jedničky jít na cestě nahoru,
tzv. textu segmentu.
Ale pak, jakmile váš program ve skutečnosti spustí, hlavní
funkce se nazývá.
A hlavní, jak jsme viděli, často lokální proměnné.
A to má ints a řetězce a připaluje a podobně.
Takže pokud váš program, který jste napsali, nebo program, který jste
poklepání používá některé proměnné uvnitř hlavní, oni skončí na
Spodní část vašeho stacku paměti, abych tak řekl.
Nyní konkrétněji, co to vlastně znamená?
To prostě znamená, že pokud jsme se chystali číslovat věci -
Pokud bychom chtěli, aby počet bajtů paměti RAM v počítači, zjistíte, že
to by mohlo být byte číslo nula.
To by mohlo být byte číslo jedna, dva, tři, čtyři, pět, šest, všechny
způsob, jak se rád -
2000000000 by se celou cestu tam nahoře.
Takže jinými slovy, když mluvíme o paměti RAM nebo paměti, pokud jde o bytech, je
jen znamená, že někdo se rozhodl, co očíslovat každý
ty kousky paměti.
>> Takže když budete potřebovat 32 bitů k int, nebo budete potřebovat 8 bitů pro Char, kde
se, že skončí v paměti?
No koncepčně, jen skončí na dně této
čemu se říká zásobníku.
Ale co je zajímavé, teď je, když hlavní volá funkce.
Předpokládejme, že funkci nazvanou foo, jen libovolný název.
Co se stane, je hlavní je v dolní části tohoto zásobníku paměti.
Foo nyní je kladen na vrcholu hlavní paměti.
Takže nějaké lokální proměnné, které foo má skončit druh koncepčně výše
ty hlavní.
Pokud foo volá jinou funkci nazvanou bar, tyto proměnné skončí tady.
Pokud bar volá něco jiného, ​​zde, zde, zde.
Takže to, co je na tom zajímavé spuštění programu je to, že jak volat funkce,
a jelikož tyto funkce volat funkce, a jak tyto funkce volat funkce,
si vybudovat tento balík funkcí v paměti.
A jen jednou za funkce vrátí se můžete začít se, že paměť vrátit.
Takže jedním z nejjednodušších způsobů, jak běží z paměti v počítačovém programu je
psát funkce, které se nikdy nevrátí.
>> Tak například, pojďme prokázat až s
záměrně buggy program.
Nech mě jít napřed a nenechám # include , int main (void).
A já budu dělat, když (2> 1), který pravděpodobně nebude nikdy
změnit na nás.
A nech mě jít napřed teď a dělat printf.
Vlastně, že to bude méně vizuálně zajímavé.
Pojďme to.
Pro int (i = 0; i> 0).
Pojďme udělat tuto chybu, i + +.
A ať to není printf zde.
Pojďme praktikovat to, co jsem kázal.
Pojďme mít metodu zde.
Void chorus, a řekneme int i.
A pak jsem chtěl říct, printf -
oh, pojďme udělat to zajímavější.
Pojďme vlastně nevytiskne vůbec nic.
Prostě to.
Chorus (i).
>> Dobrá.
Tak to je buggy protože proč?
Já jsem to vymyslela, jak jsem jít, protože program není ve skutečnosti nic
zájmu.
Ale to není cílem.
Cílem je napsat program, jehož hlavní funkcí je co dělá, očividně?
Zavolejte sám.
A skutečně, nepotřebujeme smyčku.
Pojďme ještě zjednodušit tím, jen tak, abychom neztratili ze zřetele fakt
zásadní chyba.
Hlavní vyzývá sbor zpívat nějakou chór.
Pak jsem udělal něco hloupého, a já jsem měl refrén volání refrén, protože jsem předpokládal,
někdo jiný bude implementovat možná.
A teď to nebude sestavovat ještě.
Musím udělat, co?
Potřebuju prototyp, nezapomeňte.
Tak jsem třeba mít tady void chór (int i);.
>> Takže teď, když půjdu tady -
vlastně, pojďme použijte větší okno.
Pojďme dál a udělat sbor.
Použití nezjištěného vydražitele i.
Oh, to bylo hloupé.
Nepotřebujeme argument.
Prostě to.
Kéž jsme začali tímto způsobem.
Bylo by to mnohem jednodušší program psát.
Takže tam.
Teď pojďme ke mně terminálovém okně, re-run Clang.
A je to tady.
To byl opravdu rychlý.
Co se vlastně právě stalo, když?
No, teď budu přidávat tiskovou linku, takže můžeme vidět.
Takže mi dovolte říci printf, řekněme, že jsem tady.
Dobře, žádné proměnné, necháme to takhle.
Dovolte mi, abych znovu spusťte make.
Dovolte mi, abych znovu-run chorus.
A pojď.
Jen tak dál.
Jak stranou, proč se nezhroutil?
Segmentation fault stalo super rychlý předtím.
[Neslyšitelné]
DAVID J. Malan: Přesně tak.
Tak to trvá dobu tisku.
Je to jen má více práce na počítači v rámci.
A je to tady.
Segmentation fault.
>> Tak zjistíte, jak rychle programy běží.
Pokud si nejste tisku nic, super rychlý.
Ale my pořád tuto segmentation fault, protože to, co se děje?
No, pokud si myslíte, že o tom, jak je váš počítač paměť stanoven, tento
Stává se hlavním.
Ale tady -
řekněme, nazývají tento refrén, a říkejme této chór.
A teď když to udělám své estetiku právo, je to jen říct chór,
chorus, chorus, chorus, chorus, chorus, chorus, ad nauseum.
A nakonec, co se bude dít?
Pokud velký obrázek doslova je to, co se právě děje koncepčně?
Stoh přejíždí haldy.
Nebo ještě hůř, stačí překročení všechno, včetně textového segmentu, který je
Nuly a ty, které představují svůj program.
Stručně řečeno, je to prostě super, super špatný.
Je to tak?
Váš program se vymkla kontrole.
Používáte způsobem více paměti, než jste zamýšleli vše kvůli hloupé
chyba, v tomto případě.
Nebo v tomto případě, velmi záměrně provádí funkce volat sebe.
Teď to není tak špatné.
Funkce volání se vlastně má velkou sílu
když ji použijete správně.
Osobně jsem nepoužil správně zde.
>> Takže to není tak špatné.
Ale fakt, že jsem vlastně nikdy přestat volat sám je základním
slabost tady tohoto programu.
Tak kam jdeme s tím vším?
No, co se skutečně děje?
Když zavolám přírůstek funkce, jako bychom dělali v těch příkladech,
Mám hodnotu jako 1, že jsem se projít dovnitř
I předat kopii číslo jedna.
Tak se stane následující.
Tak pojďme do přírůstku příkladu.
A tenhle chlápek támhle.
Tak tady je to, co se vlastně děje.
Když jsem volal přírůstek, a já předat x, obrazově, co je
tu děje, je to -
jestli budu mít hodnotu 1 uloženou tady, a já jsem vlastně volají přírůstek, který
se nyní nazývá refrén -
jo, to je házení mě tady.
Takže řekněme tento přírůstek.
A my nevíme, co to další funkce to bude.
Takže co se vlastně děje, je tady někde v hlavní, mám kus
paměť, která je uložení čísla 1.
Když říkám, přírůstek, já jsem s použitím jiného kus paměti, ale teď jsem
mají kopii 1.
Když jsem zvyšte tuto hodnotu, to se stává 2 - hrozně napsané na
Obrazovka zde.
Ale pak, co se stane, jakmile přírůstu vrátí?
Tato paměť jen dostane předán zpět do operačního systému, což znamená, že všechny
jste udělal, je nic užitečného.
Ten, který byl původně obsažen v main je stále ve skutečnosti neexistují.
>> Tak kam půjdeme s tím?
No, ukázalo se, že v paměti máte tento zády k sobě posloupnost
bytů, které si můžete dát věci dovnitř
A ukázalo se, že jsme už viděli něco, co zahrnuje uvedení
věci zpět k sobě, aby se zády k sobě.
Co je řetězec, založený na týden a nyní se týden dva?
Takže je to jen sbírka postav.
Tak to dopadá, stejně jako si můžete dát čísla v paměti, podobně můžete
dal znaků v paměti.
A jakmile začneme putting znaky v paměti zpět k sobě dozadu, aby
zpět, se ukazuje, že s nejjednodušší věci, jako je pro smyčce nebo
zatímco smyčka, můžeme iterovat -
zleva doprava přes znaků v řetězci -
a začít masírovat je do různých postav úplně.
By se mohlo stát B. B by se mohl stát C. Takže nakonec můžeme vzít
Anglické věty, které skutečně smysl a převést každý z těch,
dopisy jeden po čase procházel naší paměti počítače vlevo
právo skutečně šifrování.
>> Takže pojďme se náš pětiminutovou přestávku tady, a až se vrátíme, sejdeme se
kdo tento proces zakódování informací.
>> Dobrá.
Takže než jsme se vrhnout na nějaký krypto a tyto věci tzv. pole, dovolte mi, abych
pauza pro případné dotazy, protože mám pocit, že jsem opravdu trochu zmatené některých
tato témata.
Takže pojďme opravit hned, jestli můžeme.
Tak jsme si povídali o návratových hodnot.
Mluvili jsme o argumenty.
A mluvili jsme o tomto pojmu, který se vrátíme v následujících týdnech
přijde, nahlížení paměti jako celou partou těchto naskládaných
podnosy, abych tak řekl.
Od dolní nahoru, tak, že každý zásobník, který se dal na stack představuje
funkce, která je v současné době nazývá.
Nějaké otázky?
Tak co - zkusím pokládám otázku.
Pořád kazí, ale teď to - you've všichni viděli chlapcovu tvář.
Takže se vrátíme k tomu.
>> Dovolte mi tedy položit otázku zde.
Dovolte mi, abych zjednodušit to zpět k tomu, co bylo předtím, než některé z našich dřívějších Q & A.
A to, že přírůstek má otevřené závorky, int číslo, uzavřený
závorky.
Co int číslo představuje?
[Neslyšitelné]
DAVID J. Malan: argument.
Dobře, ale co je to argument?
[Neslyšitelné]
DAVID J. Malan: Je nám líto, co to je?
SPEAKER 3: Něco vám projít dovnitř
DAVID J. Malan: Dobře.
Takže něco, že předáte palců
A obecněji, je to jen vstup.
Pokud píšete funkci a tuto funkci je smysl života, je to
něco trochu jiného každém použití, pak jediný způsob, jak
Aby se tak stalo skutečně se zdá být, aby jí vstup tak, že se
může dělat něco jiného s tím vstupem pokaždé.
>> Takže budete muset zadat dvě věci, když funkce má vstupy.
Musíte zadat jméno, které chcete, aby se tímto vstupem, čistě pro
vlastní pohodlí, takže můžete odkazovat se na to ve funkci, která vám
yourself psaní, jak jsem zde v souladu 32.
Ale také je třeba zadat její typ, protože C je programovací jazyk
že jen vyžaduje
že pokud chcete proměnnou, budete muset říct počítači, co
Datový typ je,
z velké části tak, že to ví, kolik bitů se
přidělit pro uvedené proměnné.
Vzhledem k tomu, že by mohlo být šest -
Omlouváme se, nebude to šest.
To může být 16.
To může být 8.
To může být 32, dokonce 64.
Ale počítač potřebuje vědět.
Nyní int na levé straně představuje to, co naopak?
[Neslyšitelné]
DAVID J. Malan: Co je to?
[Neslyšitelné]
DAVID J. Malan: Typ funkce, a konkrétněji,
typ jeho výstupu.
Přesně tak.
Takže vzhledem k tomu, věc v závorce představuje jeho vklad, pokud existuje,
věc vlevo představuje jeho výstupu.
A v tomto případě, přírůstek zřejmě vrátí int.
A tak int je návratový typ této funkce.
>> Co to znamená vrátit?
Doslova, můžete použít klíčové slovo návrat.
A pak, když to, co se vrací do pravé klíčového slova je
integer, pak je to skutečně v souladu s tím, co jsme slíbili.
Dalo by se to udělat něco takového -
ahoj, svět -
protože to je řetězec.
Je zřejmé, že je to celé číslo.
Takže ve zkratce, zátěž je opravdu na nás, programátor, jako specifické
k tomu, co se vracíme a pak vlastně jít o vracení.
A pak, aby se tad jasnější kontext -
tady je znovu.
Kontext -
Velkým překvapením přichází jen chvíli.
Kontext zde nyní je, že váš počítač je paměť, opět,
gigabyte, dva gigabajty, cokoliv.
Možná je to víc.
Možná je to méně.
Ale počítač považuje to, že mají různé oddíly.
Něco je tam dole.
Něco jiného jde tam.
Různé věci jde ve středu.
A dnes, právě jsme začít vyprávět tento příběh.
>> Ale vrátíme se na tento v průběhu času.
Pro tuto chvíli, jen kousek paměti opravdu záleží, je text segmentu
proto, že právě představuje nuly a ty,
že zvonění se na výstup.
Takže při spuštění příkazu na klávesnici, jako a.out, nebo double
klepněte na ikonu v systému Mac OS nebo Windows, je váš program načíst z pevného
jet do paměti RAM.
A to svalil na vrcholu RAM počítače, abych tak řekl.
Nyní mezitím, jak váš program spustí a hlavní je volána v
program, který psal nebo program Microsoft nebo Apple psal, některý z jeho
lokální proměnné skončí tam dole na dně paměti vašeho počítače.
Ale pokud hlavní volá jinou funkci, která sama o sobě má proměnné nebo
Argumenty, které skončily nad ním.
A pokud tato funkce volá něco, oni skončí nad ním,
nad ním, nad ním.
A pouze jednou funkcí se provádí spuštěním dělá balík zásobníků, tak
mluvit, začnou se dostat nižší a nižší.
A to je to, co pak, v kostce, vysvětluje, proč, když budete volat kostka -
nebo volejte přírůstek -
vy kolem v kopii hodnoty.
A co to znamená, obrazově je to, že jste doslova psát
číslo 1 v jiné části paměti, měnící se, že 1-2, v případě, že
přírůstek -
nebo na 8, v případě, že kostky -
a pak házet, že paměť se pryč jakmile přírůstkem nebo kostky
funkce vrací.
>> Otázka.
[Neslyšitelné]
DAVID J. Malan: Kde - globální proměnné jsou uloženy v to, co je
v současné době volal inicializované data nebo neinicializované dat.
Rozdíl je, pokud máte globální proměnné, a přiřadit ji
okamžitě hodnota se rovná registrovat, to skončí na vrcholu.
A jestli si jen říct, int x středník bez hodnoty, skončí mírně
nižší RAM jednoduše podle konvence.
Další dotazy.
Dobrá.
>> Takže tento obrázek vrátí, jak jsme si silnější s tím, co můžeme udělat
s počítačem.
Ale teď, pojďme se stručně úvod do kryptografie, specifický druh
kryptografie, která se neřeší všechny problémy světa, ale to řešit
some z nich se.
V tomto případě zde máme něco, co nazývá tajný klíč kryptografie.
A tajný klíč kryptografie, jak již název napovídá, pochází jeho bezpečnost
z tajemství.
Tak například, pokud jste zpátky na základní škole a jste kolem
malé tajemství milostný dopis pro chlapce nebo děvče se tlakem na - pokud
chtěl předat, že přes publikum, pravděpodobně by se psát
taková poznámka v angličtině nebo jaký je váš rodný jazyk, je, spíše si
může zašifrovat.
Nebo můžete jen poslat textovou zprávu v těchto dnech.
Ale možná ve skutečnosti předat jim vzkaz v celé třídě.
A k tomu to bezpečně, tak aby vaši přátelé a učitel
Nevím, co píšete, můžete přijít s poměrně jednoduchou
algoritmus -
mladý, že jste mohl být -
jen vyškrábat slova.
Takže místo psaní, můžete si napsat B. Místo B, můžete si napsat
C. Místo C, můžete napsat D, a tak dále.
Nebo byste mohli přijít s sofistikovanější překlad dopisů
na různých písmen.
Ale úlovek je chlapec nebo dívka, které posíláte na vědomí potřebuje
něco vědět.
Což je to, co, samozřejmě?
Stejně jako to, co vaše tajemství.
Stejně jako to, co je, že mapování mezi AS a BS a CS a DS?
Je to pouhým přidáním, abych tak řekl, na každou z dopisů jít od
A do B, B a C?
Je to složitější, než to?
Takže vy a vaše rozdrtit potřebujete mít tuto tajnou informaci.
Ale je tu trochu catch-22 zde.
Pokud je to vůbec poprvé posíláte milostný dopis prostřednictvím
třídy, jak je ten kluk, nebo holka bude vědět, co je tajemství ještě je?
Takže tajný šifrovací klíč nevyřeší všechny problémy světa.
A je to vlastně vztah, který se vrátíme do k
semestr Konec.
>> Podobně, žádný z nás asi někdy poslal -
podobně, se většina z nás neví někdo, že pracuje, například na
Amazon.com.
A přesto, mnozí z nás pravděpodobně koupil věci na Amazon.com.
A my jsme se učili předpokládat, že tyto e-commerce
transakce jsou bezpečné.
Je to tak?
URL pravděpodobně říká https.
Tam je možná hloupá ikona visacího zámku někde.
Tam je nějaká kryptografie zabezpečení informací o kreditní kartě
mezi vámi a Amazon.com.
A přesto, pokud kryptografie znamená vědět, nějaké tajemství, a přesto nemám
Znáte někoho na Amazon, a já jsem rozhodně nejsou uspořádány jakékoliv
Tajemství s někým na Amazon, jak se můj počítač, nebo můj prohlížeč dělat tohle?
No, ukázalo se, že je to jiné typy kryptografie celkem, které řeší
tohoto problému.
Ale pro dnešek, budeme soustředit na jednoduchý, kde si můžete sjednat ve
předem vědět nějaké tajemství, stejně jako plus 1 nebo nějaké mapování mezi AS a BS.
>> A proces kryptografie obecně zahrnuje to.
Máte nějaký prostý text, je znázorněno zde vlevo.
Můžete jej spustit přes nějaký druh algoritmu nebo postupu
pro šifrování ho.
Možná, že to jen se stane B, B se stává C. A pak skončit s
šifrovaný text.
Mezitím, jakmile váš rozdrtit obdrží tajnou poznámku, on nebo ona má pak
dešifrovat to tím, že obecně změny tohoto algoritmu tak, aby si
zpět na prostý text.
Teď tam jsou fyzické inkarnace tohoto.
Například, to je malé tajemství dekodér kroužek.
A to je kroužek v tom smyslu, že jsou dva vytočí zde.
Na vnější okraji této věci, je tu písmena A až Z,
i když to v náhodném pořadí.
A na vnitřní straně, je to vlastně některá čísla, je taková, že s tímto
kroužek, můžete druh zase mimo, ale ne uvnitř, aby se seřadit
čísla s písmeny.
A v klipu, který se chystáte vidět - z nichž některé mohou být vidět 24/7
kolem Vánoc z filmu s názvem Vánoční příběh.
Uvidíte, že malý Ralphie byl tak dychtivý zjistit, co malý sirotek
Annie je tajný vzkaz byl k němu, které byly sděleny, myslím, že ve
tvoří numerických zpráv na sériovém krabici.
A vy jste musel shromažďovat všechny ty malé karty, které byly dodány
v obilí pole.
Vy jste měli na e-mail jim palce
Vy jste měli dostat zpět tajný dekodéru prsten, takže si můžete konečně přijít
co je mapování mezi písmeny a číslicemi,
nebo písmena a písmena.
Tak jsem vám tento krátký klip z A Christmas Story motivovat PSet 2 a
naše diskuse, ve chvíli, polí.
Takže tu máme Ralphie.
>> [PŘEHRÁVÁNÍ]
-Ať už je to všem známé a různé, že Ralph Parker je jmenován
člen Little Orphan Annie kruhu tajné a je oprávněn ke všem
se ctí a výhody vyskytující ní.
-Signed, Little Orphan Annie.
Spolupodepsal, Pierre Andre!
V inkoustu!
Vyznamenání a výhody, které již ve věku devíti.
Pojď, dáme se do toho.
Nepotřebuju All That Jazz o pašeráky a piráty.
-Poslouchejte zítra večer na závěrečné dobrodružství Black
Pirate Ship.
Nyní je čas na tajné zprávy Annie pro vás členové
Tajného kruhu.
Pamatujte si, děti, mohou pouze členové tajné kruhu Annie dekódovat
Annie je tajný vzkaz.
Nezapomeňte, Annie je v závislosti na vás.
Nastavte své špendlíky B2.
Zde je zpráva.
12, 11 -
-Já jsem ve svém prvním tajné schůzce.
-14, 11, 18, 16 -
-Pierre byl ve velké hlasové večer.
Mohl bych říct, že dnešní zpráva je opravdu důležité.
-3, 25.
To je zpráva z Annie sama.
Pamatujte si, že nikomu to neříkejte.
-90 Vteřin později, jsem v jediné místnosti v domě, kde devítiletý chlapec
mohl sedět v soukromí a dekódovány.
Aha, B. jsem šel na další.
E. První slovo je být.
S. Přicházelo to teď snazší.
U.
-Oh, no tak, Ralphie.
Musím jít.
-Budu hned dole, ma.
-Gee výtvarník.
-T, O. Ujistěte se, že.
Ujistěte se, že to, co?
Co bylo Little Orphan Annie snaží říct?
Ujistěte se, že to, co?
-Ralphie!
Randy má jít.
Mohl bys prosím přijít?
-Dobře, ma.
Hned jsem ven.
-Byla jsem blíž.
Napětí bylo hrozné.
Co to bylo?
Osud planety může viset na vlásku.
-Ralphie!
Randy má jít.
-Budu mít pravdu ven, proboha.
-Gee, skoro tam.
Mé prsty letěl.
Moje mysl byla ocelová past.
Každý pórů vibroval.
To bylo skoro jasno.
Ano, ano, ano, ano.
-Ujistěte se, že pít svou Ovaltine.
Ovaltine?
Podřadný komerční?
Zkurvysyn.
[END VIDEOPŘEHRÁVÁNÍ]
>> DAVID J. Malan: Tak tady to máme kryptografii.
Tak jak v počítači můžeme jít o zavádění nebo
představující věci, jako je tento?
No, my potřebujeme způsob, jak vyjádřit sebe trochu pružněji než
naše proměnné, doposud dovoleno.
Jsme měli ints.
Jsme měli znaků.
Jsme měli plováky a dvoulůžkových a několik dalších.
Ale to jsou jednotlivé kusy paměti, které nejsou opravdu nám umožňují
vyjádřit věci, jako slov a vět a frází.
Opravdu, jsme volal takové věci, řetězce.
Slíbili jsme, že je to opravdu jen zjednodušení v CS50
knihovna, která jsme v úmyslu odtrhněte.
>> A tak pojďme začít dělat, že tady.
Nech mě jít dál a otevřít soubor -
Všechny tyto soubory jsou k dispozici jako obvykle on-line -
called array.c vyřešit problém nesouvisí s řetězci, ale že maluje
obrázek zde o tom, jak bychom mohli použít něco jako pole.
Pole je datový typ.
Je to typ proměnné, druhů, který má více menších datových typů
uvnitř něj zády k sobě, aby se zády k sobě.
Tak například, pokud chceme napsat malý program, který vám dává
kvíz průměr na kurz jako 50, která má dva kvízy, mohli byste velmi snadno
napsat tento program - na základě i na některé z minulého týdne materiálu -
pomocí GetInt a pár proměnných.
Int quiz1, int quiz2, a je to docela jednoduché.
Možná je to 10, 20 řádků kódu, max., realizovat program, který se zeptá
uživatel pro dva kvízy skóre a poté vypočítá jejich průměr přidáním
společně, dělení dvěma, a pak tisk výsledků.
Bychom pravděpodobně mohli udělat docela snadno nyní po
některé počet minut.
>> Ale problém je, že předpokládám, že 50 měla tři kvízy nebo čtyři.
Předpokládejme, že jste chtěli použít stejný program pro třídu, která měla
týdenní kvízy.
Přemýšlejte o třídy, která se jednou týdně kvízy.
Pokud je jako 16 nebo týdnů, v semestru, nyní máte 16 proměnných -
int quiz1, int quiz2, int quiz3, int quiz4.
Jakmile začnete vidět tuto redundanci, tento kopírování a vkládání
kódu, měl by začít dělat si přejete tam byl lepší způsob.
A naštěstí, protože pole, tam je.
Takže jdeme na to.
Za prvé, dovolte mi představit velmi jednoduchou věc, že ​​jsme se nepoužívá tak daleko,
ale uvidíte to občas v kódu.
To je to, co se obecně nazývá konstanta.
Takže je to konstanta v tom smyslu, že tato hodnota nikdy se mění.
Lidská konvence při vytváření konstanta je použít všechny kapitál
dopisy, jen proto, že to opravdu stojí v kódu.
A speciální klíčové slovo, které používáte v C je # define.
Takže když řeknete # define, pak mezeru, pak slovo, které chcete použít pro
na konstantní jméno, a potom je hodnota konstanty.
Takže upozornění, toto je odlišné od přiřazení něco proměnné.
Není rovnítko.
Není středník.
To je to, co je všeobecně známo jako preprocesoru směrnice, ale na
že jiný čas.
>> Pro tuto chvíli, to vytváří neměnný nazývá hodnota kvízy, jejichž skutečná
číselná hodnota je 2.
Takže kdekoli vidíte kvízy, kvízy, kvízy v tomto souboru, který je
jen číslo 2.
Teď, když se podívám na hlavní teď, pojďme se podívat, jak to funguje.
Zpočátku to vypadá trochu záhadný.
Ale je to všechno věci z první týden.
Požádejte uživatele, pro stupně.
Jak to uděláme?
No, v řádku 22 -
to je opravdu šťavnaté část -
Prohlašuji, float, ale ne jen jeden float.
Jsem prohlašuje, spíše pole pohyblivé řádové čárce.
To je proměnná bude nazýván stupně, jak vyplývá zde.
Ale jediný kus nové syntaxi pak jsou tyto hranaté závorky, skutečnost,
že jsem řekl, float stupně a pak otevřete konzolu a pak číslo.
Všimněte si, jestli je to konstanta, je to stejně jako jsme to udělali.
To znamená, hey počítač, dát mi dva plováky, a pojďme společně volat
je stupně.
Toto je v kontrastu k mnohem nudnější procesu, jako je tento.
Float grade1, float grade2, a tak dále.
Takže pole nám umožňuje realizovat tuto myšlenku, ale mnohem méně ledabyle, v
takovým způsobem, že můžeme napsat jeden řádek kódu namísto, řekněme, 16 pro 16
týden semestru.
Tak jsem nechtěl, aby tvrdě kód 2, protože pokud si myslíte, že o tom teď
logicky - Předpokládám, že příští rok CS50 změny 3 kvízy místo.
A já jsem měl číslo 2 zde.
Měl jsem číslo 2 zde.
To se stává velmi únavné a velmi snadno pokazit a náhodně změnit
jedna hodnota na hodnotu 3 a chybět jinou hodnotu 2.
Takže budu místo abstraktní toto pryč a použít tato konstanta, že její
název napovídá, nikdy nemění.
A teď, bez ohledu na to, zda máme různé kvízy ještě letos nebo napřesrok, jsem
muset změnit na jednom místě, tady nahoře.
>> Takže to je vše, konstanta je.
Mezitím, nová pojmovým znakem je to, že z pole.
Takže hranaté závorky mi tolik plováky a umožňuje mi kolektivně
nazývají stupně zde.
Takže teď se podíváme, co budu dělat.
Tady v souladu 24 je začátek smyčky for.
To je opravdu nic vymyšleného.
Je to jen pomocí kvízů místo hard-kódované číslo.
Ale nic intelektuálně jinak, tam z minulého týdne.
To je jen printf.
Takže printf ("kvíz číslo% d% d"), protože chci vytisknout dát mi kvíz
číslo jedna ze dvou a pak dva ze dvou.
Takže je to čistě estetická věc.
Ale zajímavá část je nyní v souladu 27.
Aby bylo možné vyplnit v jednom ze dvou zástupných symbolů s plovoucí čárkou
hodnota, můžete opět použít hranaté závorky.
V tomto případě, já jsem s použitím i proto, že to pro smyčce začala s i rovná
jakou hodnotu, zřejmě?
0.
>> Tak na první iteraci tohoto smyčky, je to, jako já
napsal v kódu.
Ale na druhé iteraci tohoto smyčky, je to, jako já
napsal v mém kódu.
Ale fakt, že jsem pomocí proměnné je perfektní, protože, jak už název
navrhuje, je to různé její hodnotu na každé iteraci.
Takže jsem vyplnění tohoto pole jeden bod v čase.
Co to pole vypadá?
No, důvod, proč jsem kreslil to super jednoduchý obdélník na obrazovce zde
dříve byl z tohoto důvodu.
Pole je jen kus paměti následuje další kus paměti,
následuje další kus paměti, a tak dále.
Takže pokud má pole je velikosti 2, v tomto případě tady, bych měla dělat podle
psaní v mých kvizů skóre, jako je tady.
Mám 100 na tento jeden.
A pak jsem dostal 99 na tento jeden.
Pak je tato paměť může vůbec použít, protože jsem se jen zeptal
počítač pro pole o velikosti 2.
Tyto čtverce jsou tam stále.
Je to tak?
Stále máte dva gigabajty RAM, i když jste jen
žádá pro dva plováky.
Takže myšlenka polí je, že počítač prostě vezme kus paměti
a pak rozděluje menší kusy zády k sobě, aby se zády k sobě.
A tak to je vše, pole je.
Je to souvislá kus paměti, uvnitř které si můžete dát věci.
>> Nyní se to stane a pak dělat jen nějaké nudné aritmetiku.
Kdybych přejděte tady, to je místo, kde jsem se pak iterovat přes pole.
I přicházejí s součtu všech hodnot v poli.
A pak jsem použít kolo funkce zde skutečně udělat
Celkově děleno kvízy.
Ale dovolte mi, abych mávat ruku na to jako jakýsi dost aritmetiky pro teď.
Ale všechno, co dělá pro mě nakonec je výpočet průměru.
Takže první kvíz a druhý kvíz, děleno 2, a pak tisk
to se jako int.
>> Ale pojďme teď přechod na jiný příklad s názvem string1,
který maluje podobný obraz, ale pomocí řetězce.
Nech mě jít napřed a zjednodušit tím, jen na chvíli.
A odpusť odsazení pro teď.
Oznámení v souladu 19 tohoto příkladu, mám řetězec od uživatele.
Povšimněme si ale to, co jsem dělal další v řadách 22 vpřed.
Já jsem vlastně iterace od i do - a to je nový trik -
strlen, délka řetězce.
To je funkce, která přichází s C, že pokud předat řetězec, to vám řekne
si, kolik znaků je v tomto řetězci.
To je vše.
Skutečnost, že je to strlen místo řetězce délky je jen proto, že je to
stručnější.
Před 30 lety, se líbila psát věci jako stručně, jak je to možné.
Takže jsme stále tuto úmluvu zde.
i + + znamená jen zvyšovat i v každé iteraci.
A teď si toho všimnout, což je opravdu zajímavé.
Takže v řádce 24, říkám počítač, dejte mi charakter, osm
bity, a nazývat to c.
Ale co je to na pravé straně říká?
V angličtině, co to představuje?
[Neslyšitelné]
DAVID J. Malan: Přesně tak.
Dej mi první znak v poli.
Nebo obecněji, dej mi i-tý znak v poli.
A uvědomit si, že je to důležité dnes, jako počítačoví vědci, jsme vlastně
počítat od 0.
Nemusíte uvážení teď začít dělat to.
Nyní se mají chovat v souladu s počítačem očekávání a
počítá od nuly, protože [0] bude první
znak v řetězci.
[1] bude druhý.
[2] bude třetí a tak dále.
Takže tohoto programu, když jsem zkompilovat - to je, opět, string1.
>> Tak, aby string1.
A teď jsem běžet string1 ve svém terminálovém okně.
Je to čekání na vstup, tak budu psát, řekněme, Davidovi.
Enter.
A teď se vytiskne DAVID vše na různých tratích, protože
upozornění, co dělám.
Já tisku jeden znak v čase.
Nyní nebudeme zacházet do podrobností dnes na toto téma.
Ale já jsem odstranil před chvílí této kontroly zde.
Ukazuje se, že v případě, že uživatel je nechová, sporné, nebo jen
zmatený, můžete skutečně nedávají řetězec obšírněji.
Pokud stisknete špatné tlačítko na klávesnici, můžete dát
no řetězec vůbec.
Nebo pokud jste škodlivý, můžete zkusit vložit na gigabyte to stojí
esej vyplnit tento řetězec.
A pokud je počítač spuštěn z paměti, se ukazuje, že jedeme
získat zpět tuto speciální hodnotu s názvem null.
Takže teď, jen vím, že tam je to speciální hodnota zvaná null že
nám umožní zkontrolovat, kdy jsme z paměti, mimo jiné.
>> Ale když otevřu se nyní řetězec2, všimnete jeden rozdíl zde.
Všimněte si, jeden rozdíl tu s string2.
S string2, to pro smyčce je trochu jiný.
Dovolte mi, abych odstranit nuly, takže můžeme hovořit o těch někdy jindy.
Ale to, co je o pro smyčce tentokrát?
A můžu se vrátit k předchozímu příkladu.
Tak to je verze dva.
Toto je verze jedna.
Jedna, dva, jedna, dvě.
Takže strlen hovor je kde?
Je to v první části smyčky for.
Jakékoli myšlenky, proč to dělám?
Jo.
[Neslyšitelné]
DAVID J. Malan: Takže nevolejte funkce pokaždé.
Přesně tak.
Vzpomeňte si na smyček, které jsou super jednoduchý, jakmile trochu
chápat, že toto je inicializace,
stav, a aktualizace.
Problém je v tom, že tato podmínka se děje na každém
iterace smyčky.
A tak v tomto příkladu zde, co je špatné o tom
že tohle je moje podmínka?
Voláte strlen znovu a znovu a znovu.
Ale poté, co jsem napsal v roce DAVID, délka tohoto řetězce je pět.
A že to nebude měnit na každé iteraci smyčky, protože
řetězec je stále D--V-I-D. Tak to je náznak, co se děje, aby se stal
stále důležitější nápad známý jako konstrukční rozhodnutí, kde - prostě nemají
aby počítač dělat zbytečnou práci.
>> Nyní stejně jako plížit náhled PSet 2, PSet 2 ve standardní edici, je
bude výzvou, abyste skutečně provádět určitý počet šifer, některé
počet šifrovacích algoritmů, takže si můžete i šifrovat a dešifrovat
tajné zprávy, podobně jako na jedné Ralphie tam dekódovat.
V hackerské vydání PSet 2, budeme jít trochu dál.
Budeme vám předá soubor od skutečného počítačového systému, který obsahuje
celá parta uživatelských jmen a skutečných zašifrovaných hesel, a výzva
pro hacker vydání bude bezva těchto hesel a obrázek
co kryptografie nebo co tajemství bylo použito skutečně
generování těchto hesel.
A budeme-li to provést pomocí nové funkce zde o C, která dám
stačí demo, známý jako argumenty příkazového řádku.
>> Tak to dopadá, jak si někteří z vás možná viděli v oddílu nebo v učebnicích,
Hlavním nemusí vždy být neplatné v závorkách.
Ukazuje se, že hlavní může také být psán jako to, se dvěma argumenty,
argc a argv, kde argc je počet slov, která zadáte po
v programu název na příkazovém řádku.
A argv je skutečná slova.
A jak hranaté závorky tam naznačují, argv je zřejmě pole.
Je to bude řetězec za řetězec po řetězec v paměti.
Takže to, co budeme moci dělat, počínaje PSet 2, je
něco takového.
Pokud udělám argv1, který je příkladem vrátíme do pondělí, a spusťte
to, zjistíte, že to nevypadá na nic zatím.
Je to jen vytiskne jeho vlastní jméno.
Ale když řeknu sbohem třídy, všimněte si, že tento program zřejmě opakuje
nad každým ze slov, které byly zadány na příkazovém řádku.
A prostředky, které získáme přístup k slov, které uživatel
zadali na příkazovém řádku je změna hlavní, počínaje tento víkend, od int
main (void) int main (argc, argv).
A tak se zrodí argumenty příkazového řádku.
A jakmile se dostanete opravdu sofistikovaný na to, budete moci psát
Opravdu trippy programy, jako je tento, která sem jde nad rámec
některé funkce, že jsme udělali tak daleko, ale všechno docela silný.
>> Takže necháme to s tím na obrazovce.
A uvidíme se v pondělí.