[Přehrávání hudby] David J. Malan: Dobře. To je CS50, a to je start dvou týdnů. Takže začneme dnes s chybou. Chyba, samozřejmě, je chyba v programu, a budete mít velmi obeznámeni s touto koncepcí pokud jste nikdy programovat před. pset0 a teď pset1. Ale uvažujme něco trochu jednoduchý na prvním místě. Tento program zde, že jsem hodil dohromady v předem a tvrdím, že by to mělo tisknout 10 hvězdy na obrazovce pomocí printf, ale je to zřejmě kočárek nějakým způsobem. Vzhledem k tomu, že specifikace, které že by se měla vytisknout 10 hvězd, ale to není zřejmě, co byste nárok je chyba? Jo? Takže je to posunuté o jednu chybu, a co myslíš, že? OK. Výborně. Tak jsme zadali počáteční hodnota nula pro i, a my jsme zadali n hodnotu 10, ale jsme použili menší než nebo rovnající se. A důvodem, že se jedná dva postavy a ne jen jeden symbol, jako v matematické knize, je to, že nemáte způsob, jak vyjádřit jeden znak ekvivalent. Takže to znamená, že méně než, ale pokud začnete počítat od nuly, ale počítat celou cestu vzhůru a rovna 10, jste samozřejmě bude počet 11 věcí celkem. A tak budete tisknout 11 hvězd. Takže to, co by mohlo být oprava na to? Jo? Takže stačí nastavit nižší než nebo rovna právě být menší než, a tam, tvrdím, možná jiné řešení, také. Co by mohlo ještě udělat? Jo? Takže začít rovnající to jedno, a opustit menší než nebo rovnající se. A upřímně řečeno, já bych tvrdit, , že pro typické člověka, to je pravděpodobně jednodušší. Začněte počítat od 1 a počítat až deset. V podstatě to, co máte na mysli. Ale realita je programování, jak jsme viděli, počítačoví odborníci a programátoři obecně se začíná počítat od nuly. A tak to je v pořádku, jakmile si na to zvyknout. Váš stav bude obvykle něco jako nižší než. Takže potom logicky chyba, že jsme mohli teď opravit a nakonec překompilovat to a dostat jen 10. Tak, jak o této chybě zde? Zde opět tvrdím, že mám Cílem tisku 10 stars-- jeden na řádek tentokrát, ale není tomu tak. Než jsme se navrhnout co oprava je to, co dělá tento tisknout vizuálně kdybych sestavit a spustit tento program si myslíte? Jo? Hvězda. Takže všechny hvězdy na stejném řádku je to, co jsem slyšel, a poté znak nového řádku. Takže pojďme to zkusit. Tak, aby buggy-1, zadejte, a vidím příkaz zvonění že jsme o tom mluvili minule. ./buggy-1, a opravdu vidím všech 10 hvězd na stejném řádku, i když tvrdím, v mém specifikaci jen komentář na vrcholu kód, který jsem měl v úmyslu udělat jeden na linka. Ale to vypadá dobře. Nyní linka 15 to vypadá, že jsem tisk hvězdu, a pak linka 16 vypadá to, že jsem tisk znak nového řádku, a oni jsou oba tak odsazeny Jsem uvnitř smyčky jasně. Takže bych neměl dělat hvězdu, nová linka, hvězda, nový řádek, hvězda, nový řádek? Ano? Ano, na rozdíl od jazyka jako Python, pokud jste obeznámeni, odsazení není tom, k počítači. To záleží pouze na člověka. Takže zatímco tady jsem vymyslel linky 15 a 16--, že vypadá krásně, ale počítač nestará. Počítač se stará o ve skutečnosti má složené závorky kolem těchto řádků kódu. Takže to je to clear-- stejně jako v Scratch-- že tyto dva řádky kódu by měl být proveden. Jako jeden z těch žlutých Scratch puzzle kusy znovu a znovu a znovu. Takže teď, když jsem znovu spustit tento program-- ./buggy-2-- Hm. Mám chybu teď. Co jsem zapomněl udělat? Jo, tak jsem se zkompilovat. Tak, aby buggy-2. Žádný takový soubor, protože jsem neměl vlastně sestavit druhou verzi. Takže teď zajímavé nehlášené proměnná-- ne 2. Děláme 1. Udělat buggy-1-- ./buggy-1-- a nyní každý z nich je na stejném řádku. Nyní je výjimka to má nárok můj že je třeba tyto složené závorky. Kdy je vlastně OK-- pokud jste Všiml v sekci nebo textbooks-- vynechat složené závorky? Jo? Přesně tak. Když tam je jen jeden řádek kódu, který vám chtěl být spojován s smyčka jako v našem prvním příkladu. Je naprosto v pořádku vynechat složené závorky stejně jako druh pohodlí od kompilátor pro vás. Jo? Dobrá otázka. Bylo by to být považováno za chybu styl? Rádi bychom promote-- jako CS50 stylu průvodce, URL, pro které je pset1--, že vždy používat složené závorky. Jistě, pokud jste k programování nového. Realita je taková, že nejsme ti zakázat v tom tyto vymoženosti. Ale pokud jste jen na to, do swingu věcí, naprosto stačí vždy kudrnaté šle, až se dostanete na kloub. Dobrá otázka. V pořádku. Takže to pak byla chyba. Alespoň v něčem docela jednoduché. A přesto byste si mohli myslet to je poměrně primitivní, že jo? To je něco jako prvního týdne pohledu na jazyk rád, vidět své chyby v něm. Ale realita se jedná o skutečně reprezentativní některých docela děsivé problémy které mohou nastat v reálném světě. Takže někteří z vás možná pamatujete pokud budete postupovat podle tech novinky, nebo dokonce chytil vítr to v únoru v posledním roce, že Apple měl udělal trochu chybu v obou iOS, operační systém jejich telefony, a také Mac OS, operační systém na svých stolních a přenosných počítačů. A viděla jste takové titulky jako to. A poté, Apple slíbil opravit tuto chybu, a velmi rychle udělal opravit v iOS, ale pak se nakonec opravili v Mac OS stejně. Nyní žádný z těchto titulků sám opravdu odhalit, co je základní problém byl, ale chyba byla nakonec snížena na chyba v SSL, Secure Sockets Layer. A dlouhý příběh krátký, to je software že naše prohlížeče a další Software slouží k čemu? Kdybych řekl, že SSL je zapojen, když vás navštívit adresu URL, která začíná s HTTPS, co pak může SSL souviset? Šifrování. Takže budeme mluvit o to v nejbližších dnech. Šifrování, umění kódování informace. Ale dlouhý příběh krátký, Apple před časem udělal chybu při jejich provádění SSL, je software, který nakonec implementuje URL, jako je HTTPS nebo max Připojení tam taky. Výsledkem je, že vaše zapojení by mohlo potenciálně být zachyceny. A vaše připojení bylo ne nutně šifrována pokud byste měli nějaký špatný člověk mezi vy a webové stránky cíl, který věděl, jak využít to. Nyní Apple nakonec vyslán Oprava tohoto konečně, a popis jejich oprava byla tato. Bezpečná doprava, nepodařilo se ověřit pravost spojení. Problém byl vyřešen tím, obnovit chybějící validační kroky. Tak to je velmi ruka zvlněná vysvětlení prostě jen tím, že jsme se podělal. Tam je doslova jedna řádek kódu, který byl kočárek při jejich provádění SSL a pokud jste online a hledat pro tento můžete skutečně najít původní zdrojový kód. Například, to je snímek obrazovky jen část z poměrně velkého souboru, ale to je zřejmě funkce nazývá SSL ověřit znak serveru výměnu klíčů. A to trvá spoustu argumenty a vstupy. A my se budeme soustředit moc tam markantů, ale pokud se soustředíte na kód uvnitř té nejvyšší function-- LET'S přiblížit na to. Možná už tuší co chyba může být, i když nemáte tušení, v konečném důsledku to, co hledáte na. Tam je trochu anomálie tady, což je to, co? Jo, nemám opravdu rád pohled ze dvou GOTO nezdaří. Upřímně řečeno, já opravdu nevím, co goto selhání prostředky, ale s dvěma z nich zády k sobě. To mě jen tak tře intelektuálně špatně, a samozřejmě když jsme se zaměřit na jen ty linky, to je C. Takže hodně Apple kódu je sám napsán v jazyce C, a to zřejmě je opravdu equivalent-- není k této krásné odsazení verze, ale pokud poznáte skutečnost že není složené závorky, co Apple skutečně napsal, byl kód, který se dívá takhle. Tak jsem oddálení a já pevné odsazení v tom smyslu, že v případě, že to není složené závorky, že druhé goto selhání, které je ve žluté se chystá provést bez ohledu na to. Není to spojeno s pokud podmínka nad ním. Takže i znovu, pokud to není zcela porozumět tomu, co by to mohlo možná bude dělat, vím, že každý z nich conditions-- každé z těchto čar Je to velmi důležitý krok v procesu kontroly pokud vaše data je ve skutečnosti zašifrovány. Takže skákání jeden z nich kroky, není nejlepší nápad. Ale protože jsme to Druhý goto selhat ve žluté, a proto, že jakmile jsme trochu esteticky posuňte ji doleva, kde ho logicky je v tuto chvíli, co se to znamená na lince Kód nižší, než je druhá GOTO selhání by si o tom myslíte? Je to vždy bude přeskočen. Takže gotos jsou obecně odsuzována z důvodů, které se opravdu jdou do, a sice v CS50 máme tendenci se učit tento příkaz GOTO, ale můžete myslet GOTO selhání v tom smyslu, skočit na jiné části kódu. Jinými slovy, skákat přes úplně to poslední řádek, a tak se výsledek tohoto hloupý jednoduchá chyba, že byl jen Výsledek snad někoho kopírování a vkládání taky mnohokrát bylo, že celý bezpečnost iOS a Mac OS bylo náchylné k odposlechu zlí hoši na delší dobu. Až Apple konečně opravil toto. Nyní, když někteří z vás jsou vlastně běží starší verze iOS nebo Mac OS, můžete jít na gotofail.com které je webová stránka, že někdo nastavit se v podstatě určí programově pokud váš počítač je stále zranitelné. A upřímně řečeno, je-li, je to asi dobrý nápad aktualizovat telefon nebo Mac v tomto bodě. Ale tam, jen svědčí o tom, jak zhodnocení těchto nižších úrovní Podrobnosti a spravedlivě jednoduché nápady může opravdu přeložit do rozhodnutí a problémy, které affected-- v tomto case-- miliony lidí. Nyní pár slov o správě. Sekce začne letos v neděli. Obdržíte e-mail od víkend na úseku, na kterém místě Proces resectioning začne, pokud jste si uvědomil, máte nyní některé nové konflikty. Takže se to stane každý rok, a my jsme se ubytovat v příštích dnech. Office hours-- dělat, aby oko na tomto plánu zde. Změní trochu tento týden, zejména počáteční čas a umístění, takže se poraďte se že předtím, než se vydáte do pracovní doby některý z následujících čtyř noci. A nyní pár slov o posouzení, zejména pokud se ponoříte do problému stanovuje jeden a mimo ni. Takže dle specifikace, Tyto jsou obecně osy, podél níž budeme hodnotit svou práci. Rozsah se odkazuje na to, co míry Váš kód nářadí funkce požadované naše specifikace. Jinými slovy, jak moc dílná sada jsi ukousnout. Věděli jste to třetina z nich, polovina z nich, 100% ní. I v případě, že to není správné, kolik jste pokus? Takže zachytí úroveň úsilí a množství , ke kterému ukousl Problém SET je. Correctness-- tento, na jaké míry je váš kód v souladu s našimi specifikace a bez chyb. Tak to funguje správně? Dáme-li mu nějaký vstup, dělá to nám výstup, který očekáváme? Design-- teď je to první jsou zejména ty, kvalitativní nebo ty, které vyžadují lidský úsudek. A skutečně, to je důvod, proč máme zaměstnance tolika výuky kolegy a samozřejmě asistenti. Do jaké míry je váš kód napsaný dobře? A opět se jedná o velmi kvalitativní hodnocení že bude pracovat s vámi na obousměrně v příštích týdnech. Tak, že když se dostanete ne tak číselné výsledky, ale i Písemné skóre, nebo napsaný zpětná vazba, nebo písemné zpětné vazby v anglických slov. To je to, co budeme používat řídit vás k vlastně psát lepší kód. A v přednášce a části, budeme se snažit upozornit out-- tak často, jak bychom can-- to, co dělá program, a to nejen správné a funkčně dobře, ale i dobře navržené. Nejúčinnější by to mohlo být, nebo i nejkrásnější to může být. Což nás vede k stylu. Styl nakonec je estetický soud. Jste si vybral dobrý Jména pro vaše proměnné? Už jste správně odsazeny kód? Vypadá to dobře, a proto, to je snadné pro jiné lidské bytosti číst vaše příslušné na jeho správnost. Nyní obecně dle osnov, jsme skóre tyto věci na pětibodové stupnici. A dovolte mi, abych kladivo domů bod že se tři je opravdu dobrá. Velmi rychle se to lidi začít dělat aritmetiku. Když dostanete tři ze pět na správnost pro některé pset a myslí si, sakra, budu 60% , který je v podstatě D nebo E. To není způsob, jak myslíte, že z těchto čísel. Tři je opravdu dobrá, a to, co jsme obecně očekávají, že na začátku termínu je, že pokud jste se dostal banda three's-- možná pár veletrhů, pár fours-- nebo pár dvojky, pár fours-- že je to dobré místo pro start. A tak dlouho, jak vidíme nahoru trajektorie v průběhu času, jste v mimořádně dobrém místě. Vzorec, který používáme k Hmotnost věci je v podstatě to dle osnovy což právě znamená, že dát větší důraz na správnost. Vzhledem k tomu, že je to velmi často správnost který bere nejvíce času. Věř mi teď. Budete find-- alespoň v jednom pset--, které vás tráví 90% svého času pracuje na 10% problému. A všechno, co nějak funguje s výjimkou jednoho nebo dvou chyb, a to jsou chyby, které vás až pozdě v noci. To jsou ty, které nějak uniknout vás. Ale poté, co spí na něm, nebo se účastní úřední hodiny nebo klást otázky on-line, je když se dostanete do té 100% cíli, a to je důvod, proč jsme hmotnost správnost nejvíce. Navrhnout trochu méně, a styl trochu méně než to. Ale mějte na mind-- stylu je možná nejjednodušší z nich ukousnout dle stylu průvodce. A teď vážněji Pozor na akademické poctivosti. CS50 má neblahý vyznamenání je největším výrobcem Ad rady případy téměř každý rok historicky. To není proto, že studenti podvádět CS50 o nic víc než kterýkoli jiný třídy, ale proto, že podle povahy práce, Skutečnost, že je elektronický, Skutečnost, že se podíváme na to, a skutečnost jsme počítačoví odborníci, Mohu říci, že jsme bohužel velmi dobře odhalovat ji. Takže co to znamená v reálných hodnotách? Takže to, dle osnov, filozofie kurzu je opravdu redukuje být rozumný. Tam je to hranice mezi dělat svou práci na vlastní pěst a získat trochu přiměřená pomoc od přátel a přímo tím, že práci pro přítel, nebo zasláním mu svůj kód tak, že on nebo ona může jednoduše vzít nebo si ji půjčit z práva. A to překročí hranici , že byly v třídě. Viz osnovy v konečném důsledku pro řádky že čerpáme jako rozumné a nerozumné chování, ale je to opravdu vařit dolů k podstatě své práce museli být svým vlastním koncem. Nyní se, že řekl, je heuristický. Vzhledem k tomu, jak by se mohlo imagine-- z úředních hodin a vizuální a videa máme zobrazeny tak far-- CS50 skutečně chtěl být jako spolupráce a jako družstvo a jako sociální jak je to možné. Například společné jak je pečlivý. Ale s tím řekl, heuristika, jak uvidíte v učebních osnovách, je, že když máte nějaký problém. Máte nějakou chybu v kódu, který vám nelze vyřešit, je rozumné pro vás ukázat svůj kód na někoho jiného. Přítel i ve třídě, přítel sedí vedle vás v úředních hodinách, nebo zaměstnanec. Ale nemusí zobrazit jejich kód na vás. Jinými slovy, odpověď na Váš question-- Musím help-- není oh, tady je můj kód. Podívejte se na to, a vyvodit z toho, co bude. Teď, samozřejmě, je tu způsob, jak jasně ke hře Tento systém, ve kterém jsem vám ukážu, můj kód před tím, než otázku. Můžete mi ukázat můj kód před tím, než otázku. Ale viz sylabus znovu jemnější detaily o tom, kde je tento řádek. Jen proto, aby se malovat obraz a sdílet transparentně, jak je to možné kde jsme na v posledních letech, To je počet případů Ad rady že CS50 má více než za posledních sedm let. 14 případů této nejnovější podzim. Z hlediska zúčastněných studentů, to bylo 20 z nějakého zvláštního studenti letos na podzim. Tam byl vrchol 33 studenti před několika lety. Mnohé z nich jsou bohužel už tady na akademické půdě. Studenti se podílejí jako procento třída historicky v rozmezí od 0% na 5,3%, což je pouze říci, To je každoročně výzvou. A k tomuto účelu, co chceme udělat, je sdělit jednu že dd-- jen na tyto FYI-- spravedlnost pro ty studenty, kteří jsou následující řádek podle toho. Děláme porovnat všechny aktuální podání proti všem minulých misí z posledních mnoho let. Víme také, jak na Google po a najít úložiště kódu on-line, diskusní fóra on-line, práce stránkách online. Pokud se student může najít, můžeme jistě Je to stejně jako my s lítostí dělat. Takže to, co uvidíte v učebních osnovách i když je toto ustanovení lítost. Mohu rozhodně ocenit, a všichni jsme se Pracovníci, kteří provádí kurzu jako Tato, nebo tento sám o sobě v průběhu času, jistě víte, jaké to je, když život se dostane do cesty, když máte některé pozdě v noci deadline-- a to nejen v této třídě, ale another-- když jste zcela vyčerpán, stresu, mají nadměrné množství dalších věcí dělat. Budete dělat na nějakém místě v život určitě špatný, možná pozdě noc rozhodnutí. Takže dle osnovy je toto ustanovení, taková, že pokud do 72 hodin od výroby některé špatné rozhodnutí, můžete vlastnit až k němu a dostat se ke mně a jeden z vedoucích kurzu je a budeme mít rozhovor. Budeme řešit věci interně v naději, že z toho stává více Výuka moment nebo životní lekci, a ne něco, co se obzvláště drastické následky jak můžete vidět na následujících grafech zde. Tak to je velmi vážný tón. Zastavme jen za pár sekund prolomit napětí. [Přehrávání hudby] David J. Malan: Tak jo, tak, jak to bylo pro Segue? Dnešních základních témat. První z nich je abstrakce. Další, z nichž bude reprezentace dat, což upřímně řečeno je opravdu suchý způsob, jak říct, jak můžeme jít o řešení problémů a myšlení o řešení problémů? Takže jste viděli v Scratch, a vy jste Viděl snad již v pset1 s C že nejen můžete použít funkce, jako printf, že ostatní lidé v minulých letech napsal pro tebe. Můžete také psát své vlastní funkce. A i když je možné, udělat to v C, a upřímně řečeno, v pset1 nemáte opravdu potřebujete napsat svůj vlastní funkce protože problem-- zatímco možná skličující na První glance-- uvidíte může být v konečném důsledku vyřešit ne všechny, že mnoho řádků kódu. Ale s tím, že, co se týče psaní své vlastní funkce, Uvědomuji si, že C se dá vám tato schopnost. Chystám se jít v dnešní zdrojového kódu, který je k dispozici již on-line, a já jdu do toho a otevřený do programu s názvem funkce 0.C, a ve funkci nulové uvidíme pár věcí. V prvních řádků 18 až 23 je můj hlavní funkci. A teď, když jsme začali číst kód, který nejsme psaní na běhu, ale místo toho jsem napsal v předstihu nebo že jste na problém nastavit Může se zobrazit s byla napsána v předstihu. Dobrý způsob, jak začít čtení kódu někoho jiného , je podívat se na hlavní funkce. Zjistit, kde tuto položku Jde o to, spuštění programu, a pak ji logicky odtud. Tak tohle programu zřejmě tisky Vaše jméno následované dvojtečkou. My pak používáme getString z knihovny CS50 získat řetězec nebo slovo nebo frázi od uživatele na klávesnici. A pak je tu to věc tady-- PrintName. Nyní PrintName není funkce, která přichází s C. Není to ve standardním io.h. Není to v CS50.h. Je to spíše ve stejném souboru. Všimněte si, když jsem nalistujte A bit-- linky 25 na 27-- je to jen docela způsob komentování Váš kód pomocí hvězd a lomítka. Jedná se o multi-linie komentovat, a to je jen můj popis v modré barvě co tato funkce dělá. Vzhledem k tomu, linií, 28 až 31, Napsal jsem super jednoduchou funkci název, o jehož je PrintName. Trvá to, kolik Argumenty byste řekli? Takže jeden argument--, protože tam je jeden Argument uvedeny v závorkách. Typ, který je String. Což znamená, PrintName je takhle černé skříňky nebo funkce, která vezme jako vstupní řetězec. A název tohoto řetězce Pohodlně se bude Name. Ne S, ne N, ale jméno. Takže co PrintName dělat? Je to pěkné jednoduché. Stejně jako jeden řádek kódu pro printf, ale zřejmě to vytiskne "Dobrý den," tak a tak. V případě, že tak a tak vychází z argumentu. Teď to není obrovský inovační zde. Opravdu, jsem vzal program, který by mohl byly psány s jeden řádek kódu tím, že to tady, a změnil ho na něco který zahrnuje některé šest nebo sedm nebo tak nějak řádků kódu celou cestu sem. Ale je to nácvik princip známý jako abstrakce. Druh zapouzdření uvnitř nové funkce, která má jméno, a lépe přesto, že jméno doslovně říká, že to, co dělá. Myslím printf--, že to není zejména popisné. Pokud chci vytvořit skládačky, nebo jestli jsem Chcete vytvořit funkci, která tiskne něčí jméno, krása, jak to udělat je to, že mohu skutečně dát, že funkci její název , který popisuje, co to dělá. Nyní trvá na vstupu, který Jsem svévolně volal jméno, ale také se výborně popisný místo toho, aby se trochu více generic jako S. a neplatné, teď, prostě znamená, že tato funkce není ruce mi nic. Není to tak, že getString Doslova mi podá zpět řetězec jako jsme to udělali s kousky papíru se svými spolužáky minulý týden, ale to má jen vedlejší efekt. Vytiskne něco na obrazovku. Takže na konci dne, když dělat, aby funkce-0, ./function-0, uvidíme, že se zeptá na mé jméno. Píšu Davida, a to druhy se mé jméno. Pokud bych to znovu s Robem, to bude říkat "Ahoj, Robe." Takže jednoduchá myšlenka, ale možná odvodit z toho psychicky že pokud vaše programy se o něco složitější, a chcete napsat kus kód a volání, které code-- Vyvolat že code-- podle popisné pojmenovat jako PrintName, C dělá dovolit nám tuto možnost. Zde je další jednoduchý příklad. Například, když jsem otevřít soubor z dnes volal return.c, Všimněte si, co jsem tady udělal. Většina z této hlavní funkce je printf. Poprvé jsem se svévolně inicializovat Proměnná x se nazývá číslo 2. Pak jsem vytisknout "x je nyní % I "předávání v hodnotě x. Takže jsem jen říkám, co to je. Teď jsem jen směle prohlašovat se printf. Jsem Cubing, že hodnota x, a já jsem Přitom voláním funkce volal cube absolvování v X jako argument, a následným uložením výstupu v proměnné samotné, x. Takže jsem přepisování hodnotu x. Jsem převažující hodnota x s tím, co Výsledkem volání Tato funkce je kostka. A pak jsem jen vytisknout na některé načechraný věci tady říkat, co jsem udělal. Takže to, co pak je kostka? Všimněte si, co je v podstatě jinak tady. Dal jsem funkci název jako předtím. Jsem zadán název argumentu. Tentokrát je to jen n místo jména, ale to bych mohl říkat, co chci. Ale tohle je něco jiného. To, co na levé straně. Dříve to bylo to, co slovo? Boys. Teď je to samozřejmě int. Takže to, co je třeba vzít? Vzhledem k tomu, void znamená druh nicota, a to byl ten případ. PrintName vrátil nic. Je to něco udělal, ale to se mi vrátit něco, co bych mohl dát na levá strana rovnítko jako já jsem udělal tu na lince 22. Takže když řeknu, že v on-line 30, co je to pravděpodobně znamenat, o tom, co kostka dělá pro mě? Jo? Vrací celé číslo. Tak mi to předá zpět, pro instance, kus papíru na které napsal odpověď. 2 kostičky nebo 3 kostičky, nebo 4 cubed-- co jsem prošel v roce, a jak jsem se realizovat to? No, právě n krát n krát n je, jak bych mohl kostka hodnotu. Takže znovu, super jednoduchý nápad, ale demonstrativní nyní, jak můžeme psát funkce že nás vlastně měl vrátit hodnoty, které by mohly být zajímavé. Pojďme se podívat na jeden poslední příklad zde volaná funkce jeden. V tomto příkladu, se začne získat více přesvědčivé. Takže ve funkci jeden, to program-- upozornění nakonec volání funkce volána GetPositiveInt. GetPositiveInt není Funkce v knihovně CS50, ale rozhodli jsme se, bych to existovat. Takže když jsme se posunout dolů později v souboru, Všimněte si, jak jsem se o provádění získat pozitivní int, a já říkají, že je to více přesvědčivý protože to je slušný Počet řádků kódu. Není to jen hloupá hračka programu. Je to vlastně má nějakou kontrolu chyb a dělat něco užitečného. Takže pokud jste ještě neviděli návod videa, která jsme vložené do pset1, vědět, že se jedná o typ smyčka v C, podobně jako v duchu na spoustu věcí Scratch se dá dělat. A to říká, že to udělat. Vytisknout na to. Pak jděte do toho a dostat n-- získat int a uložte jej na n, a pokračovat v tom to znovu a znovu a znovu tak dlouho, dokud n je menší než jedna. Tak n bude méně než jeden pouze v případě, že člověk není spolupracující. Jestliže on nebo ona je psaní v 0 nebo -1, nebo -50, Tato smyčka bude mít provádění znovu a znovu. A nakonec zjistíte, I jednoduše vrátit hodnotu. Takže teď máme funkci to by bylo hezké pokud CS50 by implementovat do CS50.h a CS50.c pro vás, ale tady můžeme nyní provedení tohoto sami. Ale dvě připomínky některých klíčových detailů. One-- proč Prohlašuji, int n, myslíš, že na lince 29 místo toho jen to, to tady, což je více v souladu s to, co jsme dělali minulý týden? Jo? Dobrá myšlenka. Takže pokud bychom měli dát tady, je to, jako bychom udržovat ji znovu a znovu prohlašuje. To samo o sobě je není problematické, sama o sobě, protože budeme potřebovat pouze hodnota jednou a poté budeme si novou tak jako tak. Ale dobrá myšlenka. Jo? Zavřít. Tak proto, že jsem prohlásil, n na řádek 29 mimo smyčky, je k dispozici v celém Celá tato funkce. Ne ostatní funkce, protože n je stále uvnitř těchto kudrnaté šle zde. Tak-- jistý. Přesně tak. Tak to je ještě na místě. Pokud bychom místo toho prohlásil n tady na řádku 32, je to problematické, protože odhad kde jinde Musím se k nim dostat? Na řádku 34, a jednoduché pravidlo je že můžete použít proměnnou pouze uvnitř nejnovějších složených závorek , ve kterém je deklarována. Bohužel, řada 34 je jeden řádek příliš pozdě, protože jsem již uzavřena složená závorka na lince 33 , která odpovídá složená závorka na lince 30. A tak to je způsob, jak říkat že tato proměnná int je rozsahem, abych tak řekl, jen uvnitř těchto složených závorek. Je to prostě neexistuje mimo ně. Takže opravdu, když jsem to udělat špatně, dovolte mi, abych uložit kód jak to je-- nesprávně napsaný. Nech mě jít dopředu a dělat, aby funkce 1 a notice-- chybě. Použití nehlášené identifikátor n na lince 35, která je tady. A pokud budeme posouvat nahoru další, ještě jeden. Použití načerno Identifikátor n na řádku 34. Takže kompilátor Clang, je si všiml, že to prostě neexistuje, i když jasně, že je to tam vizuálně. Takže jednoduchá oprava prohlašuje ji tam. Nyní mi dovolte přejděte na v horní části souboru. Co vyskočí na vás, jak je trochu jinak od věci jsme se podívali na minulý týden? Nejen, že mám jméno, a to nejen do Mám některé ostré patří do top, Mám něco, co jsem volání prototyp. Teď to vypadá strašně podobný tomu, co jsme právě viděli před chvílí na lince 27. Takže pojďme vyvodit z jiného chybové hlášení, proč jsem to udělal. Nech mě jít napřed a odstranit tyto řádky zde. A tak nevíme nic o prototyp. Remake tohoto souboru. Proveďte jednu funkci. A teď, sakra, čtyři chyby. Pojďme přejděte do první. Implicitní deklarace funkce získat pozitivní int je C99 neplatný. C99 prostě znamená, že v roce 1999 verze jazyka C, což je to, co jsme skutečně používáte. Takže co to znamená? No C-- a konkrétněji C compilers-- jsou docela hloupé programy. Oni jen vědí, co jste řekl jim, a to vlastně tématická z minulého týdne. Problém je, že když půjdu o provádění jméno tady, a zavolám funkci nazvanou GetPositiveInt zde na řádku 20, tato funkce technicky není existovat, dokud kompilátor vidí linii 27. Bohužel, kompilátor dělat věci nahoře, dole, vlevo, vpravo, tak proto, že není vidět realizace GetPositiveInt, ale vidí snažíš používat to tady, je to jen tak bail-- křičet na jste s chybou message-- možná mystický, a ne ve skutečnosti kompilaci souboru. Tak takzvaný prototyp až Zde je sice nadbytečná. Doslova jsem šel dolů a já sem kopírovat a vložit to, a dal jsem to sem. Void by bylo správné, takže budeme doslova zkopírujte a vložte ji tentokrát. Doslova jsem zkopírovat a vložit jej. Opravdu jen jako jako chleba drobeček. Trochu vodítkem pro kompilátor. Já nevím, co to dělá ještě, ale já jsem slíbil, že vás , že bude existovat nakonec. A to je důvod, proč to line-- v linka 16-- končí středníkem. To je nadbytečná záměrné. Ano? Pokud jste propojit knihovnu na to-- oh, dobrá otázka. Sharp obsahuje soubor záhlaví inkluze. Potřebujete, aby bylo-- by téměř vždy na samém vrcholu souboru pro similar-- pro přesně stejný důvod, že ano. Vzhledem k tomu, ve standardní io.h je doslova linka jako je toto, ale se slovem printf, a s jeho argumenty a jeho návratový typ. A tak tím, že dělá ostrý obsahovat až zde to, co jste doslova dělat je kopírování a vkládání obsahu někoho jiného sepsal vrchol. Tím cluing kód do Skutečnost, že existují tyto funkce. Jo? Přesně tak. Tak velmi chytrý a správné řešením by bylo, víš co? Já nevím, co prototyp je, ale vím, když jsem pochopil, že C je právě hloupí a rethinks shora dolů. Tak pojďme dát to, co chce. Pojďme snížit tento kód, vložte jej do top, a nyní stiskněte hlavní dole. I to by mělo problém vyřešit. Ale můžete velmi snadno přijít s scénář, ve kterém je třeba volat B, a možná i B zavolá zpět do A. Tento je něco, co nazývá rekurze, a vrátíme se k tomu. A to může nebo nemusí být dobrý věc, ale můžete určitě zlomit toto řešení. A navíc, já bych tvrdí, stylisticky, zvláště když své programy stát se tak dlouho a tak dlouho, je to prostě super pohodlné aby hlavní nahoře protože je to věc, kterou většina programátoři budou se starat o. A tak je to trochu čistší, pravděpodobně, udělat to tak, jak Původně jsem to udělal s prototypem i i když to vypadá trochu redundantní na první pohled. Jo? Je nám líto, můžete to říct nahlas? Máte-li změnit umístění provádění a prototyp? Tak to je dobrá otázka. Pokud znovu deklarovat to dolů tady, pojďme se podívat, co se děje. Takže pokud bych to dolů tady říkáš. Oh, omlouvám se. Hlasitěji? Ještě hlasitěji. Oh, dobrá otázka. By znehodnotit funkci? Víte, po všech těch letech, jsem se nikdy dát prototyp později. Takže pojďme udělat, aby funkce 1 po tom, že. [Mumlá] David J. Malan: Oh, počkej. Stále ještě musíme dát všechno, co se nahoře. Tak pojďme na to tady, když jsem pochopit vaši otázku správně. Dávám všechno, včetně prototyp výše uvedené hlavní, ale dávám prototyp pod provedení. Takže když udělám jedno, já jdu zpět error-- nepoužívané proměnné n. Oh, tady. Děkuji vám. Pojďme se podívat, zbavíme to. To je jiná chyba, tak se pojďme ignorovat. Pojďme se velmi rychle předělat to. OK, takže data argument, který nebyl používá formátovací řetězec n-- oh, je to proto, Změnil jsem se na to tady. Dobře víme, co je odpověď bude na-- v pořádku, jdeme na to. Aha, díky za pozitivní. Tak jo, budu opravit tento kód after-- ignorovat tuto konkrétní chybu protože to byl-- to funguje, je odpověď. Takže to nepřepíše to, co jste právě udělal. Mám podezření, že kompilátor je napsán takovým způsobem, že ignoruje prototypu protože v těle, abych tak řekl, z funkce již byla provedena výš. Já bych skutečně konzultovat manuál překladače pochopit, jestli existuje nějaký jiný implikace, ale na první pohled jen tím, že se snaží a experimentování, se zdá, že žádný vliv. Dobrá otázka. Takže pojďme kupředu nyní, pohybující se od nežádoucích účinků, které jsou funkce, které něco takového vizuálně na obrazovce printf, ale nevrací hodnotu. A funkce, které mají návratnost hodnoty, jako jsme právě viděli několik. Už jsme viděli tento pojem rozsahu, a uvidíme to znovu a znovu. Ale teď znovu, použít pravidlo že proměnná může být použita pouze uvnitř nejvíce nedávno otevřela a uzavřené složené závorky, jak jsme viděl v tomto konkrétním příkladu. A jak jste poukázal na to, je ability-- můžete vyřešit některé z těchto problémů tím, že proměnnou globálně na samém vrcholu souboru. Ale téměř ve všech případech bychom se šklebí na to, a dokonce ani jít do tohoto řešení pro teď. Takže teď, stánek s jídlem je, že proměnné mají tento pojem rozsahu. Ale teď se pojďme podívat na další suchou cestou skutečně hledá na některé docela zajímavé detaily implementace. Jak bychom mohli reprezentovat informace. A my už se na to v prvním týdnu třídy. Při pohledu na binární soubory, a připomenout si z desítkové soustavě. Ale pamatujete z minulého týdne, že C má různé typy dat a svazků více, ale nejužitečnější z nich teď by mohly být následující. Char, nebo znak, který se stane být jeden bajt, nebo osmi bitů celkem. A to znamená, že velikost z char je jen jeden bajt. Bajt je osm bitů, tak to znamená, že můžeme představovat, jak mnoho znaků. Kolik písmen nebo Symboly na klávesnici máme-li jeden byte nebo osmi bitů. Vzpomeňte si na týden nula. Pokud máte osm bitů, kolik celkové hodnoty můžete reprezentovat s vzory nul a jedniček? One-- víc než to. Takže 256 příspěvků, pokud vás začíná počítat od nuly. Takže pokud máte osm bits-- takže pokud měli své binární žárovky tady zase, bychom mohli zase ty žárovky na a pryč v kterémkoliv z 256 unikátních vzorů. Teď je to trochu problematické. Ani ne tak pro angličtinu a Románské jazyky, ale určitě když se zavést pro Například asijské jazyky, které mají daleko více symbolů, než jako 26 písmen abecedy. Vlastně bychom mohli potřebovat více než jeden bajt. A naštěstí v V posledních letech se společnost Přijaté další normy, které používají více než jeden bajt na jedno nabití. Ale teď v C, výchozí je jen jeden byte nebo osm bitů. Číslo, zatím, jsou čtyři bajtů, jinak známý jako 32 bitů. Což znamená, že to, co je co největší číslo můžeme reprezentovat pomocí int zřejmě? S miliardy. Takže je to čtyři miliardy dávat nebo brát. 2 k 32th moc, kdybychom předpokládat žádné negativní čísla a stačí použít všechny pozitivní čísla, je to čtyři miliardy dávat nebo brát možnosti. Float, zatím, je jiný typ datového typu v jazyce C. Je to stále číslo, ale je to reálné číslo. Něco s desetinnou čárkou. A ukázalo se, že C také používá čtyři bajty představují plovoucí bodové hodnoty. Bohužel, kolik plovoucí bodové hodnoty jsou tam venku ve světě? Kolik reálná čísla jsou tam? Tam je nekonečný číslo, a když na to přijde tam je nekonečně mnoho celých čísel. Takže jsme už trochu kopat sami díru zde. Kdy zřejmě v computers-- na nejméně programy napsané v jazyce C na them-- může počítat jen tak vysoko, jak čtyři miliardy dávat nebo brát, a plovoucí desetinnou čárkou hodnoty může jen zdánlivě nějaké konečné množství přesnosti. Pouze tolik číslic za jejich desetinného místa. Vzhledem k tomu, samozřejmě, pokud máte pouze 32 bitů, Nevím, jak jsme jít o představuje skutečnou numbers-- pravděpodobně s různými typy vzorů. Ale je tu určitě konečný počet těchto vzorů, tak i zde, je to problematické. Nyní můžeme lehce vyhnout problému. Pokud nechcete používat plovák, můžete použít double v jazyce C, která vám dává osm bajtů, které je způsob, jak více možných vzory nul a ty. Ale je to ještě konečný, což se děje být problematické, pokud budete psát software pro grafiku nebo fantazie matematické vzorce. Takže můžete skutečně chtějí spočítat větší, než je. Dlouhý long-- hloupě named-- je také osm bajtů, nebo 64 bitů a je dvakrát tak dlouhá jako int, a je to na dlouhou celočíselnou hodnotu. Fun fact-- pokud int je čtyři byty, jak dlouho je dlouho v C obvykle? I čtyři byty, ale long long je osm bajtů, a to je z historických důvodů. Ale stánek s jídlem teď je jen, že data být zastoupeny v computer--, která je fyzické zařízení s elektřinou, to je obecně řízení ty nuly a ones-- s konečnými částkami přesnosti. Tak v čem je problém, a pak? No je tu problém celočíselného přetečení. Není to jen v C, ale v počítače obecně. Například, je-li toto je byte stojí bit-- takže pokud je osm bit-- vše z nichž je číslo jedna. Jaké číslo je to představuje, pokud budeme předpokládat, je to všechny pozitivní hodnoty v binární? 255, a to není 256, protože nula je nejnižší číslo. Takže 255 je nejvyšší jeden, ale problém Předpokládejme, že jsem chtěl, aby zvýšit tuto proměnnou, která používá osm bitů celkem když chci ji zvyšovat. No, jakmile jsem se přidat jeden až všechny tyto těch, můžete snad představit visually-- jen jako nesoucí jedno použití decimals-- něco děje proudit doleva. A skutečně, když jsem přidat číslo kdo to, co se děje v binární je to, že přetéká zpět na nulu. Takže pokud jste jen use-- není int, ale jeden byte počítat celá čísla v programu, podle default-- jakmile se dostanete na 250, 251, 252, 253, 254, 255-- 0 přichází po 255, což asi není to, co uživatel bude očekávat. Nyní zatím v plovoucí desetinnou čárkou svět, Máte také podobný problém. Ani ne tak s největší number-- i když je to stále problém. Ale s množstvím přesnosti že můžete reprezentovat. Takže pojďme se podívat na tento příklad Zde také od dnešního zdrojového code-- float-0.c. A všimněte si, že je to super Jednoduchý program, který by zřejmě vytisknout, jakou hodnotu? Co si vsadit, že to bude tisknout i když tam je trochu novou syntaxí tady? Tak doufejme, že 0.1. Takže ekvivalent jednu desetinu protože dělám 1 děleno 10. Já uložení odpověď v proměnné s názvem f. Že proměnná je typu float, který je klíčové slovo, jen jsem navrhl existoval. Jsme neviděli předtím, ale to je docela elegantní způsob, jak v printf určit, kolik číslic jste chtějí vidět po desetinnou čárkou. Takže tento zápis znamená jen že tady je zástupný symbol. Je to pro plovoucí desetinnou čárkou hodnota, a oh, mimochodem, ukázat, že s desetinnou čárkou s jedno číslo za desetinnou čárkou. Tak to je číslo platných číslic, abych tak řekl, že možná budete chtít. Tak nech mě jít dál a dělat jak plovák-0, ./float-0, a zřejmě 1 děleno 10 je 0.0. A teď, proč to je? Tak znovu, je počítač s mě doslova, a napsal jsem 1 a psal jsem 10, a hádat, co je předpokládaný typ dat u těchto dvou hodnoty? Int, je to technicky něco trochu jiného. Je to obvykle dlouho, ale je to nakonec integrální hodnota. Není hodnota s plovoucí čárkou. Což znamená, že pokud je tato je int a to je int, Problém je, že v počítači nemá schopnost dokonce uložit tento desetinnou čárkou. Takže když uděláte jeden rozdělený od 10 pomocí čísel jak čitatele a jmenovatel, odpověď by měla být 0,1. Ale protože computer-- ty jsou integers-- neví, co má dělat s 0,1. Takže to, co je jasně dělá? Je to jen házení je pryč, a to, co jsem viděl v konečném důsledku 0.0 jen proto, že jsem trval na tom, že printf ukaž mi jedno desetinné místo. Ale problém je, že pokud dělit celé číslo na celé číslo, budete get-- podle definice z C-- celé číslo. A že to nebude dělat něco hezkého a pohodlně jako kolo to až do Nejbližší jeden nahoru nebo dolů. Bude to zkrátit vše za desetinnou čárkou. Takže jen intuitivně, co je pravděpodobně opravit? Co je to nejjednodušší oprava tady? Jo? Přesně tak. Proč se prostě chovat jako ty efektivně s plovoucí desetinnou čárkou hodnoty a proměnili je v plováky nebo čtyřhra. A teď když to udělám, aby plováky-0, nebo když jsem sestavit plováky-1, , který je totožný s to, co bylo právě navrhla. A teď jsem to plave-0, teď budu mít 0,1. Teď je to úžasné. Ale teď budu dělat něco trochu jiného. Jsem zvědavý na to, co je opravdu děje pod kapotou, a budu tisknout se na 28 desetinných míst. Chci opravdu vidět 0.1000-- infinite-- [Neslyšitelné] 27 nuly po té 0,1. No uvidíme, jestli to je to, co jsem opravdu dostanete. Ujistěte se plave-0 stejný soubor. ./floats-0. Pojďme se zaměřit na dramatické odpověď. Celou tu dobu, co jste byli myšlení 1 děleno 10 je 10%, nebo 0,1. To ne. Alespoň pokud jde Počítač je znepokojen. Nyní why-- OK, to je kompletní lež 1 děleno 10 je 0,1. Ale to není why-- stánek s jídlem dnes. Tak proč se počítač myslet, Na rozdíl od nás všech v místnosti, že 1 děleno 10 je ve skutečnosti, že blázen hodnota? Co je to počítač dělá zřejmě? Co je to? Není to přetečení, sama o sobě. Přetečení je typicky při obtékání kolem hodnoty. Je to otázka nepřesnosti v hodnota s plovoucí čárkou kde máte pouze 32 nebo možná i 64 bit. Ale pokud tam je nekonečný počet reálných numbers-- čísla s desetinnými místy a čísla thereafter-- jistě si nemůže představovat všechny z nich. Takže počítač uveden nám nejbližší zápas na hodnotu, může představovat, že pomocí počet bitů na hodnotu vlastně chci, což je 0,1. Bohužel, pokud máte začít dělat matematiku, nebo si začátek zahrnující tyto druhy plovoucí bodové hodnoty ve významných programs-- finanční software, vojenské software-- cokoliv kde je vnímání asi dost důležité. A začnete přidávat čísla, jako je tento, a začátek běží, že software s opravdu velkými vstupy nebo mnoho hodin nebo šarží dní nebo spoustu let, Tyto malinké chyby Jistě lze přidat až v průběhu času. Nyní jako stranou, pokud jste někdy Viděl Superman 3 nebo kancelářské prostory a vy byste mohli vyvolat jak ti kluci ukradli hodně peněz ze svého počítače pomocí plovoucí bodové hodnoty a sečtením malý Zbytky, doufejme, že film nyní dává větší smysl. To je to, co bylo zmiňovat se v tom filmu. Skutečnost, že většina společnosti nebude vypadat Po určitém počtu desetinných míst, ale to jsou zlomky centů. Takže začnete přidávat je do, můžete začít dělat spoustu peněz na váš bankovní účet. Tak to je Kancelářské prostory vysvětlil. Teď bohužel mimo Kancelářské prostory, tam jsou některé oprávněně trápí a významné dopady z těchto druhů podkladové rozhodnutí design, a opravdu jeden z důvodů, používáme C v průběhu je tak, že máte skutečně tento důvod up pochopení toho, jak počítače pracují, jak software funguje, a ne brát nic jako samozřejmost. A skutečně bohužel, i když že základní porozumění, my lidé dělají chyby. A to, co si myslel, jsem, že podělit se to osm minut video zde přijata z epizody Divy, které je vzdělávací pořad o tom, jak věci fungují že maluje dva obrázky kdy nesprávné použití a porozumění plovoucí čárkou vedly k některým významným nešťastné výsledky. Pojďme se podívat. [PŘEHRÁVÁNÍ] -My Nyní vrátit k "inženýrství Katastrofy "na Divy. Počítače. Všichni jsme si zvykli na často nepříjemné problémy, které Dostal se them-- chyby, viry a Software glitches-- pro malé ceny zaplatit za pohodlí. Ale v high-tech a vysokou rychlostí vojenské a vesmírný program aplikace, nejmenší problém může se zvětší do katastrofy. Dne 04.6.1996 zpracovali vědci zahájit bezpilotní Ariane 5 rakety. To nesl vědecké satelity navržený stanovit přesně, jak Zemské magnetické pole interaguje se solárními větry. Raketa byla postavena na Evropská kosmická agentura, a zvedl se od svého zařízení na pobřeží Francouzské Guyany. -Na Asi 37 sekund do let, se poprvé Všiml něco špatně. Že se trysky se otáčení takovým způsobem, že 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í o jeho zničení. Bezpečnostní důstojník rozsah, s obrovské střeva, stiskl tlačítko a vyhodil raketu před tím, než mohl být nebezpečné pro veřejnou bezpečnost. Tohle byla panna plavba Ariane 5, a jeho zničení se místo, protože vady vložené do softwaru rakety. -The Problém na Ariane bylo, že bylo číslo, které vyžaduje 64 bitů k vyjádření, a chtěli převést je na 16-bitové číslo. Předpokládali, že počet se nikdy nebude moc velký. Že většina z těchto číslic v 64-bitové číslo bylo nulové. Se mýlili. -The Neschopnost jednoho software přijmout druh číslo generované jiný byl u kořene selhání. Vývoj softwaru se stala velmi nákladné součástí nové technologie. Ariane 4 Raketa měla byla velmi úspěšná. Tolik softwaru vytvořeného pro byla také použita v Ariane 5. -The Základním problémem bylo to, že Ariane 5. Byla faster-- zrychlil rychleji, a software se neúčtuje za to. -The Zničení rakety Byla to obrovská finanční katastrofa. Vše kvůli chybě minut softwaru. Ale to nebyl první problémy konverze dat časové soužil moderní raketové techniky. -V 1991 se zahájením z první války v Perském zálivu, Patriot raketa zažil podobný typ problému konverze číslo. A jako výsledek 28 lidé-- 28 Američtí soldiers-- bylo zabito, a asi sto dalších zraněno. Když Patriot, který měl na ochranu proti příchozí pluje, nedokázal vystřelit raketu. Kdy Irák napadl Kuvajt, a Ameriku zahájila Pouštní bouře na počátku roku 1991, Patriot raketové baterie byly rozmístěny k ochraně Saúdské Arábie a Izrael od iráckých Scud raketových útoků. Patriot je středního doletu US povrch-k-vysílat systém vyráběné společností Raytheon. -Velikost Patriot interceptor itself-- Je to o přibližně 20 metrů dlouhá, a váží asi 2.000 liber. A to s sebou nese bojovou hlavici asi, Myslím, že to je zhruba 150 liber. A hlavice je sám o sobě vysoce výbušný, který má fragmenty kolem něj. Takže pouzdro hlavice je navrženy tak, aby jednala jako brokovnice. -The Rakety jsou prováděny čtyři kontejneru, a jsou přepravovány na návěsu. -The Patriot Protiraketový systém sahá nejméně 20 let. Původně byl vyvinut jako protiletadlová raketová sestřelit nepřátelské letouny. V první válce v Perském zálivu když ta válka přišla, Armáda chtěla používat to, aby sestřelit pluje, ne letadel. Irácké letectvo bylo není tak velký problém, ale armáda byla starosti pluje. A tak se snažili upgrade Patriot. -Intercepting Nepřítele raketa jede Mach 5 se bude dost náročné. Ale když Patriot byl běhavý do provozu, armáda nebyla vědoma Irácký změna, která z jejich Pluje téměř nemožné ní. Co se stalo je, že pluje přicházely byly nestabilní. Byli vratký. Důvodem byla Iraqis-- za účelem získání 600 km z na 300 kilometrů rozsah missile-- vzal váhu z přední hlavice, a dělal hlavice lehčí. Takže teď Patriot se snaží přijít na Scud, a většina z time-- Drtivá většina time-- by to prostě létat plout. -Jakmile Provozovatelů Patriot systému si uvědomil, že Patriot minul svůj cíl, oni odpálili Patriot v hlavici aby se zabránilo možným nehodám případě, že měla dovoleno se dostat na zem. To bylo to, co většina lidí viděla jako velké ohnivé koule na obloze, a nepochopený jako zachytí Scud hlavic. -Although V noční obloze, Patriots Zdálo se, že úspěšně ničit Pluje, na Zahránu by mohlo být žádná chyba o jeho výkonu. Tam radarový systém Patriot ztratil na příchozí Scud a kvůli nikdy zahájena na softwarové chyby. Byli to Izraelci, kteří jako první objevili , že čím delší je systém byl na, větší časový rozdíl se stala. Vzhledem k hodinami vložené v počítači v systému. -Asi Dva týdny před tragédie v Dhahran, Izraelci údajně Ministerstvo obrany , že systém ztrácí čas. Po asi osm hodin chodu, oni si všimli že systém je stále znatelně méně přesné. Ministerstvo obrany odpověděl tím, že vyprávění všech baterií Patriot nenechat systémy na dlouhou dobu. Oni nikdy neřekl, co dávno bylo. 8 hodin, 10 hodin, tisíce hodin. Nikdo nevěděl. -The Patriot baterie umístěný v kasárnách na Zahránu a jeho chybný interní hodiny byl na více než 100 hodin v noci 25. února. -Je Sledovat čas s přesností asi desetina sekundy. Nyní desetiny sekundy je zajímavé číslo protože nemůže být vyjádřena v binárním přesně, 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é tomu uvěřit, ale použít jako příklad. Vezměme číslo třetina. Jedna třetina nemůže být vyjádřené v desítkové soustavě přesně. Jedna třetina je 0,333 děje na nekonečno. Neexistuje žádný způsob, jak to udělat, aby se absolutní přesnost v desítkové soustavě. To je přesně ten druh problému které se stalo v Patriot. Čím delší je systém běžel, hůře se stal time error. -Po 100 hodinách provozu, Chyba v té době byl jen asi třetina sekundy. Ale pokud jde o zaměření raketa jede Mach 5, to vedlo ke sledování chyba více než 600 metrů. Bylo by fatální chyba pro vojáky v Zahránu. Co se stalo se Scud start byl zjištěna pomocí satelitů včasného varování, a věděli Scud se blíží v jejich obecném směru. Nevěděli, kde to přichází. Bylo nyní na radaru součást systému Patriot bránit Zahránu najít a udržet dráha příchozí nepřátelské rakety. -The Radar byl velmi chytrý. To by ve skutečnosti sledovat pozice Scud a předvídat, kde to asi bude příště radar poslal puls ven. To se nazývá rozsah brána. -Pak Jakmile Patriot rozhodne dost času má prošel se vrátit a zkontrolovat další místo pro tento detekovaným objektem se vrací. Takže když se vrátil do špatné místo, to pak nevidí žádný objekt. A rozhodne, že neexistuje žádný objekt. To bylo falešné detekce a to klesne stopu. -The Příchozí Scud zmizel z obrazovky radaru, a vteřin později ho narazila do kasáren. Scud zabil 28. To bylo poslední, kdo vystřelil během první války v Perském zálivu. Je tragické, že aktualizovaný software přišel za úsvitu následujícího dne. Software vada měla bylo pevné, zavírací jedna kapitola v problémové Historie Patriot rakety. [END VIDEOPŘEHRÁVÁNÍ] David J. Malan: To je pro CS50. Uvidíme se ve středu. [Přehrávání hudby]