>> [Přehrávání hudby]
David J. Malan: Dobře.
To je CS50, a to je konec týdne 2.
Takže dnes, jdeme pokračovat v našem vzhled
na to, jak reprezentovat věci pod hood-- vzdaluje
z čísel jako čísel a plovoucí desetinnou čárkou hodnoty
a zaměřit se na řetězce a nakonec další zajímavé programy.
Ale budeme se také podívat na pár domény specifické problems--
z nichž první bude být zahrnující kryptografii,
umění kódování informací, ve které vidíte výše zde
je obraz Radio Orphan Annie Tajemství dekodér prsten z minulosti.
>> To je vlastně velmi primitivní forma a dítě-přátelský forma cryptopgraphy
přičemž tento kroužek má dvě disks-- jeden vnitřní a jeden vnější.
A otočením jednoho z těch, můžete v podstatě se seřadí písmena jako a
až Z s jinými písmeny jako B prostřednictvím A. Jinými slovy,
můžete doslova otočit abecedu, tak přijít s mapováním od
dopisy dopisy tak, že pokud chtěl poslat tajnou zprávu
s někým, jako je Annie, můžete napsat se svou zprávu a otočte
dopisy, přičemž, pokud máte na mysli říkat "A", místo toho řekl "B"
Chcete tím říct, "B" místo toho říkají "C" -
nebo něco trochu chytřejší než to-- a pak, nakonec,
tak dlouho, dokud Anna má tento dekodér prsten, umí dekódovat zprávu.
Nyní můžete připomenout, ve skutečnosti, že tato byl použit ve velmi známého filmu, který
hraje ad nauseum během Vánoce.
Pojďme se podívat zde.
Ralphie PARKER: "Ať už je to známo, že vše v souhrnu
že Ralph Parker je jmenován člen Little Orphan Annie Secret
Circle a je oprávněn ke všem vyznamenání a výhody dochází k nim. "
>> Ralphie PARKER (vyprávění): Podepsáno Malý sirotek Annie.
Spolupodepsat, Pierre Andre!
Inkoustem.
Vyznamenání a výhody, Již ve věku devíti let.
>> [Přehrávání hudby]
>> [RADIO klábosení]
Ralphie PARKER: Pojď.
Pojďme na to.
Nepotřebuji All That Jazz o pašeráků a pirátů.
Rozhlasový hlasatel: Poslouchejte zítra noc závěrečné dobrodružství
The Black pirátské lodi.
Nyní je čas pro Annie Tajná zpráva pro vás členy
z The Secret Circle.
Nezapomeňte děti pouze členové Annie Secret Circle
umí dekódovat Annie tajnou zprávu.
>> Pamatujte si, že Annie je závislá na vás.
Nastavte si piny pro B-2.
Zde je message-- 12, 11, 2--
Ralphie PARKER (vyprávění): I jsem v první tajné schůzce.
Rozhlasový hlasatel: --25, 14, 11, 18, 16--
Ralphie PARKER (vyprávění): Oh, Pierre byl ve skvělé hlasové večer.
Mohl bych říct, že dnes je Zpráva byla opravdu důležité.
>> Rozhlasový hlasatel: --3, 25.
To je zpráva od Annie sama.
Pamatujte si, že nikomu to neříkejte.
>> [Lapal po dechu]
Ralphie PARKER (vyprávění): Devadesát vteřin později jsem
v jediné místnosti v Dům, ve kterém chlapec z devíti
mohl sedět v soukromí a dekódovat.
Ah.
"B"
>> [Zasměje se]
>> Ralphie PARKER (vyprávění): Šel jsem dál.
"E."
První slovo je "být."
Ano!
Přicházelo to nyní snazší.
"U."
>> [Zasměje se]
>> Randy PARKER: Ale no tak, Ralphie.
Musím jít!
>> Ralphie PARKER: Hned jsem dole, mami.
Gee svištět.
"T." "O." "Ujistěte se, že na. "" Ujistěte se, že "Co je?
Jaký byl malý sirotek Annie snaží říct? "Ujistěte se, že" to, co?
MATKA: Ralphie, Randy má jít.
Mohl byste, prosím ven?
>> Ralphie PARKER: Dobře, mami!
Hned jsem se!
Ralphie PARKER (vyprávění): Byl jsem stále blíž.
Napětí bylo hrozné.
Co to bylo?
Osud planety může viset na vlásku.
>> MATKA: Ralphie, Randy musí jít!
>> Ralphie PARKER: Budu hned se, proboha!
Ralphie PARKER (Vyprávění): Už jsme skoro tam!
Prsty se mi letěl!
Moje mysl byla ocelová past.
Každý pór vibroval.
Bylo skoro jasno!
Ano!
>> Ralphie PARKER: "Ujistěte se, že pít svou Ovaltine. "
Ovaltine?
Mizerný reklamu?
>> [Přehrávání hudby]
>> Ralphie PARKER: Ten zkurvysyn.
>> [Smích]
>> David J. Malan: Takže to je pak letmý pohled na to, co kryptografie
může být pro tohle-- A pít z minulosti.
Tak rychlé oznámení.
Jste-li bez této Pátek v 13:15 a bylo by
se k nám připojit na CS50 oběd, hlava na této adrese zde.
Kdo dřív přijde, ten dřív mele jako obvykle.
Ale postupem času, budeme se ujistěte, že většina někdo, kdo by se chtěli zúčastnit
může naplánovat-moudrý.
>> Takže řetězce.
Máme Zamyla-- koho jste se setkali s největší pravděpodobností
v Zadání problému 1-- jehož název uveden takto.
A předpokládám, že jste zadali své jméno do počítačového programu, který je
používat něco jako getString.
Aby bylo možné načíst ty stisky kláves, jak
máme jít o zastupování řetězec, slovo, odstavec,
nebo více písmen, jako jsou tyto tady?
>> Mluvili jsme minule o celá čísla a problémy
které vzniknou s přetečení celého čísla a plovoucí desetinnou čárkou hodnoty
a problémy, které vznikají v rámci přesnosti.
S řetězci jsme alespoň mají trochu větší flexibilitu
protože strings-- jen v reálném svet
může být docela libovolné délky.
Pěkně řečeno, docela dlouho.
Ale i pak, budeme zjistil, že počítače mohou někdy
spustit z paměti, a dokonce ani uložit dost velký řetězec.
>> Ale teď, pojďme začít vizualizovat řetězec jako něco, co v těchto krabicích
zde.
Takže šest takové krabičky, z nichž každá představuje znak nebo znak "."
Takže připomenout, že "char" - c-h-a-r-- je jeden z vestavěných datových typů v jazyce C.
A co je příjemné je, že můžete použít že druh jako stavební kámen,
skládačky, chcete-li, k vytvoření Větší typ dat, které budeme i nadále
volání "řetězec".
>> A teď, co je užitečné, o myšlení o věcech, jako jsou řetězce tímto způsobem?
No, ukázalo se, že můžeme skutečně využít tuto strukturu
skutečně přístup k jednotlivé znaky v docela přímočaře.
Chystám se jít dopředu a vytvořit Soubor s názvem "stringzero.c"
ale můžete říkat, co chcete.
A na internetových stránkách kursu je Již tento příklad předem,
takže se nemusíte Typ všechno ven.
>> A budu pokračovat a nejprve udělat int main neplatné.
A během několika dnů, začneme dráždit sebe
co void je tady, proč je to int vedle hlavní, a tak dále.
Ale teď, pojďme pokračovat kopírovat vložit, že.
>> Jdu vyhlásit řetězec s názvem s.
A já se vrátit z GetString za jakýchkoliv uživatel zadá.
To bude jednoduchý Program, žádné pokyny,
Já jen tak naslepo Předpokládáme, že uživatel zná
co dělat, aby to jednoduché.
>> A teď budu mít pro smyčce.
A uvnitř mé pro smyčce jsem bude mít int i dostane na nulu.
A i je, opět, jen konvence, proměnná index pro počítání,
ale já jsem mohl zavolat to, co chci.
Chystám se udělat i méně than-- dobře Zamyla jméno je šest písmen dlouhé.
Takže jdu tvrdě Kód, který tam teď.
>> A pak jsem ++.
A teď uvnitř těchto kudrnaté šle budu dělat printf,
a chci vytisknout jednu znaků najednou.
Takže budu používat% c pro snad poprvé.
A pak chci tisknout každý znak na samostatném řádku.
Tak jdu dát málo zpětné lomítko n tam.
Close quote.
>> A teď chci udělat něco tady.
Chci vytisknout konkrétní písmeno v řetězci,
s, jak jsem iterace z na do šesti nulu.
Jinými slovy, chci vytisknout i'th charakter s.
Nyní, jak to udělat?
>> Tak podobně jako krabice v toto zastoupení zde
druh, vykouzlit představu o boxu písmena, můžete to udělat podobně
syntakticky v C jednoduchým zadáním, Chci vytisknout s'S i'th charakteru.
Pomocí hranatých závorek na klávesnici počítače
že na klávesnici a USA jsou obvykle nad vaší klávesu Enter.
>> Takže to není úplně v pořádku přesto, jak jste si možná všimli.
Ale budu druhu slepě kupředu zde.
A já budu dělat, aby řetězec 0.
Ale než jsem to, uvidíme, jestli budeme nemůže předvídat některé běžné chyby.
To bude sestavujeme?
Ne, mi chybí spoustu věcí.
Knihovny jsem slyšel.
>> Tak který hlavičkové soubory já bych mohl chtít přidat sem?
Jo.
>> Diváků: Potřebujete Standardní I / O [neslyšitelné]
>> David J. Malan: Výborně.
Tak jsem třeba Standard I / O. Za to, co Účelem nechci Standard I / O?
Pro printf.
Takže jsou stdio.h.
A také navrhnout, aby mi patří knihovna CS50 jakého důvodu?
Chcete-li mít řetězce.
Tak uvidíme, co Knihovna CS50 je dělá
vytvořit tento pojem řetězce.
Ale teď, stačí přemýšlet to jako skutečný datový typ.
>> Tak, že se zdá být trochu vyčistit.
A teď budu pokračovat a opravdu to, aby řetězec 0.
Sestaveno.
Tak to je dobře.
Takže ./string0 mi dovolte přiblížit, takže můžeme viz blíže, co se děje.
Enter.
Z-A-M-Y-L-vstoupit.
A my jsme vytisknout na Zamyla jménem.
>> Tak to je docela dobrý.
Takže teď pojďme do toho a znovu spustit tento program,
a zadejte z Daven je celé jméno.
Překvapení, překvapení.
Enter.
Hmm.
Nemáme vytisknout Daven je plné křestní jméno správně.
Právě toto by mělo být zřejmé, v Retrospect protože to, co,
druh rozhodnutí hloupý návrh?
>> Jo, tvrdě jsem kódované šest uvnitř mé smyčky for.
Teď jsem to udělal jen proto, že Věděl jsem, že Zamyla jméno
to bude šest písmen.
Ale určitě to není obecné řešení.
Tak to dopadá můžeme dynamicky zjistit délku řetězce
voláním funkce nazývá strlen.
>> Opět platí, že úmyslně stručně pojmenovaný právě
aby bylo pohodlnější psaní.
Ale to je synonymem pro získání délku řetězce.
Chystám se jít zpátky do svého terminálu okno a znovu spustit kompilátor.
Ale je to na mě ječet.
Implicitně deklarovat funkci knihovny strlen s typem unsigned int const--
Ztratil jsem se.
Úplně.
>> Tak, jak je to zejména vaše oči začnou pohasly
se chybové zprávy, jako je tento, zaměření upřímně na prvních pár slov.
Víme, že problém je v linka 8, jak je zde uvedeno.
A to je v řetězci-0.c.
Implicitně vyhlášení knihovní funkce strlen.
Tak, že se obecně bude být vzor chybových zpráv.
Implicitně prohlásil něco.
>> Takže ve zkratce, co se zdálo, že jsem se učinil s ohledem na lince 8, zde.
Co by mohlo být řešením ještě pokud jste nikdy nepoužívali strlen sebe?
>> Diváků: Část jinou knihovnou?
David J. Malan: Part z jiného knihovny.
Tak to je deklarováno, abych tak řekl.
To je uvedeno v nějakém souboru jiné než stdio.h a CS50.h.
Tak kde je to definováno?
Chcete-li být upřímný, buď máte jen že to z vrcholu vaší hlavy,
nebo si to na Googlu a zjistit.
Nebo vím, jsem otevřel v CS50 spotřebič terminálový program, který
je prostě velký, verze plná obrazovka co je ve spodní části okna gedit je.
>> A ukázalo se, že je tu Podobně stručný příkaz s názvem
muž pro ruční, kde když zadáte název funkce a stiskněte klávesu Enter,
dostanete zpět celkem Arcane dokumentace.
Je to text, který obecně vypadá něco takového.
Je to trochu ohromující na první pohled.
Ale upřímně řečeno, já budu nechat oči pohasly
a pouze se zaměřují na straně Starám se o pro tuto chvíli.
>> Což je to.
Který vypadá jako strukturálně něco, co jsem obeznámen se.
Opravdu manuálové stránky, tak mluvit, vám řekne,
v čem záhlaví souboru funkci jako strlen je definován.
Takže jsem jít zpátky do gedit.
A já jdu do toho a přidat sem # include
a soubor uložte.
>> Chystám se vyčistit obrazovku Control L Pokud jste přemýšlel.
A já se znovu spustit make string.0 sestavuje tentokrát.
./string.0 Zamyla.
Zdálo se, že pracovat Nech mě jít dopředu a spusťte jej Davenport.
Enter.
A to také zdálo, že funguje.
>> Takže, co můžeme udělat o něco lepší, než to, když můžeme začít uklizený věci
se jen trochu.
A já vlastně představit jednu věc nyní.
Chystám se jít dopředu a uložit to v jiném souboru.
A já jdu volat Tento soubor string1.c jen
být v souladu s kódem budete moci najít na internetu.
>> A pojďme zaměřit se na přesně stejný kód.
Ukazuje se, že jsem byl druh odběru
za samozřejmost to, že mého notebooku, a naopak, CS50 spotřebiče
má spoustu paměti, hodně RAM, hodně bajtů prostoru
, ve kterém mohu ukládat řetězce.
>> Ale realita, pokud jsem napsal dlouhý dost a dost kláves,
Mohl bych v typu teorie ve více znaků
než můj počítač fyzicky má paměť pro.
A to je problematické.
Stejně jako int může pouze Počet tak vysoká, teoreticky,
můžete nacpat jen tolik znaků do paměti RAM, nebo Random počítače
Access Memory.
>> Tak jsem se lépe předvídat tento problém, dokonce
i když to může být vzácné roh případ, abych tak řekl.
Nestává tak často, by se mohlo stát.
A pokud se to stane, a vůbec se mi nelíbí předvídat a program pro něj,
můj program mohl dělat kdo ví co.
Zmrazit, pověsit, restart, cokoliv.
Něco se předpokládalo by se mohlo stát.
>> Takže to, co budu dělat Nyní, od nynějška opravdu,
je, než jsem vůbec naslepo použít proměnnou, jako s, které
byla přiřazena návratovou hodnotu některé další funkce, jako getString,
Jdu se ujistit že jeho hodnota je platná.
Takže vím jen z přečtení Dokumentace CS50 pro getString,
což v konečném důsledku budeme bod, v, že getString vrací speciální symbol
názvem NULL, N-U-L-L ve všech čepice, když se něco pokazí.
>> Tak normálně, vrátí řetězec.
Ale jinak, pokud se vrátí N-u-L-já-- budeme nakonec vidět, co to ve skutečnosti
means-- to jen znamená něco špatného stalo.
Teď to znamená, že stejně jako v Scratch, Mohu zkontrolovat stav tady v C,
pokud to není rovno NULL.
Takže pokud jste ještě neviděli předtím, to jen znamená, že není rovno.
>> Takže je to opak toho, stejné rovni, což vzpomínám,
se liší od jediné rovná, což je úkol.
Takže pokud to není rovno NULL, teprve poté
Chci spustit tyto řádky kódu.
Takže jinými slovy, předtím, než jsem se ponořit naslepo
a začít iterace na s, a brát to
jako by je posloupnost znaky, budu nejprve zkontrolovat,
počkejte chvíli, je to určitě není rovnající se této zvláštní hodnoty, NULL?
>> Protože pokud ano, špatné věci se může stát.
A teď, předpokládám, že špatné věci děje znamená, že program spadne,
a nemůžete nutně obnovit.
Takže upřímně řečeno, vypadá to ošklivější.
Je to trochu matoucí, nyní, aby se podíval na.
Ale toto se stane více seznámit zanedlouho.
>> Ale budu navrhovat teď jeden další zlepšení.
To je vylepšení správnost.
Můj program je nyní přesnější, protože ve výjimečných případech, že není dostatek paměti
existuje, bude to zvládnu, a já prostě nic.
Já alespoň nespadne.
>> Ale pojďme udělat konečné verzi zde.
A soubor s názvem string2.c.
Chystám se vložit, že stejný kód na chvíli,
a já se zaměřím na to linka, 11, zde jen na chvíli.
Nyní je skutečností, že chytré kompilátory jako Clang mohl opravit to pro nás
zákulisí aniž bychom vůbec věděli.
Ale pojďme si o tom myslíte zásadně za problematické konstrukce.
>> Tento řádek kódu je, samozřejmě, říká, inicializovat nějakou proměnnou i na 0.
To je docela jednoduché.
A co je zase tohle prohlášení, tady, i ++, dělat?
My jsem to neviděl, ale my se opravdu o tom mluvit.
>> Diváků: Zvyšování i.
>> David J. Malan: Zvyšování i.
Takže v každé iteraci přes Tato smyčka, každý cyklus,
jste zvyšování i po druhém.
Takže to bude větší a větší, a větší než smyčka ukončí.
Jak to skončí?
No tam je to prostřední stav, který jsme použili předtím.
Viděli jste, a průchody v sadě P.
>> Ale co je to přísloví?
Proveďte následující smyčku tak, pokud i je menší než co?
Diváků: délka řetězce.
David J. Malan: délka řetězce.
Tak to překládá docela čistě do angličtiny v tomto smyslu.
Nyní je problém je, že pokaždé, když jsem iterovat této smyčky v teorii,
Ptám se na tuto otázku.
Je i menší než délka řetězce s?
>> Nyní se i mění na každé iteraci?
To je.
Vzhledem k ++.
Takže každé iteraci i je stále větší.
Ale je to stále větší, nebo menší, nebo měnící se vůbec?
Ne
Takže pokud jde o design, jedné z os podél které se snažíme vyhodnotit kód
ve třídě, to cítí trochu hloupý.
>> Stejně jako jste doslova, na každé iteraci
této smyčky s dotazem Totéž opět zatraceně otázka,
a znovu, a znovu, a doslova to se nikdy nezmění.
Alespoň když jsem se dotkl s a Pokoušíte se změnit obsah s.
Tak jsem si to trochu lepší než tohle.
>> A to, co budu dělat, je to deklarovat jen jednu proměnnou i,
ale druhá proměnná budu libovolně, ale konvenčně, říkají n.
Přiřazení n rovno délka řetězce s.
A pak tady, budu dělat chytrý trochu optimalizace, tak
mluvit, že na konci dne už není správné, nebo ne méně správné
než dříve.
Ale je to lepší design.
V tom, že já jsem s použitím méně času, méně cyklů procesoru, takže
mluvit, odpovídat na stejný otázka, ale jen jednou.
>> Jakékoliv dotazy týkající se tohoto obecného zásady zlepšování,
říci, účinnost programu je?
Jo?
Diváků: Proč se použijte [neslyšitelné]?
David J. Malan: Dobrá otázka.
Tak proč klademe ++ na konec i místo začátku i?
V tomto případě, má žádná funkční dopad.
A vůbec, mám tendenci použít operátor postfix
takže je to trochu jasnější, jak , kdy je operace děje.
>> Pro ty, kteří neznají, je tu další prohlášení, kterým byste mohli udělat ++ jsem.
Jedná se o funkčně ekvivalent v tomto případě
protože nic jiného kolem toho inkrementace.
Ale můžete přijít s případy a řádků kódu
ve kterém to dělá rozdíl.
Takže obecně, my ne dokonce mluvit o tomhle.
Vzhledem k tomu, upřímně řečeno, to je vaše Kód sexy a trochu pláštěnku,
a méně znaků.
Skutečnost je však taková, že je to mnohem těžší, Myslím, že i pro mě zabalit mou mysl
kolem něj někdy, pořadí operací.
Tak stranou, pokud Opravdu se mi nelíbí,
i když to je docela sexy hledáte, můžete si také udělat i + = 1,
který je ošklivější verze Stejný nápad pro postfix inkrementace.
>> Říkám to i vás by se dělat si legraci z toho,
ale přijde vidět kódu něco krásného zanedlouho.
>> [SMÍCH]
>> David J. Malan: Je to tak?
Jo.
Otázka uprostřed.
>> Diváků: Potřebujete říci, int n?
David J. Malan: Děláte Není třeba říkat, int n.
Proto, že jsme již řekli int, nemusíte to říkat znovu.
Háček je v tom, že n má být stejný datový typ jako já.
Tak to je jen pohodlí zde.
Jo.
>> Diváků: Můžeš jít přes tiskového charakteru s držák i znovu?
David J. Malan: Přesně tak.
Takže% c, převezme zpět od poslední čas, je jen zástupný symbol.
To znamená dát char zde.
zpětné lomítko n, samozřejmě, jen znamená dát si pauzu zde.
Tak to prostě odejde, teď, tento kus novou syntaxí.
A to doslova říká, urvat řetězec s názvem S a jdi jeho
i'th znak, abych tak řekl.
>> A mějte říkám i'th charakter proto, že na každém opakování tohoto cyklu
je to, jako bychom se tisknou v první řadě je držák 0,
jako programátor by se říct.
Pak to držák 1, pak s držák 2, pak 3, pak 4.
Ale samozřejmě je to proměnná, tak jsem to vyjádřit i.
>> Klíčové však je uvědomit si, zvláště pokud jste ne
byl acclimating do tohoto světa programování, kde jsme se všichni
Zdá se, že počítat od nuly, musím začíná počítat od nuly teď.
Vzhledem k tomu, struny, první znak, z v Zamyla je k lepšímu nebo k horšímu
žít na umístění čísla nula.
>> Dobře, tak mi dovolte, aby nám sem do Zamyla
a uvidíte, co se ve skutečnosti děje na pod kapotou.
Takže tam je to představa typu odlitku.
Možná, že jste ve skutečnosti hrál s tím již,
Možná pro hackera vydání P nastavili.
Ale přetypování jen se odkazuje na schopnosti v jazyce C a některé další jazyky
převést jeden typ dat do druhého.
>> Nyní, jak můžeme vidět docela přímočaře?
Takže to, odvolání, je začátek anglické abecedy.
A kontext, vzpomínám, od jako před týdnem, je ASCII.
American Standard Code pro výměnu informací.
Což je jen opravdu dlouhá cesta říkat mapování z dopisů
čísel, a od počtu písmen.
>> Takže až jsem tady, dot dot tečka, seřadí se, odvolání,
desetinné číslo 65 nahoru.
A my jsme nemluvili o tom výslovně,
ale určitě je to podobné čísla pro malá písmena.
A skutečně, tam jsou.
Svět se rozhodl několik let dávno, že jen málo, malá písmena,
bude 97.
A malý b se děje jako 98, a tak dále.
>> A pro jakýkoli jiný klíč na klávesnice, je tu
bude podobný vzor bitů.
Nebo ekvivalentně, desetinné číslo.
Takže otázka po ruce, potom je, jak můžeme
vlastně vidět pod kapotou?
Takže jdu projít do gedit znovu.
A spíše než typ to jeden z nuly,
Chystám se jít dopředu a stačí otevřít něco
z dnešního kódu ASCII s názvem nula.
>> A ASCII nula vypadá takto.
Takže pojďme zabalit své mysli kolem tohoto.
Takže první, co jsem uvedl kód, což je hezké.
Vzhledem k tomu, že je to doslova říká mi, co mám očekávat,
zobrazit mapování velkými písmeny.
Teď jsem vlastně pořádně nevíme, co jsem na mysli, že, tak se pojďme odvodit.
>> V angličtině, možná poněkud techie Angličtina,
co dělá linka 18 se objeví se, že dělá pro nás?
Jen linka 18.
Co to vyvolání?
Co se to děje na kick off tady?
>> Diváků: smyčka.
>> David J. Malan: smyčka.
A kolikrát je že bude opakovat?
Diváků: [Přechodové VOICES] šestkrát.
David J. Malan: Ne šestkrát.
Diváků: 26 krát.
David J. Malan: 26 krát.
Jo, je mi líto.
26 krát.
Proč?
No, je to trochu divné, ale Začal jsem počítat od 65 let.
Což je divné, ale není špatné.
To není špatné na to říct.
A dělám to jen proto, že, v tomto příkladu,
Jsem trochu předvídat že kapitál byl 65.
Teď to není nejelegantnější způsob, jak to udělat, aby druh pevný kód
esoterické hodnoty, které nikdo se stále očekává, že mít na paměti.
>> Ale teď, všimněte si, že jsem Přitom se přes 65 a navíc 26.
Vzhledem k tomu, zřejmě nemám ani nechci dělat aritmetiku v mé hlavě.
Tak jsem si nechal kompilátor to.
Ale pak na každé smyčky, každá iterace smyčky, já zvyšování i.
>> Takže teď to vypadá trochu záhadné.
Ale měli bychom mít základní budovu bloky, se kterými to pochopit.
% C je jen zástupný symbol pro char.
% I je zástupný symbol pro int.
A ukázalo se, že při použití této Nová syntaxe, to kulatých závorek, tak
mluvit, tak datového typu uvnitř závorek,
Mohu donutit kompilátor k léčbě i to je číslo, ale jako char.
>> Tím mi ukazuje charakter ekvivalent tohoto čísla.
Teď sem tento kód je do značné míry shodné.
Jen jsem chtěl, aby Super explicitní skutečnost,
že jsem již od 97, která je malá písmena.
On se přes 26 více písmen.
A já doing-- znovu lití i, abych tak řekl.
Nebo přetypování i, abych tak řekl.
>> Z int na char.
Takže konečným výsledkem bude, Upřímně řečeno, informace, už víme.
Chystám se udělat ascii-0 dot-- není dot c.
Všimněte si, pravděpodobně dělal to chyba, jak jsem to udělal omylem.
Udělat ASCII 0.
Teď budu dělat ./ascii-0.
Budu přiblížit, a bohužel to bude posouvat mimo obrazovku.
Ale vidíme celou diagramu, kde mapy do 97, b mapy do 98,
a pokud budeme posouvat nahoru další , Samozřejmě, mapuje na 65.
Takže je to jen říci, že co jsme byli kázání,
je to ekvivalence, je Ve skutečnosti tomu tak ve skutečnosti.
Tak rychlá změna to.
Dovolte mi, abych otevřít ASCII 1.C.
A všimněte si tento chytrý, třídění z, objasnění tohoto.
To je ascii-1.c, a Všimněte si tento šílený věci.
>> A to opravdu dostane do srdce z toho, co počítače dělají.
I přesto, že my lidé by nepočítá, pokud jde o letters--
Nechci začít přemýšlet, v pořádku a pak b,
a používat ty počítat fyzických objektů.
Určitě můžete říct, že chci, aby inicializovat nějakou proměnnou s názvem C--
ale nemohl jsem si to nazval anything-- takže c je inicializován kapitálu A.
>> Protože na konci dne, počítače není jedno, co jste skladování,
je to jen zajímá, jak chcete prezentovat informace.
Jak chcete, aby se počítač do vykládat tak, že vzor bitů?
Takže to není něco, co jsem by obecně doporučujeme dělat.
Je to opravdu jen příklad sdělit, že můžete zcela
inicializovat celé číslo k char.
Vzhledem k tomu, pod kapuce na char, samozřejmě,
je jen číslo od 0 do 255.
>> Takže si určitě dát to uvnitř int.
A co to také ukazuje, že jsme
lze převést z jednoho typu na jiný, tady,
nakonec tisk totéž.
A ve skutečnosti, to budu opravit online-- byl chtěl říci, opět zde.
Dovolte mi, abych to vyčistit on-line, a budeme viz v on-line návodu podle potřeby,
to, co bylo zamýšleno tam.
>> OK.
Takže poslední příklad se zapojit A je A a B a pak jsme si
vzít věci do zářezu.
Takže s a b a c je v kapitalizace
a jejich rovnocennosti, pojďme podívejte se na tomto příkladu, zde.
Další příklad kódu.
Budeme otevírat ten, který je již bylo provedeno, a tak jsme
Nemusíte to psát vše od nuly.
>> A všimněte si v očekávání jsme pomocí více záhlaví
obrázků, mezi nimiž je náš nový přítel, string.h.
Teď to vypadá, na první pohled pohled, trochu záhadné.
Ale podívejme se, jestli bychom nemohli uvažovat tím, co se tady děje.
Nejprve jsem si řetězec od uživatele, a dal jsem tento řetězec v proměnné
s názvem.
Kopírovat Vložit před rokem.
V souladu 22, jsem zřejmě dělá přesně to, co
Já jsem před chvílí, jsem iterace nad postavami s.
>> A nové triky jsou zde pomocí délka řetězce, menší optimalizace
ukládání délku řetězce v N, spíše než volání znovu strlen,
a znovu a znovu.
A jen kontrolovat, že jsem je menší než n.
A teď, co se trochu zajímavé.
Ale je to jen aplikace ze stejné nové myšlenky.
Co v angličtině dělá s držák i reprezentovat?
>> Diváků: Počítání každý znak [neslyšitelné].
>> David J. Malan: Počítání každý znak.
A ještě stručně, s držák i představují to, co?
Řekl byste, že.
Ne aby vás na místě zde.
>> Diváků: Well--
David J. Malan: Takže v případě, že slovo je-- pokud řetězec je Zamyla, který starts--
Diváků: --you řešit znaky separately--
David J. Malan: Dobrý.
Přesně tak.
Hranatá závorka notace umožňuje přístup každý znak zvlášť,
takže je držák 0 bude První znak v řetězci.
Držák s 1 bude druhý, a tak dále.
Takže otázka, ptám se, zde, v tomto stavu je to, co?
Je i'th charakter s Greater než nebo rovnající se malá písmena?
A co to znamená, tady, s dvojitými ampersandy?
AUDIENCE (společně): a.
David J. Malan: A.
Je to ekvivalent k tomu.
A není klíčové slovo v jazyce C, musíte použití, protivně, ampersand ampersand.
A to, naopak, ptá se s je i'th znak menší než nebo rovno
na malá písmena z?
A opět, tady je místo, kde pochopení základní
realizace Počítač má smysl.
Všimněte si, že i když mám dot dot dot tam,
vypadá to, až z malých písmen jsou všechny sousedící hodnoty až z 97 nahoru.
>> A totéž pro velká písmena začínající na 65 let.
Takže stánek s jídlem, a pak, je to v angličtině,
Jak byste popsal co řádek 24 se dělá?
Jo?
>> Diváků: Na 24 to kontroluje, zda je každý znak je malá.
David J. Malan: Je to ověřit, zda Každý znak je malé písmeno.
Takže i stručněji, je i'th charakter s malými písmeny?
To je vše, co jsme vyjádření zde logicky,
trochu záhadně, ale nakonec docela přímočaře.
Je s to i'th znaků malými písmeny?
>> Pokud tomu tak je, a tady je místo, kde se věci trochu mysl ohýbání
jen na okamžik, a pokud ano, jděte dopředu a vytisknout znak.
Takže je to jen zástupný symbol, ale to, co postava?
Proč to dělám y držák i minus tento výraz zde?
>> Tak zjistíte zde vzor.
Skutečná čísla nezáleží tolik.
Ale všimněte si, že 97 je jak daleko od 65?
>> Diváků: 32.
>> David J. Malan: 32.
Jak daleko je 98 z 66?
>> Diváků: 32.
>> David J. Malan: Malý c od velkého C?
32.
Takže tam je 32 chmel od jedno písmeno do druhého.
Takže upřímně řečeno, mohl zjednodušit tím, že.
Ale pak jsem trochu těžké kódování Tato nízká úroveň porozumění
že žádný čtenář je vždy bude rozumět.
Takže budu generalizovat jako jsem vím, že malá písmena jsou větší.
Vím, že písmena jsou menší hodnoty, ironicky.
>> To je však skutečně ekvivalentní říká odečíst 32 od držáku s i.
Takže v souvislosti s těmito dopisy, pokud dopisu
náhodou, malá a já odečíst 32,
jaký vliv to má, matematicky, na malá písmena?
Diváků: Capitalizes--
David J. Malan: to zúročuje.
A skutečně, to je důvod, proč naše program se nazývá využít nulu.
Tento program buď těžící dopis,
Po kontrole, zda je opravdu malé písmeno.
V opačném případě, v souladu 30, co mám dělat, když to není malé písmeno, že jsem
při pohledu na v určitém iterace ve smyčce.
Stačí ji vytisknout.
>> Takže se nemusíte měnit věci to není ani malá písmena.
Omezit se na málo přes malou z.
Teď je to docela tajemný.
Ale na konci dne, to je, jak jsme se jednou za čas,
musel provádět věci.
Kdybych místo toho otevřít vydělávat jeden, oh díky bohu.
K dispozici je funkce zavolal na horní, které mohou
dělat vše, co jsme právě dělali na poměrně nízké úrovni.
>> Nyní se horní je zajímavý protože je deklarována v souboru,
a ty by jen vědět kontrolou dokumentace,
nebo bylo řečeno, řekněme, ve třídě, kde existuje, v souboru s názvem ctype.h.
Takže to je další nový přítel náš.
A horní dělá přesně to, co její název napovídá.
>> Můžete předat jako argument, mezi Tyto závorky, někteří charakter.
Chystám se projít v i'th charakteru S pomocí naší fantazie nový zápis
zahrnující hranatých závorek.
A hádejte, co je návrat hodnota na horní zřejmě bude
být?
Velké písmeno.
>> Takže když jsem se projít malými písmeny a, doufejme, že z definice na horní,
že to bude návrat velká písmena A. V opačném případě,
pokud to není malé písmeno v první místo, jen jsem jej vytisknout.
A opravdu si všimněte, Druhý přítel.
Není to jen na horní existuje, , ale je menší, což
vlastně odpoví, že otázka pro mě.
>> Nyní každý, kdo napsal tyto věci, 10s let dříve, víš co?
Realizovány horní a snížit pomocí kódu, jako je tento.
Ale znovu, v souladu s Tato myšlenka oddělit pryč,
druh, nižší úroveň detaily implementace.
A stojí na ramenou lidí kteří přišli před námi, pomocí funkcí
jako na horní a dolní, která tak nádherně, jsou pěkně
jmenoval říci, co dělají, je nádherný vzor přijmout.
>> Nyní se ukazuje, že když jsem četl manuálová stránka pro, řekněme, na horní,
I něco naučit.
Takže člověk toUpper.
Je to trochu ohromující.
Ale oznámení, tady je to zmínka o hlavičkový soubor, který bych měl použít.
Jako stranou, protože toto je zavádějící, funkce
používá ints místo znaků z důvodů kontroly chyb.
Ale budeme možná přijde zpět k tomu v budoucnu.
>> Ale nevšiml, tady, na horní konvertity písmeno c na velká písmena, pokud je to možné.
Tak to je docela jednoduché.
A teď buďme trochu konkrétnější.
Pojďme se podívat na část muž strana pod návratovou hodnotu.
Vrácená hodnota je to, že převedené písmeno.
Nebo C, v případě, že převod nebylo možné,
kde c je původní vstup.
O němž vím, odtud, z argument na horní.
>> Takže to, co je stánek s jídlem to?
Vrácená hodnota je to, že převedené písmeno,
nebo C, původní písmeno, pokud konverze nebylo možné.
Jaké zlepšení mohu tedy aby do návrhu mém kódu je?
Jo?
>> Diváků: Můžete odstranit jiný.
David J. Malan: mohu odebrat prohlášení jiného,
a ne jen příkaz else.
>> Diváků: Můžete odstranit [neslyšitelné].
>> David J. Malan: mohu odebrat celou vidlici
na cestě, pokud úplně jinde.
Takže opravdu, dovolte mi, abych otevřít Konečná verze,
vydělávat-2 a všimněte si, jak, pokud budete, sexy, kód je nyní dostává,
v tom, že jsem se snížil z některých sedm nebo tak linky do jen čtyři,
funkce, které jsem měl v úmyslu pouhým voláním na horní,
předáním s držákem I a tisk ven, s zástupný symbol% ​​C,
že zvláštní charakter.
>> Nyní pravděpodobně, že se jedná o problém, nebo přinejmenším riziko chyby,
v tomto programu.
Takže stačí, aby se vrátil na dřívější stánek s jídlem,
Co bych měl asi také dělat v tento program, aby bylo více robustní,
tak, že neexistuje způsob, jak to může havárii, a to i ve výjimečných případech?
Diváků: Ujistěte se, že to není NULL.
David J. Malan: Ujistěte se, že to není NULL.
Takže opravdu, aby to Super správné, měl bych něco takového,
pokud to není NULL, pak pokračovat a realizovat
Tyto řádky kódu, které I pak mohou odrážka takhle,
a pak dal v mé blízkosti kříže.
Tak dobrá provázání dvou myšlenek.
Jo?
Diváků: Mohl byste použít dělat, zatímco smyčka, místo toho?
David J. Malan: Mohl Já si dělat, zatímco smyčky?
Diváků: --you chcete ujistit, že jste skutečně [neslyšitelné].
David J. Malan: Mohl Používáte dělat, když?
Krátká odpověď, no.
Vzhledem k tomu, že jste asi zavést další rohový případ.
Pokud je řetězec nulové délky.
Je-li například, jen jsem narazila Zadejte, aniž by se psaní Zamyla.
Budu tě vrátit aktuální string, jak budeme nakonec vidět,
, který má nulové znaky.
Je to stále řetězec, je to prostě super krátký.
Ale pokud používáte dělat, když, budete slepě
pokusit se udělat něco s respektování tohoto řetězce,
a nic se tam.
>> DIVÁKŮ: No, pokud jste to [neslyšitelné], zatímco S--
David J. Malan: Aha, udržet dostat řetězec od uživatele.
Takže krátká odpověď, můžete mohl, a držet otravovat
je, aby vám řetězec, který je dostatečně krátký, aby se vešly do paměti.
Přesně tak.
Jen jsem se rozhodl se.
Pokud tomu tak není, dejte mi řetězec I chci, já končím, dávám nahoru.
Ale absolutně, za tímto účelem, můžete absolutně udělat.
>> Takže hlavičkové soubory knihovny, které jsme se již seznámili se se to tady.
Standard I / O, CS50.h, string.h, ctype.h, a tam jsou skutečně jiní.
Někteří z vás zjistili, matematická knihovna v math.h.
Ale dovolte mi, abych vám představil, teď, tento zdroj, že zaměstnanci CS50, Davin,
a Rob a Gabe zejména dali dohromady.
Že bude brzy spojit na Webové stránky kurzu je.
Říká se CS50 reference.
>> Což jen aby vám rychle chuť na to, funguje následovně.
Nech mě jít do reference.cs50.net.
Uvidíte na levé straně stranu ohromující seznam
funkcí, které přicházejí s cca.
Ale když mě to zajímá, pro tuto chvíli, o něčem, jako je strlen,
I to můžete psát zde.
Filtruje se stanoví seznam jen to, co mě zajímá.
Chystám se na něj.
A teď na levé straně, uvidíte, co doufáme,
je jednodušší, lidský přátelské vysvětlení, jak
Tato funkce funguje.
>> Vrátí délku řetězce.
Zde je stručné shrnutí, tady je návod, jak použití, pokud jde o záhlaví souboru,
a co se týče toho, co funkce vypadá to, pokud jde o jeho argumentů.
A pak tady, vrátí Délka řetězce.
Ale pro ty z vás pohodlnější, můžete skutečně na tlačítko pohodlnější,
a obsah tohoto strana, nyní se změní
jako výchozí hodnoty z toho, co získáte pomocí man stránce.
>> Jinými slovy, CS50 odkaz je zjednodušení
z manuálových stránek ze strany zaměstnanců, pro studenty.
Zejména těch méně pohodlné a mezi tím, takže si
Nemusíte se snažit zabalit vaše mysl se, upřímně řečeno,
některé docela mystický syntaxe a dokumentace někdy.
>> Takže mějte na paměti, že v příštích dnech.
Tak tady je opět Zamyla.
Pojďme se zeptat, který je trochu lidštější přístup.
Díky Chang, kdo byl tisk více slony
nonstop za posledních pár dní.
Máme příležitost vyjádřit alespoň jeden z nich pryč.
Pokud bychom se mohli dostat jen jeden dobrovolník přijít až na kreslení na obrazovce.
A co tady?
>> Pojď nahoru.
Jaké je vaše jméno?
ALEX: Alex.
David J. Malan: Alex.
V pořádku.
Alexi, pojď nahoru.
Chystáme se vidět své rukopis na obrazovce zde.
Tak jo, rád tě poznávám.
>> ALEX: Nice si tě poznávám.
>> David J. Malan: Dobře.
Takže, super jednoduché cvičení.
Bar není vysoká, aby dostat slona dnes.
Hrajete roli getString.
A já budu jen říct, řetězec, který jste dostali.
A předpokládám, že vás, getString, byli povoláni.
A člověk, jako já, má zadali Zamyla, Z-A-M-Y-L-A.
Prostě jít dopředu a psát Zamyla na obrazovce, jako by jste dostali to
a uložené někde v paměti.
>> Ponechává prostor pro to, co bude několik další words-- to je v pořádku, pokračuj.
>> [SMÍCH]
>> Takže Zamyla, Výborný.
Takže předpokládám, že vás, getString, se ozval znovu.
A proto jsem vám, u klávesnice, pod jiným názvem, Belinda.
V pořádku.
A teď příště getString je volal jsem psát něco jako Gabe,
G-A-B-E. Jste opravdu užívat na srdeční paměti s náhodným přístupem.
Která je kresba vše zcela náhodně.
OK.
>> [SMÍCH]
ALEX: Omlouvám se můj rukopis je špatné.
David J. Malan: Ne, to je v pořádku.
A jak je to s Robem, R-O-B. OK.
Dobře.
Tak jsem se vás předvídat by druh ležel věci tímto způsobem.
Ale můžeme tuto práci.
Tak jak se vám jít o kterou se z těchto znaků v paměti?
Jinými slovy, pokud si myslíme, že Tento obdélníkový černá obrazovka
jako zastupující počítače RAM nebo paměti.
>> A připomínají, že RAM je jen celá parta bajtů,
a bytech je celá banda bitů.
A bity jsou nějakým způsobem provedeny, obecně
s nějakou formou elektrické energie v hardwaru.
Tak to je druh vrstvení jsme mluvili o
a nyní je možné brát jako samozřejmost.
Jak jste jít o rozhodování o tom, kam napsat
Rob proti Gabe proti Belinda proti Zamyla?
>> ALEX: Jen jsem to udělal v nařídit, aby jsi mi to řekla.
>> David J. Malan: A to je pravda.
Ale to, co řídí, kam umístit Belindina jméno a Gabe jméno?
>> ALEX: Nic?
David J. Malan: [směje se] Tak to funguje, je to v pořádku.
Takže počítače jsou málo řádnější než to.
A tak když jsme implement-- zůstat jen na moment-- když jsme vlastně
zavést něco jako getString v počítači,
Zamyla by mohlo být stanoveno do značné míry jako jsi to udělal na obrazovce, tam.
>> A co je klíčem k všimnete zde to, co udělal Alex,
je, že je tak trochu vymezení mezi každou z těchto slov, že?
Vy jste to napsat Z--M-Y-L-A-B-E-L-I-N-D-A-G-A-B--
Jinými slovy, tam je nějaký druh z vymezení, které se zdá být,
druh, náhodné rozteč Mezi těmito různými slovy.
Ale to je dobře, protože my lidé mohou nyní
představit, že se jedná čtyři různé řetězce.
Není to jen jedna sekvence spousty postav.
Takže počítač, a pak, zatím, může trvat řetězec jako Zamyla,
dát každé z těchto písmen uvnitř bajtu paměti.
Ale to číslo je mnohem větší, Samozřejmě, než šest znaků.
>> Je tu celá banda RAM.
A tak dále, to mřížka krabic se děje
reprezentovat to, co Alex jen dělal tady na obrazovce.
A teď, Alex, můžeme vám nabídnout modrá nebo oranžová slon z Chang.
ALEX: Vezmu modrý slon.
David J. Malan: modrý slon.
Tak velký potlesk, kdybychom mohli, Alexe zde.
>> [APPLAUSE]
>> ALEX: Děkuji.
David J. Malan: Děkuji.
Tak je stánek s jídlem, které, i když vzor trochu měnily v průběhu času zde
na desce, tam byl tento vymezení mezi jednotlivými řetězci
že Alex má pro nás.
Nyní počítače, upřímně řečeno, mohl udělat totéž.
Mohli druh plop řetězce kdekoli v paměti RAM.
Až tady, tady, tady, tady dole.
>> Mohli by dělat přesně to.
Ale, samozřejmě, to je asi není nejlepší plánování.
Je to tak?
Pokud jsem si žádá Alex se se jména, pravděpodobně, že by
dát ještě víc tady, možná až tady, tady, tady, nakonec
sem.
Ale s trochu více plánování, jistě, můžeme položit věci čistěji.
A vskutku, to je to, co počítač dělá.
>> Ale úlovek je, že v případě, že další řetězec dostanu
po Zamyla je něco, co jako Belinda,
navrhnout, kde bychom mohli napsat písmeno b s ohledem na tuto mřížku?
Kam by jste šli?
Na pravé straně a, pod z, pod A?
Co by vaše první instinkt je?
Diváků: Pod z.
David J. Malan: Takže pod z.
A to je dost jednoduché, že?
Je to docela hezké, to je to, co děláme na klávesnici, když stisknete klávesu Enter,
nebo e-mail při vytváření seznam s odrážkami věcí.
Ale realita je, že počítače se snaží být efektivnější,
a nacpat rozhodně tolik data do paměti, jak je to možné,
takže nemusíte ztrácet bajtů.
Takže nemusíte ztrácet jakékoliv obrazovky nemovitostí.
A problém však je, že pokud budeme doslova dal dopis
b poté, jak se budeme vědět, kde Zamyla jméno končí
a Belinda jméno začíná?
Takže jste pro člověka právě navrhla, dobře, stiskněte klávesu Enter, v podstatě.
Dej to dole.
Nebo dokonce stejně jako Alex, stačí začít psát další název pod předchozí,
a dále, že jeden, a pak pod tímto jeden.
To je vizuální podnět.
>> Počítače mají další vizuální podnět, ale je to trochu stručnější.
Je to funky charakter.
Lomítko 0, což je možná připomínající obrácené lomítko n,
a tak dále, se.
Speciální escape sekvence.
Zpětné lomítko 0 je způsob, jak což představuje osm nula bitů v řadě.
0000 0000.
>> Způsob, jak vyjádřit, že není hit číslo nula na klávesnici,
protože ve skutečnosti, že je ASCII char.
Vypadá to, že čísla, ale je vlastně desetinné číslo
který představuje oběžník glyph, kruhový písmo.
Mezitím, zpětné lomítko Nula znamená, doslova
dal osm nula bajtů tu pro mě.
>> Tak tohle je poněkud arbitrární.
Mohli jsme použít žádný vzor bitů, ale svět
rozhodla o několik let před, že představují
konec řetězce v paměti, jen dát spoustu nul.
Vzhledem k tomu, můžeme zjistit, že.
Teď to znamená, že žádný dopis abeceda může být reprezentován nulami.
>> Ale to je v pořádku, jsme již viděli že jsme použili 65 o až v 97 nahoru.
Jsme neměli nikam téměř na samé nuly.
Takže Belinda v paměti počítače je vlastně jít sem.
Já jsem nakreslil ve žluté jen k tomu naši pozornost.
A oznámení, taky to je zcela libovolné.
Já jsem nakreslil jako mřížka.
Jako RAM je jen nějaký fyzický objekt.
Nemusí to nutně mít řádky a sloupce, sám o sobě.
Je to jen má spoustu bajtů implementovány v hardwaru nějak.
Ale pokud po Belinda I zadali Gabe jménem,
on skončí tady v paměti, a když jsem napsal v Daven jménem,
Například, on skončí tady.
A mohu i nadále napsat i více jmen.
>> Bohužel, když se pokusím napsat super dlouhý název,
Možná nakonec k vyčerpání paměti.
V takovém případě je getString bude vrátit NULL, jak jsme řekli.
Ale naštěstí, alespoň v této vizuální tady jsme se nedostali tak daleko.
>> Co je pěkné je, že teď to Obecná myšlenka léčení věci
jako v krabicích je zástupce rys C
a mnoho jazyků, známý jako pole.
Pole je jiný typ dat.
Je to datová struktura, chcete-li.
Struktura ve smyslu toho opravdu, druh, vypadá jako krabice, alespoň
ve své mysli.
Pole je souvislá posloupnost stejných datových typů,
zády k sobě k sobě k sobě.
>> Takže řetězec, v jiných slova, je pole znaků.
Řada znaků.
Ale ukazuje se, můžete mít pole hroznů věcí.
Ve skutečnosti, můžeme dát i čísla v poli.
Takže formě, v níž jdeme na začátek
prohlašuje, tato data struktura známá jako matici
bude také používat hranaté závorky.
Ale tyto hranaté závorky budou mají různý význam v tomto kontextu.
>> A ať se na to takto.
Představme si, že jsem otevřel do nového souboru zde.
A já jsem uložit jako ages.c.
A já budu uložit to v mé složce zde.
A teď budu pokračovat a začněte psát něco
jako patří CS50.h, patří stdio.h, int main prázdnotu.
A pak uvnitř tady, chci nejprve mít int s názvem věku.
>> A já budu používat to, aby si int od uživatele na jeho věku.
Ale tento program je určen pro použití více lidí, z jakéhokoli kontextu.
Mám řadu lidí.
Všechny z nich mají psát ve svých věk možná nějaký, já nevím,
soutěže nebo akce , že jsem přišel na.
Takže další člověk, jsem Potřebuju další proměnné.
>> Protože když jsem to věk dostane vezmi_int, to je
jít na hadry, nebo přepsat věk předchozího osoby.
Takže to není dobré.
Takže můj první instinkt může být, oh, všechno v pořádku,
když chci získat více lidí'S ages-- říkejme tuto age1,
int age2 dostane int, int Age3 dostane vezmi_int.
A teď budu používat nějaký pseudokód kód zde.
>> Udělejte něco s těmi čísly.
Necháme na další den, co děláme tam, protože jsme jen
péče o chvíli o age1, age2, Age3.
Bohužel, jakmile jsem zkompilovat tento program
a dát ji do přední části skutečných uživatelů, co je zásadně špatný tvar
rozhodnutí, které jsem Zdá se, že udělal?
Jo?
Diváků: [neslyšitelné]
David J. Malan: Ano, Ani jsem se snažil
přijít na to, jak mnoho věků to vlastně zajímá?
Mám-li méně než tři lidé tady, a tedy méně než tři věkové kategorie,
Jsem stále slepě očekával tři.
Bůh chraň, čtyři lidé objeví.
Můj program prostě nebude ani podporovat je.
>> A tak to, dlouhý příběh Stručně řečeno, je to dobrý zvyk.
Je to tak?
Byl jsem v podstatě kopírování a vložení kódu a jen ladění
názvy proměnných.
A můj bože, kdyby jste měli, ne tři věku, ale 10 nebo 100, nebo dokonce 6500
vysokoškoláci, například.
To nebude zvlášť elegantní kód, nebo udržitelné.
Budeš muset Změňte program pokaždé
Váš Počet osob změn.
>> Takže naštěstí, v naší aktuální ages.c soubor pro dnešek,
Máme více chytré řešení.
Za prvé, já jdu si půjčit konstrukci jsme použili několikrát,
to dělat, zatímco smyčky, aby si počet lidí v místnosti.
Jdu jen obtěžovat uživatele, znovu a znovu, dokud on nebo ona mi dává
hodnota n, které je kladné celé číslo.
>> Mohl jsem použít, poslední čas se dostat pozitivní int.
Ale my nemáme, že pro skutečné, tak jsem šel dopředu
a znovu realizovat tuto myšlenku.
A teď tady dole, to je nový trik.
V souladu 27, jako komentáře v řádku 26 naznačuje,
deklarovat pole, ve kterém uložit věku každého.
>> Takže pokud se chcete dostat, a ne jeden int, ne dva ints, ale celá parta ints.
Konkrétně n celá čísla, byly n mohlo být tři, může být 100, může být 1000.
Syntax, prostě, je řekněme, jaký typ dat chcete?
Co chcete volat že kus paměti?
Co chcete volat do sítě že vypadá takhle obrazně?
>> A v závorce tady, říkáš jak velký chcete pole být.
A tak dříve, když jsem řekl, že Syntaxe je tu trochu jiný,
jsme stále pomocí hranatých závorek, ale když jsem prohlásil pole,
počet vnitřek Hranaté závorky prostředky
jak velký chcete pole být.
>> Naproti tomu, když jsme používali s držák i před chvílí, to, řetězec,
je skutečně řada znaků, ale i když nejste deklarování proměnné,
jak se toto klíčové slovo zde, jste prostě dostat
specifický index, specifický prvek z tohoto pole.
Jakmile víme, že ostatní to je jednoduché.
Pokud se objeví nové já poprvé bude k vytištění co je věk osoby čísla i.
Tam, kde jsem jen říct, osoba číslo jedna, osoba číslo dvě, osoba číslo tři.
>> A já jsem jen dělal aritmetiku, tak, že stejně jako normální lidé,
počítáme od jednoho pro tento programu, a to od nuly.
Pak jsem zavolat vezmi_int, ale uložit odpověď ve věku bracketing i.
Což je i'th věk v poli.
Takže zatímco poslední době jsme byli léčení Tyto boxy jsou znaky pro Zamyla jménem,
a další.
Nyní, tyto krabice představují 32 bitů, nebo čtyři bajty
ve kterých je možné uložit int, int, int.
Z nichž všechny, opět, jsou stejného datového typu.
>> Teď dělám něco hloupé, jako čas ubíhá, jen
ospravedlnit psaní tohoto programu.
A pak tady dole, jsem zase opakovat přes pole říká, ode dneška za rok,
osoba číslo jedna vůle něco let.
A přijít na to, že math-- Myslím, že to
není příliš složité arithmetic-- Jen jsem přidat jeden jejich věku.
Stačí prokázat, opět to.
>> Stejně jako mohu index do řetězce, s, Takže můžu index do pole věků,
takhle tam.
Takže tam, kde to bude možné, že nás?
Tak uvidíme, nakonec, pár věcí, které v příštích dnech.
Jeden, celou tu dobu, kdy psaní vlastních programů,
jako je Mario, chamtivý, úvěru.
Byli jste psát název program a stisknutím klávesy Enter.
A pak se dostat vstup uživatele.
>> S getString, vezmi_int, getLongLong, nebo podobně.
Ale ukazuje se, že C podpěry něco, co nazývá příkazový řádek
argumenty, které nás bude nechat ve skutečnosti se na slova, která zadáte,
na blikající řádku za jménem vašeho programu.
>> Takže v příštích dnech, vám mohl psát něco jako Caesar,
nebo ./caesar číslo 13, později.
Uvidíme, jak to funguje.
Protože ve skutečnosti, v problém nastavit dva, my jsme
tě představit aby ještě něco
připomíná Ralphie je napadnout dříve kartografie.
Umění zakódování informací.
To ve skutečnosti, je velmi připomíná, co Ralphie udělal.
>> Toto je příklad šifrování algoritmus nazvaný ROT13, R-O-T 13.
Což jednoduše znamená otočit písmena v abecedě 13 míst.
A pokud to uděláte, uvidíte nyní co je snad známá fráze.
Ale způsob, jakým budeme používat Tato, v konečném důsledku, je obecně.
>> V P set dva, ve standardní verzi, budete realizovat několik šifer,
jeden s názvem Caesar, jeden s názvem Vigenere.
Oba jsou rotační šifry, v tom, že se nějak
zase jeden dopis na jiné písmeno.
A Caesar je super jednoduché.
Můžete přidat jeden, přidejte 13, nebo nějaké číslo až do 26.
Vigenere dělá, že na jedno písmeno základ.
Takže Vigenère, jak uvidíte v spec, je bezpečnější.
>> Ale na konci dne, co budete zavádění a P nastavit dva,
je to klíč, který používáte oba pro šifrování a dešifrování.
S odkazem na procesu soustružení prostý text, některé původní zprávy,
do Cypher textu, který je něco, co šifrována.
A pak ji znovu dešifrování.
>> V hacker vydání, Mezitím, budete
za úkol něco podobného v duchu, kde budeme vám
soubor, z typického Linux, nebo Mac nebo Unix počítač s názvem Etsy
heslo, které obsahuje jeden celek banda uživatelských jmen a hesel.
A ty hesla mají všechny bylo zakódováno, nebo hash,
abych tak řekl, přesněji jak uvidíte v spec.
>> A hacker vydání bude výzvou jste se při vstupní takhle,
a praskání heslo.
To znamená, že přijít na to, co je heslo Lidský vlastně byl.
Vzhledem k tomu, samozřejmě, hesla jsou obecně nejsou uloženy v jasné,
a obecně hesla by mělo být těžké uhodnout.
To není častý případ.
>> A to, co si myslel, že jsme si dělat, je závěr pár minut
pohled na zvláště špatná volba hesla
z filmu můžete připomenout láskou.
A pokud ne, měli byste pronajmout.
>> [PŘEHRÁVÁNÍ]
>> -Helmet Jste ďábel, co se děje?
Co to děláš s mou dcerou?
>> -Permit Mi představit brilantní mladý plastický chirurg,
Doktor Phillip Schlotkin.
Největší Rhinoplastika muž Celý vesmír a Beverly Hills.
>> -Váš Výsosti.
>> -Nose Práce?
Nerozumím tomu.
Už měl nos.
Bylo jí sweet 16 k dispozici.
>> Ne, to není to, co si myslíte.
Je to mnohem, mnohem horší.
Pokud si nepřejete, aby mi Kombinace s leteckou štít,
Lékař Schlotkin dám svůj dceru svou starou nos.
- [Vzdechy] Nooooooooooooo.
Kde jsi to vzal?
>> -Dobře.
Řeknu, řeknu.
>> Ne, tati, no.
Nesmíte.
>> Máš pravdu drahá.
Budeš mi chybět váš nový nos.
Ale já jim na to říct kombinace bez ohledu na to, co se děje.
>> -Velmi Dobře.
Doktor Schlotkin, dělat to nejhorší.
>> -Můj Potěšení.
>> Ne!
Počkat, počkat.
Řeknu.
>> Já věděl, že to bude fungovat.
Dobře, dej mi to.
>> -The Kombinace je jedna.
>> Onu.
-Dvě.
-Tři.
-Čtyři.
-Pět.
Takže kombinace je jeden, dva, tři, čtyři, pět.
To je ten nejhloupější kombinace Co jsem kdy slyšel v mém životě.
To je ten druh věcí an idiot bude mít na jeho zavazadlech.
>> Děkuji, Vaše Výsosti.
>> [REMOTE CLICKS]
>> Co jste udělal?
>> Já vypnutý zdi.
>> Ne, ty ne, ty vypne celý film.
>> Já muselo stiskl špatné tlačítko.
>> No, dal ji zpět na!
Dejte film zpět!
>> Ano, pane!
Ano, pane.
-Jdeme, Arnolde.
Pojď, Gretchen.
Samozřejmě, že vím, že jsem to muset účtovat za to.
No?
Zabralo to?
Kde je král?
>> -Je Pracoval, pane, my mají kombinaci.
Skvěle.
Nyní můžeme vzít i tu poslední dech čerstvého vzduchu z planety Druidia.
Co je to kombinace?
>> Onu, dva, tři, čtyři, pět.
>> Onu, dva, tři, čtyři, pět?
Ano.
-To Je úžasné.
Mám stejný kombinace na mém zavazadle.
Připravte Spaceball 1 pro okamžitý odjezd.
>> Ano, pane.
>> -A Změnit kombinace na mém zavazadle.
[Uzavírání dveří SOUND]
[Cinkání DVEŘÍ bít PŘILBY]
-Ahh.
[END VIDEOPŘEHRÁVÁNÍ]
David J. Malan: To je pro CS50, uvidíme se příští týden.
Vypravěč: A teď, Hluboká Myšlenky, podle Daven Farnham.
>> Daven FARNHAM: Kódování v jazyce C je tak mnohem těžší, než Scratch.
printf, Scratch byla lež.
>> [SMÍCH SoundBITE]