[MUSIC PLAYBACK] David J. Malan: Dobre. To je CS50 a to je začiatok týždňa 2. A budete pripomenúť, že v priebehu minulosť pár týždňov, sme sa zavádza počítača veda a na oplátku, programovanie. Začali sme príbeh cestou Scratch, že grafický jazyk z Media Lab MIT. A potom v poslednej dobe, minulý týždeň, my sme zaviesť higher-- A jazyk nižšej úrovne známe ako C, niečo, čo je čisto textové. A skutočne, naposledy sme preskúmal v tomto kontexte množstvo poňatie. To, odvolanie, bol veľmi Prvý program sme sa zaoberali. A tento program úplne jednoducho, vytlačí "Hello, World". Ale je tu toľko zdanlivé mágia deje. Tam je to #include s týmito hranatých zátvorkách. K dispozícii je int. K dispozícii je (void). Je tu zátvorky, zložené zátvorky, bodkočiarkami, a ešte oveľa viac. A tak pripomenúť, že sme zaviedli Scratch takže sme mohli, v ideálnom prípade vidieť minulosť že syntax, veci, ktoré to naozaj nie je všetko, čo intelektuálne zaujímavé, ale čoskoro Je absolútne, trochu zložitejšie zabaliť svoju myseľ okolo. A skutočne, jedno z najčastejších veci čoskoro v programovacom triede, najmä pre tých menej pohodlná, je dostať frustrovaní a zakopol zvýšil o určitú syntaktickou Chyby, nehovoriac o logické chyby. A tak medzi našimi cieľmi Dnes, v skutočnosti, bude bude vybaviť vás s niektorými Problém-riešenie techniky, ako lepšie riešiť problémy sami vo forme ladenie. A budete pripomenúť tiež, že prostredie, ktoré sme uviedli Naposledy bol nazývaný CS50 IDE. To je webový softvér, ktorý umožňuje naprogramovať v oblaku, tak povediac, pri zachovaní všetkých vašich súbory dohromady, ako sme znovu dnes. A pripomínajú, že sme revisited týchto témach tu medzi nimi funkcie, a slučky, a premenné a booleovské výrazy, a podmienky. A skutočne málo viac než my preložené zo sveta Scratch do sveta C. Ale základným stavebným bloky, tak povediac, boli naozaj stále rovnaký minulý týždeň. V skutočnosti sme naozaj len mali iný kúsok skladačky, ak chcete. Namiesto toho, že fialová uložiť blok, my namiesto toho sa printf, ktorá je Táto funkcia v C, ktoré umožňuje tlačiť niečo a formátovať ho na obrazovke. Zaviedli sme CS50 Knižnica, kde vás Teraz vám k dispozícii get_char, a get_int a get_string, a niekoľko ďalších funguje ako No, cez ktorý môžete získať vstup Z užívateľského vlastnej klávesnice. A tiež sme sa pozrieť na veci ako these- bool a char, a double, float, int, long_long reťazec. A je tu aj iné dátové typy v jazyku C. Inými slovami, keď deklarujete premenná pre uloženie nejakú hodnotu, alebo pri implementácii funkcie ktorý vracia nejakú hodnotu, môžete určiť, aká typ hodnotu, ktorá je. Je to reťazec, ako keď postupnosť znakov? Je to číslo, ako celé číslo? Je to s pohyblivou rádovou čiarkou hodnota, alebo podobne? Takže v jazyku C, narozdiel od nuly, sme vlastne začal špecifikovať, aký druh dát sme sa vracali alebo používanie. Ale samozrejme sme tiež dostali do niektoré základné limity na počítači. A najmä, Tento jazyk C, recall že sme si prezreli integer overflow, realita že ak máte len obmedzené množstvo pamäte alebo konkrétne o konečné číslo bitov, môžete počítať tak vysoko iba. A tak sme sa pozreli na tento príklad tu pričom čítač v lietadle, v skutočnosti, ak beží dostatočne dlho by pretekať a viesť k softvéru skutočný fyzický potenciál chybe. Tiež sme sa pozreli na plávajúce bod nepresnosť, realita že iba s obmedzeným počtom bitov, či už je to 32 alebo 64, môžete zadať iba toľko čísel Po desatinnou čiarkou, po ktorej sa začnú sa dostať nepresný. Tak napríklad jedna tretina v world tu, v našom ľudskom svete, ako vieme, je len nekonečný počet z 3s za desatinnou čiarkou. Ale počítač nemôže byť nutne predstavujú nekonečný počet čísel Ak máte povoliť iba to nejaký obmedzené množstvo informácií. Takže nielen že vám vybaví s väčšiu silu, pokiaľ ide o tom, ako by ste mohli vyjadriť sami klávesnica, pokiaľ ide o programovaní, sme tiež obmedzená čo môžete skutočne robiť. A skutočne, môže chyby a omyly vyplývajú z týchto druhov problémov. A skutočne, medzi témami dnes sa bude témami, ako je ladenie a vlastne pri pohľade pod kapotu na to, ako boli zavedené veci minulého týždňa sú skutočne realizované takže si lepšie pochopiť, ako Schopnosti a Obmedzenie jazyka ako je C A v skutočnosti, budeme olúpte vrstiev z najjednoduchších dátové štruktúry, niečo, čo nazýva pole, ktoré Scratch stane nazývať "zoznam". Je to trochu líši v tejto súvislosti. A potom budeme tiež predstaviť jeden z Prvý z našich problémov s konkrétnou doménou V CS50, svet kryptografia, umenie zakódovanie alebo šifrovanie informácie, ktoré môžete posielať tajné správy a dekódovať tajné správy medzi dvoma osobami, A a B. Takže predtým, než sme prechodom v tomto novom svete, skúsme vybaviť vás s niektorými techniky, pomocou ktorého môžete odstrániť alebo zníženie aspoň niektoré z frustrácie že ste pravdepodobne stretol cez samotnú minulého týždňa. V skutočnosti, pred vami sú niektoré z such-- vaše prvé problémy v C a šance sú, ak ste rovnako ako ja, prvýkrát pokusu o zadanie out program, aj keď si myslíte, že logicky Program je veľmi jednoduchý, môžete veľmi dobre narazil do steny, a kompilátor nebude spolupracovať. Iniciovať alebo Clang nebude skutočne robiť svoju príkazy. A prečo by to mohlo byť? Dobre, poďme sa pozrieť na, Možno, jednoduchý program. Chystám sa ísť dopredu a uložiť na túto Súbor s názvom zámerne buggy0.c, pretože viem, že ju byť chybný vopred. Ale ja nemusí uvedomiť, že ak toto je prvý, alebo druhý alebo tretí programu že som vlastne robiť sám. Takže ja idem dopredu a typ out, int main (void). A potom vnútri mojich zložené zátvorky, veľmi povedomý ( "Dobrý deň, world-- spätné lomítko n ") - a bodkočiarka. Som uloženie súboru. Teraz sa idem dolu do môjho okna terminálu a typ make buggy0, pretože, opäť, meno súboru je dnes buggy0.c. Tak píšem, aby buggy0, Enter. A, ach, bože, prevezme späť od minule že žiadne chybové hlásenia je dobrá vec. Takže žiadny výstup je dobrá vec. Ale tu mám jasne niektorí množstvo chýb. Takže prvom riadku výstupu Po zadaní aby buggy0, recall, je pomerne podrobný výstup rinčanie je. pod kapotou CS50 IDE je nakonfigurovaný používať veľa Možnosti s týmto kompilátorom takže nemáte premýšľať o nich. A to je všetko, čo prvý riadok znamená, že začína s Clang. Ale po tom, problémy začať robiť ich vzhľad. Buggy0.c na linke 3, charakter 5, tam je veľká červená chyba. Čo je to? Implicitne deklarovať funkciu knižnice printf s typom int (const char *, ...) [-Werror]. Myslím, že to veľmi rýchlo dostane veľmi tajomný. A iste, sprvu pohľad, nebudeme očakávajú, že budete rozumieť celistvosť tejto správy. A tak jedna z lekcií pre dnes sa deje bude sa snažiť, aby si všimnúť vzory, alebo podobné veci, chybám by ste mohli mať stretol v minulosti. Tak len nech to šprýmař oddelene tie slová, ktoré vyzerajú oboznámený. Veľký, červená chyba je jednoznačne symbolický niečo je zle. implicitne deklarovanie Knižnica funkcie printf. Takže aj keď nemám úplne pochopiť, čo implicitne deklarovať funkciu knižnice znamená, že problém iste týka printf nejako. A zdroj tohto problému má čo do činenia s vyhlásením. Deklarovať funkcia je zmienku to prvýkrát. A sme použili terminológiu minulý týždeň deklarovanie prototyp funkciu je, buď jeden riadok v hornej časti vlastný súbor alebo v tzv súbore hlavičky. A v akom súboru urobil hovoríme minulý týždeň, že printf je citát, unquote, vyhlásil? V akom súboru je jeho prototyp? Takže ak si spomínate, úplne prvá vec, ktorú som napísaný, takmer každý program, posledný time-- a náhodou pred chvíľou začal zadaním myself-- Bol to jeden here-- hash-- #include