>> [Prehrávanie hudby]
David J. Malan: Dobre.
To je CS50, a to je štart dvoch týždňov.
Takže začneme dnes s chybou.
Chyba, samozrejme, je chyba v programe,
a budete mať veľmi oboznámení s touto koncepciou
ak ste nikdy programovať pred. pset0 a teraz pset1.
Ale uvažujme niečo trochu jednoduchý na prvom mieste.
Tento program tu, že som hodil dohromady vo vopred
a tvrdím, že by to malo tlačiť 10 hviezdy na obrazovke pomocou printf,
ale je to zrejme kočík nejakým spôsobom.
>> Vzhľadom k tomu, že špecifikácie, ktoré že by sa mala vytlačiť 10 hviezd,
ale to nie je zrejme, čo by ste nárok je chyba?
Jo?
Takže je to posunuté o jednu chybu, a čo myslíš, že?
OK.
Výborne.
Tak sme zadali počiatočná hodnota nula pre i,
a my sme zadali n hodnotu 10, ale sme použili menší ako alebo rovnajúcu sa.
A dôvodom, že sa jedná dva postavy a nie len jeden symbol,
ako v matematickej knihe, je to, že nemáte
spôsob, ako vyjadriť jeden znak ekvivalent.
>> Takže to znamená, že menej ako, ale ak začnete počítať od nuly,
ale počítať celú cestu nahor a rovná 10,
ste samozrejme bude počet 11 vecí celkom.
A tak budete tlačiť 11 hviezd.
Takže to, čo by mohlo byť oprava na to?
Jo?
>> Takže stačí nastaviť nižšie než alebo rovná práve byť menšie ako,
a tam, tvrdím, možno iné riešenie, tiež.
Čo by mohlo ešte urobiť?
Jo?
>> Takže začať rovnajúcu to jedno, a opustiť menší ako alebo rovnajúcu sa.
A úprimne povedané, ja by som tvrdiť, , Že pre typické človeka,
to je pravdepodobne jednoduchšie.
Začnite počítať od 1 a počítať až desať.
V podstate to, čo máte na mysli.
>> Ale realita je programovanie, ako sme videli,
počítačoví odborníci a programátori všeobecne sa začína počítať od nuly.
A tak to je v poriadku, akonáhle si na to zvyknúť.
Váš stav bude zvyčajne niečo ako nižšia ako.
Takže potom logicky chyba, že sme mohli teraz
opraviť a nakoniec prekompilovať to a dostať len 10.
>> Tak, ako o tejto chybe tu?
Tu opäť tvrdím, že mám Cieľom tlače 10 stars--
jeden na riadok tentoraz, ale nie je tomu tak.
Než sme sa navrhnúť čo oprava je to, čo robí tento
tlačiť vizuálne keby som zostaviť a spustiť tento program si myslíte?
Jo?
>> Hviezda.
Takže všetky hviezdy na rovnakom riadku je to, čo som počul,
a potom znak nového riadku.
Takže poďme to skúsiť.
Tak, aby buggy-1, zadajte, a vidím príkaz zvonenie
že sme o tom hovorili minule.
./buggy-1, a naozaj vidím všetkých 10 hviezd na rovnakom riadku, aj keď tvrdím,
v mojom špecifikácii len komentár na vrchole kód, ktorý som mal v úmysle urobiť jeden na
linka.
Ale to vyzerá dobre.
>> Teraz linka 15 to vyzerá, že som tlač hviezdu, a potom linka 16
vyzerá to, že som tlač znak nového riadku,
a oni sú obaja tak odsadené Som vnútri slučky jasne.
Takže by som nemal robiť hviezdu, nová linka, hviezda, nový riadok, hviezda, nový riadok?
Áno?
>> Áno, na rozdiel od jazyka ako Python, ak ste oboznámení,
odsadenie nie je tom, k počítaču.
To záleží len na človeka.
Takže zatiaľ čo tu som vymyslel linky 15 a 16--, že vyzerá krásne,
ale počítač nestará.
Počítač sa stará o v skutočnosti má zložené zátvorky
okolo týchto riadkov kódu.
>> Takže to je to clear-- rovnako ako v Scratch-- že tieto dva riadky kódu
by mal byť vykonaný.
Ako jeden z tých žltých Scratch puzzle kusy znovu a znovu a znovu.
>> Takže teraz, keď som znova spustiť tento program-- ./buggy-2-- Hm.
Mám chybu teraz.
Čo som zabudol urobiť?
Jo, tak som sa skompilovať.
Tak, aby buggy-2.
Žiadny takýto súbor, pretože som nemal vlastne zostaviť druhú verziu.
Takže teraz zaujímavé nenahlásené proměnná-- nie 2.
Robíme 1.
Urobiť buggy-1-- ./buggy-1-- a teraz každý z nich je na rovnakom riadku.
>> Teraz je výnimka to má nárok môj
že je potrebné tieto zložené zátvorky.
Kedy je vlastne Ok-- ak ste Všimol v sekcii alebo textbooks--
vynechať zložené zátvorky?
Jo?
>> Presne tak.
Keď tam je len jeden riadok kódu, ktorý vám
chcel byť spájaný s slučka ako v našom prvom príklade.
Je úplne v poriadku vynechať zložené zátvorky
rovnako ako druh pohodlie od kompilátor pre vás.
Jo?
Dobrá otázka.
Bolo by to byť považované za chybu štýl?
Radi by sme promote-- ako CS50 štýlu sprievodca, URL, pre ktoré
je pset1--, že vždy používať zložené zátvorky.
Iste, ak ste k programovaniu nové.
Realita je taká, že nie sme ti zakázať
v tom tieto vymoženosti.
Ale ak ste len na to, do swingu vecí,
úplne stačí vždy kučeravé traky, až sa dostanete na kĺb.
Dobrá otázka.
>> V poriadku.
Takže to potom bola chyba.
Aspoň v niečom celkom jednoduché.
A napriek tomu by ste si mohli myslieť to je pomerne primitívne, že jo?
To je niečo ako prvého týždňa pohľadu na jazyk
rád, vidieť svoje chyby v ňom.
Ale realita sa jedná o skutočne reprezentatívne
niektorých docela desivé problémy ktoré môžu nastať v reálnom svete.
>> Takže niektorí z vás možno pamätáte ak budete postupovať podľa tech novinky,
alebo dokonca chytil vietor to vo februári
v poslednom roku, že Apple mal urobil trochu chybu v oboch iOS,
operačný systém ich telefóny, a tiež
Mac OS, operačný systém na svojich stolných a prenosných počítačov.
A videla ste také titulky ako to.
A potom, Apple sľúbil opraviť túto chybu,
a veľmi rýchlo urobil opraviť v iOS, ale potom sa nakoniec opravili v Mac OS
rovnako.
>> Teraz žiadny z týchto titulkov sám naozaj odhaliť, čo je základný problém bol,
ale chyba bola nakoniec znížená na chyba v SSL, Secure Sockets Layer.
A dlhý príbeh krátky, to je softvér
že naše prehliadača a ďalšie Softvér slúži k čomu?
>> Keby som povedal, že SSL je zapojený, keď vás
navštíviť adresu URL, ktorá začína s HTTPS, čo potom môže SSL súvisieť?
Šifrovania.
Takže budeme hovoriť o to v najbližších dňoch.
Šifrovanie, umenie kódovanie informácie.
>> Ale dlhý príbeh krátky, Apple pred časom urobil chybu
pri ich vykonávaní SSL, je softvér, ktorý nakoniec implementuje
URL, ako je HTTPS alebo max Pripojenie tam taky.
Výsledkom je, že vaša zapojenie by mohlo potenciálne
byť zachytené.
A vaše pripojenie bolo nie nutne šifrovaná
ak by ste mali nejaký zlý človek medzi vy a webové stránky cieľ, ktorý
vedel, ako využiť to.
>> Teraz Apple nakoniec vyslaný Oprava tohto konečne,
a popis ich oprava bola táto.
Bezpečná doprava, nepodarilo sa overiť pravosť spojenie.
Problém bol vyriešený tým, obnoviť chýbajúce validačné kroky.
>> Tak to je veľmi ruka zvlnená vysvetlenie jednoducho len tým, že sme sa podelal.
Tam je doslova jedna riadok kódu, ktorý bol kočík
pri ich vykonávaní SSL a ak ste online a hľadať pre tento
môžete skutočne nájsť pôvodný zdrojový kód.
Napríklad, to je snímka obrazovky len časť z pomerne veľkého súboru,
ale to je zrejme funkcia nazýva SSL overiť znak servera výmenu kľúčov.
A to trvá veľa argumenty a vstupy.
A my sa budeme sústrediť moc tam markantov,
ale ak sa sústredíte na kód vnútri tej najvyššej function-- LET'S
priblížiť na to.
Možno už tušia čo chyba môže
byť, aj keď nemáte tušenie, v konečnom dôsledku to, čo hľadáte na.
Tam je trochu anomália tu, čo je to, čo?
>> Jo, nemám naozaj rád pohľad z dvoch GOTO zlyhá.
Úprimne povedané, ja naozaj neviem, čo goto zlyhanie prostriedky, ale s dvoma z nich
chrbtom k sebe.
To ma len tak trie intelektuálne zle,
a samozrejme keď sme sa zamerať na len tie linky, to je C.
>> Takže veľa Apple kódu je sám napísaný v jazyku C,
a to zrejme je naozaj equivalent--
nie je k tejto krásnej odsadenie verzie, ale ak spoznáte skutočnosť
že nie je zložené zátvorky, čo Apple skutočne napísal, bol kód, ktorý sa pozerá
takto.
Tak som oddialenie a ja pevné odsadenie v tom zmysle,
že v prípade, že to nie je zložené zátvorky, že druhej goto zlyhanie, ktoré je v žltej
sa chystá vykonať bez ohľadu na to.
Nie je to spojené s ak podmienka nad ním.
>> Takže aj znova, ak to nie je úplne porozumieť tomu, čo by to mohlo možno
bude robiť, viem, že každý z nich conditions-- každej z týchto čiar
Je to veľmi dôležitý krok v procese kontroly
ak vaše dáta je v skutočnosti zašifrované.
Takže skákanie jeden z nich kroky, nie je najlepší nápad.
>> Ale pretože sme to Druhý goto zlyhať v žltej,
a preto, že akonáhle sme trochu esteticky
posuňte ju doľava, kde ho logicky je v tejto chvíli, čo sa
to znamená na linke Kód nižšia, než je druhá GOTO
zlyhanie by si o tom myslíte?
Je to vždy bude preskočený.
Takže gotos sú všeobecne odsudzovaná z dôvodov, ktoré sa naozaj idú do,
a síce v CS50 máme tendenciu sa učiť tento príkaz GOTO,
ale môžete myslieť GOTO zlyhanie v tom zmysle, skočiť
na inej časti kódu.
>> Inými slovami, skákať cez úplne to posledný riadok,
a tak sa výsledok tohto hlúpy jednoduchá chyba, že bol len
Výsledok snáď niekoho kopírovanie a vkladanie taky
mnohokrát bolo, že celý bezpečnosť iOS a Mac OS
bolo náchylné na odpočúvanie zlí chlapci na dlhšiu dobu.
Až Apple konečne opravil toto.
>> Teraz, keď niektorí z vás sú vlastne beží staršie verzie iOS alebo Mac OS,
môžete ísť na gotofail.com ktoré je webová stránka, že niekto nastaviť
sa v podstate určí programovo
ak váš počítač je stále zraniteľné.
A úprimne povedané, ak je, je to asi dobrý nápad
aktualizovať telefón alebo Mac v tomto bode.
Ale tam, len svedčí o tom, ako zhodnotenie týchto nižších úrovní
Podrobnosti a spravodlivo jednoduché nápady môže naozaj
preložiť do rozhodnutia a problémy, ktoré
affected-- v tomto case-- milióny ľudí.
>> Teraz pár slov o správe.
Sekcia začne tento rok v nedeľu.
Dostanete e-mail od víkend na úseku, na ktorom mieste
Proces resectioning začne, ak ste
si uvedomil, máte teraz niektoré nové konflikty.
Takže sa to stane každý rok, a my sme sa ubytovať v najbližších dňoch.
>> Office hours-- robiť, aby oko na tomto pláne tu.
Zmení trochu tento týždeň, najmä počiatočný čas
a umiestnenia, takže sa poraďte so že predtým, než sa vydáte do pracovného času
niektorý z nasledujúcich štyroch noci.
A teraz pár slov o posúdenie, najmä ak sa ponoríte do problému
stanovuje jeden a mimo nej.
>> Takže podľa špecifikácie, Tieto sú všeobecne
osi, pozdĺž ktorej budeme hodnotiť svoju prácu.
Rozsah sa odkazuje na to, čo miery Váš kód náradia
funkcie požadované naše špecifikácie.
Inými slovami, ako moc dielna sada si odhryznúť.
Vedeli ste to tretina z nich, polovica z nich, 100% nej.
Aj v prípade, že to nie je správne, koľko ste pokus?
Takže zachytí úroveň úsilie a množstvo
, Ku ktorému odhryzol Problém SET je.
>> Correctness-- tento, na akej miery je váš kód
v súlade s našimi špecifikácie a bez chýb.
Tak to funguje správne?
Ak dáme mu nejaký vstup, robí to nám výstup, ktorý očakávame?
Design-- teraz je to prvý sú najmä tie, kvalitatívne
alebo tie, ktoré vyžadujú ľudský úsudok.
A skutočne, to je dôvod, prečo máme zamestnanca toľkých výučby kolegami a samozrejme
asistenti.
Do akej miery je váš kód napísaný dobre?
>> A opäť sa jedná o veľmi kvalitatívne hodnotenie
že bude pracovať s vami na obojsmerne v najbližších týždňoch.
Tak, že keď sa dostanete nie tak číselné výsledky, ale aj
Písomné skóre, alebo napísaný spätná väzba, alebo písomnej spätnej väzby v anglických slov.
To je to, čo budeme používať riadiť vás k vlastne písať lepšie kód.
A v prednáške a časti, budeme sa snažiť upozorniť out-- tak často, ako by sme can--
to, čo robí program, a to nielen správne a funkčne dobre,
ale aj dobre navrhnuté.
Najúčinnejšie by to mohlo byť, alebo aj najkrajšie to môže byť.
>> Čo nás vedie k štýlu.
Štýl nakoniec je estetický súd.
Ste si vybral dobrý Mená pre vaše premenné?
Už ste správne odsadené kód?
Vyzerá to dobre, a preto, to je ľahké pre iné ľudské bytosti
čítať vaše príslušné na jeho správnosť.
>> Teraz všeobecne podľa osnov, sme skóre tieto veci na päťbodovej stupnici.
A dovoľte mi, aby som kladivo domov bod že sa tri je naozaj dobrá.
Veľmi rýchlo sa to ľudí začať robiť aritmetiku.
Keď dostanete tri zo päť na správnosť pre niektoré pset
a myslí si, sakra, budem 60% , Ktorý je v podstate D alebo E.
>> To nie je spôsob, ako myslíte, že z týchto čísel.
Tri je naozaj dobrá, a to, čo sme všeobecne očakávajú, že na začiatku
termínu je, že ak ste sa dostal banda three's-- možno pár
veľtrhov, pár fours-- alebo pár dvojky, pár fours--
že je to dobré miesto pre štart.
A tak dlho, ako vidíme hore trajektórie v priebehu času,
ste v mimoriadne dobrom mieste.
>> Vzorec, ktorý používame na Hmotnosť veci je v podstate
to podľa osnovy čo práve znamená, že
dať väčší dôraz na správnosť.
Vzhľadom k tomu, že je to veľmi často správnosť ktorý berie najviac času.
Ver mi teraz.
Budete find-- aspoň v jednom pset--, ktoré vás
trávia 90% svojho času pracuje na 10% problému.
>> A všetko, čo nejako funguje s výnimkou jedného alebo dvoch chýb,
a to sú chyby, ktoré vás až neskoro v noci.
To sú tie, ktoré nejako uniknúť vás.
Ale potom, čo spí na ňom, alebo sa zúčastňuje úradné hodiny
alebo klásť otázky on-line, je keď sa dostanete do tej 100% cieľu,
a to je dôvod, prečo sme hmotnosť správnosť najviac.
Navrhnúť trochu menej, a štýl trochu menej než to.
Ale majte na mind-- štýle je najjednoduchšie
z nich odhryznúť podľa štýlu sprievodca.
>> A teraz vážnejšie Pozor na akademickej poctivosti.
CS50 má neblahý vyznamenania je najväčším výrobcom Ad rady
prípady takmer každý rok historicky.
To nie je preto, že študenti podvádzať CS50 o nič viac než ktorýkoľvek iný triedy,
ale preto, že podľa povahy práce, Skutočnosť, že je elektronický,
Skutočnosť, že sa pozrieme na to, a skutočnosť sme počítačoví odborníci,
Môžem povedať, že sme bohužiaľ veľmi dobre odhaľovať ju.
>> Takže čo to znamená v reálnych hodnotách?
Takže to, podľa osnov, filozofia kurzu je
naozaj redukuje byť rozumný.
Tam je to hranica medzi robiť svoju prácu na vlastnú päsť
a získať trochu primeraná pomoc od priateľov
a priamo tým, že prácu pre priateľ, alebo zaslaním mu svoj kód
tak, že on alebo ona môže jednoducho vziať alebo si ju požičať z práva.
A to prekročí hranicu , Že boli v triede.
>> Pozri osnovy v konečnom dôsledku pre riadky
že čerpáme ako rozumné a nerozumné správanie,
ale je to naozaj variť dole k podstate
svojej práce museli byť svojim vlastným koncom.
Teraz sa, že povedal, je heuristický.
Vzhľadom k tomu, ako by sa mohlo imagine-- z úradných hodín a vizuálne
a videa máme zobrazené tak far-- CS50
skutočne chcel byť ako spolupráca a ako družstvo a ako sociálny
ako je to možné.
Napríklad spoločné ako je starostlivý.
>> Ale s tým povedal, heuristika, ako uvidíte v učebných osnovách,
je, že keď máte problém.
Máte nejakú chybu v kóde, ktorý vám nemožno vyriešiť, je rozumné pre vás
ukázať svoj kód na niekoho iného.
Priateľ aj v triede, priateľ sedí vedľa vás v úradných hodinách,
alebo zamestnanec.
Ale nemusí zobraziť ich kód na vás.
>> Inými slovami, odpoveď na Váš question--
Musím help-- nie oh, tu je môj kód.
Pozrite sa na to, a vyvodiť z toho, čo bude.
Teraz, samozrejme, je tu spôsob, ako jasne k hre
Tento systém, v ktorom som vám ukážem, môj kód pred tým, než otázku.
Môžete mi ukázať môj kód pred tým, než otázku.
Ale viď sylabus znova jemnejšie detaily o tom, kde je tento riadok.
>> Len preto, aby sa maľovať obraz a zdieľať transparentne, ako je to možné
kde sme na v posledných rokoch, To je počet prípadov Ad rady
že CS50 má viac ako za posledných sedem rokov.
14 prípadov tejto najnovšej jeseň.
Z hľadiska zúčastnených študentov, to bolo 20 z nejakého zvláštneho študenti
tento rok na jeseň.
Tam bol vrchol 33 študenti pred niekoľkými rokmi.
Mnohé z nich sú bohužiaľ už tu na akademickej pôde.
>> Študenti sa podieľajú ako percento trieda historicky v rozmedzí od 0%
na 5,3%, čo je len povedať, To je každoročne výzvou.
A na tento účel, čo chceme urobiť, je povedať jednu
že dd-- len na tieto FYI-- spravodlivosť pre tých študentov, ktorí
sú nasledujúce riadok podľa toho.
Robíme porovnať všetky aktuálne podanie proti všetkým minulých misií
z posledných mnoho rokov.
>> Vieme tiež, ako na Google po a nájsť úložisko kódu
on-line, Diplofix on-line, práca stránkach online.
Ak sa študent môže nájsť, môžeme určite Je to rovnako ako my s ľútosťou robiť.
Takže to, čo uvidíte v učebných osnovách aj keď je toto ustanovenie ľútosť.
Môžem rozhodne oceniť, a všetci sme sa
Pracovníci, ktorí vykonávajú kurzu ako Táto, alebo tento sám o sebe v priebehu času,
iste viete, aké to je, keď život sa dostane do cesty, keď máte
niektoré neskoro v noci deadline-- a to nielen v tejto triede,
ale another-- keď ste úplne vyčerpaný, stresu,
majú nadmerné množstvo ďalších vecí robiť.
Budete robiť na nejakom mieste v život určite zlý, možno neskoro
noc rozhodnutia.
>> Takže podľa osnovy je toto ustanovenie,
taká, že ak do 72 hodín od výroby niektoré zlé rozhodnutia, môžete vlastniť až k nemu
a dostať sa ku mne a jeden z vedúcich kurzu je
a budeme mať rozhovor.
Budeme riešiť veci interne v nádeji, že
z toho stáva viac Výučba moment alebo životnú lekciu,
a nie niečo, čo sa mimoriadne drastické následky
ako môžete vidieť na nasledujúcich grafoch tu.
>> Tak to je veľmi vážny tón.
Zastavme len za pár sekúnd prelomiť napätia.
>> [Prehrávanie hudby]
>> David J. Malan: Tak jo, tak, ako to bolo pre Segue?
Dnešných základných tém.
Prvý z nich je abstrakcia.
Ďalší, z ktorých bude reprezentácie dát, čo úprimne povedané
je naozaj suchý spôsob, ako povedať, ako môžeme ísť o riešenie problémov a myslenie
o riešenie problémov?
Takže ste videli v Scratch, a vy ste Videl snáď už v pset1 s C
že nielen môžete použiť funkcie, ako printf,
že ostatní ľudia v minulých rokoch napísal pre teba.
Môžete tiež písať svoje vlastné funkcie.
>> A aj keď je možné, urobiť to v C, a úprimne povedané, v pset1
nemáte naozaj potrebujete napísať svoj vlastné funkcie pretože problem--
zatiaľ čo možná skľučujúca na Prvý glance-- uvidíte
môže byť v konečnom dôsledku vyriešiť nie všetky, že veľa riadkov kódu.
Ale s tým, že, čo sa týka písanie svoje vlastné funkcie,
Uvedomujem si, že C sa dá vám táto schopnosť.
>> Chystám sa ísť v dnešnej zdrojového kódu, ktorý je k dispozícii už on-line,
a ja idem do toho a otvorený do programu s názvom funkcie 0.C,
a vo funkcii nulovej uvidíme pár vecí.
V prvých riadkov 18 až 23 je môj hlavnú funkciu.
A teraz, keď sme začali čítať kód, ktorý nie sme písanie na behu,
ale namiesto toho som napísal v predstihu alebo že ste na problém nastaviť
Môže sa zobraziť s bola napísaná v predstihu.
Dobrý spôsob, ako začať čítanie kódu niekoho iného
, Je pozrieť sa na hlavné funkcie.
Zistiť, kde túto položku Ide o to, spustenie programu,
a potom ju logicky odtiaľ.
>> Tak toto programe zrejme výtlačky Vaše meno nasledované dvojbodkou.
My potom používame getString z knižnice CS50
získať reťazec alebo slovo alebo frázu od užívateľa na klávesnici.
A potom je tu to vec tady-- PrintName.
>> Teraz PrintName nie je funkcia, ktorá prichádza s C.
Nie je to v štandardnom io.h.
Nie je to v CS50.h.
Je to skôr v rovnakom súbore.
Všimnite si, keď som nalistujte A bit-- linky 25 na 27--
je to len celkom spôsob komentovanie Váš kód pomocou hviezd a lomítka.
Jedná sa o multi-línie komentovať, a to je len
môj popis v modrej farbe čo táto funkcia robí.
>> Vzhľadom k tomu, línií, 28 až 31, Napísal som super jednoduchú funkciu
názov, ktorého je PrintName.
Trvá to, koľko Argumenty by ste povedali?
Takže jeden argument--, pretože tam je jeden Tvrdenie uvedené v zátvorkách.
Typ, ktorý je String.
Čo znamená, PrintName je takhle čierne skrinky
alebo funkcie, ktorá zoberie ako vstupný reťazec.
>> A názov tohto reťazca Pohodlne sa bude Name.
Nie S, nie N, ale meno.
Takže čo PrintName robiť?
Je to pekné jednoduché.
Rovnako ako jeden riadok kódu pre printf, ale zrejme to
vytlačí "Dobrý deň," tak a tak.
V prípade, že tak a tak vychádza z argumentu.
>> Teraz to nie je obrovský inovačný tu.
Naozaj, som vzal program, ktorý by mohol boli písané s jeden riadok kódu
tým, že to tu, a zmenil ho na niečo
ktorý zahŕňa niektoré šesť alebo sedem alebo tak nejako riadkov kódu celú cestu sem.
>> Ale je to nácvik princíp známy ako abstrakcie.
Druh zapuzdrenie vnútri nové funkcia, ktorá má meno, a lepšie
napriek tomu, že meno doslovne hovorí, že to, čo robí.
Myslím printf--, že to nie je najmä opisné.
Ak chcem vytvoriť skladačky, alebo či som
Chcete vytvoriť funkciu, ktorá tlačí niečí meno,
krása, ako to urobiť je to, že môžem skutočne
dať, že funkciu jej názov , Ktorý popisuje, čo to robí.
>> Teraz trvá na vstupe, ktorý Som svojvoľne volal meno,
ale tiež sa výborne opisný namiesto toho, aby sa trochu viac
generic ako S. a neplatné, teraz, jednoducho znamená,
že táto funkcia nie je ruky mi nič.
Nie je to tak, že getString Doslova mi podá späť reťazec
ako sme to urobili s kúskami papiera so svojimi spolužiakmi minulý týždeň,
ale to má len vedľajší efekt.
Vytlačí niečo na obrazovku.
>> Takže na konci dňa, keď robiť, aby funkcia-0, ./function-0,
uvidíme, že sa spýta na moje meno.
Píšem Davida, a to druhy sa moje meno.
Ak by som to znovu s Robom, to bude hovoriť "Ahoj, Robe."
Takže jednoduchá myšlienka, ale možno odvodiť z toho psychicky
že ak vaša programy sa o niečo zložitejšie,
a chcete napísať kus kód a volanie, ktoré code-- Vyvolať
že code-- podľa popisné pomenovať ako PrintName,
C robí dovoliť nám túto možnosť.
>> Tu je ďalší jednoduchý príklad.
Napríklad, keď som otvoriť súbor z dnes volal return.c,
Všimnite si, čo som tu urobil.
Väčšina z tejto hlavnej funkcie je printf.
Prvýkrát som sa svojvoľne inicializovať Premenná x sa nazýva číslo 2.
Potom som vytlačiť "x je teraz % I "odovzdávanie v hodnote x.
Takže som len hovorím, čo to je.
>> Teraz som len smelo vyhlasovať sa printf.
Som Cubing, že hodnota x, a ja som Pritom volaním funkcie
volal cube absolvovaní v X ako argument,
a následným uložením výstupu v premennej samotnej, x.
Takže som prepisovanie hodnotu x.
Som prevažujúci hodnota x s tým, čo
Výsledkom volania Táto funkcia je kocka.
A potom som len vytlačiť na niektoré našuchorený veci tu hovoriť, čo som urobil.
>> Takže to, čo potom je kocka?
Všimnite si, čo je v podstate inak tu.
Dal som funkciu názov ako predtým.
Som zadaný názov argumentu.
Tentoraz je to len n miesto mena, ale to by som mohol hovoriť, čo chcem.
Ale toto je niečo iné.
To, čo na ľavej strane.
Predtým to bolo to, čo slovo?
Boys.
Teraz je to samozrejme int.
>> Takže to, čo je potrebné vziať?
Vzhľadom k tomu, void znamená druh ničota, a to bol ten prípad.
PrintName vrátil nič.
Je to niečo urobil, ale to sa mi vrátiť
niečo, čo by som mohol dať na ľavá strana znamienko rovnosti
ako ja som urobil tú na linke 22.
>> Takže keď poviem, že v on-line 30, čo je to pravdepodobne znamenať,
o tom, čo kocka robí pre mňa?
Jo?
Vracia celé číslo.
Tak mi to odovzdá späť, pre inštancie, kus papiera
na ktoré napísal odpoveď.
2 kocky alebo 3 kocky, alebo 4 cubed-- čo som prešiel v roku,
a ako som sa realizovať to?
No, práve n krát n krát n je, ako by som mohol kocka hodnotu.
Takže znova, super jednoduchý nápad, ale demonštratívny
teraz, ako môžeme písať funkcie že nás vlastne mal vrátiť
hodnoty, ktoré by mohli byť zaujímavé.
>> Poďme sa pozrieť na jeden posledný príklad tu volané funkcie jeden.
V tomto príklade, sa začne získať viac presvedčivé.
Takže vo funkcii jeden, to program-- upozornenia nakoniec
volanie funkcie volaná GetPositiveInt.
GetPositiveInt nie je Funkcie v knižnici CS50,
ale rozhodli sme sa, by som to existovať.
>> Takže keď sme sa posunúť dole neskôr v súbore, Všimnite si, ako som sa o realizácii
získať pozitívne int, a ja hovoria, že je to viac presvedčivý
pretože to je slušný Počet riadkov kódu.
Nie je to len hlúpa hračka programu.
Je to vlastne má nejakú kontrolu chýb a robiť niečo užitočného.
>> Takže ak ste ešte nevideli návod videá, ktoré sme vložené do pset1,
vedieť, že sa jedná o typ slučka v C, podobne ako v duchu
na veľa vecí Scratch sa dá robiť.
A to hovorí, že to urobiť.
Vytlačiť na to.
Potom choďte do toho a dostať n-- získať int a uložte ho na n,
a pokračovať v tom to znova a znova a znova tak dlho, kým n je menšia ako jedna.
>> Tak n bude menej ako jeden iba v prípade, že človek nie je spolupracujúci.
Ak on alebo ona je písanie v 0 alebo -1, alebo -50,
Táto slučka bude mať vykonávanie znova a znova.
A nakoniec zistíte, I jednoducho vrátiť hodnotu.
Takže teraz máme funkciu to by bolo pekné
ak CS50 by implementovať do CS50.h a CS50.c pre vás,
ale tu môžeme teraz vykonanie tohto sami.
>> Ale dve pripomienky niektorých kľúčových detailov.
One-- prečo Prehlasujem, int n, myslíš, že na linke 29
namiesto toho len to, to tu, čo je
viac v súlade s to, čo sme robili minulý týždeň?
Jo?
Dobrá myšlienka.
Takže ak by sme mali dať tu, je to, ako by sme
udržiavať ju znova a znova potvrdzuje.
To samo o sebe je nie je problematické, sama o sebe,
pretože budeme potrebovať iba hodnota raz a potom
budeme si novú tak ako tak.
Ale dobrá myšlienka.
Jo?
>> Zatvoriť.
Tak preto, že som vyhlásil, n na riadok 29 mimo slučky,
je k dispozícii v celom Celá táto funkcia.
Nie ostatné funkcie, pretože n je stále vo vnútri týchto kučeravé
traky tu.
Tak-- istý.
>> Presne tak.
Tak to je ešte na mieste.
Ak by sme namiesto toho vyhlásil n tu na riadku 32,
je to problematické, pretože odhad kde inde Musím sa k nim dostať?
Na riadku 34, a jednoduché pravidlo je
že môžete použiť premennú iba vnútri najnovších zložených zátvoriek
, V ktorom je deklarovaná.
>> Bohužiaľ, rad 34 je jeden riadok príliš neskoro,
pretože som už uzavretá zložená zátvorka na linke 33
, Ktorá zodpovedá zložená zátvorka na linke 30.
A tak to je spôsob, ako hovoriť že táto premenná int je rozsahom,
aby som tak povedal, len vnútri týchto zložených zátvoriek.
Je to jednoducho neexistuje mimo nich.
>> Takže naozaj, keď som to urobiť zle, dovoľte mi, aby som uložiť kód
ako to je-- nesprávne napísaný.
Nechaj ma ísť dopredu a robiť, aby funkcie 1 a notice-- chybe.
Použitie nelegálnej identifikátor n na linke 35, ktorá je tu.
A ak budeme posúvať nahor ďalší, ešte jeden.
Použitie načierno Identifikátor n na riadku 34.
>> Takže kompilátor Clang, je si všimol, že to jednoducho
neexistuje, aj keď jasne, že je to tam vizuálne.
Takže jednoduchá oprava prehlasuje ju tam.
>> Teraz mi dovoľte prejdite na v hornej časti súboru.
Čo vyskočí na vás, ako je trochu inak
od veci sme sa pozreli na minulý týždeň?
Nielen, že mám meno, a to nielen do Mám niektoré ostré patrí do top,
Mám niečo, čo som volanie prototyp.
Teraz to vyzerá strašne podobný tomu, čo sme práve videli pred chvíľou na linke 27.
>> Takže poďme vyvodiť z iného chybové hlásenie, prečo som to urobil.
Nechaj ma ísť napred a odstrániť tieto riadky tu.
A tak nevieme nič o prototyp.
Remake tohto súboru.
Vykonajte jednu funkciu.
A teraz, sakra, štyri chyby.
Poďme prejdite do prvej.
>> Implicitné deklarácia funkcie získať pozitívne int je C99 neplatný.
C99 jednoducho znamená, že v roku 1999 verzia jazyka
C, čo je to, čo sme skutočne používate.
Takže čo to znamená?
No C-- a konkrétnejšie C compilers-- sú celkom hlúpe programy.
Oni len vedia, čo ste povedal im, a to
vlastne tematická z minulého týždňa.
>> Problém je, že keď pôjdem o vykonávaní meno tu,
a zavolám funkciu nazvanú GetPositiveInt tu na riadku 20,
táto funkcia nie je technicky existovať, kým kompilátor vidí líniu 27.
Bohužiaľ, kompilátor robiť veci hore, dole, vľavo, vpravo,
tak preto, že nie je vidieť realizácia GetPositiveInt,
ale vidí snažíš používať to tu,
je to len tak bail-- kričať na ste s chybou message-- možná
mystický, a nie v skutočnosti kompiláciu súboru.
>> Tak takzvaný prototyp až Tu je síce nadbytočná.
Doslova som šiel dole a ja sem kopírovať a vložiť to, a dal som to sem.
Void by bolo správne, takže budeme doslova skopírujte a vložte ju tentoraz.
Doslova som skopírovať a vložiť ho.
Naozaj len ako ako chleba drobček.
>> Trochu vodítkom pre kompilátor.
Ja neviem, čo to robí ešte, ale ja som sľúbil, že vás
, Že bude existovať nakoniec.
A to je dôvod, prečo to line-- v linka 16-- končí bodkočiarkou.
To je nadbytočná zámerné.
Áno?
>> Ak ste prepojiť knižnicu na to-- oh, dobrá otázka.
Sharp obsahuje súbor hlavičky inklúzia.
Potrebujete, aby bylo-- by takmer vždy na samom vrchole
súboru pre similar-- pre presne rovnaký dôvod, že áno.
Vzhľadom k tomu, v štandardnej IO.H je doslova linka
ako je toto, ale so slovom printf, a s jeho argumenty a jeho návratový typ.
A tak tým, že robí ostrý obsahovať až tu to, čo ste doslova robiť
je kopírovanie a vkladanie obsahu niekoho iného spísal vrchol.
Tým cluing kód do Skutočnosť, že existujú tieto funkcie.
Jo?
>> Presne tak.
Tak veľmi šikovný a správne riešením by bolo, vieš čo?
Ja neviem, čo prototyp je, ale viem,
keď som pochopil, že C je práve hlúpi a rethinks zhora nadol.
Tak poďme dať to, čo chce.
Poďme znížiť tento kód, vložte ho do top, a teraz stlačte hlavný dole.
Aj to by malo problém vyriešiť.
>> Ale môžete veľmi ľahko prísť s scenár, v ktorom je potrebné volať B,
a možno aj B zavolá späť do A. Tento je niečo, čo nazýva rekurzia,
a vrátime sa k tomu.
A to môže alebo nemusí byť dobrý vec, ale môžete určite
zlomiť toto riešenie.
>> A navyše, ja by som tvrdí, štylisticky,
najmä keď svoje programy stať sa tak dlho a tak dlho,
je to proste super pohodlné aby hlavný hore
pretože je to vec, ktorú väčšina programátori budú sa starať o.
A tak je to trochu čistejšie, pravdepodobne, urobiť to tak, ako
Pôvodne som to urobil s prototypom i
aj keď to vyzerá trochu redundantné na prvý pohľad.
Jo?
Je nám ľúto, môžete to povedať nahlas?
>> Ak máte zmeniť umiestnenie vykonávanie a prototyp?
Tak to je dobrá otázka.
Ak znovu deklarovať to dole tu, poďme sa pozrieť, čo sa deje.
Takže ak by som to dole tu hovoríš.
Oh, ospravedlňujem sa.
Hlasnejšie?
Ešte hlasnejšie.
Oh, dobrá otázka.
By znehodnotiť funkciu?
Viete, po všetkých tých rokoch, som sa nikdy dať prototyp neskôr.
Takže poďme urobiť, aby funkcie 1 po tom, že.
>> [Mrmle]
David J. Malan: Oh, počkaj.
Stále ešte musíme dať všetko, čo sa hore.
Tak poďme na to tu, keď som pochopiť vašu otázku správne.
Dávam všetko, vrátane prototyp vyššie uvedené hlavné,
ale dávam prototyp pod prevedenie.
>> Takže keď urobím jedno, ja idem späť error-- nepoužívané premennej n.
Oh, tu.
Ďakujem vám.
Poďme sa pozrieť, zbavíme to.
To je iná chyba, tak sa poďme ignorovať.
Poďme sa veľmi rýchlo prerobiť to.
>> OK, takže dáta argument, ktorý nebol používa formátovací reťazec
n-- oh, je to preto, Zmenil som sa na to tu.
Dobre vieme, čo je odpoveď bude na-- v poriadku, ideme na to.
Aha, vďaka za pozitívny.
Tak jo, budem opraviť tento kód after-- ignorovať túto konkrétnu chybu
pretože to byl-- to funguje, je odpoveď.
>> Takže to neprepíše to, čo ste práve urobil.
Mám podozrenie, že kompilátor je napísaný takým spôsobom,
že ignoruje prototypu pretože v tele, aby som tak povedal,
z funkcie už bola vykonaná vyššie.
Ja by som skutočne konzultovať manuál prekladača
pochopiť, či existuje nejaký iný implikácie, ale na prvý pohľad
len tým, že sa snaží a experimentovanie, sa zdá, že žiadny vplyv.
Dobrá otázka.
>> Takže poďme vpred teraz, pohybujúce sa od nežiaducich účinkov, ktoré
sú funkcie, ktoré niečo také vizuálne na obrazovke printf,
ale nevracia hodnotu.
A funkcie, ktoré majú návratnosť hodnoty, ako sme práve videli niekoľko.
Už sme videli tento pojem rozsahu, a uvidíme to znova a znova.
Ale teraz znovu, použiť pravidlo
že premenná môže byť použitá iba vnútri najviac nedávno otvorila
a uzavreté zložené zátvorky, ako sme videl v tomto konkrétnom príklade.
>> A ako ste poukázal na to, je ability--
môžete vyriešiť niektoré z týchto problémov tým, že premennú globálne
na samom vrchole súboru.
Ale takmer vo všetkých prípadoch by sme sa škerí na to,
a dokonca ani ísť do tohto riešenia pre teraz.
Takže teraz, stánok s jedlom je, že premenné majú tento pojem rozsahu.
>> Ale teraz sa poďme pozrieť na ďalšie suchou cestou skutočne hľadá
na niektoré celkom zaujímavé detaily implementácie.
Ako by sme mohli reprezentovať informácie.
A my už sa na to v prvom týždni triedy.
Pri pohľade na binárne súbory, a pripomenúť si z desiatkovej sústave.
>> Ale pamätáte z minulého týždňa, že C má rôzne typy dát a zväzkov viac,
ale najužitočnejšie z nich teraz by mohli byť nasledujúce.
Char, alebo znak, ktorý sa stane byť jeden bajt, alebo ôsmich bitov celkom.
A to znamená, že veľkosť z char je len jeden bajt.
Bajt je osem bitov, tak to znamená, že môžeme predstavovať, ako veľa znakov.
Koľko písmen alebo Symboly na klávesnici
ak máme jeden byte alebo ôsmich bitov.
Spomeňte si na týždeň nula.
Ak máte osem bitov, koľko celkovej hodnoty
môžete reprezentovať s vzory núl a jednotiek?
One-- viac než to.
Takže 256 príspevkov, ak vás začína počítať od nuly.
Takže ak máte osem bits-- takže ak mali svoje binárne žiarovky tu zase,
by sme mohli zase tie žiarovky na a preč v ktoromkoľvek z 256 unikátnych vzorov.
>> Teraz je to trochu problematické.
Ani nie tak pre angličtinu a Románske jazyky, ale určite
keď sa zaviesť pre Napríklad ázijské jazyky, ktoré
majú ďaleko viac symbolov, než ako 26 písmen abecedy.
Vlastne by sme mohli potrebovať viac ako jeden bajt.
A našťastie v V posledných rokoch sa spoločnosť
Prijaté ďalšie normy, ktoré používajú viac ako jeden bajt na jedno nabitie.
>> Ale teraz v C, predvolené je len jeden bajt alebo osem bitov.
Číslo, zatiaľ, sú štyri bajtov, inak známy ako 32 bitov.
Čo znamená, že to, čo je čo najväčší číslo môžeme reprezentovať pomocou int
zrejme?
S miliardy.
Takže je to štyri miliardy dávať alebo brať.
2 k 32th moc, keby sme predpokladať žiadne negatívne čísla
a stačí použiť všetky pozitívne čísla, je to štyri miliardy
dávať alebo brať možnosti.
Float, zatiaľ, je iný typ dátového typu v jazyku C. Je to stále číslo,
ale je to reálne číslo.
Niečo s desatinnou čiarkou.
A ukázalo sa, že C tiež používa štyri bajty
predstavujú plávajúce bodové hodnoty.
>> Bohužiaľ, koľko plávajúce bodové hodnoty sú tam vonku vo svete?
Koľko reálne čísla sú tam?
Tam je nekonečný číslo, a keď na to príde
tam je nekonečne veľa celých čísel.
Takže sme už trochu kopať sami dieru tu.
Kedy zrejme v computers-- na najmenej programy napísané v jazyku C na them--
môže počítať len tak vysoko, ako štyri miliardy dávať alebo brať,
a plávajúcou desatinnou čiarkou hodnoty môže len zdanlivo
nejaké konečné množstvo presnosti.
Iba toľko číslic za ich desatinného miesta.
>> Vzhľadom k tomu, samozrejme, ak máte iba 32 bitov,
Neviem, ako sme ísť o predstavuje skutočnú numbers-- pravdepodobne
s rôznymi typmi vzorov.
Ale je tu určite konečný počet týchto vzorov,
tak aj tu, je to problematické.
>> Teraz môžeme ľahko vyhnúť problému.
Ak nechcete používať plavák, môžete použiť double
v jazyku C, ktorá vám dáva osem bajtov, ktoré je spôsob, ako viac možných vzory núl
a ty.
Ale je to ešte konečný, čo sa deje byť problematické, ak budete písať softvér
pre grafiku alebo fantázie matematické vzorce.
Takže môžete skutočne chcú spočítať väčšie, než je.
Dlhý long-- hlúpo named-- je tiež osem bajtov, alebo 64 bitov
a je dvakrát tak dlhá ako int, a je to na dlhú celočíselnú hodnotu.
>> Fun fact-- ak int je štyri byty, ako dlho je dlho v C zvyčajne?
Aj štyri byty, ale long long je osem bajtov,
a to je z historických dôvodov.
>> Ale stánok s jedlom teraz je len, že dáta
byť zastúpené v computer--, ktorá je fyzické zariadenie s elektrinou,
to je všeobecne riadenie tie nuly a ones--
s konečnými sumami presnosti.
Tak v čom je problém, a potom?
>> No je tu problém celočíselného pretečeniu.
Nie je to len v C, ale v počítača všeobecne.
Napríklad, ak je toto je bajt stojí bit--
takže ak je osem bit-- všetko z ktorých je číslo jedna.
Aké číslo je to predstavuje, ak budeme predpokladať,
je to všetky pozitívne hodnoty v binárnej?
>> 255, a to nie je 256, pretože nula je najnižšie číslo.
Takže 255 je najvyšší jeden, ale problém
Predpokladajme, že som chcel, aby zvýšiť túto premennú, ktorá
používa osem bitov celkom keď chcem ju zvyšovať.
>> No, akonáhle som sa pridať jeden až všetky tieto tých,
môžete snáď predstaviť visually-- len ako nesúce jedno použitie decimals--
niečo deje prúdiť doľava.
A skutočne, keď som pridať číslo kto to, čo sa deje v binárnej
je to, že preteká späť na nulu.
>> Takže ak ste len use-- nie je int, ale jeden bajt počítať celé čísla
v programe, podľa default-- akonáhle sa dostanete na 250, 251, 252, 253, 254,
255-- 0 prichádza po 255, čo asi nie je to, čo
užívateľ bude očakávať.
>> Teraz zatiaľ v plávajúcou desatinnou čiarkou svet, Máte tiež podobný problém.
Ani nie tak s najväčšou number-- aj keď je to stále problém.
Ale s množstvom presnosti že môžete reprezentovať.
Takže poďme sa pozrieť na tento príklad Tu tiež od dnešného zdrojového code--
float-0.c.
>> A všimnite si, že je to super Jednoduchý program, ktorý
by zrejme vytlačiť, akú hodnotu?
Čo si staviť, že to bude tlačiť aj keď tam je trochu novou syntaxou
tu?
Tak dúfajme, že 0.1.
Takže ekvivalent jednu desatinu pretože robím 1 deleno 10.
Ja uloženie odpoveď v premennej s názvom f.
Že premenná je typu float, ktorý je kľúčové slovo, len som navrhol existoval.
>> Sme nevideli predtým, ale to je celkom elegantný spôsob, ako v printf
určiť, koľko číslic ste chcú vidieť po desatinnou čiarkou.
Takže tento zápis znamená len že tu je zástupný symbol.
Je to pre plávajúcou desatinnou čiarkou hodnota, a oh, mimochodom,
ukázať, že s desatinnou čiarkou s jedno číslo za desatinnou čiarkou.
Tak to je číslo platných číslic,
aby som tak povedal, že možno budete chcieť.
>> Tak nechaj ma ísť ďalej a robiť ako plavák-0, ./float-0,
a zrejme 1 deleno 10 je 0.0.
A teraz, prečo to je?
>> Tak znovu, je počítač s ma doslova, a napísal som 1
a písal som 10, a hádať, čo je predpokladaný typ dát u týchto dvoch
hodnoty?
Int, je to technicky niečo trochu iné.
Je to zvyčajne dlho, ale je to nakoniec integrálne hodnota.
Nie je hodnota s plávajúcou čiarkou.
>> Čo znamená, že ak je táto je int a to je int,
Problém je, že v počítači nemá schopnosť
dokonca uložiť tento desatinnou čiarkou.
Takže keď urobíte jeden rozdelený od 10 pomocou čísel
ako čitateľa a menovateľ, odpoveď by mala byť 0,1.
Ale pretože computer-- tie sú integers--
nevie, čo má robiť s 0,1.
>> Takže to, čo je jasne robí?
Je to len hádzanie je preč, a to, čo som videl v konečnom dôsledku
0.0 len preto, že som trval na tom, že printf ukáž mi jedno desatinné miesto.
Ale problém je, že ak deliť celé číslo na celé číslo,
budete get-- podľa definície z C-- celé číslo.
A že to nebude robiť niečo pekné a pohodlne
ako koleso to až do Najbližšie jeden hore alebo dole.
Bude to skrátiť všetko za desatinnou čiarkou.
>> Takže len intuitívne, čo je pravdepodobne opraviť?
Čo je to najjednoduchšie oprava tu?
Jo?
Presne tak.
Prečo sa jednoducho správať ako ty efektívne s plávajúcou desatinnou čiarkou hodnoty
a premenili ich v plavákmi alebo štvorhra.
A teraz keď to urobím, aby plaváky-0, alebo keď som zostaviť plaváky-1,
, Ktorý je totožný s to, čo bolo práve navrhla.
A teraz som to pláva-0, teraz budem mať 0,1.
>> Teraz je to úžasné.
Ale teraz budem robiť niečo trochu iné.
Som zvedavý na to, čo je naozaj deje pod kapotou,
a budem tlačiť sa na 28 desatinných miest.
Chcem naozaj vidieť 0.1000-- infinite--
[Nepočuteľné] 27 nuly po tej 0,1.
>> No uvidíme, či to je to, čo som naozaj dostanete.
Uistite sa pláva-0 rovnaký súbor.
./floats-0.
Poďme sa zamerať na dramatické odpoveď.
Celú tú dobu, čo ste boli myslenie 1 deleno 10 je 10%, alebo 0,1.
To nie.
Aspoň pokiaľ ide Počítač je znepokojený.
>> Teraz why-- OK, to je kompletný lož 1 deleno 10 je 0,1.
Ale to nie je why-- stánok s jedlom dnes.
Tak prečo sa počítač myslieť, Na rozdiel od nás všetkých v miestnosti,
že 1 deleno 10 je v skutočnosti, že blázon hodnota?
Čo je to počítač robí zrejme?
Čo je to?
>> Nie je to pretečeniu, sama o sebe.
Pretečeniu je typicky pri obtekanie okolo hodnoty.
Je to otázka nepresnosti v hodnota s plávajúcou čiarkou
kde máte len 32 alebo možno aj 64 bit.
Ale ak tam je nekonečný počet reálnych numbers--
čísla s desatinnými miestami a čísla thereafter-- iste
si nemôže predstavovať všetky z nich.
Takže počítač uvedený nám najbližší zápas
na hodnotu, môže predstavovať, že pomocou počet bitov na hodnotu vlastne chcem,
čo je 0,1.
>> Bohužiaľ, ak máte začať robiť matematiku, alebo si
začiatok zahŕňajúce tieto druhy plávajúce bodovej hodnoty vo významných programs--
finančný softvér, vojenskej software-- čokoľvek
kde je vnímanie asi dosť dôležité.
A začnete pridávať čísla, ako je tento, a začiatok
beží, že softvér s naozaj veľkými vstupmi
alebo mnoho hodín alebo šarží dní alebo veľa rokov,
Tieto malinké chyby Iste možno pridať až v priebehu času.
>> Teraz ako stranou, ak ste niekedy Videl Superman 3 alebo kancelárske priestory
a vy by ste mohli vyvolať ako ti chlapci ukradli
veľa peňazí zo svojho počítača pomocou plávajúce bodovej hodnoty
a sčítaním malý Zvyšky, dúfajme, že film
teraz dáva väčší zmysel.
To je to, čo bolo zmieňovať sa v tom filme.
Skutočnosť, že väčšina spoločnosti nebude vyzerať
Po určitom počte desatinných miest,
ale to sú zlomky centov.
Takže začnete pridávať ich do, môžete začať robiť veľa peňazí
na váš bankový účet.
Tak to je Kancelárske priestory vysvetlil.
>> Teraz bohužiaľ mimo Kancelárske priestory, tam
sú niektoré oprávnene trápi a významné dopady
z týchto druhov podkladové rozhodnutia dizajn,
a naozaj jeden z dôvodov, používame C v priebehu
je tak, že máte skutočne tento dôvod up pochopenie toho, ako počítače pracujú,
ako softvér funguje, a nie brať nič ako samozrejmosť.
>> A skutočne bohužiaľ, aj keď že základné porozumenie,
my ľudia robia chyby.
A to, čo si myslel, som, že podeliť sa to osem minút video tu prijatá
z epizódy Divy, ktoré je vzdelávacie reláciu o tom, ako veci fungujú
že maľuje dva obrázky kedy nesprávne použitie
a porozumenie plávajúce čiarkou
viedli k niektorým významným nešťastné výsledky.
Poďme sa pozrieť.
[PREHRÁVANIE]
-My Teraz vrátiť k "inžinierstvo Katastrofy "na Divy.
Počítača.
Všetci sme si zvykli na často nepríjemné problémy, ktoré
Dostal sa them-- chyby, vírusy a Softvér glitches-- pre malé ceny
zaplatiť za pohodlie.
Ale v high-tech a vysokou rýchlosťou vojenské a vesmírny program aplikácie,
najmenší problém môže sa zväčší do katastrofy.
>> Dňa 04.6.1996 spracovali vedci začať bezpilotné Ariane 5 rakety.
To niesol vedecké satelity navrhnutý
stanoviť presne, ako Zemské magnetické pole interaguje
so solárnymi vetry.
Raketa bola postavená na Európska kozmická agentúra,
a zdvihol sa od svojho zariadenia na pobreží Francúzskej Guyany.
>> -na Asi 37 sekúnd do rokov, sa prvýkrát
Všimol niečo zle.
Že sa trysky sa otáčania takým spôsobom, že by sa mal naozaj nie.
Okolo 40 sekúnd do letu, jasne vozidlo bolo v ťažkostiach,
a to je, keď oni robili rozhodnutie o jeho zničenie.
Bezpečnostný dôstojník rozsah, s obrovské čreva, stlačil tlačidlo
a vyhodil raketu pred tým, než mohol byť nebezpečné pre verejnú bezpečnosť.
>> Toto bola panna plavba Ariane 5,
a jeho zničenie sa miesto, pretože vady
vložené do softvéru rakety.
-The Problém na Ariane bolo, že
bolo číslo, ktoré vyžaduje 64 bitov na vyjadrenie,
a chceli previesť je na 16-bitové číslo.
Predpokladali, že počet sa nikdy nebude moc veľký.
Že väčšina z týchto číslic v 64-bitové číslo bolo nulové.
Sa mýlili.
>> -The Neschopnosť jedného softvér prijať
druh číslo generované iný bol pri koreni zlyhania.
Vývoj softvéru sa stala veľmi nákladné súčasťou novej technológie.
Ariane 4 Raketa mala bola veľmi úspešná.
Toľko softvéru vytvoreného pre bola tiež použitá v Ariane 5.
>> -The Základným problémom bolo to, že Ariane 5.
Bola faster-- zrýchlil rýchlejšie, a softvér sa neúčtuje za to.
>> -The Zničenie rakety Bola to obrovská finančná katastrofa.
Všetko kvôli chybe minút softvéru.
Ale to nebol prvý problémy konverzie dát časovej
sužoval modernej raketovej techniky.
>> -V 1991 so začatím z prvej vojny v Perzskom zálive,
Patriot raketa zažil podobný typ
problému konverzie číslo.
A ako výsledok 28 lidé-- 28 Americkí soldiers-- bolo zabitých,
a asi sto ďalších zranených.
Keď Patriot, ktorý mal na ochranu proti prichádzajúce pláva,
nedokázal vystreliť raketu.
>> Kedy Irak napadol Kuvajt, a Ameriku začala Púštna búrka na začiatku roku 1991,
Patriot raketové batérie boli rozmiestnené k ochrane Saudskej Arábie a Izrael
od irackých Scud raketových útokov.
Patriot je stredného doletu US povrch-k-vysielať systém
vyrábané spoločnosťou Raytheon.
>> -veľkosť Patriot Interceptor itself--
Je to o približne 20 metrov dlhá, a váži asi 2.000 libier.
A to so sebou nesie bojovú hlavicu asi, Myslím, že to je zhruba 150 libier.
A hlavica je sám o sebe vysoko výbušný, ktorý
má fragmenty okolo neho.
Takže puzdro hlavica je navrhnuté tak, aby konala ako brokovnice.
>> -The Rakety sú vykonávané štyri kontajnera,
a sú prepravované na návese.
>> -The Patriot Protiraketový systém siaha najmenej 20 rokov.
Pôvodne bol vyvinutý ako protilietadlová raketová
zostreliť nepriateľské lietadlá.
V prvej vojne v Perzskom zálive keď tá vojna prišla,
Armáda chcela používať to, aby zostreliť pláva, nie lietadiel.
Iracké letectvo bolo nie je tak veľký problém,
ale armáda bola starosti pláva.
A tak sa snažili upgrade Patriot.
>> -Intercepting Nepriateľa raketa jede Mach 5
sa bude dosť náročné.
Ale keď Patriot bol behave do prevádzky,
armáda nebola vedomá Iracký zmena, ktorá
z ich Pláva takmer nemožné nej.
>> Čo sa stalo je, že pláva prichádzali boli nestabilné.
Boli vratký.
Dôvodom bola Iraqis-- za účelom získania 600 km z
na 300 kilometrov rozsah missile-- vzal váhu z prednej hlavice,
a robil hlavice ľahší.
Takže teraz Patriot sa snaží prísť na Scud, a väčšina z time--
Drvivá väčšina time-- by to proste lietať plávať.
>> -Akonáhle Prevádzkovateľov Patriot systému si uvedomil, že Patriot minul svoj cieľ,
oni odpálili Patriot v hlavici aby sa zabránilo možným nehodám prípade, že
mala dovolené sa dostať na zem.
>> To bolo to, čo väčšina ľudí videla ako veľké ohnivé gule na oblohe,
a nepochopený ako zachytí Scud hlavíc.
>> -Although V nočnej oblohe, Patriots Zdalo sa, že úspešne ničiť
Pláva, na zahranie by mohlo byť žiadna chyba o jeho výkone.
Tam radarový systém Patriot stratil na prichádzajúce Scud
a kvôli nikdy zahájená na softvérové ​​chyby.
>> Boli to Izraelčania, ktorí ako prví objavili , Že čím dlhšia je systém bol na,
väčší časový rozdiel sa stala.
Vzhľadom k hodinami vloženej v počítači v systéme.
>> -Asi Dva týždne pred tragédie v Dhahran,
Izraelčania údajne Ministerstvo obrany
, Že systém stráca čas.
Po asi osem hodín chodu, oni si všimli
že systém je stále znateľne menej presné.
Ministerstvo obrany odpovedal tým, že rozprávanie všetkých batérií Patriot
nenechať systémy na dlhú dobu.
Oni nikdy nepovedal, čo dávno bolo.
8 hodín, 10 hodín, tisíce hodín.
Nikto nevedel.
>> -The Patriot batérie umiestnený v kasárňach
na zahranie a jeho chybná interné hodiny bol na viac ako 100 hodín
v noci 25. februára.
>> -je Sledovať čas s presnosťou asi desatina sekundy.
Teraz desatiny sekundy je zaujímavé číslo
pretože nemôže byť vyjadrená v binárnom presne, čo
znamená, že nemôže byť vyjadrený presne v každom modernom digitálnom počítači.
Je ťažké tomu uveriť, ale použiť ako príklad.
>> Vezmime číslo tretina.
Jedna tretina nemôže byť vyjadrené v desiatkovej sústave presne.
Jedna tretina je 0,333 deje na nekonečno.
Neexistuje žiadny spôsob, ako to urobiť, aby sa absolútna presnosť v desiatkovej sústave.
To je presne ten druh problému ktoré sa stalo v Patriot.
Čím dlhšia je systém bežal, horšie sa stal time error.
>> -po 100 hodinách prevádzky, Chyba v tej dobe bol len asi tretina
sekundy.
Ale pokiaľ ide o zameranie raketa jede Mach 5,
to viedlo k sledovaniu chyba viac ako 600 metrov.
Bolo by fatálna chyba pre vojakov v zahrani.
>> Čo sa stalo so Scud štart bol zistená pomocou satelitov včasného varovania,
a vedeli Scud sa blíži v ich všeobecnom smere.
Nevedeli, kde to prichádza.
Bolo teraz na radare súčasť systému Patriot
brániť zahraní nájsť a udržať dráha prichádzajúce nepriateľské rakety.
>> -The Radar bol veľmi šikovný.
To by v skutočnosti sledovať pozície Scud
a predvídať, kde to asi bude
nabudúce radar poslal pulz von.
To sa nazýva rozsah brána.
>> -Potom Akonáhle Patriot rozhodne dosť času má
prešiel sa vrátiť a skontrolovať ďalšie miesto pre tento detekovaným objektom
sa vracia.
Takže keď sa vrátil do zlej miesto, to potom nevidí žiadny objekt.
A rozhodne, že neexistuje žiadny objekt.
To bolo falošné detekcie a to klesne stopu.
>> -The Prichádzajúce Scud zmizol z obrazovky radaru,
a sekúnd neskôr ho narazila do kasární.
Scud zabil 28.
To bolo posledné, kto vystrelil počas prvej vojny v Perzskom zálive.
Je tragické, že aktualizovaný softvér prišiel za úsvitu nasledujúceho dňa.
Softvér vada mala bolo pevné, zatváracie
jedna kapitola v problémovej História Patriot rakety.
>> [END Videoprehrávanie]
>> David J. Malan: To je pre CS50.
Uvidíme sa v stredu.
>> [Prehrávanie hudby]