[Přehrávání hudby] Reproduktor 1: Toto je CS50 a to je začátek dvou týdnů. Takže, pojďme se ponořit se přímo do něčeho že je buggy, abych tak řekl. Takže, tady je CS50 IDE a já jsem zastavil v předstihu to screen-- zatracený za to. Spoiler alert. Dobře. Já jsem vytáhl tuto obrazovku tady, který má velmi jednoduchý program. Budeme-li se posunout dolů, nejvíce to je jen komentáře, ale tady v řádcích 13 až 17 máme program. To je syntakticky platné, což znamená, že pokud I zkompilovat, bude to zkompilovat a spustit, ale je to kočárek. Tento program tvrdí v komentáři up vrcholu, že by se měla vytisknout 10 hvězd, ale to není. A na základě vašich zkušeností, nebo brzy bude zkušenost s C, můžete logicky rozeznat proč to je ve skutečnosti, kočárek? To jo? Diváků: Jde to od nuly do 10 let. To je 11 iterací. Reproduktor 1: Jo. Takže, bude to od nuly vzhůru a se rovná 10, což je samozřejmě 11 iterací. Tak, to bude tisk, opravdu, 11 hvězdy. Takže, počítačové vědy konvence ve většině programovacích jazyků je opravdu jen proto, aby začne počítat od nuly, ale počítat až po, ale ne přes hodnota, kterou jste skutečně záleží. Nyní, to je jedna věc, která trvá trochu zvyknout a dokonce i Scratch, navržený jako je pro non programátory nebo non počítači vědci a pro děti z velké části, je navržen tak, aby začnete počítat obvykle v jednom. A to je v pořádku. Můžete naprosto začít počítat v jednom případě, že je to mnohem pohodlnější. A počítat až do a přes 10, ale si uvědomíte, zvláště tento týden a za ní jen tak mnoho věcí v programování Předpokládáme, že 0 je první číslice, se kterým budete počítat, že budete snadněji jen se dostat do tohoto zvyku spouštění od nuly a počítá do hodnoty vám záleží právě teď od dostat jít. Tak, že má pevné, že. Změnili jsme méně než nebo se rovná jen méně než. Pojďme se podívat na druhý příklad zde. Tak, tento program také uvádí, ve svém komentuje up top, že by měla vytisknout deset hvězdy, ale to není. Co je to chyba tady? Tak, what-- a promiň, pojďme být jasné. 10 hvězdy. Jedno na řádek, ale to není. Takže ve skutečnosti, nechte mě jít dopředu a zkompilovat tenhle, protože je to o něco méně jasné na základě tohoto popisu. Nech mě jít do našeho zdrojového adresáře. Udělat Buggy jednu tečku lomítko, buggy jeden. OK, vidím, 11 hvězdy, které je stále problematické, ale jsou také všechny v jednom řádku. Co je problém tady? To jo. Diváků: [Neslyšitelné]. Reproduktor 1: Jo. Takže to je jemnost, že můžete připomínají mi dělat krátkou zmínku o. I když všechno vypadá hezká, a to je pěkně členité, a to trochu vypadá jako Scratch- V tomto řádku 16 a 17 jsou, vskutku, odsazeny pod že pro smyčce. To je nepodstatné. Počítač není vědí nebo vidět prázdné místo. Bílý prostor je jen pro nás lidi, stylisticky. Počítač má vědět, kdy máte složené závorky, které by, opravdu, tento problém vyřešit. Takže, když jsme vlastně šel dovnitř a výslovně dát v těchto složených závorek že by se tento problém vyřešit tím, Díky jasné, kompilátor že jsem vlastně chtějí spustit opět dva řádky kódu, a znovu a znovu. Ale to, co je základní vysvětlení? Je to tak? Nemáme striktně potřebovat složené závorky po celou dobu, i když je to asi nejlepší Praxe se dostat do tohoto zvyku stejně ačkoliv dodává dva znaky na váš kód. proč? Diváků: [Neslyšitelné]? Reproduktor 1: Jo, tak to je jiné řešení úplně. Je to tak? Zvlášť když na první pohled, že ne Opravdu si toho vážím, co se děje. No, určitě jsme mohli prostě dělat dvě věci najednou a jen se problému vyhnout úplně. A to je v pořádku, ale teď, pro dnešní účely, co je vysvětlení pro chybu? Proč byly všechny ty hvězdy na jedné lince? To jo? Diváků: Zdá se, že v případě, máte jeden řádek kódu, můžete to udělat bez nich. Reproduktor 1: Přesně tak. To je jen lidská konvence. Lidé si uvědomit, že je to Trochu nepříjemné nebo nudné muset dát složené závorky všechny času, pokud vše, co chcete dělat je spustit jeden řádek kódu. Takže, lidé se rozhodl některé před časem, že to je v pořádku. Pokud chcete, aby všechny vaše smyčky jen na tom jednom řádku, jako je tato, to je v pořádku se singlem středník na konci. Ale můžete udělat jen jeden takový linka bez složených závorek. Takže, když průvodce CS50 styl jak bude bod, který, uvidíte, že obecně je to dobrý zvyk se dostat do toho, dokud jste docela pohodlné zbloudění z těchto druhů konvencí a dělá svou vlastní věc. Tak dlouho, jak jste vlastní konzistentní. A budeme hovořit o styl trochu později dnes. Takže mi dovolte, abych otevřít jeden jiný program. Samozřejmě, měli bychom opravit, že 10 stejně. Nech mě jít napřed a napsat skutečný rychlý program, který budu říkat, řekněme, smyčka tečka C. Takže, smyčka dot C. A ve smyčce dot C budu mít, zahrnují standardní I / O dot H int main neplatné. A teď pojďme prostě dělat, opravdu, smyčka. Takže, 4 int jsem dostane nula. I je menší než, řekněme, 50. I plus, plus. A pak tady pojďme jděte do toho a do tisku F. A pak chci vytisknout I a nový řádek, středník. A to by mělo tisknout všechny Čísla od nuly do 50? Několik hlava přikyvuje. Několik nos. Co je to chyba už? Co je snadné chybu jsem udělal? To jo. Diváků: [Neslyšitelné]. Reproduktor 1: Jo. Takže i když to vypadá, takhle je to, co mám v úmyslu, připomenout, že jsem je také jen ASCII znak. Takže, když řeknu, print "I." Je to doslova děje do I. tisk Takže, když jsem chtějí plug-in zástupný Hodnota jsem skutečně potřebují to udělat a pak připojte-in hodnota proudu I, dynamicky. Jinak já jsem prostě jít dostanete 50 let jsem na obrazovce. Takže, nech mě jít dopředu a tuto smyčku, spusťte jej, a, samozřejmě, jsme všichni cesta nahoru přes 49. A když jsem se posouvat zpět v čase vidím číslo na začátku nula. No, co kdybych druh zpackat? Co když to udělám? Jen proto, že jsem nepřemýšlel. Co je tento program. Jakmile znovu sestaven a spuštění, dělat logicky? Diváků: Nic. Reproduktor 1: Nic. Proč tomu tak je? Diváků: I je určen pro nulu. Takže, je podmínka nepravdivá. Reproduktor 1: Jo, přesně tak. Veškerý kód je správný, syntakticky. To bude sestavovat, to Kód bude spuštěn, ale není to dělat něco užitečného protože jsem inicializovat jsem na nulu. Pak jsme zjistit, je, že jsem větší než 50? Je zřejmé, že ne, že to není. Takže se smyčka nebude nikdy proveden vůbec. Co když něco děláme trochu víc lehkomyslný? Takže, co když budeme dělat, jako int i dostane nula. A nyní mi dovolte použít chvíli smyčky, což byl další podmínkou. A když říkám, když jsem je větší než nebo roven nule, a pak se v tu I jděte do toho a uložte soubor, aby smyčku. A já jsem asi jej spustit. Co mám to vidět tentokrát s smyčky while? To jo. Diváků: nekonečnou smyčku? Reproduktor 1: nekonečné smyčce? Ano, a proč? Diváků: Protože je to vždy nulové. Reproduktor 1: Jo. Takže, je inicializován jako nula. Samozřejmě, že je vždy větší než nebo roven 0 jako výsledek. Takže, já jsem prostě jít vidět nekonečně. A teď, to má přijít jednou nebo dvakrát do hlavy kurzu je. Co se stane, když vás mají nekonečnou smyčku? Publikum: Control C. Reproduktor 1: Jo. Takže Control C bude nakonec reagovat. Bohužel, jsme vytisknout milióny a milióny nuly již a tak má počítač druh dostal před sebou. Takže to bude ignorovat mě na trochu. Ale pokud jste právě hit ovladač C málo Časy na počítači Mac nebo PC klávesnice, nakonec to by skutečně ukončit. A pokud ne, budeme vám ukázat některé techniky, kde na vás před dlouhým může skutečně zabíjet násilně programy, podobně jako v systémech Windows a Mac OS, v případě potřeby. Ale pojďme zkusit něco jiného. Pojďme skutečně zvýšit I. to stále bude nekonečný? Dovolte mi, abych to běžet. A nyní můžete druh zjistit, co se děje. To, také, je nekonečné smyčce. Ale to je tak trochu chyták. Je to bude tisknout čísla navždy? Publikum: Ne. Reproduktor 1: Ne. Proč? Slyšel jsem nějaké nos sem. Someone-- Jo. Diváků: Nemáte dost bity opravdu jít dál. Reproduktor 1: Dobře. Takže nemám dost bity jít dál. Takže, co se stane? Je to jen tak přestat? Diváků: Na nějakém místě to bude zavřel the-- Reproduktor 1: Bude zavřít smyčky dolů, ale proč? Co se bude dít u Velmi konec jeho hranic? To jo? Diváků: Bude cyklus zpět do záporných čísel. Reproduktor 1: Chcete-li záporných čísel, nebo Pokud bychom byli právě léčbu pozitivní, nula minimálně. Takže ano, absolutně. Připomeňme, že jsme viděli naposledy, že pokud zvýšit vaše bity jeden příliš mnohokrát, a vy tam Fore přetečení kapacita vašeho int nebo bez ohledu na typ dat je, že jste bude zalomit kolem, pravděpodobně, dvě záporná čísla. Nebo pokud jste se určit, že rozsah by měl být pouze pozitivní, které můžete udělat, ale jsme neviděli, že dosud, můžete skončit alespoň zpátky na nulu. I když, vlastně ano. V tomto případě, negativní čísla, přičemž v tomto případě smyčka bude k ukončení proto, že jsem se ani, ve skutečnosti, větší než nebo rovno nula, pokud je to negativní. Takže, bohužel, jak dlouho budeme muset čekat? Právě teď jsme až do co, 2000000-ish? Jsme jako 2 miliardy, budeme muset počkat dokud se skutečně můžeme vidět tento příznak. Ale my to vidět o něco rychleji, maybe-- uvidíme, jestli můžeme přerušit. No tak. Dokonce i menu se objevují pomalu. Dobře. Takže, budeme vracet k tomu zanedlouho. Je to dobrá time-- sakra, štěňata. Je to dobrý čas na nějaké oznámení. Takže, pokud vám bude líbit aby se zapojily do YHack, který je událost, že podporovaný našimi přáteli na Yale. A skutečně, někteří kurz je TFS na Yale jsou spojené s tímto. YHack je mezinárodní hack-a-thon hostil a držel na Yale, sdružuje 1500 stejně smýšlejícími hackery a reklamy všech na celém světě. Jedná-li se o zájmu, podívejte se sem. Pokud je to příliš krátce na obrazovky, se podívat na dnešní skluzavky pro URL pro yhack.org. Takže, i několik rychlých oznámení. Takže, oficiálně sekce začne Příští týden jak zde, New Haven. Mějte na paměti, budete získání e-mail později tento víkend nejpravděpodobnější. trvá to dlouho pro CS50 k bodu, Vzhledem ke všem lidem v třída a každý pohybující se kolem. A veškeré výuky Fellows " rozvrhy jsou také stále zpevňovat, ale zůstaňte naladěni pro e-mail a v případě potřeby se můžete re-oddíl tam po. Study.cs50.net. Takže, i když jste konstantní účastníka na úsecích, uvědomit si, že téměř všechny zdrojů používáme v oddílech jsou veřejně dostupné na CS50 Studium na této adrese URL zde. Takže, pokud byste někdy chtěli obnovit recenzi materiál z části, nebo čtení napřed, nebo nemůžete dělat to nějaký týden, uvědomit, že ukázkové snímky, a problémy, a definice, a další jsou tam také. Úřední hodiny pokračovat dnes, a zítra, a ve středu, a ve čtvrtek zkontrolovat kurz je webové stránky pro časový rozvrh. A také, nyní zahajuje dnes je CS50 Diskutovat. Takže, pokud a když máte otázky pro navzájem nebo pro zaměstnance Course, a jsou obecně pracují na nějaký problém set, Uvědomuji si, že nemusíte nutně muset obrátit na člověka Další. Pokud se to nikdo tam, můžete natáhnout nás a spolužáky on-line prostřednictvím CS50 Diskutovat. Takže, to je diskuse deska pro kurzu, a uvědomit si, že toto je možná nejlepší místem, kde začít, když máte otázky, kdy mimo úřední hodiny zejména. Obědy začne tento týden taky. U ohně a ledu [Neslyšitelné] v New Haven. Podívejte se na kurz je webové stránky, aby se RSVP. Kdo dřív přijde, ten dřív mele za to. Pokud se nechcete dostat v tomto týdnu uděláme to nejvíce každý pátek během semestru. OK, a nyní slovo o třídění. Zejména jak jsme se vstoupit problém set člověk, který je tento týden, a problém nastavit dva a poté. Jak můžeme jít o hodnocení P sety a hodnocení jejich kvality? Takže, je to čtyři osy, které používáme v CS50, a jsou to tyto čtyři zde. Oblast působnosti, který zachycuje na numerické Základem, kolik ze souboru P jsi řešit. Je to zhruba odpovídá úsilí, a to je náš způsob, jak zachytit Zkusili jste polovinu P set, všechny sady P. Jedná se o jednoduchý, kdo dostat perfektní skóre na pokud ano, opravdu, vyzkoušet každý aspekt sady P. Takže mějte na paměti. Korektnost je přesně to. Má váš kód fungovat jako specifikace a jako vzorku roztoku štábů ' naznačují, že váš kód by ve skutečnosti fungovat. Zkontrolujte, 50, pokud jste ji potkal přesto je v P nastavit jednu specifikaci a obecně vám ano / ne odpovědi o tom, zda je váš kód je správný. Alespoň tak daleko, že budeme zhodnotit jej na základě zkoušek že jsme se spustit v rámci tohoto programu. Design je mnohem více subjektivní. To je, jak dobře napsaný je váš kód. A to je něco, budete mít lepší na čase, a je to něco, že budeme poskytují více kvalitativní zpětnou vazbu. A záměrné bych mohl znamenat, zanedlouho budete by mohl být v pokušení nějakým P nastaven na něco loopingly, , ale nebude mít možná tři, nebo čtyři, nebo pět vnořené Přední smyčky nebo vnořené zatímco smyčky. To by obecně začnou vás krčit a by obecně považováno za špatné konstrukce. A začnete vidět ve třídě a z třídy dobrých způsobů, jak dělat věci, špatné způsoby, jak dělat věci, které by mohly být všechny správné, ale ne nutně dobře navržen. Stejně jako psaní eseje. Ty by mohly být schopni dát slova na Stránka, která jsou gramaticky správně, ale esej nebo Práce jsou v je prostě zcela nesouvislá či nepřesvědčivé. A tak, že může být analog v písemná svět špatného nebo dobrého designu. A styl, taky, je poměrně subjektivní. Ale aspoň očekáváme konzistenci. To je, jak krásná je váš kód. Jsou věci pěkně členité? Jsou vaše proměnné dobře jmenuje / Jsou všechny vaše závorek a složených závorkách sladěna, jak by měly? Máme průvodce CS50 styl jako Problém sada bude ukazovat vás na adrese. Ti, kteří jsou pohodlnější vítejte bloudit z toho tak dlouho, jak jste vlastní konzistentní. A i to je lekce budeme posilovat v oddíle. Takže, pokud to všechno bylo trochu rychlá, si uvědomit, P množina a profilů půjde do větší hloubky, než dlouhý. Ale obecně máme velmi málo kbelíky na CS50. Výsledky jsou obecně na stupnici obsahující jeden až tři, nebo jedné do pěti. Jsme literally-- a nemůžu říct, to dost v prvním týdnu. Tři je dobrá. Takže, i když, ano, tři ze z pěti normálně, matematicky, může být 60 procent, nebo jako D minus. Tři je ve skutečnosti, dobře. A ve skutečnosti, očekáváme, že většina studentů ve třídě odstartovat termín kolem dvojky, trojky a čtyřky a. Pravděpodobně ne tolik pětky. Ne příliš mnoho z nich. Ale obecně začít v že sweet spot v křivce tak, že postupem času, je to vlastně prostor pro, a příležitosti pro vyšší progrese. Takže, prosím, se nerovnají tři s 60%. Je to mnohem víc než to abstraktní. Vzorec, s níž počítáme stupně se váží takto. Správnost stojí nejvíce. Design je stojí za trochu méně. Styl je stojí za trochu méně. A toto obecně zachycuje množství času že jde do dostat každý z těchto os tak akorát. Styl je super snadno, by měla být super rychlý, ale je to snadný zvyk dostat líný kolem. Správnost může trvat budete většinu času. Honí nějaký bug sílu přijmout, že další hodinu či více, a tak, bodování nakonec zachytí to. A tak teď vážnější slovo. Vzhledem k tomu, CS50 má rozlišení, pro lepší nebo horší, že jsou možná lépe seznámili s problematikou akademické poctivost než většina jakýchkoli jiných programů. A skutečně, to je mi známo, že vyšleme více studentů, bohužel, pro disciplinární účely každý rok jako výsledek. Tak, v zájmu plné zveřejňování, pojďme se krátce promluvit o tom, co se děje v CS50, a to, co vás může dělat, a co můžete mít na paměti. Takže, tady od roku 2007, kdy Zdědil jsem kurz, je počet případů Ad rady. Ad rada je Harvardu disciplinární tělo, nebo nyní Honor Counsel, , na které se odkazuje, když případy Studenti něco udělat, že kurz je Osnova považuje za nepřiměřené. Není tam žádný skutečný vzor tu, řekl bych. To kolísá přes let, ale obecně to je počet případy, které jsou uvedené. Počet studentů které jsou zapojeny? Je to příliš liší. Typicky, v loňském roce pro Například, 29 studenti na Harvardu byli Ad Boarded, abych tak řekl. 29 z nich se studenty proudu, Dva z nich minulých studentů, kteří byli spolupráce nějakým nepříjemným způsobem. A pak, pokud jde o procento, je to obvykle asi 3% třídy, která, bohužel, dělá tyto druhy rozhodnutí. Takže, v loňském roce to bylo 3,5% z CS50 studentský sbor to bylo Ad Boarded, abych tak řekl. Takže, co to všechno znamená? A co vlastně dělat? Takže, pro úplné zveřejnění, my absolutně, as počítačových vědců, mají softwarové nástroje máme k dispozici a to je pro nás velmi snadné, ve spravedlnost, že ostatní je spolužáci, kteří nejsou křížení tyto řádky překročit porovnat každý podání letos proti každý Podání žádosti o posledních osm let. Software dělá toto. A nakonec je to lidské oči, které se rozhodnou zda se má odkazovat nějaký jedno pro další rozhodování, ale software určitě pomáhá. A to, upřímně řečeno, je důvod, proč si myslím, máme tak velká čísla v CS50. Není to proto, CS50 studenti nebo CS studenti více jsou obecně nic méně upřímný než jakékoli jiné studenty, je to jen máme nástroje a techniky , s níž se tento první průchod. Ale my hlídat Na všechny tyto věci stejně opět v zájmu uznávajíce práci, která je jejich uvedením v o super většinou třídy. A politika kurzu je na akademické poctivosti, i když je to banda odstavců dlouhý s partou kulek že jsou snad dost čitelné, to opravdu redukuje být rozumný. A to nejlepší pravidlo, které nabízíme vybudována v rámci osnov je to, esence veškeré práce, která vás předloží kurzu, musí být váš vlastní. A skutečně, v téměř všech těch, Případy uvedené pro disciplinární řízení bylo to proto, že některé studentské jednou pozdě noc typicky obrátil svůj kód přes přímo na spolužáka, kdo pak jej přijala v celém rozsahu nebo výrazně nich. Ale opravdu, to je v pořádku. A skutečně, v kanceláři hodiny, papírky jste byl předán, pokud jste přišli úřadem hodin minulý týden povzbuzuje tolik. Máte naprostou přivítal a povzbudil projednat problémové sady se spolužáky. Chcete-li si navzájem pomáhají při zakopnutí. Ale obecně pravidlo by mělo být takhle, "když se žádostí o pomoc, můžete ukázat svůj kód s ostatními, ale nemusí zobrazit jejich. " Takže, jinými slovy, když jsem zápasí s některými P sadou a já sedím tam v jídelna, nebo v knihovně, nebo ve třídě se snaží najít nějakou chybu, Já určitě ukázat můj kód na mé obrazovce se osoba sedící vedle pro mě, určitě personál, ale i spolužák. Ale v případě, že řešení, které můj spolužák nabízí, je, oh, Zde stačí se podívat na to, co Udělal jsem, že překročí hranici. A já bych si tvrdit, že je to obecně rozumná věc pro většinu lidí velmi snadno rozpoznat linii. A tak, viz osnova pro další podrobnosti. A nyní jedním z více sporné aspekty z CS50 osnov, že jsem si myslel, by mluvil v závěru zde je takzvaná klauzule lítost. Tak, tady je všechno drobným písmem. Ale obecně jsme viděli, během posledních 8 roků plusu že skutečně téměř všechny CS50 je případy akademické nepoctivosti byly důsledkem právě chudí rozhodování pozdě v noci. Výsledkem stresu, výsledek nedostatku jídlo, nedostatek spánku, příliš mnoho soupravy P, příliš mnoho termíny, příliš mnoho závazků. Stres buduje v 2:00 ráno, 03:00 AM, 04:00, s termín rýsuje. Většina studentů v těchto případech právě udělal špatných rozhodnutí že oni by mohli velmi dobře litovat Druhý den ráno, ne-li minut později, ale až do loňského roku nedošlo uvolňování ventil, který tito studenti mohli skutečně otevřít až skutečně řešit problém Problém s hlavou bez strachu z bytí zavedený z vysoké školy vůbec. A opravdu, jsme zavedli tato lítost klauzule v loňském roce, který říká, že pokud v rámci 72 hodin, tři dny, křížení nějaké linky předepsaný v učebních osnovách přijedete těšit na jednu z kurzu je hlavy a budeme popovídat si o tom. Tam jsou ještě některé výsledek, na rozdíl od toho, co je Bylo hlášeno, že naopak. Tam je ještě nějaká výsledkem, že je žalovatelné průběhem, obecně nulování a P set nebo přijímání jinou akci, ale budeme, samozřejmě, zvládnout to sami, a nikoli naleznete je vyšší byly výsledkem může být mnohem přísnější. A, samozřejmě, sdílet to, co se stalo v loňském roce, v osmi letech, a teď devět let, výuky tohoto kurzu a poté, co hrát si s různými knoflíky, soustružení různé číselníky nad minulostí několik let na akademické poctivosti, a když viděl podle údajů bez zjevného dopad, a to i projevy, jako je tento, to vynese nejlepší věc jsme zavedli pedagogicky Za osm let spolu tyto linky CS50. 19 studentů přistoupil na základě tohoto ustanovení v loňském roce. Vzali jsme žádnou akci pro sedm z těchto studentů, určení, že jsou zbytečně starosti. Neměli, ve skutečnosti, překročili čáru,, ale je Byl to dobrý rozhovor mít nicméně. My vynulováno 11 o skóre které byly předloženy. A v jednom případě jsme se zeptal se Student dělat problém nastavit. Ale ještě přesvědčivější, upřímně, s těmito 19 chatů, což bylo mnohem více než já Očekává se, že mají, každý z nich 10 minut na možná hodinový, také přinesla na světlo řadu problémů, pokud jde o familiární otázky, otázky přítel, duševní zdravotní problémy že jsme se pak zabývá, s studenta požehnání, bydliště děkan, nebo přátelé, ani žádné jiné číslo podpůrných prostředků. Takže to byl zdaleka jeden nejlepších využití naší doby a jeden z nejlepších intervencí. Díky, že řekl, že neměl vstup na rychlosti detekce akademické nepoctivosti obecněji. A troufám si říci, tuto podmnožinu studentů v loňském roce bylo demografickou skupinu, které jsme předtím nikdy zjištěna přede a nikdy spojeni s předtím. A tak, jednalo nádherné příběhy o úspěchu i když byly přineseny na světlo za méně než optimálních podmínek. Takže mějte na paměti jak si udělat, snad, Některé chudé rozhodnutí si pozdě v noci, že se přistoupí tak dlouho jako student v této situaci vlastnit a přijít dopředu tak, aby můžeme mít tento druh chatu a vypořádat se s ní způsobem, který je vzdělávací, a poté můžeme dát to za námi další den. Takže bez dalších okolků, vezměte hrany z tohoto rozhovoru, důvod, proč štěňátka jsou nahoru znamená jen proto, aby prolomit ledy na chvíli. A bohužel, oni jsou všichni spát, ale to, co se mělo stát zde byl každý měl k úctu a trochu relaxovat po tomto velmi těžkém konverzace. Ale zřejmě jsem dal štěňátka spát. Ale když jdete do CS50 je Webové stránky lomítko štěňata, můžete dlouho dívat se na ně celý den. Zvláště možná 2:00, nebo 03:00, nebo 04:00 v noci vidět trochu pnutí tam. Takže to je lomítko štěňata. Dobře. Nebylo to legrace? DOBŘE. Takže, zpět do jisté počítače věda, pokud mohu. Takže, připomenout, že naposledy jsme začali při pohledu nejen na hlavní, což byl výchozí funkce se při zelenou vlajkou klikli ekvivalent, ale jsme také začali krátce psaní některé z našich vlastních funkcí. A zatím žádný z těchto funkcí byly zvlášť velký nebo výstižné. Dostanete do těch větších funkce pravděpodobně P set 2, P set 3, Rozhodně P set 4 a dál. Právě teď většina vašich programů, ne-li všechny z nich, určitě pro P set 1 může být provedeno zcela v hlavní. Pokud je váš program je jediný pět řádků, 10 řádků, dokonce 20 řádků dlouhá, dokonale rozumné psát to to vše v hlavní, a nikoli na více než komplikovat váš kód, ale to, co děláme dnes a dál se snaží také zavést nějaké dobré techniky designu tak, že když váš kód dostane více komplikované a jako problémy Chcete-li vyřešit dostat těžší a zajímavější máte, tak nějak, nástroje v panelu nástrojů, s nimiž navrhnout dobré řešení pro ty. Takže, pojďme se rychle podívat se na tento program z mého minulého týdne, který byla funkce nulový dot C. A Všimněte si, že zcela jednoduše, vypadá to, že to s dvěma funkce, hlavní a název tisku. A vzpomínal nebo možná reverzní inženýrství dnes, co bylo motivací pro zavedení funkce v souladu s názvem 28, název tiskového? Nebo co byl tento příklad v podmínky zásady nebo stánek s jídlem, pokud byste. Některé mumlá. Cože? Jo, tak Funkční rozkladu je druh efektní způsob, jak říkat, rozložit svůj program do jeho součástí a pak použít ty části sestavit celek. Tak, to taky je jen tak z sousto již, ale je možná i lepší příklad něčeho Právě volal abstrakce. Je to tak? Abstrakce bude jeden z opakujících se témat v CS50 a také počítačové vědy obecněji, protože je to technika, se kterou můžete vyřešit Problémy efektivněji, protože vás může psát řešení více intuitivně a tak, aby váhy a je pochopitelné jinými lidmi. Co tím chci říct, že? Takže, pravděpodobně to je mnohem čitelnější se podívat na program, jako je tato, extra krátké ačkoli to je. Když vidíte na lince 22, která je tu funkce nazvaná, název tisku. Sám název říká, že to, co dělá. Tato funkce zřejmě bere Vstup mezi jeho závorkách, a zřejmě něco dělá, pravděpodobně vytiskne jméno. A tak, i když jsme absolutně by mohlo mít udělal, co jsme dělali před týdnem, který byl Jen tento skutečné řádek kódu, se zbavit tohoto, a získat zbavit to vše dohromady, jsme se nějak abstrahovat pryč pojem tisku jméno. Je mi jedno, jestli používáte tiskové def. Je mi jedno, jestli máte S procent a zpětné lomítko N. Tyto jsou neuvěřitelně tajemné detaily. Co mi záleží jako programátor právě tiskne jméno. A tak to, co lepší způsob, jak to udělat, než tím, že volá funkce, název tiskového? A tak, aby byl jeden z motivací dělat něco takového. Zpřístupnění kód čitelnější, více opakovaně použitelné, a také vlastní popisný. A teď, pojďme se podívat na další příklad, což byla jedna funkce, které jsme měli tady. Tak, tohle je snad ještě více přesvědčivá, protože v tomto případě, Nechci jen dostat int. Chci se dostat pozitivní int. A ukázalo se, aby se pozitivní int, co musíte udělat spoustu terénní výzkum. Je to tak? Není to jednoduché jeden řádek zavolejte jako název tiskového bylo, což je sice méně přesvědčivé. Chcete-li získat pozitivní int, logically-- dovolte mi, abych přejděte zpět dolů skrýt toto. Co musíte udělat? Stejně jako všechny nástroje, které mají v okamžiku, kdy jsou věci, jako tiskový def od společnosti Standard Knihovna a také z CS50 knihovny máme Get Int, a dostat Float, Get Long Long, Get String, ale jen jeden, Germane, právě teď, je dostat Int. Takže, pokud je jediný nástroj, který má v krabici nářadí, je dostat Int, jak jsme se jít o provádění to se dostat pozitivní int? Diváků: Vytvořte protokol a zkontrolovat na tom, zda je vstup, který dali bylo pozitivní, nebo ne. Reproduktor 1: Perfect. Přesně tak. Dalším nástrojem máme v naší Panel nástrojů z jednoho nebo dvou týdnů před je jen je smyčka konstrukt. A tak, jo, pokud budeme používat chvíli smyčka, nebo dělat, zatímco smyčka, nebo přední smyčka bychom pravděpodobně mohli dostat pryč s některým z v určité formě. Můžeme realizovat představu get Pozitivní int jen pomocí Get Int, a pak už jen držet volat to Znovu a držet otravovat uživatele dokud ne on nebo ona vlastně dává nám, co chceme. A tak teď, to abstrakce procesu jak se dostat pozitivní int do funkce s názvem Získat Pozitivní Int je trochu více přesvědčivé, protože se na to podívat. Jsou jako 10 Plus řádků kódu, který jsou zapojeni do získávání pozitivní int, a je mi to opravdu jedno, jak to udělat. Vše, co záleží, je, že vás Můžete to udělat, a tak jsem skryté všechny tyto údaje za Funkce s názvem Get Pozitivní int to, vskutku, má tento dělat, zatímco smyčky. A viz minulý týden pro syntaxi tam, ale to jen deklaruje N, a to tiskne instrukce pro uživatele. Vyzývá Získejte Int a pak zkontroluje opět tento stav, a znovu, a znovu, dokud se uživatel spolupracuje. Takže teď, několik rychlé kontroly. Pro ty, kteří možná obeznámeni s některými programování proč N deklarován, proč jsem se vytvořit N mimo dělat, zatímco smyčky? Proč je to na lince 29 a ne o, jako je 33, například. Diváků: Protože když vás deklarovat to venku, to laskavý více, tím větší scope-- Reproduktor 1: Dobře. Diváků: --and pokud deklarovat to uvnitř smyčky, [neslyšitelných] protože se neví o tom. Reproduktor 1: Přesně tak. Když se mi podaří simplify-- to je otázka oblasti působnosti. A rozsah odkazuje na kontextu v což je proměnná existuje, nebo je použitelný. A pěkné pravidlem je, že obvykle při deklarovat nebo vytvoření proměnné můžete jej použít pouze uvnitř z nejbližších všeobjímající složené závorky. Takže co to znamená? Pokud bych, místo toho, vrátit zpět to a jít s něco, co se cítí trochu jednodušší. Je to tak? Linka 32 jen vypadá čistší pro mě teď. Dělám obojí na jednou a pak přiřazením pravá ruka na levé ruce. Problém nyní založen na že vymezení rozsahu působnosti se, že N může být použit v řádcích 31 a 32 uvnitř této smyčky, ale tam, kde touto definicí to nemůže být použit? V souladu co? To jo. Diváků: 35. Reproduktor 1: 35. Rozhodně ne 35. A taky kde jinde? Diváků: 34. Reproduktor 1: I 34 problematické, protože je to mimo složených závorek. A tak ve skutečnosti, uvidíme, co se stane. Je to tak? To se může zdát trochu intuitivní, nebo možná ne, ale pojďme se podívat, co kompilátor musí říci, kdy jdeme do dnešní zdrojového adresáře. Proveďte funkci jeden. Ó můj bože. No, nakonec jsem skončil která, mimochodem. Dobře. A co je problém tady? Velmi Arcane na pohled. Ale tady je to, co jsem typed-- aby funkce jednoho. Tady je to, co dělat vyvolané, což je vlastně pomocí kompilátoru řinčení s některými z těchto příznaků že uvidíme zase zanedlouho. A opět, vždy se na první chybě, protože by to mohlo mít jen řetězení bezvýznamný vliv na jiných tratích. Takže to, co to znamená, je to, že Problém je ve funkci 1.c To je na potrubí 32. A to je ve sloupci, nebo znak, 13. Takže když váš textový editor, který může pomohou určit, kde je problém. Takže když jsem se posunout nahoru, co je linka 32? To je opravdu tahle že už je zvýrazněný právo here-- nepoužitý proměnná n. Ale není to nevyužité. Já používám ho. Ale kompilátoru zmatený, protože že existuje pouze uvnitř tohoto rozsahu. A tak nemohu použít zde. Nemohu použít zde. A kompilátor, a proto, ani jedno, že se snažím. Zdá se, že nevyužité v jeho skutečný rozsah. Takže můžeme rozšířit rozsah tím, že dělá přesně to, co jsme začali with-- int n. A i když to není vypadat jako elegantní, snad, a bereme další řádek tady, teď je to co do rozsahu všude. Tak pojďme zkusit znovu. Tak, aby funkce jednoho. Nice. A teď, když já, když jsem běžet funkce člověk, pojďme dát to negativní 10, negativní 1, 0, 1, a to opravdu funguje. Takže tam je další řešení, sem. Ty víš co? Co když opravdu jsem zápasil s tím? Nevím, kde je n to má jít. Ty víš co? Já jsem prostě jít, aby to všechno cesta na vrcholu mého souboru zde. Co by to to, co myslíte? To jo? Diváků: [Neslyšitelné]. Reproduktor 1: Jo. Takže jsem dělal to globální, abych tak řekl. Pokud máte proměnnou, která je venku všechny své funkce, které je povoleno, a kód by měl sestavit a n budou nyní přístupné nejen v get kladný int, ale i ve kterém main-- je trochu znepokojující, protože tam je již n v hlavní, tak více o že za pouhý moment-- ale to by bylo považováno za špatné konstrukci. Dobře. Máte-li se uchýlit k něco jako, oh, já jen dát to tady, protože Zdá se, že kód kompilovat obecně není nejlepší praxí. Spíše chcete zvolit nejužší možný rozsah pro proměnné, což by znamenalo, děje s naší počátečního návrhu, který je tady. Nyní jako stranou, když jste máte identicky pojmenované variabilní tady, cesta c by zvládnout tohle-- i když se to nestane příliš often-- je to, že je to stále naprosto v pořádku tady. Avšak tato definice n v souladu 22 bude stín globálního jeden. Tak tohle bude fungovat v rámci hlavní, a celosvětový bude skutečně platit, když jste v získat pozitivní int Ale o tom více jindy, ale jen pro ty, zvědavý. Takže ve zkratce, jsme opravit tady. Nyní pojďme šprýmaři odděleně dva jiné kusy Než se podíváme na posledním řádku kódu v tomto programu. Získat pozitivní int. Na levé straně jeho slovo je slovo int. Co to má znamenat si o tom myslíš? Dosud jsme viděli hlavně neplatné. To jo? Diváků: Je to typ proměnná, která se ptáte. Reproduktor 1: Jo, je to ten typ, dovolte mi, abych Neřekl variabilní, ale typ hodnoty že se ptám zpět. A opravdu, to je tady intuitivní, snad. Je to tak? Chcete-li získat kladný int, co je to vás chtějí function-- Stejně jako naše dobrovolníci z minulého týdne Ta vám předá zpět kus papíru s int na to? A tak jsme se upřesnit, že takzvaný návrat typ této funkce je získat pozitivní int. Pokud bychom nechtěli, aby to vrátit něco, říkáte neplatné. Pokud chcete, aby se vrátit řetězec, říkáte řetězec. Pokud chcete, aby se vrátit float, říkáte plavat. Ale jediný, kdo to platí zde logicky, protože jsem pomocí get int, i když jsem jej omezovaly na pozitivní hodnoty, je vrátit int. Tak naopak, co to znamená že je tu prázdno v závorce? Co závorky obecně definovat? To jo? Diváků: To znamená, že funkce je není vlastně marně. Reproduktor 1: To znamená, že funkce je není vlastně dostat to, co? Diváků: Vstup. Reproduktor 1: Vstup, vůbec. Takže opravdu, pokud závorka Zde zadáte neplatné, to jen znamená, že nechci žádný vstup. Budu jednat s problémem sám. A opravdu, vy nemusíte řekni si pozitivní int nic. Stačí říct, dostat pozitivní int, a že funkce zhasne a dělat svou věc. Ale tam byl malý trik jsem Hráli zde celou tuto dobu aby se ujistil, tento kód je sestaven. Všimněte si, že int-- dostat pozitivní int void-- je vedením 27. Ale z nějakého podivného důvodu zdánlivě to je také tady na lince 16. A jen pro jistotu budu opakovat to tak je to naprosto identické. A já jsem řekl prototyp s trochu jednořádkový komentář. Co se stane, když odstraním, že, a Nyní spusťte, aby funkce 1, zadejte. Jejda. Počkej chvíli. Kde je moje karta? Huh? Standby. Proveďte funkce 1. Tam jedeme. DOBŘE. Copak chytá správně. Takže si myslím, že je to trochu bug tady, kde si nejsem vidění na název záložky v této chvíli. Takže to, co se tady děje? Implicitní deklarace funkce získat pozitivní int je C99 neplatný. Takže znovu matoucí. Takže to, co je to svědčí o? No, to ukáže, že C je docela hloupé. No, je to programování jazyk, nebo spíše kompilátor je. To ví jen to, co máte učil ji, a je to jen bude něco vědět pokud ji učil předtím. Jinými slovy, v hlavní v této chvíli, já jsem pokusu o volání funkce volal získat pozitivní int. Ale kompilátor nebude si uvědomit, že dostat pozitivní int existuje do potrubí 26. A tak to, co dělá, je jen kompilátor Chyby, jakmile se dostane do řádku 17, říká implicitní prohlášení o získání pozitivního int, který je jen fantazie způsob, jak říkat, nemám víte, co dostanete pozitivní int je dosud. Jiné jazyky, jako je Java a Python a Ruby může vypadat dopředu. C není. A tak, jak jsme opravit toto je jeden ze dvou způsobů. Buď jeden, v případě, že problém je, že se Pozitivní int nebyl viděn předtím, No, dovolte mi, abych ho jen přesunout až na vrchol. To by tento problém vyřešit. Ale obecně, to je považována za lepší techniku aby váš hlavní funkce u velmi top tak, že člověk čtení vašeho kódu ví, co program dělá, proto, že hlavní není pohřben všechny jak ve spodní části, nebo ve středu. Je to na samém vrcholu. Tak, že necítí ideální. A můžete skutečně dostat do situace, kde pokud volání funkcí další, které vyžaduje další, se můžete dostat do problému, kdy ani jeden mohou jít nad druhým, logicky. Je to prostě není možné. A tak se způsob práce kolem je to jen vzít Podpis funkci, takže se speak-- první řádek, kde je declared-- a jen kopírovat, vložit jej u top, ale ne s kudrnatými braces-- Jen se středníkem. Je to jako malý náznak z toho, co má přijít. A ve skutečnosti, všechny tyto době, kdy Viděl věci, jako standardní io.h a cs50.h, podobně, v těch dot h soubory jsou tam další prototypy. A my budeme vidět, že zanedlouho. Takže ve zkratce, když máte program v souboru s více funkcemi Kromě hlavní, skoro vždy chtějí, aby je deklarovat jen tím, že způsob jejich nejprve linka, následuje středník, na samém vrcholu části souboru. To bylo hodně najednou. Nějaké otázky? Nějaké otázky? Dobře. Takže pojďme dál pak na něco jako kašel. Aha. Jak přiléhající. Dobře. Kašel. Takže tady je c realizace programu jsme se druhý den v Scratch, že jen velmi prostě jen říká kašel, kašel, kašel. Dobře. A někdo řekl pár dny, že je tu způsob čištění tento kód do již. Dobře? Jakmile jste kopírování a vkládání pravděpodobně špatný design. Nejméně jednou se dostaneme na čtyři nebo pět nebo 20 kašle, to je špatná praxe. Právě jsme se držet kopii, vkládání. Co je samozřejmé řešení k čištění tohoto programu up? Diváků: Loop. Reproduktor 1: Jo. Takže pomocí opakování. A můžeme použít pro-smyčky, chvíli smyčka, libovolný počet přístupů. A opravdu, to je to, co děláme v jednom verzi zde. Já jsem místo toho přepsat ji ve verzi jednoho z cough.c že je jen kašel v rámci pro-smyčky. Dobře, ale je tu příležitost nyní druhu startu navrhovat to trochu více jako ponaučení jsme učili před chvílí, což je tohle-- předpokládám, že jsem chtěl k vytvoření funkce nazývá kašel, uvažujme jen na chvíli co to bude vypadat. Takže pokud chci něco ke kašli, já jen potřebuji použít tiskové f uvnitř funkce. A skutečně jsem. A ve skutečnosti, to vše čas, kdykoliv budete tisk něco obrazovky, programátor by volal, že vedlejší efekt. To nejsem já podával zpět někdo hodnota. To jsem já, přičemž některé akce to by mohlo být vizuálně zřejmé. Ale tato funkce kašel, to vrátit cokoliv založen na jeho prvním řádku? Ne, protože jeho návratový typ je neplatné, což znamená jen to není mi podával nic zpátky. To by mohlo být něco dělat vizuálně, ale to mi podával zpět kus papíru, jako minulý týden. Má to potřebovat žádný vstup? Ne. A tak to je neplatný i zde. Takže i toto je druh over-engineering tento problém. Je to tak? Jsem udělal program více komplexní, více řádků kódu, Nemám dělal to některý více funkční, ale toto by byla odrazovým můstkem, Možná, pro širší kontext s složitější kódem. Ale co to? Co jsem done-- právě pohlédl na to bez pohledu na komentář na samém vrcholu file--, co mají Zásadně jsem tady udělal s mým kašel implementace, která je něco jiného? Jo, v zádech? Diváků: Ať je to, takže můžete mají charakter vypnout. Reproduktor 1: Jo. Takže to cítí docela hezké. Je to tak? Je to jako přidání funkce do svého Program nebo vaše funkce, v tomto případě. Je to stále vrátí nic. To by mohlo mít vizuální vedlejší účinky, protože je to volá tiskový f. Ale teď jsem parametrized funkce, která znamená, že jste zadali vzít vstup typu int a nazývat to n, ale to bych mohl říkat, co chci. Ve skutečnosti je to může být jen časy být dokonce více explicitní. A pak jsem mohl jen změnit zde. Ale jde o to, že to je, jak jsem vytvořit funkci, která vezme vstup. A pokud si vzpomínáte mizerný přes snad online v jednom z Walk-průchodek se Čtvrtý a poslední příklad kašel, si všimnete, tady jsem zobecnit můj kód further-- trochu roztržitý dále. Stejně jako kašel a kýchnutí, oba jsou asi jako říct, něco, nebo dělat nějaký druh zvuku. Uložte by odpovídající Scratch blok. A tak to, co jsem dělal v této verzi, který můžeme právě pohled na, je kašel je jako říkat, [kašel], kašel, a mezitím, kýchání je jako říkat, [ACHOO]. A tak jsem zobecnit provádění těchto Od této chvíle se provádí Tato kmenová funkce, říkat, což je zajímavé pro dnešní účely jen proto, že stále nemá návratový typ. Ale kolik vstupy to má? Diváků: Two. Reproduktor 1: Two. A tak pokud chcete trvat dva argumenty, Jen oddělte je čárkou. A pokud chcete, aby pak volání této funkce, Všimněte si, že jste právě volejte řekněme, cituji, konec citátu, Jako první argument, časté n, pro druhý argument. Takže znovu, jen musíme teď stavební kameny tak, že můžeme vlastně realizovat některé z našich vlastních funkcí. Dobře. Jakékoli otázky týkající se těchto? Takže teď pojďme sloupněte vrstvu, pokud tak. A cíl, nakonec, je příští týden problém set bude na cryptogrophy-- umění kódování informace. A zvláště, informace tě bude šifrování nebo dešifrování bude textu. A tak ten druh zve Otázkou dnes podobně dobře, co se děje pod kapotou s textem mimo ASCII z týdne nula, a jak můžeme vlastně začne manipulovat s ním? Takže tady je Zamyla jméno. A v textu, které by mohly být zadány do jako funkce GET řetězce. A od této chvíle, když vidíte string jako tohle-- Z-A-M-Y-L-je-- začít přemýšlet o tom, jako by každý z těchto znaků je v krabici jejího vlastní. A opravdu, za týden nebo tak to čas, přičemž každá z těchto krabic bude reprezentovat velmi specificky blok memory-- sousto paměti. Takže každý z těchto písmen, nakonec, bude reprezentovat 8 bitů. A my budeme skutečně vidět, co se děje Na pod pokličku v mém počítači. Ale za to, že postačí stačí se podívat na Zamyla touto optikou, přičemž každý z tato písmena je v jeho vlastním poli. A dost pěkně v C můžeme přístup každé z těchto krabic přímo. Takže pokud chcete získat první Dopis jejího jména, super snadné v C. Pokud chcete získat poslední Dopis, super jednoduché, jak dobře s kusem novou syntaxí. Takže budu pokračovat do CS50 IDE a otevřít řetězec nulový bod C. A v tomto případě, je zde pár nových věcí děje. Takže nejprve v řadě 19, máme viděli tuto before-- get řetězec. Takže stejně jako rychlou kontrolu sanitačního, kdyby někdo mohl nabídnout až slovně vysvětlení laik ze dne co se děje v řadě 19. Stejně jako právě to přeložit do Angličtina, že spolubydlící není CS50 by mohl rozumět. To jo. Diváků: Mít uživatelského vstupu A řetězec a uložit jej do variabilní s. Reproduktor 1: Dobře. Mají vstupu uživatele řetězec a uložit je v proměnné s. To je skvělé. A tak na pravém side, říkáme get řetězec. To vrací hodnotu že nedostal přiděleno z pravé strany na levou ruku strana do proměnné s názvem S, která je určen k ukládání řetězec. Přesně tak. Takže teď potrubím 22, per komentář na řádku 21, samozřejmě vytiskne tento řetězec jeden znak za řádek. Ale jak? Takže v první řadě, jsme inicializovat jsem se 0. A pak jak se dostaneme do konec Zamyla jména? No, na konci roku Zamyla jméno, mohl bych ručně zadat v poslední znak její jméno nějak, nebo počet na to. Je to tak? Pokud bychom se vrátit here-- Z-A-M-L-- Y-L-je--, takže jsem mohl psát. Co je index Poslední písmeno Zamyla je? Pokud je to 0-- mluví se jako programmer-- 0, 1, 2, 3, 4, 5, I heard-- tak opravdu, poslední písmeno V Zamyla jménu je šestý, ale pokud budeme počítat od 0, že to bude číslo 5. Takže mějte na paměti, že zde. Ukazuje se, že je funkce v C zavolal strlen, a zpět v den a k tomuto dni ještě, mnoho programátorů rozhodnete synchronizovat jména pro jejich funkce, které znějí jako slova že se snaží říct. Takže strlen je délka řetězce. A tak to, co by se délka řetězce S vrátí, až Zamyla je vstup? Diváků: Five. Reproduktor 1: Z-A-M-Y-L. Six. Je to tak? Jaká je délka Zamyla jména? Je to tak? A právě ve skutečnosti, šest písmen. Je to tak? A tak co to znamená pro naši smyčky? Chystáme se jít od 0 až šest, který se chystá dát nám pět iterací. Co budeme dělat na každé iteraci? No, procento C, někdo odhadoval, že druhý den, znamená zástupným symbolem pro co? Diváků: Char. Reproduktor 1: Jen char. Takže jediný character-- ne více znaků, jako řetězec. A pak tady je nová řada že máme vytisknout. A pak tady je nová syntaxe. Chcete-li vytisknout i-tého znak v řetězci S, abych tak řekl, můžete jednoduše říci, Název řetězce S, a pak otevřete hranatou závorku, a zavřel hranatou závorku, s i prostředek. A je to docela hezké, že to trochu vypadá jako čtverec stejně jako na náměstích, v nichž je Zamyla znaky existují na tamté obrázek. Takže když jsem se vlastně spustit tento Nyní se podívejme, co se stane. Udělat řetězec 0 dot lomítko Řetězec 0, a pak jsem chystá zadat Zamyla jménu. Neexistuje žádná výzva, protože jsem neměl používejte tiskové f, ale to je v pořádku. Já jen vím, co mám dělat. A skutečně, to vytiskne Zamyla jméno, na každý řádek jednu. Teď buďme trochu lehkomyslný. Předpokládejme, že jsem nevěděl, o strlen a já jsem přišel, v pořádku, nikdo to bude mít jméno větší než jako 50 znaků. Pojďme dál a překompilovat to a spusťte jej, a poté zadejte Zamyla znovu. Logicky, co je Program bude snažit k tisku? Z-A-M-Y-L-A pak, jako 45 neznámé bajtů paměti. A skutečně, budeme vracet k této myšlence paměti. Ale jen logicky, pokud Zamyla jméno je tak dlouho, podle obrázku tady, co říkáme je pokračovat v tisku, pokračovat v tisku, mějte tisk, pokračovat v tisku, pokračovat v tisku, celou cestu až do 50. charakter, což kdo ví, co se bude dít. Takže pojďme vlastně se podívat. Pojďme zadejte Zamyla. Zajímavé. Měli jsme štěstí. Jen celá parta bílé místo. Aha. Je tu ještě jedna funky znak. Vypadá to trochu jako podivný otázka označit tam, ale tam je Zamyla jméno. Pojďme opravdu nezodpovědné. Co kdybychom vytisknout 500 blokuje do neznáma? Pojďme dál a dělat to jak dobře a potom znovu spustit. A pojďme na celou obrazovku, protože musíme vidět více prostoru. Zamyla. Mám opět štěstí. Dare dostaneme víc lehkomyslný? Pojďme víc lehkomyslný. 50,000 znaky. To je nejvíce rozhodně není dobrý nápad. Dobře. Proveďte řetězec 0. To bude naše poslední demo. Zamyla. Uff. Uff. DOBŘE. Takže moje paměť je opravdu prázdná právě teď, což je vlastně trochu pohodlnější. Snažím se dostat to-- v pořádku. A teď jsem prostě jít dostat bezohledný. 500000. Make-- pojďme plnou-obrazovku to. Enter. Zamyla. Tam jedeme. Nemám ponětí, co to Je, ale zní to špatně. Dobře. A ve skutečnosti, brzy, pokud jste mezi Šťastné nemnoho v úředních hodinách a v problému nastavit jednu, vás může velmi dobře setkat toto. Porucha Segmentace vlastně dělá mají dobře definovaný význam. Znamená to nějaký omyl vztahující se k segmentu paměti. A v Laicky řečeno, to znamená, že jsme se dotkli memory-- jsme použili RAM v mém počítači že bych neměl přístup. A to je to, co je oba výkonné a také nebezpečné o C, je, že jste skutečně mají neomezený přístup na celý rozsah paměti programu nebo bajtů nebo RAM, konkrétněji. Takže i když Zamyla jména je dlouhá pouze šest znaků, Pořád můžu jít kamkoliv v paměti chci. A jako stranou, pokud jste někdy četl nějaký článek v průběhu let o některých serveru nebo nějaký program prasklé nebo dostat naboural to je využili něco volal buffer overflow exploit, že budeme ve skutečnosti mluvit o tom, za pár týdnů, to je obecně odkazuje na nějak podvádět počítač do pořádku za hranice paměti že by měl mít, a najít něco šťavnaté v tom, že memory-- heslo, možná cesta obcházení nějaké sériové číslo zkontrolovat, nebo jen obecně schopni přimět počítač vykonávající kód, který nebyl určen. Ale pojďme se vrátit do reality na chvilku kde tento program byl implementován s strlen, a zavést jednu věc tady. Co je nového u těchto špičkových tří řádků? Takže řetězec tečka h. Ukázalo se, že je to knihovna s názvem String Dot H, nebo řetězec Knihovna, jejíž soubor záhlaví, abych tak řekl, je řetězec tečka h, který mi dává Přístup k této funkci strlen. Pokud pominu to, že kompilátor je bude křičet na mě v nějaké formě. Ale víte co? A teď pojďme opravdu nuancí. V souladu 22, je tu něco, co druh z inefficient-- špatně navržený, arguably-- o tomto řádku kódu. Vzpomeňte si na to, jak pro-smyčky jsou implementovány a jaké kroky se to stalo znovu a Znovu a again-- inicializace, stav, kód, který dostane proveden, pak přírůstek nebo změna, pak se podmínka, pak kód, pak je změna, pak stav, pak je kód, pak je změna, a tak dále. Takže to, co by mohlo být trochu znepokojující nebo tady špatně udělal? Jo, v modré barvě. Publikum: strlen je volal mnohokrát. Reproduktor 1: Jo. Tak strlen se nazývá mnohokrát, ale to, co je délka Zamyla jména na Poprvé smyčky provede? Diváků: Six. Reproduktor 1: Six. No, a co je délka jejího jména podruhé kód spustí? Diváků: Six. Reproduktor 1: Dobře. Pořád je to šest. Je to tak? Zarla jméno nemá změnily, i když se dívám pouze na část dopisů v jejím jménu. A tak skutečnost, že jsem skutečně nejsem dotazem na tuto otázku, co je délka Zamyla, co je délka z Zamyla, co je délka Zamyla, šest samostatných časy, nebo seven dokonce, je prostě hloupé, protože to je neměnná, že odpověď. A tak to, co jsem mohl vlastně udělat, je tohle-- v řetězci jednom Mám zde okrajově lepší verzi. There-- whoops-- řetězec dvou mám okrajově lepší verze, kde Já tohle-- místo jen inicializaci i na 0, i já s čárkou deklarovat druhou proměnnou s názvem n- Já nemusím říkat int znovu. Bych neměl, ve skutečnosti. Ale já říkám n. A pak jsem se inicializovat n strlen n, tak, že nyní kolikrát to strlen vykonán celkem? Jen jednou. A tak to je to, co máme na mysli dříve o lepším provedení. Ve skutečnosti, jakmile je váš kód je správný, vracet a promýšlení, jsem s použitím tak málo, paměť nebo jako pár sekund nebo milisekund počítačového času as možné realizovat nějaký problém? A budu posouvat up a jen zmínit že tam je tato zmínka null v této verzi, ale vrátíme se, že zanedlouho. Protože teď, pojďme se podívat na to, kde to bude, aby nás vedl. Takže člověk, se ukazuje, že Nyní, když máme možnost se podívat na jednotlivé znaky, můžeme využít něco od týdne 0, která byla velmi tajemný a nějak nezajímavé v té době. Ale teď, a to zejména, když jsme dostat se do kryptografie v týdnu, že to bude dost silný. Ukazuje se, že některé údaji types-- ints a plave a znaky a řetězce a jiné things-- některé z nich může být velmi snadno převést na jinou. Například, když jsme spolu mluvili o ASCII nějaký čas ago-- tady Velká písmena přes M, tečka, tečka, dot-- jsme říkali, že tam je mapování mezi těmito písmeny a čísly. A ve skutečnosti, je pravdou, pro malá písmena, stejně. Malé písmo a je 97, hlavní město a je 65. A je tu číslo v ASCII, což je právě tato mapování systém pro všechny ty ostatní dopisy. Takže co to znamená? No, já jdu dál a otevřená Real rychle něco, co nazývá ASCII 0, z nichž většina je komentář. A opět on-line můžete vždy pohled přes komentáře. A podívejte se, co to bude dělat. Tak je to tu hlavní funkci. Já jsem pevně čísla jen pro teď, protože vím, co dělám. Vím, co chci vidět zde. A já jsem inicializuje I 65 let. A já jsem počítal nahoru přes 26 písmen celkem. A co mám vytisknout jeden řádek najednou pokud můžete interpretovat Tato zkušenost zvýraznila linku? Co se vytiskne? To jo. Diváků: Chystáš vytisknout dopis, který odpovídá na mapu z Dopis hodnoty a celočíselná hodnota? Reproduktor 1: Přesně tak. Chystám se vytisknout dopis odpovídající celé číslo, a naopak, a to následovně. No to, někdo řekl dříve, je jen zástupným symbolem pro char. Je to ještě je. To, samozřejmě, je zástupný Aby byla int-- není nový řádek. A teď si všimnout, můj první hodnotu, která Jsem zasunutí pro tento zástupný symbol není jen já říkám, v závorce, char I, který v závorkách je char říká kompilátoru, léčit I ne jako to, co je to, které je číslo. Považujte to za skutečné postavy. Vzhledem k tomu, druhá hodnota jsem ucpávání in-- Já-- by měl být jen číslo. Takže když jsem zkompilovat program-- tak toto je udělat ASCII 0, dot lomítko ASCII 0-- jsem jen získat Tento šikovný malý graf, který Ukazuje mi všechny možné mapování, aniž by si to skrz nebo na to přijít sám. A já jsem také vytištění, Všimněte si malá písmena, proto, že pár řádků později jsem také vytisknout toto mapování stejně, což je jen říkají, že jakmile pochopíte, co se děje pod kapota, můžete automaticky konvertovat tam a zpět. A ve skutečnosti, pokud někdo z vás kdy udělal to na základní škole nebo slyšel o někom myticky přijetí poznámku a její předání k jeho nebo její přítel ve třídě, ale míchaná dopisy od podobné jako ve stane B, a B se stává C, nebo tak něco složitější než to, dobře, jak byste jít o kterým se provádí, že jako dítě? No, to prostě vím, Â B, B se stane C, ale matematicky, co se ten kluk dělá? Co jste přidání do každého dopisu? Účinně, 1. Takže když změníte A do místa B, to je něco jako měnící se 65 až 66, což znamená, že matematicky jen přidat 1. A tak pokud jste byli realizovat ten malý klamný technika pro učitele v kódu, budete mohli dělat přesně to, že právě přidáním jedno písmeno společně. Takže než dlouhý, my jsme uvidí, jak mohou využít, které skutečně skutečně tahanice a dešifrovat informace. Do té doby, vím, že jsme začali představit pár jiných knihoven here-- Řetězec jeden dnes. A velmi užitečné stránky doufejme, že zjistíte, se nazývá reference.cs50.net, který pedagogičtí pracovníci dali dohromady, takže pokud chcete vyhledat jak strlen práce, můžete začít psát Jméno Funkce je, klepněte na tlačítko strlen tam, a pak méně komfortní vysvětlení se chystá objevit. Nebo chcete-li úředník Linux-založené vysvětlení, můžete klepnutím na tlačítko více pohodlný v pravém horním rohu, a to bude prezentovat stejné informace, ale ve složitějších podmínek. To je užitečným zdrojem pro skutečně vědět, co všechno dělá. Příště budeme se podívat na Ovaltine a další, a představit sami sebe do světa kryptografie. Do té doby, uvidíme později tento týden. A teď, Colton Ogden. Uvidíme se ve středu. [Přehrávání hudby] [Přehrávání hudby] Reproduktor 1: Co [Píp] děláš? Reproduktor 1: Já jsem jíst svůj dezert? Jak se vám to jíst? S rukama? [Přehrávání hudby]