[MUSIC PŘEHRÁVÁNÍ] David J. Malan: Dobře. To je CS50 a to je začátek týdne 2. A budete připomenout, že v průběhu minulost pár týdnů, jsme se zavádí počítače věda a na oplátku, programování. Začali jsme příběh cestou Scratch, že grafický jazyk z Media Lab MIT. A pak v poslední době, minulý týden, my jsme zavést higher-- A jazyk nižší úrovně známo jako C, něco, co je čistě textové. A skutečně, naposledy jsme prozkoumal v tomto kontextu množství pojetí. To, odvolání, byl velmi První program jsme se zabývali. A tento program zcela jednoduše, vytiskne "Hello, World". Ale je tu tolik zdánlivé magie děje. Tam je to #include s těmito hranatých závorkách. K dispozici je int. K dispozici je (void). Je tu závorky, složené závorky, středníky, a ještě mnohem více. A tak připomenout, že jsme zavedli Scratch takže jsme mohli, v ideálním případě vidět minulost že syntax, věci, které to opravdu není vše, co intelektuálně zajímavé, ale brzy Je absolutně, trochu složitější zabalit svou mysl kolem. A skutečně, jedno z nejčastějších věci brzy v programovacím třídě, zejména pro ty méně pohodlná, je dostat frustrovaný a zakopl zvýšil o určitou syntaktickou Chyby, nemluvě o logické chyby. A tak mezi našimi cíli Dnes, ve skutečnosti, bude bude vybavit vás s některými Problém-řešení techniky, jak lépe řešit problémy sami ve formě ladění. A budete připomenout také, že prostředí, které jsme uvedli Naposledy byl nazýván CS50 IDE. To je webový software, který umožňuje naprogramovat v oblaku, tak říkajíc, při zachování všech vašich soubory dohromady, jak jsme znovu dnes. A připomínají, že jsme revisited těchto tématech zde mezi nimi funkce, a smyčky, a proměnné a booleovské výrazy, a podmínky. A skutečně málo více než my přeloženo ze světa Scratch do světa C. Ale základním stavebním bloky, tak říkajíc, byly opravdu stále stejný minulý týden. Ve skutečnosti jsme opravdu jen měli jiný kousek skládačky, chcete-li. Místo toho, že fialová uložit blok, my místo toho se printf, která je Tato funkce v C, které umožňuje tisknout něco a formátovat ho na obrazovce. Zavedli jsme CS50 Knihovna, kde vás Nyní vám k dispozici get_char, a get_int a get_string, a několik dalších funguje jako No, přes který můžete získat vstup Z uživatelského vlastní klávesnice. A také jsme se podívat na věci jako these- bool a char, a double, float, int, long_long řetězec. A je tu i jiné datové typy v jazyce C. Jinými slovy, když deklarujete proměnná pro uložení nějakou hodnotu, nebo při implementaci funkce který vrací nějakou hodnotu, můžete určit, jaká typ hodnotu, která je. Je to řetězec, jako když posloupnost znaků? Je to číslo, jako celé číslo? Je to s pohyblivou řádovou čárkou hodnota, nebo podobně? Takže v jazyce C, narozdíl od nuly, jsme vlastně začal specifikovat, jaký druh dat jsme se vraceli nebo používání. Ale samozřejmě jsme také dostali do některé základní limity na počítači. A zejména, Tento jazyk C, recall že jsme si prohlédli integer overflow, realita že pokud máte jen omezené množství paměti nebo konkrétně o konečné číslo bitů, můžete počítat tak vysoko pouze. A tak jsme se podívali na tento příklad zde přičemž čítač v letadle, ve skutečnosti, pokud běží dostatečně dlouho by přetékat a vést k softwaru skutečný fyzický potenciál chybě. Také jsme se podívali na plovoucí bod nepřesnost, realita že pouze s omezeným počtem bitů, ať už je to 32 nebo 64, můžete zadat pouze tolik čísel Po desetinnou čárkou, po které se začnou se dostat nepřesný. Tak například jedna třetina v world tady, v našem lidském světě, jak víme, je jen nekonečný počet z 3s za desetinnou čárkou. Ale počítač nemůže být nutně představují nekonečný počet čísel Máte-li povolit pouze to nějaký omezené množství informací. Takže nejen že vám vybaví s větší sílu, pokud jde o tom, jak byste mohli vyjádřit sami klávesnice, pokud jde o programování, jsme také omezena co můžete skutečně dělat. A skutečně, může chyby a omyly vyplývají z těchto druhů problémů. A skutečně, mezi tématy dnes se bude tématy, jako je ladění a vlastně při pohledu pod kapotu na to, jak byly zavedeny věci minulého týdne jsou skutečně realizovány takže si lépe pochopit, jak Schopnosti a Omezení jazyka jako je C A ve skutečnosti, budeme oloupejte vrstev z nejjednodušších datové struktury, něco, co nazývá pole, které Scratch stane nazývat "seznam". Je to trochu liší v této souvislosti. A pak budeme také představit jeden z První z našich problémů s konkrétní doménou V CS50, svět kryptografie, umění zakódování nebo šifrování informace, které můžete posílat tajné zprávy a dekódovat tajné zprávy mezi dvěma osobami, A a B. Takže předtím, než jsme přechodem v tomto novém světě, zkusme vybavit vás s některými techniky, pomocí kterého můžete odstranit nebo snížení alespoň některé z frustrace že jste pravděpodobně setkal přes samotnou minulého týdne. Ve skutečnosti, před vámi jsou některé z such-- vaše první problémy v C a šance jsou, pokud jste stejně jako já, poprvé pokusu o zadání out program, i když si myslíte, že logicky Program je velmi jednoduchý, můžete velmi dobře narazil do zdi, a kompilátor nebude spolupracovat. Iniciovat nebo Clang nebude skutečně dělat svou příkazy. A proč by to mohlo být? Dobře, pojďme se podívat na, Možná, jednoduchý program. Chystám se jít dopředu a uložit na tuto Soubor s názvem záměrně buggy0.c, protože vím, že ji být vadný předem. Ale já nemusí uvědomit, že pokud toto je první, nebo druhý nebo třetí programu že jsem vlastně dělat sám. Takže já jdu dopředu a typ out, int main (void). A pak uvnitř mých složené závorky, velmi povědomý ( "Dobrý den, world-- zpětné lomítko n ") - a středník. Jsem uložení souboru. Teď se jdu dolů do mého okna terminálu a typ make buggy0, protože, opět, jméno souboru je dnes buggy0.c. Tak píšu, aby buggy0, Enter. A, ach, bože, převezme zpět od minule že žádné chybové zprávy je dobrá věc. Takže žádný výstup je dobrá věc. Ale tady mám jasně někteří množství chyb. Takže prvním řádku výstupu Po zadání aby buggy0, recall, je poměrně podrobný výstup řinčení je. Pod kapotou CS50 IDE je konfigurován používat spoustu Možnosti s tímto kompilátorem takže nemáte přemýšlet o nich. A to je vše, co první řádek znamená, že začíná s Clang. Ale po tom, problémy začít dělat jejich vzhled. Buggy0.c na lince 3, charakter 5, tam je velká červená chyba. Co to je? Implicitně deklarovat funkci knihovny printf s typem int (const char *, ...) [-Werror]. Myslím, že to velmi rychle dostane velmi tajemný. A jistě, zprvu pohled, nebudeme očekávají, že budete rozumět celistvost této zprávy. A tak jedna z lekcí pro dnes se děje bude se snažit, aby si všimnout vzory, nebo podobné věci, chybám byste mohli mít setkal v minulosti. Tak jen ať to šprýmaři odděleně ta slova, která vypadají obeznámen. Velký, červená chyba je jednoznačně symbolický něco je špatně. implicitně deklarování Knihovna funkce printf. Takže i když nemám úplně pochopit, co implicitně deklarovat funkci knihovny znamená, že problém jistě týká printf nějak. A zdroj tohoto problému má co do činění s prohlášením. Deklarovat funkce je zmínku to poprvé. A jsme použili terminologii minulý týden deklarování prototyp funkci je, buď jeden řádek v horní části vlastní soubor nebo v tzv souboru záhlaví. A v jakém souboru udělal říkáme minulý týden, že printf je citát, unquote, prohlásil? V jakém souboru je jeho prototyp? Takže pokud si vzpomínáte, úplně první věc, kterou jsem napsaný, téměř každý program, poslední time-- a náhodou před chvílí začal zadáním myself-- Byl to jeden here-- hash-- #include