>> [Zenelejátszás]
David J. MALAN: Rendben.
Ez CS50, és ez a a hét elején két.
Kezdjük tehát ma a hibát.
A hiba, persze, egy hiba a programban,
és kapsz nagyon ismerik ezt a fogalmat
ha soha nem programozott előtt. pset0 és most pset1.
De nézzük meg valamit egy kis egyszerű az elején.
Ez a program, hogy itt én dobta össze előre,
és azt állítják, hogy ezt ki kell nyomtatnia 10 csillag a képernyőn a printf,
de ez nyilvánvalóan hibás a valamilyen módon.
>> Tekintettel arra, hogy előírás, hogy kell nyomtatni 10 csillag,
de nem úgy tűnik, hogy mi azt állítják, ez a hiba?
Igen?
Szóval ez egy ki egy hiba, és mit értesz ez alatt?
OK.
Kiváló.
Így már meg a kezdeti érték nulla i,
és mi már meg egy n értéke 10, de már használt kisebb vagy egyenlő.
És az oka, hogy ez a két karakterek és nem csak egy szimbólum,
mint egy matematikai könyvet, az, hogy nem kell
egy módja kifejező egy karakterrel ekvivalens.
>> Ez azt jelenti, kevesebb, de ha elkezd számolás nulla,
de számít az utat egészen és legalább 10,
Ön természetesen fog száma 11 dolog összesen.
És így fogsz nyomtatni 11 csillag.
Szóval, mi lehet egy fix ehhez?
Igen?
>> Tehát csak állítsa be a kisebb vagy egyenlő, csak kevesebb, mint,
és van, azt állítom, talán egy másik megoldás is.
Mi lehet még tenni?
Igen?
>> Így kezdődik egyenlő 1-re, és hagyja el a kisebb vagy egyenlő.
És őszintén szólva azt állítják, , hogy egy tipikus emberi,
ez valószínűleg egyszerűbb.
Kezdje számolás 1 és számít fel a 10.
Lényegében, amit gondolsz.
>> De a valóság az programozás, mint láttuk,
számítógépes szakemberek és programozók általában nem indul számolás nulla.
És ez rendben van, ha Ön szokni.
Ön állapotát általában valami ilyesmi kevesebb.
Tehát csak a logikai hiba, hogy tudnánk most
fix és végül újrafordítani ezt, és már éppen 10.
>> Nos, hogy ezt a hibát itt?
Itt megint, azt állítom, hogy én a cél a nyomtatás 10 stars--
soronként egy ebben az időben, de ez nem az.
Mielőtt javaslatot, amit A javítás, mit jelent ez
nyomtatni vizuálisan ha én lefordítani és a program futtatásához gondolsz?
Igen?
>> Star.
Tehát minden a csillagok a ugyanabban a sorban az, amit hallottam,
majd az új sor karaktert.
Szóval próbáljuk ezt.
Tehát, hogy hibás-1, be, és látom a csengés parancs
hogy beszéltünk utoljára.
./buggy-1, sőt látom, mind a 10 csillag ugyanabban a sorban, bár azt állítom,
az én specifikáció csak egy megjegyzés tetején A kód, amit szándékoznak tenni egy darab
vonal.
De ez úgy néz ki, rendben.
>> Most a 15. sor úgy néz ki, mint én vagyok, nyomtat, csillag, majd a vonal 16
úgy néz ki, mintha én lennék a nyomtatás új sor karakterrel,
és ők mindketten beljebb így Bent vagyok a hurok tisztán.
Tehát nem én csinál csillag, új vonal, csillag, új vonal, csillag, új vonal?
Igen?
>> Igen, ellentétben a nyelv, mint a Python, ha ismerős,
behúzás nem számít a számítógéphez.
Csak az a fontos, hogy az ember.
Tehát, míg itt, amit kitalált sor 15. és 16-- úgy néz ki, szép,
de a számítógép nem érdekli.
A számítógép törődik hogy ténylegesen kapcsos zárójelek
körül ezeket a sorokat a kód.
>> Úgy, hogy ez az clear-- akárcsak Scratch-- hogy e két sornyi kód
kell végrehajtani.
Mint azok a sárga Scratch puzzle darabokat újra és újra és újra.
>> Tehát most, ha újra futtatni ezt képzés-- ./buggy-2-- Hm.
Van egy hiba most.
Mit tettem felejts el?
Igen, így nem összeállításhoz.
Tehát, hogy hibás-2.
Nincs ilyen fájl, mert nem tulajdonképpen össze a második verzió.
Így most érdekes be nem jelentett változó-- nem 2.
Megcsináljuk 1.
Készíts buggy-1-- ./buggy-1-- és most mindegyik ugyanabban a sorban.
>> Most van egy kivétel ez állítólagos követelés az enyém
hogy meg kell ezeket kapcsos zárójelek.
Mikor valójában OK-- ha már észre szakasz vagy textbooks--
hogy kihagyja a kapcsos zárójelek?
Igen?
>> Pontosan.
Amikor csak egy kódsor, amit
szeretné, hogy vonják be a hurok, mint az első példa.
Ez teljesen jogos hogy kihagyja a kapcsos zárójelek
mint egyfajta kényelem a fordító az Ön számára.
Igen?
Jó kérdés.
Lenne tekinthető stílus hiba?
Szeretnénk promote-- mint CS50 stílus útmutató, az URL-t, amely
van pset1-- hogy mindig használja a kapcsos zárójelek.
Bizonyára, ha új a programozás.
A valóság az, hogy nem vagyunk fogja megtiltani, hogy
csinálja ezeket komforttal.
De ha csak most a hinta a dolgok,
feltétlenül csak mindig a göndör nadrágtartó, amíg nem kap a nyitjára.
Jó kérdés.
>> Rendben.
Annak érdekében, hogy akkor volt a hiba.
Legalábbis valami nagyon egyszerű.
És mégis azt gondolhatja ezt meglehetősen kezdetleges, nem igaz?
Ez a fajta az első héten nézi a nyelv
mint látni a hibákat benne.
De a valóság ezek valójában képviselő
Néhány szép ijesztő problémák amelyek felmerülhetnek a valós világban.
>> Néhányan talán felidézni ha követed tech hírek,
vagy talán még fogott szél ezt a február
Az elmúlt évben, hogy az Apple már készült egy kis hiba mindkét iOS,
Az operációs rendszer a telefonját, és azt is
Mac OS, az operációs rendszer a saját asztali és hordozható.
És akkor látta, mint címoldalára, mint ez.
Majd ezt követően, az Apple megígérte, hogy javítja a hibát,
és nagyon gyorsan tette megjavítani iOS, de aztán végül fix, hogy a Mac OS
is.
>> Most ezek közül egyik sem főcím csak igazán kiderüljön, mi a mögöttes probléma,
de a hiba végül csökkent egy hiba SSL, a Secure Sockets Layer.
És hosszú történet rövid, ez a szoftver
hogy a böngészők és egyéb használt szoftver hogy mit csináljon?
>> Ha azt mondanám, hogy az SSL szó, amikor
meglátogat egy URL-t, amely kezdődik HTTPS, akkor mi lehet SSL köthető?
Titkosítást.
Így fogunk beszélni, ez az elkövetkező napokban.
Titkosítás, a művészet kódolási információ.
>> De hosszú történet rövid, az Apple valamikor ezelőtt, hogy hibázott
azok végrehajtása SSL, a szoftver, amely végül megvalósítja
URL-ek, mint a HTTPS vagy max kapcsolatok ott is.
Melynek eredménye az, hogy a kapcsolatok potenciálisan
hozzáférhetnek.
És a kapcsolatok is nem feltétlenül titkosított
ha volt valami rossz srác között Ön és a cél weboldal, aki
tudta, hogyan kell kihasználni ezt.
>> Most az Apple végül írt A javítás erre végül
és a leírást ezek fix volt ez.
Biztonságos közlekedés nem érvényesítették a hitelességét a kapcsolatot.
A probléma megoldásaként helyreállítása hiányzó érvényesítés lépéseket.
>> Tehát ez egy nagyon kézzel hullámos magyarázata az csak annyit mondok, hogy elcseszte.
Szó szerint egy kódsor volt hibás
azok végrehajtásában SSL, és ha megy online, és keresse meg a jelen
akkor valóban talál az eredeti forráskód.
Például, ez a képernyő lövés csak egy része meglehetősen nagy fájlt,
de ez nyilvánvalóan egy olyan funkció az úgynevezett SSL ellenőrizze jel server kulcs csere.
És tart egy csomó érvek és bemenetek.
És nem fogunk koncentrálni túl sok a minutia ott,
de ha elsősorban a kódrészletet Az, hogy a legfelső function-- nézzük
ráközelít az.
Lehet, hogy már gyanakszik mi a hiba miatt
lehet akkor is, ha fogalma sincs, végül mit nézel.
Van egyfajta anomália itt, amely a mi?
>> Ja, én nem igazán szeretem a megjelenés két goto nem.
Őszintén szólva, én nem igazán tudom, mi goto eszközökkel nem rendelkezik, de két közülük
háttal.
Hogy csak ilyen súrolja nekem szellemileg a rossz irányba,
sőt ha nagyítani csak azokat a sorokat, ez a C.
>> Szóval egy csomó Apple kód maga is C-ben írt,
és ez nyilvánvalóan nagyon equivalent--
nem, hogy a szép behúzás változat, de ha ismeri a tény
hogy nincs kapcsos zárójelek, milyen Apple tényleg írtam, kód, hogy néz ki
mint ez.
Szóval lekicsinyíti, és én csak rögzítette a behúzás abban az értelemben,
hogy ha nincs kapcsos zárójelek, hogy második goto nem ez a sárga
fog végrehajtani nem számít, mit.
Ez nem jár az, ha feltétel felette.
>> Tehát még egyszer, ha nem teljesen értem, mi ez esetleg
keresne, tudja, hogy minden ilyen állapotra mindegyik sor
egy nagyon fontos lépés a folyamat ellenőrzése
ha az adatok valójában titkosított.
Így kihagyva egy ilyen lépések, nem a legjobb ötlet.
>> Hanem azért, mert van ez a második goto nem sárga,
és mert ha egyszer egyfajta esztétikai
mozgassa balra, ahol logikusan van a pillanat, amit
jelent ez a sor Az alábbi kód a második goto
nem gondolod?
Mindig lesz kimarad.
Tehát GOTOS általában elítélik okokból nem fogunk igazán megy bele,
és valóban CS50 hajlamosak vagyunk nem tanítani ezt a kijelentést goto,
de tudsz gondolni goto nem bekezdését go ugrás
egy másik része a kód.
>> Más szavakkal átugrani Ez az utolsó sor teljesen,
és így az eredmény ennek a hülye egyszerű hiba, hogy csak
eredményeként valószínűleg valaki másolás és beillesztés egy túl
sokszor az volt, hogy az egész biztonsága iOS és Mac OS
volt téve a lehallgatást a rossz fiúk jó ideje.
Míg az Apple végül fix ezt.
>> Most, ha néhány, amelyek ténylegesen futó régi verziói iOS vagy Mac OS,
mehetsz gotofail.com amely egy weboldal, hogy valaki létrehozott
lényegében meghatározza programból
Ha a számítógép még mindig sebezhető.
És őszintén szólva, ha az, ez talán egy jó ötlet
frissíteni a telefont, vagy Mac ezen a ponton.
De, csak bizonyíték arra, hogy mennyire ismeri ezeket az alacsonyabb szintű
részletek és meglehetősen egyszerű ötletek valóban
lefordítani döntések és problémák
affected-- ebben case-- emberek milliói.
>> Most egy szót adminisztráció.
Szakasza indul a jövő vasárnap.
Kap egy e-mailt a hétvégén mintegy szakasz, amely ponton
a resectioning folyamat akkor kezdődik, ha már
rájött, most már néhány új konfliktusokat.
Tehát ez történik minden évben, és mi befogadására a napokban.
>> Office hours-- do tartsa szemmel ezt az ütemtervet itt.
Változik egy kicsit ezen a héten, különösen a kezdés időpontját
és a helyet, úgyhogy ne forduljon hogy mielőtt a hivatali órák
bármely következő négy éjszakát.
És most egy szót értékelés különösen, ahogy belevetik magukat probléma
állítja egy és azon túl.
>> Tehát egy a specifikáció, ezek általában
a tengely, amely mentén értékeljük a munkát.
Hatálya vonatkozik, amit mértékben a kódot eszközök
szükséges funkciók által specifikáció.
Más szóval, hogy mennyi egy darab set ugye harap ki.
Csináltál egy harmadik is, egy felét, 100% belőle.
Még ha ez nem megfelelő, mennyit megpróbálja?
Ahhoz, hogy rögzíti a szint Az erőfeszítés és az összeg
, amelyre leharapta a probléma meg problémáit.
>> Correctness-- ezt, hogy milyen mértékben, ez a kód
összhangban van a műszaki és mentes a hibákat.
Így működik helyesen?
Ha adunk neki egy kis bemenet, ugye nekünk a kimenetet várunk?
Design-- most ez az első a különösen kvalitatív,
vagy az is, hogy igényel emberi ítélet.
És valóban, ez az oka annak, hogy van egy személyzet a sok tanítás társaival és természetesen
asszisztensek.
Milyen mértékben a írt kód is?
>> És ismét, ez egy nagyon minőségi értékelés
hogy működni fog veled kétirányú az elkövetkező hetekben.
Tehát, hogy ha kap nem csak numerikus eredmények, hanem a
írásbeli eredmények, vagy gépelt visszacsatolás, vagy írásbeli visszajelzést angol szavakat.
Ez az, amit majd használni, hogy elvinni felé valójában írni jobb kódot.
És előadás és részben megpróbáljuk pont out--, amilyen gyakran csak can--
mitől lesz egy program nem csak helyes és funkcionálisan jó,
hanem a jól megtervezett.
A leghatékonyabb is lehet, vagy még a legszebb lehet.
>> Amely elvezet minket a stílus.
Stílus végső soron esztétikai ítélet.
Döntöttetek úgy jó neveket a változók?
Már beljebb a kódot helyesen?
Úgy néz ki, és ezért a ez egyszerűen egy másik emberi lény
hogy olvassa el a saját annak helyességét.
>> Ma már általában egy a tananyag, akkor gólt ezeket a dolgokat egy öt fokozatú skálán.
És hadd kalapács haza a pontot hogy a három valóban jó.
Nagyon gyorsan csinálni emberek kezdeni ezzel számtani.
Amikor kap egy három közül öt a korrektség néhány Pset
és azt hiszik, a francba, majd 60% amely lényegében egy D-vel vagy egy E.
>> Ez nem így van Szerintem ezeket a számokat.
A három valóban jó, és mi általában elvárják az elején
A kifejezés az, hogy ha kapok egy csomó three's-- talán egy pár
A vásárok, egy pár fours-- vagy egy pár kettest, egy pár fours--
ez egy jó kiindulópont.
És amíg látunk emelkedő röppálya idővel,
te egy különösen jó hely.
>> A képlet az általunk használt súly dolgok alapvetően
ez a per a tanmenet, ami éppen azt jelenti, hogy
nagyobb súlyt a korrektség.
Mert nagyon gyakran korrektség hogy azon a legtöbb időt.
Higgy nekem most.
Lesz find-- legalább egy pset-- hogy
töltik a 90% idejét 10% dolgozik a probléma.
>> És minden fajta munkák kivéve egy-két hiba,
és ezek a hibát, hogy mindig késő este.
Ezek az is, hogy egyfajta menekülés te.
De miután alszik el, vagy részvétel munkaidőben
vagy kérdéseket az interneten, a ha kap, hogy a 100% cél,
és ezért mi súly korrektség a legtöbb.
Tervezz egy kicsit kevesebb, és stílus egy kicsit kevesebb.
De ne mind-- stílusban talán a legegyszerűbb
Ezen harapni le mint egy a stílus vezető.
>> És most, a komolyabb vegye figyelembe akadémiai őszinteség.
CS50 az a szerencsétlen megkülönböztetés hogy a legnagyobb gyártó a Hírdetőtábla
esetek szinte minden évben történelmileg.
Nem azért, mert a diákok csalni CS50 többet, mint bármely más osztály,
hanem azért, mert a természet, a munka, az a tény, hogy ez az elektronikus,
Az a tény, hogy keresse meg, és az a tény, mi számítógépes szakemberek,
Én azt mondom, sajnos nagyon jó, hogy észlelje azt.
>> Szóval, mit jelent ez a gyakorlatban?
Szóval, egy a tanterv, A tanfolyam filozófiája
valóban szűkülnek le ésszerűnek.
Van ez a vonal között Ennek egyik munka a saját
és kapok egy kis ésszerű segítséget egy barát,
és nyíltan csinálja, hogy a munka a barát, vagy küld neki a kódot
hogy ő is csak venni vagy kölcsönözni ki jobbra.
És hogy keresztezi a vonalat hogy mi húzott az osztályban.
>> Lásd, a tanterv végső soron a vonalak
hogy felhívjuk, hogy ésszerű és ésszerűtlen viselkedés,
de valóban forraljuk le, hogy a lényeg
a munka kelljen hogy a saját a végén.
Most, hogy azt mondta, van egy heurisztikus.
Mert lehet, hogy imagine-- a munkaidőn és a látvány
és a videókat mi már jelölése far-- CS50
valóban azt jelentette, hogy az együttműködő és szövetkezeti és társadalmi
amennyire csak lehetséges.
Az együttműködésen alapuló, mert szigorú.
>> De ez azt mondta, a heurisztikus, ahogy látni fogod a tananyag,
az, hogy amikor némi probléma.
Van néhány hiba a kódban, hogy nem tudja megoldani, akkor ésszerű az Ön számára
megmutatni a kódot, hogy valaki mást.
Egy barátom is az osztályban, a barát ül melletted a munkaidő,
vagy a személyzet tagja.
De lehet, hogy nem mutatja a kódot az Ön számára.
>> Más szóval, egy válaszolni a question--
Szükségem help-- nem ó, itt a kód.
Vessen egy pillantást erre és levezetni, amit akarsz.
Most, persze, ott van olyan módon, egyértelműen a játék
Ez a rendszer, amelyben megmutatom a kód, mielőtt a kérdés.
Megmutatod nekem a kódot mielőtt egy kérdést.
De látni a tanterv ismét a finomabb részleteket, ha ez a sor.
>> Csak azért, hogy most festeni a képet, és megosztani az átlátható lehető
hol vagyunk az elmúlt években, ez az a szám, Hírdetőtábla ügyek
hogy CS50 már több mint az elmúlt hét évben.
14 esetben ez a legutóbbi ősszel.
Ami a részt vevő tanulók, volt 20 valami furcsa diák
ez a múlt ősszel.
Volt a legmagasabb, 33 a diákok néhány éve.
Akik közül sokan sajnos nincs itt az egyetemen.
>> Hallgatók számára százalékában a osztály történelmileg mozgott 0%
5,3%, ami csak azt Ez évente egy kihívás.
Felé, hogy a végén, hogy mi azt akarjuk, hogy a közvetíteni egy
hogy mi dd-- csak FYI-- összehasonlítani a a méltányosság azok a diákok, akik
vannak vonalát követve kell.
Tesszük hasonlítsa össze az összes jelenlegi beadványok ellen múlt misszió
Az elmúlt évek.
>> Azt is tudjuk, hogy a Google körül és megtalálni kódtáraihoz
online vitafórumok online munka oldalak az interneten.
Ha egy diák megtalálja, mi biztosan találják, mint mi sajnálkozva csinálni.
Szóval, mit fogsz látni a tananyag bár ez a sajnálkozás záradék.
Én minden bizonnyal értékelik, és mi minden van
személyzet miután végzett a pályán, mint ez, vagy ez maga az idő múlásával,
biztosan tudjuk, milyen az, amikor élet útban, ha van
néhány késő este deadline-- nem csak ebben az osztályban,
de másik-- amikor teljesen kimerült, stresszes,
van egy oda nem illő számot más dolgom van.
Lesz, hogy egy bizonyos ponton élet biztosan rossz, talán késő
éjszaka döntés.
>> Tehát egy a tanterv, van ez a záradék,
oly módon, hogy 72 órán belül, ha készítés néhány rossz döntés, akkor látja be
és el kell jutnia hozzám és az egyik természetesen feje
és mi lesz a beszélgetés.
Mi lesz kezelni a dolgokat belül abban a reményben,
belőle egyre inkább egy tanítás pillanat vagy élet leckét,
és nem valami különösen drasztikus következményei
ahogy lehet látni a következő táblázatok itt.
>> Szóval ez egy nagyon komoly hangon.
Álljunk csak egy pár másodperc megtörni a feszültséget.
>> [Zenelejátszás]
>> David J. MALAN: Rendben, Szóval, hogy volt, hogy egy Segue?
A mai fő téma.
Az első, ami absztrakció.
Egy másik, amely lesz a képviselete az adatokat, amelyek nyíltan
egy nagyon száraz szóval hogyan megy a problémamegoldás és gondolkodás
a problémák megoldása?
Szóval láttam a Scratch, és akkor már látott talán már pset1 C
hogy nem csak használni funkciók, mint a printf,
hogy más emberek elmúlt években írt az Ön számára.
Azt is írja meg önálló működését.
>> És bár lehet, hogy nem tette ezt a C, és őszintén szólva a pset1
nem igazán kell írni a saját funkció, mert a problem--
míg talán ijesztő a első glance-- meglátod
végül is megoldható nem olyan sok sornyi kódot.
De azt mondta, tekintve Az írásban a saját funkciója,
észre, hogy C nem ad Ön ezt a képességet.
>> Én megyek a mai forráskód, mely elérhető már az interneten,
és én megyek előre, és nyitott egy programot hívott függvény 0.C,
és a függvény nulla majd meglátjuk pár dolgot.
Első sor 18 keresztül 23 az én fő funkciója.
És most, hogy kezdjük olvasni kód, hogy nem írsz on the fly,
hanem írtam előre vagy azt, hogy a probléma beállított
kaphat, amelyek írva előre.
Egy jó módja annak, hogy olvassa valaki másnak a kódját
az keresse meg a fő funkciója.
Kitalálni, ahol ezt a bejegyzést pont az, hogy fut a program,
és kövesse azt logikusan onnan.
>> Így ez a program nyilvánvalóan nyomatok Az Ön neve kettőspont követ.
Mi majd getString A CS50 könyvtár
hogy egy húr, vagy egy szót vagy kifejezést a felhasználó a billentyűzetet.
És akkor itt van ez a dolog itt-- PrintName.
>> Most nem egy PrintName funkció, hogy jön a C.
Ez nem a szokásos io.h.
Ez nem a CS50.h.
Ez inkább az ugyanabban a fájlban.
Figyeld meg, ha görgetni lefelé a bit-- vonalak 25 27--
ez csak egy szép módon kommentálja A kód segítségével a csillagok és a vágás.
Ez egy többsoros megjegyzést, és ez csak
a leírás kék mi ez a függvény.
>> Mivel a sorok 28 és 31, Írtam egy szuper egyszerű függvény
akinek a neve PrintName.
Tart hány érvek mit mondana?
Tehát az egyik argument-- mert van egy érv szerepel a zárójelben.
A típusa, amely a String.
Ami azt PrintName olyan, mint ez a fekete doboz
vagy funkciója, amely során mint egy szöveggel.
>> És a nevét, hogy a karakterlánc kényelmes lesz neve.
Nem S, nem N, hanem nevét.
Szóval mit PrintName csinálni?
Nagyon szép egyszerű.
Ugyanúgy, ahogy egy sor kód a printf, de úgy tűnik,
kiírja, hogy "Helló", így és így.
Amennyiben az így és így származik az érvelés.
>> Most ez nem egy nagy innováció itt.
Tényleg, vettem egy programot, amely írtak már egy sor kódot
azzal, hogy ez itt, és megváltoztatta a valami
amely magában foglalja a mintegy hat vagy hét, vagy úgy sornyi kódot egészen itt.
>> De ez a gyakorlás a elv néven absztrakció.
Egyfajta külvilágtól belsejében egy új funkció, amely a nevét, és a jobb
mégis ez a név a szó szoros értelmében azt mondja, hogy mit csinál.
Úgy értem printf-- ez nem különösen leíró.
Ha azt akarom, hogy hozzon létre egy puzzle-darab, vagy ha
szeretnénk létrehozni egy funkciót hogy kiírja valakinek a nevét,
a szépség ezt az, hogy tudok valójában
adni, hogy a funkció a név hogy leírja, mit csinál.
>> Most vesz kimeneten Már önkényesen hívott nevét,
de ez is csodálatosan leíró ahelyett, hogy egy kicsit
általános, mint az S. és érvénytelen, mert most, csak azt jelenti,
hogy ez a funkció nem adja vissza semmit.
Ez nem olyan, mint getString hogy szó szerint a kezembe vissza a húr
mint mi a darab papír az osztálytársaival a múlt héten,
hanem ez csak egy mellékhatás.
Nyomtat valamit a képernyőn.
>> Így a végén a nap, ha nem teszik funkció-0, ./function-0,
majd meglátjuk, hogy kéri a nevem.
I típusú David, és típusai a nevemet.
Ha megteszem ismét Rob, azt fogja mondani: "Helló, Rob."
Így egy egyszerű ötlet, de talán következtetéseket levonni ezt mentálisan
hogy mivel a programokat, hogy egy kicsit bonyolultabb,
és azt szeretné, hogy írjon egy darab kód és hívást, hogy code-- Invoke
hogy code-- néhány leíró nevet, mint PrintName,
C nem engedheti meg magának, nekünk ezt a lehetőséget.
>> Itt van egy másik egyszerű példa.
Például, ha nyit egy fájl a mai úgynevezett return.c,
észre, mit csináltam itt.
A legtöbb ilyen fő feladata a printf.
Először önkényesen inicializálni nevű változó x a 2-es szám.
Ezután nyomtassa ki "x ma % I "halad az x értékét.
Szóval csak azt mondom, hogy mi az.
>> Most csak bátran azt állítva, a printf.
Én Cubing hogy x értéke, és én vagyok Ezzel hívja a funkció
úgynevezett kocka múló az x az érv,
majd mentés a kimenet a változó magában, x.
Szóval felülírja az x értékét.
Én felülírja a értéke x, bármilyen
az eredmény a hívó ez kocka funkció.
Aztán csak nyomtassa ki néhány bolyhos cucc itt azt mondja, amit én tettem.
>> Tehát akkor mi kocka?
Figyeljük meg, mi alapvetően más itt.
Megadtam a funkció nevet, mint korábban.
Én meg egy nevet egy érv.
Ezúttal ez az úgynevezett n helyett név, de nem tudtam nevezni, amit csak akarok.
De ez más.
Ez a dolog a bal oldalon.
Korábban úgy volt, hogy mi kulcsszó?
Fiúk.
Most nyilvánvalóan int.
>> Akkor mi talán az, hogy el?
Mivel void jelenti: valami semmi, és ez volt a helyzet.
PrintName vissza semmit.
Ez nem valami, hanem nem adja vissza
valamit, hogy én is fel a bal oldalán egy egyenlőségjel
mint én csináltam itt a 22. sorban.
>> Tehát, ha azt mondom, a on-line 30 mi ez valószínűleg arra utal
mit kocka csinál nekem?
Igen?
Ad vissza egy egész szám.
Szóval a kezembe vissza, a Például, egy darab papírra
az általa írt a választ.
2 kockára vágott, vagy 3 kockára vágott, vagy 4 cubed-- bármit is telt el,
és hogyan én végre ez?
Nos, csak n-szer n-szer n Én így lehet CUBE értéket.
Tehát ismét, szuper egyszerű ötlet, de demonstratív
most, hogy tudjuk írni funkciókat hogy valóban volt minket
értékek, amelyek érdekesek lehetnek.
>> Nézzünk egy utolsó példa itt hívott függvény egy.
Ebben a példában, akkor elindítja hogy vonzóbb.
Tehát funkció egy, ez képzés-- közlemény végül
meghív egy függvényt hívott GetPositiveInt.
Nem egy GetPositiveInt funkciót a CS50 könyvtár,
de úgy döntöttünk, azt szeretném, hogy létezik.
>> Ha tehát lépjünk le később a fájlban, észre, hogy elmentem a végrehajtó
kap pozitív int, és én azt mondják, hogy vonzóbb
mert ez egy tisztességes több sornyi kódot.
Ez nem csak egy buta kis játék programot.
Igazából van egy kis hiba ellenőrzés és csinál valami hasznos.
>> Tehát, ha már nem látta a végigjátszást videók már ágyazott pset1,
tudják, hogy ez egy olyan típusú hurok C, hasonló szellemben
a dolgokat Scratch tehetünk.
És mit mond erre.
Nyomtassa ki ezt.
Akkor megy előre, és kap n-- kap egy int és tárolja n,
és tartsa ezt újra és újra, és mindaddig, amíg ismét n értéke kisebb, mint egy.
>> Tehát n lesz, kevesebb, mint egy csak akkor, ha az ember nem együttműködő.
Ha ő gépelés 0 vagy 1 vagy -50,
Ez a hurok fog tartani végrehajtó újra és újra.
És végül észre, én egyszerűen vissza az értéket.
Tehát most van egy funkció hogy lett volna jó
ha CS50 végrehajtja a CS50.h és CS50.c az Ön számára,
de itt most már végrehajtja ezt magunk.
>> De két megjegyzést néhány kulcsfontosságú részleteket.
Az egyet miért Kijelentem int n, mit gondolsz, on line 29
ahelyett, hogy csak azt teszi, ezt itt, ami
nagyobb összhangban mit tettünk a múlt héten?
Igen?
Egy jó gondolat.
Tehát, ha mi voltunk, hogy tegye itt, olyan, mintha mi
tartsa kijelenti, hogy újra és újra.
Hogy önmagában is nem problémás, önmagában,
mert csak akkor kell az érték egyszer, majd
fogunk, hogy egy újat egyébként.
De egy jó gondolat.
Igen?
>> Közel.
, Mert én már kijelentette n on 29 vonal kívül a hurok,
ez elérhető az egész A teljes funkció.
Nem a többi funkció, mert n még benne ilyen göndör
nadrágtartó itt.
Úgyhogy-- biztos.
>> Pontosan.
Tehát ez még inkább arra a pontra.
Ha ehelyett kijelentette, n itt a sorban 32,
ez problémás, mert találgatás ahol mást kell hozzáférni?
A 34. sorban, és a egyszerű ökölszabály
hogy csak akkor tudjuk használni a változó belül a legutóbbi kapcsos zárójelek
, amelyben kijelentette azt.
>> Sajnos, vonal 34 egy sor túl későn,
mert én már zárva A kapcsos zárójel on line 33
amely megfelel az zárójel on line 30.
És így ez egy szóval hogy ez a változó int a távcsöves,
hogy úgy mondjam, csak belül ilyen kapcsos zárójelek.
Egyszerűen nem létezik kívül őket.
>> Tehát valóban, ha ezt rossz, hadd mentse a kód
mivel Ez- helytelenül írt.
Hadd menjek előre, és nem teszik funkció-1, és notice-- hiba.
A be nem jelentett azonosító n on line 35, ami itt van.
És ha felfelé további, egy másik.
A be nem jelentett azonosító n on line 34.
>> Tehát a fordító, csenget, van látva, hogy ez csak
nem létezik, bár egyértelműen ott van vizuálisan.
Így egy egyszerű fix kijelenti ott.
>> Most hadd léptessen a a tetején a fájl.
Mi ugrik ki rád, hogy egy kicsit más
A cucc néztük a múlt héten?
Nem csak én nevet, nem csak Van néhány éles is akár felső,
Van valami vagyok hív egy prototípus.
Most, hogy úgy néz ki, szörnyen hasonló ahhoz, amit Most láttam egy perce on line 27.
>> Szóval következtetni egy másik hibaüzenet miért tettem ezt.
Hadd menjek előre, és törölni ezeket a sorokat is.
És így nem tudunk semmit prototípus.
Remake ezt a fájlt.
, Hogy a funkció egy.
És most, a fenébe, négy hibákat.
Nézzük felfelé, hogy az első.
>> Implicit nyilatkozat funkció kap pozitív int érvénytelen C99.
C99 csak azt jelenti, a 1999 változata a nyelv
C, amely a mi mi valóban használ.
Szóval, mit jelent ez?
Nos C-- C és konkrétabban compilers-- elég hülye programokat.
Ők csak azt tudják, mit mondta nekik, és ez
valójában tematikus a múlt héten.
>> A probléma az, hogy ha elmegyek a végrehajtási név itt,
és arra kérem a nevezett funkció GetPositiveInt itt on line 20
ez a funkció technikailag nem létezik mindaddig, amíg a fordító látja sor 27.
Sajnos, a fordító dolgok top, le, balra, jobbra,
így, mert még nem látta a végrehajtása GetPositiveInt,
de úgy tûnik, hogy megpróbálja használja fel itt,
ez csak fog bail-- kiabálni Ön egy hiba message-- talán
rejtélyes, és valójában nem össze a fájlt.
>> Tehát egy úgynevezett prototípus up Itt kétségkívül felesleges.
Szó szerint, mentem le ide, és másoltam és beillesztett ezt, és tettem fel ide.
Void lenne helyes, így fogunk szó szerint másolja be ezúttal.
Szó szerint a vágólapra másolni azt.
Tényleg csak úgy, mint a kenyér morzsát.
>> Egy kis nyom a fordító.
Nem tudom, hogy ez mire jó még, de én megígérte, hogy Ön
hogy létezni fog végül.
És ez az, amiért ez line-- a vonal 16-- pontosvesszővel végződjön.
Ez feleslegessé design.
Igen?
>> Ha nem hivatkozik a könyvtár a a-- ó, jó kérdés.
Sharp tartalmaz header file felvételen.
Kell be-- kellene szinte mindig az egyik legfontosabb
A fájl a similar-- számára pontosan ugyanezen okból, igen.
Mert szabvány io.h szó egy vonal
, mint ez, de a szó printf, és A érveit és visszatérési típus.
És ezzel éles közé fel itt, amit te csinálsz a szó szoros értelmében
A másolás és beillesztés a tartalom valaki más írta fel tetején.
Ezáltal cluing a kódot, hogy az tény, hogy ezek a funkciók léteznek.
Igen?
>> Abszolút.
Tehát egy nagyon okos és helyes megoldás az lenne, tudod mit?
Én nem tudom, mi a prototípus, de én tudom,
ha jól értem, hogy a C csak néma és újragondolja fentről lefelé.
Nos nézzük, hogy ez mit akar.
Vágjuk a kódot, illessze fel tetején, és most nyomja legfontosabb lent.
Ez is megoldaná a problémát.
>> De akkor nagyon könnyen elér olyan esetben, amikor kell hívni B,
és talán B hív vissza A. Ez a az úgynevezett rekurzív,
és mi jön vissza, hogy a.
És ez lehet, hogy nem lehet egy jó dolog, de akkor feltétlenül
megtörni ezt a megoldást.
>> Sőt, szeretném állítják stilisztikailag,
különösen akkor, ha a programokat lesz ez a hosszú, és ez a hosszú,
ez csak szuper kényelmes , hogy fő a tetején
mert ez a dolog, a legtöbb programozók fog törődni.
És ez így egy kicsit tisztább, Vitathatatlan, hogy nem úgy, ahogy
Én eredetileg nem azt a prototípus még
bár úgy néz ki, egy kicsit redundáns első pillantásra.
Igen?
Elnézést, meg tudja mondani, hogy hangosabban?
>> Ha bekapcsolja a helyét a végrehajtás és a prototípus?
Szóval ez egy jó kérdés.
Ha újra ezt bejelenteni le itt, nézzük meg, mi történik.
Tehát, ha én, hogy ezt le itt, amit mond.
Ó, bocsánat.
Hangosabban?
Még hangosabban.
Oh, jó kérdés.
Vajon érvényteleníti a funkció?
Tudod, ennyi év után, én soha nem tesz egy prototípus utána.
Tehát lássuk, hogy a funkció-1 után csinálja.
>> [Motyogva]
David J. MALAN: Oh, várj.
Még mindig van, hogy mindent fel tetején.
Szóval ezt itt, ha én vagyok megértése a kérdésre helyesen.
Teszem mindent, beleértve a A prototípus fenti fő,
de én leteszem a prototípus alatt a végrehajtás.
>> Tehát, ha én, hogy egy, kapok vissza az error-- használt változó n.
Oh, ott.
Köszönöm.
Lássuk, mi, hogy eltűnjön ez.
Ez egy másik hiba, úgyhogy figyelmen kívül hagyják ezt.
Nézzük nagyon gyorsan remake ezt.
>> OK, így az adatok érv nem által használt formátum string
n-- ó, csak azért, mert Megváltoztattam ezeket itt.
Rendben, tudjuk, hogy mi a válasz megy hogy-- minden rendben, itt is van.
Ah, köszönöm a pozitív.
Rendben, akkor oldja meg a kódot after-- hagyja ki ezt a különleges bug
mivel ez was-- működik ez a válasz.
>> Tehát ez nem írja felül amit most tett.
Gyanítom, a fordító van írva, oly módon,
hogy figyelmen kívül hagyva a prototípus mert a szervezet, hogy úgy mondjam,
A funkció már valósult meg feljebb.
Szerettem volna, hogy valóban konzultálni a kézi a fordító
megérteni, ha van más közvetve, de első pillantásra
csak azzal, hogy megpróbálja és kísérletezés, úgy tűnik, hogy nincs hatása.
Jó kérdés.
>> Szóval haladjanak előre most, mozgó távol mellékhatások
olyan funkciókat is valami hasonló vizuálisan a képernyőn printf,
de nem adnak vissza értéket.
És funkciók, amelyek visszatérés értékek, mint mi, csak láttam egy pár.
Már látta ezt a fogalmat a hatály, és majd meglátjuk, ezt újra és újra.
De most, ismét, használja az ökölszabály
hogy egy változó csak akkor használható belül a legutóbb megnyitott
és zárt kapcsos zárójelek, mint mi látta, az adott példában.
>> És ahogy rámutatott, van egy ability--
Ön tudta megoldani néhány ilyen problémák azáltal, hogy a változó globális
legtetején egy fájlt.
De szinte minden esetben mi lenne rándul fel arra,
és valóban nem is megy abba a megoldás most.
Tehát most, az elvihető, hogy a változó ilyen fogalom hatálya alá.
>> De most nézzük meg egy másik száraz módon valóban keresi
néhány nagyon érdekes végrehajtás részleteit.
Hogyan jelenthet információ.
És már néztem ezt Az első héten az osztály.
Keresi a binárisok, és elgondolkodnunk tizedes.
>> De emlékszem a múlt héten, hogy C-nek különböző adattípusok és fürtök több,
de a leghasznosabb közül most lehet ezeket.
A karakter, vagy karakter, ami történik, hogy egy byte, vagy nyolc bit teljes.
És ez azt jelenti, hogy a méret Egy char csak egy byte.
A byte nyolc bit, tehát ez azt jelenti, hogy mi is jelzik, hogy hány karaktert.
Hány betű vagy szimbólumok a billentyűzet
ha van egy byte vagy nyolc bit.
Gondolj vissza a hét nulla.
Ha nyolc bit, hány teljes összeget
tud képviselt minták nullák?
Az egyet több.
Tehát, 256 teljes, ha indul számított nulla.
Tehát, ha van nyolc bits-- így ha volt a bináris izzók fel itt is,
tudtuk kapcsolni ezeket izzók és kikapcsolása bármelyikében 256 egyedi mintákat.
>> Most ez egy kicsit problémás.
Nem annyira az angol és újlatin nyelvek, de biztosan
amikor bevezetni, a Például ázsiai nyelvek, melyek
sokkal több szimbólum, mint a hasonló 26. az ábécé.
Valójában szüksége lehet egynél több bájtot.
És szerencsére elmúlt években a társadalom
elfogadott egyéb szabványok, amelyek a több mint egy byte egy feltöltéssel.
>> De most a C, az alapértelmezett csak egy byte vagy nyolc bit.
Egy egész szám, eközben négy bájt, más néven a 32 bitet.
Ami azt jelenti, hogy mi az a lehető legnagyobb szám tudunk ábrázolni egy int
látszólag?
Egy milliárd.
Szóval négymilliárd ide vagy oda.
2. A 32th hatalom, ha nem vállal a negatív számok
és csak használja minden pozitív számok, ez négymilliárd
ide vagy oda lehetőséget.
Az úszó, eközben egy más típusú Az adattípus C. Ez még mindig egy szám,
de ez egy valós szám.
Valami a tizedes pont.
És kiderül, hogy a C is használ négy bájt
képviseli lebegőpontos értékek.
>> Sajnos hány úszó pont értékek vannak a világon?
Hány valós szám van?
Van egy végtelen számot, és ami azt illeti
van egy végtelen számú egész.
Így vagyunk már ilyen ásni magunkat egy lyuk van.
Amelynek látszólag computers-- a legkevésbé írt programok C them--
csak akkor számíthat olyan magas, mint négymilliárd ide vagy oda,
és lebegőpontos értékek csak látszólag
néhány véges mennyiségű pontossággal.
Csak annyi számjegy után a tizedes pont.
>> Mert, természetesen, ha már csak 32 bit,
Nem tudom, hogyan fogunk menni a ami igazi numbers-- valószínűleg
különböző típusú mintákat.
De van biztosan véges számú ilyen minták,
így itt is, ez problematikus.
>> Most már tudjuk elkerülni a problémát egy kicsit.
Ha nem használja a float, jól jönne a dupla
C-ben, amely ad nyolc bájt, ami így több lehetséges mintáinak nullák
és is.
De ez még mindig véges, ami megy hogy problémás, ha írsz szoftver
grafikus vagy képzelet matematikai képletek.
Szóval lehet, hogy tényleg akar számít fel nagyobb.
A hosszú long-- ostobán named-- is nyolc bájt vagy 64 bit,
és ez kétszer olyan hosszú, mint egy int, és ez egy hosszú egész szám.
>> Fun fact-- ha egy int négy bájt, milyen hosszú egy hosszú C általában?
Továbbá négy bájt, de a hosszú, hosszú nyolc bájt,
és ez a történelmi okok miatt.
>> De az elvihető most csak, hogy az adatok
az ábrázolható computer-- ami fizikai eszköz villamos energiával,
ez általában a vezetés azok nullák és ones--
A véges mennyiségű pontossággal.
Szóval, mi a probléma akkor?
>> Hát van egy probléma Az integer túlcsordulás.
Nem csak a C, hanem a számítógépek általában.
Például, ha ez a egy byte érdemes bit--
Szóval, ha ez a nyolc bit-- minden amelyek közül az első számú.
Mi a szám ez ami ha azt feltételezzük,
ez mind a pozitív értékek bináris?
>> 255., és ez nem 256, mert nulla a legalacsonyabb szám.
Tehát 255 a legmagasabb az egyik, de a probléma
tegyük fel, hogy szerettem volna növekmény ez változó
használ nyolc bit összesen Ha azt akarom, hogy megnöveljük.
>> Nos, amint hozzá az egyik, hogy az összes ilyen közül,
tudod talán képzelni visually-- csak mint a könyv az egyik a decimals--
valami fog folyni a bal oldalon.
És valóban, ha a szám aki ezt, mi történik a bináris
az, hogy túlcsordul vissza nullára.
>> Tehát, ha csak felhasználáshoz nem int, de egy byte számolni egész
a program által default-- amint kapsz 250, 251, 252, 253, 254,
255-- 0 után jön 255, ami valószínűleg nem az, amit
felhasználó fog várni.
>> Most közben lebegőpontos világban, Önnek is van egy hasonló probléma.
Nem annyira a legnagyobb number-- bár ez még mindig probléma.
De az összeg a pontosság , amit képviselnek.
Szóval vessünk egy pillantást a példa itt is a mai forrásból code--
úszó-0.c.
>> És észre, hogy ez egy szuper egyszerű program, amely
kell nyilvánvalóan ki kell nyomtatni, mi az érték?
Mit fogadást ez fog nyomtatni annak ellenére, hogy van egy kis új szintaxis
itt?
Így remélhetőleg 0.1.
Így az megegyezik az egy tized mert csinálok 1 osztva 10.
Én tárolása válasz a változó nevű f.
Hogy változó típusú float, amely egy kulcsszó csak javasolt létezett.
>> Már nem láttam ilyet, de ez a fajta egy ügyes módon printf
határozza meg, hogy hány számjegy van szeretné látni, miután a tizedes pontot.
Tehát ez a jelölés csak azt jelenti, hogy itt egy helykitöltő.
Ez a lebegőpontos érték, és jaj, az úton,
mutasd meg a tizedes pont egy számot a tizedesvessző után.
Szóval ez a szám A számjeggyel,
hogy úgy mondjam, hogy érdemes.
>> Szóval, hadd menjen előre, és nem hogy úszó-0, ./float-0,
és látszólag 1 osztva 10 0.0.
Most miért van ez?
>> Ismét jól, a számítógép vesz én a szó szoros értelmében, és írtam 1
és én írott 10, és akkor gondolom, amit a feltételezett adattípus e két
értékek?
Int, ez technikailag valami egy kicsit más.
Ez általában egy hosszú, de végül szerves értéket.
Nem egy lebegőpontos értéket.
>> Ami azt jelenti, hogy ha ez a egy int, és ez egy int,
A probléma az, hogy a számítógép nem rendelkezik a képessége
még tárolni, hogy az tizedes pontossággal.
Tehát, ha nem 1 osztott 10 segítségével egész
mind a számlálóban és a nevező, a válasz legyen 0,1.
Hanem a computer-- mert ezek integers--
nem tudja, mit kezdjen a 0.1.
>> Tehát mi egyértelműen csinál?
Ez csak dobott el, és mit látok végül
0.0 csak azért, mert ragaszkodott hozzá, hogy printf mutasd meg egy tizedes pontossággal.
De a probléma az, hogy ha felosztjuk az egész egy egész szám,
akkor get-- definíció A C-- egész.
És ez nem fog csinálni valami szép és kényelmesen
mint kerek fel, hogy a legközelebbi felfelé vagy lefelé.
Meg fog vágjon minden után a tizedes.
>> Így csak ösztönösen, mi valószínűleg egy fix?
Mi a legegyszerűbb fix itt?
Igen?
Pontosan.
Miért nem csak kezelni ezeket lebegőpontos értékek hatékonyan
alakítja át őket úszók vagy páros.
És most, ha én nem, hogy lebeg-0, vagy ha fordítani úszók-1,
amely azonos a mi csak javaslatot.
És most én lebeg-0, most már értem a 0.1.
>> Most ez csodálatos.
De most fogok csinálni valami egy kicsit más.
Kíváncsi vagyok, hogy mi az igazán folyik a motorháztető alatt,
és fogom nyomtatni ezt ki 28 tizedesjegy pontossággal.
Azt szeretnénk, hogy valóban látni 0.1000-- egy infinite--
[Nem hallható] 27 nulla után 0,1.
>> Hát lássuk, hogy ez amit valóban kap.
Készíts úszók-0 ugyanabban a fájlban.
./floats-0-ra.
Nézzük ráközelít a drámai válasz.
Egész idő alatt, akkor gondolkoztam 1 osztva 10-10%, vagy 0,1.
Ez nem.
Legalábbis amennyiben a számítógép érintett.
>> Most why-- OK, ez teljes hazugság 1 osztva 10 0.1.
De ez nem why-- az elvihető ma.
Akkor miért a számítógép gondol, ellentétben mindannyian a szobában,
hogy az 1 osztva 10 valójában az őrült érték?
Mi az a számítógép csinál látszólag?
Mi ez?
>> Ez nem overflow, önmagában.
Túlcsordulás jellemzően a tekerje körül egy értéket.
Ez az a kérdés a pontatlanság egy lebegőpontos érték
ahol már csak 32 vagy talán még 64 bit.
De ha van egy végtelen száma real numbers--
számok tizedes pont és számok thereafter-- biztosan
nem képviseli mindet.
Így a számítógép adott bennünket a legközelebbi mérkőzés
Az értéket képviselhet a hogy sok bit értékének Igazából szeretnék,
ami 0,1.
>> Sajnos, ha kezdeni ezzel a matematika, vagy
indítsa járó ilyen típusú úszó pont értékek fontos programs--
pénzügyi szoftver, katonai software-- semmit
ahol észlelés valószínűleg nagyon fontos.
És elkezd hozzá számok, mint ez, és a Start
fut, szoftver igazán nagy bemenettel
vagy sok órát vagy tételekből napok vagy sok éve,
ezek az apró kis hibát biztosan adhat fel az idők során.
>> Most, mint egy félre, ha valaha látott Superman 3 vagy iroda
és lehet felidézni hogyan ezek a srácok lopott
egy csomó pénzt a saját számítógépén használatával lebegőpontos értékek
és összeadjuk a kis maradványok, remélhetőleg azt a filmet
most több értelme van.
Ez az, amit ők utalva abban a filmben.
Az a tény, hogy a legtöbb vállalat nem lenne
miután egy bizonyos számú A tizedes,
de ezek frakciói cent.
Szóval elkezd hozzá őket, elkezdi, hogy egy csomó pénzt
a bankszámláján.
Szóval ez Office Space magyarázta.
>> Most sajnos túl Office Space, ott
néhány jogosan aggasztó és jelentős hatásokat
Az ilyen típusú alapvető tervezési döntéseket,
sőt az egyik oka használjuk C során
annyira, hogy valóban ez a föld fel megértése számítógépek működnek,
szoftver, hogyan működik, és nem hogy semmit biztosra.
>> És valóban sajnos, még az alapvető megértés,
mi, emberek hibáznak.
És amit gondoltam megosztani az Ez a nyolc perces videó itt venni
egy modern csodák epizód, ami oktatási mutatják, hogy hogyan működnek a dolgok
hogy fest a két kép Az, ha egy nem megfelelő használat
és megértése lebegőpontos értékek
vezetett, hogy néhány jelentős szerencsétlen eredményeket.
Vessünk egy pillantást.
[Videolejátszás]
-Mi Most vissza a "Műszaki Disasters "a modern csodák.
Számítógépek.
Mindannyian jönnek, hogy elfogadja a gyakran frusztráló problémák
Van a them-- hibákat, vírusok és szoftver glitches-- kis áron
fizetni a kényelem.
De a high-tech és a nagy sebességű katonai és űrprogram alkalmazások
A legkisebb probléma nagyíthatók a katasztrófa.
>> Június 4-én, 1996, a tudósok előkészített hogy indítson egy pilóta nélküli Ariane 5 rakéta.
Ez vitt tudományos műholdak tervezett
megállapítani pontosan, hogy a Föld mágneses mező kölcsönhatásba lép
A napszél.
A rakéta épült az Európai Űrügynökség
és felemelte le a létesítmény a tengerparton, Francia Guyana.
>> -At Körülbelül 37 másodpercet a repülés, először
Észrevettem, hogy valami nincs rendjén.
Hogy a fúvókák is forgatható olyan módon, hogy tényleg nem kellene.
Körülbelül 40 másodperc a repülés, egyértelműen a jármű volt a baj,
és ez mikor történt A döntés, hogy elpusztítsa azt.
A tartomány biztonsági tiszt, a óriási belek, megnyomta a gombot
és felrobbant a rakéta előtt lehetett válik a veszélyt a közbiztonságra.
>> Ez volt az lánykori út az Ariane 5,
és pusztítások sor, mert a hiba
beágyazva a rakéta szoftver.
-A Problémát a Ariane az volt, hogy
volt a szám, hogy a szükséges 64 bit kifejezni,
és azt akarták átalakítani azt, hogy egy 16-bites szám.
Azt feltételezték, hogy a szám soha nem lesz nagyon nagy.
Hogy a legtöbb ilyen számjegy A 64-bites szám is nulla.
Tévedtek.
>> -A Képtelenség egy szoftver elfogadni
az a fajta által generált szám Egy másik volt a gyökere a hiba.
Szoftverfejlesztés vált nagyon költséges része az új technológia.
Az Ariane 4 rakéta volt nagyon sikeres volt.
Ennyit a szoftver létrehozott azt is használják az Ariane 5.
>> -A Alapvető probléma az volt, hogy az Ariane 5.
Vajon faster-- felgyorsult gyorsabb, és A szoftver nem számolják el az.
>> -az Megsemmisítése a rakéta hatalmas pénzügyi katasztrófa.
Minden miatt egy percet szoftver hiba.
De nem ez volt az első idő adatkonverzió problémák
már sújtja a modern rakéta technológia.
>> -A 1991 a kezdet Az első Öböl-háború,
A Patriot rakéta tapasztalt hasonló jellegű
számos konverziós probléma.
És ennek eredményeként 28 emberekre, 28 Amerikai soldiers-- öltek meg,
és mintegy száz másik megsebesült.
Amikor a Patriot, ami kellett volna elleni bejövő Scuds,
nem a tűz egy rakéta.
>> Mikor Irak lerohanta Kuvait, és Amerikában indított Sivatagi Vihar 1991 elején,
Patriot rakéta elemek vezényeltek védelme Szaúd-Arábia és Izrael
az iraki Scud rakéta támadások.
A Patriot egy amerikai közepes hatótávolságú föld-levegő rendszer
által gyártott Raytheon cég.
>> -az Mérete Patriot elfogó itself--
ez körülbelül mintegy 20 méter hosszú, , tömege körülbelül 2000 kg.
És hordoz robbanófejet kb, Azt hiszem, körülbelül 150 kiló.
És a robbanófej maga nagy robbanó, amely
van töredékek körülötte.
Így a burkolat a robbanófej célja, hogy úgy viselkednek, mint a sörét.
>> -A Rakéták hajtják Négy per konténer,
és szállítják a félpótkocsi.
>> -A Patriot rakétavédelmi rendszer nyúlik vissza, legalább 20 éve.
Eredetileg mint a légvédelmi rakéta
lő le az ellenséges repülőgépek.
Az első Öböl-háború amikor a háború jött,
a hadsereg akarta használni, hogy lő le Scuds, nem repülőgépek.
Az iraki légierő volt nem olyan nagy probléma,
de a hadsereg aggódik Scuds.
És így igyekeztek frissíteni a Patriot.
>> -Intercepting Ellenség rakéta halad Mach 5
volt, lesz elég ambiciózusak.
De amikor a Patriot rohant a szolgáltatás,
A hadsereg nem volt tudatában egy iraki módosítás, amely
tették Scuds közel lehetetlen azt.
>> Mi történt a Scuds hogy jöttek be volt stabil.
Voltak bizonytalan.
Ennek oka az volt az Iraqis-- annak érdekében, hogy 600 km-el
Egy 300 km-es tartomány missile-- vett tömege az elülső robbanófej,
és így a robbanófej könnyebb.
Tehát most a Patriot próbál jönni a Scud, és a legtöbb time--
a túlnyomó többsége a time-- ez csak repülni a Scud.
>> -Egyszer A Patriot-üzemeltetők felismerte a Patriot tévesztett célt,
ők felrobbantotta a Patriot a robbanófej hogy elkerülje az esetleges baleseteket, ha az
hagyjuk leesik a földre.
>> -Ez, Amit a legtöbb ember látta akkora tűzgolyók az égen,
és félreértették a elfogja a Scud robbanófejeket.
>> -Although Az éjszakai égbolton, Patriots úgy tűnt, hogy sikeresen pusztító
Scuds, a Dhahran lehetne Félreértés ne essék a teljesítményét.
Ott a Patriot a radarrendszer Elvesztettem a bejövő Scud
és soha nem indított kellő a szoftver hibája.
>> Ez volt az izraeliek, akik először fedezte fel hogy minél hosszabb a rendszer volt,
annál nagyobb az időeltérés vált.
Miatt egy órát beágyazott A rendszer számítógépét.
>> Kábé két héttel a tragédia Dhahran,
az izraeliek jelentett a Honvédelmi Minisztérium
hogy a rendszer időveszteség.
Körülbelül nyolc órán át A futás, amikor észrevették,
hogy a rendszer egyre észrevehetően kevésbé pontos.
A Védelmi Minisztérium reagált mondja az összes Patriot akkumulátorok
hogy ne hagyja el a rendszert a hosszú ideig.
Soha nem azt mondta, amit hosszú idő volt.
8 óra, 10 óra, egy ezer óra.
Senki sem tudta.
>> -A Patriot akkumulátor állomásozott a laktanyában
A Dhahran és hibás belső óra volt, a több mint 100 óra
az este a február 25.
>> -Ez Nyomon idő pontossággal A körülbelül egy tizedmásodpercre.
Most egy tizedmásodpercre Érdekes szám
mert nem lehet kifejezni bináris pontosan, ami
azt jelenti, hogy nem lehet kifejezni pontosan minden modern digitális számítógép.
Nehéz elhinni, de használja ezt a példát.
>> Nézzük a számot egyharmadát.
Egyharmada nem lehet kifejezett tizedes pontosan.
Egyharmada 0.333 folyik a végtelenbe.
Nincs módja, hogy a abszolút pontossága a tizedes.
Ez pontosan az a fajta probléma hogy történt a Patriot.
Minél hosszabb a rendszer futott, a rosszabb az idő hiba volt.
>> -Miután 100 üzemóra, a hiba volt az időben csak mintegy egyharmada
a második.
De tekintve célba rakéta utazó Mach 5,
azt eredményezte, hogy tracking hiba a több mint 600 méter.
Lenne egy végzetes hiba A katonák Dhahran.
>> Mi történt egy Scud dob volt által észlelt korai előrejelző műholdak,
és tudták, hogy a Scud jön azok általános iránya.
Nem tudom, hol jön.
Ez volt már a radar eleme a Patriot rendszer
védő Dhahran hogy keresse meg és tartsa követi a beérkező ellenséges rakéta.
>> -A Radar nagyon okos.
Ez valójában a pálya a helyzet a Scud
majd megjósolni, ahol valószínűleg lenne
A következő alkalommal, amikor a radar küldött impulzus ki.
Hogy hívták a tartományban kapu.
>> Akkor, ha a Patriot úgy dönt, elég időt
át, hogy menjen vissza, és ellenőrizze a következő helyszín ehhez észlelt objektum
megy vissza.
Tehát, amikor visszament a rossz helyén, akkor nem látja tárgy.
És úgy dönt, hogy nem volt tárgya.
Hogy volt egy hamis érzékelés és esik a pályán.
>> -A Bejövő Scud eltűnt a radar képernyőjén,
és másodperc múlva az csapódott a laktanyába.
A Scud megölt 28.
Ez volt az utolsó lőttek az első Öböl-háború.
Tragikus, a frissített szoftver érkezett hajnalban a következő napon.
A szoftver hiba volt állapítottak meg, záró
egy fejezetet a bajba jutott története a Patriot rakéta.
>> [END Videolejátszás]
>> David J. MALAN: Ez az a CS50.
Látni fogjuk, hogy szerdán.
>> [Zenelejátszás]