[Přehrávání hudby] DAVID Malan: Ahoj, všichni. To je CS50 je supersection. Přidělené Sekce nebude spustit další týden. A tak dnes, jsem tady with-- MARIA: Maria. DAVID Malan: --to vlastně se podívat na problém nastavit jednu, kurz je První týdny materiálu, si budete orientovány CS50 IDE, trochu Linux, operační systém, který je běží na IDE, jakož i se podívat na některé z přechodu od nuly do C vedení až do problému nastavit jednu. Takže bez dalších okolků, v problému nastavit jednu, budete mít představil CS50 IDE, který je tento web-based programování prostředí, které používáme, aby psát programy. Je navržen tak, aby vypadat velmi připomínající typického počítače systém používáte operační systém s názvem Linux. Ale je to v tzv mrak, což znamená, že všechny v třídě může skutečně mít jeho nebo její na vlastní účet a použít ji, stejně. Takže většina z vás asi nikdy použity v prostředí systému Linux před nebo možná i příkazový řádek prostředí. A příkazový řádek Prostředí je jiný. Je to všechno textová. Je to všechno klávesové zkratky. A není to Mousing, žádné ikony, bez oken dialog, žádné menu. Je to čistě textový. Takže na první pohled, je to druh ze se cítí jako krok zpět, pokud jde o propracovanosti. Ale nakonec je to hodně silnější, určitě, pro počítačové vědce, nakonec. Takže pojďme se podívat. Tady jsem v CS50.io, přes který můžete se přihlásit do CS50 IDE. A podobně jako v Scratch, je tu tři hlavní oblasti na této obrazovce. Takže na levé straně, máme co bude prohlížeč souborů. A tam je tato složka na top, který je teď prázdný od té doby jsem se zbavil všech mých Soubory před supersection. A to je, kde budeme uložit C soubory, které píšeme. V pravém horním rohu, máme místo, kde všechny naše kódu se dostane v písemné formě. A skutečně, když jsem klikněte na toto Plus, to se chystá dovolte mi, abych si vybrat nový soubor. A tady můžu začít psát kód v C nebo, Opravdu, libovolný počet dalších jazyků. A pak se ve spodní části, kde je říká jharvard @ ide50-- a vaše vůle řekni něco trochu different-- co se to jmenuje? Okno terminálu. To jo. Takže okno terminálu tzv příkazového řádku rozhraní, přes které můžete komunikovat se základním operačním systémem. A teď, budeme aby velmi malé použití tohle-- jen kompilace, podívat se na chybové zprávy, které vidíme, a spouštět naše programy. Ale nakonec, jedeme dělat mnohem více, stejně. A dokonce můžete nainstalovat software a spravovat svůj pracovní prostor v rámci CS50 IDE, stejně. Ale o tom až někdy jindy. Tak pojďme do toho pusťte a psát velmi jednoduchý program, jen projít warm-up hello.c, který je možná nejjednodušší programu můžeme psát. Už jsem otevřel novou kartu. Chystám se jít dopředu a říkají, zahrnují standardní io.h. Pak int main (void). A pak printf ("Hello, world" zpětné lomítko n, blízko citace, zavřít závorek, a středník. Dobře. Takže teď si všimnout moje okno je untitled. Takže jsem velmi rychle se jít do souboru, uložte. A to je důležité, aby Říkám to není "ahoj." Takže velmi častý omyl, a to zejména v problém nastavit jednu, je náhodou jen zavolat své Program "voda" nebo "chamtivý" nebo "Mario" nebo "úvěr", nebo podobně. Ale ve skutečnosti chcete, aby se jisti, že budete mít příponu souboru protože to je jediný způsob, kompilátor a také editor kódu ví, že jste vlastně psaní C kód. Tak nech mě jít dál a klepněte na tlačítko Uložit. A teď taky, co CS50 IDE udělal pro nás je, že je to také syntax zvýrazněný všechno. Tak se to dělá všechno velmi pestrá. A celý účel že není funkční. Je to jen nakreslit oči na koncepčně různé kousky tohoto programu. Tak pojďme do toho a přeložil. A mohu sestavit to v několika způsoby. A v týdnu jedna, old-school způsob, jak jsme to udělali to byl doslova u Command line-- "řinčení hello.c." A pak jsem stiskněte klávesu Enter. A zdánlivě nic neděje V okně terminálu. Ale to, co se změnilo v IDE? Tam, kde se opět IDE prostě znamená, Integrované vývojové prostředí. Je to fantazie způsob, jak říkat toto integrované vývojové prostředí pro vývoj softwaru. Co tedy změnit v uživatelském rozhraní? Co jste si to je něco jiného, ​​Maria? MARIA: Všiml jsem si něčeho pod IDE50 složce tady. DAVID Malan: Jo. Tak tady nahoře, a to nejen máme "hello.c." Máme také "a.out", což je je to za hloupé jméno pro program. Ale ve skutečnosti, to je výchozí název pro Program, když jste právě kompilace kódu a neříkejte kompilátor co soubor na výstup. Takže pokud chci spustit to, myslím, je třeba sdělit compiler-- nebo spíše, musím řekněte pracovní prostor, který jsem chcete spustit program s názvem "a.out." Enter. A je tu "ahoj, svět, "teď" ./ ". je ve skutečnosti důležité. I když normálně my jen napsat názvy příkazů, když je to program, který jsem písemná, vy chcete říct, "./" protože to výslovně říká, Linux že chcete spustit program s názvem "a.out", které je v tomto, kde tečka znamená tento adresář, že jsem v současné době in, což se stává, že je volal pracovní prostor, "a.out. Protože když jsem právě řekl "a.out," Enter, Jdu se dostat "velení a.out ne nalezeno ", protože computer-- proto, že jsem vynalezl "a.out;" nepřišel s computer-- neví, kde ji hledat, i když je to správné pod nosem, abych tak řekl. DOBŘE. Tak jsme mohli to změnit být "řinčet -o ahoj hello.c." A když jsem stiskněte klávesu Enter, jaký program to bude na výstup pro mě? Jaký je název souboru? Jo, v zádech. To je pravda. "Ahoj." Takže "ahoj" bude název programu proto, že jsme použili takzvané linka argument, příkaz, což je jen způsob, jak změnit chování kompilátor skutečně výstup specifický název souboru. A skutečně, když jsem zoom ven a podívat se tady, teď mám nejen "a.out" a "hello.c", ale také "Ahoj," stejně. Takže teď můžu dělat "./hello," Enter. A je tu "Hello, World". Ale lastly-- a to bude nyní konvence používáme v celém semestr, typically-- je můžete také jen říci "dělat ahoj." A skutečně, je to říká, je to do dnešního dne, protože již existuje. Nech mě jít dopředu a odstranit, s Příkaz rm, a to jak "a.out" - a říct: "odstranit pravidelný soubor a.out?" To prostě znamená, že ne jisti, že ji chcete smazat? Jdu říct, že ano. A pak budu odstranit "ahoj", ale ne "hello.c." Budu říkat "ano" výslovně, ale "y" je dostatečná, stejně. A teď si všimnout, jestli jsem typ ls-- Což, vzpomínat, znamená list-- vyjmenovává vše ze souborů v mé složce. A skutečně, když jsem zoom ven a podívat se na levém horním rohu, potvrzuje, že to, co je v této složce, a to i i když je to označeno jako IDE50 tady a nikoliv pracovní prostor, je to jen "hello.c." Takže teď tady dole, pokud I to "dělat ahoj," Enter, teď vidím mnohem delší příkaz, ale propracovanější příkaz, který se děje být užitečný v následujících týdnech přijít. A teď můžu říct, "./hello." Takže pojďme se rychlou prohlídku Příkazy nějaký jiný Linux. Tak proč ne my krok zpět a dokonce podívat se na C více Obecně platí, že přechod od nuly na ° C, a pak uzavřít s pohledem na první problém nastavte v C. V pořádku. Takže budu pokračovat a právě čisté up mé pracovní plochy s Control-L jen udržet obrazovku upraveně. Ale to nemá funkční ovlivnit jinak. Připomeňme si, že jsme viděli Nyní několik příkazů. Takže jsme viděli řinčení, které obecně vy nebudete muset spustit ručně ještě. Budeme místo toho používat make. Ale my jsme také viděli ls, což ukazuje výpis souborů v mém adresáři. A teď, proč je there-- Jsou dva soubory nyní, "ahoj" a "hello.c." Proč je tam hvězda nebo hvězdička po "ahoj"? Co to znamenat, založený o tom, co jsme viděli v jednom týdnu? Co myslíš? Co hvězda znamenat? MARIA: For-- programu "ahoj"? DAVID Malan: "Ahoj *". To jo. Jo, jo? Oh, spustitelný. To je pravda. Tak, že znamená, že "ahoj" je spustitelný. Takže ve skutečnosti, to je důvod, proč Můžu dělat "./hello." Dobře. Takže co jiného můžu dělat tady? No, to dopadá mohu také vytvářet adresáře. Tak nech mě jít dopředu a vytvořit, například, "pset1" adresář. A problém nastavit specifikace bude mít budete dělat přesně to, takže si nemusíte pamatovat dnes. Ale "mkdir pset1" Zdá se, mít žádný dopad. Ale opět, žádná chybová zpráva je obecně dobrá věc. Takže když jsem typ "ls" now-- ah, nyní Mám spustitelný soubor s názvem "Dobrý den," soubor C s názvem "hello.c." A pak koncové lomítko, tak aby mluvit, znamená, že se jedná o adresář. Takže opravdu, teď chci otevřít. A nemyslím si, dvojitým kliknutím na něj, jako v GUI, grafickém prostředí. Místo toho jsem řekl "cd pset1." Enter. Nic zajímavého se zdá, že se stalo s výjimkou mého malého řádku here-- to je Linux je připomenutí mě, kde jsem, tak co složka je otevřená. Je to jen mi říct výslovně na rozdíl od graficky. A když jsem typ "ls," Proč vidím další neprodleně vyzve, myslíte, když jsem se seznam obsahu pset1? MARIA: Pravděpodobně ne mít nic tam. DAVID Malan: Jo. Takže nemáme evidentně vytvořil něco tam Jen proto, že jsem vytvořil adresář. A teď, když jsem chtěl vytvořit file-- pro instance, mohl bych vytvořit nový soubor. A pak bych mohl jít do Uložit a uložte jej jako, jako: "mario.c" pokud děláte Standard Edition pset jedna. A pak, jako každý Mac nebo PC, jen vyberte složku "pset1, Uložit. A nyní soubor je prázdný. Ale pojďme přiblížit znovu na sekundu. Pojďme tady dělat ls. Teď vidíme, "mario.c". Takže je tu pár dalších příkazů, které jsou dobré mít na paměti, než time-- čirý, nebo Control-L je to, co jsem Byl bít; mkdir jsme viděli; rm jsme viděli, také, což je Pro odstranění nebo odstranění souboru. Dejte si pozor můžete also--, a když se podíváte v on-line výukových programů, budete rm -rf je velmi běžný způsob, jak říkat odstraníte složku, která má věci v něm. Stačí být super, super opatrný. -rf znamená rekurzivně smazat, co to je se snažíte smazat a násilně odstranit. Takže rekurzivní znamená, že pokud je to složka s složka se složkou se složkou, odstranit všechny z nich. A násilně znamená, nemají ani ask me ano nebo ne, jsem si jistý? Takže je to super nebezpečný způsob Rychle mazání spoustu věcí. Ale beware-- příliš často dělá neohrožený studentka omylem smazat, řekněme, pset jedním, například. MARIA: A v případě, že právě dělat -r, jdou požádat je o každém jednom souboru. DAVID Malan: Což je mírně nepříjemné. MARIA: Jo. DAVID Malan: Takže to je důvod, proč tak mnoho z nás, já v ceně, jsem ve zvyku používat -rf. Ale je to nebezpečné. Takže kupující na pozoru. A pak mv je druh zajímavě jmenován. Tak to je příkaz tah, který se cítí trochu divný protože můžete skutečně použít k přesouvat soubory z jednoho místa na druhé. Předpokládejme například, že jsem zpackal. Předpokládejme, že jsem vytvořil nový soubor pro pset. A zachránil jsem to jako "greedy.c." Předpokládejme však, že jsem omylem uložit v IDE50-- takže v mém pracovním prostoru samotném a ne v pset1. Můžete vidět, jak mnoho je v levém horním rohu. Tam je "greedy.c." A je tu několik řešení. Takže člověk, mohu použít výborný uživatelsky příjemný způsob, pouhého přetažením. A že by ve skutečnosti tento problém vyřešit. Ale dnes, snažíme se dívat na čím více tajemné, ale účinných způsobů, jak toho dosáhnout. Takže dovolte mi, abych "LS" v pset1. A vidím jen "mario.c." Nech mě jít dál a dělat "cd ..". Takže CD je opět změna adresář. ".." Znamená to, co, i když? Minule jsem řekl, "CD pset1 "jít do pset1. Takže když říkám "cd ..", co mám dělat? Zpět. To jo. Takže to bude tzv rodiče. Přechod o úroveň výš, stejně jako opuštění ze složky. Tak Enter. A skutečně, podívej se, co to udělal. Namísto toho se přestěhoval mě prostě do pracovního prostoru of do pset1, který je v pracovním prostoru. A teď, když jsem typ "LS", je tu celá řada věcí. Tam je "greedy.c". Takže teď dovolte mi použít mV do doslovně přesunout "greedy.c" do pset1. A tak mnoho Linux příkazů fungují přesně takhle. Berou žádné argumenty, nebo se mít jednu Argument nebo berou dva příkazový řádek argumenty a tak dále. A v tomto případě, je to doslovně to, co to říká, když succinctly-- přesunout greedy.c do pset1. Enter. Se zdánlivě nic neděje. Ale když dělám ls znovu, chamtivý je pryč. A když to udělám "cd pset1", Enter, a potom ls znovu, teď je to na správném místě. Jako stranou, je-li pro někteří reason-- zvláště Máte-li přerušované připojení k síti nebo jste chodí kampus s víkem notebooku zavřel a pak ji otevřít Znovu a váš pracovní prostor Zdá se, poněkud mimo synchronizaci, žádný velký problém. Stačí načíst prohlížeč okna, a to by mělo synchronizace tak, že levý prohlížeč souborů vypadá přesně jako okno terminálu. Není se čeho bát. Pokud máte pochybnosti, znovu načíst stránku, tak Dokud jste uložili již soubory. DOBŘE. Takže mv může být také použit k přejmenování souborů. A pojďme se podívat na Tento konečný příkaz zde. Tak suppose-- a to je Super běžné, příliš, brzy. Někteří studenti občas vytvořit soubor volal, pojďme say-- co je další? Jako "WATER.C." Takže budu křičet, pro žádný důvod, ve všech čepice. Ale to není Správné jméno souboru i kdyby jen proto náš problém set Specifikace ti to neřekl uložte soubor jako verzálky "WATER.C." Místo toho, očekáváme "water.c" malými písmeny. A ve skutečnosti, to je problematické, protože check50, Program jdeš setkat se v problému nastavit jeden, který automaticky testuje správnost kódu bude křičet na vás, jestli to nemůže najít "water.c" ve všech malými písmeny. Tak jsem třeba to napravit. Takže mnoho různých způsobů, to udělat, z nichž první by bylo ovládání tlačítkem nebo pravým tlačítkem myši název souboru a jen změnit Přejmenovat. Úplně v pořádku to udělat. Ale opět, dnes, pojďme dělat to trochu milovník. Využijme mV pro změnu "WATER.C" na "water.c." Takže můžete také použít první argument přejmenovat ji na druhý argument v případě, že druhý argument není, v Skutečnost, složky nebo název adresáře. Dobře. A konečně, trochu trick--, takže jsem v můj pracovní plochy adresář v tuto chvíli. Pokud se chci dostat do pset jednoho, Já určitě psát "cd pset1." Ale je to tak únavné typu "pset1", nebo delší názvy souborů nebo názvy adresářů ještě pořád. Takže velmi často v Linuxu, co můžete udělat, je začít psát "BCPP" a jen nudit, hit Tab, a nechat Počítač údaj to pro vás. Super užitečné se dostat do tohoto zvyku. Jediný úlovek je, pokud máte více soubory nebo složky začínající s písmenem "P", nebo "PS", můžete mít Chcete-li zadat několik dalších před počítač ví, co má dělat. MARIA: Máme rádi zkratky. DAVID Malan: To bude ušetří tolik času. A také, jak jsme řekli v přednášce, budete lze rolovat nahoru v historii, nahoru a dolů, najít nedávno popraven příkazy, stejně. Dobře. Takže teď, pojďme obrátit svou pozornost zpět na jednoduchý program, hello world. Proto jsme sestavili to přesně. A teď proč jsme se Pohled na datové typy a pak přejít z některých odpovídá Stírací bloků C. MARIA: Děsivý. Takže teď, že jste začali psaní programů v C, budeme začít mluvit o datových typů a proměnných. Takže některé typy dat, které bude chtít vědět, od této chvíle jsou ty, které jsou zvýrazněny modře. Takže máme int jako první, což je zkratka pro celé číslo. A to platí celá čísla, jako vy může mít guessed-- tak, 1, 2, 3, a jakékoli další celá čísla které si můžete myslet. DAVID Malan: A také negativní. MARIA: A také ty negativní, jo. A 0. Pak máme plováky, které jsou plovoucí desetinnou čárkou. Tak to je všechna reálná čísla které mají desetinná místa. Takže 5,0, 5,2, a ještě více číslice za desetinnou čárkou, jakož i, a také ty negativní. Pak máme char což je znak. Takže myslím, že jsme mluvili o To přednášce dnes. Ale my máme dopisy, pro example-- A, B, C-, které mohou být uloženy jako char. Ale pak máme mnohem více symbolů které mohou být uloženy jako char. A ty jsou uloženy jako ASCII. A pak máme bool, které jsou Booleans. A ti, vyhodnotit True nebo Nepravda nebo 1 a 0, v tomto pořadí. DAVID Malan: A připomeňme, že bool pochází z knihovny CS50. Takže to není integrována do C, ale je to super užitečné mít představu o true a false. A i když vás Možná think-- legrace fakt. Boolovské technicky potřebuje, kolik bitů, opravdu, reprezentovat pravda proti False? Kolik si myslíte, že bitů budete potřebovat, maximálně? Jo, jen jeden. Tak to dopadá, že C nemůže dát jen jeden bit. Nejmenší měrná jednotka můžete získat, je osm. Takže je to trochu zbytečné, že jste použitím celý byte, nebo osm bitů, reprezentovat true nebo false. Ale to je jen způsob, jak je to implementovány v C knihovnou CS50. MARIA: A pak ty, které jsme nebude mluvit o jak rozsáhle právo now-- double, to je pro větší plováky. Dlouhá dlouhé a krátké jsou také pro celá čísla. DAVID Malan: Opravdu. V hacker vydání pset jednoho, jsme vlastně používat long long. Ale pro standardní verzi, to by nemělo být nutné. MARIA: cool. DOBŘE. Takže operators-- byste měli být pravděpodobně se seznámili s většinou z nich. Sčítání, +; odčítání, -. Pro násobení, máme *. Takže ne X, které jsme obvykle používají. Divize, máme zpětné lomítko. A modulo je naše poslední operátor, který budeme hovořit o právě teď. Je to subjekt, který nám umožňuje vzít zbytek divize. Takže pokud máme 4% 2, 4 rozdělený o 2 je 2 se zbytkem 0. Takže 4% 2 je 0. 4% 3 je 1. 4% 5 je 4, protože byste mohli tušit. A pamatujte si, když používáte všechny tyto operátorům používat pravidla PEMDAS. DAVID Malan: Takže aby bylo jasno, pokud jste činit 4% 2, proč je to 0, přesně? MARIA: Protože 4 a vydělí 2 je 2 se zbytkem 0. Takže modulo nám dává, že zbytek jako na rozdíl od výsledku dělení. DAVID Malan: A skutečně, co najdeme toto užitečné , je, že v některých problémů že to nemusí být nutně jedním, Chcete-li mít Vliv omezení sami na rozsah čísel jako 0 až něco, můžete použít modulo na obal kolem dříve, než jako je 2 miliardy nebo hodnota 4000000000, že jsme mluvili o v přednášce. MARIA: Jo. A dokonce v "chamtivý" bychom mohli. DAVID Malan: Ano, ve problém nastavit jeden, stejně. MARIA: Ano, pěkné. DAVID Malan: Dobrý nápověda. MARIA: Omlouvám se. Boolean expressions-- tak pro logické operátory, budeme mluvit o všem z nich, které zde vidíte. Takže teď máme dva rovné znaky uvedené na sobě rovnými. Takže to jsou pro srovnání. Zatím jsme viděli jen jednu rovnítka. To je, když jsme se přiřazení hodnota, která má proměnné. Takže pokud jsme viděli int n = 5, pak jsme přiřazena 5 do proměnné n. Ale pokud chceme použít == k srovnání, můžeme zkontrolovat, zda n == 5. A pokud n == 5, pak je to pravda. Tak logické operátory Dovolte nám, v podstatě, hodnotit Boolean výrazy na true nebo false. Takže není equals-- máme vykřičník a rovni. Takže jsme mohli, pokud n také zkontrolovat se nerovná 5-- tak n! = 5. Méně než, menší než nebo rovno, větší než, větší než nebo roven, a pak máme logický AND a logický OR. A ty, které nám umožní vyhodnotit více logické výrazy spolu se v podstatě přijít společně jako jeden celý logický výraz. Takže pokud chceme najít číslo, řekněme, která je větší než 5, ale menší než 15 ve stejnou dobu, by používáme logické AND operátor zjistit, jestli je n větší než 5 && n menší než 15. DAVID Malan: A tady, taky, je to opravdu snadné brzy omylem použijte jen jeden ampersand nebo jedna svislá čára. A doufejme, že bude kompilátor řvát na vás, protože se ve skutečnosti mají velmi odlišný význam. Pro ty zvědavý, jsou používá pro bitové operace, pracující na jednotlivých bitů. Ale vy chcete, aby se pár z nich zde. A Super Důležité je, že První z nich, rovnítko, což je operátor rovnosti as Na rozdíl od operátoru přiřazení. MARIA: A svislá čára je se nachází mezi Delete a Return. DAVID Malan: Ano. Na typické americké klávesnici. MARIA: Jo. Takže pojďme se skočit rovnou do podmíněné příkazy. Scratch, nemáš již viděli, pravděpodobně, pokud prohlášení, která umožňují uživateli zkontrolujte, zda je něco pravda, pak dělat něco jiného. Takže byste chtěl zkontrolovat, zda vaše sprite je dotýká nějaký jiný sprite nebo okraj obrazovky. A pak jste možná chtěli ukončit hru nebo dělat něco jiného. Takže syntaxi, která je "if (podmínka)." Takže pokud vaše sprite se dotýká něčeho, pak si je uvnitř složených závorek. Pak máme if-else prohlášení. Else nám umožňuje dělat něco v případě, že stav, který jsme zkontrolujte, zda na začátku není pravda. Takže pokud sprite se dotýká border-li to provést, jinak dělat něco jiného. Takže jinak dělat něco jiného. Pak máme krátký příklad pro toto. Takže v případě, (military_time <12), jsme Chcete printf "Dobré ráno!" Jinak budeme printf "Dobrý večer!" Základní příkladem. DAVID Malan: Dobrý. MARIA: cool. Takže teď máme prohlášení spínače. Přepněte prohlášení lze obecně nám umožňují udělat hodně stejnou věc že jsme právě mluvili o s if. Například, právě teď máme Obecná forma příkazu switch která nám umožní přijmout proměnnou s názvem n a porovnat ji se spoustou různé hodnoty, které jsme tady nazývají constant1, constant2. Můžeme mít mnohem více. A ty, které se nazývají případy. Takže pokud máme přepínač statement-- a to funguje pouze pro integers-- máme proměnlivý v tomto případě, který je n. V případě, že n je proměnná rovná constant1, my bude provádět nějaký fragment kódu nebo něco, co chceme dělat. A pak bychom zlomit. Takže přestávka znamená, že Příkaz switch se zastaví, pokud provádění n je rovno constant1, a pak se váš program bude pokračovat. To bude ukončen z toho přepnout prohlášení a bude to i nadále dělat něco jiného. Pokud se však, n se nerovná constant1, pak pouzdro pro constant2 Bude kontrolována. Takže pokud n se rovná constant2, že jiný Úryvek kódu bude popraven. A pak to bude zlomit v případě, že je roven k tomu. A pak můžeme mít also-- není nutně, though-- výchozí případ, což se stane, když n se nerovná kterýkoli z případů, které jste uvedeny. A v případě výchozí jsme také Nemusíte nutně pauzu protože příkaz switch bude vědět že je třeba ukončit po výchozí případ, že je tomu tak. DAVID Malan: Ale stylisticky, vždy dát to tam. MARIA: Jo. DAVID Malan: Jo. Takže zvláště když začínáte, zejména v případě, mezi těmi, nižší komfortní, bych osobně Jen doporučuji držet se nástroje stability a IFS-elses a if-else-if-elses a tak dále, pokud jen proto, že jste trochu přímočařejší. To je hezký optimalizace, nebo někdy i esteticky ji dělá kód čitelnější. A ve skutečnosti, pravděpodobně mid-semestr uvidíme problém nastavit, kde to prostě vypadá lépe, a čitelnější pro lidi pomocí příkazu switch. Ale nebojte se o lpí na to příliš brzy. MARIA: Jo. Pokud máte spoustu if, to by mohlo být velmi prostě není čitelný. To nemusí být velmi rychlá pro vás projít. Takže spínač výroky lze být velmi užitečné, stejně. A také, ne remember-- ne zapomněl dát přestávky tam. DAVID Malan: Nepamatuji si to. MARIA: Protože pak by vás mohly spadnout přes případ od případu k druhému. Takže řekněme, že případ constant1 neměl příkazu break v něm. Pak bychom mohli propadnout Uvnitř případ constant2. A my nechceme dělat, že pokud jsme již dosáhli případ constant1 a je rovna n. Tak, například, když máme proměnnou n, který obsahuje číslo třídy, a chceme vidět, co to class je--, pokud n je rovno 50, budeme tisknout "CS50 je Úvod do výpočetní techniky I. " Pak jsme se chystáte zlomit. A to je vše. Je-li však, n je rovno až 51, jedeme tisknout "CS51 je Představení do výpočetní techniky II. " Pak znovu, budeme se zlomit. Nicméně, pokud pak dáme 124, 61, jakýkoli jiné číslo, které by vás mohly myslet, nebo program se nebude uznat, že. Takže to bude říkat, "Promiň, já jsem nejsou obeznámeni s danou třídu. " A bude to zlomit. DAVID Malan: Takže můžete opravdu vidět if, else if, jiný nápad tady. Je to prostě jiná syntaxe vyjadřují přesně stejný nápad. MARIA: Přesně tak. Teď máme ternární operátory. Takže ternární provozovatelé mají Tři parts-- podmínku, co dělat v případě, tato podmínka je pravda, a pak se něco dělat pokud tato podmínka je nepravdivá. Tak vidíte, v podstatě, syntaxe, který zde. Máme otazník, a pak the-- co říkáme to? DAVID Malan: tlustého střeva. MARIA: Colon. Děkuji. Litovat. Takže pojďme se podívat na naši například na zjistit, zda můžeme smysl tohle-- class_num == 50. Takže tady vidíme na našeho operátora Boolean == který porovnává variabilní class_num do 50. Takže class_num ukládá celé číslo. A pokud to celé číslo rovná se 50, pak jsme bude ukládat "David Malan" uvnitř řetězce profesora. Pokud je číslo třída není rovná 50, "ne David Malan" bude profesor. DAVID Malan: Děkuji. A tak to vypadá ekvivalentní Co byste řekl na první pohled? MARIA: Pro mě se zdá, jako if-else. DAVID Malan: Jo. A ve skutečnosti, to je druh hezká jedné vložky, abych tak řekl, pro provádění přesně logika if-else ale dělá vše v jednom kroku. MARIA: Přesně tak. To jo. Takže pokud-else by mohla zabírají hodně prostoru. Mohou být příliš dlouhý něco tak jednoduché, jak to. Takže to může být velmi stručné a velmi pěkné. Takže teď jdeme do pohledu na znovu a znovu vykonávající něco, takže kontrola podmiňují vícekrát a pak pokračuje něco udělat zatímco tato podmínka je pravda. Takže to nás přivádí pěkně do while. Na levé straně, máme náš první cyklus while. Takže když něco je pravda, udělat znovu a znovu něco. Takže ujistěte se, že všimnout, že naše Podmínkou zde je ověřena v horní části. Zatímco u našeho druhého loop-- říkáme že do-zatímco loop-- něco děláme, pak zkontrolovat podmínku. A pokud tuto podmínku i nadále aby to byla pravda, jsme se vrátit a udělat věc znovu. Tak hlavní rozdíl je tam, kde podmínka je kontrolována. A kód nesmí být nikdy provede, pokud podmínka není platí o cyklu while. Zatímco se do-while smyčka, máme kód , který je vždy proveden alespoň jednou. A pak, když je podmínka i nadále aby to byla pravda, se můžeme vrátit zpět a opakovat znovu dovnitř. Tak proč si myslíš, že bychom použít do-while přes while? Právo. Takže pokud chceme přiměje uživatel na nějaký vstup, chceme-li jich zeptáte zadejte své jméno, Chceme, aby alespoň jednou zeptejte se jich. A v případě, že vstoupí že název, nejsme se s nimi znovu zeptat proto, že už ho známe. Ale v případě, že nevstoupí jejich název, nebo pokud zadejte něco, co je samozřejmě není jméno, přesto chceme pokračovat požádala je o jejich jména. DAVID Malan: A v přednášce jsme měli jeden takhle se dostat pozitivním int Například tam, kde není co zkontrolovat na první, protože jste ani dostal int. Takže chceme dělat tohle-- získat int z user-- pak ho zkontrolovat, možná, znovu a znovu a znovu. MARIA: Přesně tak. Pro loops-- OK. Pro smyčky mohou dovolit, abychom dělali téměř přesně to samé, stejně. Je to vlastně přesně to samé. Takže není nic, co můžete dělat s pro smyčky že byste nebyli schopni co do činění s cykly while. Ale pro smyčky se může zdát poněkud trochu složitější syntakticky proto, že mají tři části uvnitř, co bylo předtím jen stav s cykly while. Takže první část, která vám moře, nejvíce vlevo, máme "int trpaslíci = 0." Takže tohle je místo, kde jsme inicializovat naší proměnné. Pak máme středník a "trpaslíci <7." Takže tohle je místo, kde se stav ve skutečnosti je. Takže to je to, co budeme mít dal právě v době loop-- "zatímco trpaslíci <7." Tady, že jde v Uprostřed našeho smyčky for. Takže "dwaves <7." A pak je naše poslední část je "trpaslíci ++," což je místo, kde jsme se aktualizujeme proměnné. Tak důležité si uvědomit, že toto se chystá projít to pro smyčku sedmkrát a spustit sedmkrát. Takže máme sedm trpaslíci, a oni jsou všichni chtěl říct, "Jsem tady aby vám pomohl, Snow White " proto, že jsou připraveni na pomoc Sněhurku. S while, bychom udělali inicializace a aktualizace ne uvnitř stavu, znovu, ale buď před nebo uvnitř while aby se ujistil, že we-- protože potřebujeme vždy ty části. Tak, aby se ujistil, že máme nich by máme ještě přidali na, jen ne v závorkách. DAVID Malan: A tak to vypadá jako-- V přednášce, například, I téměř vždy používají, rád, já a n a docela nudné proměnných. Vypadá to, že můžete použít více chytře pojmenovaný proměnných, taky. MARIA: Ano, je to vlastně velmi pěkné použít trochu více popisných proměnných protože zejména v případě, někdo jiný čtení vašich code-- možná máš srovnávač nebo pokud spolupráce s somebody-- chcete, aby se ujistil, že rozumět tomu, co děláte. DOBŘE. Tak tohle je něco velmi funky-- pro smyčku uvnitř smyčky for. Já nevím, jestli jsme viděli dřív. Asi ne. Ale můžeme skutečně tohle-- takže smyčky místo smyček. Takže to někdo chtěl snad chodit mi skrze to, co se tady děje? DAVID Malan: Vezmu bodnout. MARIA: cool. DAVID Malan: OK. Takže, spoiler-- chceme vytisknout věci že je v pravém dolním rohu tam. MARIA: Správně. Jo, jo. DAVID Malan: Takže máme jen dal, že ukázkový výstup tam. Takže můžu vyvozovat z vrchní smyčka, že jste iterace přes řádky v vnější smyčku, abych tak řekl. A ty iterace přes sloupy s nejvnitřnější smyčce. A intuitivně, toto by snad smysl proto, že podle povahy Každý program, který jsme viděli před, printf, což je Funkce používáme, nakonec, má schopnost tisknout věci v podstatě tak, řádek po řádku. Stejně jako, jakmile jste na výstup nový řádek, je tu no zdvojnásobení zpět a tisk něco vyšší v rozsahu, alespoň nepoužíváte printf takhle. A tak se v tomto ohledu, to dělá pocit, že nejvzdálenější smyčka by měl být s odkazem na řádky neboť pro každý daný řádek, budete chtít vytisknout XXXXX, a poté přejít na další řádek, XXXXX. Takže řádky jsou na prvním místě. A pak se v rámci každé řádek, tisku sloupce. Pokud jste se pokusili udělat s opak, by to pravděpodobně ne vyjdou jak máte v úmyslu. MARIA: Jo. Prostě jsme nemohli vrátit do předchozí řádek s printf. DAVID Malan: A co je zajímavé na dnešní rozhovor o rozsahu, ve skutečnosti je to, že řada je int která je deklarována v nejvyšší smyčce. Ale všimněte si, že je to stále uvnitř, abych tak řekl, složené závorky, které bezprostředně následovat, i když to není technicky v těchto složených závorek. Takže řada je v rozsahu pro celistvost úryvku kódu, jak uvnitř, tak na vnější pro smyčce a uvnitř vnitřní smyčky for. Ale naopak, kde je sloupec v rozsahu? Proměnná sloupec? Jo, pouze ve vnitřní smyčce. A to je v pořádku, protože nemáme přístup to mimo jeho složených závorek. Vše, co udělat, je vytisknout nový linka na samém konci tam. Tak, že ve skutečnosti je v pořádku. Tak to má za následek, to vypadá, dělat tři řádky a čtyři sloupce. MARIA: Správně. Takže nejprve jsme se projít naše první řadě. A právě v naší první řadě, děláme čtyři sloupce uvnitř první řadě. Tak jsme se vytisknout čtyři X.. A pak můžeme ukončit smyčky for, jelikož jsme již vytištěny čtyři X.. A tiskneme nový řádek. A pak půjdeme přes Stejný postup pro dva více řadách aby celkem tři. DAVID Malan: A to je třeba poznamenat, že je to jen artefakt písma, skutečnost, že na výstupu vzorku Zdá se tak mnohem vyšší, jako kdyby tam je víc řádků než sloupců. Ale je to jen proto, že X je vyšší než širší. To je vše, co se tam děje, plus bílý prostor mezi řádky. MARIA: Správně. Bezva. DAVID Malan: Dobře. Tak rychlý pohled na problém nastavit jednu, vzít nějaké otázky, a pak přerušuje? Dobře. Takže problém nastavit jednu, tu tři Hlavními problémy, nakonec. Ale nejdřív, zjistíte, že problém nastavit specifikace, jak se mnohé psets letos na podzim, se chystá, aby vás prostřednictvím několika zahřívacích cvičení, bod, který na několik zdrojů, které mohou nebo neviděl už. Například, CS50 má sadu šortky, které jsou krátké video, není na rozdíl od, ale že jsou velmi téma specific-- Možná pět minut, 10 minut na délku o smyčkách nebo o podmínkách nebo o algoritmech nebo později na více pokročilá témata, stejně. A my obecně vložit ty, do problému soupravy tak, že studenti mají zdroj, s nimiž přezkoumat materiál, který by mohl mít Již přijít v přednášce nebo sekce. Ale takhle je to cílenější a více na dosah ruky. Máme také inklinují vložit do problému nastavuje věci zvané průchody. Takže téměř všechny příklady dělám V přednášce, na jevišti tady, my také natočili na kameru v pokročit více pomalejší, více intimní návod mnou na můj notebook tohoto kodexu, řádek po řádku takže ve třídě, budeme často prolistovat něco nebo někoho bude prohodit s odpověď na otázku. Ale to není nutně potopit v pro každého v publiku. Takže najdete kód návody Pro většinu příkladů co děláme tady v přednášce, takže si mohou chodit přes to svým vlastním tempem a přetočit nebo rychle dopředu nebo vynechat úplně, pokud budete chtít. Tam je často málo warm-up otázky, které vás požádat o jakési posílit tento materiál a ujistěte se, že jste před pohodlný budete pokračovat se zbytkem pset. A pak, samozřejmě, je tu pset sám. A jedna z věcí, jsme velmi uváženě dělat v CS50 je téměř každý nezajímavý nebo intelektuálně nezajímavý mechanický krok, který možná budete muset udělat, je téměř vždy velmi dobře zdokumentovány. V průběhu funkčního období, budeme začne klást více řečnické otázky jako vzpomenout, jak se to či ono? Ale obecně, zjistíte, že problém sady vám přes mechaniky něčeho tak, že zajímavé, intelektuální výzvy se nakonec nechal na vás studenta. Díky, že řekl, Zamyla, jimž jsme průběžně odkazuje dnes v přednášce, je jedním z našich dlouholetých zaměstnanců Člen, který také drží návody o specifických problémech, jako je Mario pset a chamtivý, když ne voda v tomto roce. A to je v těch průchody, že ona často nabízí několik tipů a triků pro jak postupovat, nikdy ti přesně to, co dělat, ale rather-- jako podmínku, pokud will-- poskytne vám alespoň pár nápadů, takže je jen na vás, nakonec, se rozhodnout, jak k nim přistupovat. MARIA: něco jako vysoké úrovni pochopení logiky, co žádáme vás o to. DAVID Malan: Přesně tak. A ve skutečnosti, Zamyla je návody jsou určeny často zodpovědět zeptal se otázka, kde mám začal, zvláště když Tyto dlouhé specifikace jsou trochu skličující daný veškerý text a snímky, které se mají v nich. Takže water.c, zjistíte, poté, co jste dokončil to, je ve skutečnosti poměrně jednoduché. Absolutně jsou banda z vás bude bouchnout tvé hlavy proti zdi snaží zjistit, proč to není kompilaci nebo proč to není spuštěn správně. Ale jakmile budete hotovi s ním, a jakmile jste strávil nějaký čas zápasí s některou z chyb, které můžete mít, zjistíte, že je to velmi krátký program. To lze provést v několika málo řádků kódu, z nichž většina jsme tady viděli v přednášce už, pokud sestavíte ty správné stavební kameny. A jak navrhujeme tady, to se zeptat určit, kolik minut někdo ve sprše na akademické půdě. Určíme v problému nastavit průtok vody v, jako, sprchový kout s nízkým průtokem hlava, podobně jako Seinfeld klip jsme viděli včera, nebo opak těchto látek. A pak stačí jen udělat trochu matematiky, really-- aritmetiku pomocí C říci nám, kolik, zhruba, láhve s vodou je to ekvivalentní, pokud jsme přičemž k n-minutové sprchu. Nyní, v mario.c, toto se děje , že je o něco delší programu. Je to stále nebude to dlouho. Jen pár řádků delší než water.c. Ale to bude příležitost obnovit staré školy Mario pyramida z Super Mario Bratři nebo některé follow-on. Nebude to vypadat jako hezčí nebo jako barevné jako ten tam jeden. Jsme jen tak použít malé hashtagy jako máme tady na obrazovce pomocí textu ASCII. Ale to bude přibližovat stejný nápad. A bude to být cvičení, které na první pohled Zdá se, docela simple-- jen vytisknout jednoduchý pyramidu. Ale je tu pár charakteristiky tady to jsou zajímavé. Všimněte si, že zcela vpravo okraje pyramida vlastně má šířku dva. Takže tam jsou dvě rovná výška sloupce, které dělá to vyžadovat trochu bit myšlení, aby se že jste si, že přesně to pravé, as protilehlý k jen dokonale hranatý čára. Tak to už je trochu rohového případu ale odpovídá skutečné hry. A to je také non-zřejmý na první pohled pohled, jak vytisknout prázdné místo. Takže když jsem se podívat na ukázkový výstup here-- a je to také v spec-- to trochu vypadá jako obdélník, ale diagonální z obdélník byl useknuté, a je to jen bílá místa, abych tak řekl. A tak často kladené Otázkou je vždy dobře, jak mám přesunout hashtagy na správnou? Nebo jak mohu vytisknout mezery? A je to vlastně jednodušší než většina studentů myslí. Právo? Můžete přiblížit ji vizuálně jen bít mezerníku jednou nebo dvakrát nebo třikrát. A tak, i když s printf jsme téměř vždy vytisknout řetězec nebo int nebo slova, jako je "Dobrý den, world "nebo série slov, můžete také jen vytisknout citát, vesmírných, konec citátu. A to skutečně dát jste tam bílé místo. Takže mějte na paměti, že i ne overthink to. Ty opravdu musím rozhodnout, řádek po řádku po řádku, ne na rozdíl od vaší například před chvílí, jak mnozí z těch, Sloupce by měla být bílá místa a kolik z nich by měl být hashtags. Bude to trvat trochu času, ale je to nakonec logické puzzle druhů. MARIA: Jo. Ale logika se řádek po řádku bude velmi užitečné zde. DAVID Malan: Jo. Myslím si, že ukázkový kód, který dokonce gave-- ačkoli to nebylo kompletní program. Stále je třeba int a hlavní a neplatné a #include stdio.h, hodně věcí z přednášky. Ale stavební bloky Zdá se, že tam. A pak konečně něco trochu více algoritmické. Tak to dopadá, že kdykoliv budete jít do CVS nebo jakékoliv samoobsluze a někdo vás podá u pokladní poukázky nebo mince jako změna, Ukazuje se, že oni, lidé, zda nebo ne oni to vědí, nebo ne, pravděpodobně používáte, co je volal chamtivý algoritmus, přičemž pokud jste dlužil, řekněme, $ dvacetjeden ve změně proto, že z nějakého důvodu jste si koupili něco velmi levný s velmi velkým účet v CVS, že by bylo v případě, že opravdu otravné pokladní vám dal 21 singlů, nebo horší přesto, spoustu mincí. Spíše, co rozumná osoba je pravděpodobně bude udělat, je, že jdou chytit 20- $ a pak $ 1-účet, a předat vám jen dvě bankovky v této věci. MARIA: Takže oni se snaží minimalizovat Změna, která dávají zpět k vám. DAVID Malan: Přesně tak. A stejná dohoda s mincemi, stejně. Pokud jste dlužil, řekněme, $ 0,50 doufejme, že si nepřejete, aby 50 haléře. Místo toho chcete, aby dva ubikace, například. Nyní, to však předpokládat, že pokladní má dost všech ostatních názvů, které on nebo ona by mohla chtít, aby vám. Ale my vám umožní převzít jak v problému. A cíl, nakonec, je implementovat v C kód chamtivý algoritmus. Takže uživatel je povoleno zadat, jak moc Změna on nebo ona dluží s dolary a centů, nějaký druh pohyblivé řádové čárce hodnota pravděpodobně. A pak budete muset dělat matematiku a zjistit algoritmicky, dobře, kolik mincí mohu dát budete minimálně, aby vám přesně to množství změn. Ale tam to bude bude Několik záludné části tady, že jo? Stejně jako je tu celá otázka nepřesnost. MARIA: Přesně tak. Tak floating point hodnoty mají nepřesnost. Měli bychom mluvit o tom v přednášce dnes? DAVID Malan: Udělali jsme naposledy v přednášce. Mluvili jsme o nepřesnosti. A nechcete podvádět uživatele o tom, jak moc změna on nebo ona je dluží. A tak průchod, v Problém set specifikace, zamyslet, v konečném důsledku, pokud jde o jak můžete zmírnit ty nepřesnost chyby, potenciálně. Je to nevyhnutelné, samozřejmě, pro vstupy mluvíme. A ve skutečnosti, pennies-- Možná budeme odložit na Zamyla, Myslím, že pro tamní triky. Takže nakonec, budete najít progrese problémů tento týden, z nichž první je docela malý, pak medium, pak o něco větší. Ale všichni z nich používají budovu bloky od tohoto minulý týden, z tohoto supersection, Problém set specifikace vám dává při nesčetných zdrojů. Ale přesto, pokud vůbec bojovat, zejména mezi těmi méně pohodlné bez předchozí pozadím, přijít na úřední hodiny v pondělí a úterý a Středa a čtvrtek. Přejít na CS50 Diskutovat přes Webové stránky kurzu je, přes který můžete chatovat se zaměstnanci a spolužáky. Ale nakonec, myslím, že Nejlepší rada je prostě začít brzy. Není to ten druh třídy, která vám by měly být počínaje psets ve středu v noci, nebo horší ve čtvrtek v noci. MARIA: Moje nejlepší rada je aby začali v pondělí. DAVID Malan: pondělí. Takže pokud jste ještě nezačali already-- no. Ale i kdyby ne Pondělí, pak v úterý. Čím dříve, tím lépe. A to je důvod, proč Kurz má tolik pozdní dnů aby vám trochu psychologický nátlak začít dříve, ale stále nechat věci, skluzu, kdy se věci trvat déle než očekáváte. MARIA: A chcete využít úřední hodiny, stejně jako je to možné, také. DAVID Malan: Nějaké otázky? Dobře. No, proč ne my odložit tady?