>> DAVID J Malan: Vše Dobře, takže to je CS50.
A to je samozřejmě pátek.
A to je konec týdne jedna.
Takže si možná vzpomenou, že jsme skončili, naposledy, s cliffhanger svého druhu.
Přičemž jsme odhalit tu lež, že žádný ohledu na to, co jste učil roste
up, 1 děleno 10 není, v Skutečnost, 0,1 nebo 0,100 nebo 0,10000.
Ve skutečnosti, pokud bychom sestavit tento Program, jako jsme to udělali včera, s,
aby nepřesnost, a poté udělat tečku, lomítko, nepřesnost,
jsme se dozvěděli, že to je to, co je 1 děleno 10 ve skutečnosti je.
Takže ve skutečnosti to není tak docela pravda.
Ale to dělá narážku na některé Základní omezení počítačů.
A skutečně, mezi co budeme dělat
dnes je se podívat na důvod, proč to má se stalo, jaké důsledky to má,
jak se lidstvo selhalo pochopit to v některých velmi
vážný situations-- výsledek z nichž
byl docela tragický a expensive-- a také
se podívat na to, jak mohou skutečně bránit
proti těmto druhům omezení.
Takže intuitivně, snad, Proto je 1 děleno 10,
podle mého počítače tady, ne jen desetina, 0.10?
Jo.
Co myslíš?
>> Divačka: radix je jiný?
>> DAVID J Malan: Cože je?
Ach, ta základ je jiný?
Takže ne tak docela.
Je to vlastně více zásadní pro hardware.
Jiné myšlenky?
Jo.
Divačka: Oni představovat čísla jinak?
DAVID J Malan: Tak they-- Right.
Představují čísla jinak.
Nepřesně, zřejmě.
Tak, že je-- No, odlišně od čeho?
Nebo od koho?
Od nás?
Divačka: Jo.
Oni nepoužívají desetinné systém [neslyšitelný].
DAVID J Malan: OK.
Takže v jistém smyslu, oni dělají ne použít desítkovou soustavu.
Pod kapotou všechno je, opravdu, binární,
a to je příbuzný, ve skutečnosti.
Ale je to ještě jednodušší vysvětlení než to.
Jo.
>> Divačka: Oni jen tolik bitů.
Mohou pouze uložit až do určité rozsahu, stejně jako s desetinná místa.
>> DAVID J Malan: Jo.
To je to, co se opravdu dostat na to.
Ukazuje se, že počítače typicky, bude vždy jen
použít dispozici omezené množství informací představovat něco.
Je to tak?
Koneckonců, máme fixní pouze Množství místa na pevném disku.
Máme jen pevně stanovenou částku RAM, nebo paměť počítače.
A pokud budete mít pouze pevná částka na něco,
jistě nelze vlastně spočítat do nekonečna nebo jakékoliv číslo, které chcete.
Ty, druh, musí zvolit, co rozsah
hodnot budete podporovat.
>> A tak například, týden nebo dva dávno, když jsme mluvili o ASCII,
a Mluvili jsme o 8 bitů, nebo byte, abych tak řekl,
Nejvíce jsme mohli představují s 8 bitů bylo to, co?
255.
A můžeme reprezentovat 256 celkové hodnoty ale ne v případě, strávíme jeden z nich
na 0-- No, ale budeme-li strávit jeden z nich na 0,
pak největší počet je, samozřejmě, 255.
>> Tak se ukázalo, že se jedná v případě příliš, v této souvislosti.
Začali jsme mluvit, minule, o číslech s plovoucí desetinnou čárkou, které
se liší od celých čísel, v že mají desetinnou čárku
a doufejme, některá čísla po tom, ale jsou příliš.
Počítač je pouze obvykle děje k použití 32 bitů, 64 bitů možná
reprezentovat plovoucí bodovou hodnotu.
Takže i když jsme vyrostli učení matematiky a vědět,
že můžete mít absolutně nekonečný počet čísel
za desetinnou čárkou, nikoli Máte-li konečný paměť.
Ty, druh, mají na kole, nebo vybrat, které
Čísla budete reprezentovat.
A tak si můžete myslet, v jistém smyslu, což je počítač je nejbližší
přiblížení na hodnotu 1/10, který to může dostat, jen s 32 nebo tak bitů.
A není to jen 1 desettin.
>> Například, když změním to Třetiny, což si myslíme, že je ještě jednodušší.
Takže 1 děleno 3.
Dovolte mi, abych uložit soubor.
Nech mě jít napřed a překompilovat ji.
A dovolte mi znovu spusťte jej.
I zde, zřejmě, 1/3 není 0.3 a pak nekonečné množství 3 let
poté.
Máte tuto nepřesnost na konci.
Takže my lidé jsou správné, a co jste se naučili je, ve skutečnosti, správný,
ale my narážela nahoru proti některým omezením.
>> A to, co jsem si myslel, bychom udělat dnes, je začít
při pohledu na, upřímně se Tragické následky tohoto
Někdy, když lidstvo není zcela realizovat
pro tuto realitu a těmito omezeními.
A uvidíme sérii známek od History Channel, který bere
Podívejte se, jak věci šly špatně.
To je asi 8 minut, a vrátíme se po tomto
a podívejte se na přesně to, co ještě může pokazit.
Kdybychom mohli ztlumit lights--
>> [VIDEOPŘEHRÁVÁNÍ]
>> -Computers, Všichni jsme si zvykli na se často nepříjemné problémy, které
jít s nimi.
Chyby, viry, a software závady jsou malé ceny
platit pro pohodlí.
Ale v high-tech a high-speed vojenské a vesmírný program aplikace,
nejmenší problém může zvětšovat do katastrofy.
Dne 4. června 1996, zpracovali vědci zahájit bezpilotní Ariane 5 rakety.
To nesl vědecké satelity navržený
stanovit přesně, jak se Zemské magnetické pole interaguje
se solárními větry.
Raketa byla postavena pro Evropská kosmická agentura
a odstartovala z jeho zařízení na pobřeží Francouzské Guyany.
>> -A Asi 30 sekund do let, se poprvé
si všiml, se něco děje špatně.
Že trysky byly otočné ve způsobu, jakým by se měl opravdu ne.
Kolem 40 sekund do letu, jasně vozidlo bylo v potížích,
a to je, když oni dělali rozhodnutí ho zničit.
Rozmezí důstojník s bezpečnostní obrovské střeva stiskl tlačítko,
vyhodil raketu předtím to mohlo být nebezpečné pro veřejnou bezpečnost.
>> Tohle byla dívka plavba Ariane 5,
a jeho zničení vzal místo z důvodu chyby
vložené do softwaru rakety.
-The Problém na Ariane bylo, že
bylo číslo, které vyžaduje 64 bitů vyjádřit,
a chtěl převést to na 16 bitové číslo.
Předpokládali, že čísla se nikdy nebude velmi velký,
, že většina z těchto číslic v 64 bit číslo bylo 0 je.
Mýlili se.
>> -The Neschopnost jednoho softwarový program přijmout
druh číslo generované jiný byl u kořene selhání.
Vývoj softwaru se stal velmi nákladné součástí nové technologie.
Ariane 4 Raketa byla velmi úspěšná, tak velkou část softwaru
vytvořen pro to bylo také použitý na Ariane 5.
>> -The Základním problémem bylo to, že Ariane 5 byl rychlejší, zrychlil rychleji.
A software neměl představoval, že.
>> -The Zničení rakety byl obrovský finanční katastrofa,
vše z důvodu chyby minut softwaru.
Ale to nebyl první Problémy s konverzí dat časové
byl sužován moderní raketové techniky.
>> -V 1.991, se startem války v Perském zálivu prvé,
Patriot raketa zažila podobný typ
konverzního číslo problému.
V důsledku toho se 28 lidí, 28 amerických vojáků
bylo zabito a asi 100 jiní zraněný,
když Patriot, který měl k ochraně proti příchozí scudy,
nedokázal vystřelit raketu.
>> -Když Irák napadl Kuvajt a Ameriku zahájena Pouštní bouře na počátku roku 1991,
Patriot raketová baterie byly nasazeny chránit Saúdská Arábie a Izrael
z iráckých Scud raketových útoků.
Patriot je v USA, středního doletu povrch-k-vzduch systém
vyráběné společností Raytheon.
>> -Velikost Patriot interceptor, sám o sobě, je o zhruba 20 stop dlouhý.
A váží asi 2000 liber.
A to s sebou nese bojovou hlavici o about-- Myslím, že to je zhruba 150 liber.
A hlavice, sám, je vysoce výbušný,
který má fragmenty kolem něj.
Pouzdro hlavice je navrženy tak, aby chovat jako hrubé broky.
>> -The Rakety jsou prováděny, 4 na obalu,
a jsou přepravovány návěsu.
>> -The Patriot proti raketový systém sahá nejméně 20 let.
To bylo původně navržené jako vzdušná obrana rakety
sestřelit nepřátelské letouny.
Ve válce v Perském zálivu prvé, když ta válka přišla,
Armáda chtěla používat to, aby sestřelit scudy, ne letadel.
Irácká síla nebyla tak velký problém,
ale armáda byla starosti scudy.
A tak se pokusili upgrade Patriot.
>> -Intercepting Nepřítele raketa cestování u Macha pět
šel být dost náročné.
Ale když Patriot byl běhavý do provozu,
armáda nebyl vědom Irácký modifikace, které dělal
jejich Pluje téměř nemožné zasáhnout.
>> Co se stalo, je, že Pluje přicházely, byly nestabilní,
byly kymácení.
Důvodem pro to, byl Iráčany, aby
dostat 600 kilometrů z 300km doletu,
vzal váhu z předního hlavice a dělal hlavice lehčí.
Takže teď, Patriot se snaží přijít na plout, a většinu času,
drtivá většina z Tentokrát to bude jen létat plout.
>> -Jakmile Provozovatelů Systém Patriot si uvědomil, že Patriot minula svůj cíl,
oni odpálili Patriot v hlavici, aby se zabránilo možným obětem jestliže to
nechá spadnout na zem.
>> -To Je to, co většina lidí viděl, Ty velké ohnivé koule na obloze,
a nepochopený as zachytí Scud hlavic.
I když v noci nebe, se objevil Patriots
úspěšně být ničit scudy, na Zahránu,
tam mohl být žádná chyba o jeho výkonnosti.
Tam, radarový systém Patriot ztratil na příchozí Scud,
a nikdy zahájen, vzhledem k software chybu.
Byl to Izraelce, kteří jako první objevili , že čím delší je systém byl na,
tím větší je časový nesoulad se stal v důsledku hodiny vložený
V počítači systému.
>> -O 2 týdny před tragédie v Dhahran,
Izraelci hlášeno ministerstvo obrany,
že systém byl čas ztrácí, že po přibližně 8 hodinách provozu,
si všimli, že systém byl stále znatelně méně přesné.
Ministerstvo obrany odpověděl tím, že říkat všechny baterie Patriot
nenechat systémy na dlouhou dobu.
Oni nikdy neřekl to, co dávno byl.
8 hodin?
10 hodin?
1000 hodin?
Nikdo nevěděl.
-The Patriot baterie umístěný v kasárnách
na Zahránu a její chybné interní hodiny, byl na více než 100 hodin
v noci 25. února.
>> -To Sledoval čas s přesností asi 1/10 sekundy.
Nyní 1 desetiny sekundy, je zajímavá čísla
protože to nemůže být vyjádřené v binární, přesně tak.
Což znamená, že nemůže být vyjádřen, přesně,
v každém moderním digitálním počítači.
Je těžké uvěřit, ale použít jako příklad.
Vezměme si číslo 1/3.
Třetiny nelze vyjádřit v desítkové soustavě, přesně tak.
Třetin je 0,333 děje 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ém, který se stalo v Patriot.
Čím delší je systém běžel se horší stal čas k chybě.
>> -Po 100 hodinách provozu, chyba v době byl jen asi 1/3 sekundy.
Ale pokud jde o cílení raketa jede 5 Mach,
to vedlo k sledování Chyba více než 600 metrů.
Bylo by fatální chyba pro vojáky v Zahránu.
>> Co se stalo, je Scud start byl detekovány včasného varování satelity,
a nový, že Scud byl přichází ve svém obecném směru.
Nevěděli, kam že to přijde.
>> -To Byl nyní až k radaru složkou systému Patriot,
bránit Dhahran, najít a udržet Trať příchozí nepřátelské rakety.
>> -The Radar byl velmi chytrý.
To by ve skutečnosti sledovat poloha Scud
a pak předpovědět, kde to asi bude,
příště se radar poslal puls ven.
To bylo nazýváno rozsah brána.
>> -Tak, Jakmile Patriot Rozhodne dost času má
prošel se vrátit a zkontrolovat další umístění pro tuto zjištěným objektem,
se vrátí zpět.
Takže když se vrátil k špatný místo, to pak nevidí objekt
a rozhodne, že neexistuje objekt, to byla falešná detekce,
a kapky trať.
Příchozí Scud zmizel z obrazovky radaru,
a vteřin později ji narazila do kasáren.
Plout zabil 28 a bylo to poslední, jednou během války v Perském zálivu první vystřelil.
Je tragické, že aktualizovaný software dorazil Zahránu následující den.
Tento software vada měl bylo opraveno, zavírání
jedna kapitola v problémové Historie Patriot střely.
>> [END Přehrávání]
>> DAVID J Malan: Takže budeme se podívat na Některé podobné omezení při jen trochu.
Ale nejprve, pojďme Přechod na několik FYI je.
Takže one-- tento víkend, tam bude flash sekcí,
které jsou určeny k nahradit Pravidelně v naplánovaném profily, které
se spustí za týden odsud.
Podívejte se na webové stránky CS50 je Pro více informací o nich.
Budou také natočen a streamovat žít pro ty, kteří nemohou zúčastnit.
Problém sada 1 je na Webové stránky již hřiště je,
a my se podívat na že v jen trochu.
A také úřední hodiny, bude mít umístit tento od pondělí do čtvrtka.
>> Tak tohle bylo nejvíce kanonická Program jsme se podívali na minule.
Je to jako nejjednodušší Program můžete psát v C,
a dokonce i to je trochu odvážné tvrzení.
Je to tak?
Protože tam je hodně zdálo složitost v této oblasti.
Takže pojďme se rychle podívat na to, co některé z těchto prvků
byly a pak se snažíme poskytnout mentální model, jak
ty nejjednodušší programů pracovat, a pak začneme
při pohledu na věci stále složitější.
Takže tento řádek tady, zdůraznil nyní, žlutě, co jsme říct, minule,
že to dělá pro nás?
Jaký je účel to slouží?
Každý, kdo se dál zpět?
Jo.
>> Divačka: [Neslyšitelné]
DAVID J Malan: Dobrý.
Tak to vám dává přístup na příkazy, nebo pojďme
Funkce volání je, že někdo jinde napsal, že jsou deklarovány,
tak říkajíc, v nějakém jiném souboru.
Tak uvidíme, přesně to, co .h soubor je oproti souboru .c, popř.
Ale teď, jen vím, že printf, například,
je mezi funkcemi, které byly deklarované v nějakém jiném souboru, někde
jinde na pevném disku mraku, který nám umožňuje přistupovat k printf a používat jej
aniž by bylo nutné znovu vynalézat že kola sami.
Mezitím, hlavní.
Jaký byl analog hlavní, minulý týden?
Jo.
>> Divačka: Zelená vlajka kliknutí.
>> DAVID J Malan: Jo.
Scratch je, když zelená vlajka klepnutí.
Je to jako puzzle že míč věci pryč.
A tak podobně, to dělal svět se rozhodl před několika lety, že v C,
a spoustu dalších jazyků, Chcete-li napsat program,
vaše první funkce musí být nazýván, hlavní.
A to musí vypadat takto.
Ale my se vrátíme, jindy, s čím, int,
a, void, znamená v tomto kontextu.
Pro tuto chvíli, složené závorky jsou laskaví jako se Scratch je skládačky tvaru
zapouzdřující určitý počet řádků.
A mezi na tratích tady, je tohle tady.
printf je funkce, jejíž účel život je vytisknout formátovaný řetězec.
A formátovaný, mám na mysli vás mohou připojit zástupnými hodnotami,
a můžete určit, kolik desetinné místo bodů, kolik čísel vytisknout
po desetinnou čárkou a podobně.
A printf, samozřejmě, trvá jeden nebo více argumenty nebo parametry,
jinak známý, jednodušeji, jako vstupy.
>> Takže printf, jako hodně funkce, bere vstupy.
A tyto vstupy jsou zahrnuty dvěma závorkách zde.
A uvnitř nich je jeden vstup.
Je to řetězec, jak jsme to nazval, což je jen posloupnost znaků,
jako slovo nebo frázi, nebo celku esej dokonce mezi uvozovkách.
A to je to, co se děje na ovlivňovat Chování printf, protože, samozřejmě,
je to jen obecný funkce tisku.
To nebude vědět, co k tisku, pokud ji říct.
A pak, někteří markanty.
Co říkáme to divný posloupnost symbolů, je?
Jo.
>> Divačka: Nová řada.
>> DAVID J Malan: Nová řada.
Tak to dopadá, můžete nejen zasáhnout, vstoupit, když píšete program.
Obecně platí, že kompilátor dostane trochu zmatený, jak na to, co máte na mysli.
Spíše, musíte doslova říkají, dej mi nový řádek zde.
A tak / n je to, co jsme se obecně zavolejte znak escape.
Takže n, na nový řádek.
A kompilátor ví, že když vidí / n,
že by se ve skutečnosti vyvolat počítače, v konečném důsledku, nebo printf, v tomto případě,
vytisknout aktuální Novinka linka, stejně jako bít, zadejte,
klávesu na klávesnici.
A konečně, co udělal říkáme Tento kus syntaxe je pro?
Co to představuje?
Jo.
>> Divačka: [Neslyšitelné]
>> DAVID J Malan: Je to jen konec řádku.
Je to konec prohlášení.
A uvědomit si, že my ne dát je všude.
Určitě ne dát je na koncích každého řádku.
Například, tam nic není na první řádek, je tu nikdo na lince
s, hlavní, tam nic není po složených závorkách,
ale začnete vidět a získat obeznámeni s tím, kde je to jen pro.
A to je téměř vždy po funkci volat nebo prohlášení, některé akce
že jste skutečně užívat.
>> A vím teď, a to zejména v případě, mezi ty méně pohodlné,
to jsou druhy hloupé věci že skončíte omylem výprask
hlavou proti zdi nad.
Vzhledem k tomu, budete logicky důvěru v nějakém problému
jste vyřešil pro problém set, a ta zatracená věc právě
nebude kompilovat ani spustit.
A tak často, na začátku, bude to být proto, že jste vynechal závorky,
nebo jste vynechal středník.
A tak jen budou mít na zřeteli tyto druhy věcí,
a pokusit se dostat frustrovaný je, protože velmi rychle to dělá
stát se stará vesta.
Ale je to velmi snadné se dostat frustrovaný brzy, jako výsledek.
>> Takže teď, pojďme se podívat na to, jak Tato linka je skutečně pracuje
a pak se podívejte na mírně složitější jednu.
Takže máme tady se schopnost vypracovat na této obrazovce.
A předpokládejme, že tohle je moje obrazovka počítače,
ale já jsem psaní, ahoj programu, a já neprovedly, printf.
Někdo jiný zavedla, printf.
Kdo by chtěl tvrdit, že zavedly, printf?
Pokud se nám může?
Dobře, Jak se jmenujete?
>> STUDENT 1: [? Copal. ?]
>> DAVID J Malan: Copal, pojď nahoru.
Pojď nahoru.
Dobře.
Takže máme tady, některé jmenovky, protože uděláme malou hru tohoto.
A my vám zavolá, printf.
A pokud chcete, aby sem přišel, to, co jsem právě natažený na obrazovce,
je to docela jednoduše, tam jsem já, tohle.
>> Dobře, takže, ahoj jmenuji se, printf, pokud byste chtěli, aby si to.
Dobře.
A pokud můžete jít stánek podle obrazovce počítače
jako kdyby jste funkci, kterou přišel s tímto počítačovým systémem.
A váš cíl v životě je aby skutečně něco vytisknout.
Ale podobně jako programu jsme prostě musel na obrazovce, zde,
budeme muset skutečně dát vám nějaký vstup.
>> A tak, pokud můj vstup, tady, je zdá se, že to, co je předán do printf,
pojďme trochu mock to takhle.
Chystám se doslova psát na kus papíru, "ahoj, svět"
zpětné lomítko N. A aby bylo jasné, co se Právě jsem natažený na tento kus papíru,
vypadá takto.
Takže když jsem spuštění tohoto programu, a to žlutá řádek kódu dostane popraven,
je to, jako bych, program Dobrý den, jsem podal nějaký vstup pryč do funkce
že někdo jiný napsal.
>> A pokud se vám, prstem, mohl ve skutečnosti, prstem,
kreslit na obrazovku cokoliv jsi to ty, které byly odevzdány,
účinek, nakonec, je přesně vidět, že na obrazovce.
A malý koutek případ.
A dobře, neměli bychom vidět závěrky, nový řádek, v tomto bodě.
Bylo by nesprávné pro vás explicitně nakreslit nový řádek.
Ale pokud budeme stále psát slova na obrazovka, by skončit pod tím.
>> Takže děkuji moc, ale držet jen na jednu chvíli tady.
Nyní potřebujeme jeden další dobrovolník, kdybychom mohli,
že to bude muset hrát roli of-- Je to jen lidi v orchestru
právě teď.
Jak about-- OK.
Právě tady.
Pojď nahoru.
Jak se jmenuješ?
>> Student 2: [? Ivay. ?]
DAVID J Malan: Sorry?
Student 2: [? Ivay. ?]
DAVID J Malan: Ethan, pojď nahoru.
Ne?
Řekl jsem si, že špatně, dokonce i poté, co jste ho dvakrát říkal?
Pojď nahoru.
Je těžké slyšet tady.
DOBŘE.
A je mi líto, Jak se jmenujete?
>> Student 2: [? Ivay. ?]
>> [? DAVID J Malan: Ivay. ?] DOBŘE.
Pro tuto chvíli, pokud nemáte mysl, jste getString.
>> Student 2: OK.
Super.
DAVID J Malan: Takže pokud byste chtěli stát tu jen na chvíli,
pojďme se podívat na mírně více komplexní program, který
Nyní má tři řádky kódu.
Takže máme, člověk, uveďte své jméno pomocí printf; dva, volání getString,
následuje přiřazení k variabilní volal, řetězec s, nebo tzv s;
a pak další volání, printf, ale tentokrát se dvěma vstupy.
>> Takže jsme už udělali stav Vaše jméno, nebo spíše, máme
již udělali printf volání.
Takže budu psát, Uveďte své jméno.
A tak, co budu projít, printf, za chvíli,
je poměrně jednoduše, to.
Takže pokud chcete jít dopředu a kreslit to Na obrazovce se, že je to váš vstup teď.
Dobře.
A zapomenout na řetězec, máme nyní naše vlastní řádek kódu sem.
Takže, GetString, potřebujeme skutečně volat, getString.
Takže váš cíl v životě je jen tak ven do orchestru, kdybyste mohl,
a získat něčí jméno.
Ale pojďme dát něco, aby to na.
Chcete-li, jít vpřed a získat řetězec,
získat něčí jméno na to kus papíru, kdybys mohl.
>> Dobře.
A uvidíme, za chvíli, jehož jméno jsme získali.
Mezitím, co budu mají připravené, je prázdný kus
papíru, ve kterém, jdu uložit cokoliv hodnota je
je, že GetString se vrací ke mně, I, který je řetězec proměnnou s názvem, s.
Dobře.
Takže to, co máte tady?
Nik.
Dobře.
Takže máme tu NIK jméno.
Takže tohle je to, co doslova byla vrácena
ke mně, abych tak řekl, o getString.
>> I teď, chystám vykonat levá strana
tohoto výrazu, kde jsem prostě opisovat, pro dnešní účely, Nik.
Takže teď, mám proměnnou volal, s, ukládání Nik jméno.
Už jsem podal na printf, předchozí tvrzení.
Ale v našem třetí a poslední řádek kód, Vlastně jsem se rukou printf
něco trochu different-- "Dobrý den,% s," zpětné lomítko n.
>> A tak se poslední řádek jdu k send-- poslední věc Jsem
bude psát teď dolů, je to.
Takže dva řádky kódu, nebo spíše poslední řádek kódu,
žádá dvě inputs-- jedním, toto, a dva, to.
Takže pokud naše printf funkce Nyní můžete mít tyto jako vstup,
dovolte mi, abych vymazání obrazovky pro vás.
Vlastně ne, můžete jít dopředu.
Necháme to, protože je to na stejném programu.
Měli bychom vidět, ahoj, Nik.
Dobře.
Takže to bylo docela málo obruče proskočit, jen
psát, uvést své jméno, a, ahoj, Nik.
Ale tato jednoduchá myšlenka na předávání zpráv, vstupní a výstupní procházení přijímání,
je přesně model budeme mít i pro ty nejsložitější funkce.
Takže děkuji moc vám oběma.
Máme krásný stres míč pro tebe.
A děkuji našemu getString a printf dobrovolníci podobně.
Děkuji.
Dobře.
Děkuji vám oběma.
>> Takže jsme mluvili o tak daleko, hlavně o řetězcích.
A ukázalo se, že C může ve skutečnosti porozumět několika různých typů dat.
Ve skutečnosti, pojďme Podívejte se na tyto zde.
Takže C, a mnoho jazyků, chápat věci nazývané znaky.
Char je obecně jeden byte, nebo osm bitů.
A to představuje jeden znak, jako písmeno A, nebo na základním kapitálu
písmeno A, nebo malé písmeno A, nebo vykřičník,
nebo libovolný znak, který můžete psát na klávesnice, a někdy i více.
Také jsme se ocitli na plováky.
Plovák je, obecně, je 32-bitová hodnota, nebo čtyři byty
protože zase jeden byte je osm bitů.
>> Takže plovák je plovoucí bodová hodnota, něco s desetinnou čárkou.
A opravdu, to je to, co film mluvil
o tom, kdy mluvili o plovoucí bodové hodnoty, některé pevný počet bitů
používán reprezentovat reálné číslo.
Ale je tu i věci, zvané zdvojnásobí.
Ty existují v Javě, pokud jste si vzal APC,
a dvojité, jak název naštěstí navrhuje, je dvakrát tak velký jako hotovost.
Je to stále reálné číslo, to prostě má více bitů
se kterým se někdy být přesnější, nebo při skladování i větší množství.
int je snadné.
Mluvili jsme o tom minule.
Je to jen celé číslo.
A to je obecně 32 bitů, nebo čtyři byty.
>> A tak, pokud máte, podívejme se nyní, 32 bits-- a dělali jsme to v týdnu 0,
někdy tak briefly-- pokud máte 32 bitů, co je největší
číslo, které může představovat jako celé číslo?
Plus minus?
Je to jako 4 miliardy, a to pouze tehdy, pokud jsme
což představuje pouze kladná čísla.
Pokud máte 32 bitů, a chcete-li představují záporná čísla stejně,
Tento dosah je v podstatě negativní 2000000000 2000000000 na pozitivní.
Ale obecně, začneme při 0 jít až na 4 miliardy.
>> Nemusíte přesně vím, ale můžeme vidět, ve skutečnosti, když jsem zrovna
otevřít malou kalkulačku, zde.
Dokážu 2 na 32, a to je přesně, jak velký,
kolik hodnot si můžete představují, s 32 bity.
A to je zhruba 4000000000.
Takže se budeme držet vidět, že číslo v několika různých místech.
Ale pokud budete potřebovat delší čísla, než to,
to dopadá je tu něco, co nazývá long long.
A dlouhá dlouho obecně 64 bitů, které
znamená, že je o řád ještě větší než int.
>> Tak jsem si ani vyslovit největší číslo, které může představovat,
ale je to výrazně větší.
Nyní jako stranou, historicky, pokud int je 32 bitů,
a dlouhý dlouhý je 64 bitů, jak velký je dlouhá, není dlouhá dlouho?
Člověk by si myslel, že je to déle než int ale možná méně než dlouhá dlouhá dlouhá,
ale ve skutečnosti záleží.
>> A tak to dopadá jedna z frustrace příliš,
s psaním kódu na některých systémech, je to, že ne všechny z těchto datových typů
mají předem určené hodnoty.
Někdy je to tolik bitů.
Někdy je to, že mnoho bitů.
Takže jste skutečně vědět, někdy, jaký hardware
vedete svůj software na.
Naštěstí, jiné jazyky a Jiné typy dat, které nyní existují,
umožní být přesnější.
No, viděli jsme řetězec, a my jsme viděli bool, taky,
ale ukázalo se, ty přicházejí pouze s knihovnou CS50.
Takže ty nejsou postaveny do C Ti namísto toho,
přicházejí v tomto souboru nazvaném CS50.h, že budeme nakonec
oloupejte vrstvy.
Ale teď, jsou to jen další datové typy.
Boolovské je pravdivý nebo nepravdivý, a Řetězec je posloupnost znaků,
jako slovo.
Nyní printf, jsme viděli, má zástupné symboly,% s je jeden.
A mělo by být možné, aby nyní, vyvodit z těchto dalších příkladů, jak
můžete mít zástupný symbol Pro různé typy dat.
Například, hádejte, pokud jste chtěl vytisknout jeden znak pomocí
printf, zástupný symbol je pravděpodobně% c.
A pokud chcete, vytiskne se integer s zástupný,% i.
% lld je dlouhá dlouhá desítková hodnota, ale dlouho dlouho, takže mapuje na to.
A potom% f pro plovoucí bodová hodnota nebo za double,
takže někdy, že jsou opětovně použity v různých kontextech.
Tak uvidíme a použití některé z nich v průběhu času.
A printf a další funkce i únikové sekvence podporu ostatních "
a někdy, jsou-li nutná.
Takže zpětné lomítko n je nový řádek.
Zpětné lomítko t, má někdo Chcete, aby se bodnout?
Divačka: Tab.
DAVID J Malan: Tab.
Takže pokud skutečně chtějí vytisknout kartu, ne
pevný počet míst, ale skutečné Karta znak, nemusíte hit vaší,
Karta, na klávesnici, obecně, vlastně děláte zpětného lomítka t.
Zpětné lomítko dvojité uvozovky, Proč bych někdy chtěl, že?
Je to tak?
Proč nemohu jen zadejte a dvojité uvozovky na mé klávesnici?
Divačka: Vzhledem k tomu, jinak, je to
bude si myslet, že je konec Líbí se mi z tiskového [? textu. ?]
>> DAVID J Malan: Přesně tak.
Pamatujte si, že s našimi printf příklady, kdy jsme
míjeli na printf na vstupu, na levé straně tohoto vstupního řetězce
a na pravé straně tohoto vstupu na jaře, samozřejmě, byl dvojitý citát.
Pokud váš vlastní vstup má dvojí citace ve středu to,
Počítač by mohl potenciálně zmatený, pokud jde o,
Znamená to, uvozovky patří ve středu?
Má to patří se levá?
Má patřit s pravou?
A tak, pokud chcete, aby to výborný jasné, vy zpětná lomítka dvojité cenovou nabídku,
tak, že utekl, abych tak řekl, a to není sjednotil na něco jiného.
A je tu několik dalších zde, zpětné lomítko r, jednoduché uvozovky, 0,
že můžeme vidět v průběhu času, jak je také.
A teď, co o funkcích?
>> Takže akcí, které můžeme vzít tak daleko v tomto jazyce, C, dobře, jsme viděli,
printf, samozřejmě, a vše z ostatních na obrazovce,
tu, že budeme používat pro Samozřejmě je jen prvních pár týdnů,
ve chvíli, kdy knihovnu CS50.
A dělají to mnohem jednodušší, v C, skutečně získat vstup uživatele.
Ukazuje se, že v C, a upřímně řečeno, v několika jazycích,
to je skutečnou bolest v krku dělat něco jednoduchého, jako vyzve uživatele
na klávesnici, pro jeho vstup.
A tak tyto funkce usnadňují.
>> A to také chyba kontrola po celou dobu,
tak, že když vás vzpomínám na středu jsme
viděl, opakování, varování, když jsem nespolupracoval,
a já jsem napsal slovo, místo čísla?
Udělali jsme těžkou práci brzy na ujistěte se, že uživatel spolupracuje.
Ale to jsou jen trénink kola, že budeme nakonec,
a rychle, vzlétnout.
>> Takže rekapitulace, a pak, pojďme se rychle podívat,
podobně jako jsme to udělali s Scratch, na některé kanonické konstrukty v C.
Tím se myslí, třídění o, bude vichřice turné,
jen proto, že máte odkaz a že jste viděli, co na první pohled.
Ale pak se podíváme na aktuální kódování použít některé z těchto stavebních bloků.
Tolik jako v Scratch, když jsme se prohlášení líbí,
říkají, nebo počkat, v C, máme funguje stejně, jako printf.
>> Pokud chceme vyjádřit podmínku v C, je to podobné, v duchu,
této skládačky, které vypadalo to na Scratch.
Ale místo toho, my doslova jen psát, pokud.
A pak, v závorce, jsme dali podmínku,
pokud tato podmínka je, co budeme zavolej, opět, je logický výraz.
A opět, to je druh pseudokódu.
A, ve skutečnosti, že // je komentář.
Je to jen anglická slova pro sebe.
Ale to je obecný Struktura, je-li, stavu.
Ale uvidíme beton příklady v chvilku.
>> Chcete-li mít dvoucestný rozcestí,
podobně jako jsme to udělali s naším dobrovolníkem na Středa, můžete mít, else if.
A pokud chcete mít třetin a Konečná podmínka, a nebo výchozí situaci,
můžete mít jen blok jiného, ​​tam.
A podobně se boolean výrazy, můžete, a je dohromady.
A my jsme viděli ve středu, že to není jediný ampersand,
to je dva, z důvodů nižší úrovně, který budeme nakonec vidět a hrát.
Nebo-ing věci dohromady je 2 svislé pruhy.
Na americkou klávesnici, to je obecně klíčovým
s klávesou Shift výše váš klávesu Enter nebo Return.
>> Pak je tu těch věcí, kteréž budeme používat asi jednou nebo dvakrát.
Jsou funkčně ekvivalentní co můžete dělat s, v případě, pokud jiný,
else if jiného, ​​konstruovat, ale oni jsou volal přepínač.
Vypadají velmi odlišné, ale my budeme vidět v některé z naší distribuční kódu,
pro budoucí problém sady, s největší pravděpodobností, že je to někdy jen hezčí
způsob, jak vyjádřit celek banda podmínek,
aniž by bylo hodně složených závorkách a hodně závorek a odsazení.
Ale nám dávají více energie, než jsme již.
A teď smyčky.
A tenhle, podíváme na pomaleji.
Ale pak, začneme používat tyto, zvláště pro ty, kteří již znají.
Toto je kanonický způsobem, pokud neuvěřitelně Arcane způsobem, aby napsat smyčky v C.
>> Nyní smyčka Scratch byl docela jednoduché.
Máte, navždy, blok.
Máte, opakování, blok s jen číslo musíte zadat.
A s, pro smyčku, můžete implementovat obou těchto myšlenek,
ale je to trochu techničtější.
Ale upřímně řečeno, je to také relativně jednoduché.
Jakmile budete vědět, pořadí operacím, doslova
se právě chystá připojit v hodnotách a řekněte počítači, co má dělat.
Takže tady je příklad.
To je, že smyčka, zcela jednoduše, počítá z jednoho čísla nahoru
prostřednictvím jiného.
A jen tím, podíval se na to, i když máte
žádné předchozí zkušenosti s Tento jazyk, jaké číslo
to asi začít počítat od?
OK, 0.
A Hádám, že je to proto, že jste vidět, že je tu int a i,
což je proměnná.
Je to inicializuje na 0.
>> A později, to vypadá, jsme kolem printf, hodnotu.
A ve skutečnosti, udělal jsem malou překlep zde.
Ale to je snadno napravit.
Dovolte mi přidat, i tady.
Nyní máme printf bytí prošel tuto zástupnou hodnotu.
A co se bude počítat nahoru přes?
Diváků: 50.
50.
49.
DAVID J Malan: 49.
Takže 50, na první pohled, zdá se.
Ale to, že se ukázalo, se bude naše podmínka, že budeme průběžně kontrolovat.
A budeme se jednou zastaví i již není menší než 50.
Takže tato smyčka, naopak, měl by vykonat, tak dlouho, jak jsem je menší než 50.
Ale jakmile se stane 50, nebo 51, nebo ještě hůře, měl by se automaticky zastaví.
Dobře.
>> Takže co se vlastně děje tady?
Tak tohle je pořadí operace pro smyčku.
One, máte tzv inicializace.
Tento žlutý zdůrazněno kus kódu je proveden jako první,
a to má za následek, že, za Středa, pravděpodobně predstavit.
To vytváří proměnnou s názvem i a to obchody v této proměnné hodnotu 0.
Tak jsem je 0 v tomto bodě příběhu.
>> Další věc, která se děje v tomto konstruktu,
je skutečnost, že stav dostane zkontrolovat.
Tak jsem hned zkontrolovat, je i méně než 50?
A samozřejmě, že odpověď teď je, jistě, ano.
Ano, protože i je 0, a To je jistě méně než 50.
Potom, co se stane, je, že toto řádek kódu dostane popraven.
A ve skutečnosti, v případě, že je násobkem řádků kódu v těchto složených závorkách,
všichni vykonán jeden po druhém.
>> A v tom smyslu, tady, je Zdá se, že k vytištění
číslo i, který se chystá 0, a pak 1, a pak 2.
Ale proč?
Proč to dostat zvýší?
No, čtvrtá věc, která stane je, že tuto syntaxi
dostane vykonán, za středníkem.
i ++ je zkratka způsob, jak říkat; mít hodnotu i, a přidat 1 k němu;
a pak příště kolem, přidejte 1 k němu; a příště,
přidat 1 k ní.
>> Takže pokud budeme dál, co se bude dít
Další je Nebudu se inicializovat i někdy znovu.
Pokud jsem si inicializace i na 0, tento příklad
že nikdy neskončí, protože Chtěl bych se zasekl na 0 ° C.
Ale to, co se bude dít, je že tato podmínka bude kontrolovat,
řádek kódu bude vykonán, I bude zvýšena,
podmínka bude kontrolovat, kód bude vykonán.
A to zase stále na kole, a znovu a znovu,
dokud i ++ vyvolává hodnotu 50.
>> Tento stav pak říká, 50 je menší než 50 ° C?
Odpověď, samozřejmě, není, a takže celý kód se zastaví provádění.
A pokud máte více kódu na obrazovce dole, to je to, co se stane dál.
To vyskočí z těchto složených závorkách a pokračuje v tisku víc po tom.
>> Takže teď vtip, od Foxtrot, že budete možná nyní pochopili.
Vždycky je to legrační.
Je to jako smích druh prosakovat,
a pak si uvědomíte, že jste neměli se smáli humor, jako je tento.
Ale tam je nějaký stánek s jídlem tady, pedagogicky, taky.
Tak to dopadá, že jsem chybějící kus syntaxe,
nebo Foxtrot je chybí kus syntaxe sem.
To, co chybí, že jsme měli v každém jiném příkladu, tak daleko?
Return, je tam, tak to je něco jiného,
že se vrátíme do zanedlouho.
Co chybí, i když?
Jo.
>> Divačka: The inicializace [neslyšitelných].
>> DAVID J Malan: OK.
Tak jo.
Takže ve skutečnosti, to je-- No, a počet se inicializuje
nahoře, nebo spíše, uvedených výše se.
Takže tohle je další způsob, jak to udělat.
Ale ne v jedné linii je to platný ačkoli.
Jak se asi tady?
>> Divačka: Je to složené závorky?
>> DAVID J Malan: Jo.
Takže složené závorky chybí.
Ale tento kód, myslím, k jejich cti, je ve skutečnosti, syntakticky platné.
Ukazuje se, že ne Potřebuji složené závorky
pokud máte pouze jeden řádek kódu, který Chcete-li provést uvnitř smyčky.
Nyní jsme vždy ve třídě a ve všechny naše distribuční kódu,
patří složené závorky tak jako tak, jen z důvodů přehlednosti.
Ale uvědomit, že v učebnicích a online příklady,
můžete velmi dobře vidět kudrnaté šle chybí někdy.
A to je v pořádku, jestli to, co mají členité a určené
je jen jediný řádek kódu, a nikoli více řádků kódu, potenciálně.
Dobře.
Takže související s problematikou nepřesnost, je problém přetečení,
v tom smyslu, že, podobně, to celá čísla mají své limity, které jim
stejně jako s plovoucí desetinnou čárkou hodnoty?
Ve světě plovoucí bod hodnoty, můžeme být jen tak přesné,
po které, někdy špatné věci se může stát,
a naše programy mohou být buggy a omylů.
Nyní dokonce s celými čísly, můžete dostat do problémů.
Nyní celé číslo není vybaven desetinná čárka nebo čísla po něm.
Je to jen přirozené číslo, typicky.
Tak co by mohlo jít s int špatného?
Pokud jsem pomocí int na Počet, co by mohlo pokazit?
Zdá se, že mnohem jednodušší.
Jo.
>> Divačka: V případě, že Číslo dostane [neslyšitelných]
>> DAVID J Malan: Jo.
Co když počítám tak vysoko, aby vás nemohou vyjádřit, že opravdu velké číslo.
Je to tak?
V určitém bodě, budete překročit hranice
z 32-bitové hodnoty, nebo 64-bitové hodnoty.
Teď znovu, nejsem si jistý, jak vyslovit 64-bit hodnotu,
ale vím, že se 32-bitové celé číslo, největší hodnota, kterou může být,
když je to jen pozitivní hodnot, je zhruba 4 miliardy korun.
Takže když se snažím počítat do 5 miliard, něco, co se stane.
Ale pojďme se podívat, co ve skutečnosti se může stát.
Ve světě integer přetečení, kde jste, v jistém smyslu,
přetečení kapacity integer, co se může stát?
>> Tak tady je binární číslo, je to návrat k 0 ° C.
Je to všechno 1 je, a zástupné symboly tam jsou síly 2,
tak toto je binární.
Tak to jsou 8, 1 bitů na obrazovce.
A pokud si vzpomínáte, nebo rychle si to spočítejte,
jaká hodnota je zastoupen zde se těchto osmi bitů 1?
255.
A i když jste nebyli zcela jisti, z matematiky, jsi to mohl udělat to.
Nebo můžete prostě druh rozumu přes to,
počkejte chvíli, když jsem což představuje 8-bitové hodnoty,
a já mám 256 možných hodnot, ale z nichž první je 0,
Já jen vím, že Největší bude 255,
a to je to, co tento člověk může být.
>> Takže předpokládám, že se snažím přidat 1 k této hodnotě.
Co byste dělali do platové třídy Škola při přidání 1, a to
není opravdu fit, protože budete muset nést 1?
To, co je toto číslo bude aby se stal, když přidáte 1?
Bude to stát se 0.
Je to tak?
Vzhledem k tomu, pokud jste měli víc bits-- a budu pokusit se, druh, napište to here--
kdybychom měli více bitů, co jsme zde může udělat, je přidat 1,
a pak bychom si to.
Jejda.
Budeme mít 1 bit celou cestu sem.
>> Ale pokud se jedná o konečný hodnota, je to pouze 8 bitů,
a to je předem stanovena počítačem,
že 1 je v podstatě není.
Tak nějak spadne z útesu.
A tak když přidáte 1 do 255, co hodnotu, máte zřejmě dostanete?
0.
A tak čísla k náhodnému, a snad neúmyslně,
skončit obal kolem takhle.
Takže to, co může být důsledek to?
No, je tu několik různých věcí.
Takže jedním, to nakonec vypadá jako 0, neúmyslně,
ale můžete trochu vidět, dokonce v reálném světě,
k lepšímu nebo k horšímu, projevy tohoto nápadu limitu.
Například, někdo z vás, kteří se kdy hrál Lego Star Wars,
Ví někdo náhodou vědět maximální počet mincí
můžete sbírat v Lego Star Wars?
Pak se hádat na základě dnešní sugestivní otázky.
Je větší než 256 nebo 255.
To je 4000000000.
Tak to dopadá, a tam je nějaké people--
některé googling potvrdil minulý night-- se dostali 4 miliardy zlaté mince,
nebo kdoví co ještě, v Lego Star Wars.
I když se zdá, je tu způsob, jak napálit hru,
tam je chyba nebo funkce, která vám umožní jen narůstat hodně a hodně bodů.
Ale největší možný hodnota, podle
k tomuto snímku obrazovky někoho, koho našel na internetu, je skutečně 4000000000.
>> Teď proč je tomu tak?
Je to přesně 4000000000, Pravděpodobně proto, že někdo rozhodl,
kdo psal tuto hru, že by mohli dělat 4 miliardy,
něco, něco, něco, jako hodnota jsem dát do
s kalkulačkou dříve, ale je to jen trochu čistší pro lidi
říci, maximální počet z coins-- nebo hřeby,
jak říkají, že vás them-- můžete sbírat je 4000000000.
A tak, proč je to?
Jak je LEGO hra provádění počítadlo
to je udržování přehledu o množství mincí máte?
Používají co?
Divačka: Zastaví počítání po 4 miliardy.
DAVID J Malan: Zastaví počítání po 4 miliardy,
což znamená, že můžete odvodit, jako programátor,
že jsou nejspíš pomocí 32 bitové celé číslo.
Stejně jako programátor doslova zadaný, int, v jeho nebo její kód,
a to je typ proměnné Používají k ukládání něčí kód.
Takže je tu jiné projevy těchto druhů limitů.
>> Takže jsem nehrál tento game-- a já jsem byl čtení na historii
Pro potvrzení, jak much-- ale v Původní verze civilizace, kde
budete zřejmě komunikovat s každým a mohou vést válku, nebo mít klid,
Gandhi měl být jedním z nejklidnější znaky, jako já
pochopit, v první verze civilizace.
A ve skutečnosti, na stupnici od 1 až 10, Jeho agresivita byl jen 1.
Takže někdy tak mírně agresivní, zřejmě.
>> Ale v určitém okamžiku, můžete si zřejmě nainstalovat demokracie v geografii.
A pokud si nainstalujete demokracii do vaší verzi hry,
pak se vaše agresivita hladina klesá.
Je to dobrá věc.
Lidé jsou klidnější Zdá se, že v této situaci.
Ale zdá se, někdo udělal nebude mít, pokud je to, stav
v původní verzi kódu.
>> Takže úroveň agrese Gándhího šel od Pozitivní 1, minus 2, na negativní 1,
ale hra není porozumět záporná čísla.
Takže to, co se stalo, bylo Gándhího agrese Úroveň šla od 1, 0, 1 na negativní,
což mělo za následek obal kolem, že jsou
nejagresivnější charakter ve hře, v hodnotě 255,
na stupnici od 1 do 10.
A od té doby, tam bylo více ztělesnění této hry,
a že jsem držel jej jako jakýmsi velikonoční vajíčko,
že Gandhi je zřejmě tak strašně agresivní.
Ale bylo výsledkem velmi jednoduchý programovací chyba
v této velmi rané verze hry.
>> Nyní více znepokojivě, více nedávno, Boeing 787
byl dokumentován jako mající chyba, ne druh zařízení
se vám obzvláště chcete mít chybu.
A příznaky, že budu číst tady, z článku on-line,
Byla to, model 787 letadlo , který byl průběžně zásobován
za 248 dní může ztratit vše střídavý proud, AC,
elektrické energie, v důsledku řídicí jednotky generátoru,
GCUs, současně jít do fail-safe módu.
Takže to bylo vydáno varování kdy byl tento problém objeven.
Tento stav je způsoben čítačem softwaru
interní do GCUs, tak celé číslo nebo proměnná,
že přeteče po 248 dny nepřetržitého výkonu.
Boeing je v procesu rozvíjení Upgrade softwaru, která GCU
napraví nebezpečného stavu.
>> Tolik jako raketa scénář, vyznačující se tím,
oni měli nějaké proměnné že počítal, a počítání,
a počítání, ale postupně přetékající hranice jeho schopnost,
Podobně udělal ten zatracený letadlo mají variabilní přetečení
Po dostatek času běhu.
A tak se způsob pero-in-tváře o práci kolem tohoto problému
je skutečně, restartovat, vaše letadlo každý 247 dní, tak, že je paměť dostane stírané
a proměnná přejde zpět na 0.
Ale uvědomit, to je velmi velký inkarnace softwaru,
ale zejména proto, slyšíme o Apple operační systémy jít do auta,
a self-řídit vozidla od společnosti Google, a libovolný počet inkarnací software
v našem každodenním životě, TV a hodinky a další,
si uvědomit, byly obklopeny software, všichni který je napsán nás lidi.
>> A jak budeme všichni brzy zjistíte, je to velmi jednoduché a velmi typické
dělat chyby při psaní softwaru.
A pokud nechcete chytit, některé špatné věci se může stát.
Teď někdy, některé vtipné věci se může stát,
nebo alespoň někdy jsme znát očekávat nějakou špatnost.
Takže 0 děleno 0, ze stupně škola, je obecně špatná věc.
Je to nedefinované.
A ukazuje out-- a uvidíme, jestli můj mic můžete vybrat to up--, že Apple
měl nějakou zábavu s tím v poslední době.
Tak jsem zde iPhone.
Budu mluvit Siri a požádejte ji, mi dát odpověď na 0 dělená 0.
Co 0 děleno 0?
>> SIRI: Představte si, že máte 0 cookies, a můžete je rozdělit rovnoměrně
mezi 0 přátelé.
Kolik cookies, se každá osoba dostat?
Vidíš?
To nedává smysl.
A netvor Cookie je smutné že neexistují žádné sušenky.
A jste smutní, že nemáte žádné přátele.
DAVID J Malan: Je to docela nepříjemný.
Tak tohle je to, co právě řekl, že.
To je neurčitý, to není definováno, A skutečně, mnoho programovacích jazyků
nebo, opravdu, bude kompilátory rozpoznat, když v programu,
pokusit se rozdělit 0. 0.
Více zábavy než toto však je, to zřejmě, netvor Cookie
je na Twitteru v těchto dnech.
A on odpověděl na to, s tím, což je naprosto rozkošný.
Ale pojďme se rychle podívat na pár dalších konstruktů,
a pak dal některé z těchto kód k použití, v dobré způsoby.
Tak to dopadá, kromě pro smyčky, je tu
něco, co nazývá while, že vypadá jinak a je realizován
trochu differently-- a budeme nakonec vidět examples--
ale v určitém smyslu, je to jednodušší, protože to
neumožňuje inicializovat a aktualizovat uvnitř hranic smyčky.
Můžete jej realizovat i nadále.
Takže si můžete udělat přesně stejné věci s while, jak se smyčky for,
ale vaše syntax, ultimately-- jak budete nakonec
see-- bude jinak.
K dispozici je i dělat, zatímco smyčka, která je vlastně trochu jinak,
v tomto zatímco pro smyčce a while vždy
nejprve zkontroluje jejich stav, pokud čtete tuto věc shora dolů,
to trochu vypadá to, že to bude zkontrolujte, zda je stav poslední, protože to je
skutečně poslední řádek kódu.
A opravdu, že to bude užitečné, v některých programech, které píšeme,
pokud chcete jen slepě něco udělat a nakonec zkontrolujte stav.
To není nutně špatná věc.
Pokud chceme proměnné, můžeme to udělat že v několika různými způsoby.
A my jsme viděli v Foxtrot karikatura, jedním ze způsobů, jak to udělat,
kde jste deklarovat svou proměnnou, jako čítač int středníkem,
a pak later-- možná příští linka, možná 10 řádků later--
jste skutečně inicializovat ji.
Takže tyto 2 řádky kódu deklarovat proměnnou typu int
a nazývat to počítadlo, tak to dává me dostatek bitů uspořádat int.
A pak nakonec, klade hodnota 0 do této proměnné.
To uspořádává Je v 0 a 1 vzor, ​​který známe z minulého týdne,
představuje počet známe jako 0.
Nebo řečeno, můžete to udělat tolik stručněji, stejně jako tato.
>> Nyní máme také Možnost volat funkce.
A ve skutečnosti, tady je 2 linka programu, nebo výňatek smlouvy,
která nám umožňuje skutečně napsat nějaký kód, který
dostane řetězec z user-- moc jako naše dobrovolnice na chvíli ago--
ukládání výsledek v proměnné s názvem název,
a then-- podobně jako s naším dobrovolníkem s printf-- vytiskne těchto hodnot
předáním dva argumenty se řetězec, následovaný proměnnou
volal, jméno, sám.
Takže pojďme se podívat, před jsme se vrátit k Mario tam,
na pár Nyní příkladů.
>> Chystám se jít dopředu a otevřený up, řekněme, funkce-0.c.
A jako vždy, tento kód je k dispozici na internetových stránkách Course,
takže můžete hrát spolu na doma a dívat se na to později.
Ale tady je ten program je to esence, od řádku 17 až 22.
Hlavní program je místo, kde Program je vždy začnou.
Tento program, zdá se, že se děje vytisknout své jméno, tlustého střeva.
Je to pak zavolá getString, stejně jako jsme to udělali s našimi dobrovolníky.
A pak, to je zajímavé, to bude volat PrintName.
Ukázalo se, že celou tu dobu, tam Zdá se, že funkce nazvaná PrintName.
Která tiskne něčí jméno.
Nepotřebovali jsme použít printf z včerejška je tu PrintName.
>> Ale to je zavádějící proto, že není PrintName
přijít s C. lidé neměli vymyslet asi před 40 nebo 50 lety,
Udělal jsem, místo toho.
A ve skutečnosti, když jsem procházení dolů, další oznámení
jak mohu napsat vlastní funkce v C. Budeme nakonec
vysvětlit, proč jsme se pořád říká, neplatné, na několika místech,
ale pro dnešek, pojďme stačí se podívat na jména.
>> Na řádku 24, chcete-li vytvořit svůj vlastní funkce,
doslova psát Název funkce.
Vybral jsem si PrintName.
V závorce, budete zadejte, jaké druhy
vstupů, a kolik jste chtějí tuto funkci přijmout.
V tomto případě, chci, aby se 1 variabilní volal, jméno,
a to bude mít typ, řetězec, takže to jde
být nějaký posloupnost znaků.
A pak, to program-- podobně jako v Scratch,
můžete mít vlastní puzzle pieces-- bude mít tento vlastní chování.
Bude to říkat printf předáním, ahoj, zástupný symbol,
a pak to bude plug ve všem, co volal uživatel.
>> Tak to je příklad toho, co počítačový vědec by
hovor abstrakce nebo funkční rozklad, které jsou stejně
galanterní Způsoby saying-- je, pokud se vám líbí tento nápad na vysoké úrovni,
jako já chci funkce, které vytiskne něčí jméno, naprosto vás
může doslova napsat printf a poté projít v argumentech, které chcete,
a program bude fungovat, protože má od středu.
Ale můžete začít abstraktní pryč pojem tisku jméno.
Můžete dát mu jméno, jako je PrintName, a to
je to myšlenka vrstvení od týdne 0.
>> Od nynějška, já a vy nemusíte vědět nebo jedno, jak PrintName je implementována.
Ano, používá printf, možná to není, kdo ví, co používá?
Koho to zajímá?
Teď mluvím tady, místo toho tady dole.
A skutečně, jak naše programy dostat vyspělejší a sofistikovanější,
budeme pokračovat v užívání za samozřejmost že nižší úroveň dílky existují.
Protože jsme psali jim nebo někdo jiný, takž
že můžeme potom vytvořit nad nimi.
Pojďme se podívat na to varianta, fungují jeden.
>> Tak tohle je trochu více pokročilé, ale ukázalo se,
že v knihovně CS50 je, je tu jen funkce GetInt.
Nemysleli jsme si, před lety, aby implementovat funkce GetPositiveInt.
A to je trochu nepříjemné, protože pokud Vy jste psaní programu u něhož
Chcete-li získat pozitivní celé číslo od uživatele,
můžete použít absolutně GetInt.
A můžete naprosto poradit se stav a možná i smyčka
v případě, že je větší, int než 0 a křičet na uživatele
pokud on nebo ona nedá Jste kladné číslo.
Ale pojďme postavit tento stavební blok sami, je,
zvyk Scratch kus, chcete-li.
Budu mít program tady to nakonec, myslím,
chtějí mít možnost volat GetPositiveInt, a já chci být
schopné vytisknout co to je int.
Ale to je pryč abstrahovány teď.
Je to jen dostal vysokou úroveň Název, který říká, že to, co dělá,
což je skvělé, protože to je velmi intuitivní nyní přečíst.
A když to udělám jedno, co je pod kapota, dovolte mi přejděte dolů.
A je to trochu zastrašující na první, zejména
pokud je to vaše první program, ale pojďme se podívat.
>> Já už říkal, void, protože to dopadá funkcí,
podobně jako getString, může vrací hodnotu ke mně.
Nejedná se jen mít vytisknout na obrazovku,
mohou skutečně ruky mě něco zpátky.
A zatímco před PrintName, Nepotřeboval jsem nic zpátky.
Potřeboval jsem vedlejší účinek něco, co objevovat na obrazovce,
ale já jsem nepotřeboval člověka mi podat něco zpět.
Zde, s GetPositiveInt, jako u GetInt,
Chci být předán něco zpět.
Takže já říkám ne, void, na vedení 23, ale int,
který říká, tato funkce že píši,
volal GetPositiveInt se chystá Podej mi zpátky celé číslo, ne nic,
ne void.
>> Mezitím, to bude trvat vstupy, takže jsem se, druh, obrátil to.
Nedám žádnou GetPositiveInt vstup, chci, aby mi dát svůj výstup.
A co se pak stane teď?
Takže tady je návod, jak mohu deklarovat proměnnou.
Udělal jsem to mimo smyčku, z důvodů, budeme nakonec vidět,
ale to jen dává me 32 bitů s názvem, n,
A já jsem pre-určující je pro uložení celé číslo.
A tady je to, dělat, zatímco konstrukt, a to je důvod, proč je to užitečné.
Doslova to udělat, když n je menší než 1.
Tak uvidíme, co se stane.
I vytisknout, prosím dej mi pozitivní int.
Pak jsem si int, pomocí CS50 je fungovat a uloženy v n.
>> A pak, co řádek kódu pravděpodobně dostane proveden další, logicky?
Které číslo řádku?
Jo, tak 31.
Ty by se vědět, dokud jste bylo řečeno, nebo tak nějak vyvozovat to,
ale je to pravda.
Jde to shora dolů a pak se opakuje.
Takže pokud jsem napsal v řekněme, číslo Negativní 1, je n menší než negativní 1?
Jo.
Vzhledem k tomu, negativní 1 je menší než 1.
Takže to, co by se mělo stát?
Chystám se to udělat přičemž n je menší než 1,
takže budu se vrátit do řádku 28.
>> A každý time-- a pojďme běžet tohle-- aby funkce 1 zkompilovat,
a teď dot lomítko funkce 1.
Kdybych zadejte záporné 1, to je bude mít na mě ječet
dokud jsem spolupracovat, protože každý mých vstupů je menší než 1
a pokud je to, zatímco méně než 1, Budu držet dělat.
Pokud jsem se konečně dát číslo jako 50, naštěstí, to říká, díky za 50.
Proč?
Vzhledem k tomu, jakmile n není menší než 1, přestanu neuvízly v této smyčky,
a tento nový klíčové slovo dnes, return, doslova to dělá.
Takže jsem právě realizována, v smysl, což je ekvivalent getString,
kde jsem podal zpět kdo používá mě, nějakou hodnotu.
Nemusí to být řetězec, je to int.
Tak jednoduchý, rychlý příklad, ale my budeme brzy
vidět některé sofistikovanější verze ještě.
Ve skutečnosti, pojďme se podívat na číselný jednoho, který se nazývá return.c.
A tohle je vlastně o něco jednodušší.
Takže účel tohoto programu v life-- pojďme zkompilovat a spustit jej,
takže se vrátit, dot lomítko, return-- oznámení
Program jednoduše kostky hodnotu 2.
Je to docela hloupé, je to těžké kód, to nebere žádné vstupy,
ale to prokázat další Funkce, které jsem napsal sám.
Tak tady jsem vyhlásil variabilní, zvané x, typu int,
rovna počtu 2, zcela libovolné.
To je jen nějaký načechraný tisk.
To říká, že X je nyní, takové a takový, Cubing dot dot dot.
A kouzlo je zřejmě v řádku 21.
Volám funkci nazvanou, krychle, Já jsem podal list papíru
s číslem 2 psaný na tom, a to, co hodnota, matematicky,
chci se dostat z toho?
Stejně jako kontrola sanitačního?
8.
Je to tak?
Chci 2 kostičky zpět, 2 síla 3, takže 8 zpět.
>> Takže tam, kde se kostka realizován?
No, všimnete je implementováno tady dole.
A stejně jako předtím, logicky, přestože syntaxe je pravděpodobně
mnozí z vás zcela nové, Chci tuto funkci
mi ruku list papír s int na to.
Takže mám int, na Jmenuje se libovolně,
ale vhodně nazvaný krychle.
Vstupní k němu, je n of zadejte celé číslo, tak to je
Jak mohu předat v počtu 2 na jeden list papíru.
A pak se ukáže, C podpěry matematika, takže nemáte x je pro časy,
stačí použít hvězdičku pro násobení.
A to se vrací krát N krát N n, což je jednoduše hodnota kostičky.
>> Tak kam jedeme se tohle všechno?
To je určitě vichřice tour, buďte ujištěni,
že v super sekcích a problém set 1,
budete prošel to vše o to víc.
A problém nastavit 1, budeme přechodu z grafického světa Scratch
na něco více příkazového řádku v C. Ale budeme čerpat inspiraci
z této hry zde z dávných dob, kde
pomocí C a standardní edici p set budete realizovat Mariovu pyramidy.
A v hackerské vydání p set, pokud se tak rozhodnete volit,
budete implementovat trochu víc náročné pyramidy se dvěma vrcholy.
Budete také implementovat algoritmus, chamtivý algoritmus.
Ukazuje se, že je tu některé zajímavé logika
za proces běh stanice A pokladníka
a skutečně podal někdo zpátky změna.
Tam je algoritmus, který je docela jednoduché, že můžete dokonce
uchopit intuitivně, když jste poprvé četl to-- si uvědomil, že to, co jsem vždycky
provést kdykoliv jsem si dal někdo nějakou Peníze back--, který vám umožní vždy
minimalizovat počet papírové bankovky nebo kovové mince
že jste podal zpět uživateli.
A to, samozřejmě, je přesvědčivý protože když jdete do CVS nebo kdoví co ještě,
nechcete, aby podal celá parta ty
nebo celá parta haléře.
Chcete nejmenším počtem mince, pravděpodobně, je to možné.
>> Konečně, budete také být zpochybněna fušovat do světa vody
a skutečně dostat zhodnocení pro mapování mezi průtokem vody,
z líbí, voda ve sprše, kolik vody se spotřebuje.
A narážka tam, bude tento klip tady,
které budeme končí za jen 60 sekund, že
maluje obraz low-flow sprchové hlavice.
>> [VIDEOPŘEHRÁVÁNÍ]
-Dobře.
Jsem se sem dostal všechno.
Mám cyklonu řady F, Hydra, Jetflow, Stockholm
Supersteam, co si jen vzpomenete.
>> -A Co doporučujete?
>> -Co hledáš?
>> Power člověk.
Power.
-Jako Silkwood.
-To Je pro záření.
-To je pravda.
-Nyní Co to je?
-To Je Commando 450.
Nechci prodat, že jeden.
>> -Ale To je to, co chceme.
Je to komando 450.
>> Ne mi věřit.
Používá se pouze v cirkuse.
To je pro slony.
>> -Budu Platit nic.
>> Co o Jerry?
>> -On Nemohl zvládnout.
Je to delikátní.
Ach jo.
[END Přehrávání]
DAVID J Malan: Dobře.
Tedy pokud na CS50.
Uvidíme se příští týden.
>> Reproduktor 1: [? Scullyová?], [? Ian?] tak daleko, jak tento závěrečný projekt,
Co jste kluci přišli s?
>> SPEAKER 2: No, dali jsme to různé myšlení,
a domníváme se, že nejlepší způsob, jak to--
>> SPEAKER 3: Mohu?
>> SPEAKER 2: Jo.
V každém případě, ve skutečnosti.
>> SPEAKER 3: Takže si myslím, můžeme shrnout náš nápad
Pro Outros s jedním word-- nic.
>> DAVID J Malan: Nic?
SPEAKER 3: Nic.
DAVID J Malan: Co to znamená?
SPEAKER 3: outros jsou o ničem.
SPEAKER 2: No, myslím, ve filozofii, Myslím, že nic není vždy něco.
Reproduktor 1: Takže what's-- co je předpoklad?
SPEAKER 3: Takže je to jako život.
DOBŘE.
Co jsi dnes dělal?
>> DAVID J Malan: Vstal jsem, měl snídaně, a přišel do práce.
>> SPEAKER 3: To je Outro.
SPEAKER 2: Ale myslím, neměl něco, co se s ním stane na the--
SPEAKER 3: Ne, ne, ne, ne.
Nic se neděje.
>> Reproduktor 1: Tak proč se díváme?
>> SPEAKER 3: Vzhledem k tomu, je to outro na CS50.
>> DAVID J Malan: Ještě ne.