[Predvajanje glasbe] DAVID J. Malan: Dobro. To je CS50, in to je začetek dva tedna. Torej, začnimo danes z napako. Napako, je seveda napaka v programu, in boste dobili zelo seznanjeni s tem konceptom če ste nikoli programirana pred. pset0 in zdaj pset1. Ampak, kaj menijo, nekaj malo preprosta na prvi. Ta program sem, da sem vrgel skupaj vnaprej, in trdim, da bi moral ta natisnete 10 zvezd na zaslonu s pomočjo printf, vendar je očitno buggy na nek način. 

Glede na to, da je specifikacija, ki bi moral natisniti 10 zvezd, vendar pa ni očitno, kaj bi trdite je bug? Ja? Torej, to je off za eno napako, in kaj misliš s tem? OK. Odlično. Zato smo določeno začeti vrednost nič za i, in smo podali vrednost n 10, vendar smo uporabili manjša ali enaka. In razlog, da je to dva znakov in ne samo en simbol, kot v matematičnem knjigi, je, da nimate način izražanja en ekvivalent znak. 

To pomeni manj kot, vendar če začnemo pri ničli, ampak šteješ vso pot skozi in je enaka 10, ste seveda bo računamo 11 stvari v celoti. In tako si bomo tiskali 11 zvezd. Torej, kaj lahko fix za to? Ja? 

Torej samo prilagoditi manj kot enaka ali le manj kot, in tam je, Trdim, morda druga rešitev, preveč. Kaj bi lahko še kaj naredim? Ja? 

Torej začeli višini do 1, in pusti manj kot ali enaka. In odkrito povedano jaz bi trdil, da za tipične humani to je verjetno bolj enostavno. Začnemo na 1. in prešteti do 10. V bistvu to, kar misliš. 

Ampak realnost je, v programiranje, kot smo videli, računalniški znanstveniki in programerji običajno ne začnemo na nič. In tako, da je v redu, ko se navadiš nanj. Vaše stanje bo običajno bilo kaj takega manj kot. Tako preprosto logično napaka, da smo lahko zdaj popraviti in na koncu prevedem to in dobili le 10. 

No, kaj pa ta bug tukaj? Tukaj, še enkrat, trdim, da imam Cilj tiskanje 10 stars-- eno na vrstico tem času, vendar pa ne. Preden smo predlagali, kaj fix je, kaj to tiskanje vizualno, če bi bil zbrati in zaženete ta program, pa ti misliš? Ja? 

Star. Torej vse zvezde na Ista vrstica je tisto, kar sem slišal, in nato novo vrstico znak. Torej, dajmo poskusiti. Torej, da buggy-1, začne, in vidim ukaz Jek da smo se pogovarjali o zadnjem času. ./buggy-1, in dejansko vidim vse 10 zvezd na isti liniji, čeprav trdim, v moji specifikaciji samo komentar na vrhu kodo, ki sem nameraval narediti eno na linija. Ampak to izgleda v redu. 

Zdaj linija 15 je videti, kot da sem tiskanje zvezdo, nato pa linija 16 Izgleda, da sem za tiskanje Nova linija značaj, in oni so tako zamaknjeni, tako Jaz sem v notranjosti zanke jasno. Torej, jaz ne bi smel početi zvezdo, nova linija, zvezda, nova linija, zvezda, nova linija? Ja? 

Ja, za razliko od jezika kot Python, če ste seznanjeni, vdolbina ne zadevo na računalnik. Važno je le človeku. Torej, ker so tukaj sem izumil linij 15 in 16-- da izgleda lepo, vendar računalnik ne briga. Računalnik skrbi dejansko ima zavite oklepaje okrog teh vrstic kode. 

Tako, da je clear-- tako kot v Scratch-- da teh dveh vrstic kode je treba izvršiti. Kot eden od teh rumeno Scratch sestavljanke kosov znova in znova in znova. 

Torej, zdaj, če sem ponovno zagnati-ta program-- ./buggy-2-- Hm. Imam napako zdaj. Kaj sem pozabil, da naredim? Ja, tako da nisem še prevesti. Torej, da buggy-2. No takšno datoteko, ker nisem dejansko zbere drugo različico. Torej, zdaj zanimivo neprijavljeno variable-- ne 2. Delamo 1. Naredite buggy-1-- ./buggy-1-- in zdaj vsak od njih je na isti liniji. 

Zdaj je izjema To naj bi trditev moj da morate te zavite oklepaje. Kdaj je pravzaprav OK-- Če ste Opazil v oddelku ali textbooks-- da izpustijo zavitimi oklepaji? Ja? 

Točno tako. Če obstaja samo ena vrstica kode, ki vas želijo biti povezane z zanke kot v našem prvem primeru. To je povsem legitimno da izpustijo zavitimi oklepaji samo kot neke vrste ugodnosti od prevajalnika za vas. Ja? Dobro vprašanje. Bi se zdelo napaka slog? Mi bi promote-- kot CS50 slogovni priročnik, URL, za katerega V pset1-- da vedno uporabite zavitimi oklepaji. Zagotovo, če ste novi v programiranje. Realnost je, da nismo vas bo prepove od delaš te udobje. Ampak, če ste ravno v zamahu stvari, absolutno samo vedno uporabite curly naramnice, dokler ne boste dobili visi za to. Dobro vprašanje. 

V redu. Tako da takrat je bil bug. Vsaj v nečem dokaj preprosta. In vendar si morda to mislite je precej pomanjkljiv, kajne? To je vrsta prvem tednu gledanja na jeziku všeč, si oglejte hroščev v njem. Ampak realnost to so dejansko zastopnik nekaterih precej zastrašujoče težav , ki se lahko pojavijo v realnem svetu. 

Torej, nekateri od vas morda spomni če boste sledili tech novice, ali morda celo ujela Veter je to v februarju od tega preteklo leto, ki je imel Apple je malo napako v obeh iOS, operacijski sistem na njihove telefone, in tudi Mac OS, operacijski sistem na svojih namiznih in prenosnih računalnikov. In da ste videli takšne naslove, kot je ta. In potem, Apple obljubil, da popraviti to napako, in zelo hitro naredil to popraviti v iOS, potem pa na koncu ga določi v operacijskem sistemu Mac OS kot dobro. 

Zdaj pa nobeden od teh naslovov, sam res pokažejo, kaj je osnovni problem je bil, vendar je bil bug končno zniža na bug v SSL Secure Sockets Layer. In skrajšam zgodbo, to je programska oprema da naši brskalniki in drugi programska oprema se uporablja za kaj? 

Če bi rekel, da je SSL vključene, kadar se ti obiščite URL, ki se začne s HTTPS, kaj potem lahko SSL povezana s? Šifriranje. Torej bomo govorili o to v prihodnjih dneh. Šifriranje, umetnost kodiranja informacij. 

Vendar skrajšam zgodbo, Apple kdaj nazaj je naredil napako pri njihovem izvajanju SSL, je programska oprema, ki v končni fazi izvaja URL-ji, kot so HTTPS ali max povezave tam. Posledica je, da je vaš povezave lahko potencialno se pobral. In vaše povezave so bile Ni nujno, šifrirana če si imel nekaj slab človek med ti in spletna destinacija, ki znali izkoristiti to. 

Sedaj Apple končno objavljen popraviti za to na koncu, in opis njihove fix je bilo to. Varen promet ni uspelo, da bi preverili pristnost povezave. Vprašanjem se je ukvarjala z obnavljanje manjkajoče korake potrjevanja. 

Tako da je to zelo valovita roko razlaga za preprosto reči, da smo zajebali. Obstaja dobesedno ena vrstica kode, ki je bil buggy pri njihovem izvajanju SSL in če greš na spletu in iskanje za to lahko dejansko našli Prvotni izvorno kodo. Na primer, to je zaslon strel samo del dokaj veliko datoteko vendar je to funkcija očitno imenovano SSL preveri znak strežnika Exchange Key. In je potrebno kup argumenti in vhodi. In ne bomo osredotočiti preveč na minucijo tam, ampak če se osredotočite na kodo notri te vrhunskih function-- Pojdimo povečate na to. Morda ste že sumijo kaj bi lahko napaka se tudi, če nimate pojma navsezadnje, kaj gledaš. Obstaja nekakšna anomalija tu, ki je kaj? 

Ja, mi ni res všeč videz dveh goto ne uspe. Odkrito povedano, ne vem, kaj goto ne pomeni, vendar imajo dva izmed njih na hrbtni strani. To nekako me drgne razumsko napačen način, in seveda, če povečate samo teh vrstic, to je C. 

Torej, veliko kode Apple je sam napisal v C, in to očitno res equivalent-- da ne bo to lepo zarezo različica, če pa priznati dejstvo, da ni nobenih zavitimi oklepaji, kar Apple res napisal je koda, ki je videti kot je ta. Tako sem pomanjšana in sem določen zamik v smislu da če je ne zavite oklepaje, da se Drugi goto ne da je v rumeni barvi gre za izvršitev ni važno kaj. To ni povezano s če pogoj nad njo. 

Torej še enkrat, če ne povsem razumeli, kaj to lahko morebiti se delaš, vedo, da je vsak od teh conditions-- vsako od teh vrstic je zelo pomemben korak v postopku preverjanja Če so vaši podatki v resnici šifrirani. Torej preskoči eno od teh koraki, ni najboljša ideja. 

Ampak zato, ker imamo to Drugi goto ne rumeno, in ker, ko smo nekako estetsko premakniti na levo, kjer je Logično je v tem trenutku, kaj to pomeni za linijo kode pod tem drugem goto ne bi si mislil? To se vedno dogaja, da je treba preskočiti. Torej gotos splošno namrščil razlogov ne bomo res gredo v, in seveda v CS50 težimo ne naučiti to izjavo goto, vendar si lahko zamislite goto ne v smislu, go jump na drug del kode. 

Z drugimi besedami preskakovati ta zadnja vrstica v celoti, in da je rezultat tega nor enostavna napaka, da je bil samo Rezultat verjetno nekdo kopiranje in lepljenje eno preveč kolikorkrat je, da celotno varnost iOS in Mac OS je občutljiva za prestrezanje slabi fantje za kar nekaj časa. Dokler Apple končno odpravljena. 

Zdaj, če so nekateri od vas dejansko teče stare različice iOS in Mac OS, lahko greš na gotofail.com ki je spletna stran, da nekdo ustanovi v bistvu določanje programsko Če je vaš računalnik še vedno ranljiva. In odkrito povedano, če je, je to verjetno dobra ideja Če želite telefon posodobiti ali vaš Mac na tej točki. Vendar pa, samo dokaz, da kako Presoja teh nižji ravni Podrobnosti in pošteno enostavne ideje lahko resnično prevesti v odločbah in težave, ki affected-- v tem case-- na milijone ljudi. 

Zdaj beseda o upravi. Strokovna skupina bo začela ta prihaja nedelja. Prejeli boste e-poštno sporočilo, ki ga vikend o odseku, na kateri točki Postopek resekcijo se bo začelo, če ste jih spoznal, imate zdaj nekateri novi konflikti. Tako da to vsako leto zgodi, pa smo se sprejme v dneh, ki prihajajo. 

Pisarna hours-- storiti naprej oko na tem seznamu tukaj. Spremeni malo ta teden, posebej čas začetka in mesto, tako da se posvetuje da pred naslovom uradnih ur koli od naslednjih štirih noči. In sedaj beseda o ocenjevanju, še posebej, ko se potopite v problemu določa eno in še dlje. 

Torej, po specifikaciji, to so na splošno osi, vzdolž katere ocenjujemo svoje delo. Področje se nanaša na to, kar meri svojo kodo pripomočki lastnosti zahtevajo z našimi specifikacijami. Z drugimi besedami, koliko delni set si se odgrizne. Si naredil eno tretjino tega, pol tega, 100% nje. Tudi če to ni pravilno, koliko ste poskušali? Tako da zajame raven truda in zneskom na katero ste odgriznil Težave problema, ki je. 

Correctness-- je ta, da se v kolikšni meri je vaša koda v skladu z našimi specifikacije in brez hroščev. Torej, ali je pravilno deluje? Če damo nekaj vhod, kajne nam dajejo moč, da smo pričakovali? Design-- zdaj je to prvi od so predvsem kvalitativni tisti, ali tisti, ki zahtevajo človeške sodbe. In res, to je razlog, zakaj imamo zaposlenih toliko učnih štipendistov in seveda pomočniki. V kolikšni meri je vaša koda napisana dobro? 

In spet je to zelo Ocena kakovosti da bodo skupaj z vami na dvosmerno v prihodnjih tednih. Tako da, ko boste dobili ne le numerične rezultati, ampak tudi pisno rezultati ali natipkan feedback, ali pisne povratne informacije v angleških besed. To je tisto, kar bomo uporabili, da vozite proti dejansko pisanje boljše kode. In v predavanju in oddelku, bomo poskušali izpostaviti out-- tako pogosto, kot smo lahko-- kaj naredi program, ne samo pravilno in funkcionalno dobro, ampak tudi dobro oblikovana. Najbolj učinkovita bi lahko bilo, ali celo najlepši je lahko. 

Kar nas pripelje do stilu. Style je navsezadnje estetska sodba. Ste se odločili dobro Imena za vaše spremenljivke? Ste pravilno zamaknjen kodo? Ali je videti dobro, in zato, je enostaven za drugo človeško bitje brati vaše vsakokratni njegove pravilnosti. 

Zdaj na splošno po predmetniku, smo dosegli te stvari na pet stopenjski lestvici. In mi kladivo domov točka da je tri je res dobra. Zelo hitro naredite ljudje začeti početje aritmetiko. Ko so dobili tri od pet na pravilnost za nekaj pset in mislijo, prekleto, jaz grem do 60% ki je v bistvu D ali E. 

To ni način, kako mislim, od teh številk. Tri je res dobro in kaj smo splošno pričakujemo na začetku izraza je, da če ste dobili kup three's-- morda par sejmov, nekaj fours-- ali nekaj dvojke, nekaj fours-- To je dober kraj za začetek. In tako dolgo, kot smo videli krivulja navzgor skozi čas, ste v zelo dobrem mestu. 

Formula, ki jih uporabljamo za teža stvari, ki je v bistvu To po predmetniku, ki samo pomeni, da smo dati večjo težo korektnosti. Ker je to zelo pogosto pravilnost ki traja največ časa. Verjemi mi zdaj. Boste find-- vsaj v eni pset--, ki vas porabijo 90% svojega časa delajo na 10% problema. 

In vse, kar nekako deluje razen ene ali dveh hroščev, in tistih, ki so hrošči, ki vas pozno ponoči. To so tisti, ki nekako vam pobegniti. Ampak, ko spi na njej, ali se udeležujejo uradnih ur ali postavljanje vprašanj na spletu, ki je Ko boste prišli do te 100% cilja, in da je, zakaj smo se teža pravilnost in najbolj. Oblikujte malo manj, in stil malo manj kot to. Vendar ne mind-- slogu je morda najlažje od tega za off ugriz kot na slogovnega priročnika. 

In zdaj, bolj resno Upoštevajte, akademsko poštenostjo. CS50 je nesrečno razlikovanje pri čemer je največja proizvajalka oglasov sveta primeri skoraj vsako leto v zgodovini. To ni zato, ker študentje goljufija v CS50 več tako kot kateri koli drugi razred, vendar je zaradi narave dela, Dejstvo, da je elektronski, Dejstvo, da smo si za to, in Dejstvo smo računalniški znanstveniki, Lahko rečem, smo žal Zelo dobra je odkrivanje. 

Torej, kaj to pomeni realno? Torej to, po predmetniku, Tečaj filozofija res ne omejijo, da so smiselne. Tam je to meja med delaš nekega dela na svoje in dobili malo razumno pomoč od prijatelja, in popolna delaš to delo za vaš Prijatelj, ali mu svojo kodo pošiljanje tako, da je ali je lahko preprosto vzemi ali sposoditi ven pravico. In da prečka črto da smo pripravljeni v razredu. 

Glej, učni načrt navsezadnje za proge da se pripravi kot razumno in nerazumno obnašanje, ampak res ne zavre navzdol v bistvu za svoje delo potrebujejo, da biti svoj na koncu. Zdaj s tem je dejal, je hevristično. Ker, kot si morda imagine-- iz uradnih urah in vizualne in videi ki smo jih prikazano tako far-- CS50 je res mišljeno, da se v primeru sodelovanja in kot zadruge in kot družbena kot je mogoče. So sodelovanje, saj je strog. 

Ampak s tem je dejal, hevristična, kot boste videli v predmetniku, je, da ko imate nekaj težav. Imate kakšno napako v kodi, ki vas ne more rešiti, je smiselno za vas pokazati svojo kodo nekomu drugemu. Prijatelj tudi v razredu, prijatelj sedi poleg vas na uradne ure, ali član osebja. Vendar pa ne smejo pokazati svojo kodo za vas. 

Z drugimi besedami, odgovoriti na vaše question-- Rabim help-- ni oh, tukaj je moja koda. Oglejte si to in sklepati iz tega, kar želiš. Zdaj, seveda, tam Tako je jasno, da igro ta sistem, v katerem vam bom pokazal, moja koda, preden vprašanje. Pokaži mi svojo kodo preden vprašanje. Ampak spet videti učni načrt za drobnejše podatke o tem, kje je ta linija. 

Samo, da je sedaj slikati sliko in deliti kot transparentno, kot je mogoče kjer smo v zadnjih letih, to je število primerov Ad sveta da CS50 je imel več V zadnjih sedmih letih. 14 primerov je to zadnjo jesen. V smislu vključenih dijakov, je bilo 20 nekaj čudno študente Preteklo jesen. Tam je bil vrhunec 33 študentje pred nekaj leti. Mnogi od njih so na žalost ni več tukaj na kampusu. 

Študenti, ki sodelujejo kot odstotek Razred je v preteklosti gibala od 0% do 5,3%, kar je samo reči to je vsako leto izziv. In proti temu koncu, kaj želimo narediti je posredovati eno da smo dd-- samo FYI-- primerjati na pravičnosti za tiste študente, ki so zato naslednji linijo. Mi primerjati vse tok stališča proti vsem preteklih misijah iz zadnjih mnogo let. 

Vemo tudi, kako se vprašaš okrog in najti kode zbirke online, diskusijski forumi online, prosta delovna mesta na spletu. Če lahko študent najti, lahko zagotovo zdi, da toliko, kot smo žal storiti. Torej, kaj boste videli v predmetniku čeprav je ta klavzula obžalovanje. Ne morem zagotovo cenim, in vsi smo je Osebje, ki je naredil tečaj, kot to, ali je to samo ena sčasoma Zagotovo vem, kaj je to všeč, ko življenje v napoto, ko imate nekateri pozno ponoči deadline-- ne le v tem razredu, vendar another-- ko ste popolnoma izčrpan, pod stresom, imajo neizmerno število drugih stvari za početi. Vas bo na neki točki v življenje prav gotovo slabo, morda prepozno Odločitev noč. 

Torej po predmetniku, da je ta klavzula, tak, da če v roku 72 ur, kar nekatere slabe odločitve, imate do nje in stik z mano in eden od vodij tečaja je in bomo imeli pogovor. Bomo ročaj stvari interno v upanju, za to vse bolj postaja poučevanje trenutek ali življenjsko lekcijo, in ni nekaj, s posebej drastične posledice kot lahko vidite na teh lestvicah tukaj. 

Torej, to je zelo resna tone. Dovolite nam, premor za samo nekaj sekund, da razbijem napetost. 

[Predvajanje glasbe] 

DAVID J. Malan: Dobro, Torej, kako je bilo, da je za segue? Današnjih glavnih temah. Prvi od katerih je abstrakcija. Drug ki se bo predstavitev podatkov, ki odkrito je res suh način rekel, kako lahko lotili reševanja problemov in razmišljanja o reševanju težav? Torej ste videli v nič, in ste videl morda že v pset1 s C , da ne samo, da lahko uporabite Funkcije, kot so printf, da drugi ljudje v let preteklosti napisal za vas. Napišete lahko tudi svoje funkcije. 

In čeprav morda ne boste imeli to storjeno v C, in odkrito v pset1 ne boste res potrebujejo, da napišete lastna funkcija, saj je problem-- medtem ko je morda zastrašujoče na Prvi glance-- boste videli lahko končno rešili z ni vse, da je veliko vrstic kode. Toda s tem, da omenjeni v smislu pisanja svojo funkcijo, Zavedam se, da C ne daje si to sposobnost. 

Jaz grem v današnjem izvorno kodo, ki je že na voljo na spletu, in bom, da gredo naprej in odprt up program, imenovan funkcija 0.C, in v funkciji nič bomo videli nekaj stvari. V prvih vrsticah 18 do 23 je moja glavna naloga. In zdaj, ko sva začeli brati koda, da ne bomo pisal na letenje, ampak sem napisal vnaprej ali pa, da si v problem nastaviti lahko prejmejo ob bila napisana vnaprej. Dober način za začetek branje kodo nekoga drugega so si za glavno funkcijo. Ugotovimo, kje ta vnos Bistvo je, da teče program, in jo nato logično od tam. 

Tako da je ta program navidezno odtisi tvoje ime sledi dvopičje. Nato smo uporabili GetString iz knjižnice CS50 da bi dobili niz, ali besedo ali frazo od uporabnika na tipkovnico. In potem je to stvar tu-- PrintName. 

Zdaj PrintName ni Funkcija, ki prihaja s C. To ni v standardni io.h. To ni v CS50.h. To je precej v isti datoteki. Obvestilo, če sem se pomaknite navzdol a bit-- vrstice 25 do 27-- to je samo lepa način komentiranja kodo z uporabo zvezde in poševnico. To je multi-linija pripombe, in to je samo moj opis v modrino kaj ta funkcija ne. 

Ker v vrsticah 28 do 31, Napisal sem super enostavno funkcijo čigar ime je PrintName. To traja, koliko argumenti, bi rekli? Torej ena argument-- zato, ker je eden argument naštete so v oklepaje. Vrsta, ki je niz. Kar pomeni PrintName je kot te črne škatle ali funkcija, ki traja kot vhodni niz. 

In ime tega String prikladno bo ime. Ne S, ne N, ampak ime. Torej, kaj PrintName storiti? Lepo je preprost. Tako kot ene vrstice kode za printf, ampak očitno je natisne "Hello", tako in tako. Kadar je tako in tako prihaja iz argumenta. 

Zdaj to ni veliko inovacij tukaj. Res sem sprejela program, ki bi lahko so bile napisane z eno vrstico kode s tem da je to tukaj, in ga spremenili v nekaj ki vključuje nekatere šest ali sedem ali tako vrstic kode vso pot dol. 

Vendar je prakticiranje od imenovano načelo abstrakcije. Vrsta zakapsulacijsko notranjosti novega funkcija, ki ima ime in bolje še, da je ime dobesedno pravi, kaj počne. Mislim printf--, da to ni predvsem opisno. Če želim ustvariti puzzle piece, ali če I želite ustvariti funkcijo da natisne ime nekoga, lepota tem je, da sem lahko dejansko daje tej funkciji ime , ki opisuje, kaj počne. 

Sedaj je potrebno na vhod, ki Sem samovoljno imenuje ime, ampak to je preveč čudovito opisna namesto da bi malo več generična kot S. in nična, za zdaj, samo pomeni, da ta funkcija ne Daj mi nazaj ničesar. To ni všeč GetString da Dobesedno mi roke nazaj niz tako kot smo to storili s koščki papirja s svojimi sošolci prejšnji teden, ampak ima samo stranski učinek. Natisne nekaj zaslonu. 

Torej, na koncu dneva, če Ne bo funkcija-0, ./function-0, bomo videli, da se prosi za moje ime. Sem tip Davida, in vrst iz mojega imena. Če bi še enkrat z Robom, to bo rekel "Zdravo, Rob." Tako preprosta ideja, ampak morda ekstrapolirati ta duševno da so dobili svoje programe malo bolj zapletena, in želite napisati kos kodo in klic, ki code-- sklicevati da code-- nekateri opisni poimenovati kot PrintName, C ne privoščijo nam te sposobnosti. 

Tu je še en preprost primer. Na primer, če sem odprla pila od danes imenuje return.c, opazil, kaj sem storil tukaj. Večina te glavne funkcije je printf. Najprej sem samovoljno inicializacijo spremenljivka imenuje x število 2. Nato sem izpisal "x je sedaj % I ", ki poteka v vrednosti x. Torej, jaz sem samo rekel, kaj je to. 

Zdaj sem le pogumno trdijo z printf. Jaz sem cubing da vrednost x, in sem to s klicem funkcije imenovana kocka kratki vx kot argument, in nato shranite izhod v spremenljivko samem, x. Torej sem clobbering vrednost x. Jaz nujni vrednost x z karkoli Rezultat kliče ta funkcija kocka. In potem sem izpisal nekaj puhasto stvari sem rekel, kar sem storil. 

Torej, kaj potem je kocka? Opazili, kaj je bistveno tukaj drugačna. Dal sem funkcijo ime kot prej. Sem določeno ime za argument. Tokrat se imenuje n namesto imena vendar bi jaz poklical kaj hočem. Toda to je drugačna. Ta stvar na levi strani. Prej je bilo tisto ključno besedo? Boys. Zdaj je očitno int. 

Torej, kaj je mogoče vzeti? Ker je nična znanilec nekako niča, in da je bilo tako. PrintName vrnil ničesar. To je naredil nekaj, ampak ni me vrniti nekaj, kar bi lahko dal na Leva stran enačaj kot da sem tukaj naredil on line 22. 

Torej, če rečem v vrstici 30, kaj je to verjetno kar pomeni, kaj kocka ne za mene? Ja? Se vrne celo število. Tako da mi roke nazaj, za primer, kos papirja , na katerem je napisan odgovor. 2 kubikov, ali 3 kubikov, ali 4 cubed-- karkoli sem opravil leta, in kako sem to izvesti? No, samo n krat n krat n je, kako bi jaz CUBE vrednost. Torej še enkrat, super enostavna ideja, vendar demonstrativen Zdaj, kako lahko napišemo funkcije ki nas dejansko imela nazaj Vrednosti, ki bi bili lahko zanimivi. 

Oglejmo si en zadnji primer tukaj se imenuje funkcija ena. V tem primeru, se začne , da bi dobili bolj prepričljivi. Torej v funkciji eni, to program-- obvestilo koncu poziva funkcijo imenovano GetPositiveInt. GetPositiveInt ni Funkcija v knjižnici CS50, vendar pa smo se odločili, želi, da bi obstajal. 

Torej, če smo se pomaknite navzdol, nato v datoteko, opazili, kako sem šel okoli izvajanju dobili pozitivno int, in jaz pravijo, da je bolj prepričljiv ker je to dostojno Število vrstic kode. To ni samo neumna Malo programa igrača. To je dejansko dobil nekaj preverjanje napak in delaš kaj bolj koristnega. 

Torej, če si niste videli potopis videoposnetke, ki smo vgrajeni v pset1, vedo, da je ta vrsta zanka v C, pisane v duhu na vrste stvari Scratch lahko storim. In to pravi, da to storite. Natisni to. Potem pa pojdi naprej in se n-- dobili int in ga shranite na n, in da to znova in znova in delaš spet tako dolgo, kot je n manj kot ena. 

Torej n se bo manj kot en samo, če človek ne sodeluje. Če on ali ona je tipkanje v 0 ali -1 ali -50, ta zanka se dogaja, da znova in znova izvršitve. In na koncu opazil, sem preprosto vrne vrednost. Torej, zdaj imamo funkcijo da si bi bilo lepo če bi CS50 izvajati CS50.h in CS50.c za vas, ampak tukaj smo lahko zdaj izvajanje tega sami. 

Ampak dva ugotovitve o nekaterih ključnih podrobnosti. One-- zakaj Izjavljam int n, misliš, na liniji 29 namesto samo delaš to tukaj, ki je bolj v skladu z kaj smo naredili prejšnji teden? Ja? Dobra misel. Torej, če bi ga tukaj, je, kot da mi da ga znova in znova o razglasitvi. To samo po sebi je ni problematično, po sebi, saj potrebujemo le Vrednost enkrat in nato bomo dobili novega anyway. Ampak dobra misel. Ja? 

Close. Zato, ker sem izjavila n na vrstica 29 zunaj zanke, je dostopen na celotnem ves ta funkcija. Ne pa tudi druge funkcije, saj n je še vedno znotraj teh Curly naramnice tukaj. Tako-- prepričan. 

Točno tako. Torej je to še bolj do točke. Če bomo namesto tega izjavila n tukaj na liniji 32, to je problematično, ker guess kam moram priti do njih? Na liniji 34, in Preprosto pravilo palca je, ki jih lahko uporabite samo spremenljivka znotraj najnovejših zavitimi oklepaji v kateri ste ga razglasi. 

Žal, vrstica 34 je ena vrstica prepozno, ker sem že zaprta curly brace na liniji 33 da ustreza curly brace on line 30. In tako je ta način rekel da je ta spremenljivka int scoped, tako rekoč, le v notranjosti teh zavitimi oklepaji. Prav tako ne obstaja zunaj njih. 

Torej res, če naredim to narobe, dovolite mi, shranite kode kot je-- je napačno napisana. Dovolite mi, da gredo naprej in ne predstavljajo Funkcija-1, in notice-- napake. Uporaba neprijavljenega identifikator n na liniji 35, ki je prav tukaj. In če smo se pomaknite navzgor nadalje, eden. Uporaba neprijavljenega identifikator n on line 34. 

Torej prevajalnik, Jek, je opazil, da je to samo ne obstajajo, čeprav jasno, da je tam vizualno. Tako preprosto je to fix razglasitvi tam. 

Zdaj pa me pomaknite na začetek datoteke. Kaj skoči ven na vas, kot pa malo drugačna od stvari, ki jih pogledal zadnjem tednu? Ne samo, da imam ime, ne le Imam nekaj ostrih vključuje up top, Nekaj ​​sem kliče prototip. Zdaj, ko je videti strašno podobno temu, kar pravkar smo videli pred nekaj trenutki na liniji 27. 

Torej sklepam iz drugačne sporočilo o napaki, zakaj sem to storil. Dovolite mi, da gredo naprej in izbrisati te vrstice ni. In tako vemo nič o prototipu. Remake to datoteko. Naredite eno od funkcij. In zdaj, prekleto, štiri napake. Pojdimo se pomaknite do prvega. 

Implicitno izjavo o funkciji dobili pozitivno int je ničen v C99. C99 samo pomeni 1.999 različica jezika C, kar je tisto, kar smo dejansko uporabo. Torej, kaj to pomeni? No C- natančneje C compilers-- so precej neumni programi. Oni samo vedo, kaj ste jim je povedal, in to je dejansko tematsko iz prejšnjega tedna. 

Problem je, da če grem o izvajanju ime tu gor, in kličem funkcijo imenovano GetPositiveInt tukaj na liniji 20, da funkcija tehnično ne obstaja, dokler prevajalnik vidi linijo 27. Na žalost, je prevajalnik počne stvari top, dol, levo, desno, zato, ker ni videl Izvajanje GetPositiveInt, vendar vidi skušaš da ga uporabljate tu gor, to je le, da bo bail-- vpij ste z napako message-- morda skrivnosten, in ne dejansko prevesti datoteko. 

Tako ti prototip navzgor Tu je seveda odveč. Dobesedno, sem šel dol in sem prekopiral in prilepili to, in sem jo dal sem gor. Void bi bilo bolj pravilno, da se bomo dobesedno kopirate in prilepite ta čas. Sem dobesedno kopirali in prilepili. Res enako kot drobtine kruha. 

Malo namig, da prevajalnik. Ne vem, kaj to počne še ni, vendar sem obljubil, da vas da bo obstajala koncu. In to je, zakaj je ta line-- v linija 16-- konča s podpičjem. To je odveč by design. Ja? 

Če niste povezali knjižnice da -Hej oh, dobro vprašanje. Sharp tudi header datotek vključkov. Morali bilo-- smeli skoraj vedno na samem vrhu datoteke za similar-- za točno istega razloga, ja. Ker v standardni io.h je dobesedno vrstica kot je ta, ampak z besedo printf in s svojimi argumenti in tipu vračanja. In tako s tem oster in vključuje tu, kaj ste dobesedno delaš je kopiranje in lepljenje vsebine nekdo drug napisal do vrha. Čimer cluing kodo v za Dejstvo, da te funkcije ne obstajajo. Ja? 

Absolutno. Torej, zelo pametno in pravilno Rešitev bi bila, veš kaj? Ne vem, kaj Prototip je, vendar vem, če sem razumel, da je C samo dumb in rethinks vrha do dna. Pa kaj je to dal, kar želi. Odprimo to kodo, prilepite gor top, zdaj pa potisnite glavni dol. S tem bi tudi rešili problem. 

Vendar pa lahko zelo hitro prišli do Scenarij, po katerem je treba poklicati B, in morda B pokliče nazaj na A. Ta je nekaj, kar se imenuje rekurzija, in se bomo vrnili na to. In je lahko ali pa ne bo dobro stvar, vendar lahko zagotovo prekinil to rešitev. 

In poleg tega, jaz bi trdijo, slogovno, še posebej, če svoje programe postanejo tako dolgo in tako dolgo, to je samo zelo priročen naj glavni na vrhu ker je to stvar, ki najbolj programerji bodo skrbi. In tako se je nekoliko čistejši, verjetno, da to storite tako, Sprva sem to storil s prototipom še čeprav izgleda malo odveč, na prvi pogled. Ja? Žal mi je, lahko pa rečem glasneje? 

Če preklopite lokacije izvajanje in prototip? Torej, to je dobro vprašanje. Če to ponovno razglasila navzdol tukaj, da vidimo, kaj se zgodi. Torej, če sem dal to navzdol tu govoriš. Oh, žal mi je. Glasneje? Še glasnejši. Oh, dobro vprašanje. Bi razveljavili funkcijo? Veš, po vseh teh letih, sem nikoli dal prototip kasneje. Torej, kaj je storiti, da bi funkcijo-1 po tem. 

[Mrmra] DAVID J. Malan: Oh, počakaj. Še vedno moramo dati vse do vrha. Torej, dajmo to narediti tukaj, če sem razumevanje vaše vprašanje pravilno. Bom dal vse, vključno z prototip nad glavno, ampak bom dal prototip nadaljevanju izvajanja. 

Torej, če naredim eno, sem že nazaj error-- unused spremenljivka n. Oh, tam. Hvala. Poglejmo, se znebimo tega. To je drugačen bug, tako da je prezreti, da je. Kaj je res hitro remake to. 

OK, tako da argument podatki ne ga formata String uporablja n-- oh, to je zato, ker Spremenil sem, da ti tukaj. Dobro vemo, kaj je odgovor bo da-- vse v redu, gremo. Ah, hvala za pozitivno. V redu, bom popraviti to kodo after-- prezreti to posebno napako saj to bilo-- deluje, je odgovor. 

Tako da ne prepiše kar ste storili. Sumim prevajalnik je napisan tako da zanemarja svoj prototip ker telo, tako rekoč, o ima funkcijo že bili izvedeni višje. Jaz bi moral dejansko posvetujejo priročnik prevajalnik razumeti, če je kdo drug posledice, vendar na prvi pogled le s poskušanjem in eksperimentiranje, se zdi, da ni nobenega učinka. Dobro vprašanje. 

Torej, kaj je sedaj korak naprej, ki se gibljejo stran od neželenih učinkov, ki so funkcije, naredite nekaj podobnega vidno na zaslonu z printf, vendar ne vrne vrednosti. In funkcije, ki so vrnitev vrednote, kot smo pravkar videl nekaj. Smo že videli to pojmovanje obsega, in s tem bomo znova videli. Ampak za zdaj, še enkrat, uporabiti pravilo palca , ki se lahko uporabljajo samo spremenljivka Notranjost nedavno odprli in zaprte zavitimi oklepaji, kot smo videl v tem konkretnem primeru. 

In kot ste poudarili, je ability-- bi lahko rešili nekatere od teh težav s tem da je globalno spremenljivko na samem vrhu datoteke. Toda v skoraj vseh primerih mi bi jezijo, da in v resnici sploh ne gre v to rešitev za zdaj. Torej za zdaj, hrana za s seboj, da spremenljivke imajo ta pojem obsega. 

Ampak zdaj si oglejmo drugo suhi način dejansko iščejo na nekatere zelo zanimivo Podrobnosti o izvajanju. Kako bi lahko predstavljajo podatke. In smo že pogledal to v prvem tednu razreda. Če pogledamo na binarne datoteke, in sebe spominja na decimalko. 

Ampak spomnite iz prejšnjega tedna, da ima C različne vrste podatkov in šopke več, Ampak najbolj uporabni tisti za zdaj bi bilo to. Char, ali znak, ki se zgodi da je en bajt, ali osem bitov skupaj. In to pomeni, da je velikost iz char je samo en bajt. Bajt je osem bitov, tako da to pomeni, da moremo predstavljati, koliko znakov. Koliko črk ali simboli na tipkovnici če imamo en zlog ali osem bitov. Pomisli nazaj na nič teden. Če imate osem bitov, koliko skupne vrednote lahko predstavljajo z vzorci ničel in enic? One-- več kot to. Torej, 256 objav, če vas začnemo iz nič. Torej, če imate osem bits-- tako, če bomo imeli svoje binarne žarnice do tu, smo se lahko spremeni te žarnice na in izklop kateremkoli od 256 edinstvenih vzorcev. 

Zdaj je to malo problematično. Ne toliko za angleščino in Romanski jeziki, vendar gotovo ko uvedejo za primer azijski jeziki, ki imajo veliko več simbolov, kot podobno 26 črk abecede. Dejansko smo morda potrebovali več kot en bajt. In na srečo v V zadnjih letih je družba sprejete drugi standardi, ki uporabljajo več kot en bajt z enim polnjenjem. 

Vendar za zdaj v C, privzeto je samo en bajt ali osem bitov. Celo, medtem ko je štiri bajtov, sicer znan kot 32 bitov. Kar pomeni, da tisto, kar je največja možna Številka moremo predstavljati pri notr očitno? Z milijardo. Torej, to je štiri milijarde gor ali dol. 2 k 32th moči, če bomo prevzemajo nobene negativne številke in samo uporabo vseh pozitivnih številke, to je štiri milijarde dati ali vzeti možnosti. Float, medtem pa je drugačen tip vrste podatkov v C. To je še vedno številka, ampak to je realno število. Nekaj ​​z decimalno vejico. In se izkaže, da C uporablja tudi štiri bajte za zastopanje s plavajočo vejico. 

Na žalost, koliko plavajoče Vrednosti točke so tam na svetu? Koliko real številke so tam? Obstaja neskončno številko, in da glede na to, obstaja neskončno število celih števil. Torej smo že nekako kopati sami luknjo tukaj. Pri čemer je očitno v computers-- na Najmanj programi napisani v C o them-- lahko računajo le tako visoko, kot štiri milijarde gor ali dol, in plavajočo vejico lahko le navidezno nekaj končno količino natančnosti. Le toliko številke po njihova decimalno vejico. 

Ker, seveda, če imate samo 32 bitov, Ne vem, kako se bomo lotili predstavlja resnično numbers-- verjetno z različnimi tipi vzorcev. Ampak tam je zagotovo končnih Število teh vzorcev, tako da tudi tu, je to problematično. 

Zdaj bomo lahko izognili težavam rahlo. Če ne boste uporabili plovec, lahko uporabite dvojni v C-ju, ki vam daje osem bajtov, ki je veliko več možne vzorce ničel in tisti. Vendar je še vedno omejen, kar se dogaja problematično, če ste napisali programsko opremo za grafiko ali domišljija matematične formule. Tako da boste morda dejansko želijo za štetje do večje od tega. Dokler long-- neumno named-- je tudi osem bajtov ali 64 bitov, in to je dvakrat daljši kot int, in to je dolgo celo vrednost. 

Fun fact-- če int je štiri bajte, kako dolgo je dolgo v C tipično? Tudi štiri bajte, ampak dolgo časa je osem bajtov, in to je iz zgodovinskih razlogov. 

Vendar takeaway zdaj je le, da ima podatke morajo biti zastopane v computer--, ki je fizična naprava z električno energijo, to je običajno vožnjo tiste ničle in ones-- z omejenimi količinami natančnosti. Torej, kaj je problem potem? 

No, tam je problem of integer overflow. Ne samo v C, vendar računalnike na splošno. Na primer, če je to je bajt vredno bit-- tako da, če je to osem bit-- vse katerih število ena. Katero število je to zastopanje, če predpostavimo to je vse pozitivne vrednote v binarno? 

255, in to ni 256, ker nič je najnižja številka. Torej 255 je najvišja ena, ampak problem se predpostavlja, da sem želel prirastek te spremenljivke, ki uporablja osem bitov skupaj če ga hočem prirastek. 

No, takoj ko dodam eden za vse te tiste, si lahko morda predstavljate visually-- samo kot nosi eno uporabo decimals-- nekaj se dogaja, da teče v levo. In res, če dodam številko ena za to, kaj se zgodi v dvojiškem je, da se prelije nazaj na nič. 

Torej, če ste le use-- ne int, ampak en sam bajt za štetje števil v programu, ki ga default-- takoj ko prideš do 250, 251, 252, 253, 254, 255-- 0 prihaja po 255, ki je verjetno kaj ne Uporabnik bo lahko pričakujete. 

Zdaj pa je medtem v plavajočo vejico svet, imate tudi podoben problem. Ne toliko z največjim number-- kljub temu, da je še vedno problem. Vendar z zneskom natančnosti da si lahko predstavljam. Torej, vzemimo si na tem primeru tu tudi iz današnje vira code-- float 0.c. 

In opazil, da je super preprost program, ki naj bi očitno natisniti kakšno vrednost? Kaj bi stavil, da bo to tiskanje čeprav je malo novega sintakse tukaj? Torej upajmo, 0.1. Torej enako kot desetino ker delam 1 deljeno z 10. Jaz shranjevanje odgovor v spremenljivko imenovano f. Da spremenljivka je tipa float, ki je ključna beseda sem predlagal obstajala. 

Smo jih nismo videli že prej, vendar to je nekako čeden način v printf določiti, koliko številk ste želijo videti po decimalno vejico. Tako da je ta zapis samo pomeni, da tukaj je ograda. Gre za plavajočo vejico vrednost, in oh, mimogrede, pokazati z decimalno vejico s ena številka za decimalno vejico. Tako, da je število pomembnih številk, tako rekoč, da si morda želeli. 

Zato naj gredo naprej in narediti bi float-0, ./float-0, in očitno 1 deljeno z 10 je 0,0. Zdaj, zakaj je to? 

No spet je računalnik pokazal me dobesedno, in sem napisal 1 in sem napisal 10, in si ugibati, kaj je prevzela vrsto podatkov za ti dve vrednosti? Int, to je tehnično nekaj malo drugačen. To je običajno dolg, vendar je končno sestavni vrednost. Ne vrednosti točke lebdenja. 

Kar pomeni, da če je to je int, in to je int Problem je, da v računalnik nima sposobnosti celo shranite to decimalno vejico. Torej, ko boš 1 razdeljen s 10 uporabljajo celih tako v števcu in imenovalec, bi moral biti odgovor 0.1. Ampak zato, ker computer-- tistih, ki so integers-- ne vedo, kaj storiti z 0,1. 

Torej, kaj je jasno kaj? To je samo metanje stran, in kaj sem nazadnje videl je 0,0 samo zato, ker sem vztrajala, da printf pokaži mi eno decimalno vejico. Ampak problem je, da če vas razdeliti celo za celo, boste get-- po definiciji od C- celo število. In to ne boš naredil nekaj lepo in udobno kot krog je do najbližja ena gor ali dol. To se dogaja, da izrežete Vse po decimalko. 

Torej, samo intuitivno, kar je verjetno fix? Kaj je najenostavnejši fix tukaj? Ja? Točno tako. Zakaj ne bi raje obravnavajo te kot učinkovito plavajočo vejico njiju v plovci ali dvojic. In zdaj, če to storim, da plava-0, ali če prevedem plovce-1, ki je enaka kaj se je pravkar predlagala. In sedaj delam boje-0, zdaj dobim 0.1. 

Zdaj je to neverjetno. Ampak zdaj bom naredil nekaj malo drugačen. Radovedna sem, da vidim, kaj je res dogaja pod pokrovom, in bom natisni ven na 28 decimalk. Želim, da bo res videti 0.1000-- infinite-- [Neslišno] 27 ničlami ​​po tem 0,1. 

No, da vidimo, če je to kaj sem res dobil. Da plava-0 iste datoteke. ./floats-0. Pojdimo povečate o dramatičnem odgovor. Ves ta čas, ko ste bili razmišljanje 1 deljeno z 10, je 10% ali 0,1. Saj ni. Vsaj kolikor Računalnik je zaskrbljena. 

Zdaj why-- OK, to je popolna laž 1 deljeno z 10 je 0,1. Toda why-- da ni takeaway danes. Torej, zakaj ne računalnik misli, za razliko od vseh nas v sobi, da je 1 deljeno z 10, je pravzaprav, da je nor vrednost? Kaj je računalnik počne očitno? Kaj je to? 

To ni razlivala po sebi. Overflow je običajno pri si ovijte okoli vrednost. Je to vprašanje nenatančen v plavajočo vejico vrednost kjer imate samo 32 ali morda celo 64 bit. Ampak, če obstaja neskončno število real numbers-- števila s pikami in številke thereafter-- zagotovo si ne more predstavljati vse od njih. Torej je računalnik dal nam najbližja tekmo vrednosti lahko predstavljajo uporabo, da koliko bitov v vrednosti dejansko želim, kar je 0,1. 

Na žalost, če vas začeti početje matematike, ali pa začni vključuje tovrstnih plavajočih točkovni vrednosti v pomembnem programs-- finančne programske opreme, Vojaška software-- karkoli kjer je percepcija verjetno precej pomembno. In začnete dodajanje številke, kot je ta, in start deluje s to programsko opremo z zelo velikimi vložki ali za veliko ur ali serij dni ali veliko let, Te drobne majhne napake zagotovo lahko dodate skozi čas. 

Zdaj, kot prahi, če ste kdaj videl Superman 3 ali Office Space in morda odpoklic kako ti fantje ukradli Veliko denarja iz svojega računalnika s pomočjo plavajočo vejico in sešteva malo ostanki, upajmo, da film Zdaj je bolj smiselno. To je tisto, kar so bili namiguje, da v tem filmu. Dejstvo, da je večina podjetja ne bi bilo videti Po določenem številu decimalnih mest, ampak to so frakcije centov. Tako da jih začneš sešteva, začnete, da bi veliko denarja na vaš bančni račun. Torej, to je Office Space je pojasnil. 

Zdaj žal presegajo Office Space, je so nekateri upravičeno zaskrbljujoče in pomembne vplive teh vrst Temeljne odločitve projektiranja, in dejansko eden od razlogov smo uporabili C v teku je tako, da imate res ta razlog do razumevanja, kako računalniki delujejo, kako programska oprema deluje, in ne bo ničesar za samoumevno. 

In res žal, tudi z to temeljno razumevanje, smo ljudje delajo napake. In tisto, kar sem mislil, da sem deliti je to osem minutni video sem sprejeti iz Sodobni čudeži epizodo, ki je izobraževalna oddaja o tem, kako stvari delujejo da naslika dve sliki kdaj nepravilna uporaba in razumevanje plavajočo vejico privedlo do nekaterih pomembna nesrečne rezultati. Oglejmo pogled. [VIDEO PREDVAJANJE] -smo Zdaj nazaj na "Engineering Katastrofe "na moderne čudeže. Računalniki. Vsi smo prišli, da sprejme pogosto frustrirajuće težave, ki dobil z them-- hroščev, virusov in Programska oprema glitches-- za male cene plačati za udobje. Toda v visoke tehnologije in visoke hitrosti vojaški in vesoljski program aplikacije, najmanjši problem lahko se poveča v katastrofo. 

4. junija 1996, pripravili znanstveniki začeti brez posadke Ariane 5 raketo. To izvajanje znanstveno bila sateliti zasnovan natančno, kako vzpostaviti Združljiva magnetno polje Zemlje s solarnimi vetrovi. Raketa je bila zgrajena za Evropska vesoljska agencija, in dvignjen od njegovega objekta na obali Francoske Gvajane. 

-Ob Približno 37 sekund v let, so najprej opazil, kaj je šlo narobe. Da šobe so vrtljiva na način, da res ne bi smeli. Približno 40 sekund, v letalu, jasno je bilo vozilo v težavah, in da je, ko so naredili Odločitev, da jo uniči. Uradnik za varnost območje, s ogromno poguma, pritisnete gumb in razneslo raketo, preden se lahko postala nevarnost za javno varnost. 

Tole je bil dekliški Potovanje Ariane 5, in njeno uničenje je postaviti, ker je napaka vgrajeni v programsko opremo rakete. -V Problem na Ariane je bila, da je število, ki je potrebna 64 bitov za izražanje, in bi želeli spremeniti je za 16-bitno številko. Domnevali so, da je število ni bil nikoli bo zelo velika. Da je večina teh številk v 64-bitna številka bili ničle. Da je bilo narobe. 

-V Nesposobnost ene programska oprema za sprejem vrsta števila ustvari druga pa je bila vzrok za neuspeh. Razvoj programske opreme je postala zelo drago del nove tehnologije. Ariane 4 raketa je imela bil zelo uspešen. Toliko programske opreme ustvaril za je bila uporabljena tudi v Ariane 5. 

-V Osnovni problem je bil, da Ariane 5. Je faster-- pospešila hitreje in Programska oprema ni predstavljal, da je. 

-V Uničenje rakete je bil velik finančni polom. Vse zaradi napake na minuto programske opreme. Vendar to ni bil prvi Težave pretvorbe podatkov čas je pesti sodobno raketno tehnologijo. 

-v 1991 z začetkom od prve zalivske vojne, Patriot projektil doživel kaj podobnega problema pretvorbe številko. In kot rezultat 28 ljudi-- 28 Ameriški soldiers-- je bilo ubitih, in približno sto drugih ranjenih. Ko Patriot, ki naj za zaščito pred dohodne rakete Scud, ni na ogenj izstrelkov. 

Kdaj Irak napadel Kuvajt in Ameriko začela Desert Storm v začetku leta 1991, Patriot raketne baterije so bile razporejene zaščititi Saudova Arabija in Izrael iraških raketnimi napadi Oblaki. Patriot je srednje območje ZDA zemlja-zrak sistema ki jih je podjetje Raytheon izdelan. 

-V Velikost Patriot interceptor itself-- to je približno približno 20 metrov dolgo, in tehta približno 2000 kilogramov. In to nosi bojno glavo okoli, Mislim, da je okoli 150 kg. In bojna glava sama visoko eksplozivne, ki ima fragmente okoli njega. Torej ohišje bombo je zasnovan tako, da deluje kot velike šibre. 

-Kamen Rakete izvajajo štiri na posodo, in se prevažajo z polprikolici. 

-V Sistem Patriot protiraketnem sega zdaj vsaj 20 let. To je bila prvotno zasnovana kot obrambno raketo zraka sestrelili sovražnik letal. V prvi zalivski vojni ko da je vojna prišla na, vojska želela, da jo uporabljajo za sestrelili rakete Scud, ne letal. Je bila iraška Air Force ni tako velik problem, ampak vojska je skrbelo rakete Scud. In tako so skušali nadgraditi Patriot. 

-Intercepting Sovražnika projektil potuje Mach 5 je, da bo dovolj izziv. Toda, ko Patriot je planila v službi, vojska ni vedela Iraški sprememba, ki so njihove rakete Scud skoraj nemogoče. 

Kaj se je zgodilo, da so rakete Scud napadli, so bile nestabilne. Bili so wobbly. Razlog za to je bil Iraqis-- da bi dobili 600 kilometrov od od 300 kilometrov razdalje missile-- je teža iz sprednjega bojno glavo, in je bojna glava vžigalnik. Torej, zdaj Patriot poskuša priti na Oblaki, in večino enkrat bom vprašal velika večina enkrat bom vprašal bi samo letenje, ki jih Oblaki. 

-Ko Sistemskih operaterjev Patriot spoznal Patriot zgrešil svoj cilj, jim eksplodirajo Patriot je bojno glavo da bi se izognili morebitnim žrtev, če je pustimo, da pade na tla. 

To je bilo tisto, kar večina ljudi je videlo kot veliki fireballs na nebu, in napačno razumljen kot odseka na Oblaki bojnih glav. 

-Čeprav V nočnih neba, Patriots Zdi se, da se uspešno uničuje Rakete Scud na Dhahranu bi lahko bilo ne bo pomote o njeni uspešnosti. Tam radar sistem Patriot Izgubil track dohodni Oblaki in nikoli ni začela zaradi programski pomanjkljivost. 

To je bil Izraelcem, ki je prvi odkril da je več sistem na, večja čas neskladje postalo. Zaradi uro vgrajeni V računalniku sistema. 

Okrog dva tedna pred Tragedija v Dhahranu, Izraelci poročajo, da Oddelek za obrambo da je sistem izgube časa. Po približno osmih urah za delovanje, so opazili da je sistem postaja opazno manj natančna. Obrambno ministrstvo je odgovorila z povedal vse Patriot baterije ne pustite sistemov na za dolgo časa. Ti nisem rekel, kar je bilo dolgo časa. 8 ur, 10 ur, tisoč ur. Nihče ni vedel. 

-V Patriot baterije nameščene v vojašnicah na Dhahranu in njegovo neustrezno notranjo ura je bila za več kot 100 ur v noči na 25. februar. 

-To Bager časa z natančnostjo približno desetinko sekunde. Zdaj desetinka sekunde je zanimiva številka ker ne more biti izražena binarno točno, kateri to pomeni, da ne more biti izražena natančno v vsakem sodobnem digitalnem računalniku. Težko je verjeti, ampak uporabiti to kot primer. 

Vzemimo število eno tretjino. Ena tretjina ne more biti izraženo v decimalko natančno. Ena tretjina je 0,333 dogaja v neskončnost. Ni šans, da to, da z absolutna natančnost v decimalkah. To je točno vrsta problema , ki se je zgodilo v Patriot. Več sistem tekel, slabši čas napaka postala. 

-po 100 ur dela, Napaka v času je bil le približno ena tretjina sekunde. Ampak v smislu ciljnih projektil potuje Mach 5, je povzročilo sledenje Napaka več kot 600 metrov. To bi bila usodna napaka za vojake na Dhahranu. 

Kaj se je zgodilo je bil začetek Scud sateliti zgodnjega opozarjanja zazna, in so vedeli Scud prihaja v njihov splošni smeri. Niso vedeli, kje je prišel. To je zdaj do radarja komponenta sistema Patriot brani Dhahran najti in obdržati tir na dohodne sovražnik izstrelkov. 

-V Radar je bil zelo pameten. To bi dejansko slediti Stališče Oblaki in nato napovedati kadar bi bilo verjetno Naslednjič, ko radar poslala impulz ven. Da je bil imenovan gate območje. 

Potem ko Patriot odloči dovolj časa ima minilo, da se vrnete in preverite Naslednja lokacija za te zaznani predmet gre nazaj. Torej, ko se je vrnil, da narobe mesto, potem ne vidi nobenega predmeta. In sklene, da ni bilo nobenega predmeta. Da je bilo lažno zaznavanje in se spusti skladbo. 

-V Incoming Scud izginil iz radarskega zaslona, in sekund kasneje, je trčil v vojašnice. Oblaki ubitih 28. Zadnji je bil odpuščen med prvo zalivsko vojno. Tragično je, posodobljeno programsko opremo prispeli ob zori na naslednji dan. Napaka software imel bil določen, zapiranje eno poglavje v težavah Zgodovina Patriot izstrelka. 

[END VIDEO PREDVAJANJE] 

DAVID J. Malan: To je za CS50. Vas bomo videli v sredo. 

[Predvajanje glasbe]