DAVID J Malan: Všetko Dobre, takže to je CS50. A to je samozrejme piatok. A to je koniec týždňa jedna. Takže si možno spomenú, že sme skončili, naposledy, s Cliffhanger svojho druhu. Pričom sme odhaliť tú lož, že žiadny ohľadu na to, čo ste učil rastie up, 1 delené 10 nie je, v Skutočnosť, 0,1 alebo 0,100 alebo 0,10000. V skutočnosti, ak by sme zostaviť tento Program, ako sme to urobili včera, s, aby nepresnosť, a potom urobiť bodku, lomítko, nepresnosť, sme sa dozvedeli, že to je to, čo je 1 delené 10 v skutočnosti je. Takže v skutočnosti to nie je tak celkom pravda. Ale to robí narážku na niektoré Základné obmedzenia počítačov. A skutočne, medzi čo budeme robiť dnes je sa pozrieť na dôvod, prečo to má sa stalo, aké dôsledky to má, ako sa ľudstvo zlyhalo pochopiť to v niektorých veľmi vážny situations-- výsledok z ktorých bol celkom tragický a expensive-- a tiež sa pozrieť na to, ako môžu skutočne brániť proti týmto druhom obmedzenia. Takže intuitívne, snáď, Preto je 1 delené 10, podľa môjho počítača tu, nie len desatina, 0.10? Jo. Co si myslis? Diváčka: radix je iný? DAVID J Malan: Čože je? Ach, tá základ je iný? Takže nie tak celkom. Je to vlastne viac zásadné pre hardvér. Iné myšlienky? Jo. Diváčka: Oni predstavovať čísla inak? DAVID J Malan: Tak they-- Right. Predstavujú čísla inak. Nepresne, zrejme. Tak, že je-- No, odlišne od čoho? Alebo od koho? Od nás? Diváčka: Jo. Oni nepoužívajú desatinné systém [nepočuteľný]. DAVID J Malan: OK. Takže v istom zmysle, oni robia nie použiť desiatkovú sústavu. Pod kapotou všetko je, naozaj, binárne, a to je príbuzný, v skutočnosti. Ale je to ešte jednoduchšie vysvetlenie než to. Jo. Diváčka: Oni len toľko bitov. Môžu iba uložiť až do určitej rozsahu, rovnako ako s desatinné miesta. DAVID J Malan: Jo. To je to, čo sa naozaj dostať na to. Ukazuje sa, že počítače typicky, bude vždy len použiť dispozícii obmedzené množstvo informácií predstavovať niečo. Je to tak? Koniec koncov, máme fixné iba Množstvo miesta na pevnom disku. Máme len pevne stanovenú sumu RAM, alebo pamäť počítača. A ak budete mať iba pevná suma na niečo, iste nemožno vlastne spočítať do nekonečna alebo akékoľvek číslo, ktoré chcete. Tie, druh, musí zvoliť, čo rozsah hodnôt budete podporovať. A tak napríklad, týždeň alebo dva dávno, keď sme hovorili o ASCII, a Hovorili sme o 8 bitov, alebo byte, aby som tak povedal, Najviac sme mohli predstavujú s 8 bitov bolo to, čo? 255. A môžeme reprezentovať 256 celkovej hodnoty ale nie v prípade, strávime jeden z nich na 0-- No, ale ak budeme stráviť jeden z nich na 0, potom najväčší počet je, samozrejme, 255. Tak sa ukázalo, že sa jedná v prípade príliš, v tejto súvislosti. Začali sme hovoriť, minule, o číslach s plávajúcou desatinnou čiarkou, ktoré sa líši od celých čísel, v že majú desatinnú čiarku a dúfajme, niektoré čísla po tom, ale sú príliš. Počítač je len obvykle deje na použitie 32 bitov, 64 bitov možná reprezentovať plávajúce bodovú hodnotu. Takže aj keď sme vyrástli učenie matematiky a vedieť, že môžete mať absolútne nekonečný počet čísel za desatinnou čiarkou, nie Ak máte konečný pamäť. Tie, druh, majú na bicykli, alebo vybrať, ktoré Čísla budete reprezentovať. A tak si môžete myslieť, v istom zmysle, čo je počítač je najbližšia priblíženie na hodnotu 1/10, ktorý to môže dostať, len s 32 alebo tak bitov. A nie je to len 1 desettin. Napríklad, keď zmením to Tretiny, čo si myslíme, že je ešte jednoduchšie. Takže 1 delené 3. Dovoľte mi, aby som uložiť súbor. Nechaj ma ísť napred a překompilovat ju. A dovoľte mi znova spustite ho. Aj tu, zrejme, 1/3 nie je 0.3 a potom nekonečné množstvo 3 rokov potom. Máte túto nepresnosť na konci. Takže my ľudia sú správne, a čo ste sa naučili je, v skutočnosti, správny, ale my narážala hore proti niektorým obmedzeniam. A to, čo som si myslel, by sme urobiť dnes, je začať pri pohľade na, úprimne sa Tragické následky tohto Niekedy, keď ľudstvo nie je úplne realizovať pre túto realitu a týmito obmedzeniami. A uvidíme sériu známok od History Channel, ktorý berie Pozrite sa, ako veci išli zle. To je asi 8 minút, a vrátime sa po tomto a pozrite sa na presne to, čo ešte môže pokaziť. Keby sme mohli stlmiť lights-- [Videoprehrávanie] -Computers, Všetci sme si zvykli na sa často nepríjemné problémy, ktoré ísť s nimi. Chyby, vírusy, a softvér závady sú malé ceny platiť pre pohodlie. Ale v high-tech a high-speed vojenské a vesmírny program aplikácie, najmenší problém môže zväčšovať do katastrofy. 4. júna 1996, spracovali vedci začať bezpilotné Ariane 5 rakety. To niesol vedecké satelity navrhnutý stanoviť presne, ako sa Zemské magnetické pole interaguje so solárnymi vetry. Raketa bola postavená pre Európska vesmírna agentúra a odštartovala z jeho zariadení na pobreží Francúzskej Guyany. -A Asi 30 sekúnd do rokov, sa prvýkrát si všimol, sa niečo deje zle. Že trysky boli otočné v spôsobe, akým by sa mal naozaj nie. Okolo 40 sekúnd do letu, jasne vozidlo bolo v ťažkostiach, a to je, keď oni robili rozhodnutie ho zničiť. Rozmedzie dôstojník s bezpečnostnou obrovské čreva stlačil tlačidlo, vyhodil raketu predtým to mohlo byť nebezpečné pre verejnú bezpečnosť. Toto bola dievča plavba Ariane 5, a jeho zničenie vzal miesto z dôvodu chyby vložené do softvéru rakety. -the Problém na Ariane bolo, že bolo číslo, ktoré vyžaduje 64 bitov vyjadriť, a chcel previesť to na 16 bitové číslo. Predpokladali, že čísla sa nikdy nebude veľmi veľký, , Že väčšina z týchto číslic v 64 bit číslo bolo 0 je. Mýlili sa. -the Neschopnosť jedného softvérový program prijať druh číslo generované iný bol pri koreni zlyhania. Vývoj softvéru sa stal veľmi nákladné súčasťou novej technológie. Ariane 4 Raketa bola veľmi úspešná, tak veľkú časť softvéru vytvorený pre to bolo tiež použitý na Ariane 5. -the Základným problémom bolo to, že Ariane 5 bol rýchlejší, zrýchlil rýchlejšie. A softvér nemal predstavoval, že. -the Zničenie rakety bol obrovský finančný katastrofa, všetko z dôvodu chyby minút softvéru. Ale to nebol prvý Problémy s konverziou dát časové bol sužovaný modernej raketovej techniky. -V 1.991, so štartom vojny v Perzskom zálive prvé, Patriot raketa zažila podobný typ konverzného číslo problému. V dôsledku toho sa 28 ľudí, 28 amerických vojakov bolo zabitých a asi 100 iní zranený, keď Patriot, ktorý mal k ochrane proti prichádzajúcej Scud, nedokázal vystreliť raketu. -Keď Irak napadol Kuvajt a Ameriku zahájená Púštna búrka na začiatku roku 1991, Patriot raketová batéria boli nasadené chrániť Saudská Arábia a Izrael z irackých Scud raketových útokov. Patriot je v USA, stredného doletu povrch-k-vzduch systém vyrábané spoločnosťou Raytheon. -veľkosť Patriot Interceptor, sám o sebe, je o zhruba 20 stôp dlhý. A váži asi 2000 libier. A to so sebou nesie bojovú hlavicu o about-- Myslím, že to je zhruba 150 libier. A hlavice, sám, je vysoko výbušný, ktorý má fragmenty okolo neho. Puzdro hlavice je navrhnuté tak, aby správať ako hrubé broky. -the Rakety sú vykonávané, 4 na obale, a sú prepravované návesu. -the Patriot proti raketový systém siaha najmenej 20 rokov. To bolo pôvodne navrhnuté ako vzdušná obrana rakety zostreliť nepriateľské lietadlá. Vo vojne v Perzskom zálive prvé, keď tá vojna prišla, Armáda chcela používať to, aby zostreliť Scud, nie lietadiel. Iracká sila nebola tak veľký problém, ale armáda bola starosti Scud. A tak sa pokúsili upgrade Patriot. -Intercepting Nepriateľa raketa cestovanie u Macha päť šiel byť dosť náročné. Ale keď Patriot bol behave do prevádzky, armáda nebol vedomý Iracký modifikácie, ktoré robil ich Pláva takmer nemožné zasiahnuť. Čo sa stalo, je, že Pláva prichádzali, boli nestabilné, boli kymácení. Dôvodom pre to, bol Iračanov, aby dostať 600 kilometrov z 300km doletu, vzal váhu z predného hlavice a robil hlavice ľahší. Takže teraz, Patriot sa snaží prísť na plávať, a väčšinu času, drvivá väčšina z Tentoraz to bude len lietať plávať. -Akonáhle Prevádzkovateľov Systém Patriot si uvedomil, že Patriot minula svoj cieľ, oni odpálili Patriot v hlavici, aby sa zabránilo možným obetiam ak to nechá spadnúť na zem. -to Je to, čo väčšina ľudí videl, Tie veľké ohnivé gule na oblohe, a nepochopený as zachytí Scud hlavíc. Aj keď v noci neba, sa objavil Patriots úspešne byť ničiť Scud, na zahranie, tam mohol byť žiadna chyba o jeho výkonnosti. Tam, radarový systém Patriot stratil na prichádzajúce Scud, a nikdy začatý vzhľadom k softvér chybu. Bol to Izraelčanov, ktorí ako prví objavili , Že čím dlhšie je systém bol na, tým väčšia je časový nesúlad sa stal v dôsledku hodiny vložený V počítači systému. -O 2 týždne pred tragédie v Dhahran, Izraelčania hlásených ministerstvo obrany, že systém bol čas stráca, že po približne 8 hodinách prevádzky, si všimli, že systém bol stále znateľne menej presné. Ministerstvo obrany odpovedal tým, že hovoriť všetky batérie Patriot nenechať systémy na dlhú dobu. Oni nikdy nepovedal to, čo dávno bol. 8 hodín? 10 hodín? 1000 hodín? Nikto nevedel. -the Patriot batérie umiestnený v kasárňach na zahranie a jej chybné interné hodiny, bol na viac ako 100 hodín v noci 25. februára. -To Sledoval čas s presnosťou asi 1/10 sekundy. Teraz 1 desatiny sekundy, je zaujímavé čísla pretože to nemôže byť vyjadrené v binárnej, presne tak. Čo znamená, že nemôže byť vyjadrený, presne, v každom modernom digitálnom počítači. Je ťažké uveriť, ale použiť ako príklad. Vezmime si číslo 1/3. Tretiny nemožno vyjadriť v desiatkovej sústave, presne tak. Tretín je 0,333 deje na nekonečno. Neexistuje žiadny spôsob, ako to urobiť, s absolútna presnosť, v desiatkovej sústave. To je presne rovnaký druh Problém, ktorý sa stalo v Patriot. Čím dlhšia je systém bežal sa horší stal čas k chybe. -po 100 hodinách prevádzky, chyba v dobe bol len asi 1/3 sekundy. Ale pokiaľ ide o zacielení raketa jede 5 Mach, to viedlo k sledovanie Chyba viac ako 600 metrov. Bolo by fatálna chyba pre vojakov v zahrani. Čo sa stalo, je Scud štart bol detekované včasného varovania satelity, a nový, že Scud bol prichádza vo svojom všeobecnom smere. Nevedeli, kam že to príde. -To Bol teraz až k radaru zložkou systému Patriot, brániť Dhahran, nájsť a udržať Trať prichádzajúce nepriateľské rakety. -the Radar bol veľmi šikovný. To by v skutočnosti sledovať poloha Scud a potom predpovedať, kde to asi bude, nabudúce sa radar poslal pulz von. To bolo nazývané rozsah brána. -Tak, Akonáhle Patriot Rozhodne dosť času má prešiel sa vrátiť a skontrolovať ďalšie umiestnenie pre túto zisteným objektom, sa vráti späť. Takže keď sa vrátil k zlý miesto, to potom nevidí objekt a rozhodne, že neexistuje objekt, to bola falošná detekcia, a kvapky trať. Prichádzajúce Scud zmizol z obrazovky radaru, a sekúnd neskôr ju narazila do kasární. Plávať zabil 28 a bolo to posledné, raz počas vojny v Perzskom zálive prvej vystrelil. Je tragické, že aktualizovaný softvér dorazil zahraní nasledujúci deň. Tento softvér vada mal bolo opravené, zatváranie jedna kapitola v problémovej História Patriot strely. [END Prehrávanie] DAVID J Malan: Takže budeme sa pozrieť na Niektoré podobné obmedzenia pri len trochu. Ale najprv, poďme Prechod na niekoľko FYI je. Takže one-- tento víkend, tam bude flash sekcií, ktoré sú určené na nahradiť Pravidelne v naplánovanom profily, ktoré sa spustí za týždeň odtiaľto. Pozrite sa na webové stránky CS50 je Pre viac informácií o nich. Budú tiež natočený a streamovať žiť pre tých, ktorí nemôžu zúčastniť. Problém sada 1 je na Webové stránky už ihrisko je, a my sa pozrieť na že v len trochu. A tiež úradné hodiny, bude mať umiestniť tento od pondelka do štvrtka. Tak toto bolo najviac kanonické Program sme sa pozreli na minule. Je to ako najjednoduchšie Program môžete písať v C, a dokonca aj to je trochu odvážne tvrdenie. Je to tak? Pretože tam je veľa zdalo zložitosť v tejto oblasti. Takže poďme sa rýchlo pozrieť na to, čo niektoré z týchto prvkov boli a potom sa snažíme poskytnúť mentálne model, ako tie najjednoduchšie programov pracovať, a potom začneme pri pohľade na veci stále zložitejšie. Takže tento riadok tu, zdôraznil teraz, žlto, čo sme povedať, minule, že to robí pre nás? Aký je účel to slúži? Každý, kto sa ďalej späť? Jo. Diváčka: [Nepočuteľné] DAVID J Malan: Dobrý. Tak to vám dáva prístup na príkazy, alebo poďme Funkcie volania je, že niekto inde napísal, že sú deklarované, tak povediac, v nejakom inom súbore. Tak uvidíme, presne to, čo .h súbor je oproti súboru .c, popr. Ale teraz, len viem, že printf, napríklad, je medzi funkciami, ktoré boli deklarované v nejakom inom súbore, niekde inde na pevnom disku mraku, ktorý nám umožňuje pristupovať k printf a používať ho aby bolo nutné znovu vynájsť že kolesá sami. Medzitým, hlavný. Aký bol analóg hlavné, minulý týždeň? Jo. Diváčka: Zelená vlajka kliknutie. DAVID J Malan: Jo. Scratch je, keď zelená vlajka kliknutí. Je to ako puzzle že lopta veci preč. A tak podobne, to robil svet sa rozhodol pred niekoľkými rokmi, že v C, a veľa ďalších jazykov, Ak chcete napísať program, vaše prvé funkcie musí byť nazývaný, hlavné. A to musí vyzerať takto. Ale my sa vrátime, inokedy, s čím, int, a, void, znamená v tomto kontexte. Pre túto chvíľu, zložené zátvorky sú láskaví ako sa Scratch je skladačky tvare zapouzdřující určitý počet riadkov. A medzi na tratiach tu, je toto tu. printf je funkcia, ktorej účel život je vytlačiť formátovaný reťazec. A formátovaný, mám na mysli vás môžu pripojiť zástupnými hodnotami, a môžete určiť, koľko desatinné miesto bodov, koľko čísel vytlačiť po desatinnou čiarkou a podobne. A printf, samozrejme, trvá jeden alebo viac argumenty alebo parametre, inak známy, jednoduchšie, ako vstupy. Takže printf, ako veľa funkcie, berie vstupy. A tieto vstupy sú zahrnuté dvoma zátvorkách tu. A vo vnútri nich je jeden vstup. Je to reťazec, ako sme to nazval, čo je len postupnosť znakov, ako slovo alebo frázu, alebo celku esej dokonca medzi úvodzovkách. A to je to, čo sa deje na ovplyvňovať Správanie printf, pretože, samozrejme, je to len všeobecný funkcie tlače. To nebude vedieť, čo k tlači, pokiaľ ju povedať. A potom, niektorí markanty. Čo hovoríme to divný postupnosť symbolov, je? Jo. Diváčka: Nová rada. DAVID J Malan: Nová rada. Tak to dopadá, môžete nielen zasiahnuť, vstúpiť, keď píšete program. Všeobecne platí, že kompilátor dostane trochu zmätený, ako na to, čo máte na mysli. Skôr, musíte doslova hovoria, daj mi nový riadok tu. A tak / n je to, čo sme sa všeobecne zavolajte znak escape. Takže n, na nový riadok. A kompilátor vie, že keď vidí / n, že by sa v skutočnosti vyvolať počítače, v konečnom dôsledku, alebo printf, v tomto prípade, vytlačiť aktuálny Novinka linka, rovnako ako biť, zadajte, kláves na klávesnici. A konečne, čo urobil hovoríme Tento kus syntax je pre? Čo to predstavuje? Jo. Diváčka: [Nepočuteľné] DAVID J Malan: Je to len koniec riadku. Je to koniec vyhlásenia. A uvedomiť si, že my nie dať je všade. Určite nie dať je na koncoch každého riadku. Napríklad, tam nič nie je na prvý riadok, je tu nikto na linke s, hlavné, tam nič nie je po zložených zátvorkách, ale začnete vidieť a získať oboznámení s tým, kde je to len pre. A to je takmer vždy po funkcii volať alebo vyhlásenia, niektoré akcie že ste skutočne užívať. A viem teraz, a to najmä v prípade, medzi tie menej pohodlné, to sú druhy hlúpe veci že skončíte omylom výprask hlavou proti múru nad. Vzhľadom k tomu, budete logicky dôveru v nejakom probléme ste vyriešil pre problém set, a tá prekliata vec práve nebude kompilovať ani spustiť. A tak často, na začiatku, bude to byť preto, že ste vynechal zátvorky, alebo ste vynechal bodkočiarku. A tak len budú mať na zreteli tieto druhy vecí, a pokúsiť sa dostať frustrovaní je, pretože veľmi rýchlo to robí stať sa stará vesta. Ale je to veľmi ľahké sa dostať frustrovaní skoro, ako výsledok. Takže teraz, poďme sa pozrieť na to, ako Táto linka je skutočne pracuje a potom sa pozrite na mierne zložitejšie jednu. Takže máme tu sa schopnosť vypracovať na tejto obrazovke. A predpokladajme, že toto je moja obrazovka počítača, ale ja som písanie, ahoj programu, a ja netransponovali, printf. Niekto iný zaviedla, printf. Kto by chcel tvrdiť, že zaviedli, printf? Ak sa nám môže? Dobre, Ako sa voláte? STUDENT 1: [? Copal. ?] DAVID J Malan: Copal, poď hore. Poď hore. Dobre. Takže máme tu, niektoré menovky, pretože urobíme malú hru tohto. A my vám zavolá, printf. A ak chcete, aby sem prišiel, to, čo som práve natiahnutý na obrazovke, je to celkom jednoducho, tam som ja, toto. Dobre, takže, ahoj volám sa, printf, ak by ste chceli, aby si to. Dobre. A ak môžete ísť stánok podľa obrazovke počítača ako keby ste funkciu, ktorú prišiel s týmto počítačovým systémom. A váš cieľ v živote je aby skutočne niečo vytlačiť. Ale podobne ako programu sme proste musel na obrazovke, tu, budeme musieť skutočne dať vám nejaký vstup. A tak, ak môj vstup, tu, je zdá sa, že to, čo je odovzdaný do printf, poďme trochu mock to takto. Chystám sa doslova písať na kus papiera, "ahoj, svet" spätné lomítko N. A aby bolo jasné, čo sa Práve som natiahnutý na tento kus papiera, vyzerá takto. Takže keď som spustenie tohto programu, a to žltá riadok kódu dostane popravený, je to, ako by som, program Dobrý deň, som podal nejaký vstup preč do funkcie že niekto iný napísal. A ak sa vám, prstom, mohol v skutočnosti, prstom, kresliť na obrazovku čokoľvek si to ty, ktoré boli odovzdané, účinok, nakoniec, je presne vidieť, že na obrazovke. A malý kútik prípad. A dobre, nemali by sme vidieť uzávierky, nový riadok, v tomto bode. Bolo by nesprávne pre vás explicitne nakresliť nový riadok. Ale ak budeme stále písať slová na obrazovka, by skončiť pod tým. Takže ďakujem moc, ale držať len na jednej chvíli tu. Teraz potrebujeme jeden ďalší dobrovoľník, keby sme mohli, že to bude musieť hrať úlohu of-- Je to len ľudí v orchestri práve teraz. Ako about-- OK. Práve tu. Poď hore. Ako sa voláš? Študent 2: [? Ivay. ?] DAVID J Malan: Sorry? Študent 2: [? Ivay. ?] DAVID J Malan: Ethan, poď hore. Nie? Povedal som si, že zle, dokonca aj potom, čo ste ho dvakrát hovoril? Poď hore. Je ťažké počuť tu. OK. A je mi ľúto, Ako sa voláte? Študent 2: [? Ivay. ?] [? DAVID J Malan: Ivay. ?] OK. Pre túto chvíľu, ak nemáte myseľ, ste getString. Študent 2: OK. Super. DAVID J Malan: Takže ak by ste chceli stáť tu len na chvíľu, poďme sa pozrieť na mierne viac komplexný program, ktorý Teraz má tri riadky kódu. Takže máme, človek, uveďte svoje meno pomocou printf; dva, volanie getString, nasleduje priradenie k variabilný volal, reťazec s, alebo tzv s; a potom ďalšie volanie, printf, ale tentoraz s dvoma vstupmi. Takže sme už urobili stav Vaše meno, alebo skôr, máme už urobili printf volaní. Takže budem písať, Uveďte svoje meno. A tak, čo budem prejsť, printf, za chvíľu, je pomerne jednoducho, to. Takže ak chcete ísť dopredu a kresliť to Na obrazovke sa, že je to váš vstup teraz. Dobre. A zabudnúť na reťazec, máme teraz naše vlastné riadok kódu sem. Takže, GetString, potrebujeme skutočne volať, getString. Takže váš cieľ v živote je len tak von do orchestra, keby mohol, a získať niečiu meno. Ale poďme dať niečo, aby to na. Ak chcete, ísť vpred a získať reťazec, získať niečí meno na to kus papiera, keby si mohol. Dobre. A uvidíme, za chvíľu, ktorého meno sme získali. Medzitým, čo budem majú pripravené, je prázdny kus papiera, v ktorom, idem uložiť čokoľvek hodnota je, že GetString sa vracia ku mne, Aj, ktorý je reťazec premennú s názvom, s. Dobre. Takže to, čo máte tu? Nik. Dobre. Takže máme tu NIK meno. Takže toto je to, čo doslova bola vrátená ku mne, aby som tak povedal, o getString. Aj teraz, chystám vykonať ľavá strana tohto výrazu, kde som proste opisovať, pre dnešné účely, Nik. Takže teraz, mám premennú volal, s, ukladanie Nik meno. Už som podal na printf, predchádzajúce tvrdenia. Ale v našom tretí a posledný riadok kód, Vlastne som sa rukou printf niečo trochu different-- "Dobrý deň,% s," spätné lomítko n. A tak sa posledný riadok idem k send-- posledná vec Som bude písať teraz dolu, je to. Takže dva riadky kódu, alebo skôr posledný riadok kódu, žiada dve inputs-- jedným, toto, a dva, to. Takže ak naše printf funkcie Teraz môžete mať tieto ako vstup, dovoľte mi, aby som vymazanie obrazovky pre vás. Vlastne nie, môžete ísť dopredu. Necháme to, pretože je to na rovnakom programe. Mali by sme vidieť, ahoj, Nik. Dobre. Takže to bolo celkom málo obruče proskočit, len písať, uviesť svoje meno, a, ahoj, Nik. Ale táto jednoduchá myšlienka na odovzdávanie správ, vstupné a výstupné prechádzanie prijímanie, je presne model budeme mať aj pre tie najzložitejšie funkcie. Takže ďakujem moc vám obom. Máme krásny stres lopta pre teba. A ďakujem nášmu getString a printf dobrovoľníci podobne. Ďakujem. Dobre. Ďakujem vám obom. Takže sme hovorili o tak ďaleko, hlavne o reťazcoch. A ukázalo sa, že C môže v skutočnosti porozumieť niekoľkých rôznych typov dát. V skutočnosti, poďme Pozrite sa na tieto tu. Takže C, a mnoho jazykov, chápať veci nazývané znaky. Char je všeobecne jeden byte, alebo osem bitov. A to predstavuje jeden znak, ako písmeno A, alebo na základnom imaní písmeno A, alebo malé písmeno A, alebo výkričník, alebo ľubovoľný znak, ktorý môžete písať na klávesnice, a niekedy aj viac. Tiež sme sa ocitli na plaváky. Plavák je, všeobecne, je 32-bitová hodnota, alebo štyri byty pretože zase jeden bajt je osem bitov. Takže plavák je plávajúca bodová hodnota, niečo s desatinnou čiarkou. A naozaj, to je to, čo film hovoril o tom, kedy hovorili o plávajúce bodové hodnoty, niektoré pevný počet bitov používaný reprezentovať reálne číslo. Ale je tu aj veci, zvané zdvojnásobí. Tie existujú v Jave, ak ste si vzal APC, a dvojité, ako názov našťastie navrhuje, je dvakrát tak veľký ako hotovosť. Je to stále reálne číslo, to proste má viac bitov s ktorým sa niekedy byť presnejší, alebo pri skladovaní aj väčšie množstvo. int je ľahké. Hovorili sme o tom minule. Je to len celé číslo. A to je všeobecne 32 bitov, alebo štyri byty. A tak, ak máte, pozrime sa teraz, 32 bits-- a robili sme to v týždni 0, niekedy tak briefly-- ak máte 32 bitov, čo je najväčší číslo, ktoré môže predstavovať ako celé číslo? Plus mínus? Je to ako 4 miliardy, a to len vtedy, ak sme čo predstavuje iba kladné čísla. Ak máte 32 bitov, a ak chcete predstavujú záporné čísla rovnako, Tento dosah je v podstate negatívny 2000000000 2000000000 na pozitívne. Ale všeobecne, začneme pri 0 ísť až na 4 miliardy. Nemusíte presne viem, ale môžeme vidieť, v skutočnosti, keď som zrovna otvoriť malú kalkulačku, tu. Dokážem 2 na 32, a to je presne, ako veľký, koľko hodnôt si môžete predstavujú, s 32 bitmi. A to je zhruba 4000000000. Takže sa budeme držať vidieť, že číslo v niekoľkých rôznych miestach. Ale ak budete potrebovať dlhší čísla, než to, to dopadá je tu niečo, čo nazýva long long. A dlhá dlho všeobecne 64 bitov, ktoré znamená, že je o poriadok ešte väčší ako int. Tak som si ani vysloviť najväčšiu číslo, ktoré môže predstavovať, ale je to výrazne väčší. Teraz ako stranou, historicky, ak int je 32 bitov, a dlhý dlhý je 64 bitov, ako veľký je dlhá, nie je dlhá dlho? Človek by si myslel, že je to dlhšie ako int ale možno menej ako dlhá dlhá dlhá, ale v skutočnosti záleží. A tak to dopadá jedna z frustrácie príliš, s písaním kódu na niektorých systémoch, je to, že nie všetky z týchto dátových typov majú vopred určené hodnoty. Niekedy je to toľko bitov. Niekedy je to, že mnoho bitov. Takže ste skutočne vedieť, niekedy, aký hardware vediete svoj softvér na. Našťastie, iné jazyky a Iné typy dát, ktoré teraz existujú, umožní byť presnejšie. No, videli sme reťazec, a my sme videli bool, taky, ale ukázalo sa, tie prichádzajú iba s knižnicou CS50. Takže tie nie sú postavené do C Tí namiesto toho, prichádzajú v tomto súbore nazvanom CS50.h, že budeme nakoniec olúpte vrstvy. Ale teraz, sú to len ďalšie dátové typy. Boolovské je pravdivý alebo nepravdivý, a Reťazec je postupnosť znakov, ako slovo. Teraz printf, sme videli, má zástupné symboly,% s je jeden. A malo by byť možné, aby teraz, vyvodiť z týchto ďalších príkladov, ako môžete mať zástupný symbol Pre rôzne typy dát. Napríklad, hádajte, ak ste chcel vytlačiť jeden znak pomocou printf, zástupný symbol je pravdepodobne% c. A ak chcete, vytlačí sa integer s zástupný,% i. % LLD je dlhá dlhá desiatková hodnota, ale dlho dlho, takže mapuje na to. A potom% f pre plávajúce bodová hodnota alebo za double, takže niekedy, že sú opätovne použité v rôznych kontextoch. Tak uvidíme a použitie niektoré z nich v priebehu času. A printf a ďalšie funkcie aj únikové sekvencie podporu ostatných " a niekedy, ak sú potrebné. Takže spätné lomítko n je nový riadok. Spätné lomítko t, má niekto Chcete, aby sa bodnúť? Diváčka: Tab. DAVID J Malan: Tab. Takže ak skutočne chcú vytlačiť kartu, nie pevný počet miest, ale skutočné Karta znak, nemusíte hit vašej, Karta, na klávesnici, všeobecne, vlastne robíte spätného lomítka t. Spätné lomítko dvojité úvodzovky, Prečo by som niekedy chcel, že? Je to tak? Prečo nemôžem len zadajte a dvojité úvodzovky na mojej klávesnici? Diváčka: Vzhľadom k tomu, inak, je to bude si myslieť, že je koniec Páči sa mi z tlačového [? textu. ?] DAVID J Malan: Presne tak. Pamätajte si, že s našimi printf príklady, kedy sme míňali na printf na vstupe, na ľavej strane tohto vstupného reťazca a na pravej strane tohto vstupu na jar, samozrejme, bol dvojitý citát. Ak váš vlastný vstup má dvojaký citácie v stredu to, Počítač by mohol potenciálne zmätený, pokiaľ ide o, Znamená to, úvodzovky patrí v stredu? Má to patrí sa ľavá? Má patriť s pravou? A tak, ak chcete, aby to výborný jasné, vy spätné lomítka dvojité cenovú ponuku, tak, že utiekol, aby som tak povedal, a to nie je zjednotil na niečo iné. A je tu niekoľko ďalších tu, spätné lomítko r, jednoduché úvodzovky, 0, že môžeme vidieť v priebehu času, ako je tiež. A teraz, čo o funkciách? Takže akcií, ktoré môžeme vziať tak ďaleko v tomto jazyku, C, dobre, sme videli, printf, samozrejme, a všetko z ostatných na obrazovke, tú, že budeme používať pre Samozrejme je len prvých pár týždňov, vo chvíli, keď knižnicu CS50. A robia to oveľa jednoduchšie, v C, skutočne získať vstup užívateľa. Ukazuje sa, že v C, a úprimne povedané, v niekoľkých jazykoch, to je skutočnou bolesť v krku robiť niečo jednoduchého, ako vyzve užívateľa na klávesnici, pre jeho vstup. A tak tieto funkcie uľahčujú. A to tiež chyba kontrola po celú dobu, tak, že keď vás spomínam na stredu sme videl, opakovanie, varovanie, keď som nespolupracoval, a ja som napísal slovo, namiesto čísla? Urobili sme ťažkú ​​prácu čoskoro na uistite sa, že užívateľ spolupracuje. Ale to sú len tréning kolesá, že budeme nakoniec, a rýchlo, vzlietnuť. Takže rekapitulácia, a potom, poďme sa rýchlo pozrieť, podobne ako sme to urobili s Scratch, na niektoré kanonické konštrukty v C. Tým sa myslí, triedenie o, bude víchrica turné, len preto, že máte odkaz a že ste videli, čo na prvý pohľad. Ale potom sa pozrieme na aktuálne kódovanie použiť niektoré z týchto stavebných blokov. Toľko ako v Scratch, keď sme sa vyhlásenie páči, hovoria, alebo počkať, v C, máme funguje rovnako, ako printf. Ak chceme vyjadriť podmienku v C, je to podobné, v duchu, tejto skladačky, ktoré vyzeralo to na Scratch. Ale namiesto toho, my doslova len písať, ak. A potom, v zátvorke, sme dali podmienku, ak táto podmienka je, čo budeme zavolaj, opäť, je logický výraz. A opäť, to je druh pseudokódu. A, v skutočnosti, že // je komentár. Je to len anglické slová pre seba. Ale to je všeobecný Štruktúra, je-li, stavu. Ale uvidíme betón príklady v chvíľku. Ak chcete mať dvojcestný rázcestí, podobne ako sme to urobili s naším dobrovoľníkom na Streda, môžete mať, else if. A ak chcete mať tretín a Konečná podmienka, a alebo východiskovú situáciu, môžete mať len blok iné, tam. A podobne sa boolean výrazy, môžete, a ich dohromady. A my sme videli v stredu, že to nie je jediný ampersand, to je dva, z dôvodov nižšej úrovne, ktorý budeme nakoniec vidieť a hrať. Alebo-ing veci dohromady je 2 zvislé pruhy. Na americkú klávesnicu, to je všeobecne kľúčovým s klávesou Shift vyššie váš klávesu Enter alebo Return. Potom je tu toho, čo budeme používať asi raz alebo dvakrát. Sú funkčne ekvivalentný čo môžete robiť s, v prípade, ak iný, else if iné, konštruovať, ale oni sú volal prepínač. Vyzerajú veľmi odlišné, ale my budeme vidieť v niektorej z našej distribučnej kódu, pre budúce problém sady, s najväčšou pravdepodobnosťou, že je to niekedy len krajšie spôsob, ako vyjadriť celok banda podmienok, bez toho, aby bolo veľa zložených zátvorkách a veľa zátvoriek a odsadenie. Ale nám dávajú viac energie, než sme už. A teraz slučky. A tento, pozrieme na pomalšie. Ale potom, začneme používať tieto, zvlášť pre tých, ktorí už poznajú. Toto je kánonický spôsobom, ak neuveriteľne Arcane spôsobom, aby napísať slučky v C. Teraz slučka Scratch bol celkom jednoduché. Máte, navždy, blok. Máte, opakovanie, blok s len číslo musíte zadať. A s, pre slučku, môžete implementovať oboch týchto myšlienok, ale je to trochu technickejšie. Ale úprimne povedané, je to tiež relatívne jednoduché. Akonáhle budete vedieť, poradie operáciám, doslova sa práve chystá pripojiť v hodnotách a povedzte počítaču, čo má robiť. Takže tu je príklad. To je, že slučka, úplne jednoducho, počíta z jedného čísla hore prostredníctvom iného. A len tým, pozrel sa na to, aj keď máte žiadne predchádzajúce skúsenosti s Tento jazyk, aké číslo to asi začať počítať od? OK, 0. A Hádam, že je to preto, že ste vidieť, že je tu int a i, čo je premenná. Je to inicializuje na 0. A neskôr, to vyzerá, sme okolo printf, hodnotu. A v skutočnosti, urobil som malú preklep tu. Ale to je ľahko napraviť. Dovoľte mi pridať, aj tu. Teraz máme printf bytia prešiel túto zástupnú hodnotu. A čo sa bude počítať hore cez? Divákov: 50. 50. 49. DAVID J Malan: 49. Takže 50, na prvý pohľad, zdá sa. Ale to, že sa ukázalo, sa bude naše podmienka, že budeme priebežne kontrolovať. A budeme sa raz zastaví i už nie je menšia ako 50. Takže táto slučka, naopak, mal by vykonať, tak dlho, ako som je menšia ako 50. Ale akonáhle sa stane 50, alebo 51, alebo ešte horšie, mal by sa automaticky zastaví. Dobre. Takže čo sa vlastne deje tu? Tak toto je poradie operácie pre slučku. One, máte tzv inicializácia. Tento žltý zdôraznené kus kódu je vykonaný ako prvý, a to má za následok, že, za Streda, pravdepodobne predstavit. To vytvára premennú s názvom i a to obchody v tejto premennej hodnotu 0. Tak som je 0 v tomto bode príbehu. Ďalšia vec, ktorá sa deje v tomto konštruktu, je skutočnosť, že stav dostane skontrolovať. Tak som hneď skontrolovať, je aj menej ako 50? A samozrejme, že odpoveď teraz je, iste, áno. Áno, pretože aj je 0, a To je určite menej ako 50. Potom, čo sa stane, je, že toto riadok kódu dostane popravený. A v skutočnosti, v prípade, že je násobkom riadkov kódu v týchto zložených zátvorkách, všetci vykonaný jeden po druhom. A v tom zmysle, tu, je Zdá sa, že na vytlačenie číslo i, ktorý sa chystá 0, a potom 1, a potom 2. Ale prečo? Prečo to dostať zvýši? No, štvrtá vec, ktorá stane je, že túto syntax dostane vykonaný, za bodkočiarkou. i ++ je skratka spôsob, ako hovoriť; mať hodnotu i, a pridať 1 k nemu; a potom nabudúce okolo, pridajte 1 k nemu; a nabudúce, pridať 1 k nej. Takže ak budeme ďalej, čo sa bude diať Ďalšie je Nebudem sa inicializovať aj niekedy znovu. Ak som si inicializácia aj na 0, tento príklad že nikdy neskončí, pretože Chcel by som sa zasekol na 0 ° C. Ale to, čo sa bude diať, je že táto podmienka bude kontrolovať, riadok kódu bude vykonaný, Aj bude zvýšená, podmienka bude kontrolovať, kód bude vykonaný. A to zase stále na bicykli, a znovu a znovu, kým i ++ vyvoláva hodnotu 50. Tento stav potom hovorí, 50 je menšia ako 50 ° C? Odpoveď, samozrejme, nie je, a takže celý kód sa zastaví realizáciu. A ak máte viac kódu na obrazovke dole, to je to, čo sa stane ďalej. To vyskočí z týchto zložených zátvorkách a pokračuje v tlači viac po tom. Takže teraz vtip, od Foxtrot, že budete možno teraz pochopili. Vždy je to smiešne. Je to ako smiech druh presakovať, a potom si uvedomíte, že ste nemali sa smiali humor, ako je tento. Ale tam je nejaký stánok s jedlom tu, pedagogicky, taky. Tak to dopadá, že som chýbajúci kus syntaxe, alebo Foxtrot je chýba kus syntaxe sem. To, čo chýba, že sme mali v každom inom príklade, tak ďaleko? Return, je tam, tak to je niečo iné, že sa vrátime do onedlho. Čo chýba, aj keď? Jo. Diváčka: The inicializácia [nepočuteľných]. DAVID J Malan: OK. Tak jo. Takže v skutočnosti, to je-- No, a počet sa inicializuje hore, alebo skôr, uvedených vyššie sa. Takže toto je ďalší spôsob, ako to urobiť. Ale nie v jednej línii je to platný hoci. Ako sa asi tu? Diváčka: Je to zložené zátvorky? DAVID J Malan: Jo. Takže zložené zátvorky chýba. Ale tento kód, myslím, k ich cti, je v skutočnosti, syntakticky platné. Ukazuje sa, že nie Potrebujem zložené zátvorky ak máte len jeden riadok kódu, ktorý Ak chcete vykonať vnútri slučky. Teraz sme vždy v triede a vo všetky naše distribučné kódu, patrí zložené zátvorky tak ako tak, len z dôvodov prehľadnosti. Ale uvedomiť, že v učebniciach a online príklady, môžete veľmi dobre vidieť kučeravé traky chýba niekedy. A to je v poriadku, či to, čo majú členité a určené je len jediný riadok kódu, a nie viac riadkov kódu, potenciálne. Dobre. Takže súvisiace s problematikou nepresnosť, je problém pretečeniu, v tom zmysle, že, podobne, to celé čísla majú svoje limity, ktoré im rovnako ako s plávajúcou desatinnou čiarkou hodnoty? Vo svete plávajúce bod hodnoty, môžeme byť len tak presné, po ktorej, niekedy zlé veci sa môže stať, a naše programy môžu byť buggy a omylov. Teraz dokonca s celými číslami, môžete dostať do problémov. Teraz celé číslo nie je vybavený desatinná čiarka alebo čísla po ňom. Je to len prirodzené číslo, typicky. Tak čo by mohlo ísť s int zlého? Ak som pomocou int na Počet, čo by mohlo pokaziť? Zdá sa, že oveľa jednoduchšie. Jo. Diváčka: V prípade, že Číslo dostane [nepočuteľných] DAVID J Malan: Jo. Čo keď počítam tak vysoko, aby vás nemôžu vyjadriť, že naozaj veľké číslo. Je to tak? V určitom bode, budete prekročiť hranice z 32-bitové hodnoty, alebo 64-bitové hodnoty. Teraz znovu, nie som si istý, ako vysloviť 64-bit hodnotu, ale viem, že sa 32-bitové celé číslo, najväčšia hodnota, ktorú môže byť, keď je to len pozitívne hodnôt, je zhruba 4 miliardy korún. Takže keď sa snažím počítať do 5 miliárd, niečo, čo sa stane. Ale poďme sa pozrieť, čo v skutočnosti sa môže stať. Vo svete integer pretečeniu, kde ste, v istom zmysle, pretečeniu kapacity integer, čo sa môže stať? Tak tu je binárne číslo, je to návrat k 0 ° C. Je to všetko 1 je, a zástupné symboly tam sú sily 2, tak toto je binárny. Tak to sú 8, 1 bitov na obrazovke. A ak si spomínate, alebo rýchlo si to spočítajte, aká hodnota je zastúpený tu sa týchto ôsmich bitov 1? 255. A aj keď ste neboli úplne istí, z matematiky, si to mohol urobiť to. Alebo môžete jednoducho druh rozumu cez to, počkajte chvíľu, keď som čo predstavuje 8-bitové hodnoty, a ja mám 256 možných hodnôt, ale z ktorých prvá je 0, Ja len viem, že Najväčší bude 255, a to je to, čo tento človek môže byť. Takže predpokladám, že sa snažím pridať 1 k tejto hodnote. Čo by ste robili do platovej triedy Škola pri pridaní 1, a to nie je naozaj fit, pretože budete musieť niesť 1? To, čo je toto číslo bude aby sa stal, keď pridáte 1? Bude to stať sa 0. Je to tak? Vzhľadom k tomu, ak ste mali viac bits-- a budem pokúsiť sa, druh, napíšte to here-- keby sme mali viac bitov, čo sme tu môže urobiť, je pridať 1, a potom by sme si to. Jejda. Budeme mať 1 bit celú cestu sem. Ale ak sa jedná o konečný hodnota, je to len 8 bitov, a to je vopred stanovená počítačom, že 1 je v podstate nie je. Tak nejako spadne z útesu. A tak keď pridáte 1 do 255, čo hodnotu, máte zrejme dostanete? 0. A tak čísla k náhodnému, a snáď neúmyselne, skončiť obal okolo takhle. Takže to, čo môže byť dôsledok to? No, je tu niekoľko rôznych vecí. Takže jedným, to nakoniec vyzerá ako 0, neúmyselne, ale môžete trochu vidieť, dokonca v reálnom svete, k lepšiemu alebo k horšiemu, prejavy tohto nápadu limitu. Napríklad, niekto z vás, ktorí sa kedy hral Lego Star Wars, Vie niekto náhodou vedieť maximálny počet mincí môžete zbierať v Lego Star Wars? Potom sa hádať na základe dnešné sugestívne otázky. Je väčší ako 256 alebo 255. To je 4000000000. Tak to dopadá, a tam je nejaké people-- niektoré googling potvrdil minulý night-- sa dostali 4 miliardy zlaté mince, alebo ktovie čo ešte, v Lego Star Wars. Aj keď sa zdá, je tu spôsob, ako napáliť hru, tam je chyba alebo funkcia, ktorá vám umožní len narastať veľa a veľa bodov. Ale najväčší možný hodnota, podľa k tomuto snímku obrazovky niekoho, koho našiel na internete, je skutočne 4000000000. Teraz prečo je tomu tak? Je to presne 4000000000, Pravdepodobne preto, že niekto rozhodol, kto písal túto hru, že by mohli robiť 4 miliardy, niečo, niečo, niečo, ako hodnota som dať do s kalkulačkou skôr, ale je to len trochu čistejšie pre ľudí povedať, maximálny počet z coins-- alebo klincami, ako hovoria, že vás them-- môžete zbierať je 4000000000. A tak, prečo je to? Ako je LEGO hra vykonávanie počítadlo to je udržiavanie prehľadu o množstvo mincí máte? Používajú čo? Diváčka: Zastaví počítanie po 4 miliardy. DAVID J Malan: Zastaví počítanie po 4 miliardy, čo znamená, že môžete odvodiť, ako programátor, že sú nejspíš pomocou 32 bitové celé číslo. Rovnako ako programátor doslova zadaný, int, v jeho alebo jej kód, a to je typ premennej Používajú na ukladanie niečí kód. Takže je tu iné prejavy týchto druhov limitov. Takže som nehral tento game-- a ja som bol čítanie na históriu Pre potvrdenie, ako much-- ale v Pôvodná verzia civilizácie, kde budete zrejme komunikovať s každým a môžu viesť vojnu, alebo mať pokoj, Gandhi mal byť jedným z najpokojnejšie znaky, ako ja pochopiť, v prvom verzia civilizácie. A v skutočnosti, na stupnici od 1 do 10, Jeho agresivita bol len 1. Takže niekedy tak mierne agresívne, zrejme. Ale v určitom okamihu, môžete si zrejme nainštalovať demokracie v geografii. A ak si nainštalujete demokraciu do vašej verziu hry, potom sa vaše agresivita hladina klesá. Je to dobrá vec. Ľudia sú pokojnejší Zdá sa, že v tejto situácii. Ale zdá sa, niekto urobil nebude mať, pokiaľ je to, stav v pôvodnej verzii kódu. Takže úroveň agresie Gándhího išiel od Pozitívne 1, mínus 2, na negatívny 1, ale hra nie je porozumieť záporné čísla. Takže to, čo sa stalo, bolo Gándhího agresie Úroveň šla od 1, 0, 1 na negatívny, čo malo za následok obal okolo, že sú najagresívnejší charakter v hre, v hodnote 255, na stupnici od 1 do 10. A od tej doby, tam bolo viac stelesnenie tejto hry, a že som držal ho ako akýmsi veľkonočné vajíčko, že Gandhi je zrejme tak strašne agresívny. Ale bolo výsledkom veľmi jednoduchý programovací chyba v tejto veľmi skoré verzie hry. Teraz viac znepokojujúco, viac nedávno, Boeing 787 bol dokumentovaný ako majúce chyba, nie druh zariadenia sa vám obzvlášť chcete mať chybu. A príznaky, že budem čítať tu, z článku on-line, Bola to, model 787 lietadlo , Ktorý bol priebežne zásobovaný za 248 dní môže stratiť všetko striedavý prúd, AC, elektrickej energie, v dôsledku riadiacej jednotky generátora, GCUs, súčasne ísť do fail-safe módu. Takže to bolo vydané varovanie kedy bol tento problém objavený. Tento stav je spôsobený počítadlom softvéru interné do GCUs, tak celé číslo alebo premenná, že pretečie po 248 dni nepretržitého výkonu. Boeing je v procese rozvíjanie Upgrade softvéru, ktorá GCU napraví nebezpečného stavu. Toľko ako raketa scenár, vyznačujúci sa tým, oni mali nejaké premenné že počítal, a počítanie, a počítanie, ale postupne pretekajúca hranice jeho schopnosť, Podobne urobil ten prekliaty lietadlo majú variabilné pretečeniu Po dostatok času behu. A tak sa spôsob pero-in-tváre o prácu okolo tohto problému je skutočne, reštartovať, vaše lietadlo každý 247 dní, tak, že je pamäť dostane stierané a premenná prejde späť na 0. Ale uvedomiť, to je veľmi veľký inkarnácia softvéru, ale najmä preto, počujeme o Apple operačné systémy ísť do auta, a self-riadiť vozidlá od spoločnosti Google, a ľubovoľný počet inkarnácií softvér v našom každodennom živote, TV a hodinky a ďalšie, si uvedomiť, boli obklopené softvér, všetci ktorý je napísaný nás ľudí. A ako budeme všetci čoskoro zistíte, je to veľmi jednoduché a veľmi typické robiť chyby pri písaní softvéru. A ak nechcete chytiť, niektoré zlé veci sa môže stať. Teraz niekedy, niektoré vtipné veci sa môže stať, alebo aspoň niekedy sme poznať očakávať nejakú zlobu. Takže 0 delené 0, zo stupňa škola, je všeobecne zlá vec. Je to nedefinované. A ukazuje out-- a uvidíme, či môj mic môžete vybrať to up--, že Apple mal nejakú zábavu s tým v poslednej dobe. Tak som tu iPhone. Budem hovoriť Siri a požiadajte ju, mi dať odpoveď na 0 delená 0. Čo 0 deleno 0? SIRI: Predstavte si, že máte 0 cookies, a môžete ich rozdeliť rovnomerne medzi 0 priatelia. Koľko cookies, sa každá osoba dostať? Vidíš? To nedáva zmysel. A netvor Cookie je smutné že neexistujú žiadne sušienky. A ste smutní, že nemáte žiadne priateľov. DAVID J Malan: Je to celkom nepríjemný. Tak toto je to, čo práve povedal, že. To je neurčitý, to nie je definované, A skutočne, mnoho programovacích jazykov alebo, naozaj, bude kompilátory rozpoznať, keď v programe, pokúsiť sa rozdeliť 0. 0. Viac zábavy ako toto však je, to zrejme, netvor Cookie je na Twitteri v týchto dňoch. A on odpovedal na to, s tým, čo je úplne rozkošný. Ale poďme sa rýchlo pozrieť na pár ďalších konštruktov, a potom dal niektoré z týchto kód na použitie, v dobré spôsoby. Tak to dopadá, okrem pre slučky, je tu niečo, čo nazýva while, že vyzerá inak a je realizovaný trochu differently-- a budeme nakoniec vidieť examples-- ale v určitom zmysle, je to jednoduchšie, pretože to neumožňuje inicializovať a aktualizovať vnútri hraníc slučky. Môžete ho realizovať aj naďalej. Takže si môžete urobiť presne rovnaké veci s while, ako sa slučky for, ale vaša syntax, ultimately-- ako budete nakoniec see-- bude inak. K dispozícii je aj robiť, kým slučka, ktorá je vlastne trochu inak, v tomto zatiaľ čo pre sláčiky a while vždy najprv skontroluje ich stav, pokiaľ čítate túto vec zhora nadol, to trochu vyzerá to, že to bude skontrolujte, či je stav posledný, pretože to je skutočne posledný riadok kódu. A naozaj, že to bude užitočné, v niektorých programoch, ktoré píšeme, ak chcete len slepo niečo urobiť a nakoniec skontrolujte stav. To nie je nevyhnutne zlá vec. Ak chceme premenné, môžeme to urobiť že v niekoľkými rôznymi spôsobmi. A my sme videli v Foxtrot karikatúra, jedným zo spôsobov, ako to urobiť, kde ste deklarovať svoju premennú, ako čítač int bodkočiarkou, a potom later-- možno budúci linka, možno 10 riadkov later-- ste skutočne inicializovať ju. Takže tieto 2 riadky kódu deklarovať premennú typu int a nazývať to počítadlo, tak to dáva me dostatok bitov usporiadať int. A potom nakoniec, kladie hodnota 0 do tejto premennej. To usporadúva Je v 0 a 1 vzor, ​​ktorý poznáme z minulého týždňa, predstavuje počet poznáme ako 0. Alebo povedané, môžete to urobiť toľko stručnejšie, rovnako ako táto. Teraz máme tiež Možnosť volať funkcie. A v skutočnosti, tu je 2 linka programu, alebo výňatok zmluvy, ktorá nám umožňuje skutočne napísať nejaký kód, ktorý dostane reťazec z user-- moc ako naše dobrovoľníčky na chvíľu ago-- ukladanie výsledok v premenné s názvom názov, a then-- podobne ako s naším dobrovoľníkom s printf-- vytlačí týchto hodnôt odovzdaním dva argumenty sa reťazec, nasledovaný premennú volal, meno, sám. Takže poďme sa pozrieť, pred sme sa vrátiť k Mario tam, na pár Teraz príkladov. Chystám sa ísť dopredu a otvorený up, povedzme, funkcia-0.c. A ako vždy, tento kód je k dispozícii na internetových stránkach Course, takže môžete hrať spolu na doma a pozerať sa na to neskôr. Ale tu je ten program je to esencie, od riadku 17 až 22. Hlavný program je miesto, kde Program je vždy začnú. Tento program, zdá sa, že sa deje vytlačiť svoje meno, hrubého čreva. Je to potom zavolá getString, rovnako ako sme to urobili s našimi dobrovoľníkmi. A potom, to je zaujímavé, to bude volať PrintName. Ukázalo sa, že celú tú dobu, tam Zdá sa, že funkcia nazvaná PrintName. Ktorá tlačí niečí meno. Nepotrebovali sme použiť printf z včerajška je tu PrintName. Ale to je zavádzajúce preto, že nie je PrintName prísť s C. ľudia nemali vymyslieť asi pred 40 alebo 50 rokmi, Urobil som, namiesto toho. A v skutočnosti, keď som prechádzanie dole, ďalšie oznámenie ako môžem napísať vlastnú funkcie v C. Budeme nakoniec vysvetliť, prečo sme sa stále hovorí, neplatné, na niekoľkých miestach, ale pre dnešok, poďme stačí sa pozrieť na mená. Na riadku 24, ak chcete vytvoriť svoj vlastný funkcie, doslova písať Názov funkcie. Vybral som si PrintName. V zátvorke, budete zadajte, aké druhy vstupov, a koľko ste chcú túto funkciu prijať. V tomto prípade, chcem, aby sa 1 variabilný volal, meno, a to bude mať typ, reťazec, takže to ide byť nejaký postupnosť znakov. A potom, to program-- podobne ako v Scratch, môžete mať vlastné puzzle pieces-- bude mať tento vlastné správanie. Bude to hovoriť printf odovzdaním, ahoj, zástupný symbol, a potom to bude plug vo všetkom, čo volal užívateľ. Tak to je príklad toho, čo počítačový vedec by hovor abstrakcie alebo funkčné rozklad, ktoré sú rovnako galantérny Spôsoby saying-- je, ak sa vám páči tento nápad na vysokej úrovni, ako ja chcem funkcie, ktoré vytlačí niečí meno, úplne vás môže doslova napísať printf a potom prejsť v argumentoch, ktoré chcete, a program bude fungovať, pretože má od stredu. Ale môžete začať abstraktné preč pojem tlače meno. Môžete dať mu meno, ako je PrintName, a to je to myšlienka vrstvenie od týždňa 0. Odteraz, ja a vy nemusíte vedieť alebo jedno, ako PrintName je implementovaná. Áno, používa printf, možno to nie je, kto vie, čo používa? Koho to zaujíma? Teraz hovorím tu, namiesto toho tu dole. A skutočne, ako naše programy dostať vyspelejšie a sofistikovanejšie, budeme pokračovať v užívaní za samozrejmosť že nižšia úroveň dieliky existujú. Pretože sme písali im alebo niekto iný, takž že môžeme potom vytvoriť nad nimi. Poďme sa pozrieť na to variant, fungujú jeden. Tak toto je trochu viac pokročilých, ale ukázalo sa, že v knižnici CS50 je, je tu len funkcia GetInt. Nemysleli sme si, pred rokmi, aby implementovať funkcie GetPositiveInt. A to je trochu nepríjemné, pretože ak Vy ste písanie programu u ktorého Ak chcete získať pozitívne celé číslo od užívateľa, môžete použiť absolútne GetInt. A môžete úplne poradiť sa stav a možno aj slučka v prípade, že je väčší, int ako 0 a kričať na užívateľa ak on alebo ona nedá Ste kladné číslo. Ale poďme postaviť tento stavebný blok sami, je, zvyk Scratch kus, ak chcete. Budem mať program tu to nakoniec, myslím, chcú mať možnosť volať GetPositiveInt, a ja chcem byť schopné vytlačiť čo to je int. Ale to je preč abstrahovaný teraz. Je to len dostal vysokú úroveň Názov, ktorý hovorí, že to, čo robí, čo je skvelé, pretože to je veľmi intuitívne teraz prečítať. A keď to urobím jedno, čo je pod kapota, dovoľte mi prejdite nadol. A je to trochu zastrašujúce na prvý, najmä ak je to vaša prvá program, ale poďme sa pozrieť. Ja už hovoril, void, pretože to dopadá funkcií, podobne ako getString, môže vracia hodnotu ku mne. Nejedná sa len mať vytlačiť na obrazovku, môžu skutočne ruky ma niečo späť. A zatiaľ čo pred PrintName, Nepotreboval som nič späť. Potreboval som vedľajší účinok niečo, čo objavovať na obrazovke, ale ja som nepotreboval človeka mi podať niečo späť. Tu, s GetPositiveInt, ako u GetInt, Chcem byť odovzdaný niečo späť. Takže ja hovorím nie, void, na vedenie 23, ale int, ktorý hovorí, táto funkcia že píšem, volal GetPositiveInt sa chystá Podaj mi naspäť celé číslo, nie nič, nie void. Medzitým, to bude trvať vstupy, takže som sa, druh, obrátil to. Nedám žiadnu GetPositiveInt vstup, chcem, aby mi dať svoj výstup. A čo sa potom stane teraz? Takže tu je návod, ako môžem deklarovať premennú. Urobil som to mimo slučku, z dôvodov, budeme nakoniec vidieť, ale to len dáva me 32 bitov s názvom, n, A ja som pre-určujúci je pre uloženie celé číslo. A tu je to, robiť, zatiaľ čo konštrukt, a to je dôvod, prečo je to užitočné. Doslova to urobiť, keď n je menšia ako 1. Tak uvidíme, čo sa stane. Aj vytlačiť, prosím daj mi pozitívne int. Potom som si int, pomocou CS50 je fungovať a uložené v n. A potom, čo riadok kódu pravdepodobne dostane vykonaný ďalší, logicky? Ktoré číslo riadka? Jo, tak 31. Tie by sa vedieť, kým ste bolo povedané, alebo tak nejako vyvodzovať to, ale je to pravda. Ide to zhora nadol a potom sa opakuje. Takže ak som napísal v povedzme, číslo Negatívny 1, je n menšie ako negatívny 1? Jo. Vzhľadom k tomu, negatívne 1 je menšia ako 1. Takže to, čo by sa malo stať? Chystám sa to urobiť pričom n je menší ako 1, takže budem sa vrátiť do riadku 28. A každý time-- a poďme bežať tohle-- aby funkcia 1 skompilovať, a teraz dot lomka funkcie 1. Keby som zadajte záporné 1, to je bude mať na mňa jačať kým som spolupracovať, pretože každý mojich vstupov je menšia ako 1 a ak je to, zatiaľ čo menej ako 1, Budem držať robiť. Ak som sa konečne dať číslo ako 50, našťastie, to hovorí, vďaka za 50. Prečo? Vzhľadom k tomu, akonáhle n nie je menšia ako 1, prestanem neuvízly v tejto slučky, a tento nový kľúčové slovo dnes, return, doslova to robí. Takže som práve realizovaná, v zmysel, čo je ekvivalent getString, kde som podal späť kto používa ma, nejakú hodnotu. Nemusí to byť reťazec, je to int. Tak jednoduchý, rýchly príklad, ale my budeme čoskoro vidieť niektoré sofistikovanejšie verzia ešte. V skutočnosti, poďme sa pozrieť na číselný jedného, ​​ktorý sa nazýva return.c. A toto je vlastne o niečo jednoduchšie. Takže účel tohto programu v life-- poďme skompilovať a spustiť ho, takže sa vrátiť, dot lomítko, return-- oznámenia Program jednoducho kocky hodnotu 2. Je to celkom hlúpe, je to ťažké kód, to neberie žiadne vstupy, ale to preukázať ďalší Funkcie, ktoré som napísal sám. Tak tu som vyhlásil variabilné, zvané x, typu int, rovná počtu 2, úplne ľubovoľné. To je len nejaký našuchorený tlač. To hovorí, že X je teraz, také a taký, Cubing dot dot dot. A kúzlo je zrejme v riadku 21. Volám funkciu nazvanú, kocky, Ja som podal list papiera s číslom 2 písaný na tom, a to, čo hodnota, matematicky, chcem sa dostať z toho? Rovnako ako kontrola sanitačného? 8. Je to tak? Chcem 2 kocky späť, 2 sila 3, takže 8 späť. Takže tam, kde sa kocka realizovaný? No, všimnete je implementované tu dole. A rovnako ako predtým, logicky, hoci syntax je pravdepodobne mnohí z vás úplne nové, Chcem túto funkciu mi ruku list papier s int na to. Takže mám int, na Volá sa ľubovoľne, ale vhodne nazvaný kocky. Vstupné k nemu, je n of zadajte celé číslo, tak to je Ako môžem odovzdať v počte 2 na jeden list papiera. A potom sa ukáže, C podpery matematika, takže nemáte x je pre časy, stačí použiť hviezdičku pre násobenie. A to sa vracia krát N krát N n, čo je jednoducho hodnota kocky. Tak kam ideme sa toto všetko? To je určite víchrica tour, buďte si istý, že v super sekciách a problém set 1, budete prešiel to všetko o to viac. A problém nastaviť 1, budeme prechodu z grafického sveta Scratch na niečo viac príkazového riadku v C. Ale budeme čerpať inšpiráciu z tejto hry tu z dávnych čias, kde pomocou C a štandardnej edícii p set budete realizovať MARIEOVÁ pyramídy. A v hackerské vydanie p set, pokiaľ sa tak rozhodnete voliť, budete implementovať trochu viac náročné pyramídy s dvoma vrcholmi. Budete tiež implementovať algoritmus, chamtivý algoritmus. Ukazuje sa, že je tu niektoré zaujímavé logika za proces beh stanica A pokladníka a skutočne podal niekto staré zmena. Tam je algoritmus, ktorý je celkom jednoduché, že môžete dokonca uchopiť intuitívne, keď ste prvýkrát čítal to-- si uvedomil, že to, čo som vždy vykonať kedykoľvek som si dal niekto nejakú Peniaze back--, ktorý vám umožní vždy minimalizovať počet papierové bankovky alebo kovové mince že ste podal späť užívateľovi. A to, samozrejme, je presvedčivý pretože keď idete do CVS alebo ktovie čo ešte, nechcete, aby podal celá partia tie alebo celá partia haliere. Chcete najmenším počtom mince, pravdepodobne, je to možné. Napokon, budete tiež byť spochybnená fušovať do sveta vody a skutočne dostať zhodnotenie pre mapovanie medzi prietokom vody, z páči, voda v sprche, koľko vody sa spotrebuje. A narážka tam, bude tento klip tu, ktoré budeme končí za len 60 sekúnd, že maľuje obraz low-flow sprchovej hlavice. [Videoprehrávanie] -Dobre. Som sa sem dostal všetko. Mám cyklónu rady F, Hydra, Jetflow, Štokholm Supersteam, čo si len spomeniete. -A Čo odporúčate? -Čo hľadáte? Power človek. Power. -ako Silkwood. -To Je pre žiarenie. -To je správne. -Teraz Čo to je? -To Je Commando 450. Nechcem predať, že jeden. -Ale To je to, čo chceme. Je to komando 450. Nie mi veriť. Používa sa iba v cirkuse. To je pre slony. -Budem Platiť nič. Čo o Jerry? -on Nemohol zvládnuť. Je to delikátna. OH ano. [END Prehrávanie] DAVID J Malan: Dobre. Teda ak na CS50. Uvidíme sa budúci týždeň. Reproduktor 1: [? Scullyová?], [? Ian?] tak ďaleko, ako tento záverečný projekt, Čo ste chlapci prišli s? SPEAKER 2: No, dali sme to rôzne myslenia, a domnievame sa, že najlepší spôsob, ako to-- SPEAKER 3: Môžem? SPEAKER 2: Jo. V každom prípade, v skutočnosti. SPEAKER 3: Takže si myslím, môžeme zhrnúť náš nápad Pre Outros s jedným word-- nič. DAVID J Malan: Nič? SPEAKER 3: Nič. DAVID J Malan: Čo to znamená? SPEAKER 3: Outros sú o ničom. SPEAKER 2: No, myslím, vo filozofii, Myslím, že nič nie je vždy niečo. Reproduktor 1: Takže what's-- čo je predpoklad? SPEAKER 3: Takže je to ako život. OK. Čo si dnes robil? DAVID J Malan: Vstal som, mal raňajky, a prišiel do práce. SPEAKER 3: To je Outro. SPEAKER 2: Ale myslím, nemal niečo, čo sa s ním stane na the-- SPEAKER 3: Nie, nie, nie, nie. Nič sa nedeje. Reproduktor 1: Tak prečo sa pozeráme? SPEAKER 3: Vzhľadom k tomu, je to outro na CS50. DAVID J Malan: Ešte nie.