[Přehrávání hudby] DAVID J Malan: Tak jo, vítejte zpátky CS50. To je začátek týdne dva. Slovo od jednoho z našich přátelé na akademické půdě - Máte-li zájem, možná, a to buď nyní nebo v nějakém budoucím období ještě jednou pohodlnější, výuka studenti středních škol trochu něco o informatice, dělat hlavu, aby tuto adresu URL. Oni potřebují především teď na učitelé, zejména pokud máte měl nějaký projev na informatice. Takže připomenout, že minule jsme zavedli několik datových typů v jazyce C, a které jste začali dostat své špinavé ruce s těmito dosud v problému nastavit jeden. A my jsme měli char. Takže v poněkud technického hlediska, co je char, jak jej známe dnes? Takže je to postava, ale pojďme Přesněji řečeno teď. Co máme na mysli znakem nebo individuální char? Nenumerický charakter - tak nemusí být. Ukazuje se, že sudá čísla, a to i interpunkce a písmena jsou zastoupeny s těmito daty typ známý jako char. Takže to není nezbytně abecedy. Jo? Takže je to ASCII znak. Takže pokud si myslíte, že zpět do týdne nula, když jsme měli byte dobrovolníků přijít a buď držet jejich ruce nebo ne všechny, jsou zastoupeny bity. Ale společně jako skupina osmi představovaly byte. A jsme zavedli pojem ASCII V té přednášce, která prostě mapování mezi čísly a písmeny. A ASCII použití, jako ti lidé předpokládaných, osm bitů představují znak. Tak podle toho, mohou být v případě osmi bitů Každý se na jednom ze dvou hodnot - nula nebo jedna - to znamená, že tam byly dvě možnosti pro tuto osobu - nula nebo jedna - dvě pro tuto osobu, dvě pro tento osoba, dvě pro tento jeden. Takže celkem dvakrát dvakrát dva krát dva krát dva - tak dva osmý celkově. Takže tam je celkový počet znaků 256 je to možné, že můžete představují s osmi bity. Nyní, ti z vás, kteří mluví asijské jazyků by mohl vědět, že je tu více znaky ve světě, než jen AS a BS a CS a DS. A skutečně, ASCII nestačí pro Mnoho světových jazyků. Ale o tom až jindy. Prozatím víme, že v C, pokud chcete reprezentovat dopis, kus interpunkce, nebo prostě něco, co postava v přírodě, používáme char. A to je jeden byte nebo osm bitů. Co int? No, int je celé číslo. Kolik bitů, pokud si vzpomínáte, bylo celé číslo obvykle? Každý, kdo odvolání? Takže je to obvykle 32. Je to vlastně závisí na počítači že používáte. Ale v zařízení, a v mnoha počítače, je to 32 bitů nebo čtyři bajtů - osmkrát čtyři. A ints právě používají pro ukládání čísla, a to buď negativní, pozitivní, nebo nula. A pokud máte 32 bitů a stačí pouze péče o kladných čísel, můžete někdo přibližný, kolik je to možné celá počítač může představovat z na nulu up? Tak to by bylo dva na 32, což je zhruba čtyři miliardy. Takže tyto síly dva se bude opakující se témata v informatice. Jak uvidíme, jsou velmi pohodlné pracovat, i když to není zcela snadné dělat matematiku v něčí hlavě. Takže budeme říkat zhruba čtyři miliardy. Nyní, long long - můžete trochu hádat. Je to déle než int. Kolik bitů? Takže 64 bitů nebo osm bajtů. To prostě znamená, že můžete reprezentovat i vyšší číslo, větší nebo pozitivní větší záporná čísla. A co plavou? To je plovoucí desetinnou čárkou hodnota 32 bitů. To je jen reálné číslo, něco s desetinnou čárkou. Ale pokud potřebujete více místa místo za desetinnou čárkou nebo chcete-li představují větší počet s některými frakce po ní, můžete použít double, což je 64 bitů. Ale je to zajímavý stánek s jídlem zde. Takže pokud se ints omezen 32 bitů a i dlouhé dlouhé výrobky jsou omezeny 64 bity, něco vyvolává otázku, co když opravdu chcete počítat vyšší než 4 miliardy na int? No, stačí použít long long. Ale co když chcete počítat více než dva až 64., dávat nebo brát? Nyní, to je obrovské množství. Ale nakonec, možná jste skutečně péče o tyto druhy hodnot, zejména pokud používáte databázi a začíná sbírat spoustu a spoustu a velké množství dat a přiřazení jedinečné Čísla každého kusu těchto údajů. Tak jsme trochu problém. A podobně, s plovoucí desetinnou čárkou hodnoty - plováky nebo čtyřhra - pokud máte pouze konečný počet bitů, kolik by si celkový počet možná představují? No, je to tak jasné, když zahrnovat desetinnou čárkou. Ale je to jistě konečný. Máte-li konečný počet bitů, konečný počet lidí, konečný počet žárovek, určitě můžete představují jen konečný počet s plovoucí desetinnou čárkou hodnoty. Ale kolik reálných čísel jsou jejich ve světě? Tam je nekonečný. Tak to je trochu problém, protože jsme nemají nekonečné množství Paměť RAM nebo uvnitř našich počítačů. Takže některé náročné věci se může stát. Tak pojďme do toho a zkuste to vyjádřit zde. Nech mě jít dopředu a otevřít gedit. Chystám se jít dopředu a uložit soubor s názvem "floats0.c" jen proto, aby se v souladu s příkladem, který je K dispozici on-line, pokud byste chtěli. A já jdu dál a definovat takto - Chystám se jít dál a říct, int Hlavní neplatné, jak často. A pak v tomto programu, budu prohlásit sám plovák, tak 32-bit proměnné s názvem f libovolně. A pak budu ukládat v něm Nevím, desetiny, takže 0,1. Takže budu vyjádřit, že jako jeden děleno 10, který je zcela legitimní C. A pak se na druhém řádku, prostě jsem chcete vytisknout tuto hodnotu. Takže připomínám, že můžeme použít seznámit printf. Nechceme používat% i pro int. Chceme využít% F na plováku. A pak budu dělat zpětné lomítko n, zavřít Nabídka, čárka, f, středník. Tak tady je můj program. Je tu už jedna chyba. Má někdo pro koho to kliknul už chci upozornit alespoň jeden bug jsem udělal? Jo? Jo. Zapomněl jsem "# include" na top, ale příznak, který, když se pokusím sestavit to bude, že překladač bude na mě křičet, říká nedefinovanou symbol nebo něco v tom smyslu. To není něco pochopit jako printf. Takže budu dělat "# include ", Soubor uložte. A teď je v lepším stavu. Ale já také bude bod se jeden nový údaj dnes. Kromě určení místa Držáky jako% f% i% s, můžete někdy ovlivňují chování tohoto zástupného symbolu. Například, v případě plovoucí Bodová hodnota, pokud chci jen Pro zobrazení jedno desetinné místo po období, můžu vlastně dělat 0.1f. Takže jinými slovy, oddělte f a znak procenta s 0,1, jen vyprávění printf, můžete mít celý banda čísel za desetinnou čárkou bod pro mě. Ale já jen chci vidět jeden z nich. Takže budu pokračovat nyní a ušetřete tento program, jděte do svého terminálu okno, a já jdu do toho a typ, aby plovák 0, zadejte. Vidím, že poněkud záhadný řádek, který začnou dávat větší smysl, jak jsme škádlit ji odlišuje tento týden a další. Teď budu pokračovat a spusťte float nulu. A sakra. Takže je tu další chyba zde z nějakého důvodu. Jsem si jistý, že jedna desetina, nebo jeden děleno 10, není 0,0. Možná jsem prostě hledáte na dostatečný počet číslic. Tak proč říkám, dva 0,2 vidět dva desetinná místa, ne jen jeden. Nech mě jít zpátky do mého okna terminálu tady a nastartování párkrát na viz můj historii. Ještě aby float nula znovu, a pak znovu. A nyní zadat. A teď jsem si jistý, že je to špatně. A já jsem mohl dělat tři a čtyři, a já jsem pravděpodobně bude držet vidět nuly. Tak kde je chyba? Jeden děleno 10 by měl být 0,1. Někdo chtít píchnout, co Základním problémem je,? Jo? Oba jsou celá čísla. No a co? Takže s jedním děleno 10, která je co mám dělat v aritmetice. A já jsem si 0,1. Jo. A tak to je opravdu to problém. Když budete mít celé číslo v počítači a rozdělit jej jiným číslo, Počítač je ve výchozím nastavení bude Předpokládejme, že chcete celé číslo. Problém však, samozřejmě, je že 0,1 není celé číslo. Je to reálné číslo. A tak to, co dělá počítač podle Výchozí nastavení je to prostě vyhodí vše za desetinnou čárkou. Není zaokrouhlit nahoru nebo dolů o sobě. Je to prostě zahodí vše za desetinnou čárkou. A teď to dává smysl. Protože teď jsme jasně odešel s nulou. Ale počkejte chvilku. Nevidím int nula. Já jsem vlastně viděl 0,00. Tak jak to mám smířit teď? Pokud se jedna děleno 10 je nulová, ale já jsem 0,00 vidět, kde je stále převeden zpět do reálné číslo? Jo. Přesně tak. Tak tady v souladu pět, když jsem vlastně ukládání, že 0,1, který je pak zkráceny na nulu, uvnitř plováku, to byly stejné uložením ne jako int, ale Ve skutečnosti, jak plováku. Navíc jsem pak pomocí printf na výslovně tisku, že číslo dvě desetinná místa, i když tam nemusí být ve skutečnosti žádné. Tak to je na houby, ne? Zřejmě nemůžete dělat matematiku, alespoň na této úrovni přesnost, v počítači. Ale určitě existuje řešení. Co je to nejjednodušší oprava bychom mohli možná ano, i jen intuitivně zde vyřešit? Jo? Otočte celá čísla do - jo. I když si nejsem jistý, co je Opravdu se tady děje, je-li zásadně má co do činění s těmito i je ints, no, proč ne já aby to 10,0, takže to 1.0, soubor znovu uložit. Nech mě jít zpátky do dno a překompilovat. Dovolte mi, abych znovu. A tam - teď mám svou desetina reprezentován jako 0,10. Dobrá. Takže to není špatné. A dovolte mi poukázat na jednu jinou cestu mohli jsme to vyřešil. Dovolte mi, abych vlastně vrátit zpět v čase kdy jsme měli to jako jeden Desátý před chvílí. A dovolte mi, abych do toho pusťte a znovu uložit tento soubor jako jiný název souboru, jen aby mít trochu checkpoint. Takže to byla verze jedna. A teď mi dovolte pokračovat a ještě jednu verzi. Zavoláme tuto verzi dva nula indexovány. A já budu místo toho to - víte co? Přidání tečka nula pracuje v tomto případě. Ale předpokládejme, že jeden byl variabilní. Předpokládaná 10 byla proměnná. Jinými slovy, předpokládáme, že jsem nemohl jen těžko kód 0,0 na konci tohoto aritmetický výraz. No, můžu něco dělat v závorkách tzv. lití. Mohu cast že celé číslo od 10 do plováku, a já obsadil že celé číslo jedna na plavat, stejně. Pak matematika, co se děje třeba udělat je účinně 1.0 dělí o 10,0, výsledek, který jde v f jako předtím. Takže když jsem překompilovat to jako dělat plováky 2, a teď vznáší 2, mám stejný odpovědět stejně. Tak to je docela nepřirozený příklad, jak vyřešit tento problém zavedením casting. Ale obecně, odlévání to bude silná věc, a to zejména pro problém nastavit dvě za týden době, kdy Chcete-li převést jeden typ dat další, že na konci dne jsou zastoupeny stejným způsobem. Na konci dne, každý co jsme mluvili dosud je jen ints pod pokličku. Nebo jestli je to příliš nízké úrovni pro vy, jsou to jen čísla pod kapotou. Dokonce i postavy, opět připomenout týden od nuly, jsou čísla pod kapotou. Což znamená, že můžeme převést mezi různé typy telefonních čísel, jsou to jen kousky. Můžeme převádět mezi čísly a písmena, pokud jsou to jen bitů a naopak. A odlévání tímto způsobem je mechanismus programování, který umožňuje násilně změna jednoho datového typu na jiný. Bohužel to není tak jednoduché, jak bych si přál. Chystám se jít zpět do plováky 1, který byl jednodušší, přímočará s 0,0 přidán do každé z nich. A stejně jako rychlý opakovací, nech mě jít napřed a rekompilovat to, aby plováky 2 - Omlouvám se, je to, aby plováky 1. A teď pojďme spustit plováky 1. A na dně, všimněte si, že jsem opravdu dostat 0,1. Takže, problém je vyřešen. Ale ještě ne. Já jsem teď bude trochu zvědavý, a já jdu zpátky do svého printf prohlášení a Poslyšte, víte co? Chtěl bych potvrdit, že tento je opravdu jedna desetina. A budu chtít vidět , řekněme, pět desetinných míst. To není problém. Změním dva na pět, Jsem překompilovat s make. I to, jak znovu plave 1. Hledáte docela dobře. Zdravý rozum kontroly může skončit tam, ale Začínám trochu odvážnější. Chystám se změnit 0,5-0,10. Chci vidět 10 číslic za desetinné místo. A já jdu dál a překompilovat to a znovu plave 1. Tak nějak jsem litovat, že testováno dál, protože moje matematika není tak opravit už, zdá se. Ale počkej, možná to je jen náhoda. Možná, že počítač pracuje trochu divné. Nech mě jít dál a dělat 20 desetinných míst a ujistil jsem se, že vím, jak na matematiku. Vím, jak programovat. Udělat plováky 1, překompilovat a sakra. To je opravdu, ale opravdu dostat daleko od značky. Tak co se to tu děje? Intuitivně, na základě našich předpokladů dříve o velikosti datových typů, Co třeba tady děje pod kapotou? Jo? Přesně tak. Chcete-li tolik přesnost a to je sakra hodně přesnosti - 20 čísel za desetinnou čárkou. Nemůžeš představovat libovolný počet, pokud máte libovolný počet bitů. Ale my ne. Pro plováku, máme jen 32 bitů. Takže, pokud je 32 bitů pouze v deionizovaná způsobem - stejně jako naše lidi na, fáze ruce nahoru a dolů - v konečném počtu způsoby, je jen konečný počet reálných čísel, která mohou představovat s těmito kousky. A tak se nakonec počítač se bude muset začít řezat zatáčky. Počítač může skrývat tyto údaje od nás trochu času. Ale pokud začneme strkat na čísla a díval se dál a dál na koncové čísla v celé řadě, pak začneme vidět, že je to vlastně sbližování Myšlenka na jednu desetinu. A tak to dopadá, tragicky, je tu nekonečný počet čísel se nemůže představovat právě počítač, alespoň s konečnou počet bitů, konečný množství paměti RAM. Teď to bohužel někdy má reálné následky. Pokud lidé nebudou dost vážím nebo druh brát za samozřejmost fakt, že jejich počítač bude jen to, co řeknou to udělat, a ne pochopit tyto základní zastoupení detaily - který, upřímně řečeno, v některých jazycích jsou skrytých před uživatelem, na rozdíl od C - některé špatné věci se může stát. A co jsem myslel, že bych udělal je krok zpět. A to je o osm minut videa. To vysílalo před několika lety, a to dává vhled do toho, co ve skutečnosti může jít špatně, když si nedoceňují těchto druhy detailů ve velmi all-moc reálný svět. Pokud bychom mohli ztlumit světla po dobu několika minut. SPEAKER 1: Nyní se vrátíme k technice katastrofy na Divy. Počítače - jsme všichni zvykli na to, často nepříjemné problémy které jdou s nimi. Chyby, viry a softwarové závady jsou malé ceny platit za pohodlí. Ale v high-tech a high-speed vojenský a kosmický program aplikace, nejmenší problém lze zvětšit do katastrofy. 4. června 1996, vědci připraveni spustit bezpilotní raketa Ariane 5. To nesl vědecké družice navržena tak, aby přesně zjistit, jak zemské magnetické pole ovlivňuje se solárními větry. Raketa byla postavena pro evropský Kosmickou agenturou a odstartovala z jeho zařízení na pobřeží z Francouzské Guyany. JACK GANSSLE: U asi 37 sekund do let, ale nejprve si všiml něco špatně. Trysky byly výkyvné v způsob, jakým by se měl opravdu ne. Přibližně 40 sekund do letu, jasně vozidlo bylo v potížích. A to je, když oni dělali Rozhodnutí zničit. Rozsah Bezpečnostní technik s obrovské střeva stisknutí tlačítka vyhodil raketu před tím, než by se nebezpečí pro veřejnou bezpečnost. SPEAKER 1: To bylo první plavbě z Ariane 5, a jejich zničení se konala kvůli vložené chybu V raketě je software. JACK GANSSLE: Problém na Ariane bylo, že existuje celá řada která je požadována 64 bitů vyjádřit. A chtěli převést k 16-bitové číslo. Se předpokládá, že bylo nikdy bude velmi velký, že většina tyto číslice v 64-bit řada z nich nuly. Mýlili se. SPEAKER 1: Neschopnost jednoho softwaru Program přijmout takové číslo generované jiným byl u kořene selhání. Vývoj softwaru se stala velmi nákladné součástí nové technologie. Ariane 4 raketa byla velmi úspěšný, tolik softwaru vytvořen pro to bylo také používané v Ariane 5. PHILIP Coyle: Základním problémem bylo že Ariane 5 byl rychlejší, urychlováním. A software neměl představoval, že. SPEAKER 1: Zničení rakety Byl to obrovský finanční katastrofu, vše v důsledku nepatrné chyby softwaru. Ale to nebylo poprvé, kdy údaje konverze problémy soužil moderní raketová technika. JACK GANSSLE: V roce 1991, se zahájením první války v Perském zálivu, Patriot Střela zažil podobný typ o početně konverze problém. V důsledku toho, 28 amerických vojáků byly zabito a asi 100 dalších zraněno když Patriot, který měl na ochranu proti příchozí pluje, nedokázal vystřelit raketu. SPEAKER 1: Když Irák napadl Kuvajt a Amerika zahájila Pouštní bouře v roce brzy 1991, baterie Patriot rakety byly nasazeny na ochranu Saúdské Arábie a Izrael z irácké Scud raketové útoky. Patriot je americký středního doletu povrch-k-air systém vyrábí společnost Raytheon. THEODORE Postol: Velikost Patriot interceptor sám je zhruba 20 stop dlouhý. A váží asi 2000 liber. A to s sebou nese bojovou hlavici o cca - Myslím, že je to zhruba 150 liber. A hlavice je sám o sobě brizantní výbušnina, která má fragmenty kolem něj. Kryt hlavice je určena jednat jako brokovnice. SPEAKER 1: Rakety jsou prováděny čtyři na obalu a jsou přepravovány o návěsu. PHILIP Coyle: Patriot protiraketový Systém se vrátí na minimálně 20 let. Původně byl navržen jako obrany raketa vzduchu na sestřelit nepřátelské letouny. V první války v Perském zálivu, kdy ta válka přišel, armáda chtěli použít sestřelit Scuds, ne letadel. Irácké letectvo nebylo tak velký problém. Ale armáda byla starosti pluje. A tak se snažil upgradovat Patriot. SPEAKER 1: přepady nepřítele raketu jede mach pět bylo bude dost náročné. Ale když byl Patriot spěchal do služby, armáda nebyla vědoma Irácký změny, které dělaly jejich Pluje téměř nemožné zasáhnout. THEODORE Postol: Co se stalo je Pluje, které byly přichází velmi nestabilní. Byli viklání. Důvodem byla Iráčané, ve S cílem získat 600km z 300-kilometr-doletu, se hmotnost z předního hlavice. Udělali hlavice lehčí. Takže teď Patriot se snaží přijít na Scud. A většinu času, převážná většinu času, bylo by to jen létat Scud. SPEAKER 1: Jakmile je systém Patriot Provozovatelé si uvědomil, že Patriot ujít svůj cíl, se odpálil Patriots hlavice, aby se zabránilo možné ztráty, pokud byla povolena padat na zem. THEODORE Postol: To je to, co většina lidé viděli, jak velké ohnivé koule na obloze a nepochopený jako odposlechů Scud hlavic. Reproduktor 1: I když v nočním nebi Vlastenci se zdá být úspěšně ničit Scuds na Zahránu tam mohl pochybovat o tom jeho výkon. Tam, Patriot radarový systém ztratil sledovat příchozí Scud a nikdy zahájen v důsledku softwarové chyby. Byl to Izraelci, který jako první objevil , že čím delší je systém se na, větší časový nesoulad se stal v důsledku hodiny vložené do systému počítače. JACK GANSSLE: Asi před dvěma týdny Tragédie v Dhahran, Izraelci hlásí ministerstvo obrany že systém ztrácel čas. Po asi osmi hodinách provozu, si všimli, že tento systém je stává znatelně méně přesné. Ministerstvo obrany reagoval vyprávění všechny Patriot baterií nenechat systémy po dlouhou dobu. Oni nikdy neřekl, co byl dlouhou dobu. Osm hodin? 10 hodin? 1000 hodin? Nikdo nevěděl. SPEAKER 1: Patriot baterie umístěné v kasárnách na Zahránu a jeho vadný vnitřní hodiny byly na více než 100 hodin v noci 25.února. JACK GANSSLE: Je sledován čas Přesnost asi desetinu sekundy. Nyní desetina sekundy je zajímavé číslo, protože to nemůže být vyjádřené v binární přesně, což znamená, že že nelze vyjádřit přesně nějaký moderní digitální počítač. Je těžké tomu uvěřit, ale použít jako příklad. Pojďme se počtu jednu třetinu. Jedna třetina nelze vyjádřit v desítkové soustavě přesně. Jedna třetina je 0,333 děje na na nekonečno. Neexistuje žádný způsob, jak to udělat s absolutní přesnost v desítkové soustavě. To je přesně stejný druh problému která se stala v Patriot. Čím delší je provozován, Nejhorší time error stalo. SPEAKER 1: Po 100 hodinách provozu, chyba v čase jen asi jedna třetina druhá. Ale pokud jde o zaměření rakety cestování u Macha pět, to mělo za následek Tracking Error více než 600 metrů. Bylo by fatální chyba vojáci na Zahránu. THEODORE Postol: Stalo se Scud zahájení byla zjištěna brzy výstražné družice. A věděli, že se blíží Scud v jejich obecném směru. Oni nevěděli, kam že se to stane. Reproduktor 1: Bylo nyní na radaru složka systém Patriot bránit Zahránu najít a udržet sledovat z příchozí nepřátelské rakety. JACK GANSSLE: radar Byl velmi chytrý. To by ve skutečnosti sledovat polohu Scud a pak předpovědět, kde se pravděpodobně by se příště radar poslal puls ven. To se nazývá rozsah brána. THEODORE Postol: Pak, jakmile Patriot rozhodne dost času uplynulo jít zpět a zkontrolujte následující umístění Tento detekovaný objekt, se vrací. Takže když se vrátil do špatné místo, pak nevidí žádný objekt. A rozhodne, že tam byl žádný objekt, to byl falešný odhalování a klesne trať. SPEAKER 1: Příchozí Scud zmizel z radarové obrazovky, a sekund později narazila do kasáren. Scud zabil 28 a byl poslední vypálil během první války v Perském zálivu. Je tragické, že aktualizovaný software přišel na Zahránu následující den. Tento software chyba byla stanovena, uzavření jedné kapitoly v problémové Historie Patriot rakety. Patriot je vlastně zkratka pro sledování fázového pole Intercept cíle. DAVID J Malan: Dobře, takže vystřízlivění příklad, to je jisté. A naštěstí, tyto nižší úroveň chyby nejsou něco, co my budeme typicky ocenit, rozhodně ne některé z našich Nejdříve programů. Naopak, většina chyb, budete setkání bude logické povahy, syntaktické povahy, přičemž kód prostě nefunguje správně. A víte, že docela rychle. Ale zvláště když se dostaneme do konec semestru, bude to stále více a více možností opravdu přemýšlet o designu z vašich programů a souvisejících zastoupení tam taky, dat. Například, budeme zavádět MySQL, která je populární databázový stroj které můžete použít s webovými stránkami na ukládání dat na zadním konci. A budete muset začít rozhodovat, konec pololetí nejen to, co typy dat v tomto směru k použití ale přesně, kolik bitů k použití, zda chcete uložit data jako data a času, jako vždy, a také věci, jako jak velký chceš jedinečné ID, které mají být, řekněme, že uživatelé v databázi. Ve skutečnosti, pokud někteří z vás jste měl Facebook představuje nějakou dobu, a víte, jak získat přístup do vašeho ID uživatele - které se někdy objeví ve vaší profilu se URL, pokud jste zvolili přezdívka pro adresu URL, nebo pokud jste Použité Facebook je graf API, veřejně dostupné API, kterou si může požádat Facebook pro surových dat - můžete vidět, jaké jsou vaše číselná ID je. A před několika lety, Facebook podstatě musel změnit používat ekvivalent ints na dlouhé vzdálenosti s využitím dlouho, protože v průběhu času, jak uživatelé přicházejí a jít a vytvořit spoustu účtů a falešné účty, i oni velmi snadno byli schopni vyčerpat něco jako 4 miliard možnou hodnotu jako int. Takže více na ty druhy otázek po silnici, stejně. Dobře, takže to bylo obsazení. To je nepřesnost. Pár rychlých oznámení. Takže sekce formálně začne letos Neděle, pondělí, úterý. Uslyšíte prostřednictvím e-mailu později tento týden jak k přiřazení sekce. A budete zde také v tomto bodě, jak změnit část, pokud váš Plán se nyní změnilo, nebo vaše úroveň pohodlí se nyní změnilo. Mezitím P-set a jeden hacker jeden ar kvůli tento čtvrtek s možností prodloužení této lhůty za Specifikace až pátek v obvyklým způsobem. Uvědomte si, že součástí problému set specifikace jsou uvedeny pokyny týkající se jak používat CS50 spotřebiče zkontrolujte, stejně jako některé specifické nástroje CS50 jako u modelu 50, který vám může poskytnout se zpětnou vazbou dynamicky kvalita vašeho kódu stylu a také zkontrolovat 50, který vám může poskytnout dynamická zpětná vazba, aby vaši kodexu správnost. Odpusťte, že jsme stále žehlení z několika smyček s kontrolou 50. Několik svých spolužáků, kteří se začínají asi čtyři AM v pátek večer, kdy spec šel si všimli, od té doby několik chyb, že pracujeme díky, a omlouvám se pro každého, kdo zažil zbytečné frustrace. Na vině je moje. Ale budeme sledovat na CS50 dohodnout se, kdy že je vyřešen. Takže slovo na skóre sami. Tak to bude týden nebo dva před vámi začnete se dostat zpětnou vazbu na základní problémové okruhy protože jste ještě nemáte Výuka chlapík. A i pak, začneme hodnotit Problém C stanovuje, než jsme vraťte se zpět a zhodnotit tak poškrábání že dostanete více relevantní zpětná vazba rychleji. Ale obecně na školních osnov, CS50 základní problémové okruhy jsou hodnoceny podle po čtyři osy - rozsah, správnost, design a styl. Rozsah bude řada typicky mezi nula a pěti, které se zachycuje, kolik kus, který si ukousl. Obvykle budete chtít to být pět. Můžete alespoň vyzkoušeli všechno. A všimněte si, že je to multiplikativní faktor tak, že dělá jen část Problém sada není nejlepší strategie. Mezitím je více zřejmé význam správnosti - Jen je váš program korektně respektovat specifikace? To je váha úmyslně více těžce než ostatní dvě osy podle až třikrát, protože si uvědomujeme, že obvykle budete trávit mnohem více času honí nějaké chyby, jak se váš kód do práce, pak jste jsou odsazení a výběrem odpovídající názvy proměnných a podobně, která je na druhém konci spektra stylu. To neznamená, že styl není důležité a budeme kázat ji čas i na přednáškách av úsecích. Styl odkazuje na estetiku vašeho kódu. Vybrali jste dobře-pojmenované proměnné které jsou krátké, ale poněkud popisné? Je váš kód členité, jak jste viděli v přednáška a v souladu ve velkém stylu 50? Konečně je k průmyslovým vzorům tam uprostřed. Design je těžší, kdo dal prst, protože je to mnohem subjektivní. Ale to je snad nejdůležitější tři osy z hlediska pedagogické hodnota v průběhu času, a že to bude učitelské kolegy je příležitost poskytnout vám kvalitativní zpětné vazby. Opravdu, v CS50 přestože máme Tyto vzorce a výsledky, na konci dne se jedná o velmi záměrně velmi malé kbelíky - bodové hodnoty mezi nulou a třemi a nula a pět. Nesnažíme čerpat velmi hrubé linky mezi základní problémové okruhy nebo mezi studenti, ale spíše soustředit, stejně jako můžeme na kvalitativní, latinka zpětná vazba, a to buď na psacím stroji nebo slovní od vaše konkrétní učební kolegy, budete poznat docela dobře. Ale obecně ty, které jsou váhy že různé osy budou mít. Mezitím, taky to stojí za to udržet v paměti, že byste neměli předpokládat, že Tři z pěti je 60% a tedy zhruba selhávají. Tři záměrně chtěl být druh uprostřed silnice dobré. Pokud jste stále na trojky začátku semestru, to je opravdu chtěl být dobrým místo, kde začít. Pokud jste stále dvojky, jarmarky, je tu určitě nějakou práci zaplatit o něco více pozornosti, využít sekcí a úřední hodiny. Pokud jste stále čtyřky a pětky, skvělé. Ale opravdu, doufáme, že se trajektorie mezi studenty - velmi individuálně na jednoho studenta, ale začíná semestr zde v jakési dva až tři řady, ale končí tady v čtyři-pět rozsahu. To je to, co opravdu hledáte. A mějte na paměti, že deltu můžete vystavovat mezi nulou týden a týden 12, když dělám známky. Nezáleží na tom, jak se k nám zcela jste veletrh na začátku, pokud váš dráha je opravdu nahoru a silný. Akademický upřímnost - a tak mi dovolte dát na mé vážnější hlas jen na chvíli. Tak to samozřejmě má vyznamenání odesílání více studentů než jiné v historii na reklamní tabuli, věřím. Máme druh ztratil na to bod, jak často se to stane. A to ne proto, že studenti v 50 jsou nic víc než jejich nepoctivost spolužáci jinde. Ale uvědomit si také, že jsme velmi dobře na odhalování takové věci. A to je výhoda, že computer science třída má v tom, že může a my porovnat všechny studenty Problém nastaví párové proti každé jiná, a to nejen v tomto roce ale všechny předchozí roky. Máme schopnost, stejně jako studenty třídy, na Google a najít kód na stránkách jako GitHub a diskusních fór. Tam jsou naprosto řešení CS50 je p-nastaví plovoucí kolem tam. Ale pokud můžete najít, můžeme najít. A to vše je velmi automatizován a snadné a smutné pro nás najít. Ale chci zdůraznit také to, že Samozřejmě akademická poctivost politika moc má být velmi opak tomto duchu. Opravdu, v tomto roce jsme přeformulovat věci v učebních osnovách být tak, tečka dot dot, se podrobněji v učebních osnovách. Ale zastřešující téma v průběhu opravdu být rozumný. Jsme si vědomi toho, že dochází k významnému množství pedagogických hodnota o spolupráci, do určité míry, se spolužáky, kdy si dva nebo tři nebo více jsou stojící na bílou tabuli Whiteboarding se, aby se mluvit své myšlenky - zápis z pseudocode v obrazech, diagramů, co by mělo být, pokud Mario byste měli napsat, že první v pseudokódu. Co by hladový algoritmus - jak by se chovat za Problém nastaví jeden? A tak si uvědomit, že chování které doporučujeme je velmi hodně v tomto směru. A v učebních osnovách, uvidíte celá parta kulky pod přiměřené kategorie a není rozumné kategorie, která pomáhá nám pomoci si zabalit svou mysl v okolí, kde my čerpat tento řádek. A obecně, slušné pravidlo je, že pokud jste se snaží řešit některé chyby a váš přítel nebo spolužák sedí vedle vás, je to rozumné pro vás ukázat mu nebo jí váš kód a říct, hej, můžete pomoci me zjistit, co se děje špatně? Nechceme typicky zahrnovat na opačné straně. To není správná odpověď na vaši přítel nebo spolužák tady, abych řekl, oh, stačí se podívat na moje postava a že se z toho. To je trochu nesmyslné. Ale mít někoho jiného, ​​jiný mozek, další pár očí se podívat na obrazovka nebo se podívejte na kódu a říkají, že jsou si jisti, že chcete mít smyčky tu? Nebo jste jisti, že chcete že středník tady? Nebo oh, to znamená, že tato chybová zpráva. Ti jsou velmi rozumné a podporováno chování. Případy, na které jsem se zmiňovat dříve se redukuje, když jsou studenti pozdě v noci, takže špatný úsudek, rozhodnutí a jejich posílání e-mailů kód nebo někdo jiný jen říkám, tady, je to v Dropbox nebo Googling pozdě v noci. A tak bych povzbudit a naléhavě vás prosím, Pokud máte ty nevyhnutelné chvíle stresu, jste narážela do proti termínu, nemáte pozdě den, protože je to již v pátek od které bod, email průběhu hlavami nebo sám přímo. Řekněme, poslouchej, já jsem v mém prasknutí zde. Pojďme se bavit a na to přijít. Uchýlit se k internetu nebo jiné ne rozumné chování není nikdy řešení, a příliš mnoho z vašich spolužáci jsou již zde na Areál kvůli tomu špatný úsudek. Ale je to velmi snadné obcházet tento řádek. A tady je malý obrázek pro zpestření jste se z Reddit takže nyní bude vše v pořádku. Tak rychlou rekapitulaci, tedy , kde jsme přestali. Takže minulý týden, připomenout, že jsme zavedli podmínky, není Scratch ale v C tentokrát. A tam byla nějaká nová syntaxe, ale opravdu žádné nové nápady samy o sobě. Měli jsme logické výrazy, které bychom mohli nebo společně s dvěma svislými pruhy nebo a spolu se dvěma ampersandy s tím, že po levé a právo musí být pravda aby to vykonat. Pak jsme měli spínače, které jsme se zaměřili na krátce, ale navrhuji, jsou opravdu prostě jiné syntaxe pro dosažení Stejný druh cíle, pokud víte, předem, jaké jsou vaše případy se bude. Podívali jsme se na smyčky. For je snad nejčastější, nebo alespoň jeden, že lidé typicky dosáhnout pro instinktivně. I když to vypadá trochu tajemný, uvidíte mnoho, mnoho příkladů tohoto Netrvalo dlouho, jak jste již koncem minulého týdne. While může podobně dosáhnout totéž. Ale pokud chcete dělat žádné inkrementace nebo aktualizaci proměnné hodnoty, musíte to více než ručně pro smyčce, než dovolí. A pak je tu do-while, což nám umožňuje něco udělat alespoň jednou při co jinak je to pravda. A to je zvláště dobré pro programy nebo hry na místo, kam chcete vyzvat uživatele k něčemu alespoň jednou. A pak, pokud on nebo ona nespolupracuje, možná budete chtít, aby to znovu a znovu. S proměnnými, mezitím jsme měli linky kódu, jako je tento, což by mohlo být dva řádky. Dalo by se prohlásit názvem int čítač, středník. Nebo můžete jen deklarovat a definovat to, abych tak řekl. Dát jí hodnotu současně. A pak konečně, jsme si povídali o funkcích. A to byl pěkný příklad v pocit, že to ukazuje, dva typy funkcí. Jedním z nich je GetString (), která opět dostane řetězec od uživatele. Ale GetString () je docela zajímavé, pokud jsme použili, protože jsme vždycky s něco na levé straně znaménko rovná se. To znamená, že GetString () vrací hodnotu. Vrací se samozřejmě řetězec. A pak na levé straně, my jsme prostě šetří tento řetězec uvnitř proměnné s názvem jméno. Toto se liší, v jistém smyslu, z printf protože printf, alespoň v našich Použití zde nic nevrací. Mimochodem, to něco vracet. My prostě nezajímá, co to je. Ale má to, co je tzv. vedlejší účinky. A to, co je to, že vedlejší účinek v každém případ, že bychom viděli tak daleko? Co printf dělat? Tiskne něco na obrazovku, zobrazuje text nebo čísla, nebo tak něco na obrazovce. A to je jen za vedlejší efekt protože to není opravdu předání mi to zpátky. To není odpověď uvnitř černé skříňky, které jsem pak mohou dostat do a chytit. Je to prostě dělá to na jeho vlastní, moc jako Colton byl zapojen do tohoto černá skříňka minulý týden, a nějak magicky kreslil na tabuli beze mě vlastně jedná. To by bylo nežádoucí účinek. Ale když jsem se vlastně musel dostat zpátky tady a říkají, ach, tady je řetězec od uživatele, který by být návratová hodnota. A tak daleko jsme se používá pouze funkce že ostatní lidé psali. Ale můžeme skutečně udělat to druhy věcí sami. Takže jsem jít do CS50 spotřebič znovu. Dovolte mi, abych zavřít kartu, že jsme se otevře před chvílí. A dovolte mi jít dopředu a vytvořit nový soubor. A já jdu dál a zavolejte tuhle positive.c. Tak jsem chtěl udělat něco s kladná čísla zde. Takže jsem jít dál a dělat int - Omlouvám se - # Include. Nedělejme to stejné chyba jako předtím. Int main (void), otevřený kudrnaté rovnátka, uzavřená složená závorka. A teď chci udělat následující. Chci napsat program, který trvá na tom, že uživatel zadá mi kladné celé číslo. Takže není GetPositiveInt funkce v knihovně CS50. Je tu jen GetInt (). Ale to je v pořádku, protože mám pojmy, s nimiž mohu uložit trochu více omezení na tuto hodnotu. Co jsem mohl udělat něco takového. Takže int n - a pokud jste psát dál, jen si uvědomit, Chystám se vrátit a změnit některé věci v okamžiku - takže int n se rovná GetInt (). A to se děje, aby int uvnitř n. A nech mě být více popisný. Dovolte mi říci něco jako: Žádám, aby mi dát kladné celé číslo. Dobrá. Tak jen trochu instrukcí. A teď co s tím mám dělat? No, já už vím, z mé jednoduché podmínky nebo poboček, stejně jako já měl v Scratch, mohl bych něco říct jako když n je menší než nebo rovna nula, pak chci něco udělat jako, že není pozitivní. A pak jsem mohl udělat - OK, ale já opravdu chci, aby si to int. Takže jsem mohl jít sem, a já mohl trochu kopie této odrážky a to. A pak na tlačítko OK. Takže, pokud n je menší než nebo rovna nule to. A teď, co když uživatel nespolupracuje? No, tak já jdu půjčit zde. A pak jdu sem a tady a tady. Takže to zjevně není řešení, ne? Vzhledem k tomu, že je konec je v nedohlednu. Chci-li požadovat, aby uživatel zadá mi kladné celé číslo, mohu skutečně dostat int. Pak mohu zkontrolovat tento int. Ale pak chci podívat se na to znovu a podívat se na to znovu a znovu zkontrolujte. Tak samozřejmě, co je lepší konstrukci, že se pomocí zde? Dobře, takže nějaké smyčky. Takže budu se zbavit téměř vše. A já chci, aby si to int alespoň jednou. Takže jsem chtěl říct to - a vrátím se zatímco za chvíli - teď, co? Chystám se udělat pravý n dostane GetInt (). OK. Tak to je docela dobré. A teď, jak často Chci to udělat? Dovolte mi, abych dal printf uvnitř smyčky takže můžu žádat znovu a znovu, v případě potřeby. A co to chci dokud je podmínka dělat? Chci v tom pokračovat zatímco to, co je tak? Jo. N je menší než nebo rovna nule. Tak už máme výrazně vyčistit tento kód do. Jsme si půjčili velmi jednoduché konstrukci - do-while. Jsem ukradl pouze důležité řádky kódu, který jsem začal kopírování a vkládání, což nebylo moudré. A tak teď budu vlastně vložit to sem a udělej to jednou. A teď to, co chci dělat na velmi konec tohoto programu? Já si jen říct něco jednoduchého, líbí, díky za - a Udělám% i pro int - zpětné lomítko n, čárka, a pak zapojte n, středník. Dobrá. Tak uvidíme, co se stane teď když jsem spustit tento program. Chystám se jít dopředu a dělat, aby pozitivní. Sakra. Několik chyb. Takže dovolte mi, abych se posunout zpět k prvnímu. Nepracujte přes ně dozadu. Práce přes ně ze shora dolů lest oni kaskády a pouze jedna věc se mýlit. Implicitní prohlášení Funkce GetInt (). Jo. Takže to nebylo dost. Tak nějak jsem udělal stejnou chybu, ale trochu jinak, tentokrát. Musím zahrnují nejen stdio.h, ale také cs50.h, který zahrnuje tzv. prohlášení o získání int, což naučit přístroj, nebo učí C co GetInt () je. Takže dovolte mi, abych znovu uložit. Budu ignorovat další chyby protože budu doufat, že to nějak souvisí s chybou Jsem již opravena. Tak mě nech jít dopředu a rekompilovat s make pozitivní, Enter. Sakra. Tři chyby, stále. Dovolte mi, přejděte do první. Nepoužité proměnné n. Jsme neviděli předtím. A to je také trochu záhadné. Toto je výstup kompilátoru. A co že zvýrazněná linka tam - positive.c :9:13 - říká, že to říká on-line devíti positive.c, na 13. znaku, 13. sloupec, jsi tuto chybu. A především, je to vyprávění mě nevyužité proměnné n. Tak uvidíme - linka devět. Já používám n v tom smyslu, že Dávám jí hodnotu. Ale co kompilátor nemá rád, je že nejsem zdánlivě používat. Ale počkej, já používám ho. V souladu jedenáct, já používám ho zde. Ale když jsem se posunout dolů další na positive.c :11 - tak na řádek 11, znak 12 Kompilátor mi říká, využívání nedeklarovaný identifikátor n. Takže nehlášení znamená, že mám neurčeno to jako proměnná s datovým typem. Ale počkejte chvilku. Udělal jsem přesně to, že v souladu devět. Takže někdo je opravdu zmatený zde. Je to buď já, nebo proto, že kompilátor v souladu devíti, opět jsem prohlásil int n, a já jsem přiřazením vrátí hodnotu GetInt (). Pak jsem pomocí této proměnné n v souladu 11 a kontrolu, zda je jeho hodnota nižší než nebo roven nule. Ale to je patrně špatné a zlomený proč? Řekni to znovu? Ach, musím prohlásit, n před vstupu do smyčky. Ale proč? Myslím, že jsme právě navrhla trochu dávno, že to je v pořádku deklarovat proměnné vše na jednom řádku a pak přiřadit jim nějakou hodnotu. Globální proměnná - pojďme vrátit na tuto myšlenku za chvíli. Proč chcete, abych dal je mimo smyčku? To je. Přesně tak. Takže, i když poněkud neintuitivní, dovolte mi shrnout. Když deklarujete n uvnitř z DO bloku tam - zejména uvnitř ty složené závorky - tato proměnná n má to, co je nazývá rozsah - nesouvisí s naší bodovacího systému Kurz - ale má rozsah, který je omezeny na ty složených závorek. Jinými slovy, pokud se obvykle deklarovat proměnná v souboru Složené závorky, tato proměnná existuje pouze Uvnitř těchto složených závorek. Takže této logiky sám, i když Já jsem prohlásil, n v souladu devět, to v podstatě zmizí z rozsahu, zmizí z paměti, abych tak řekl, v době, kdy jsem narazila linku 11. Vzhledem k tomu, linka 11, bohužel, je mimo těch složených závorek. Tak jsem se bohužel nemůže opravit tím, že se vrací s tím, co jsem dělal předtím. Můžete nejprve udělat. Ale to, co jste teď není cyklicky dělá? Vy jste zřejmě nedostávají int cyklicky. Takže můžeme nechat GetInt () a my by měl opustit GetInt () uvnitř smyčky, protože to je to, co chceme, aby obtěžovat uživatele k znovu a znovu. Ale to nestačí jít do souladu, řekněme, šest. Int n, středník. Nedávejte jí hodnotu, protože ještě nemusíte jen zatím. Ale teď tady dole Oznámení zadávacího řízení - to by bylo velmi snadné chyba. Nechci, aby můj stín předchozí Prohlášení o n.. Chci použít n které skutečně existuje. A tak nyní v řádku 10, I přiřadit n hodnotu. Ale v souladu šesti prohlašuji, n. A tak můžu nebo nemůžu použít v souladu 12 teď? Nemůžu, protože mezi kterými kudrnaté šle je n prohlášen teď? Ten tady na lince pět. K jednomu tady na lince 14. Takže když jsem se vzdálíte, uložit tento soubor, přejděte zpět na a spusťte make pozitivní, sestavil tuto dobu. Tak to už je pokrok. Slash. . / Pozitivní, Enter. Žádám vás, abyste mi kladné celé číslo. Negativní 1. Negativní 2. Negativní 3. Zero. Jeden. A díky za ten je co se nyní tiskne. Nech mě zkusit něco jiného, ze zvědavosti. Jsem bylo řečeno, ke vstupu na celé číslo. Ale co kdybych místo toho zadat beránek? Takže nyní vidíte jiný dotaz - zkuste to znovu. Ale nikde v mém kódu jsem psát zkuste to znovu. Tak kde, pravděpodobně, je to opakování výzva přichází, byste řekli? Jo, od GetInt () sám. Takže jedna z věcí, CS50 personál dělá pro vás, alespoň v těchto prvních několika týdnů, je, že jsme psali nějaké množství kontroly chyb, které v případě zavoláte GetInt (), budete alespoň vrátit int od uživatele. Nebudete mít řetězec. Nebudete mít char. Nebudete něco úplně jinde. Dostanete int. Teď to nemusí být pozitivní. To nemusí být negativní. Neděláme žádné záruky obejít. Ale budeme obtěžovat uživatele opakovat, opakování, opakování, dokud on nebo ona vlastně spolupracuje. Stejně tak, pokud mám 1,23, to není int. Ale když se mi psát, řekněme, 50, že mi dává hodnotu, která jsem chtěl. Dobrá. Takže to není špatné. Jakékoliv dotazy na to, co jsme právě udělali? Klíčem je stánek s jídlem, aby bylo jasno, není tak smyčka, která jsme viděli ještě předtím, než když máme opravdu používat, ale otázka rozsahu, kde proměnné mohou být mohou být použity pouze během stanovené působnosti. Dobře, dovolte mi, abych návrh jste se dříve, že z globální proměnná. Mimochodem, ukázalo se, že další Řešení tohoto problému, ale obvykle správným řešením nebo špatně navržené řešení, je deklarovat svou proměnnou jako to, co je tzv. globální proměnná. Teď jsem trochu porušil svou definici rozsah, protože existuje žádné složené závorky na vrchol a velmi dolní části souboru. Ale důsledky, které je to, že nyní v souladu čtyři, n je globální proměnná. A jak už název napovídá, je to jen dostupné všude. Scratch ve skutečnosti má tato. Pokud jste použili proměnnou, možná si vzpomenete, si musel vybrat, jestli je to pro Tento sprite nebo pro všechny skřítky. No, všichni skřítci je jen jasnější způsob, jak říkat globální. Jo? Ach, opravdu dobrá otázka. Takže připomínám, že v první verzi v mém kódu, když jsem špatně deklarovat a n v souladu devět - Prohlásil jsem to jako proměnná a dal jsem jí hodnotu s operátor přiřazení - To mi dávalo dvě chyby. Jeden z nich, že n nebyl použit, a za druhé, že v souladu 11 Prostě to není deklarován. Takže první, co jsem neměl Adresa v té době. To není striktně chyba prohlásit, variabilní, ale nepoužívejte ho. Ale jedna z věcí, které jsme udělali v CS50 zařízení, záměrně, pedagogicky, je jsme zalomený nahoru očekávání kompilátoru, aby Ujistěte se, že děláte věci, a to nejen správně, ale opravdu správně. Protože pokud jste deklarování proměnné jako n a nikdy ji používat, nebo jej používáte správně, pak to, co je to tam dělá? Je to opravdu nemá smysl. A je to velmi snadné, v průběhu času, pokud nenastavíte vlastní počítač v Tímto způsobem, jen mít kód, který má malé zbytky tady, tam zbytky. A pak měsíce později se podíváte zpět a jsi jako, proč je tato řada Kód tam? A pokud není dobrý důvod, je netěží vás nebo vaše kolegy po silnici muset zakopnout to pak. Mimochodem, kde je že jde? No, připomněl, že pokaždé, když jsme sestavit Program, všechno tohle je tiskne. Takže se vrátíme k tomu. Ale na druhou stranu, aby je nástroj, který automatizuje proces shromažďování podle spuštění kompilátoru aktuální tzv. zvonění. Ta věc, budeme nakonec vidět, má co do činění s ladění se zvláštním program s názvem ladicí program. To má co do činění s optimalizací kód - o tom více v budoucnu. Std = C99 - to znamená jen použít verzi 1999 C. C to už asi ještě déle než , ale oni dělali nějaký pěkný Změny 10 a lety. A tady je příslušná ty. Říkáme, aby něco, co by dříve byli varování Chyba brání studenta z kompilace. A stěnou se rozumí to, že pro celá parta věcí, ne souvisí jen s proměnnými. A pak mi dovolte přejděte na na konci tohoto řádku. A to taky, budeme nakonec se vrací. To je samozřejmě název soubor jsem kompilaci. To připomíná název souboru Jsem výstup jako název mého runnable programu. To prostě znamená, lcs50 použít CS50 knihovna, a všechny nul a jedniček, že Zaměstnanci napsal a sestavil dříve v letošním roce, integrovat je do svého programu. A někdo, co-LM je? Je to matematická knihovna, která je právě tam, i když jste nedělá žádnou matematiku. Je to prostě automaticky za předpokladu, nám dělat. No, dovolte mi ještě jednu další příklad zde otevírá nový soubor. A dovolte mi zachránit tohle jako string.c. Ukazuje se, že pokud hovoříme o datech Typy dnes, je tu ještě děje pod kapotou než jsme viděli doposud. Takže dovolte mi, abych se rychle udělat rychlý program. Zahrnout stdio.h. A já kromě toho, že. A víte, dejte mi neudělá stejnou chybu znovu a znovu. Zahrnout cs50.h. A dovolte mi, abych do toho teď a to int main (void). A teď prostě chci udělat program že to dělá - deklarovat řetězcovou volal sa dostat řetězec od uživatele. A dovolte mi udělat malý návod zde - Dejte mi prosím řetězec - tak uživatel ví, co má dělat. A pak tady dole pod touto Chci udělat následující - pro int i dostane na nulu. Opět platí, že počítač vědci typicky začít počítat od nuly, ale mohli bychom dělat, že jeden, pokud jsme skutečně chtěli. Teď budu dělat i menší než délka řetězce s. Tak strlen - S-T-R-L-E-N - znovu, je to výstižné, protože je to jednodušší, psát, i když je to trochu záhadná. Že je funkce jsme nepoužívá dříve, ale doslova to dělá - návrat na mě číslo, které představuje délka řetězce že uživatel napsal. Pokud zadali ahoj, to by se vrátit pět, protože tam je pět písmena ahoj. Poté, při každém opakování Tato smyčka, i plus plus. Takže znovu, standardní konstrukci, i když si nejste zcela příliš pohodlně, nebo obeznámeni s tím ještě. Ale nyní při každém opakování tohoto cyklu, Všimněte si, co budu dělat. Chci jít do toho a vytisknout z jednoho znaku - tak% c n lomítko na nový řádek. A pak, víš, co chci dělat? Ať už je slovo, které uživatel zadá v jako ahoj, chci vytisknout H-E-L-L-O, jeden znak na každém řádku. Jinými slovy, já se chci dostat na Jednotlivé znaky v řetězci, přičemž až do teď má řetězec jen Byl posloupnost znaků. A ukázalo se, co můžu udělat s, držák, i, závorka, zavřete závorka, středník. A mám udělat ještě jednu věc. Je to v souboru s názvem string.h že strlen je deklarována. Takže pokud chci používat tuto funkci, Musím říci kompilátoru, očekávat, že ji používat. Teď mě nech jít dál a dělat program s názvem řetězec. Dot, lomítko, řetězec. Prosím, dejte mi řetězec. Půjdu do toho a zadejte jej. Dobrý den, ve všech velkých písmenech, Enter. A teď jsem si všimnout, vytisknou jeden znak za druhým. Takže nový údaj, je to, že řetězec, Na konci dne, může být přístupné prostřednictvím jeho osoby znaky zavedením náměstí držák notace. A to proto, že řetězec pod kryt je skutečně posloupnost znaků. Ale to, co je hezké o nich je v paměti RAM počítače - Mac, PC, co to je - jsou to doslova zády k sobě - H-E-L-L-O - na individuální, vedle bajtů paměti. Takže pokud se chcete dostat na osmou takovou byte, který v této smyčky by držák nula, jeden držák, držák dva, držák tři, čtyři držák - to je nula indexovány až do pěti let - , že se vytiskne H-E-L-L-O na vlastním řádku. Nyní, jako ukázku, dovolte mi ukázat vám druhy věcí, které budete nakonec rozumět, alespoň s některými blízko hledáte. Za prvé, to, co jsme do dnešní příklady, pokud byste chtěli, je ve skutečnosti jeden z prvních Jailbreaks pro iPhone. Jailbreaking znamená praskání telefon takže se můžete skutečně použít na jiný dopravce nebo instalace vlastní software. A všimněte si, že to vypadá zcela tajemný, s největší pravděpodobností. Ale podívejte se na tohle. IPhone byl zřejmě přeskakoval pro smyčce, pokud podmínka, jinak stav, parta funkcí jsme neviděli. A opět, nebudete na první pohled pravděpodobně pochopit, jak to funguje. Ale všechno, co nějak se za samozřejmost v našich moderních životech ve skutečnosti má tendenci snižovat i na některé z těchto základů jsme byli dívá. Nech mě jít dopředu a otevřete jednu jiný program, holloway.c. Takže i to je něco, co by opravdu nevím. Ani nikdo z personálu nebo jsem mohl pravděpodobně přijít se na to při pohledu na to proto, že to byl něčí kód , který byl předložen na to, co je historicky známý jako obfuscated C soutěž, kde můžete napsat program který sestavuje a vede, ale je tak zatraceně mystický žádný člověk nemůže pochopit, co bude to dělat do té skutečně spustit. Takže opravdu, když se podíváte na to kód, vidím vypínač. Vidím hlavní. Vidím tyto hranaté závorky z čehož vyplývá, nějaký druh pole. Má někdo chtěl hádat, co tento program skutečně dělá, když spustím Holloway? Ano. OK. Výborně. Takže jen zaměstnanci a nemůžu přijít co tyto věci dělat. A teď konečně, nech mě jít napřed a otevřít jeden jiný program. Tahle - znovu, uděláme zdrojový kód k dispozici online - tohle je jen docela hezké na pohled. Všechno, co udělal, je hit mezerníku docela dost. Ale to je skutečný kód. Takže pokud si myslíte, že je to hezké, kdybychom vlastně tento příkaz na příkazovém řádku, nakonec uvidíte, jak se může dělat věci, jako je tento. Tak jsme vás nechám v takovém případě a uvidíme se ve středu. [Přehrávání hudby] SPEAKER 2: V dalším CS50, TFS uspořádat vzpouru. SPEAKER 3: Tady je. Dostaňte ho! [Přehrávání hudby]