SPEAKER 1: Dobře. Vítej zpátky. To je týden Dva CS50, a máme Dosud byly pomocí funkce, ale z velké části za samozřejmost. Použili jsme printf, která má vedlejší efekt tisku věci na obrazovce. Použili jsme get-int, float dostat. Ale co když opravdu chcete vytvořit vlastní funkce, jak se někteří Možná jste již začala udělat pro Problem Set One, i když není nezbytně nutné? Dobře, pojďme dál, a znovu, že Problém se ptal na uživatele jejich jméno a tisk něco na obrazovce, ale zkuste vytknout některé o shodnosti, které jsme vidět v našem kódu tak daleko. Takže mám na mysli následující. Chystám se jít dopředu a vytvořit nový program, stačí zavolat to hello.c jako obvykle. Chystám se jít dopředu a dát sám zahrnují standardní io.h v horní části. Chystám se také oddat preventivně CS50 knihovny tak, aby Nechápu křičel na překladač. A teď budu pokračovat a prohlašují, int, hlavní, za neplatné. A pak tady je to místo, kde chci začít zadávat funkčnost některé další funkce, které já sám jsem budu psát, ale to není v současné době neexistuje. Předpokládejme například, že jsem chtěl napsat funkci, která mi umožňuje vytisknout ahoj, čárku a pak nějaké uživatelské jméno. Namísto toho, aby to printf Dobrý den,% s, nebylo by hezké, kdyby tam bylo jen volaná funkce není printf, ale print jmeno? Takže jinými slovy, chci být schopen napsat program, který dělá jen málo něco takového. Za prvé, já jsem chtěl říct printf váš jméno, čímž vyzývající uživatele k dej mi jeho nebo její jméno, a pak jsem bude používat známé řetězec s na deklarovat řetězec. Dej mi proměnnou typu řetězec, říkají to a obchod v tom, že Výsledkem volání se řetězec. Ale teď v posledních týdnech, musel bych poněkud nudně udělal Dobrý den,% s / n. A jinými slovy, jsme viděli tento Příkladem banda časů, a to je triviální příklad, protože tam je jen jeden řádek kódu, takže to opravdu není velký problém udržet psát znovu. Ale předpokládám, že tento řádek kódu skutečně staly přítěží, a není to jeden řádek kódu, ale je to 10 řádky kódu před pár týdny od teď, a vy jste jen unaveni kopírování a vkládání nebo přepisování stejný kód. Nebylo by hezké místo provádění printf ahoj,% s, a tak dále, Nebylo by hezké, kdyby tam byli jen volána funkce print jmeno, že má argument - jinými slovy, že má vstup - a pak středník. Takže funkce, nebylo by to by hezké, kdyby to existovalo? Pak bych nemusel obávat co printf je, co% s a všechny Tyto komplikace, které jsou není všechno tak zajímavé. Jsou užitečné. Takže print jmeno, bohužel, nebyl vymyslel nějaký 40 + lety. Nikdo si to napsat. Ale to je krása mít programovací jazyk, stejně jako v Scratch můžete definovat vlastní bloky tak, v C a téměř jakýkoli jazyk, můžete definovat vlastní funkce, může můžete definovat své vlastní funkce. Takže i když se dostaneme do hlavní automaticky zdarma, můžeme prohlásit, naše vlastní funkce. Takže budu dělat nějaké místo tady nahoru nahoru a budu deklarovat my vlastní funkce, která bude vypadat trochu divný, ale na první přijedeme zpět k tomu zanedlouho. Chystám se říct neplatné, a tím ukazuje tato funkce něco, má vedlejší účinky, ale nevrátí mi něco v stejným způsobem, jako se int nebo dostat řetězec sama. A budu k této funkci název tiskového jména a budu určit, že tento člověk bude trvat řetězec, a já budu volat, že Název řetězce. Mohl bych říkat, co chci, ale já chci, aby moje kód být self-dokumentovat. Jinými slovy, je-li někdo z vás měl tento soubor otevřít a číst, mohli byste druh odvozovat z názvu, který Vstup jakou roli to má hrát. A teď dále, že jdu otevřít složená závorka a uzavřené složená závorka, a tak zjistíte Dodržel jsem stejný vzor na tratích čtyři až sedm jako Sledoval jsem na dobrý týden navíc nyní mezi, řekněme, vedení a devět 14, který skládat hlavní. Jinými slovy, tisknout název je další funkce. Nyní, kompilátor nebude znát volat tuto věc automaticky protože jsem doslova vymyslel, ale to bude vědět ještě zavolat hlavní automaticky, a pak samozřejmě v linka 13, Volám svou vlastní funkci. A proto, že jsem prohlásil, že funkce se na řadový čtyřválec před hlavními, to bude učit kompilátor co cituji, konec citátu, "print jmeno" znamená a co by měla dělat. Takže jsem trochu dávat to nový zvyk zablokovat v rámci, řekněme, Scratch. Tak tady, mohu dát, že velmi časté nebo opakující se vzor kódu držím psaní ve třídě, printf % S ahoj,% s / n ", - Co chci, aby tady? S? Tak jsem chtěl dát jméno v této souvislosti. Takže si všimnout trochu dichotomie zde. Protože jsem prohlásil svou vlastní funkci a já jsem poněkud svévolně nazývá vytiskne jméno, a protože jsem je uvedeno v závorkách, že se funkce má jeden argument, typ což je řetězec - tak to je slovo, nebo slovní spojení, nebo něco takového - a Volám tento argument název, který znamená pouze proměnná, které je v prostor, abych tak řekl, je název. S existuje pouze mezi tím, co dva Složené závorky, samozřejmě? No opravdu, stejně jako linky 10 přes 14, takže stejně jako v pondělí nelze použít S, ale to, co můžu udělat, je projít S do tisku názvu. Vytisknout jméno jen tak se stane, že ji dám alias, synonymum, přezdívka, volat to jméno, a teď použití v tomto řádku. Takže teď mi dovolte zachránit to, oddálit. Nech mě jít dál a dělat ahoj. Vypadá to dobře. Copak vyplivnout žádné chyby. . / Ahoj Enter. Jak se jmenuju? David. A ahoj David. Takže není tak vzrušující, ale jen, že teď. Nyní máte tu samou látku jako jsme to udělali v nuly aby naše vlastní funkce. Ale je tu trochu Gotcha. Dejme tomu, že jsem si opravdu myslel, to až do konce a já vlastně bez opravdu přemýšlet o tom psal že funkce tady. Pocit naprosto rozumné. V Scratch není pojem z místa ve svých skriptech. Dalo by se dal jeden sem, jeden sem, jeden tady, a to by mohlo začít vypadat trochu chaotický, pokud nemáte položte ji úhledně, ale to není na tom, kde fyzicky skripty se na obrazovce. Bohužel v C - a to je na rozdíl od jazyky jako Java a Python a další, které by vás mohly seznámit s - bohužel v C, aby se nezáleží, protože hodinky to, co je teď stane. Výchozí funkce, která se děje k provedení je, samozřejmě, hlavní. Hlavní bude volat jméno v tisku linka osm, ale bohužel, kompilátor nebude ani vědět, že tiskový jméno existuje, dokud se dostane do řádku 11, což je bohužel bude příliš pozdě. Takže pojďme udělat ahoj. A teď sakra, dvě chyby generovány. Takže teď mi dovolte přejděte do velmi Za prvé, jak jsme měli vždycky, a Všimněte si, že je to na mě řval, "Implicitní deklarace funkce tisknout jméno. " Takže jsme viděli, tato zpráva dříve, implicitní prohlášení funkce. Když jsme viděli, že takové chyby? Když jsem nezahrnoval knihovny. Pokud jsem zapomněl cs50.h a já bych si zařval na pro získání řetězce, nebo si int. Ale v tomto případě, je tato funkce tisku jméno není v knihovně, ne? Je to doslova v tomto souboru, takže co je opravdu problém? No bohužel v C, to se ti tak neuvěřitelně doslova, že pokud chcete funkci nazvanou tisku na jméno existují, buď muset implementovat které fungují na velmi horní část kód tak, že je k dispozici pro snížení funkce, ale upřímně řečeno, to se stane nedbalý velmi rychle. Osobně jsem rád uvedení první hlavní protože pak je naprosto jasné, co to program se na první pohled. A navíc se můžete dostat do podivné rohu případy, kdy, pokud x chce volat y, ale y nazvat x, stačí fyzicky nemůže skutečně dát jeden nad sebou. Ale ukazuje se v C, můžeme vyřešit velmi jednoduše. Chystám se dát trochu prostoru tady, a já jsem prostě jít preventivně, i když poněkud redundantně, bude učit kompilátor, že existuje funkce říká tiskový jméno, to trvá řetězec, a já jdu volat to jméno středník. Tak to nyní v souladu čtyři, které jsme ještě neviděli, je prohlášení ze jména funkce tisku, ale je to jen slib, že tato funkce bude nakonec být definovány, případně být prováděna. To teď můžu odejít sám, protože Nyní se jedná o definice, implementace, něco jako poslední míli provádění této některé funkce. Takže upřímně řečeno, je to hloupost, je to nepříjemné, ale toto je cesta C, a to protože vás doslovně a jako by počítač upřímně, jen dělá přesně to, co si říct, že se dělat, a tak, že uspořádání je důležité. Takže mějte na paměti, že a znovu začít Všimněte si opakování vzorů. Kurzy jsou, že ano, pokud nemáte již začínají setkat zprávy jako je tato, na první pohled se zdá zcela záhadné, ale když začnete podívat se na těchto klíčových slov, jako "Implicitní prohlášení," zmínka o Funkce v tomto případě - a upřímně řečeno, je někdy dokonce dostat trochu zelený mrkev symbol, který vám řekne, kde problém asi je - můžete začít pracovat si cestu přes Zatím neviditelné chybové zprávy. Jakékoliv dotazy týkající se psaní Vlastní funkce tímto způsobem? Pojďme udělat něco, co je trochu více přesvědčivé. Spíše než jen dělat něco, co má vedlejší efekt tisku, nech mě jít dopředu a uložit nový soubor, a budeme nazývají positive.c, i když je to Bude to trochu jinak oproti minule. A tentokrát chci znovu zavést Poslední dobou je positive.C příklad, který síla je uživatel, aby mi kladné celé číslo. Ale musel jsem použít dostat int minule. Nebylo by hezké, kdyby tam byl funkce je volána získat kladný int že jsem mohl jen zadat tuto kus funkčnosti? Takže rozdíl je potkáme realizovat získat pozitivní int, ale na rozdíl od print jmeno který měl vedlejší účinek - nevrátil se pro mě něco jako číslo nebo řetězec - se pozitivní int je, samozřejmě, bude vrátit se, doufejme, že pozitivní int. Tak pojďme na to. Zahrnout cs50.h zahrnují standardní io.h. Int main neplatné. A teď tady, budu pokračovat a řekněme int, říkají n, se rovná získat kladný int. A stejně jako se int již existuje protože zaměstnanci to napsal, já jdu převzít na chvíli, že dostanete kladný int existuje, a teď jdu jít dál a říct printf, díky za% i / n ", n. Takže teď, když jsem zkompilovat tento program, co se bude dít v mém terminálu okno v dolní části obrazovky? Chystám se pravděpodobně dostanete, že stejná chyba jako předtím. Takže pojďme zkusit. Udělat pozitivní. A opět, implicitní prohlášení funkce, získat pozitivní int. Takže můžeme to vyřešit v několik způsobů. Budu držet to jednoduchý a jen dát své prohlášení sem a dostat pozitivní int. Musím tzv. podpis. Podpis jen odkazuje k estetice první řádek programu. Takže to, co by měli dostat pozitivní int návrat? Tak int. Myslím ideálním případě by se vrátit něco jako pozitivní int, ale neexistuje. Jsme neviděli, že mezi našimi daty typy, takže máme co do činění s Skutečnost, že máme velmi málo datové typy pro práci s. Ale můžeme vrátit int a jen věřím, že to bude pozitivní. Bude to nazvat získat kladný int. A teď, jak o jeho argumenty? Trvá žádný vstup? Znamená to potřeba žádný vstup? Takže to nemusí vědět předem cokoliv. Získejte řetězec neobsahuje, dostat int není. Printf dělá - je třeba mít některé Vstup prošel do něj - a tisknout název potřeboval nějaký vstup, ale dostat int pozitivní není. Takže budu explicitně říci kompilátoru neplatné. Void je absence cokoliv jiného. Tak void znamená, se nic uvnitř z těch závorek, středník. A teď na dně mého souboru - a znovu, jsem jen trochu anální zde uvedení hlavní v horní části, který je dobrá praxe, protože tímto způsobem, kdykoli vy nebo někdo jiný otevře soubor, na Funkce je tady. Můžete se potápět v jednom z náměstí. Takže teď budu duplikovat to, získat kladný int neplatné, ale nejsem dopadne na středník teď. Jdu otevřít složené závorky, a teď musím půjčit některé nápady od pondělí. Tak, jak si vzpomínáte, jsme udělali něco jako proveďte následující při něco, co je pravda. A co jsem udělal? Udělal jsem něco jako dát mi kladné celé číslo, trochu výzva. Mohl bych použít všechna slova, co chci. A pak jsem použil co? Int n se rovná dostat int, žádné argumenty do ní. A všimněte si rozdílu. Když voláte funkci, při použití funkce, vy ne dát do prázdna. Můžete dělat jen to, že při deklarování funkce, výuka kompilátor, co by měl očekávat. Takže nemusíte dát zrušit tam sami. A teď, co se můj stav? Tak, n se nerovná pozitivní, ale to je jen pseudo-kód. Tak jak to mám vyjádřit čistěji? Tak menší než nebo rovna nule. Takže znovu, zjistíte, co můžete udělat menší než nebo rovno. I když je to dva samostatné symboly, můžete tak učinit na klávesnice jako takové. Ale je tu ještě problém, že Posral jsem to minule taky. Musím prohlásit - přesně. Musím prohlásit n mimo ze smyčky. Takže musím dát n sem, a já ne chci znovu prohlásit ho zde abych si novou proměnnou. Jen chci přiřadit hodnotu zde. A teď jsem úplně hotoví. Dovolte mi, abych se před sebe a předstírat, že jsem udělal. Udělat pozitivní, a teď je tu nová chyba. Control dosáhne konce non-void funkce. Takže nové chybová zpráva, ale pokud jste typ z šprýmaři odděleně každý slovy, pravděpodobně naznačuje, co se děje. Ovládejte. Řízení spočívá pouze v řádu operací v programu. Počítač je pod kontrolou a se něco pokazilo. Tak se dostane na konec non-void funkce. Jaké funkce je zřejmě na mysli? Jaká je funkce non-void? Tak se pozitivní int, a trochu matoucí, že dobře, je to druh prázdnoty. To má specifikaci neplatnost jeho argumenty, ale jeho výstup bude být typu n. Takže slovo na levé straně je tzv. návratový typ. Slovo na vnitřní straně je zde nulové nebo více argumentů že funkce má. Takže to, co musím udělat? Na tomto místě v mém kódu, řádek 21, kde bliká prompt nyní je, že jsem mít kladný int uvnitř proměnné s názvem n. Jak mohu dát ho zpátky do Main? Doslova. Návrat n středník. Tedy stejně jako u Colton vrátil kus papír s odpovědí na mě při pádu ten kus papíru, v malé černé krabice na stole, k tomu, že v kód, můžete doslova jen napsat, vrátí n, a je to, jako by byly Colton podal mi něco fyzického zpět. V tomto případě, co se děje, je dostat kladný int se chystá předat zpět co je pravděpodobně pozitivní číslo pro koho? Kde se tato hodnota skončí? , Která končí v této proměnné, n, a pak budeme pokračovat s linií devět. Takže jinými slovy, aby z operací, tento program spustí provádění a kompilátor zjistí, oh, chceš knihovnu? Nech mě jít chytit, co je uvnitř, že. Oh, chceš standardní IO knihovny? Nech mě jít chytit, co je uvnitř, že. Co kompilátor řekl sám když to udeří linky čtyři? Oh, jsi slíbil realizovat Funkce se nazývá pozitivní, ale dostaneme zpátky na později, něco, co v tomto směru. Int main void jen znamená, že tady je vnitřnosti mého programu. Linka je jen sedm složená závorka. Linka osm říká na levé straně, dát mi 32 bitů na celé číslo, říkají n. Na pravé straně je to říkat si pozitivní int. Nyní se pojďme pozastavit ten příběh, protože nyní Nechci dál můj kurzor dolů. Můj Kurzor se nyní chodí sem, protože nyní získat kladný int spustí. Int n je deklarována. Proveďte následující. Printf mi dává kladné celé číslo. Získejte int od uživatele, uložte ho na n, a možná to znovu a znovu. Tento cyklus znamená, že tento kód může spustit nahoru a dolů takhle zase a znovu, ale když uživatel konečně spolupracuje a dává mi pozitivní int, jsem narazila řádek 21, na kterém místě číslo se předá zpět, a který z nich měl bych zdůraznit teď? Nine. Control, abych tak řekl, vrátí na linku devět. To je linie, která je nyní na starosti. Takže to, co se děje po tentokrát pod kapotou, ale když jsme použili funkce jako printf nebo dokonce dostat řetězec, který někdo jiný napsal vám, kontrola byla předáním off někoho jiného řádek kódu o řádek po řádku. Je to prostě jsme nemohli vidět, a my by opravdu popsat to v tomto programu, protože je to v některých jiných Soubor na pevném disku unbeknownst nám. Takže pojďme se vlastně sestavit a spustit hned. Udělat pozitivní. Kompilace, to je pokrok. . / Pozitivní. Dej mi kladné celé číslo. Pojďme být obtížné. Negativní 1. Zero. Dejme tomu 50. Díky za padesát, a tak kontrola nyní se vrátil. Jakékoliv dotazy, pak o tom myslíte? Jo? [Neslyšitelný]. Řekni to znovu. Oh, dobrá otázka. Takže si můžete všimnout paralelu zde Jsem typ řezu na roh. V souladu 12, říkám, si pozitivní int vrací int, ale ten stejný logika, to teď dá rozum, že v linka šest, říkám, že hlavní vrátí int, ale to, co jsme ještě měl některý z našich programů? Nikdy jsme neměli zmínku o toto klíčové slovo return. Tak se ukázalo, že v C, a to nejméně verze toho, že jsme pomocí z roku 1999, technicky, je to se děje automaticky. Kdykoliv budete provádět program a vy implementovat funkci nazvanou main, že funkce vrátí nulové Výchozí pokud nechcete říkat jinak, a nula je jen konvence. Svět se vrací nulu tím což znamená, že je vše v pořádku, účinně opouštět nám čtyři miliardy možné věci, které by mohly jít špatně, takže když jsme se vrátit jednu, která může znamenat kód, který znamená, že tento co se stalo. Mohli bychom se vrátit dvě, což znamená, ta druhá věc se stala chyba. Mohli bychom se vrátit čtyři miliardy, což znamená, že tato věc se stala chyba. A jestli si teď přemýšlet o své vlastní PC nebo Mac, můžete připomenout, že někdy dostanete záhadné chybové zprávy od softwaru, který jste použití, a někdy má člověk Srozumitelný popis, ale je tu často kód nebo číslo na obrazovce? Pokud to nepřijde na mysl, jen dávat pozor na to. To je to, co to typicky kódy na mysli. Jsou zahrnuty v aplikaci Microsoft Word a další programy, takže pokud soubor bug report s firmou, můžete řekněte jim, oh, mám číslo chyby 45. A někteří programátor zpět ve společnosti může vypadat, že v jeho nebo její kód a říct, oh, to proto, že jsem udělal tato chyba a to je důvod, proč uživatel dostala tuto zprávu. Ale upřímně řečeno, je to jen trochu rušivě a trochu nudné k závěru, že alespoň na našich Prvních několik programů, a tak jsme se vynechá to. Ale celou tu dobu každý jeden z vašich Hlavní funkce tajně měl toto linka automaticky přidány pro vás kompilátor, jen tím, že konvence ušetří nějaký čas. [Neslyšitelný]. Nemusíte zahrnout do hlavní. To je v pořádku. Je potřeba zahrnout, pokud jste byli provádění funkcí, jako je tento. Jinak se funkce bytu se nebude fungovat. Ale hlavní, že to není nutné. Za týden nebo dva, začneme dostat do tohoto zvyku, jakmile chceme začít znamenat chyby. Opravdu dobrá otázka. Tak rychle slovní přestávka zmínit, že tento pátek, nebudeme mít oběd samo o sobě, ale my budeme mít večeři s některých studentů a zaměstnanců. Pokud byste se k nám připojit, pocit může jít do cs50.net/rsvp. 18:00 tento pátek. Vesmír je jako vždy omezená, ale budeme pokračovat v tom to na téměř jednou týdně, pokud prostor Vypršel tento týden. Takže cliffhanger, že jsme skončili na Pondělí bylo, že řetězce mohou ve skutečnosti být indexovány, což právě znamená, že ty může dostat na první znak, druhý znak, třetí znak a tak dále, protože můžete efektivně myslet na řetězce, např. Dobrý den, jako v tomto případě pět Písmena uvnitř krabic. A můžete získat v každém z těchto Krabice s tím, co jsme udělali syntaxe představí v pondělí? Tyto hranaté závorky na vaší klávesnici. To jen chtěl jít do místa nulové. Začneme počítat od nuly, takže držák nula znamená h, držák jeden E znamená, a tak dále. A tak po celou dobu, kdy jsme byli pomocí řetězce a zadáním příkazu "ahoj" a "svět" a další věci na na obrazovce, to bylo uloženo v krabicích, jako je tento. A hádejte. Co každý box představuje fyzicky vnitřek vašeho počítače? [Neslyšitelný]. Je nám líto? Postavy. Tak charakter, rozhodně v případě, řetězců a postava je jen osm bitů nebo jeden byte. Takže jste pravděpodobně alespoň nejasně obeznámeni s tím, že vaše počítač má paměť. To má dva typy paměti alespoň. Jedním z nich je pevný disk, kde ušetříte věci trvale, a to typicky velký, takže můžete mít filmy a hudbu a tak dále. Pak máte další typ paměti tzv. RAM, R-A-M, Random Access Paměť, a to je typ paměti, , který se používá, když je počítač běží, ale pokud už ztrácím sílu nebo váš vybití baterie, cokoliv, co je uloženo v paměti RAM zmizí, pokud už ztrácím sílu dohromady, protože to není vytrvalý. Ty mají obvykle v těchto dnech, koncert z toho dva koncerty, možná víc. A vzhůru RAM je, že je to mnohem mnohem, mnohem rychlejší než pevné disky nebo dokonce solid state disky v těchto dnech, ale je to obvykle dražší, takže máte méně. Takže dnešní rozhovor skutečně odkazuje RAM, který typ paměti, která existuje jen když tam je moc dodávané do počítače. Takže když napíšete H-E-L-L-O, Enter klávesnice, H se děje v jednom byte RAM, E se děje v další byte paměti RAM, jako je zbytek slova. Takže vzpomenout, co jsme byli schopni udělat, minule to bylo. Nech mě jít dopředu a otevřít soubor že jsme nazvali string.c a vyvolat že vypadal trochu něco takového. Dovolte mi, abych skutečně vrátit zpět a změnit to přesně to, co vypadá, délka řetězce s. Takže se na programu zde. Jsme patří CS50 knihovnu tak že můžeme použít získat řetězec. Použili jsme standardní io.h takže můžeme použít printf. Proč jsme je string.h? To byl nový v pondělí. Takže jsme chtěli délku řetězce. Str. leng. Lidé se rozhodli před lety, buďme stručné. Místo toho, volat to "délka řetězce," nazvěme ji "str Leng" a nechte Svět je číslo, které se, a tak to je to, co dostaneme přístup k s string.h. To je dobře známá. To je dobře známá. To je dobře známá. Jedná se o málo nových. V souladu 22 - a vrátíme se na to, ale nyní víme - a vy byste jen vědět to z nutnosti přečtěte si dokumentaci, nebo pokud jste věděl, že C již - dostat řetězec může někdy pokazit. V případě, že uživatel je skutečně nepřátelský nebo nespolupracující a on nebo ona jen nemá nic psat na klávesnici nebo typy tolik na klávesnici, která to přemůže paměti počítače, teoreticky dostat řetězec by se mohl vrátit něco jiného, ​​než řetězec znaků. To by se mohl vrátit speciální hodnotu s názvem NULL ve všech čepice, N-U-L-L, a to je jen tzv. sentinel hodnotu. Je to zvláštní hodnotu, která označuje, něco špatného se stalo v tomto případě. To je absence řetězce. Takže null jsem kontrolu jednoduše tak, dlouhý příběh krátký, str. leng a další funkce, které přicházejí s C, je-li očekávají řetězec, ale předáte je absence řetězce, předáte je NULL, počítač nebo program se prostě zhroutí úplně. To bude viset. To se bude hodit do nějaké chybové hlášení. Špatné věci se bude dít. Takže i když je to stále není dobře definované - to bude dávat větší smysl v týdnu nebo dvě - v řadě 22, je to jen Příkladem vlastní obranné kontrolu chyb jen v případě, že jednou z milionů se něco pokazí, na Alespoň můj program nebude padat. Takže pokud to není rovná něco špatného, Mám to pro smyčce, a to bylo kde jsme měli ten druhý nový kus syntaxe. Mám pro smyčky iterace od nula, až do délky s. A pak tady, byl jsem vytištění s držák i, ale proč já používám% c všechny Najednou místo% s ještě i když s je řetězec? Je to postava, ne? S je řetězec, ale s něčím držák, Držák s i, kde i je nulová nebo jeden nebo dva, to je individuální znak v řetězci, a proto pro že printf musí být informován, že je to opravdu postava očekávat. A pak si vzpomenout, co to udělal Program vlastně dělat? Vytištěno to ve sloupcích. Jo, přesně tak. Je to prostě vytištěno slovo, které jsem psát, sloupec, jeden znak na řádku. Tak uvidíme znovu. Tak, aby řetězec. Zpracovala OK. . / String. Dovolte mi, abych zadejte H-E-L-L-O, Enter, a opravdu jsem si to, na každém řádku jeden. Takže mi dovolte ještě jeden optimalizaci zde. Pokud si myslíte o tom, zejména pokud jste naprogramováno, je tu pravděpodobně neúčinnost v souladu 24. Jinými slovy, není to nutně Nejlepší design. Jednoduchá, alespoň jednou vás Pamatuješ si, co str Leng je, ale je to dělat něco hloupého potenciálně. Co by to mohlo být? [Neslyšitelný]. Přesně tak. Je kontrola délky s pokaždé, i když H-E-L-L-O je vždycky se pět znaků. Pokaždé, když se prostřednictvím této smyčky, pět nemění. Mohl bych být i zvyšování, ale to, co je délka s na každém opakování této smyčky? Je to pět, to je pět, to je pět, a přesto jsem však ptám otázku znovu a znovu a znovu. Teď upřímně řečeno, počítač je tak zatraceně rychle, nikdo nevšimne Rozdíl je v tomto případě, ale tyto druhy špatných rozhodnutí o návrhu může začnou sčítat, pokud kompilátor sám Nesnaží se opravit to pro vás, který obvykle to by neměl být v alespoň v přístroji. Tak jdu na to. Chystám se přidat čárku moje první proměnná, i. Chystám se dát sám jiný variabilní, volat to n, jen tím, že konvence pro čísla, a pak jsem bude přiřadit n hodnotu řetězce délka s. A pak jsem se změní můj stav se co? Jdu změnit svůj stav se, když jsem je menší než n.. Takže teď, kolikrát jsem kontrolu délky s? Jednou, ale to je v pořádku kontrolovat i proti n znovu a znovu, protože teď ty hodnoty se skutečně mění. Nyní se, jen vím, že kdykoliv volání funkce, je to trochu nad hlavou, není dost odradit opravdu od někdy pomocí funkcí, ale jistě, když je řádek kódu líbí - a linky budou mít zajímavější zanedlouho - tam, kde je tu příležitost přemýšlet, jestli jsem zadejte tento kód, kolik krát to bude provádět? Začnete vidět v průběhu času Výkon vašich programů může opravdu změnit. Ve skutečnosti, jeden z problému sady máme udělal v minulých letech zahrnuje provádění, jak si může stáhnout z týden nula, kontrola pravopisu, ale Kontrola pravopisu, který je navržen pro podporu slovník 150.000 a Slova, která jsme vám kluci. Budete muset psát kód, který načte tato slova do paměti RAM, takže do krabice, jako jsme viděli na obrazovce na okamžik lety, a pak stejně rychle jako vy můžete, musíte být schopni odpovědět otázka formy, je toto slovo chybně? Toto slovo je chybně? Toto slovo je chybně? A něco takového, co máme udělal v minulých letech se obrátil ji do, když na opt-in dobrovolném základě, soutěž druhů, přičemž studenti, kteří používají méně RAM a méně času, méně cykly procesoru, skončí vyvěrá na vrchol málo leader board nebo pořadí, které klademe na Kurz je úvodní stránka, jak máme probíhala v letech minulých. Takže znovu, zcela volitelný, ale mluví k návrhu příležitosti které jsou před námi, jakmile začneme budova na vrcholu některé z nich základní stavební kameny. Takže mi dovolte vrátit se k tomuto schématu pro jen na chvíli a odhalit málo něco víc. To je skutečně řetězec, a udělali jsme Výhodou několika knihoven, standardní io.h která má - Printf. Printf, mimo jiné. cs50.h, která se int a získat řetězec a tak dále, string.h, který měl str Leng. Ale ukazuje se, že je ještě jiný. Upřímně řečeno, je tu spousta a spousta záhlaví Soubory, které deklarují funkce pro knihovny, ale to je ctype.h ve skutečnosti bude poněkud výhodné, protože jdu jít dál a realizovat jeden jiný program zde. Nech mě jít dopředu a otevřít něco Napsal jsem předem s názvem capitalize.c, a pojďme se Podívejte se, jak to funguje. Všimněte si, že jsem pomocí, v této verzi z toho tři známé soubory. Všimněte si, že v řadě 18, jsem získání řádek textu. Všimněte si řádku 21, jsem tvrdil, že Následující kód bude vydělávat s, co uživatel napsal v roce, a jak to dělám, že? No, já si beru - poučení z minula - Já jsem prohlásil i a n a iterace nad znaky v řetězci. A co je to za blok kód v souladu 24 až 27. dělá Laicky řečeno? Malé písmeno zpět. Přesně tak. Je-li držák s i -, takže v případě, že i-tý charakter s, což je specifický char v řetězci, je větší než nebo rovnající se malá písmena a - připomenout, že dvojitý ampersand znamenají a - a stejný charakter, s držák i, je menší než nebo rovnající se malá písmena Z, to znamená, že to, nebo b nebo c nebo dot, dot, dot, nebo Z, což znamená, že to je malá. Co chci dělat v tomto případě? No, můžu to udělat poněkud záhadně, ale pojďme škádlit to od sebe. Jdu zavolat printf, vytiskne% c protože chci dotisk tohoto znak na obrazovce. Já pak bude trvat s. držák já, i-tý znak s, a proč dělám tento malý trik tady, malá minus kapitálu je? Co to bude dát já obecně? [Neslyšitelný]. Přesně tak. Nemám moc nepamatuju - to bylo 65 na kapitálové A. opravdu nemám Pamatuješ si, co malá je, ale to nevadí. Počítač ví. Takže tím, že říká, malá znaménko mínus kapitálu, je to divné, že odečte jeden char od druhého, ale jaké jsou znaky pod pokličku? Jsou to jen čísla. Takže bez ohledu na tato čísla, nechte počítač si to pamatovat spíše než já člověk. Tak malá minus kapitál je bude mi rozdíl. To se stává, že je 32, a že by se případ malým b a kapitálu B a tak dále. To zůstává konzistentní, naštěstí. Takže jsem v podstatě řekl, se malé písmeno, odečíst z té standardní rozdíl, a že držák účinně Změny S i od malá písmena, samozřejmě, velká, aniž bych opravdu mají myslet o nebo si pamatovat, co byli ti, Čísla s nimiž jsme hovořili o tom, kdy osm dobrovolníků přišla na pódium? Nyní mezitím, v jinak, pokud to není malé písmeno jak je stanoveno linkou 24, stačí ji vytisknout. Já jen chci, abyste se nedotkli znaky, které byly vlastně původně malá písmena. Takže pojďme se podívat. Udělat využít. Zpracovala, OK. . / Vydělat. A dovolte mi psát v H-E-L-L-O malými písmeny, Enter. A zjistíte, že je převeden na velká. Nech mě to udělat znovu jiný slovo. Jak se o D-A-V-I-D s prvním D vydělával jako jméno je obvykle? Enter. Všimněte si, že je stále platná. To jen, že první výstup D beze změny přes které else. Takže mějte na paměti, pak pár věcí zde. Za prvé, pokud jste někdy chtěli zkontrolovat dva podmínky najednou, můžete jim a spolu, jak jsme předpovídali. Můžete porovnat znaky tímto způsobem a účinně léčit znaky jako čísla, ale upřímně řečeno, je to tak zatraceně mystický Nikdy nebudu pamatovat jak přijít s tím od začátku bez uvažování přes to na docela trochu času. Nebylo by hezké, kdyby někdo tam napsal funkci nazvanou je snížení, které by mohly odpovídat za mě true nebo false, tento znak je malá? No naštěstí, kdo napsal ctype.h udělal přesně to. Nech mě jít sem a přidat ctype pro c typy, a teď nech mě jít sem dolů a přepsat tento řádek takto. Takže pokud se to nazývá, je nižší, tvrdím, je držák i, pak jdu smazat tyto dva řádky dohromady. Takže teď někdo jiný, doufám, napsal s názvem funkce je nižší, a to ukázalo se, že to udělali, a oni deklarovali že uvnitř ctype.h. A teď jdu nechat linku 27 sám, jdu nechat linku 31 sám, ale všimněte si, jak moc jsem zpřísnila svůj kód. Nyní je čistší. Je to méně obtížné prohlédnout protože se funkce, je navíc tak nádherně jmenoval to jen dělá to, co říká. Takže teď jdu zachránit to. Chystám se oddálit. A stejně jako v Scratch byste mohli mít Booleovské operace, logické hodnoty true nebo false, to je přesně to, co je nižší skutečně vrátí. Dovolte mi, abych překompilovat. Dovolte mi, abych re-run. A teď zkusme to znovu, H-E-L-L-O, Enter. To je docela dobrý. A zkuste to znovu, ujistěte se, že jsem se nezničí něco vymyslet. To je aktivováno stejně. Ale to není dost dobrý, protože Další věc, která mě nikdy vzpomenete, pokud pracuji přes to opravdu opatrně na, řekněme, papír to zatraceně řádek. Nebylo by hezké, kdyby tam byly volána funkce na horní? Tak to dopadá, že je v ctype.h stejně. Chystám se jít dopředu a zadejte - dovolte mi, abych tento řádek zpět. Místo toho tady, nech mě jít napřed a říkají, nahrazovat% C Výsledkem volání této funkce Horní na i-tém charakteru s. A teď všimnete, že to stále trochu vyvážit. Musím sledovat, kolik závorky jsem otevřít a zavřít. Takže teď je to ještě čistší. Nyní je tento program stále lepší a lépe navržené pravděpodobně proto, že je mnohem, mnohem čitelnější, ale Není to pojďme napravit. Udělat využít. . / Vydělat. H-E-L-L-O. Pojďme spustit znovu, D--V-I-D. OK, takže jsme stále v docela dobré kondici. Ale teď k horní. Navrhuji, že je tu ještě jedna zjemnění můžeme dělat, že by bylo opravdu pěkné, mohlo by to opravdu dotáhnout do tohoto kódu, a opravdu nám pět z pěti pro návrh, například. Co by bylo hezké, jak se zbavit? No, podívejte se, jak zatraceně dlouhé tento blok Kód je jen něco jednoduchého. Nyní, jak stranou, protože můžete mít vidět v super části minulý víkend, nemusíte nezbytně potřebuje, Složené závorky, když stačí mít jeden řádek kódu, i když jsme navrhli držet je tak, že je mnohem jasnější, jako v Scratch je ve tvaru písmene U bloky, co je uvnitř pobočky. Ale nebylo by to bylo hezké, kdyby na horní, když vzhledem k jeho vstup, otočil se do velká písmena, pokud tomu tak není, a to, co by bylo úžasné v opačném případě, pokud je to už velká? Stačí projít přes a nechat to být. Takže možná, že to dělá. Mohl bych to zkusit, a jen doufám, , že nemá, ale dovolte mi, abych představit jednu věc. Namísto použití tohoto zabudovaný terminál Okno se zde připomenout, že Toto náměstí černá ikona vám větší okno terminálu, že mohu plný obrazovky, pokud chci? Tak to dopadá, že jsou nějak podivně jmenoval, ale je tu nazývají věci manuálových stránek, manuálové stránky, muž v krátkosti, a já k nim přistupovat podle psaní muž - co chci psát na stroji? Člověk do horní. A teď zjistíte, jestliže existuje funkce uvnitř počítače, v V tomto případě je přístroj, který je právě operační systém Linux, bude to aby mi poněkud záhadný soubor výstup, ale zjistíte, že v průběhu času vždy je formátován do značné míry stejné, takže začnete to zvyknout. Všimněte si, v horní části na horní a zřejmě je stejný dokumentace na snížit. Ten, kdo psal, že to bylo nějaké řezání rohy a dát to všechno na jedné stránce. Účelem těchto věcí "v život je převést Dopis horní nebo malá písmena. Všimněte si, že v Synopsis manuálové stránky Učí mě, co mám soubor zahrnout používat tuto věc. To mi dává podpisy na nich funkce, a to jak z nich, a to i když jsme teď jen péče o jednom. Zde je nyní popis. Chcete-li horní převádí dopis c velká, pokud je to možné. Stále není to poučné, ale dovolte mi, abych nyní podívat pod návratovou hodnotu, věc, který je předán zpět. Takže vrácená hodnota je, že převedeny písmeno nebo c, pokud konverze nebylo možné. Co je to c? Původní charakter. Původní charakter a víme, že by opět stoupá do synopse, a ten, kdo to napsal Funkce se rozhodli, že vstupní se na horní a spodní, je jen libovolně se měl jmenovat c. Mohli by říkali, že většina něco chtějí, ale stále to jednoduché c. Tak jsem konzultovala manuálovou stránku. Tato věta ujišťuje mě, že pokud to není malé písmeno, je to bude dej mi C, což je perfektní, což znamená, že můžete zbavit můj jiný stav. Tak nech mě jít zpátky do gedit, a Nyní mi dovolte to. Jdu kopírovat mé printf prohlášení. Chystám se jít dopředu a doprava uvnitř smyčky pro tisk, které se, a získat zbavit se tohoto celku, pokud by konstrukce. Nebyl to špatný nápad, a bylo to velmi Kolik správné av souladu s všechno, co jsme kázali, ale prostě není nutné. Jakmile si uvědomíte, některé knihovny funkce existuje, že někdo jiný psal, nebo možná jste napsal jinde souboru, můžete jej použít, a opravdu začít zpřísnit kód. A když říkám věci jako dobrém stylu, skutečnost, že se tato osoba nazývá pracovat na horní, nebo dříve, je nižší je nádherně užitečná, protože jsou velmi popisné. Ty by nechtěl volat funkce x a y a z, které mají mnohem, mnohem menší význam. Jakékoliv dotazy týkající se této série vylepšení? Takže stačí tedy jeden z takeaways je dokonce jako svůj vlastní problém set - možná problém nastavit jednu, ale Určitě P nastavit dva a kupředu, dokonce když jsou správně nemusí nutně znamenat, že jsou perfektní jen ještě, nebo velmi dobře navržené. To je další osy začít přemýšlet o tom. Takže to byl řetězec uvnitř vašeho paměť počítače, ale pokud máte celá parta postav jako H-E-L-L-O v paměti RAM, a předpokládejme, které jste v programu volat získat řetězec několikrát taková, že zavolejte si řetězec jednou, pak zavolejte si řetězec znovu. No, co se děje na se stalo v průběhu času? Jinými slovy, pokud máte linku kód, i když z kontextu, jako je string s dostane - pojďme na to. String name rovná se řetězec. Takže předpokládám, že řádek kódu je určena požádat uživatele o jeho nebo její jméno. Tato další řádek kódu je chtěl zeptat, uživatel pro jeho nebo její školy, a Tato další řádek, a tak dále. Předpokládejme, že jsme pořád ptají uživatele pro další a další a další řetězec. Chystají se zůstat v paměti ve stejnou dobu. Jedním z nich je nebude hadry druhé. Škola je nepřepíše jiný. Ale kam se všichni skončí v paměti? No, pokud začneme kreslit na obrazovku, které můžeme použít tuto věc zde jako tabuli, je-li tato černá obdélník představuje můj počítač je paměť, budu libovolně začít rozdělit ji na malé čtverečky, z nichž každá reprezentuje jeden bajt paměti. Upřímně řečeno, pokud máte gigabajty paměti RAM v těchto dnech, máte miliardu bajtů paměti ve vašem počítači, takže miliarda těchto čtverců. Takže stačí říct, to ve skutečnosti není v měřítku. Ale my jsme mohli držet čerpání všech těchto zjevně nejsou v měřítku čtverce, a to souhrnně představuje mé paměti počítače. Teď budeme prostě tečka, tečka, tečka. Takže jinými slovy, když jsem teď vyzve Uživatel s get řetězce, aby mi řetězec, co se stane? Pokud uživatel zadá "ahoj", která končí v H-E-L-L-O. Ale předpokládejme, že Uživatel pak druhy uvedené v - Vlastně bych neměl dělat Dobrý den, protože se ptáme je jejich názvy. Tak pojďme zpátky, když to zvládnu. Takže když jsem typ D-A-V-I-D pro mé jméno, ale připomenout, že druhý řádek Kód byl dostat řetězec znovu získat jejich školu. Kde je, že slovo, které uživatel druhy uvedené v jít dál? No, možná to bude jít do H-A-R-V-A-R-D. Takže i když jsem vypracován jako dvou řadách, je to jen celá parta bytech ve vašem počítače RAM. Je tu problém teď, protože teď, když jsem pomocí RAM v tomto velmi rozumné ale trochu naivní způsobem, co můžete není zřejmě rozlišovat? Tam, kde jeden začíná a kde jeden konec, ne? Jsou trochu rozmazání dohromady. Tak to dopadá počítač to nedělá. Dovolte mi vlastně můžete vrátit v čase a několik znaků a místo Harvardu bude ihned po uživatelským jménem, uživatel skutečně dostane, za scény, speciální znak vložil Počítač pro něj. / 0, jinak známý jako znak NUL nepříjemně tzv. N-U-L, ne N-U-L-L, ale píšete to jako / 0. Je to jen všechny nulových bitů je marker mezi prvním slovem, které uživatele napsal a druhý. Takže Harvard vlastně teď končí jako je sekvence znaků a ještě jedna / 0. Takže jinými slovy, tím, že tyto ověřovací hodnoty, osm sousedící nula bity, si nyní můžete začít rozlišovat jeden znak z druhého. Takže celou tu dobu, co bylo "ahoj" je vlastně "ahoj" s / 0, a Prozatím by se tam velmi dobře být trochu více paměti RAM uvnitř počítače. Nech mě udělat jednu věc nyní. Ukazuje se, že všechny z těchto čtverců jsme byli kreslení, jsou, ano, řetězce, ale obecně, tyto věci jsou pole. Pole je jen kus paměti to je zády k sobě k sobě k sobě, a obvykle používají řadu způsobem tohoto hranatá závorka zápisu. Takže budeme vidět, jak se trochu v průběhu času, ale dovolte mi jít dopředu a otevřít, řekněme věku. A všimněte si, co s nimi můžeme dělat tytéž triky, malé trochu syntaxe zde. Takže v řadě 17 tohoto programu - skutečnosti, dovolte mi, abych nejprve spustit program a tak můžeme vidět, co tohle dělá. Zavolám, aby na věky zkompilovat tento program. . / Stáří. Kolik lidí je v místnosti? Nazvěme to tři. Věk první osobě? 18, 19, a 20. A teď trochu směšně, já jen udělali program, který ages ty tři lidé. Takže je tu jasně příležitost pro nějakou zábavu aritmetiky zde. Naštěstí, matematika je správná. 18 šel do 19, 19 šel do 20 a tak dále. Ale to, co opravdu znamená být Ilustrativní je, jak jsme ukládání věk těchto tří lidí. Dovolte mi přiblížit, co je tady děje. Takže v první řadě, by měly tyto první pár řádků je stále dost známé. Já jsem jen výzva ke zvolení počet lidí v místnosti. Pak jsem pomocí dostat int a dělat, když se to znovu a znovu a znovu. Viděli jsme, že vzor dříve, ale linka 27 je nový a docela užitečné, a bude se stále užitečné. Všimněte si, že to, co je v souladu 27 je, že jsem se zdají být prohlášení int tzv. věky, ale počkejte. Není to jen int věku. Tam je tato hranaté závorky, uvnitř které je n. Takže držák n v této souvislosti, nikoliv uvnitř printf prohlášení zde, ale V této jediné lince 27, tento řádek řekl, dej mi n INT, z nichž každá je typu int. Tak to je kbelík, abych tak řekl, z, v tomto případě tři celá čísla zpět do zády k sobě, takže jsem skutečně má tři proměnné. Alternativou, aby se jasné, že je to. Pokud bych chtěl nejprve studenta věk, mohl bych to udělat. Kdybych chtěl druhý studenta věk bych mohl udělat. Kdybych chtěl třetí studenta věk, mohl bych to udělat. A nedej bože potřebujeme každého z nás věk v této místnosti - Myslím, že je to sakra hodně kopie, vložit znovu a znovu a znovu. A navíc, když jsem zkompilovat tento program, pokud další student chodí přes ven ze dveří, nyní moje číslo proměnných je nesprávné. Takže to, co je hezké o pole je Jakmile se začnete cítit sami kopírování a vkládání, je pravděpodobné, že je to není nejlepší přístup. Pole je dynamická potenciálně. Nevím dopředu, kolik lidí se bude v místnosti, ale vím, že musím n z nich, a budu zjistit, n, když přijde čas. Tento řádek kódu nyní znamená, dej mi kus paměti, která vypadá takto kde počet schránek na obrazovce je zcela závislá na n které Uživatel napsal palců Takže teď zbytek tohoto programu je vlastně docela podobné tomu, co jsme Jen jsem se znaky. Všimněte si, mám pro smyčce začíná v řádku 30. Takže hned po jsem si pole, jsem přecházet z y rovná nule až na n. Jen jsem to poučné printf zprávy jen říkám, dej mi věk osoby #% i tak číslo jedna, číslo dvě, číslo tři. A proč jsem to udělal? Upřímně řečeno, lidé raději počítat od jedné na nahoru, zatímco počítačoví vědci, nuly nahoru. počítačoví odborníci nebudou použít tento druh programu, takže jsme bude jen začít počítat v jednom, jako normální lidi. A nyní v souladu 33, všimnete mírně jiný kus syntaxe. I-tý věk v té proměnné typu pole dostane int. A teď konečně, je to jen aritmetický sem. Rozhodl jsem se v samostatné smyčce tvrdí, nějaký čas ubíhá, a nyní v této samostatná smyčka, tyto řádky spustit. Ode dneška za rok, člověk i bude i let, ale oznámení není proměnné i. To je nyní% i pro int. A oznámení jako první zástupný symbol, I zapojte i plus 1, takže počítáme jako normální člověk. A pak se za hodnotu jejich věku, pro i let, beru ages držák i - a proč to dělám a jeden tady? Prostě věku. Je to moje hloupá volba programů. Prostě ve věku jednoho roku. Mohl bych psát v jakékoliv číslo, které Já vlastně chci tam. Takže co to vlastně všechno relevance tady? No, dovolte mi vlastně listovat sem a namalovat obraz toho, co leží před námi. Co budeme dělat s naší další Problém nastavit dva se pustily do svět kryptografie. Takže to je řetězec znaků, takže sekvence z více znaků, a to, co to říká? Není to v online verzi ze snímků. Takže tvrdím, že to se rovná to, hloupá reklama od mnoha let před který by mohl vyvolat jeden z jeho původu. Tak to je příklad šifrování nebo šifrování. Ukazuje se, že pokud chcete ve skutečnosti poslat informace nebo sdílet informace s někým bezpečně jako zprávy, jako je tato, můžete vyškrábat dopisy. Ale obvykle jsou slova nejsou kódovány náhodně. Jsou deionizovaná nějakým způsobem nebo změnit nějakým způsobem, aby - oops. To je zábava spoiler pro příště. Takže si můžete zmapovat, co je zřejmě O všímat B., který seřadí kapitalizace ručiček. Zřejmě r e se stane. Zdá se F-H-E-R se S-U-R-E. Tak Ukazuje se, že je mapování, a V tomto případě je to dost hloupý mapování, jestli má někdo na to přišel? To je něco, co nazývá Rot 13, 13 Otočit. Je to nejhloupější šifrování mechanismy, protože to doslova přidává 13 na každého z písmen, hloupý v tom smyslu, že pokud jste právě mít trochu volného času na ruce a tužka, nebo si jen myslím, že až v hlavě, můžete zkusit všechny možné obrázky - jeden, dva, tři, tečka, tečka, tečka, jen 25 otočte celou abecedu a nakonec budete zjistit, co tato zpráva je. Takže pokud jste něco takového v základní školy předávání zpráv do nejlepší přítel, pokud vaše základní školy Učitel jen pročíst zprávy a brutální nuceni řešení, Možná jste dostali odpověď, že. Teď samozřejmě, v reálném světě, kryptografie je složitější. To je úryvek textu, který je počítačový systém, který má uživatelské jméno a hesel, jak téměř všichni z nás dělají, a To je to, co by mohlo vaše heslo vypadat, pokud je uložen na pevném řídit, ale v zašifrované formě. To není jen rotace dopisů, Je B a B je C. To je mnohem sofistikovanější, ale používá co je obecně známé jako tajný klíč kryptografie. Tento snímek vypráví následující Příběh s několika ikonami. Na levé straně, máme to, co zavoláme prostý text. Ve světě kryptografie, prostý Text je původní zprávu psaný v angličtině nebo francouzštině nebo jazyka vůbec. Pokud chcete zašifrovat, budeme předávat je obrazově přes visacím zámkem, takže některé druh algoritmu, některé funkce nebo program, který někdo napsal že se pere písmena doufejme více komplikovaně než pouhým přidáním 13 ke každému z nich. Co získáte z tohoto procesu, Uprostřed se nazývá cyphertext. Tak trochu sexy slova. To jen znamená, že je šifrována verze prostý text. A pouze pokud máte stejný tajemství, 13 nebo minus 13, jste schopni dešifrovat zprávy takhle. Takže problém nastavit dva, mezi věcmi, budete dělat, když v Hacker Edition, budete muset napsat kód bezva tato hesla, přijít na to, co jsou zač a jak byly zašifrované, ale my vám trochu z vedení podél cesty. V Standard Edition, představíme pár šifer, šifrování mechanismy, jeden s názvem Caesar, jeden volal Vigenere, které jsou stále rotační šifry, kdy se stane něco, B se stává něčím, ale musíte to udělat programově protože tam bude skutečně tajná klíč zúčastněných, z nichž je obvykle číslo nebo klíčové slovo, které pouze odesílatel a příjemce těchto zprávy by měl pochopit. Nyní, to vlastně má inkarnace v reálném světě. Toto, například, je málo orphan Annie je tajné dekodér prsten, a může skutečně realizovat tyto rotační šifry - Se stává něčím, B se stává něco - s několika koly, jeden na vnější straně, druhá uvnitř taková, že pokud otočíte kolečkem nebo kroužek, můžete skutečně zarovnat dopisy s různými písmeny, získání tajného kódu. A tak jako cliffhanger pro dnešek, co jsem myslel, že to je trochu návrat, že pokud zapnete televizi 24. prosince, můžete sledovat Film ad nauseum pro 24 hodin v řadě. Ale pro dnešek, otevřu to tady a dá nám jen dvě minuty z pedagogicky relevantní Vánoční příběh s malým chlapíkem jménem Ralphie. [PŘEHRÁVÁNÍ] -Ať už je to známé všem a různé, že Ralph Parker je jmenován člen Malý sirotek Annie tajemství kruh a je oprávněn ke všem se ctí a výhody vyskytující se na ně vztahují. -Podepsáno, Little Orphan Annie. Spolupodepsal, Pierre Andre inkoustem. Vyznamenání a výhody již ve věku devíti let. [Křičel na rozhlasových] Pojď, jdeme na to. Nepotřebuji All That Jazz o pašeráci a piráti. -Poslouchejte zítra pro uzavření dobrodružství černý pirátská loď. Nyní je čas na tajemství Annie Zpráva pro vás členy tajného kruhu. Pamatujte si, děti. Pouze členové Secret Circle Annie umí dekódovat Annie tajnou zprávu. Pamatujte si, že Annie je závislá na vás. Nastavit piny B2. Zde je zpráva. 12., 11, 2 - -Já jsem ve svém prvním tajné schůzce. -25, 14, 11, 18, 16 - -Pierre byl ve velké hlasové dnes. Jsem poznal, že z dnešní zprávy bylo opravdu důležité. -3, 25. To je zpráva od Annie sama. Pamatujte si, že nikomu to neříkejte. -90 Sekund později jsem v jediné místnosti v domě, kde devítiletý chlapec mohli sedět v soukromí a dekódování. Aha, B. jsem šel na další. E. První slovo je "být." S. Přicházelo to nyní snazší. U. 25. To je R. -No tak, Ralphie. Musím jít. -Hned jsem dole, mami. Gee svist. -T. O. Ujistěte se, že. Ujistěte se, že to, co? Jaký byl malý sirotek Annie snaží říct? Ujistěte se, že to, co? -Ralphie, Randy má jít. Prosím vás vyjde? -Dobře, mami. Budu hned zpátky. -Byl jsem stále blíž do současnosti. Napětí bylo hrozné. Co to bylo? Osud planety může visí na vlásku. -Ralphie, Randyho musím jít. -Hned jsem ven křičet nahlas. -Už tam skoro jsme. Prsty se mi letěl. Moje mysl byla ocelová past. Každý pórů vibroval. To bylo skoro jasno. Ano, ano, ano, ano, ano. -Ujistěte se, že pít Ovaltine. Ovaltine? Mizerný reklamu? Ten hajzl. [END PŘEHRÁVÁNÍ] Reproduktor 1: Toto je CS50, a že bude problém nastavit dva. Uvidíme se příští týden. SPEAKER 2: Na dalším CS50, se to stane. Reproduktor 1: Takže jedno téma, nemáme Podíval se na potud je že funkčních ukazatelů. Nyní, ukazatel funkce je jen adresu veřejné funkce, ale stejně jako - syn -