[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]