>> [Muusika mängimine]
DAVID J. Humala: Olgu.
See on CS50 ja see on alguse nädal kaks.
Seega alustagem täna viga.
Viga, on muidugi see, viga programmi
ja saad väga tuttav selle mõiste
Kui sa pole kunagi programmeeritud enne. pset0 ja nüüd pset1.
Kuid olgem kaaluma midagi väike lihtne esimesel.
See programm siin, et ma viskasin koos ette,
ja ma väita, et see peaks printida 10 tähte ekraanile printf,
aga see on ilmselt lollakas mingil moel.
>> Kuna sama spetsifikatsiooniga tuleb trükkida 10 tähte,
kuid see ei ole ilmselt, mida oleks sa väidad on viga?
Jah?
Nii et see on maha üks viga, ja mida sa mõtled?
OK.
Suurepärane.
Nii et me oleme määratud alustada väärtus null i,
ja me oleme määratud n väärtus 10, aga meil kasutada on väiksem või võrdne.
Ja põhjus, et see on kahe tegelased ja mitte ainult ühe sümboli,
nagu matemaatika raamat, on see, et sa ei pea
viis väljendada üks märk samaväärne.
>> Nii et see tähendab alla, kuid kui hakkad nullist,
aga loete kõik viis üles läbi ja võrdub 10,
sa oled muidugi läheb loe 11 asjad kokku.
Ja nii sa lähed printida 11 tähte.
Niisiis, milline võiks olla fix selle eest?
Jah?
>> Nii lihtsalt reguleerida alla või võrdne lihtsalt olla väiksem,
ja seal ma väita, võibolla teine ​​lahendus ka.
Mida võiks veel teha?
Jah?
>> Nii algab võrdub see 1 ja jätnud väiksem või võrdne.
Ja ausalt öeldes ma väita, , et tüüpiline inimese,
see on ilmselt rohkem arusaadav.
Alusta lugedes 1 ja arvata kokku kuni 10.
Sisuliselt seda, mida sa mõtled.
>> Kuid reaalsus on programmeerimine, nagu me oleme näinud,
infotehnoloogid ja programmeerijad üldiselt ei hakata nullist.
Ja nii see on hea, kui sa harjud sellega.
Teie seisundit üldiselt olla midagi alla.
Nii lihtsalt loogiline viga, et me võiksime nüüd
määrata ja lõpuks uuesti kompileerima see ja saada just 10.
>> Noh, kuidas sellest veast siin?
Ka siin, ma väita, et mul on Eesmärk trükkimine 10 stars--
üks rea seekord, kuid see ei ole.
Enne teeme ettepaneku, mis fix on, mida see
prindi visuaalselt kui ma kompileerida ja käivitada see programm sa arvad?
Jah?
>> Star.
Nii et kõik tähed Sama liin on see, mida ma kuulsin,
ja siis reavahetusmärki.
Nii et proovime seda.
Nii et lollakas-1, sisestada, ja ma näen rõkkama käsk
et me rääkisime eelmisel korral.
./buggy-1, ja tõesti ma näen kõiki 10 tärni samal liinil, kuigi ma väita,
minu spetsifikatsioon lihtsalt kommentaar atop kood, mis ma ette teha ühe inimese kohta
line.
Aga see tundub õige.
>> Nüüd line 15 tundub, et ma olen trükkimine star, ja siis joon 16
tundub, et ma olen trükkimine reavahetusmärki,
ja nad mõlemad liigestatud nii Ma olen sees silmus selgelt.
Nii et ma ei peaks seda tegema star, uus line, star, uus liin, star, uus liin?
Jah?
>> Jah, erinevalt keeles nagu Python, kui te olete juba tuttav,
taandus ei loe arvutiga.
See vaid tähtis inimene.
Samas kui siin olen leiutanud read 15 ja 16-- mis näeb välja ilus,
kuid arvuti ei hooli.
Arvuti hoolib tegelikult võttes looksulg
ümber nende rida koodi.
>> Nii et see on selged-- just nagu Scratch-- et need kaks rida koodi
tuleks täita.
Nagu üks neist kollastest Scratch puzzle tükki uuesti ja uuesti ja uuesti.
>> Nüüd, kui ma uuesti käivitada program-- ./buggy-2-- Hm.
Mul on viga kohe.
Mida ma unustada seda teha?
Jah, ma ei kompileerida.
Nii et lollakas-2.
No sellist faili, sest ma ei tegelikult kompileerida teine ​​versioon.
Nüüd huvitav deklareerimata variable-- mitte 2.
Me teeme 1.
Tee lollakas-1-- ./buggy-1-- ja nüüd igaüks neist on samal joonel.
>> Nüüd on erand see peaks nõude kaevanduse
et sa pead need looksulg.
Millal on tegelikult OK-- kui olete märganud jaos või textbooks--
jätta looksulg?
Jah?
>> Täpselt.
Kui seal on ainult üks rida koodi, mis sa
soovi olla seotud loop nagu meie esimene näide.
See on täiesti õigustatud jätta looksulg
just nagu omamoodi mugavuse alates koostaja teile.
Jah?
Hea küsimus.
Kas see loetakse stiilis vea?
Soovime promote-- nagu CS50 stiili juhend, URL, mille
on pset1-- et alati kasutada looksulg.
Muidugi, kui sa oled uus programmeerimine.
Reaalsus on see, et me ei ole läheb keela teil
tegemast neid mugavustega.
Aga kui sa oled lihtsalt saada pöörduks asju,
absoluutselt vaid kasutage alati lokkis traksid, kuni sa saad aru saama sellest.
Hea küsimus.
>> Olgu.
Nii et siis oli viga.
Vähemalt midagi üsna lihtne.
Ja veel sa võiksid mõelda selle on algelised, eks?
See on justkui esimese nädala vaadeldes keel
nagu näha oma vigu seal.
Kuid reaalsus on need tegelikult esindaja
on päris hirmutav probleeme mis võivad tekkida reaalses maailmas.
>> Nii et mõned teist võivad meenutada kui te järgite tech news,
või isegi püütud tuul selle aasta veebruaris
Selle viimase aasta jooksul, et Apple oli tehtud natuke viga nii iOS,
operatsioonisüsteem nende telefonid ja ka
Mac OS operatsioonisüsteemi nende lauaarvutid ja sülearvutid.
Ja nägid sellised pealkirjad nagu see.
Ja pärast seda, Apple lubas määrata see viga,
ja väga kiiresti ei paranda iOS, aga siis lõpuks fikseeritud see Mac OS
samuti.
>> Nüüd ükski neist pealkirju üksi tõesti paljastada, mis Põhiprobleem oli,
aga viga oli lõpuks vähendatakse viga SSL Secure Sockets Layer.
Ja pikk lugu lühike, see tarkvara
et meie brauserid ja muu tarkvara, mida kasutatakse tee mida?
>> Kui ma ütlesin, et SSL on kaasatud, kui sa
külastage URL, mis algab HTTPS, Mis siis võiks SSL olla seotud?
Krüpteerimist.
Nii et me räägime see lähipäevil.
Encryption, kunst skrambling teavet.
>> Aga pikk lugu lühike, Apple millalgi tagasi oli teinud vea
nende rakendamise SSL, tarkvara, mis lõppkokkuvõttes viib
Aadresse nagu HTTPS või max ühendused ka seal.
Mille tulemuseks on, et teie ühendused võivad tekkida
kinni pidada.
Ning ühendused olid pruugi krüptitud
kui teil on olnud halbu mees vahel te ja sihtveebisaidi kes
teadis, kuidas seda ära kasutada.
>> Nüüd Apple lõpuks postitatud määrata selle lõpuks
ja kirjeldus nende fix oli see.
Turvaline transport ei kinnita autentsuse ühendus.
Teemat käsitlenud taastada puuduvad kinnitamine samme.
>> Nii et see on väga käsi laineline selgitus jaoks lihtsalt, et me silmamunad.
Seal on sõna otseses mõttes üks rida koodi, mis oli lollakas
nende rakendamise SSL ja Kui sa lähed online ja otsida
tegelikult võite leida algallika koodi.
Näiteks on see ekraanipilt ainult osa üsna suur fail,
kuid see funktsioon ilmselt nimetatakse SSL kontrollida märk server võtme vahetamine.
Ja see võtab kamp argumendid ja sisendeid.
Ja me ei kavatse keskenduda liiga palju eritunnuste seal,
aga kui teil keskenduda koodi sees selle tähtsaim funktsioon-- olgem
suurendada ka.
Sul võib juba arvata, mis viga võiks
isegi kui sa ei tea, lõpuks, mida te vaatate.
Seal on selline anomaalia siin, mis on mis?
>> Jah, ma tõesti ei meeldi välimuse kaks goto ebaõnnestub.
Ausalt, ma tõesti ei tea, mida goto ebaõnnestuda teel, kuid millel on kaks neist
tagasi tagasi.
See lihtsalt selline röövib mind intellektuaalselt valesti,
ja tõesti, kui me suumida ainult need read, see on C.
>> Nii palju Apple'i kood on ise kirjutatud C,
ja see ilmselt on tõesti equivalent--
mitte et päris taandus versioon, aga kui sa tunnistama asjaolu,
et pole looksulg, mida Apple tõesti kirjutas oli kood, mis näeb
niimoodi.
Nii et ma olen suumitud välja ja ma lihtsalt fikseeritud süvend mõttes
et kui pole looksulg, et Teine goto suuda see kollane
läheb täide ükskõik mida.
See ei ole seotud kui tingimus kohal.
>> Nii et isegi uuesti, kui sa ei ole päris mõista, mida see võib minna
on teinud, teavad, et kõik need conditions-- nende joonte
on väga oluline samm aastal protsessi kontrollimiseks
Kui teie andmed on tegelikult krüpteeritud.
Niisiis vahele üks neist meetmeid, ei ole parim idee.
>> Aga kuna meil on see Teine goto ei kollasena
ja siis, kui oleme omamoodi esteetiliselt
liigutada vasakule, kus see loogiliselt on hetkel, mida
kas see tähendab, et liin koodi alla, et teine ​​goto
ei oleks te arvate?
See on alati saab vahele jätta.
Nii gotos üldiselt kortsutas kulmu põhjustel me tegelikult ei lähe,
ja tõepoolest CS50 me ei kipu õpetada seda avaldust goto,
aga sa ei mõtle goto ei suuda nii minna hüpata
mõnede teiste osa koodi.
>> Teisisõnu hüpata üle see viimane rida kokku,
ja nii tulemus see loll lihtne viga, et oli lihtsalt
tulemus ilmselt keegi kopeerige üks liiga
mitu korda oli kogu turvalisuse iOS ja Mac OS
oli haavatav pealtkuulamine halvad poisid juba mõnda aega.
Kuni Apple lõpuks kindlaks selle.
>> Nüüd, kui mõned teist on tegelikult töötab vana versiooni iOS või Mac OS,
võite minna gotofail.com mis on veebisait, et keegi luua
sisuliselt kindlaks programmiliselt
Kui teie arvuti on endiselt ohustatud.
Ja ausalt öeldes, kui see on see on ilmselt hea mõte
uuendada oma telefoni või Mac selles punktis.
Aga seal, vaid märk sellest, kuidas tunnustust nende madalama
detailid ja õiglaselt lihtne ideid võib tõesti
tõlkida otsused ja probleeme, mis
affected-- selles juhul-- miljoneid inimesi.
>> Nüüd sõna manustamist.
§ algab sel pühapäeval.
Te saate e-posti teel nädalavahetusel umbes lõik, misjärel
resectioning protsess algab, kui olete
avastasin, et sa nüüd mõned uued konfliktid.
Nii juhtub igal aastal, ja me mahutab päevil tulla.
>> Office hours-- tegema hoida silma peal ajakava siin.
Muudab natuke sel nädalal eriti algusaeg
ja asukoha, nii et ärge nõu et enne pealkirja tööaega
iga järgmise nelja ööd.
Ja nüüd sõna hinnangu eriti kui sa sukelduda probleem
määrab üks ja kaugemalgi.
>> Nii ühe spetsifikatsiooni, need on tavaliselt
piki mis me hinnata oma tööd.
Ulatus viitab sellele, mida määral oma koodi rakendab
funktsioone vaja meie spetsifikatsioon.
Teisisõnu, kui palju osaline komplekt sa hammustada.
Kas sa tegid kolmandiku see, pool sellest, 100% ära.
Isegi kui see ei ole õige, Kui palju te üritate?
Nii et lööb tasemel vaeva ja kogus
kuhu hammustasime Ülesanded probleeme.
>> Correctness-- see, et Mil määral on oma kood
kooskõlas meie kirjeldused ja vigadeta.
Nii et see töötab korralikult?
Kui me anname seda mõned sisend, kas see anna meile väljund, et me ootame?
Design-- nüüd see on esimene eriti kvalitatiivsed,
või need, mis nõuavad inimese hinnangul.
Ja tõepoolest, see on põhjus, miks meil on töötajad nii palju õpetamise stipendiaatide ja muidugi
assistendid.
Mil määral on Teie kood kirjutatud hästi?
>> Ja samas on see väga kvalitatiivne hindamine
mis töötab koos teiega kahesuunaliselt nädalatel tulla.
Nii et kui sa ei ainult numbriline hinded, vaid ka
kirjutatud tulemusi või trükitud tagasiside või kirjalikku tagasisidet inglise sõnad.
See, mida me kasutame, et juhtida teid suunas tegelikult kirjalikult paremini kood.
Ja loeng ja lõik, püüame juhtida minemas-- nii tihti kui me saan--
teebki programmi mitte ainult õige ja funktsionaalselt hea,
vaid ka hästi disainitud.
Kõige tõhusam võiks olla, või isegi kõige ilus see olla võib.
>> Mis viib meid stiilis.
Style lõpuks on esteetiline kohtuotsus.
Kas sa valida hea nimed oma muutujad?
Oled sa liigestatud oma koodi õigesti?
Kas see tundub hea, ja seetõttu see on lihtne teise inimese
lugeda oma vastavate selle õigsust.
>> Nüüd tavaliselt ühe õppekava, me koguda need asjad on viie punkti skaalal.
Ja las ma haamer kodus punkt et kolm on tõesti hea.
Väga kiiresti teha inimesed alustada teed aritmeetika.
Kui nad kolm välja viie aasta õigsuse mõned pset
ja nad arvavad, et kurat, mul läheb 60% mis on sisuliselt D või E.
>> See pole nii, nagu me mõtle neid numbreid.
Kolm on tõesti hea, ja see, mida me üldiselt oodata alguses
mõiste on see, et kui te saate hunnik three's-- võibolla paar
messide, paar fours-- või Paar kahed paar fours--
see on hea koht alustamiseks.
Ja nii kaua, kui me näeme, ülespoole trajektoori aja jooksul,
sa oled eriti hea koht.
>> Valem, mida me kasutame kaal asjad on sisuliselt
Selle kohta ainekava, mis tähendab lihtsalt, et me
anda rohkem kaalu õigsuses.
Sest see on väga sageli õigsust mis võtab kõige rohkem aega.
Usu mind nüüd.
Sa find-- vähemalt ühes pset-- et sa
veedavad 90% oma ajast töötab 10% probleem.
>> Ja kõik omamoodi töötab välja arvatud üks või kaks vigu,
ja need on vead, mis hoiab sind kuni hilisõhtuni.
Need on need, mis omamoodi põgeneda sind.
Aga pärast magab see, või käivad tööaega
või esitada küsimusi online, on kui saad, et 100% eesmärk,
ja sellepärast me kaal õigsuse kõige rohkem.
Disain veidi vähem, ja stiili veidi väiksem.
Kuid pidage mind-- stiil on ehk kõige lihtsam
Nende hammustada off ühe stiili juhend.
>> Ja nüüd, raskemad tähele akadeemilise aususe.
CS50 on kahetsusväärne vahet on suurim tootja Ad Board
juhtudel peaaegu igal aastal läbi aegade.
See ei ole, sest õpilased petta CS50 enam nii kui ükski teine ​​klass,
vaid sellepärast, et oma olemuselt on töö, Asjaolu, et see elektrooniline,
Asjaolu, et me vaatame seda, ja Tegelikult oleme infotehnoloogid,
Ma võin öelda, et meil on kahjuks väga hea avastada see.
>> Nii et mida see tähendab reaalselt?
Seega, iga ainekava, Muidugi filosoofia
tõesti Keeta olema mõistlik.
On see piir teed ühe töö oma
ja saada natuke mõistlikku abi oma sõbralt,
ja lausa teed, et töö oma sõber või saates talle oma koodi
nii et ta saab lihtsalt võtta või laenata see välja küll.
Ja mis läbib liin et me tõmmatud klass.
>> Vaata, õppekava lõppkokkuvõttes read
et tõmbame nagu oleks mõistlik ja ebamõistlik käitumine,
kuid see tõesti ei keeda alla sisuliselt
oma tööd, kellel on vaja olla oma lõpuni.
Nüüd, mis ütles, on heuristiline.
Sest kui sa võiksid kujutan ametist tundi ja visuaalid
ja videos me oleme näidatud seega kaugelt-- CS50
on tõepoolest mõeldud koostööl ja kui ühistu ja sotsiaalse
kui võimalik.
Kuna koostöö, nagu see on range.
>> Aga see ütles, heuristiline, nagu näete ainekava,
on see, et kui sul on mingi probleem.
Teil on viga teie koodi, mida ei saa lahendada, on mõistlik teile
näidata oma koodi kellelegi teisele.
Sõber isegi klassi sõbrale istub teile tööaega
või personali liige.
Aga nad ei pruugi oma koodi teile.
>> Teisisõnu vastata oma question--
Vajan help-- ei oh, siin on minu kood.
Heitke pilk see ja järeldada seda, mida soovite.
Nüüd, muidugi, seal on selgesti mängu
see süsteem, kus ma näitan sulle minu kood enne, kui küsimus.
Sa näita mulle mu oma koodi enne, kui küsimus.
Aga vaata ainekava uuesti peenemaid üksikasju, kui see liin on.
>> Just nüüd maalida pilt ja jagada võimalikult läbipaistvalt
kus me oleme viimastel aastatel see on arv, Ad Board juhtudel
et CS50 on olnud üle Viimase seitsme aasta jooksul.
14 juhul on see viimaste sügisel.
Seoses üliõpilastele, see oli 20 mõned kummalised õpilased
Möödunud sügisel.
Seal oli tipp 33 üliõpilased mõned aastad tagasi.
Paljud neist on kahjuks pole enam siin ülikoolilinnakus.
>> Õpilased osalevad protsendina klass on ajalooliselt vahemikus 0%
5,3%, mis on ainult öelda See on igal aastal suur väljakutse.
Ja suunas, et lõpuks, mida me tahame teha, on edasi üks
et me dd-- lihtsalt FYI-- võrrelda kell õiglus neile õpilastele, kes
on järgmine rida vastavalt.
Teeme võrrelda kõiki praegusi väidetele vastu kõik viimase missioone
alates viimase mitu aastat.
>> Me teame ka, kuidas Google ümber ja leida koodi hoidlates
online, foorumeid online, töö sites online.
Kui üliõpilane ei leia seda, mida suudame kindlasti leiavad, et nii palju kui me kahjuks teha.
Niisiis, mida näete ainekava kuigi see on kahetsusväärne klausel.
Ma küll hindame ja me kõik on
töötajatele, kes on teinud muidugi nagu Selle või selle ühe ise ajas
Kindlasti tead, mis tunne on, kui elu läheb nii, nagu siis, kui teil on
mõned hilisõhtul deadline-- mitte ainult selles klassis,
kuid järgmise-- kui oled ammendatud, stressis,
on ääretult number muid asju teha.
Sa teed mingil hetkel elu kindlasti halb, võibolla hilja
öösel otsus.
>> Nii et ühe õppekava, on see klausel,
selline, et kui 72 tunni jooksul teha viletsat otsust, sa seda tunnistada
ja jõuda mind ja üks kursus peadesse
ja meil on vestlus.
Me asjadega hakkama sisemiselt loodab
see muutumas õpetamise hetk või elu õppetund,
mitte midagi Eriti drastiline tagajärgi
nagu võite näha nende graafikuid siin.
>> Nii et see on väga raske tooni.
Olgem pausi paar sekundit pinget maandada.
>> [Muusika mängimine]
>> DAVID J. Humala: Olgu, nii kuidas oli, et Segue?
Tänase peateemasid.
Esimene on abstraktsioon.
Teine, mis saab olema esindatuse andmed, mis ausalt öeldes
on tõesti kuiv viis öelda, kuidas me saame minna probleemide lahendamine ja mõtlemine
umbes probleemide lahendamisel?
Nii et olete näinud Scratch ja olete näha ehk juba pset1 koos C
et sa mitte ainult ei kasuta funktsioone, nagu printf,
et teised inimesed aastat varem kirjutasin teile.
Võite kirjutada oma funktsioone.
>> Ja kuigi sa ei pruugi olla seda teinud C, ja ausalt öeldes pset1
sa tõesti ei pea kirjutama oma oma funktsiooni, sest probleemiga--
samas võib-olla heidutav Esimene glance-- näete
lõplikult saab lahendada mitte kõik, et palju ridu koodi.
Kuid seda öelnud, nii kirjalikult oma funktsiooni,
aru, et C ei anna sa see võimalus.
>> Ma lähen täna lähtekoodi mis on saadaval juba võrgus,
ja ma lähen edasi minna ja avatud up programmi nimega funktsiooni 0.C,
ja funktsiooni null me näeme mõned asjad.
Aasta esimestel ridadel 18 kuni 23 on minu peamine ülesanne.
Ja nüüd, kui me hakkame lugema kood, mis me ei kirjuta lennult,
vaid olen kirjutanud varem või et teil on probleem määrata
võib saada võttes on kirjutatud ette.
Hea viis alustada lugedes kellegi kood
on otsida põhiülesanne.
Aru saada, kus see kanne Asi on selles, et töötab programm,
ja järgige seda loogiliselt sealt.
>> Nii et see programm ilmselt prints oma nimi, millele järgneb koolon.
Me siis kasuta getString alates CS50 raamatukogu
saada string või sõna või fraas kasutaja klaviatuuri.
Ja siis on see asi siin-- PrintName.
>> Nüüd PrintName ei ole funktsioon, mis on kaasas C.
See ei ole standard io.h.
See ei ole CS50.h.
See on pigem samasse faili.
Pange tähele, kui ma keri bit-- read 25 kuni 27--
see on lihtsalt ilus viis kommenteeris oma koodi kasutades tähti ja kaldkriipsud.
See on multi-line märkusi, ja see on lihtsalt
Minu kirjeldus sinine Mida see funktsioon teeb.
>> Sest read 28 kuni 31, Olen kirjutanud super lihtne funktsioon
kelle nimi on PrintName.
Kulub mitu argumente sa ütleksid?
Nii et üks argument-- sest seal on üks argument loetletud sulgudesse.
Liik, mis on stringid.
Mis tähendab, PrintName on selline must kast
või funktsioon, mis võtab kui sisend string.
>> Ja selle inimese nimi String Asudes on nimi.
Mitte S, mitte N, kuid nimi.
Mis siis PrintName teha?
See on tore, lihtne.
Just nagu üks rida koodi jaoks printf, kuid ilmselt on see
trükib "Tere," nii ja nii.
Kui nii ja naa pärineb argument.
>> Nüüd ei ole see suur innovatsioon siin.
Tõesti, ma olen võtnud programmi, mis võiks on kirjutatud ühe rida koodi
pannes selle siia üles, ja muuta see midagi,
mis hõlmab umbes kuus või seitse või nii rida koodi kogu tee siia.
>> Aga see on praktiseerimisele põhimõtet tuntakse võtmiseks.
Objekti kapslimaterjali sees uus funktsioon, mis on nimi ja parem
veel, et nimi sõna otseses mõttes ütleb, mida ta teeb.
Ma mõtlen printf-- see pole eriti kirjeldav.
Kui ma tahan luua puzzle tükk, või kui ma
soovite luua funktsioon mis prindib kellegi nime,
Ilu seda teed on see, et ma ei saa tegelikult
anna selle funktsiooni nimi mis kirjeldab, mida ta teeb.
>> Nüüd võtab sisendi Olen omavoliliselt nimetatakse nimi,
kuid ka see on suurepäraselt kirjeldav selle asemel, et veidi rohkem
geneeriliste nagu S. Ja tühine, nüüd, tähendab lihtsalt
et see funktsioon ei anna mulle tagasi midagi.
See ei ole nagu getString et sõna otseses mõttes käed mulle tagasi string
nagu me tegime koos paberitükke koos oma klassikaaslastega eelmisel nädalal
vaid see lihtsalt on kõrvaltoime.
Ta prindib midagi ekraanil.
>> Nii lõpus päeval, kui ma ei tee funktsioon-0, ./function-0,
me näeme, et ta küsib mu nime.
I tüüpi David, ja see liigid välja minu nime.
Kui ma seda uuesti koos Rob, see saab öelda: "Tere, Rob."
Nii lihtne idee, kuid võib-olla üldistusi selle vaimselt
et kui teie programmid saavad veidi keerulisem,
ja sa tahad kirjutada patakas kood ja kõne, et code-- invoke
et code-- mõned kirjeldav nime nagu PrintName,
C teeb endale meile see võimalus.
>> Siin on veel üks lihtne näide.
Näiteks, kui ma avada esitada alates tänasest nimetatakse return.c,
teate, mida ma olen teinud siin.
Enamik selle peamine funktsioon on printf.
Ma esimest omavoliliselt initsialiseerida muutuja nimega x number 2.
Ma siis välja printida "x on nüüd % I "läbimise väärtuse x.
Nii et ma lihtsalt ütlen, mis see on.
>> Nüüd ma olen lihtsalt julgelt väites koos printf.
Olen cubing et väärtus x, ja ma olen Seejuures helistades funktsioon
nimega kuup möödaminnes x kui argument,
ja siis säästa väljund aastal muutuja ise, x.
Nii et ma clobbering x väärtus.
Ma ülekaalukate väärtuse x iganes
tulemusena kutsudes Kuubiku funktsioon.
Ja siis ma lihtsalt välja printida mõned kohev kraam siin öelda, mida ma tegin.
>> Nii et mida siis on kuup?
Pane tähele, mida on põhimõtteliselt erinevad siin.
Olen antud ülesanne nimi nagu enne.
Ma olen määratud nimi argument.
Seekord seda nimetatakse n asemel nimi, aga ma kutsun seda, mida tahan.
Aga see on erinev.
See asi vasakul.
Varem oli see, mida märksõna?
Poisid.
Nüüd on ilmselt int.
>> Mis siis võib-olla ära võtta?
Arvestades tühine tähistab omamoodi olematus, ja see oli nii.
PrintName tagasi midagi.
Ta tegi midagi, kuid see ei anna mulle tagasi
midagi, mida ma võiksin panna vasakul pool võrdusmärki
nagu ma olen teinud siin on line 22.
>> Nii et kui ma ütlen meie real 30, mis see ilmselt tähendab,
mida kuubik teeb mulle?
Jah?
Ta naaseb täisarv.
Nii et ta jätab mind tagasi, Näiteks paberileht
kohta, mida ta on kirjutanud vastuse.
2 kuubis, või 3 kuubis, või 4 cubed-- iganes ma möödunud aastal,
ja kuidas ma rakendada seda?
Noh, lihtsalt n korda n korda n kuidas ma võiks kuup väärtus.
Nii et taas, super lihtne idee, kuid demonstratiivne
nüüd, kuidas me saame kirjutada funktsioone et tegelikult oli meil tagasi
väärtused, mis võiks huvi pakkuda.
>> Vaatame viimane näide siin nimetatakse funktsiooni ühes.
Selles näites, hakkab saada selgem.
Nii funktsiooni üks, see program-- teate lõpuks
nõuab funktsiooni nimetatakse GetPositiveInt.
GetPositiveInt ei ole funktsiooni CS50 raamatukogu
aga me otsustasime me tahaks ta olemast.
>> Nii et kui me keri hiljem fail teate, kuidas ma läksin umbes rakendamisel
saada positiivse int, ja ma öelda, et see on rohkem kaalukaid
sest see on korralik ridade arvu kood.
See ei ole lihtsalt rumal väike mänguasi programm.
See on tegelikult sain mõned vigade kontrolli ja midagi enam kasulik.
>> Nii et kui sa pole näinud läbikäiguks videos, et oleme surutud pset1,
tean, et see on tüüp loop C, sarnase sisuga
et asju Scratch saab teha.
Ja seda ütleb seda.
Trüki välja.
Siis minna ja saada n-- saada int ja hoidke seda n,
ja hoida teeme seda ikka ja jälle ja jälle nii kaua kui n on väiksem kui üks.
>> Nii n saab olema väiksem kui üks ainult siis, kui inimene ei ole koostööd.
Kui ta kirjutab aastal 0 või -1 või -50,
see ahel läheb, et hoida täidesaatva ja jälle.
Ja lõpuks teate, ma lihtsalt tagasi raha.
Nii et nüüd on meil funktsioon et oleks tore olnud,
kui CS50 oleks rakendada CS50.h ja CS50.c teile,
Siit aga nüüd rakendada seda ise.
>> Aga kaks märkust mõned olulised detailid.
Keegi-- miks ma kuulutada int n, kas sa arvad, on line 29
asemel lihtsalt teeme seda siin, mis on
rohkem kooskõlas mida me tegime eelmisel nädalal?
Jah?
Hea mõte.
Nii et kui me panna see siin, et see on nii, nagu me
hoida kuulutatakse seda uuesti ja uuesti.
See iseenesest on mitte problemaatiline, per se,
sest meil on vaja ainult raha üks kord ja siis
me ei kavatse osta uus niikuinii.
Aga hea mõte.
Jah?
>> Sule.
Nii et kuna ma olen deklareerinud n kohta rida 29 väljaspool tsüklina
see on kättesaadav kogu kogu see funktsioon.
Ei muud funktsioonid, sest n on ikka sees need lokkis
traksid siin.
Nii-- kindel.
>> Täpselt.
Nii et see on isegi rohkem punkti.
Kui me selle asemel deklareeritud n siin real 32,
see on problemaatiline, sest arvan, Kus mujal ma pean seda kasutada?
On line 34 ja Lihtne rusikareegel on
mis saab kasutada ainult muutuja sees uusimaid looksulg
kus sa kuulutanud.
>> Kahjuks, rida 34 on üks joon liiga hilja,
sest ma olen juba suletud lokkis traksidega line 33
mis vastab lokkis traksidega line 30.
Ja nii see on viis öelda et see muutuja int on scoped,
nii rääkida, vaid sees need looksulg.
See lihtsalt ei eksisteeri väljaspool neid.
>> Nii et tõesti, kui ma teen seda vale, lubage mul päästa kood
kui see ongi valesti kirjutatud.
Lubage mul minna ja ei tee funktsiooni-1 ja notice-- viga.
Kasutada deklareerimata tunnus n real 35, mis on siinsamas.
Ja kui me liikuge üles lisaks veel üks.
Kasutada deklareerimata identifikaatorit n real 34.
>> Nii kompilaator, rõkkama, on märganud, et see lihtsalt
ei ole olemas isegi selgelt, et see on visuaalselt.
Nii lihtne fix kuulutab ta seal.
>> Nüüd lubage mul leidke top faili.
Mis hüppab läbi teie kui on natuke erinev
alates kraam me vaatasime eelmisel nädalal?
Mitte ainult mul on nimi, mitte ainult ei Mul on mõned teravad sisaldab kuni top,
Mul on midagi, mida ma olen kutsudes prototüüp.
Nüüd, tundub kohutavalt sarnane sellega, mida me just nägin hetk tagasi on line 27.
>> Nii et olgem järeldada eri veateate, miks ma olen seda teinud.
Lubage mul minna ja kustutada need read seal.
Ja nii me ei tea midagi prototüüp.
Remake seda pilti.
Tee funktsioon üks.
Ja nüüd, kurat, neli viga.
Olgem kerida kuni esimene.
>> Kaudsed deklaratsiooni funktsioon saada positiivse int on kehtetu C99.
C99 tähendab lihtsalt 1999 versioon keel
C, mis on see, mida me tegelikult kasutab.
Mida see tähendab?
Noh C-- täpsemalt C compilers-- on päris loll programme.
Nad ainult ei tea, mida te olete ütlesin neile, ja see on
tegelikult temaatiliste eelmisel nädalal.
>> Probleem on selles, et kui ma lähen umbes rakendamisel nimi siia üles,
ja ma kutsun funktsiooni nimetatakse GetPositiveInt siin on line 20,
et funktsioon tehniliselt ei eksisteerida kuni koostaja näeb line 27.
Kahjuks koostaja on asju top, alla, vasakule, paremale,
seda sellepärast, et ta ei ole näinud rakendamise GetPositiveInt,
kuid see näeb sind üritab kasutada seda siia üles,
see on lihtsalt läheb bail-- kisa Teile viga message-- ehk
segasena, ja tegelikult ei koostada fail.
>> Nii et nn prototüüp üles siin on küll üleliigne.
Sõna otseses mõttes, ma käisin siin ja ma kopeeritud ja kleepida see, ja ma panen selle siia.
Void oleks õige, nii me sõna otseses mõttes kopeeri ja kleebi see seekord.
Ma sõna otseses mõttes kopeerida ja kleepida see.
Tõesti lihtsalt nii nagu riivsaiaga.
>> Vähe aimu tõlkija.
Ma ei tea, mida see teeb veel, aga ma paljutõotav sa
et see on olemas lõpuks.
Ja sellepärast see LINE sisse line 16-- lõpeb semikooloniga.
See on koondatud disain.
Jah?
>> Kui te ei ühendada oma raamatukogu et see-- oh, hea küsimus.
Sharp on päisefailist kandmisel.
Vajad olema-- peaks peaaegu alati tipus
faili jaoks sarnased-- eest täpselt samal põhjusel, jah.
Sest standard io.h on sõna otseses mõttes joon
meeldib see, kuid sõna printf ja tema argumendid ja tema tagasisaatmist tüüp.
Ja nii tehes teravaid sisaldada kuni siin, mida sa oled sõna otseses mõttes teed
on kopeerige sisu keegi teine ​​kirjutas üleval.
Seejuures cluing oma koodi sisse Asjaolu, et need funktsioonid on olemas.
Jah?
>> Absoluutselt.
Nii et väga tark ja õige lahendus oleks, tead mida?
Ma ei tea, mida Prototüüp on, aga ma tean,
kui ma aru saan, et C on lihtsalt loll ja rethinks ülevalt alla.
Noh olgem annavad seda, mida ta tahab.
Lõikame selle koodi, kleepige see üles top, ja nüüd suruda peamised allapoole.
Ka see lahendaks probleemi.
>> Aga sa võiksid väga kergesti tulla stsenaarium, kus on vaja helistada B,
ja võibolla B kutsub tagasi A. See on midagi, mida nimetatakse rekursiooni,
ja me tuleme tagasi selle.
Ja see võib olla või mitte olla hea asi, kuid saate kindlasti
murda lahendus.
>> Ja pealegi, ma oleks väidavad stiililiselt,
eriti kui teie programmid saada see kaua ja nii kaua,
see on lihtsalt super mugav panna peamised tipus
sest see on asi, mida kõige programmeerijad hakkavad hooli.
Ja nii see on veidi puhtamaks, väidetavalt seda teha nii,
Ma algselt tegin seda prototüübi isegi
kuigi see tundub veidi koondatud esmapilgul.
Jah?
Sorry, ei sa öelda, et see valjem?
>> Kui lähete asukohad rakendamise ja prototüüp?
Nii et see on hea küsimus.
Kui sa uuesti deklareerima alla siin, vaatame, mis juhtub.
Nii et kui ma panen selle üles siin sa räägid.
Oh, vabandust.
Louder?
Isegi valjemini.
Oh, hea küsimus.
Kas see kehtetuks funktsioon?
Sa tead, et pärast kõiki neid aastaid, ma on kunagi prototüüp hiljem.
Teeme teha funktsioon-1 Pärast seda tehes.
>> [Pomisedes]
DAVID J. Humala: Oh, oota.
Meil on veel panna kõik üleval.
Nii et teeme seda siin, kui ma mõista oma küsimusele õigesti.
Panen kõik, kaasa arvatud Prototüübi eespool peamine,
aga ma panen prototüüp Allpool rakendamist.
>> Nii et kui ma saaks, siis ma saan tagasi error-- kasutamata muutuja n.
Oh, seal.
Aitäh.
Vaatame, me vabaneda sellest.
See on erinev viga, niiet seda ignoreerida.
Lähme tõesti kiiresti uusversioon see.
>> OK, nii et andmed argument ei kasutada stringi
n-- oh, see on sellepärast, Muutsin neid siin.
Hea küll, me teame, mis vastus läheb to-- Olgu, siin me läheme.
Ah, aitäh positiivne.
Olgu, ma määrata see kood kui-- ignoreeri seda eriti viga
kuna see oli-- see töötab, on vastus.
>> Nii et see ei ole kirjutada mida sa oled teinud.
Ma kahtlustan, koostaja kirjutatakse nii
et ta eirab oma prototüüp sest keha nii rääkida,
funktsioon on juba ellu viidud kõrgemale.
Oleksin tegelikult konsulteerida käsiraamatu koostaja
aru, kas seal on mõni muu kaudselt, kuid esmapilgul
lihtsalt üritan ja katsetavad, tundub, et ei mõju.
Hea küsimus.
>> Nii et olgem liikuda edasi nüüd, liikudes eemal kõrvaltoimed, mis
on funktsioone, mis midagi sellist visuaalselt ekraanil koos printf,
kuid ei tule raha.
Ja funktsioone, mis on tulu väärtusi, nagu me nägime mõned.
Me juba nägime seda mõistet ulatus, ja me näeme seda ikka ja jälle.
Aga nüüd jälle kasutada rusikareegel
et muutuja võib kasutada ainult sees kõige hiljuti avatud
ja suletud looksulg nagu me nägin, et konkreetne näide.
>> Ja kui meenutada, on ability--
sa võiks lahendada mõned neist probleemidest pannes muutuja maailmas
tipus faili.
Kuid peaaegu kõikidel juhtudel me pahaks panema, et
ja tõesti ei ole isegi minna arvesse, et lahendus nüüd.
Nii et nüüd, Buffee, et muutujad on selle mõiste ulatust.
>> Aga nüüd vaatame veel kuiv viis tegelikult otsin
mõned päris huvitav rakendamise üksikasju.
Kuidas me võiksime informatsiooniks.
Ja me juba vaatasime seda aastal esimesel nädalal tasemega.
Vaadates binaarpaketist ja meenutamist koma.
>> Aga mäletate eelmisel nädalal, et C on Eri andmetüüpide ja kobarad rohkem,
kuid kõige kasulikum ones nüüd võib neid.
Char või märk, mis juhtub üks bait, või kaheksa biti kokku.
Ja see tähendab, et suurus of char on vaid üks bait.
Bait on kaheksa bitti, nii et see tähendab, et saame esindada, kui palju märke.
Mitu tähte või klaviatuuril
kui meil on üks bait või kaheksa bitti.
Mõtle tagasi nädalal null.
Kui teil on kaheksa bitti, kui palju kogu väärtused
saab esindada koos mustrid nulle ja milliseid?
Keegi-- rohkem.
Nii et 256 kokku, kui sa hakka lugema nullist.
Nii et kui teil on kaheksa bits-- nii et kui me oli meie binaarne sibulad siin jälle
me võiks omakorda nende lampide kohta ja välja ükskõik 256 unikaalse mustrid.
>> Nüüd on see natuke problemaatiline.
Mitte nii palju inglise ja romaani keeled, kuid kindlasti
kui kasutusele võtta Näiteks Aasia keeled, mis
on palju sümboleid kui nagu 26 tähestiku tähti.
Me tegelikult vaja läheb rohkem kui ühe baidi.
Ja õnneks sisse Viimastel aastatel on ühiskonna
vastu muid standardeid, mis kasutavad rohkem kui üks bait ühe laadimisega.
>> Aga nüüd on C, vaikimisi on vaid üks bait või kaheksa bitti.
Täisarv, vahepeal on neli baiti, teisiti tuntud kui 32 bitti.
Mis tähendab, mis on suurim võimalik number saame esindada koos int
ilmselt?
Mis miljardit.
Nii et see on 4000000000 anda või võtta.
2 32th võimu, kui me ei võta negatiivsed arvud
ja lihtsalt kasutada kõik positiivne numbrid, see on 4000000000
anda või võtta võimalused.
Float, vahepeal on teist tüüpi andmete tüübi C. See on ikka number,
aga see on reaalne number.
Midagi koma.
Ja selgub, et C ka kasutab nelja baiti
esindama murdarve.
>> Kahjuks, kui palju ujuva punkt väärtused on seal maailmas?
Mitu tegelik arv on olemas?
Seal on lõputu number, ja et asi
seal on lõpmata palju täisarvud.
Nii et me oleme juba omamoodi kaevamine end auk siin.
Kusjuures ilmselt arvuteid-- juures vähemalt programme kirjutatud C on neid--
saab loendada 4000000000 anda või võtta,
ujukoma väärtused võib ainult näiliselt
on mõned piiratud kogus täpsusega.
Ainult nii palju numbreid pärast nende koma.
>> Sest, muidugi, kui sul on ainult 32 bitti,
Ma ei tea, kuidas me läheme edasi minna esindavad tõeline numbers-- ilmselt
koos erinevaid mustreid.
Aga seal on kindlasti piiratud Mitmed sellised mustrid,
nii ka siin, see on problemaatiline.
>> Nüüd saame vältida probleemi veidi.
Kui te ei kasuta float, võid kasutada topelt
C, mis annab sulle kaheksa baiti, mis on palju rohkem võimalik mustrid nulle
ja ones.
Aga see on veel piiratud, mis läheb olla problemaatiline, kui sa kirjutad tarkvara
graafika või väljamõeldud matemaatilisi valemeid.
Nii et te võiks tegelikult tahavad loendab suurem kui see.
Pikk long-- rumalalt named-- Samuti on kaheksa baiti või 64 bitti,
ja see on kaks korda pikem kui int, ja see on juba pikka täisarvuni.
>> Fun fact-- kui int on neli baiti, kui pikk on pikk C tavaliselt?
Ka neli baiti, kuid pikk pikk on kaheksa baiti,
ja see on ajaloolistel põhjustel.
>> Aga Buffee nüüd on lihtsalt selles, et andmed on
olla esindatud computer-- see füüsilise seadmega elektri,
see on üldiselt sõidu need nullid ja ones--
Piiratud koguses täpsusega.
Nii et milles probleem siis?
>> Noh seal on probleem täisarv ülevool.
Mitte ainult C, kuid arvutid üldiselt.
Näiteks, kui see on bait väärt bit--
nii et kui see on kaheksa bit-- kõik mis on number üks.
Mis number see on esindavad, kui me eeldame,
see on kõik positiivsed väärtused kahendsüsteemis?
>> 255, ja see ei ole 256, kuna null on väikseim number.
Nii et 255 on kõige suurem üks, kuid probleem
oletame, et ma tahtsin juurdekasvu see muutuja, mis
kasutab kokku kaheksa bitti kui ma tahan juurdekasvu ta.
>> Noh, niipea kui ma lisan üks kuni kõik need ones,
saab ehk kujutada visually-- lihtsalt nagu bilansiline üks kasutades decimals--
midagi läheb voolama vasakule.
Ja tõepoolest, kui ma lisan number üks sellele, mis juhtub binaarne
on, et see voolaks tagasi nulli.
>> Nii et kui te ainult use-- mitte int, vaid ühe baidi loota täisarvud
aastal programmi poolt vaikimisi kujundust niipea saad 250, 251, 252, 253, 254,
255-- 0 eelnesid 255, mis ei ole ilmselt, mida
kasutaja saab oodata.
>> Nüüd vahepeal ujukoma maailma teil ka sarnane probleem.
Mitte niivõrd suurima number-- kuigi see on veel küsimus.
Aga summa täpsus et te ei esinda.
Võtame pilk see näiteks siin ka tänapäeva allikas code--
float-0.c.
>> Ja teate, et see on super lihtne programm, mis
peaks ilmselt välja trükkida, millist väärtust?
Mida sa kihla, et see saab printida kuigi seal on natuke uus süntaks
siin?
Loodetavasti 0.1.
Niisiis võrdub ühe kümnendiku sest ma teen 1 jagatud 10.
Ma ladustamiseks vastus aastal muutuva nimetatakse f.
See muutuja on tüüpi float, mis on märksõna Ma lihtsalt ettepaneku olemas.
>> Me ei näinud seda enne, kuid see on selline kena viis printf
täpsustada, mitu numbrit sa tahan näha pärast koma.
Nii et see märkus tähendab lihtsalt et siin on kohatäide.
See on ujukoma väärtus, ja oh, muide,
näitab see koma koos üks number pärast koma.
Nii et see number komakohtadest,
nii rääkida, et te võiksite.
>> Nii et lubage mul minna ja teha teha float-0, ./float-0,
ja ilmselt 1 jagatud 10 on 0,0.
Nüüd, miks see on?
>> Noh jälle arvuti võtab mulle sõna-sõnalt, ja ma olen kirjutanud 1
ja ma kirjutanud 10 ning võtab ära arvata, mida on eeldatud andmetüüp nende kahe
väärtused?
Int, see on tehniliselt midagi veidi erinev.
See on tavaliselt pikk, kuid see on lõppkokkuvõttes lahutamatu väärtust.
Ei Murdarv.
>> Mis tähendab, et kui see on int ja see on int,
Probleem on selles, et arvuti ei ole võimet
isegi salvestada et koma.
Nii et kui sa seda teed 1 jagatud 10 lehe täisarvud
nii lugeja ja nimetaja, vastus peaks olema 0,1.
Aga computer-- sest need on integers--
ei tea, mida teha 0.1.
>> Mis siis on see selgelt teed?
See on lihtsalt viskamine selle ära, ja mida ma näen lõpuks
on 0,0 ainult, sest ma rõhutanud, et printf näita mulle üks koma.
Probleem on aga selles, et kui sa jagada täisarv poolt täisarv
siis saame-- definitsiooni kohta C-- täisarv.
Ja ta ei kavatse teha midagi ilusat ja mugavalt
nagu selle ümber kuni lähima üles või alla.
See saab kärpida kõik pärast koma.
>> Nii lihtsalt intuitiivselt, mis on ilmselt fix?
Mis on kõige lihtsam fix siin?
Jah?
Täpselt.
Miks me ei võiks käsitleda neid kui murdarve tõhusalt
muutes need ujukite või kahekordistub.
Ja nüüd, kui ma ei tee ujukid-0, või kui ma kompileerida ujukite-1,
mis on identne mis oli lihtsalt ettepanek.
Ja nüüd ma ujukite-0, nüüd ma saan oma 0,1.
>> Nüüd see on hämmastav.
Aga nüüd ma lähen tegema midagi veidi erinev.
Ma olen uudishimulik näha, mida on tõesti toimub all kapuuts,
ja ma lähen välja trükkida välja 28 kohta pärast koma.
Ma tahan tõesti näha 0.1000-- infinite--
[Kuuldamatu] 27 nulle pärast, et 0.1.
>> Noh vaatame, kas see on mida ma tõesti saada.
Tee ujukite-0 sama faili.
./floats-0.
Olgem suumida dramaatiline vastus.
Kogu selle aja, oled olnud mõtlesin 1 jagatud 10 on 10% või 0,1.
See ei ole.
Vähemalt nii palju kui arvuti puhul.
>> Nüüd miks-- OK, see on täielik vale 1 jagatud 10 on 0.1.
Aga miks--, mis ei ole Buffee täna.
Miks siis arvuti arvan, Erinevalt meie kõigi ruumis,
et 1 jagatud 10 on tegelikult see hull raha?
Mis on arvuti teeb ilmselt?
Mis see on?
>> See ei uputa, per se.
Ülevoolu on tavaliselt siis, kui sa ümbritsev väärtus.
See on see küsimus ebatäpsust aastal Murdarv
kui sul on ainult 32 või isegi 64 bit.
Aga kui seal on lõpmatu arvu tegelike numbers--
numbreid peale koma ja numbrid thereafter-- kindlasti
sa ei saa endast kõik.
Nii et arvuti on andnud meile lähim vaste
et ta võib esindada abil, et paljud bitti väärtusega ma tegelikult tahan,
mis on 0,1.
>> Kahjuks, kui te hakkan matemaatikat või te
alustada hõlmavad selliseid ujuv punkt väärtuste oluline programs--
raamatupidamistarkvara, sõjaline software-- midagi
kus taju ilmselt päris oluline.
Ja kui hakkate lisades numbrid niimoodi, ja algus
töötab, et tarkvara koos tõesti suur sisendite
või palju tundi või palju päevade või palju aastaid,
need pisikesed vead kindlasti saab lisada aja jooksul.
>> Nüüd nagu kõrvale, kui sa oled kunagi näinud Superman 3 või Office Space
ja te võiks meenutada, kuidas need mehed varastasid
palju raha oma arvuti abil murdarve
ning avada vähe jäägid, loodetavasti seda filmi
nüüd mõttekam.
See on see, mida nad olid vihjates selles filmis.
Asjaolu, et enamik ettevõtted ei vaata
pärast teatud arvu kohta pärast koma,
kuid need on fraktsioonid senti.
Nii et kui hakkate lisades need üles, hakkate tegema palju raha
Teie pangakontole.
Nii et see Office Space selgitatud.
>> Nüüd kahjuks kaugemale Bürooruumid, seal
on mõned õiguspäraselt murettekitav ja olulist mõju
taoliste aluseks disaini otsuseid,
ja tõesti üks põhjustest me kasutame C loomulikult
on nii, et teil on tõesti see maa üles mõista, kuidas arvutid töötavad,
kuidas tarkvara töötab ja ei võta midagi iseenesestmõistetavana.
>> Ja tõepoolest kahjuks isegi et oluline mõista,
meie, inimesed teevad vigu.
Ja ma mõtlesin, et ma jagada on Selle kaheksa minuti pikkune video siin tehtud
alates Modern Marvels episood, mis on haridus näidata, kuidas asjad töötavad
mis maalib kaks pilti millal väära kasutamise
ja mõistmine murdarve
viinud mõned olulised Kahjuks tulemusi.
Võtame pilk.
[VIDEO PLAYBACK]
Me nüüd tagasi "ehitus Katastroofid "Modern Marvels.
Arvutid.
Me kõik oleme tulnud vastu võtta sageli heidutav probleeme, mis
sain koos neid-- vead, viiruste ja tarkvara glitches-- väikeste hindadega
maksma mugavuse.
Aga kõrgtehnoloogia ja kiire sõjaväe ja kosmoseprogrammi rakendused
Väikseim probleemi saab suurendatult arvesse katastroof.
>> 4. juunil 1996 teadlast valmis käivitada mehitamata Ariane 5 raketi.
Ta vedas teadusliku satelliidid, mille eesmärk
täpselt määratleda, kuidas Maa magnetvälja suhtleb
koos päikesetuul.
Raketi ehitati Euroopa Kosmoseagentuuri,
ja välja tõsta selle rajatise rannikul Prantsuse Guajaana.
>> -Aega Umbes 37 sekundiks lend, nad esimest korda
märkasin, et midagi on valesti.
Et pihustid olid pööratava nii nad tõesti ei tohiks.
Umbes 40 sekundit arvesse lendu selgelt sõiduk oli probleeme,
ja see on siis, kui nad on valmistatud otsus hävitada.
Vahemikus ohutuse ohvitser, kellel tohutult julgust, pressitud nuppu
ja plahvatas rakett enne seda võiks saada oht avalikule korrale.
>> -See Oli neiu reis Ariane 5
ja selle hävitamine võttis koht, sest viga
varjatud raketi tarkvara.
-The Probleem Ariane oli see, et
oli number, mis vaja 64 bitti väljendada,
ja nad tahtsid muuta seda 16-bitine number.
Eeldati, et mitmeid oli kunagi väga suur.
Et enamik neist numbrit 64-bitine number olid nullid.
Nad eksisid.
>> -The Võimetus ühe tarkvara aktsepteerima
selline number loodud teine ​​oli keskmes rike.
Tarkvaraarendus on muutunud väga kulukas osa uue tehnoloogia.
Ariane 4 rakett oli olnud väga edukas.
Nii palju tarkvara luuakse seda kasutatakse ka Ariane 5.
>> -The Põhiprobleem oli see, et Ariane 5.
Aastal faster-- kiirendatud kiiremini ja tarkvara ei ole arvestatud seda.
>> -The Hävitamine raketi oli suur rahaline katastroof.
Kõik tänu minut tarkvara viga.
Aga see ei olnud esimene ajal andmete konverteerimise probleeme
oli vaevavad tänapäeva raketi tehnoloogia.
>> -In 1991 algus esimese Lahesõja
Patriot rakettide kogenud Samalaadsed
kohta mitmeid muundamise probleemi.
Ja tulemus 28 inimesi-- 28 American soldiers-- tapeti,
ja umbes sada teisi haavata.
Kui Patriot, mis pidi kaitsmiseks sissetulevad Scudid,
ei tule rakett.
>> Millal Iraagist Kuveiti tungis ja Ameerikas käivitatud Desert Storm alguses 1991,
Patriot rakettide patareid lähetati kaitsta Saudi Araabia ja Iisraeli
Iraagi Scud rakettide rünnakud.
Patriot on USA keskmise ulatusega pind-õhk süsteem
valmistatud Raytheon ettevõte.
>> -The Suurus Patriot Interceptor itself--
see on umbes umbes 20 jalga pikk, ja ta kaalub umbes 2000 kilo.
Ja see viib lõhkepea umbes, Ma arvan, et see on umbes 150 £.
Ja lõhkepea ise kõrge lõhkeaine, mis
on killud tema ümber.
Nii korpust lõhkepea on , mille eesmärk on tegutseda nagu haavlid.
>> -The Raketid viiakse neli konteineri kohta,
ja veetakse semi trailer.
>> -The Patriot raketitõrjesüsteemi ulatub vähemalt 20 aastat.
See oli algselt mõeldud kui õhutõrje rakett
tulistada alla vaenlase lennukid.
Esimesel Lahesõja kui see sõda tuli,
Armee tahtis seda kasutada tulistama Scudid, ei lennukeid.
Iraagi õhujõudude oli mitte niivõrd probleemi
kuid armee oli mures Scudid.
Ja nii nad püüdsid uuendada Patriot.
>> -Intercepting Vaenlane rakett liigub Mach 5
pidi olema pisut üksluine.
Aga kui Patriot aastal tormas teenus,
Armee ei olnud teadlik Iraagi muudatustest, mis
tegid oma Scudid ligi võimatu seda.
>> Mis juhtus on Scudid et olid tulemas olid ebastabiilsed.
Nad olid ebakindel.
Selle põhjuseks oli Iraqis-- selleks, et saada 600 kilomeetrisel
kohta 300 kilomeetri vahemikku missile-- võttis kaalust välja ees lõhkepea
ja tehtud lõhkepea kergem.
Nüüd Patriot üritab tulla at Scud ja enamik aeg--
Valdav osa aeg-- see oleks lihtsalt lennata Scud.
>> -Kui Patriot haldurid mõistis Patriot oma eesmärki täitnud,
nad lõhkeda Patriot lõhkepea vältida võimalikke kaotusi kui see
lubati langevad maapinnale.
>> See oli see, mida enamik inimesi näinud kui suur fireballs taevas,
ja mõista kui lõikepunktide Scud lõhkepeade.
>> -Although Öösel taevas, Patriots osutus edukaks hävitades
Scudid kell Dhahran võiks olla mingit kahtlust selle tulemuslikkust.
Seal Patriot radari süsteem kaotanud jälgida sissetuleva Scud
ja kunagi käivitas tõttu et tarkvara viga.
>> See oli iisraellasi, kes esimesena avastas et mida kauem süsteem oli,
suurema aja lahknevus sai.
Tänu kella varjatud aastal süsteemi arvutisse.
>> Umbes kaks nädalat enne tragöödia Dhahranis,
Iisraeli teatatud Defense Department
et süsteem oli kaotanud aega.
Pärast umbes kaheksa tunni jooksmise, märkasid nad,
et süsteemi muutub märgatavalt vähem täpne.
Defense Department reageeris ütleb kõik Patriot patareid
ei jääks süsteemid juba pikka aega.
Nad ei ole kunagi öelnud, mida pikka aega oli.
8 tundi, 10 tundi, tuhat tundi.
Keegi ei teadnud.
>> -The Patriot aku seisvad kasarmud
at Dhahran ja selle vigane sisemine Kell oli kestnud juba üle 100 tunni
ööl vastu 25. veebruar.
>> -See Jälitatud aeg täpsus umbes kümnendik sekundit.
Nüüd kümnendik teine on huvitav number
sest see ei saa väljendada binaarne täpselt, mis
tähendab seda ei saa väljendada täpselt kogu kaasaegset digitaalset arvutit.
On raske uskuda, kuid kasutada seda kui näidet.
>> Võtame number üks kolmandik.
Üks kolmandik ei saa väljendatud kohaga täpselt.
Üks kolmandik on 0,333 kestnud lõpmatuseni.
Ei ole nii, et seda teha koos absoluutne täpsus koma.
See on täpselt selline probleem mis juhtus Patriot.
Mida pikem on süsteem jooksis hullem aeg viga sai.
>> -Peale 100 töötunni viga ajal oli ainult umbes üks kolmandik
teise.
Aga nii on suunatud rakett liigub Mach 5,
see põhjustas jälgimine viga üle 600 meetri.
Oleks saatuslik viga sõdurite juures Dhahran.
>> Mis juhtus on Scud käivitamine oli avastatud varajase hoiatamise satelliitide
ja nad teadsid Scud tuli nende üldine suund.
Nad ei tea, kust see tuli.
See oli nüüd kuni radar komponent Patriot süsteem
kaitsta Dhahran leida ja hoida jälgida sissetulevad vaenlase rakett.
>> -The Radar oli väga tark.
Oleks tegelikult jälgida positsiooni Scud
ja siis ennustada, kus siis ilmselt oleks
järgmine kord radar saadetud impulsi välja.
See kutsuti vahemikus värav.
>> -Mis Kord Patriot otsustab piisavalt aega on
edasi minna tagasi ja vaadata järgmise Asukoht selle avastatud objekt
see läheb tagasi.
Nii et kui ta läks tagasi vale paigas, siis ei näe objekti.
Ja kui ta otsustab, et ei olnud eseme.
See oli vale avastamine ja see langeb suunas.
>> -The Sissetulevate Scud kadus radari ekraanil
ja sekundid hiljem, slammed arvesse kasarmud.
Scud hukkus 28.
See oli viimane vallandati esimese Lahesõja.
Traagiliselt, uuendatud tarkvara saabus koidik järgmisel päeval.
Tarkvara viga oli ole kindlaks määratud, sulgemine
ühe peatüki raskustes ajalugu Patriot raketti.
>> [END VIDEO PLAYBACK]
>> DAVID J. Humala: Ongi CS50.
Me näeme teid kolmapäeval.
>> [Muusika mängimine]