>> [Muusika mängib]
>> DAVID J Malan: Olgu, tere tulemast tagasi CS50.
See on algus nädalal kaks.
Sõna ühest meie sõpru campus -
kui olete huvitatud, võib-olla, kas praegu või tulevikus perspektiivis
isegi pärast seda, kui on mugavam, õpetamise Lähis kooliõpilaste vähe
midagi arvutiteadus, ei pea selle URL.
Nad on eriti vaja just nüüd on õpetajad, eriti kui teil on
oli mingi kokkupuude arvutiteadus.
>> Nii meelde, et viimane kord, tutvustasime mõned andmed tüübid C, ja
olete hakanud, et saada oma käed määrdunud neid seni
Probleemse määratud üks.
Ja meil oli char.
Nii et veidi tehnilisi tingimusi, mida on char kui sa tead seda täna?
>> Nii et see on märk, kuid olgem Täpsemalt nüüd.
Mida tähendab meie jaoks märk või üksikute char?
Mitte-numbriline märk -
nii ei pruugi.
Selgub, et isegi numbreid, isegi kirjavahemärgid ja tähed
esindatud selle andmed kirjuta tuntud märk.
Nii see ei ole tingimata tähestiku.
Jah?
>> Nii et see on ASCII.
Nii et kui te arvate tagasi nädal null, kui meil oli bait vabatahtlikud
tulla ja kas hoidke oma käed üles või mitte, nad esindatud bitti.
Kuid ühiselt rühma kaheksa, nad esindatud bait.
Ja me kasutusele mõiste ASCII sel loeng, mis lihtsalt on
kaardistamise vahel numbreid ja tähti.
Ja ASCII kasutab, sest need inimesed kaudseid, kaheksa bitti
esindada iseloomu.
>> Nii Seega, kui kaheksa bitti iga võtta üks kahest väärtusest -
null või üks -
See tähendab, et oli kaks võimalust Selle isiku -
null või üks -
kaks selle isiku kohta, kaks selle inimene, kaks seda.
Seega kokku kaks korda kaks korda kaks korda kaks korda kaks -
nii kaks kaheksandat kokku.
Nii et seal on tähemärkide üldarv 256 Võimalik, et saate
esindavad kaheksa bitti.
>> Nüüd neile, kes räägivad Aasia keeled võiksid teada, et seal on rohkem
tegelased maailmas kui lihtsalt As ja Bs ja Cs ja DS.
Ja tõepoolest, ASCII ei piisa palju keeli maailmas.
Aga rohkem sellest mõni teine ​​kord.
Praegu teame, et C, kui soovite esindada kirja tükk
kirjavahemärgid, või lihtsalt midagi iseloom laadi, mida me kasutame char.
Ja see on üks bait või kaheksa bitti.
>> Kuidas int?
Noh, int on täisarv.
Mitu bitti, kui te mäletate, oli täisarv tavaliselt?
Igaüks meenutavad?
Nii et see on tavaliselt 32.
See tegelikult sõltub arvuti et te kasutate.
Kuid seade ja palju arvutid, see on 32 bitti või neli
bytes - kaheksa korda neli.
Ja ints lihtsalt kasutada ladustamiseks numbrid, kas negatiivne,
positiivne või null.
>> Ja kui sul on 32 bitti ja sa ainult hoolivad positiivsed arvud, võib
keegi palliväljak mitu võimalikku täisarvud arvuti võib kujutada alates
nulliga kuni?
Seega oleks kaks kuni 32, mis on ligikaudu neli miljardit eurot.
Nii et need volitused kaks saab olema korduvad teemad infotehnoloogia.
Nagu me näeme, et nad on üsna mugav töötada, isegi kui see ei ole päris
lihtne teha matemaatika pähe.
>> Nii ütleme umbes neli miljardit eurot.
Nüüd on pikk pikk -
saad mingi oletus.
See on enam kui int.
Mitu bitti?
Nii 64 bitti või kaheksa baiti.
See lihtsalt tähendab, et sa ei esinda isegi suurem number, suurem positiivne või
suurem negatiivsete arvudega.
>> Ja kuidas ujuda?
See on ujukoma väärtust 32 bitti.
See on lihtsalt reaalne number, mida koos koma.
Aga kui sa selle asemel on vaja rohkem kohti pärast koma või soovite
esindama suurem number mõnede murdosa pärast seda, mida saab kasutada
double, mis on 64 bitti.
>> Aga seal on huvitav Buffee siin.
Nii et kui ints on piiratud 32 bitti ja isegi pikad pikad on piiratud 64
bitti, et omamoodi tekitab küsimuse, Mis siis, kui sa tegelikult tahad lugema
enam kui 4 miljardit int?
Noh, sa lihtsalt kasutada pikk pikk.
Aga mis siis, kui soovite loendada suurem kui kaks kuni 64., anda või võtta?
>> Nüüd, see on tohutu hulk.
Aga lõpuks, siis võib tegelikult hooli selliseid väärtusi,
eriti kui te kasutate andmebaasi ja hakanud koguma palju ja palju
ja palju andmeid ja kordumatute Numbrite iga tükk, et andmed.
Nii et meil selline on probleem.
Ja samamoodi, koos ujukoma väärtused - ujukite või kahekordistab -
kui sa oled ainult sain hulga bitti, kuidas paljud koguarv sa võisid
võimaluse esindada?
>> Noh, see on vähem selge, kui sa kaasata koma.
Aga see on kindlasti piiratud.
Kui teil on piiratud arv bitti, hulga inimeste, piiratud
mitmeid lambid, kindlasti saab moodustavad vaid piiratud arvu
Murdarvud.
Aga kui palju tegelik arv on oma maailma?
Seal on lõputu.
Nii et selline probleem, sest me ei ole lõpmatu summa
mälu või RAM sees meie arvutid.
Nii mõned keeruline asju võib juhtuda.
>> Niisiis olgem minna ja proovida väljendada seda siin.
Lubage mul minna ja avada gedit.
Ma lähen edasi minna ja salvestada faili nimega "floats0.c" lihtsalt olla
kooskõlas näide, mis on saadaval online, kui soovite.
Ja ma lähen edasi minna ja defineerida järgmiselt -
Ma lähen edasi minna ja öelda, int Peamine tühine, kui me sageli teha.
>> Ja siis see programm, ma lähen kuulutada ennast float, nii 32-bit
muutuja nimega f, omavoliliselt.
Ja siis ma lähen salvestada see Ma ei tea, üks kümnendik, seega 0,1.
Ma lähen, et väljendada, et kui üks jagatud 10, mis on täiesti
õiguspärane C.
>> Ja siis on teine ​​rida, ma lihtsalt soovite välja printida, et väärtus.
Nii meenutavad, et saame kasutada tuttav printf.
Me ei taha kasutada% i jaoks int.
Me tahame kasutada% F sularahaga.
Ja siis ma lähen tegema Kenoviiva n, Sulge tsiteerida, eralda, f, semikoolon.
>> Nii et siin on minu programm.
Seal on juba üks viga.
Kas keegi, kelle jaoks see klõpsatud juba tahan juhtida vähemalt
üks viga olen teinud?
Jah?
Jah.
Ma unustasin "# include" juures top, need sümptom, mis siis, kui ma püüan
koostab selle saab olema, et koostaja läheb karjuda,
ütleb undefined sümbol või midagi selle kohta.
Ta ei saa aru midagi nagu printf.
>> Nii et ma lähen tegema "# include ", Salvestage fail.
Ja nüüd on olukord parem.
Aga ma olen ka kavatse juhtida välja üks uus detail täna.
Lisaks täpsustatakse koht omanikele nagu% f% i% s, saate
mõnikord mõjutamiseks selle kohatäide.
Näiteks juhul, kui ujuva punkti väärtus, kui ma tahan ainult
kuvada kümnendkohani pärast periood, ma ei saa tegelikult teha 0.1f.
Nii teisisõnu, ma eraldab f ja protsendimärk 0,1, lihtsalt
ütlen printf, siis võib olla kogu hunnik numbreid pärast koma
minu jaoks.
Aga ma tahan ainult näha üks neist.
>> Ma lähen edasi minna nüüd ja säästke Selle programmi läheb minu terminal
akna ja ma lähen edasi minna ja tüüp teeb float 0, siseneda.
Ma näen, et veidi segasena line, et hakkab mõttekam kui me
õrritama ta peale seda ja järgmisel nädalal.
Nüüd ma lähen edasi minna ja käivitada float null.
Ja neetud.
>> Nii et seal on teine ​​viga siin mingil põhjusel.
Ma olen päris kindel, et üks kümnendik või üks jagatud 10, ei ole 0.0.
Võib-olla ma lihtsalt ei otsi kell piisavalt numbreid.
Miks ma ei öelda, kaks 0,2 näha kaks koma asemel ainult üks.
Las ma lähen tagasi oma terminali aknas siin ja lüüa kuni paar korda
vaata minu ajalugu.
Ära tee float null jälle ja siis uuesti üles.
Ja nüüd sisestada.
>> Ja nüüd ma olen päris kindel, et see on vale.
Ja ma võiks teha kolm ja neli, ja ma olen ilmselt läheb hoida nägemine nulli.
Nii et kui on viga?
Üks jagatud 10 peaks olema 0,1.
Keegi taha võtta torkehaav at mida põhiline probleem on?
Jah?
Nad on mõlemad täisarvud.
Mis siis?
Nii et üks jagatud 10, see on mida ma teen aritmeetika.
Ja ma saan 0,1.
>> Jah.
Ja nii see on tõesti, et küsimus.
Kui te võtate täisarv arvuti ja jagage seda teise täisarv,
arvuti vaikimisi läheb Eeldame, et soovid täisarv.
Probleem aga muidugi on et 0,1 ei ole täisarv.
See on tõeline arv.
Ja mis siis kui arvuti ei Vaikimisi on see lihtsalt viskab ära
kõik pärast koma.
See ei ole ümmargune alla või üles iseenesest.
See lihtsalt viskab ära kõik pärast koma.
Ja nüüd, et on mõtet.
Sest nüüd me oleme selgelt jääb nulli.
>> Kuid oodake minut.
Ma ei näe int null.
Ma tegelikult näeme 0.00.
Niisiis, kuidas ma ühendada see nüüd?
Kui üks jagatud 10 on null, kuid ma olen nägemine 0.00, kus on see saada
teisendatakse tagasi tegelik number?
Jah.
Täpselt.
>> Nii siin on rida viis, kui ma tegelikult salvestada et 0,1, mis on siis
kärbitud nulli sees float, mis on samaväärne
säilitamist mitte int, kuid Tõepoolest, nagu float.
Pealegi, ma siis kasutades printf et selgesõnaliselt printida, et number kaks
koma kuigi ei pruugi tegelikult olla.
>> Nii et see asi on jama, eks?
Ilmselt sa ei saa seda teha matemaatika, vähemalt mitte sellisel tasemel
täpsus, arvutis.
Aga kindlasti on lahendus.
Mis on kõige lihtsam fix me võiks olla teha, kasvõi intuitiivselt siin
lahendada seda?
Jah?
Keera täisarvu sisse -
jah.
Isegi kui ma ei ole päris kindel, mis on tegelikult toimub siin, kui see
põhimõtteliselt on pistmist need mõlemad on ints, noh, miks ma ei
teha, et 10,0, muutes selle 1,0, salvestage fail uuesti.
Lubage mul minna tagasi alla põhja ja kompileeri.
Lubage mul nüüd uuesti teha.
Ja seal -
nüüd, mul on mu kümnendiku esindatud 0.10.
>> Hea küll.
Nii et see ei ole halb.
Ja lubage mul juhtida tähelepanu veel üks viis me oleks lahendanud selle.
Lubage mul tegelikult rulli ajas tagasi et kui meil oli see üks
kümnes hetk tagasi.
Ja lubage mul minna ja salvestage see fail eri faili nimi, lihtsalt
on vähe kontrollpunkti.
Nii et oli versioon üks.
Ja nüüd lubage mul minna ja veel ühe versiooni.
Me nimetame seda versiooni kaks null indekseeritud.
>> Ja ma lähen selle asemel tegema see - sa tead, mida?
Lisades dot null töötab ka käesoleval juhul.
Aga oletame üks oli varieeruv.
Oletatavad 10 olid erinevad.
Teisisõnu arvan, et ma ei suutnud lihtsalt kõva-kood 0,0 lõpus
Selle aritmeetika väljendus.
Noh, ma ei saa tegelikult midagi Sulgudes nimetatakse valu.
Ma ei loo, et täisarv 10 kuni float, ja ma võin heita, et täisarv üks
float, samuti.
Siis matemaatika, et läheb ära teha on tegelikult 1,0 jagatud 10,0,
tulemus, mis läheb F nagu enne.
Nii et kui ma kompileerida seda teha ujukite 2, ja nüüd hõljub 2, ma saan sama
vastata, samuti.
>> Nii et see on üsna kunstlik näiteks Selle probleemi lahendamiseks
kehtestades casting.
Aga üldiselt, valu saab olema võimas asi, eriti
probleem seatud kaks nädala jooksul, kui soovite teisendada ühe andmetüübi
teine, et lõpus päeval Esindatud on samamoodi.
Lõpus päeval, iga asi, mida me oleme rääkinud siiani on
lihtsalt ints all kapuuts.
Või kui see on liiga madala taseme teid, nad on lihtsalt numbrid
all kapuuts.
Isegi tegelased jälle meenutada nädalast null, on numbrid
all kapuuts.
>> Mis tähendab, saame teisendada vahel erinevaid numbreid, kui
nad on lihtsalt bitti.
Meil saab teisendada vahel numbrid ja tähed, kui nad on lihtsalt
bitti, ja vastupidi.
Ja valu niimoodi on mehhanism programmeerimine, mis võimaldab teil sunniviisiliselt
muuta ühe andmetüübi teise.
Kahjuks see ei ole nii lihtne, kui ma oleks tahtnud.
>> Ma lähen tagasi ujukite 1, mis oli lihtsam,
lihtne ühe 0,0 lisati iga.
Ja nagu kiire täiendkoolitus, lase mul minna ja kompileeri
seda teha ujukite 2 -
vabandust, see on tee ujukid 1.
Ja nüüd joosta ujukite 1.
Ja põhjas, teate et ma tõepoolest saada 0,1.
Niisiis, probleem lahendatud.
>> Aga mitte veel.
Ma nüüd lähen natuke uudishimulik, ja ma lähen tagasi oma
printf avaldus ja öelda, sa tead, mida?
Sooviksin kinnitada, et see on tõesti üks kümnendik.
Ja ma tahan, et see , ütleme, viis kohta pärast koma.
See ei ole probleem.
Muudan kaks viis, Ma kompileerida koos teha.
Ma uuesti, see hõljub 1.
Otsid päris hea.
Minu terve mõistuse kontrolli sattuda sinna, kuid Ma saan natuke rohkem seikluslik.
Ma lähen muuta 0,5-0,10.
Ma tahan näha, 10 numbrit pärast kümnendkohani.
>> Ja ma lähen edasi minna ja kompileeri see ja uuesti, hõljub 1.
Ma nagu kahetsen, testinud edasi, sest mu matemaatika ei ole nii
õige enam tundub.
Kuid oodake minut, võibolla see on lihtsalt juhus.
Võibolla arvuti tegutseb natuke imelik.
Lubage mul minna ja teha 20 koma ja veenda ennast, et ma tean,
kuidas teha matemaatika.
Ma tean, kuidas programmi.
Tee ujukite 1, kompileeri ja kurat.
See on tõesti, tõesti saada Täiesti vale.
>> Mis siis siin toimub?
Intuitiivselt põhineb meie eeldused varem umbes sama tüüpi andmeid,
mida tuleb siin toimub all kapuuts?
Jah?
Täpselt.
Kui soovite seda palju täpsust ja see on paganama palju täpselt -
20 numbrit pärast koma.
Sul ei ole võimalik esindada suvaline number, kui teil on
suvalise arvu bitid.
Aga meil ei ole.
Sest float, meil on ainult 32 bitti.
>> Nii et kui 32 bitti saab permuteeritakse tee - just nagu meie inimestel on, lava
käed üles või alla - in hulga võimalusi, siis on ainult piiratud arv
tegelikud numbrid, mida võib kujutada neid bitti.
Ja nii arvuti lõpuks läheb pea
alustada pealiskaudsust.
Arvuti saab peita need detailid meilt natuke aega.
Aga kui me hakkame poking numbrid ja otsin kaugemale ja kaugemale juures
tagumisel numbrid täisarv, siis me hakkame nägema, et see on
tegelikult ühtlustada Idee kümnendiku.
>> Ja nii selgub, traagiliselt, seal lõpmatu arv numbreid
me ei saa endast täpselt arvuti, vähemalt piiratud
bittide arvu, piiratud RAM'i.
Nüüd kahjuks see mõnikord on reaalse tagajärjed.
Kui inimesed ei saa päris hästi hindan seda või justkui enesestmõistetavaks asjaolu
et nende arvuti on lihtsalt seda, mida nad ütlevad seda teha ja ei
mõista nende aluseks olevate esindatuse üksikasju -
mis, ausalt öeldes, mõnes keeles on kasutaja eest peidetud, erinevalt C -
halbu asju võib juhtuda.
>> Ja see, mida ma arvasin, et me tahaks teha on astuda samm tagasi.
Ja see on umbes kaheksa-minutilise video.
See eetris paar aastat tagasi, ja see annab pilguheitmiseks tegelikult mida saab minna
valesti, kui sa alla hindama neid liiki andmed väga liigagi
reaalses maailmas.
Kui me saaksime päevasõidutulede tuled mõne minuti.
>> SPEAKER 1: Meil ​​on nüüd tagasi insener
katastroofide Tänapäeva imed.
>> Arvutid -
me kõik oleme tulnud vastu sageli heidutav probleeme
et minna koos nendega.
Bugs, viirused ja tarkvara tõrgete on väike hind maksta
mugavuse.
Kuid kõrgtehnoloogia ja kiire sõjaliste ja kosmoseprogrammi
rakendusi, väikseim probleem saab suurendada arvesse katastroof.
>> 4. juunil 1996 teadlased valmis käivitada mehitamata Ariane 5 raketi.
Ta vedas teaduslik satelliidid , mille eesmärk on luua täpselt, kuidas
Maa magnetvälja suhtleb päikese tuul.
Raketi ehitati Euroopa Kosmoseagentuuri ja välja tõsta oma
rajatis rannikul Prantsuse Guajaana.
>> JACK GANSSLE: Umbes 37 sekundit arvesse lend, nad esimest märganud
midagi oli valesti.
Düüsid olid pööramisega sisse kuidas nad tegelikult ei peaks.
Umbes 40 sekundit arvesse lennu selgelt sõiduk oli hädas.
Ja siis nad tegid otsus hävitada.
Vahemikus ohutus ohvitser, koos tohutu julgust, vajutasid nuppu
plahvatas rakett enne kui see muutunud oht avalikule korrale.
>> SPEAKER 1: See oli esimesel reisil Euroopa Ariane 5 ja selle hävitamine
toimus tõttu viga varjatud aastal raketi tarkvara.
>> JACK GANSSLE: probleem Ariane oli see, et mitmed
et nõutud 64 bitti väljendada.
Ja nad tahtsid muuta et 16-bitine number.
Eeldati, et number ei ole kunagi olnud saab olema väga suur, et enamik
need numbrid on 64-bit number olid nullid.
Nad eksisid.
>> SPEAKER 1: võimetus üks tarkvara programmi vastu sellist
number, mille teine ​​oli keskmes rike.
Tarkvaraarendus on muutunud väga kulukas osa uue tehnoloogia.
Ariane 4 rakett on olnud väga edukas, nii palju tarkvara
loodud, et see oli ka kasutatud Ariane 5.
>> PHILIP COYLE: põhiprobleem oli et Ariane 5 oli kiirem,
kiirenes kiiremini.
Ja tarkvara ei olnud moodustas sellest.
>> SPEAKER 1: hävitamist raketi oli suur rahaline katastroof,
kõik tänu minut tarkvara viga.
Kuid see ei olnud esimene kord, andmete muutmise probleeme olnud vaevavad tänapäeva
raketi tehnoloogia.
>> JACK GANSSLE: 1991, start esimese Lahesõja Patriot
rakett kogenud Samalaadsed mitmete konverteerimise probleem.
Selle tulemusena on 28 ameerika sõdurid olid surma ja umbes 100 muud haavata
kui Patriot, mis pidi kaitsta vastu sissetulevaid Scuds,
suutnud tulekahju rakett.
>> SPEAKER 1: Kui Iraak tungis Kuveit ja Ameerika käivitas Desert Storm
alguses 1991, Patriot rakettide patareid aastal kasutati kaitsta Saudi Araabia
ja Iisraeli Iraagi Scud raketirünnakute.
Patriot on USA keskmise ulatusega pind-õhk süsteem toodetud
Raytheon ettevõte.
>> THEODORE Postol: suurus Patriot interceptor ise on umbes
20-jalga pikk.
Ja ta kaalub umbes 2000 £.
Ja see viib lõhkepea umbes -
Ma arvan, et see on umbes 150 £.
Ja lõhkepea ise plahvatusohtlikud mis on
killud selle ümber.
Korpust lõhkepea on mõeldud tegutsema nagu haavlid.
>> SPEAKER 1: raketid viiakse nelja konteineri kohta ja veetakse
poolt semi trailer.
>> PHILIP COYLE: Patriot raketitõrjesüsteemi süsteem läheb tagasi
vähemalt 20 aastat.
See oli algselt mõeldud õhutõrje rakettide
tulistama vaenlase lennukid.
Esimesel Lahesõda, kui see sõda tuli mööda, Armee tahtis seda kasutada
tulistama Scuds, mitte lennukid.
Iraagi õhujõud ei olnud nii palju probleeme.
Aga armee muretsesin Scuds.
Ja nii nad püüdsid tõsta Patriot.
>> SPEAKER 1: pealtkuulamist vaenlase rakett liigub mach viis oli
saab olema raske piisavalt.
Aga kui Patriot oli tormas teenus, armee ei olnud teadlik
Iraagi muutmise, mis tegi oma Scuds peaaegu võimatu tabada.
>> THEODORE Postol: Mis juhtus on Scuds mis olid
tulemas olid ebastabiilsed.
Nad olid wobbling.
Selle põhjuseks oli iraaklaste sisse Selleks, et saada 600 kilomeetrisel lõigul
300 kilomeetri Keskmaarakettide võttis kaal välja ees lõhkepea.
Nad tegid lõhkepea kergem.
Nüüd Patriot üritab et tulla Scud.
Ja enamik ajast, et valdav Enamuse ajast, see oleks lihtsalt
lennata Scud.
>> SPEAKER 1: Kui Patriot süsteem ettevõtjad mõistnud Patriot vastamata
oma eesmärgi, nad lõhkeda Patriots lõhkepea vältida võimalikke
kaotusi, kui see oli lubatud langevad maapinnale.
>> THEODORE Postol: See oli see, mida enamik inimesed nägid nii suur fireballs taevas
ja mõista kui lõikepunktid Scud lõhkepeade.
>> SPEAKER 1: Kuigi öösel taevas Patriots osutus edukaks
hävitades Scuds kell Dhahran seal võiks olla mingit kahtlust selle
jõudlust.
Seal Patriot radar süsteem kaotanud jälgida sissetuleva Scud ja kunagi
käivitatud tänu tarkvara viga.
>> See oli iisraellasi, kes esimesena avastas et mida kauem süsteem
oli, seda suurem on aja erinevus sai tänu kella
varjatud süsteemi arvuti.
>> JACK GANSSLE: Umbes kaks nädalat enne tragöödia Dhahran, iisraellaste
teatatud, et kaitseministeerium et süsteem oli kaotanud aega.
Pärast umbes kaheksa tundi järjest nad märkasid, et süsteem on
muutub märgatavalt vähem täpne.
Defense Department vastas ütleb kõik Patriot patareid
et jätke süsteemid on juba pikka aega.
Nad ei ole kunagi öelnud, mida pikka aega olnud.
Kaheksa tundi?
10 tundi?
1000 tundi?
Keegi ei teadnud.
>> SPEAKER 1: Patriot aku paiknevate kell barakkides Dhahran
ja selle vigane sisemist kella olnud on üle 100 tunni ööl
25. veebruar.
>> JACK GANSSLE: See jälgida aega täpsust umbes kümnendik sekundit.
Nüüd kümnendiku teine ​​on huvitav number, sest see ei saa olla
väljendatud binaarne täpselt, mis tähendab, ta ei saa väljendada täpselt
iga kaasaegse digitaalse arvuti.
On raske uskuda, kuid kasutada seda näiteks.
Võtame number üks kolmandik.
Kolmandik ei saa väljendada koma täpselt.
Üks kolmandik on 0,333 kavatse edasi lõpmatuseni.
Ei ole nii, et mida teha, et absoluutne täpsus koma.
See on täpselt samasugune probleem mis juhtus Patriot.
Mida pikem on süsteem jooksis halvim aeg viga sai.
>> SPEAKER 1: Pärast 100 töötundi viga ajal oli ainult
umbes ühe kolmandiku teine.
Aga nii suunatud rakett liigub mach viis, selle tulemuseks
jälgimise viga üle 600 meetri.
Oleks saatuslik viga sõdurid Dhahran.
>> THEODORE Postol: Mis juhtus on Scud käivitada avastati varakult
hoiatus satelliite.
Ja nad teadsid, et Scud tuli nende üldine suund.
Nad ei teadnud, kus see oli tulemas.
>> SPEAKER 1: See oli nüüd kuni radar komponent Patriot süsteem
kaitsta Dhahran leida ja hoida jälgida sissetuleva vaenlase rakett.
>> JACK GANSSLE: radar oli väga tark.
See oleks tegelikult jälgida positsiooni Scud ja siis ennustada, kuhu see
ilmselt oleks järgmine kord radar saata impulsi läbi.
Seda kutsuti vahemikus värav.
>> THEODORE Postol: Siis kui Patriot otsustab piisavalt aega on möödas, et minna
seljatoele ja kontrollitakse järgmise asukoht see avastatud objekt, see läheb tagasi.
Nii et kui ta läks tagasi valesti paigas, siis ei näe objekti.
Ja ta otsustab, et ei ole objekt, see oli vale tuvastamise ja
langeb teele.
>> SPEAKER 1: sissetulev Scud kadunud : radari ekraani ja
sekundit hiljem ta slammed sisse tagasi.
Scud hukkus 28 ja oli viimane tulistas esimese Lahesõja.
Traagiliselt uuendatud tarkvara saabus kell Dhahran järgmisel päeval.
Tarkvara viga oli kindlaks määratud, sulgedes ühe peatüki raskustes
ajalugu Patriot rakettide.
>> Patriot on tegelikult akronüüm jaoks suunadiagrammiga jälgimine
Lõikepunkt Target.
>> DAVID J Malan: Olgu, kainestav näiteks, et olla kindel.
Ja õnneks on need madalama taseme vead ei ole midagi, et me tulen
tavaliselt on hinnata, kindlasti mitte mõned meie
varaseim programmid.
Pigem enamik vigu teid kohtumine on loogiline looduses
süntaktiline iseloomuga, mille kood lihtsalt ei tööta õigus.
Ja sa tead seda üsna kiiresti.
>> Aga eriti kui saame semestri lõpuks, see läheb
üha enam ja enam võimalus tõesti mõtlema disaini
oma programme ja nende aluseks olevate esindus
seal ka andmeid.
Näiteks, me tutvustada MySQL, mis on populaarne andmebaasi mootor
, mida saab kasutada koos veebilehed andmeid salvestada lõppfaasi.
Ja sa pead alustama otsustada, semestri lõpuks mitte ainult see, mida
liiki andmete suunas kasutada kuid täpselt, mitu bitti kasutada,
kas soovite salvestada kuupäevad nagu kuupäevad ja kellaajad on ajad ja ka
asjad, kui suur sa tahad unikaalsed koodid olla, ütleme, kasutajad
oma andmebaasi.
>> Tegelikult, kui mõned teist on olnud Facebook moodustab üsna pikka aega,
ja sa tead, kuidas saada juurdepääsu oma kasutajatunnus -
mis mõnikord näitab üles oma profiili URL, kui olete valinud
hüüdnimi URL, või kui olete Kasutatud Facebook Graph API,
üldkasutatavate API, mille abil küsida Facebook algandmeid -
saate näha, mida oma numbriline ID on.
Ja mõned aastad tagasi, Facebook põhiliselt oli muuta kasutamast
samaväärne ints kasutades pikk kaua, sest aja jooksul, kui kasutajad tulevad
ja minna ja luua palju kontosid ja fake kontod, isegi need väga kergesti
suutsid ammendab midagi 4 miljardi võimalik väärtus nagu int.
>> Nii enam nende laadi küsimused mööda teed, samuti.
Olgu, mis oli otsustav.
See oli ebatäpsus.
Paar kiiret teadaandeid.
Nii lõigud ametlikult alustada tuleval Pühapäev, esmaspäev, teisipäev.
Sa kuuled emailiga hiljem sel nädalal kui oma osa loovutamisega.
Ja sa ka siin sel hetkel kui muuta oma osa, kui teie
ajakava on nüüd muutunud või teie mugavuse tase on nüüd muutunud.
Vahepeal P-set üks ja häkker üks on kuna sel neljapäeval koos võimalusega
pikendada seda tähtaega ühe kirjeldused reede
tüüpiline viis.
>> Mõistma, et ka probleemi set spetsifikatsioonid juhiseid
kuidas kasutada CS50 seade, mark, samuti mõned CS50 erivahendeid
nagu style 50, mis võib anda teile tagasisidet dünaamiliselt
kvaliteet oma koodi stiili ja ka vaadake 50, mis võib anda teile
dünaamiline tagasisidet oma kood őigsuse.
Andestage, et me ikka triikimine välja mõned kiiksud koos kontroll 50.
Paar oma klassikaaslastega, kes ei hakata umbes 04:00 reedel, kui
spec läks märganud, sest siis mõned vead, et me töötame
kaudu, ja vabandused kõigile, kes on kogenud liigse pettumusi.
Süü on minu.
Aga me jälgida CS50 arutada, kui see on lahendatud.
>> Nii sõna hinded ise.
Nii, et see on nädal või kaks enne hakkama saada tagasisidet probleemi komplekti
sest sa ei ole veel õpetamise mehe.
Ja isegi siis, hakkame hindama C probleem seab enne me
minna tagasi ja hinnata nullist nii et saad rohkem asjakohaseid
tagasiside kiiremini.
Aga üldiselt ühe õppekava, CS50 probleem komplekti hinnatakse mööda
pärast nelja telje -
ulatust, õigsust, disaini ja stiili.
>> Ulatus saab olema number tavaliselt nulli ja viis selle
lööb kui palju tükk, mis sa hammustas.
Tavaliselt sa tahad, et see on viis.
Sa vähemalt kõike proovinud.
Ja teate, et see on kordades tegur nii, et teeme ainult osa
Ülesanded ei ole parim strateegia.
>> Vahepeal ilmsem on tähtsust õigsust -
lihtsalt on oma programm õige koos Seoses spetsifikatsioon?
See on kaalutud teadlikult rohkem kõrgemalt kui teised kaks suunad
kolmega, sest me mõistame et tavaliselt sa lähed kulutada
palju rohkem aega taga ajades maha mõned vead, saada oma koodi tööle, siis
trepitakse seda ja valides asjakohane muutujate nimed ja
meeldib, mis on teises otsas spektri stiilis.
>> See ei tähenda, stiil ei ole oluline, ja me kuulutame selle üle
aega nii loenguid ja punktides.
Style viitab esteetika oma koodi.
Kas olete valinud hästi nimega muutujaid mis on lühike, kuid mõnevõrra
kirjeldav?
Kas teie kood liigestatud kui oled näinud loeng ja viisil, mis
style 50?
>> Lõpuks on disain õigus seal keskel.
Disain on raskem ühe panna sõrme, sest see on palju rohkem
subjektiivne.
Aga see on võib-olla kõige tähtsam kolm telge poolest pedagoogiline
väärtus aja jooksul ning et see on õpetamise mehe poolt võimaluse
annab teile kvalitatiivset tagasisidet.
Tõepoolest, CS50 kuigi meil on Nende piimasegude ja skoori lõpus
päeval on need väga teadlikult väga väikesed kopad - punkt väärtused
nulli ja kolm ja null ja viis.
Me ei püüa teha väga jäme read vahel probleem komplekti vahel või
õpilased, vaid pigem keskendub nii palju kui saame kvalitatiivsete, kirjapaber
tagasisidet, kas trükitud või verbaalne alates teie õpetamise mehe,
saad teada, päris hästi.
>> Aga üldiselt on need raskused et erinevate suundade on.
Vahepeal liiga, see on väärt meeles meeles, et sa ei tohiks eeldada, et
kolm viiest on 60% ja Seega jämedalt kukkumas.
Kolm on tahtlikult mõeldud justkui keset teed head.
Kui te saate kolmekesi juures Semestri alguses, see on
tõepoolest mõeldud hea koht alustamiseks.
Kui te saate kahekesi, messid, seal kindlasti mõned tööd maksma veidi
rohkem tähelepanu, et ära Punktide ja tööajal.
>> Kui sa käid püksid ja viied, suur.
Aga tõesti, loodame trajektoorid õpilaste seas - väga
individualiseeritud õpilase kohta, kuid algus semester siin omamoodi
kaks kuni kolm valikut, vaid lõpeb siin on 4-5 vahemikus.
See on see, mida me tegelikult otsime.
Ja me meeles delta et sa näitama vahel nädal nulli ja nädal
12 kui ma teen klassid.
See ei ole tähtis, et meid absoluutselt kuidas sa aus alguses, kui teie
trajektoor on tõepoolest ülespoole ja tugev.
>> Akadeemiline ausus - las ma panna minu raskemad hääl hetkeks.
Nii see muidugi on vahet saates rohkem õpilasi kui mis tahes muu
ajaloos reklaam pardal, ma usun.
Meil on justkui kadunud count selles koht, kui tihti seda juhtub.
Ja see ei ole, sest õpilasi 50 on enam ebaaus kui nende
klassikaaslastega mujal.
Aga mõistma ka seda, et meil on väga hea tuvastamiseks selline asi.
>> Ja see on see eelis, et arvutiteadus klass on, et meil
võimalik ja me võrrelda kõigi õpilaste probleem seab paariviisiliste vastu iga
teiste, mitte ainult sel aastal aga kõik enne aastat.
Meil on võime, nagu õpilaste klassi, Google ja leida kood
saitidel nagu github ja foorumeid.
On absoluutselt lahendusi CS50 on p-komplektid ujuvad ringi seal.
Aga kui sa leiad neid, me ei saa neid leida.
Ja kõik see on väga automatiseeritud ja lihtne ja kurb, et me leida.
>> Aga ma tahan rõhutada ka seda, et Muidugi akadeemilise aususe poliitika
väga palju mõeldud väga palju vastupidine vaimus.
Tõepoolest, sel aastal oleme ümbersõnastatud asjad ainekava olla see, dot
dot dot koos üksikasjalikumalt ainekava.
Aga põhiteema käigus tõesti on mõistlik.
Me mõistame, et on olemas märkimisväärne summa pedagoogilise
väärtus koostöövõimalusi, mõningal määral koos klassikaaslastega, mille te
kaks või sa kolm või te enam ei seisvat Tahvel
whiteboarding, nii et rääkida, oma mõtteid -
kirjalikult esitatud pseudokoodi piltides, skeemide mida peaks Mario olema kui
sa kirjutada see esimene aastal pseudokoodi.
Mida peaks ahne algoritm -
kuidas peaks ta käituma kohta probleem seab üks?
>> Ja nii aru, et käitumine et me julgustame on väga
palju sarnast.
Ja ainekava, näete terve hunnik täppe all
mõistlik kategooria ja ei ole mõistlik kategooria, mis aitab meil aidata
te wrap meelt ümber, kus me teha, et liin.
Ja üldiselt, korralik rusikareegel on see, et kui te olete hädas, et lahendada
mõned bug ja sinu sõber või klassivend istub sinu kõrval, siis on
mõistlik teile näidata talle oma koodi ja öelda, hei, saate aidata
mul aru saada, mis toimub vale siin?
>> Me tavaliselt ei omaks küljel.
See ei ole õige vastus teie sõber või klassivend siin ütlema, oh,
lihtsalt pilk minu ja joonis ta välja, et.
See on omamoodi ebamõistlik.
Aga võttes keegi teine ​​aju, teine ​​paar silmi vaadata
ekraani või pilk oma koodi ja öelda, sa oled kindel, et soovid
on loop siin?
Või oled kindel, et soovid et semikoolon siin?
Või oh, et veateade tähendab seda.
Need on väga mõistlikud ja julgustada käitumist.
>> Juhtudel, mille olin vihjates varem Keeta kui õpilased on
hilisõhtuni tegemine halva otsuse otsused ja postitada oma koodi
keegi teine ​​või lihtsalt öeldes siin, see on Dropbox või
Google'i abil hilisõhtuni.
Ja nii ma julgustaks ja anun teid, Kui sul on need vältimatu
hetked stress, sa keemistsentrid üles vastu tähtaega, siis ei ole hilja
päev, sest see on juba reede sel punkt, kirjuta käigus peade või
ise otse.
Ütle, kuula, ma olen mu Murranguliseks siin.
Olgu meil vestlus ja sellest aru saada.
Võib kasutada veebis või mõne muu mitte mõistlik käitumine ei ole kunagi
lahendus, ja liiga palju oma klassikaaslastega, ei ole enam siin
campus, sest et halva otsuse.
Aga see on väga lihtne seelik et liin.
>> Ja siin on väike pilt tuju sa üles Reddit nii et nüüd
kõik saab korda.
>> Nii kiire sulgege siis kus me pooleli jäime.
Nii eelmisel nädalal meelde tuletada, et me võtame kasutusele tingimustele, ei Scratch
kuid C seekord.
Ja seal oli mingi uus süntaks kuid tegelikult ei ole uusi ideid iseenesest.
Meil oli Loogiline väljendeid, et me võiksime või koos kahe vertikaalse
baari või ja koos kahe sümboliga, öeldes, et nii vasak
ja õigus peab olema tõeline Selle täitmiseks.
Siis oli meil lülitid, mis me vaatasime kell lühidalt, kuid pakun on tõesti
lihtsalt süntaks saavutada samasugune eesmärk, kui sa tead
ette, mida teie juhtudel hakkavad olema.
>> Vaatasime silmuseid.
Silmus on võibolla kõige levinum, või vähemalt üks, et inimesed
tavaliselt jõuda instinktiivselt.
Kuigi see tundub veidi segasena, näete palju, palju näiteid
Enne pikk, kui teil on juba möödunud nädala lõpul.
Kuigi ring saab sarnaselt saavutada sama asi.
Aga kui sa tahad teha mingeid incrementation või ajakohastamine
muutuja väärtused, pead seda enam käsitsi kui
silmus enne seda võimaldab.
Ja siis on do-kui ahela, mis võimaldab meil teha midagi juures
Vähemalt kord kui midagi muidu on tõsi.
Ja see on eriti hea programme või mänge, kus soovite
ajendab kasutaja midagi vähemalt üks kord.
Ja siis, kui ta ei tee koostööd võiksite teha
uuesti ja uuesti.
>> Mis muutujad, vahepeal pidime read kood, nagu see, mis võiks
olema kaks rida.
Sa võid kuulutada int nimega counter, semikoolon.
Või võite lihtsalt tunnistada ja defineerida, nii rääkida.
Anna see raha samal ajal.
>> Ja siis lõpuks, me rääkisime umbes funktsioone.
Ja see oli hea näide selles mõttes, et see illustreerib
kahte tüüpi ülesandeid.
Üks on getString (), mis jällegi saab string kasutaja.
Aga getString () on omamoodi huvitav, kuivõrd me oleme seda kasutanud,
sest me oleme alati kasutanud seda midagi vasakul servas
võrdusmärk.
See tähendab, et getString () tagastab väärtuse.
See käib muidugi string.
Ja siis vasakul servas, me oleme lihtsalt säästa, et string sees
muutuja nimega nimi.
>> See on erinev, mõnes mõttes, alates printf sest printf, vähemalt meie
kasutamine siin ei tagasta midagi.
Nagu kõrvale, ei midagi tagastada.
Me lihtsalt ei huvita, mis see on.
Aga see on see, mida on nimetatakse kõrvalmõju.
Ja mis on selle kõrvaltoime iga juhul oleme näinud siiani?
Mis printf teha?
Ta prindib midagi ekraanil kuvab teksti või numbreid või midagi
ekraanil.
Ja see on just pidada kõrvaltoime sest see ei ole tõesti üleandmine
see mulle tagasi.
See ei ole vastus sees must kast, mis suudan, siis
haaret ja haarata.
See on lihtsalt teevad seda omal, palju nagu Colton oli ühendatud see
must kast eelmisel nädalal ja ta kuidagi võluväel joonistasin laual
ilma mind tegelikult seotud.
See oleks kõrvalmõju.
Aga kui ma tegelikult pidi jõudma tagasi siin ja öelda, oh, siin on string
kasutaja, et oleks olema tagastatav väärtus.
>> Ja siiani oleme ainult kasutatavate funktsioonide et teised inimesed on kirjutatud.
Aga me ei saa tegelikult teha neid asju ise.
Ma lähen minema CS50 seade uuesti.
Lubage mul kaardi sulgeda, et me oli avatud hetk tagasi.
Ja lubage mul minna ja luua uus fail.
Ja ma lähen edasi minna ja nimetame seda üks positive.c.
Nii et ma tahan midagi teha positiivseid numbreid.
Nii et ma lähen edasi minna ja teha int -
sorry -
# Include.
Ärme tee seda sama viga nagu enne.
Int main (void), avatud lokkis traksidega, suletud lokkis traksidega.
>> Ja nüüd ma tahan teha järgmist.
Tahan kirjutada programm, mis nõuab, et kasutaja annab
mulle positiivne täisarv.
Seega ei ole GetPositiveInt funktsioon aastal CS50 raamatukogu.
Seal on ainult GetInt ().
Aga see on OK, sest mul on konstruktsioone, kellega ma ei kehtesta
veidi rohkem survet avaldada, et väärtus.
Ma võiks teha midagi sellist.
>> Nii int n -
ja kui sa oled kirjutades mööda, lihtsalt aru, Ma lähen tagasi ja
muuta mõningaid asju hetk -
nii int n võrdub GetInt ().
Ja see läheb panna int sees n.
Ja lubage mul olema rohkem kirjeldav.
Lubage mul öelda midagi sellist ma nõuan, et sa annad mulle positiivne täisarv.
>> Hea küll.
Nii lihtsalt natuke juhiseid.
Ja nüüd, mida ma teha saan?
Noh, ma juba tean, minu lihtne tingimuste või oksi, nagu ma
oli Scratch, ma ei ütle midagi nagu siis, kui n on väiksem või võrdne
null, siis ma tahan teha midagi meeldib, et ei ole positiivne.
Ja siis ma võiks teha -
OK, aga ma tõesti tahan saada, et int.
Nii et ma võiks minna siin ja sain lahke koopia see ja taane seda.
Ja siis OK.
Nii et kui n on väiksem või võrdne nulliga teha.
>> Nüüd, aga kui kasutaja ei tee koostööd?
Noh, siis ma lähen laenata siin.
Ja siis ma lähen siin ja siin ja siin.
Nii et see ei ole selgelt lahendus, eks?
Sest seal ei ole lõppu näha.
Kui ma tahan, et nõuda kasutaja annab mulle positiivne täisarv, ma ei
tegelikult saada int.
Võin siis kontrollige, et int.
Aga siis ma tahan vaadata seda uuesti ja proovi uuesti ja proovi uuesti.
Nii et ilmselt see, mis on parem ehitada, et nad kasutavad siin?
Olgu, mingi loop.
>> Ma lähen, et saada lahti peaaegu kõik.
Ja ma tahan, et saada see int vähemalt üks kord.
Nii et ma ütlen seda -
ja ma tulen tagasi samas kui üks hetk -
nüüd, mida teha?
Ma lähen tegema, int n saab GetInt ().
OK.
Nii et on üsna hea.
Ja nüüd, kui tihti Ma tahan seda teha?
>> Las ma panen printf sees loop nii et ma ei nõua uuesti ja uuesti,
kui oleks vaja olnud.
Ja mida ma tahan, et see kui tingimus teha?
Ma tahan hoida seda teed kui see, mida on nii?
Jah.
N on väiksem või võrdne nulliga.
Nii juba oleme oluliselt puhastada seda koodi üles.
Oleme laenatud väga lihtne ehitada - do-samas silmus.
Olen varastatud ainult tähtsamad read kood, mis ma alustasin kopeerimine ja
kleepida, mis ei ole mõistlik.
Ja nüüd ma lähen tegelikult kleebi seda siin ja just seda teha üks kord.
>> Ja nüüd, mida ma tahan teha, on Päris lõpus selle programmiga?
Ma lihtsalt öelda, midagi lihtsat meeldib, aitäh - ja
Ma teen% i jaoks int -
Kenoviiva n, koma ja seejärel pistik n, semikoolon.
>> Hea küll.
Vaatame, mis juhtub nüüd kui ma saan seda programmi.
Ma lähen edasi minna ja ei tee positiivne.
Kurat.
Mõned vead.
Nii et lubage mul kerida tagasi kuni esimese.
Ärge töö kaudu neid tagasi.
Töö kaudu neile ülevalt alla muidu nad kaskaadi ja ainult
üks asi on vale.
Kaudsed deklaratsioon funktsioon GetInt ().
Jah.
Nii et see ei olnud piisavalt.
I liiki teinud sama viga, kuid veidi erinev seekord.
Mul on vaja mitte ainult hõlmama stdio.h kuid Samuti cs50.h, mis hõlmab
niinimetatud deklaratsioonid saada int, mis õpetada seadme või õpetab
C mis GetInt () on.
>> Nii et lubage mul uuesti salvestada.
Ma ignoreerida teiste vigu sest ma lähen loodan, et nad
kuidagi seotud viga Ma juba fikseeritud.
Nii et lubage mul minna ja kompileeri koos teha positiivne, Enter.
Kurat.
Kolm vigu ikka.
Lubage mul kerida kuni esimese.
Kasutamata muutuja n.
Me ei näinud seda enne.
Ja ka see on veidi segasena.
See on väljund tõlkija.
Ja mida see esile rida seal - positive.c :9:13 -
ütleb, et see ütlus on line üheksa positive.c kell 13. iseloomu,
13. veerg, siis tegin selle vea.
>> Ja eriti, ta räägib mind kasutamata muutuja n.
Seega vaatame -
line üheksa.
Ma kasutan n selles mõttes, et Ma annan selle väärtus.
Aga mida kompilaator ei meeldi on et ma ei ole ilmselt kasutada.
Kuid oodake minut, ma kasutan seda.
Vastavalt 11, ma kasutan seda siin.
Aga kui ma keri edasi kell positive.c :11 -
nii on line 11, iseloom 12, koostaja mulle, kasutamine
deklareerimata tunnus n.
>> Nii deklareerimata tähendab, et mul täpsustamata seda
muutuja andmetüüp.
Kuid oodake minut.
Ma tegin täpselt, et vastavalt üheksa.
Nii keegi tõesti segaduses siin.
Kas mina või koostaja sest kooskõlas üheksa jällegi Teatan
int n, ja ma määrata see tagastatav väärtus GetInt ().
Siis ma kasutan, et muutuja n kooskõlas 11 ja kontrollida, kas selle väärtus on väiksem
kui või võrdne nulliga.
Aga see ilmselt on halb ja purustatud miks?
Ütle seda uuesti?
>> Ah, ma pean deklareerima n enne sisenemist silmus.
Aga miks?
Ma mõtlen, et me lihtsalt ettepaneku veidi tagasi, et see on hea, et kuulutada muutujad
kõik ühes reas ja siis anda neile mingi väärtus.
Globaalse muutuja - tulgem tagasi selle idee vaid hetk.
Miks sa tahad, et panna see väljaspool loop?
On.
Täpselt.
>> Niisiis, ehkki mõnevõrra ebaloomulik, Võtan kokku.
Kui kuulutada n sees Euroopa do plokk seal -
konkreetselt sees need looksulg -
et muutuja n on mis nimetatakse ulatus -
mitteseotud meie punktisüsteem sisse muidugi - aga on ulatus, mis on
piirdub looksulg.
Teisisõnu, tavaliselt siis, kui te deklareerite muutuja sees kogum
looksulg, et muutuja eksisteerib ainult sees need looksulg.
Nii selle loogika üksi, kuigi Olen kuulutatud n vastavalt üheksa, see
sisuliselt kaob ulatus, kaob mälu, nii et rääkida,
selleks ajaks ma tabanud rida 11.
Kuna line 11 on kahjuks väljaspool neid looksulg.
>> Nii et ma kahjuks ei saa kinnitada seda, läheb tagasi, mida ma tegin seda varem.
Sa esmapilgul seda teha.
Aga mida sa praegu ei teeme tsükliliselt?
Sa ilmselt ei saada int tsükliliselt.
Nii et me ei jäta GetInt (), ja me tuleb jätta GetInt () sees
loop, sest see on, mida me tahame tülitama kasutaja jaoks uuesti ja uuesti.
Aga see ei piisa, et minna kuni rida, ütleme, kuus.
Int n, semikoolon.
Ära anna see raha veel, sest sa ei pea veel.
>> Aga nüüd siin all, teate - see Oleks väga lihtne viga.
Ma ei taha varju minu eelmine deklaratsiooni n.
Ma tahan kasutada n, et tegelikult olemas.
Ja nüüd vastavalt 10, Ma määrata n väärtus.
Kuid rida kuus, Kinnitan n.
Ja nii ma saan või ma saan mitte kasutage seda rida 12 nüüd?
Ma ei sest vahel mis lokkis traksid on n deklareeritud nüüd?
Üks siin real viis.
Et üks siin on line 14.
Nii et kui ma nüüd suumimiseks salvestada see fail, mine tagasi ja käivitage teha positiivne,
koostatud seekord.
Nii et juba käimas.
Slash. . / Positiivne, Enter.
>> Ma nõuan, et sa annad mulle positiivne täisarv.
Negatiivne 1.
Negatiivne 2.
Negatiivne 3.
Zero.
One.
Ja tänud üks on mis nüüd trükkida.
>> Las ma proovin midagi muud, uudishimust.
Ma öeldakse sisestada täisarv.
Aga kui ma selle asemel kirjuta lambaliha?
Nii et sa nüüd näha erinevaid prompt -
proovige uuesti.
Aga kusagil minu kood ma kirjutan uuesti.
Nii et kui arvatavasti on see uuesti kiire tulevad, sa ütleksid?
Jah, alates GetInt () ise.
Nii et üks asi, CS50 töötajad ei teile, vähemalt need esimese paari
nädalat, on meil kirjutada mingi summa Vea kontroll tagamaks, et kui
helistate GetInt (), siis vähemalt saada tagasi int kasutaja.
Sa ei saa stringi.
Sa ei saa char.
Sa ei saa midagi teine ​​hoopis.
Sa saad int.
>> Nüüd, see ei pruugi olla positiivne.
See ei pruugi olla negatiivne.
Me ei tee garantiid umbes nii.
Aga me tülitama kasutajal uuesti, uuesti, uuesti, kuni ta tegelikult
koostööd.
Samamoodi, kui ma 1.23, et ei ole int.
Aga kui ma ei kirjuta, ütleme, 50, et annab mulle raha, et ma tahtsin.
>> Hea küll.
Nii ei ole halb.
Kõik küsimused selle kohta, mida me oleme lihtsalt teha?
Võti Buffee on, et oleks selge, ei nii palju silmus, mis me oleme näinud
enne, kuigi me ei ole tõesti kasutatud, kuid küsimus reguleerimisala seal, kus
muutujaid saab saab kasutada ainult jooksul teatud kindlaksmääratud ulatust.
>> Olgu, las ma tegeleda soovitus sa tegid varem, et on
globaalse muutuja.
Nagu kõrvale, tuleb välja, et teise Lahendus sellele probleemile, kuid
tavaliselt vale lahendus või halvasti kavandatud lahendus, on
deklareerima oma muutuja, mida on nimetatakse globaalse muutuja.
Nüüd ma olen selline rikkumata minu definitsioon kohaldamisala, sest seal on
ei looksulg tipus ja väga põhjas faili.
Aga mõjuta selle on see, et nüüd kooskõlas neli,
n on globaalne muutuja.
Ja nagu nimigi ütleb, on see lihtsalt kättesaadav kõikjal.
>> Scratch on tegelikult need.
Kui kasutasite muutuja, võite meelde tuletada sa pidid valima, kui see on
see sprite või kõik sprites.
Noh, kõik sprites on lihtsalt selgem viis öelda globaalne.
Jah?
Ah, tõesti hea küsimus.
>> Nii meelde, et kõige esimene versioon minu kood, kui ma valesti
deklareeritud ja määratletud n kooskõlas üheksa -
I kuulutas selle muutuva ja ma andsin selle väärtus
omistamisoperaatorile -
see andis mulle kaks viga.
Üks asjaolu, et n ei kasutatud, ja kaks, et kooskõlas 11.
see lihtsalt ei ole deklareeritud.
Nii et esimene, mida ma ei teinud aadress ajal.
See ei ole tingimata viga tunnistada erinev, kuid ei kasuta seda.
Aga üks asi, mida me oleme teinud CS50 aparaat, tahtlikult,
pedagoogiliselt, on meil fikseeritud üles ootused koostaja teha
kindel, et sa teed asju, mitte lihtsalt õigesti, aga tegelikult õigesti.
>> Sest kui sa kuulutab muutuja nagu n ja ei kasuta seda või seda kasutada
õigesti, siis milline ta teeb seal?
See tõesti ei ole mõtet.
Ja see on väga lihtne aja jooksul kui te ei seadistada oma arvuti
Nii et lihtsalt kood, mis on vähe jäänuseid siin jäänuseid seal.
Ja siis kuu hiljem sa vaatad tagasi ja sa oled nagu, miks on see rida
kood on?
Ja kui seal on mingit põhjust, see ei kasu teile või teie kolleegid
mööda teed pea pahandab selle üle siis.
>> Nagu kõrvale, kus on see tuleb?
Noh, meelde tuletada, et iga kord, kui oleme kompileerida programm, kõik see kraam on
trükkimist.
Nii et me tuleme selle juurde tagasi.
Aga jälle, teha on utiliit, mis automatiseerib protsessi koostamise poolt
töötab tegelik koostaja nimetatakse rõkkama.
See asi, me lõpuks näha, on pistmist silumine spetsiaalse
programmi nimega silur.
See on pistmist optimeerides kood - rohkem, et tulevikus.
Std = C99 -
tähendab see lihtsalt seda kasutada 1999 versioon C. C on olnud umbes isegi kauem
, kuid nad tegid mõne kena muutused 10 pluss aastat tagasi.
>> Ja siin on asjakohane ones.
Me ütleme teha midagi, mis varem oleks olnud hoiatus
viga takistab üliõpilane alates koostamisel.
Ja seina vahenditega teha, et terve hunnik asju, mis ei
lihtsalt seotud muutujad.
Ja siis las ma leidke lõpuks see liin.
Ja see ka, siis me lõpuks tagasi tulla.
See on ilmselt nime faili ma koostamisel.
See tuletab meelde faili nimi Ma kirjutamine nagu nimigi
minu runnable programm.
See-lcs50 tähendab lihtsalt kasutada CS50 raamatukogu ja kõik nullid ja need, mis
töötajad kirjutas ja koostas varem Tänavu integreerida
need mu programmi.
>> Ja keegi teab, mis-lm on?
See on matemaatika raamatukogu, mis on just seal, isegi kui sa oled
ei tee mingit matemaatikat.
See on lihtsalt automaatselt ette poolt meile teha.
>> Noh, lubage mul teha veel üks näide siin avades uue faili.
Ja las ma salvestan selle ühe string.c.
Selgub, et kui me räägime andmed tüüpi täna, seal on isegi rohkem
toimub all kapuuts kui me oleme näinud siiani.
Nii et lubage mul kiiresti teha kiire programm.
Kaasa stdio.h.
Ja jätan alles.
Ja sa tead, lubage mul ei tee sama viga ikka ja jälle.
Kaasa cs50.h.
Ja lubage mul minna nüüd ja teha int main (void).
>> Ja nüüd ma lihtsalt tahan teha programm et teeb seda - tunnistada string
nimetatakse s ja saada string kasutaja.
Ja las ma teen natuke juhised siin -
palun anna mulle string - nii kasutaja teab, mida teha.
Ja siis siia alla see, Ma tahan teha järgmist -
jaoks int i saab nulli.
Jällegi, arvuti teadlased tavaliselt alustada nullist, kuid me võiksime
teha, et üks, kui me tõesti tahtsid.
Nüüd ma lähen tegema, i on vähem kui string pikkusega s.
Nii strlen -
S-T-R-L-E-N -
Jällegi, see on lühike, sest see on lihtsam kirjutama, kuigi see on
veidi segasena.
>> See on funktsioon, meil ei kasutata enne aga sõna otseses mõttes ei tee seda -
tagasi mulle number, mis tähistab stringi pikkusena
et kasutaja sisestatud.
Kui nad kirjutada tere, oleks tagasi viis, sest seal on viis
tähed tere.
Siis, iga iteratsiooni see silmus, i pluss pluss.
Nii et taas, standard ehitada isegi kui sa ei ole päris liiga mugav või
tuttav veel.
>> Aga nüüd iga iteratsiooni see ahel, teate, mida ma teen.
Ma tahan minna ja printida välja ühe märgi -
nii% c Kenoviiva n uuele reale.
Ja siis sa tead, mida ma tahan teha?
Ükskõik sõna on see, et kasutaja tüübid aastal, nagu tere, ma tahan trükkida
H-E-L-L-O, üks märk igale reale.
Teisisõnu, ma tahan saada on üksikute märkide jada,
kusjuures siiani string on lihtsalt olnud märgijada.
>> Ja selgub, mida ma teha saan s, sulg, i, sulg, sulgege
sulgudes semikooloniga.
Ja ma pean tegema veel üks asi.
See on fail nimega string et strlen deklareeritakse.
Nii et kui ma tahan kasutada seda funktsiooni, Ma pean ütlema, tõlkija,
eeldada, et seda kasutada.
Nüüd lubage mul minna ja teha programmi nimega string.
Dot, slash, string.
>> Palun andke mulle string.
Ma lähen edasi ja sisestage see.
Tere, kõik mütsid, Enter.
Ja nüüd teate Olen trükitud seda üks märk teise järel.
Nii uus detail on see, et string, lõpus päeval, võib olla
juurde viis selle üksikute tähemärki, lisades ruut
sulg märke.
Ja see on, sest string all kapuuts on tõesti jada
tähemärki.
Aga mis on puhas nende kohta on oma arvuti RAM -
Mac, PC, mis see on - nad sõna otseses mõttes tagasi seljad -
H-E-L-L-O -
Üksikute, mis külgneb baiti mälu.
>> Nii et kui sa tahad saada kaheksandal selline bait, mis selles loop oleks
sulg null, sulg üks, sulg kaks, sulg kolm, sulg neli -
mis on null indekseeritud kuni viis -
mis trükib välja H-E-L-L-O oma rida.
>> Nüüd, kui teaser, lubage mul teile näidata erinevaid asju saate lõpuks olema
aru saama, vähemalt mõned lähedale vaadates.
Ühe, mida me ka tänapäeva näiteid, kui soovite, on tegelikult
üks esimesi jailbreaks iPhone.
Täielikuks tähendab lõhenemist telefon nii et saate tegelikult seda kasutada
muu vedajaga või install oma tarkvara.
Ja märkad seda välja täiesti segasena, kõige tõenäolisem.
Aga vaata seda.
IPhone oli ilmselt krakitud koos jaoks loop, kui tingimus, muidu
tingimus, hunnik funktsioone me ei ole näinud.
>> Ja veel, sa ei ole Esmapilgul ilmselt
mõista, kuidas see töötab.
Aga kõik, mida me justkui võtma enesestmõistetavaks meie tänapäeva elu
tegelikult kipub vähendama isegi mõned Nende põhialuste me oleme
vaadates.
Lubage mul minna ja avada ühe muud programmi holloway.c.
Nii ka see on midagi, mida ei tea.
Isegi ükski töötaja või suutsin tõenäoliselt näitaja see läbi vaadata
sest see oli kellegi kood mis esitati mis
ajalooliselt tuntud obfuscated C võistlus, kuhu kirjutada programm
mis kogub ja töötab, kuid on nii kuradi segasena ükski inimene saab aru, mida
ta kavatseb teha kuni nad tegelikult käivitada.
>> Nii tõesti, kui te vaatate seda kood, näen lüliti.
Näen peamist.
Ma näen neid nurksulgudes tähendab mingi massiivi.
Kas keegi taha arvata, mida see programm tegelikult
ei kui ma saan Holloway?
Jah.
OK.
Hästi tehtud.
Nii ainult töötajatele ja ma ei saa aru millised need asjad teha.
>> Ja nüüd lõpuks, lubage mul minna ning avada üks teine ​​programm.
See üks -
uuesti, teeme lähtekoodi saadaval internetis - see on lihtsalt
omamoodi ilus vaadata.
Kõik nad tegid on tabanud tühikut üsna vähe.
Aga see on reaalne kood.
Nii et kui te arvate, et on ilus, kui me tegelikult kestab see on kiire,
lõpuks näete, kuidas me võiks teha asjad niimoodi.
>> Nii me jätan teid selle märkuse ja vaata sa kolmapäeval.
>> [Muusika mängib]
>> SPEAKER 2: Järgmise CS50, TF lavastada mässama.
>> SPEAKER 3: Seal ta on.
Andke talle!
>> [Muusika mängib]