[Muzikavimo] DAVID J Malan: Gerai, Sveiki sugrįžę CS50. Tai savaitės dviejų pradžia. Iš vieno iš mūsų žodis draugai miesteliu - jei jus domina, jei įmanoma, arba dabar arba tam tikru metu ateityje terminas net, kai patogiau, mokymas vidurinių mokyklų moksleiviai mažai kažkas apie kompiuterių mokslą, padaryti galva, kad URL. Jie yra ypač reikalinga dabar iš mokytojai, ypač jei turite turėjo tam tikrą poveikį kompiuterių mokslo. Taigi priminti, kad paskutinį kartą, mes pristatėme keletas duomenų tipai C, ir jums gali tekti pradėjo gauti savo rankas purvinas su jais iki šiol į problemą nustatyti vieną. Ir mes turėjome Char. Taigi, šiek tiek techninių terminų, kas yra char kaip žinote šiandien? Taigi tai simbolis, bet tegul Tiksliau dabar. Ką mums reiškia pobūdžio arba individuali char? Ne skaitmeninis pobūdis - todėl nebūtinai. Pasirodo, kad net numerius, net skyrybos ir raidės atstovaujama su šiais duomenimis įveskite žinomas kaip Char. Taigi tai nebūtinai abėcėlės. Taip? Taigi tai ASCII simbolių. Taigi, jei manote, kad atgal į savaitę nulio, kai mes turėjome savo baitą savanorių sugalvoti ir arba laikyti savo rankas ar ne, jie atstovavo bitai. Bet kartu kaip aštuonerių grupės jie atstovavo baitą. Ir mes pristatė ASCII sąvoka tuo paskaitą, kuri paprasčiausiai yra kartografavimo tarp skaičių ir raidžių. Ir ASCII panaudojimas, kaip tie žmonės numanomų, aštuonis bitus atstovauti simbolį. Taigi, atitinkamai, jei aštuonis bitus gali imtųsi vieną iš dviejų verčių - nulis arba vienas - Tai reiškia, kad buvo dvi galimybės už šio asmens - nulis arba vienas - du už šio asmens, du tai žmogus, du šio vieno. Taigi du kartus iš viso du kartus du kartus du kartus du - todėl du iš viso aštuntas. Taigi, čia yra bendras simbolių skaičius 256 gali būti, kad jūs galite sudaro su aštuonis bitus. Dabar, tiems iš jūsų, kurie kalba Azijos kalbos gali žinoti, kad yra daugiau simbolių pasaulyje ne tik Kaip ir pusryčių ir Cs ir DS. Ir iš tiesų, ASCII nėra pakanka kalbų pasaulyje daug. Bet daugiau apie tai kitą kartą. Nes dabar, žinau, kad C, jei norite atstovauti laišką, gabalas skyrybos, arba tiesiog kažkas pobūdis pobūdžio, mes naudojame Char. Ir tai vienas baitas ar aštuonis bitus. Kaip apie int? Na, int yra sveikasis skaičius. Kiek bitų, jei jūs žinote, buvo sveikasis skaičius paprastai? Kiekvienas prisiminti? Taigi, tai paprastai 32. Jis tikrai priklauso nuo kompiuterio kad jūs naudojate. Tačiau prietaiso, ir daug kompiuterių, tai 32 bitų ar keturis baitų - aštuonis kartus keturi. Ir ints tiesiog naudojama saugoti numeriai, arba neigiamas, teigiamas arba lygus nuliui. Ir jei jūs turite 32 bitų ir turite tik rūpinasi teigiamais skaičiais, gali kas apytikrė kiek įmanoma sveikieji skaičiai kompiuteris gali atstovauti nuo nuliui iki? Taigi būtų du į 32, o yra maždaug keturis milijardus. Taigi šie du įgaliojimai bus pasikartojančios temos kompiuterių mokslo. Kaip matysime, jie gana patogus dirbti, net jei tai ne visai lengva padaryti matematikos galvą. Taigi, mes pasakyti maždaug keturis milijardus. Dabar, ilgai ilgai - galite rūšies atspėti. Tai daugiau nei int. Kiek bitų? Taigi, 64 bitų ar aštuoni baitai. Tai tiesiog reiškia, kad jums gali atstovauti net didesni numeriai, didesnis teigiamas arba didesni neigiami skaičiai. Ir kaip apie plaukti? Štai slankaus kablelio vertė 32 bitų. Tai tik realusis skaičius, kažkas su kablelio. Bet jei vietoj reikia daugiau vietų po kablelio arba norite sudaro didesnę numeris su kai frakcija po to, galite naudoti dvigubai, o tai yra 64 bitai. Tačiau yra įdomus Takeaway čia. Taigi, jei ints riboja 32 bitų ir net ilgi ilgi riboja 64 bitai, kad tarsi kyla klausimas, ką daryti, jei jūs iš tikrųjų norite suskaičiuoti didesnis nei int 4 mlrd? Na, jūs tiesiog naudokite ilgai ilgai. Bet kas, jei norite skaičiuoti didesnis nei du su 64th, duoti ar priimti? Dabar, kad didžiulis skaičius. Bet galų gale, jūs iš tiesų gali rūpintis šių vertybių rūšių, ypač jei jūs naudojate duombazę ir pradeda rinkti daug ir daug ir daug duomenų ir Unikalių numerius kiekvienai šio duomenų gabalas. Taigi mes tarsi turi problemą. Ir panašiai, su slankaus kablelio vertybės - plūdes arba dviviečiai - jei jūs tik gavau baigtinio skaičiaus bitai, kiek iš viso numeriai tu galėjai galbūt atstovauja? Na, tai mažiau akivaizdu, kai jūs įtraukti dešimtainį kablelį. Bet tai tikrai ribotas. Jei turite baigtinio skaičiaus bitai, ribotas skaičius žmonių, baigtinis skaičius lemputes, be abejo, galite sudaro tik baigtinio skaičiaus slankiojo kablelio vertybes. Bet kiek realieji skaičiai yra jų pasaulyje? Yra begalinis. Štai kokios problemos, nes mes neturi begalinį kiekį atminties arba atminties viduje mūsų kompiuteriuose. Taigi, kai sudėtinga viskas gali atsitikti. Taigi eikime į priekį ir pabandyti išreikšti tai čia. Leiskite man eiti į priekį ir atverti gedit. Aš ruošiuosi eiti į priekį ir išsaugoti failą vadinamas "floats0.c" tiesiog būti atitikti pavyzdį, kuris yra galima rasti internete, jei norite. Ir aš ruošiuosi eiti į priekį ir apibrėžti taip - Aš ruošiuosi eiti į priekį ir pasakyti, int Pagrindinis negalioja, nes mes dažnai darome. Ir tada šios programos, aš ruošiuosi paskelbti sau plūduriuoti, todėl 32 bitų kintamasis vadinamas f savavališkai. Ir tada aš ruošiuosi laikyti jį Aš nežinau, vieną dešimtąją, todėl 0.1. Taigi, aš ruošiuosi pareikšti, kad viena padalintas iš 10, kurie puikiai teisėta C. Ir tada antroje eilutėje, aš tiesiog norite atsispausdinti šią vertę. Taigi priminti, kad mes galime naudoti susipažinęs printf. Mes nenorime naudoti% I int. Mes norime naudoti% F plūdės. Ir tada aš ruošiuosi daryti backslash n, Uždaryti citata, kablelis, f, kabliataškis. Taigi čia mano programa. Yra jau viena klaida. Ar kas nors, kam tai paspaudėte jau noriu atkreipti bent viena klaida aš padariau? Taip? Taip. Aš pamiršau "# include" ne viršuje, jos simptomas, kuri, jei bandau surinkti tai bus, kad sudarytojas ketina klykauti ne man, sakydamas neapibrėžtą simbolį arba ką šiuo klausimu. Ji nesupranta, ką kaip printf. Taigi, aš ruošiuosi daryti "# include "Išsaugokite failą. Ir dabar jis yra geresnės formos. Bet aš taip pat ketina atkreipti iš viena nauja detalė šiandien. Be to, nurodant vietą turėtojai, pavyzdžiui,% f% i% s, galite kartais įtakoja elgesį tos vietos rezervavimo ženklą. Pavyzdžiui, atsižvelgiant į kintamųjų atveju punkto vertė, jei aš tik noriu rodyti vienos dešimtosios tikslumu po laikotarpis, aš iš tiesų gali padaryti 0.1f. Taigi, kitaip tariant, aš atskirti f ir procento ženklas su 0,1, tik sakau printf, galite turėti visą krūva skaičių po kablelio priminti man. Bet aš tik noriu pamatyti vieną iš jų. Taigi, aš ruošiuosi eiti į priekį dabar ir sutaupykite ši programa, eikite į mano terminalo langą, ir aš ruošiuosi eiti į priekį ir tipo, kad flotacinio 0, įveskite. Matau, kad šiek tiek paslaptingas liniją, kuri pradės daugiau prasmės, kaip mes erzinti jį išskiria šią savaitę ir toliau. Dabar aš ruošiuosi eiti į priekį ir paleisti float nulį. Ir nusispjauti. Taigi yra ir kitas klaidą čia dėl kažkokios priežasties. Aš esu gana įsitikinęs, kad viena dešimtoji, arba vienas, padalytas iš 10, yra ne 0.0. Gal aš tiesiog ne ieško ne pakankamai skaitmenų. Tad kodėl gi ne sakau du .2 pamatyti du dešimtųjų tikslumu, o ne tik vieną. Leiskite man grįžti į savo terminalo langą čia ir nukentėjo iki porą kartų į pamatyti savo istoriją. Ar padaryti plaukti nulio vėl, ir tada vėl. Ir dabar įeiti. Ir dabar aš esu gana įsitikinęs, tai yra negerai. Ir aš galėčiau padaryti trijų ir keturių, ir aš tikriausiai bus nuolat matau nuliai. Taigi, kur yra klaida? Vienas dalinant iš 10 turėtų būti 0.1. Kažkas nori imtis Pabandyti ką esminis klausimas yra? Taip? Jie abu sveikieji skaičiai. Na ir kas? Taigi su viena padalinta iš 10, kad yra ką man daryti aritmetika. Ir gaunu 0.1. Taip. Ir todėl, kad iš tikrųjų klausimas. Kai domėtis kompiuterio sveikasis skaičius ir jums padalinti jį nauju sveikojo skaičiaus, pagal nutylėjimą kompiuteris ketina manyti, kad jūs norite sveikasis skaičius. Problema, nors, žinoma, yra kad 0.1 nėra sveikasis skaičius. Tai realus skaičius. Ir taip, tai ką kompiuteris veikia pagal Numatytasis tai tiesiog išmeta viskas po kablelio. Tai nereiškia, suapvalinti arba iki per se. Jis tiesiog išmeta viską po kablelio. Ir dabar, kad prasminga. Kadangi dabar mes aiškiai liko nulio. Bet palauk. Nematau int nulį. Aš iš tikrųjų matyti 0.00. Taigi, kaip man suderinti tai dabar? Jei vienas, padalytas iš 10 yra lygus nuliui, bet aš tikiu, matau 0.00, kur jis vis konvertuoti atgal į realų skaičių? Taip. Būtent. Taigi čia atitinka penkių, kai aš iš tikrųjų laikyti, kad 0,1, o tada sutrumpintas iki nulio, viduje plūdės, tai iš esmės atitinka saugoti jį ne kaip int, bet iš tiesų, kaip plūdės. Be to, aš tada naudojant printf į aiškiai, kad atsispausdinti šį skaičių iki dviejų tūkstantųjų tikslumu nors gali būti iš tiesų toks yra. Taigi tai sucks natūra, tiesa? Matyt, jūs negalite padaryti matematikos, bent jau šio lygio precizijos, į kompiuterį. Bet tikrai nėra išeitis. Kas paprasčiausias nustatyti galėtume gal padaryti, net tiesiog intuityviai čia išspręsti šią problemą? Taip? Pasukite sveikieji skaičiai į - taip. Net jei aš nesu visiškai tikras, kas tikrai vyksta čia, jeigu ji esmės turi daryti su šiomis ir yra ints, gerai, kodėl gi ne aš padaryti, kad 10,0, todėl šis 1.0, išsaugokite failą. Leiskite man grįžti žemyn apačioje ir perkompiliuoti. Leiskite man dabar pakartotas. Ir ten - Dabar, aš turiu savo vieną dešimtąją atstovavo 0,10. Gerai. Taigi, tai nėra blogai. Ir leiskite man atkreipti dėmesį į vieną kitą pusę galėtume išspręsti šią. Leiskite man iš tikrųjų įvirsta metu kada mes turėjome tai kaip vienas dešimtoji metu senumo. Ir leiskite man eiti į priekį ir išsaugokite šį failą kaip kitą failo pavadinimą, tik šiek tiek posto. Taigi, tai buvo variantas vienas. O dabar leiskite man eiti į priekį ir padaryti dar vieną versiją. Mes vadiname šią versiją du nulis indeksuojami. Ir aš ruošiuosi vietoj padaryti tai - jūs žinote, ką? Įrašyta taškas nulis veikia šioje byloje. Bet tarkime, vienas buvo nevienoda. Manoma 10 buvo nevienoda. Kitaip tariant, tarkime, kad aš negalėjau tiesiog sunku kodo .0 pabaigoje Šio aritmetinis išraiška. Na, aš iš tikrųjų gali kažką daryti skliausteliuose vadinamas liejimas. Galiu atiduoti, kad sveikasis skaičius nuo 10 iki plūdės, ir aš galiu atiduoti, kad sveikasis vieno plūduriuoti, taip pat. Tada matematikos tai bus daroma veiksmingai 1,0 padalintas 10.0, rezultatas, kuris eina F-kaip ir anksčiau. Taigi, jei aš perkompiliuoti tai, kaip padaryti plūdės 2, o dabar plaukioja 2, man tas pats atsakyti, taip pat. Taigi, tai yra gana nenatūralu, pavyzdžiui, išspręsti šią problemą įvedant liejimas. Bet apskritai, liejimo manimi bus galingas dalykas, ypač problema nustatyti du per savaitę laiko, kai norite konvertuoti vieną duomenų tipą kitą, kad dienos pabaigoje būtų atstovaujama vienodai. Per dieną, kiekvieną pabaigos dalykas, mes kalbėjome apie iki šiol yra tik ints po gaubtu. Arba, jei tai labai žemo lygio ir jūs, jie tiesiog numeriai po gaubtu. Net simbolių vėl prisiminti nuo savaitės iki nulio, yra numeriai po gaubtu. Kuris yra pasakyti, mes galime konvertuoti tarp įvairių tipų numeriai Jeigu jie tiesiog bitai. Mes gali konvertuoti tarp skaičių ir raidės, jeigu jie tiesiog bitai, ir atvirkščiai. Ir liejimo tokiu būdu yra mechanizmas programavimo, kuri leidžia jums prievarta pakeisti vieną duomenų tipą į kitą. Deja, tai nėra taip paprasta, kaip aš galėjo patiko. Aš ruošiuosi eiti atgal į plūdės 1, kuris buvo paprastesnis, paprastas vienas su .0 Pridėta viena. Ir kaip greitai kvalifikacijos kėlimo, leiskite man eiti į priekį ir perkompiliuoti tai, kad plūdės 2 - atsiprašau, tai yra, kad plūdės 1. O dabar paleisti plūdes 1. Ir apačioje, pastebėti kad aš iš tikrųjų gauti 0.1. Taigi, problema išspręsta. Bet dar ne. Aš dabar ketina gauti šiek tiek įdomu, ir aš ruošiuosi grįžti į savo printf ir tarkim, jūs žinote, ką? Norėčiau patvirtinti, kad tai yra tikrai viena dešimtoji. Ir aš ruošiuosi norite matyti šį , tarkim, penkis skaičiai po kablelio. Tai ne problema. Pakeisti po du penkių, Aš perkompiliuoti su make. Aš pakartotas tai kaip plūdės 1. Domina gana gera. Mano normalumas patikrinimai gali baigtis ten, bet Gaunu šiek tiek daugiau nuotykių. Aš ruošiuosi pakeisti 0,5-0,10. Noriu pamatyti 10 skaitmenų po dešimtųjų tikslumu. Ir aš ruošiuosi eiti į priekį ir perkompiliuoti tai ir iš naujo plūdės 1. I rūšies gailisi išbandyti šį toliau, nes mano matematikos ne taip ištaisyti nebėra, atrodo. Bet palauk, gal tai tik atsitiktinumas. Gal kompiuteris veikia šiek tiek keista. Leiskite man eiti į priekį ir padaryti 20 dešimtųjų taškų ir nuraminti save, kad aš žinau, kaip tai padaryti matematiką. Aš žinau, kaip programuoti. Padaryti plūdės 1, perkompiliuoti ir damn it. Tai tikrai, tikrai gauti Netinka. Taigi, kas čia vyksta? Intuityviai, remiantis mūsų prielaidų anksčiau apie duomenų tipų dydžio, kas turi būti vyksta čia po kapotu? Taip? Būtent. Jei norite, kad šis daug tikslumo ir tai iš tikslumo daug gi - 20 skaičių po kablelio. Jūs negalite galbūt atstovauti kokiam nebent turite savavališkai bitų skaičius. Bet mes ne. Dėl plūdės, turime tik 32 bitus. Taigi, jei 32 bitai gali būti išgrynintas į būdas - tiesiog kaip mūsų žmogui nekelia, etapas rankas aukštyn arba žemyn - į baigtinio skaičiaus būdų, yra tik baigtinis skaičius realiųjų skaičių galite atstovauti su tais bitais. Ir todėl kompiuteris galiausiai teks į pradėti pjovimo kampas. Kompiuteris gali slėpti šiuos duomenis iš mums šiek tiek laiko. Bet jei mes pradėsime išnyra į skaičius ir ieško vis toliau ir toliau į gale skaičių sveikuoju skaičiumi, tada mes pradedame suprasti, kad tai iš tikrųjų suderinti idėja dešimtadaliu. Ir taip it turns out, tragiškai, ten begalinis skaičius skaičiais mes negalime atstovauti būtent kompiuteris, bent su ribinio bitų skaičius, ribinis suma RAM. Dabar, deja, kartais tai turi realių pasekmių. Jei žmonės neturi pakankamai vertiname tai arba tarsi savaime suprantamu dalyku tai, kad jų kompiuteris tiesiog daryti tai, ką jie pasakys tai padaryti, o ne suprasti šiuos pagrindinius atstovavimo informacija - kuris, tiesą sakant, kai kuriose kalbose yra paslėpta nuo vartotojo, skirtingai nei C - kai blogi dalykai gali atsitikti. Ir ką aš maniau, mes norime daryti yra žengti žingsnį atgal. Ir tai yra apie aštuonių minučių vaizdo. Ji eteryje prieš keletą metų, ir tai suteikia įžvalgos iš tikrųjų, kas gali eiti negerai, kai jūs nepakankamai vertina šių rūšių detales labai viskas pernelyg realus pasaulis. Jei galėtume artimosios šviesos per kelias minutes. GARSIAKALBIS 1: Mes dabar grįžti į inžinerijos nelaimių Šiuolaikinės stebuklai. Kompiuteriai - mes visi ateis priimti dažnai nelinksma problemų kad eiti su jais. Klaidas, virusai ir programinės įrangos trikdžių mažos kainos mokėti už patogumui. Tačiau aukštųjų technologijų ir didelės spartos karinių ir kosmoso programa programas, mažiausias problema gali būti padidintas į katastrofą. Birželio 4, 1996, mokslininkai pasirengę pradėti nepilotuojamą Ariane 5 raketų. Ji vykdė mokslinius palydovus sukurta tiksliai nustatyti, kaip Žemės magnetinis laukas sąveikauja su Saulės vėjai. Raketų buvo pastatytas Europos Kosmoso agentūros ir nuimti nuo jos įrenginys ant kranto Prancūzijos Gvianoje. JACK GANSSLE: Maždaug 37 sekundžių į skrydžio, jie pirmą kartą pastebėjo kad kažkas negerai. Purkštukai buvo pasukamas į Kaip jie tikrai neturėtų. Maždaug 40 sekundžių į skrydį aiškiai transporto priemonė buvo bėdų. Ir tai, kai jie padarė sprendimas jį sunaikinti. Diapazonas saugumo pareigūnas, su milžiniškas viduriai, paspaudėte mygtuką, susprogdino raketa, kol ji galėtų tapti pavojinga visuomenės saugumui. GARSIAKALBIS 1: Tai buvo mergautinė reiso 5 Ariane, ir apie jo sunaikinimo įvyko dėl to, kad škvalas įterptųjų Į Raketa programinės įrangos. JACK GANSSLE: nuo Ariane problema buvo tai, kad ten buvo skaičius reikalaujama 64 bitų išreikšti. Ir jie norėjo atsiversti į 16 bitų skaičių. Jie manė, kad skaičius niekada nebuvo bus labai didelis, kad dauguma tie 64 bitų skaitmenys skaičius buvo nuliai. Jie klydo. GARSIAKALBIS 1: vienos programinės įrangos nesugebėjimas programa priimti rūšies sukurtas numeris vienas buvo prie nesėkmės priežastis. Programinės įrangos kūrimas tapo labai brangus dalis naujos technologijos. Ariadnė 4 raketa buvo labai sėkmingas, tiek programinės įrangos sukurta taip pat buvo naudojamas 5 Ariane į. PHILIP Coyle: pagrindinė problema buvo kad Ariane 5 buvo greitesnis, paspartinti greičiau. Ir programinės įrangos neturėjo sudarė už tai. GARSIAKALBIS 1 iš raketos sunaikinimas buvo didžiulė finansinė katastrofa, visi dėl per minutę programinės įrangos klaidos. Bet tai buvo ne pirmas kartas, kai duomenys perskaičiavimo problemų buvo kentėjo modernus raketų technologiją. JACK GANSSLE: 1991 su pradžios pirmojo Persijos įlankos karo, Patriot raketų patyrė panašaus pobūdžio nesant numerių konvertavimo problemos. Kaip rezultatas, 28 amerikiečių kariai buvo žuvo ir apie 100 sužeistųjų kai Patriot ", kuris turėjo apsaugoti nuo gaunamus Scuds, nepavyko į ugnį raketa. GARSIAKALBIS 1: Kai Irakas įsiveržė Kuveitas ir Amerika pradėjo dykumos audra pradžioje 1991, Patriot raketų baterijos buvo dislokuoti apsaugoti Saudo Arabija ir Izraelis nuo Irako skriejimas raketų atakų. Patriotas yra JAV vidutinio nuotolio žemė-oras sistema gamina "Raytheon" kompanija. THEODORE postol: nuo Patriot dydis kolektoriaus pati yra maždaug 20 pėdų ilgio. Ir jis sveria apie 2000 svarų. Ir ji vykdo daug apie užtaisą - Manau, kad tai apytiksliai 150 svarų. Ir užtaisą pati aukštos sprogmuo, kuriam yra fragmentai aplink jį. Iš galvutės korpusas yra skirtas veikti kaip Buckshot. GARSIAKALBIS 1: Raketos atliekami keturis už konteinerio ir vežami pagal puspriekabe. PHILIP Coyle: Patriot "priešraketinės sistema grįžta į mažiausiai 20 metų. Iš pradžių buvo sukurta kaip oro gynybos raketa numušti priešo lėktuvus. Per pirmąjį Persijos įlankos karą, kai kad karas atėjo kartu armija norėjo jį naudoti nušauti Scuds, o ne lėktuvais. Irako oro pajėgos nebuvo tiek daug problemų. Bet armija buvo susirūpinę Scuds. Ir taip jie bandė atnaujinti "Patriot". GARSIAKALBIS 1: perimti priešo raketų važiuojant mach penkių buvo bus pakankamai sudėtinga. Bet kai Patriot puolė į paslaugos, armija nežino Irako modifikuoti taip, kad padarė savo Scuds beveik neįmanoma pataikyti. THEODORE postol: Kas nutiko yra Scuds, kurie buvo deja, buvo nestabili. Jie buvo Įtaka. Dėl šios priežasties buvo irakiečiai, kad siekiant gauti 600 kilometrų iš 300 kilometrų nuotolio raketų, buvo svoris nuo priekinės galvutės. Jie padarė užtaisą lengvesni. Taigi dabar "Patriot bando ateiti į skriejimas. Ir didžiąją laiko dalį, didžioji Dauguma laiko, tai būtų tik skristi į vėjo genami debesys. GARSIAKALBIS 1: Kai Patriot sistema operatoriai suprato Patriot "praleistus savo tikslą, jie susprogdino Patriots Kovinė kad būtų išvengta galimo aukų, jei ji buvo leidžiama patenka į žemę. THEODORE postol: Tai buvo tai, ką dauguma žmonės pamatė, kaip didelis ugnies danguje ir nesuprastas, nes sulaiko iš skriejimas galvučių. GARSIAKALBIS 1: Nors nakties dangus Patriotai pasirodė sėkmingai sunaikinti Scuds, bent Dhahran ten gali būti ne apie savo klaidą efektyvumą. Ten, Patriot radaras sistema prarado sekti priimamą skriejimas ir niekada pradėtas dėl programinės įrangos defektų. Tai buvo Izraelio, kuris pirmasis atrado kad kuo ilgiau sistema buvo, didesnis laiko neatitikimas tapo dėl laikrodis įtraukti į sistemos kompiuteryje. JACK GANSSLE: Apie dvi savaites prieš tragedija Dhahran, Izraelis pranešė Gynybos departamento kad sistema buvo prarasti laiko. Po maždaug aštuonių valandų važiavimo, jie pastebėjo, kad sistema yra tampa pastebimai mažiau tikslūs. Gynybos departamentas atsakė sakau visi Patriot baterijų kad neliktų sistemas į ilgą laiką. Jie niekada nesakė, kas ilgą laiką buvo. Aštuonias valandas? 10 valandas? 1000 valandas? Niekas nežinojo. GARSIAKALBIS 1: Patriot "baterija dislokuota AT Dhahran kareivinės ir jos trūkumų vidinis laikrodis buvo nuo daugiau nei 100 valandas naktį Vasaris 25. JACK GANSSLE: Tai stebimi laiko tikslumas apie tokią antra dešimtadaliu. Dabar antrojo dešimtas yra įdomus skaičius, nes jis negali būti išreikštas dvejetainiu tiksliai, o tai reiškia, jis negali būti išreikšta tiksliai bet modernus skaitmeninis kompiuteris. Sunku patikėti, bet naudoti tai kaip pavyzdys. Paimkime numeris trečdalį. Trečdalis negali būti išreikšta dešimtainis lygiai. Trečdalis yra 0,333 vyksta ant begalybės. Nėra jokio būdo tai padaryti, kad su absoliutus tikslumas dešimtosios dalies. Būtent tokia pat problema tai įvyko Patriot. Ilgesnis sistema bėgo, blogiausias laikas klaida tapo. GARSIAKALBIS 1: Po 100 veikimo valandų, laiku paklaida buvo tik apie trečdalis sekundę. Tačiau, kalbant apie orientacija raketą važiuojant mach penkių, tai lėmė sekimo paklaida daugiau nei 600 metrų. Būtų lemtinga klaida ir dėl kurių Dhahran kariai. THEODORE postol: Kas atsitiko Skriejimas pradėti buvo aptikta anksti įspėjamieji palydovai. Ir jie žinojo, kad Skadi buvo dar jų bendrą kryptį. Jie nežinojo, kur jis atėjo. GARSIAKALBIS 1: Tai buvo dabar iki radaro komponentas "Patriot" sistemos ginti DHAHRAN rasti ir išlaikyti sekti gaunamų priešo raketų. JACK GANSSLE: radaras buvo labai protingas. Tai iš tikrųjų stebėti padėtį Skadi ir tada numatyti, kur jis tikriausiai būtų kitą kartą radaras pasiuntė impulsą iš. Tai buvo vadinama diapazonas vartai. THEODORE postol: Tada, kai "Patriot" nusprendžia pakankamai laiko praėjo eiti atgal ir patikrinti kitą vietą Nustatytas objektas, jis eina atgal. Taigi, kai jis grįžo į negerai vieta, tai tada nemato objektą. Ir ji nusprendžia, kad nebuvo objektas, ji buvo klaidinga aptikimo ir lašai takelį. GARSIAKALBIS 1: Priimamojo Skadi dingo iš radaro ekrano, o sekundžių, vėliau jis pateko į kareivines. Skadi žuvo 28 ir buvo naujausia atleistas per pirmąjį Persijos įlankos karą. Deja, atnaujinti programinę įrangą atvyko ne Dhahran kitą dieną. Programinės įrangos trūkumas buvo nustatytas, uždaryti vieną skyrių iš neramus istorija "Patriot" raketos. Patriot "iš tiesų yra akronimas už etapais Array stebėjimo Ašyje TARGET. DAVID J Malan: Gerai, kad Otrzeźwiający pavyzdį, būti tikri. Ir laimei, tai žemesnio lygio klaidų yra ne kažkas, kad mes atsiųsime paprastai turi įvertinti, tikrai ne kai kurie iš mūsų Seniausias programas. Priešingai, dauguma klaidų jums susitikimas bus logiška pobūdžio, sintaksinė pobūdžio, kuriuo kodas tiesiog neveikia teisingai. Ir jūs žinote, kad gana greitai. Bet ypač, kai mes gauti pabaigoje semestrą jis ketina vis daugiau ir daugiau apie galimybę tikrai sunku galvoti apie dizainą savo programas ir pagrindinių atstovavimas ten taip pat duomenų. Pavyzdžiui, mes jums pristatyti MySQL, kuris yra populiarus duomenų bazės variklis kad jūs galite naudoti su svetainių saugoti duomenis ant nugaros pabaigos. Ir jūs turite pradėti spręsti, semestro pabaigoje ne tik tai, ką rūšių duomenys kartu šių eilučių naudoti bet tiksliai kiek bitų naudoti, ar jūs norite saugoti datas kaip datos ir laiko, kaip visada, o taip pat dalykų, pavyzdžiui, kaip didelis norite unikalių identifikatorių būti, tarkim, vartotojai jūsų duomenų bazėje. Iš tiesų, jei kai kurie iš jūsų turėjo "Facebook" sudaro gana ilgą laiką, ir žinote, kaip gauti galimybę susipažinti su Jūsų Vartotojo ID - kurie kartais pasirodo jūsų Profilis URL nebent jūs pasirinkote slapyvardį URL, arba jei jūs Naudoti "Facebook" diagrama API viešai API, kuriuo galite paprašyti Facebook "neapdorotus duomenis - jūs galite pamatyti, ką jūsų skaitmeninis ID yra. Ir prieš keletą metų, "Facebook" iš esmės turėjo pakeisti naudoti iš Ints atitinka naudojant ilgai ilgai, nes laikui bėgant, nes vartotojai ateiti ir eiti ir sukurti daug sąskaitų ir netikras sąskaitas, net ir jie labai lengvai galėjo išnaudoti kažką panašaus 4 milijardų galimas vertės kaip int. Taigi, labiau į tas problemas rūšių nustatantis kelių, taip pat. Gerai, kad buvo liejimas. Tai buvo netikslumai. Kelių greitų pranešimai pora. Taigi skyriai oficialiai pradėti ateinančiais Sekmadienis, pirmadienis, antradienis. Jūs išgirsite elektroniniu paštu vėliau šią savaitę kaip savo skyriuje užduotį. Ir jūs taip pat čia tuo momentu kaip pakeisti savo skyrių, jei jūsų grafikas dabar pasikeitė ar jūsų komforto lygis dabar pasikeitė. Tuo tarpu P-rinkinys vienas ir hakeris vienas yra dėl šį ketvirtadienį su galimybe į pratęsti už terminą specifikacijos iki penktadienio į tipišką būdu. Suprantu, kad kartu su problemos standartinės specifikacijos instrukcijos kaip naudotis CS50 prietaisą, įsitikinkite, taip pat kai CS50 specialios priemonės kaip stiliaus 50, kuris gali suteikti jums grįžtamąjį ryšį dinamiškai kokybė Jūsų kodas stiliaus ir taip pat patikrinti 50, kuri gali suteikti Jums su dinamišką grįžtamąjį ryšį dėl jūsų Kodekso teisingumą. Atleisk, kad mes vis dar lyginimo iš kelių Kinks su atbuliniu 50. Savo klasiokų, kurie buvo pradėti keli apie 04:00 penktadienio vakarą, kai spec pakilo pastebėjau, nes tada keletas klaidų, kad mes darbo per, ir atsiprašyti tiems, kurie patyrė nereikalingų nusivylimų. Kaltė yra mano. Bet mes atsakysime į CS50 aptarti kai tai bus išspręsta. Taigi ant balai patys žodį. Taigi, tai bus savaitę ar dvi prieš jus pradėsite gauti grįžtamąjį ryšį apie problemines rinkiniai nes jūs dar neturite mokymo kolegos. Ir net tada, mes pradėsime vertinti C problema nustato, kol mes grįžti atgal ir įvertinti įbrėžimams taip kad jums labiau tinka Atsiliepimai greičiau. Bet apskritai už mokymo programą, CS50 problema rinkiniai vertinami kartu po keturias ašis - apimtis, tikslumas, dizaino ir stilių. Taikymo sritis bus skaičius paprastai nuo nulio iki penkių, kad fiksuoja, kiek gabalas, kad jūs nukando. Paprastai, jūs norite, kad tai būtų penki. Jūs bent bandė viską. Ir pastebėti tai dauginamasis koeficientas todėl, kad tai tik dalis problema rinkinys nėra geriausia strategija. Tuo tarpu labiau akivaizdu yra svarba teisingumą - tiesiog jūsų programa teisingai su gerbti specifikacijos? Tai balsai sąmoningai daugiau tarifu nei kitų dviejų krypčių pagal veiksnys iš trijų, nes mes pripažįstame, kad paprastai jūs ketinate praleisti daug daugiau laiko vejasi nustatantis kai kurių klaidų, gauti savo kodo į darbą, tada jūs wcięć jį ir pasirinkti atitinkamų kintamųjų vardai ir patinka, kuris yra kitame gale apie stilių spektrą. Tai nereiškia, kad stilius yra ne svarbus, ir mes skelbiame jį per laikas tiek paskaitų ir skyriuose. Stilius reiškia estetika Jūsų kodas. Jūs pasirinkote pat pavadinimu kintamieji kad yra trumpas, bet šiek tiek aprašomasis? Ar jūsų kodas įspaudžiami, kaip jūs mačiau paskaita ir taip, kad atitiktų su stiliumi 50? Galiausiai yra teisė į dizainą yra per vidurį. Dizainas yra sunkiau vienas įdėti pirštu, nes tai daug subjektyvus. Bet tai galbūt svarbiausia trys ašys pedagoginės vertė laikui bėgant ir kad tai bus Mokymą kolegų yra galimybė suteiks Jums kokybinės grįžtamosios informacijos. Iš tiesų, CS50, nors mes turime šias formules bei muzikos natos, pabaigoje dienos tai yra labai sąmoningai labai mažos kibirai - taško verčių nuo nulio iki trijų ir nulis ir penki. Mes nebandome padaryti labai stambias linijas tarp probleminių grupių arba tarp studentai, bet sutelkti kiek mes galime kokybinius, Paprastoji laišką grįžtamasis ryšys, arba spausdintas arba žodžiu iš Jūsų pirma mokymo kolegos, gausite žinoti, gana gerai. Bet apskritai, jie yra svoriai kad įvairios ašys turės. Tuo tarpu, taip pat verta turint omenyje, kad jums neturėtų manyti, kad trys iš penkių yra 60% ir Todėl maždaug netinkamai. Trys sąmoningai reiškia būti tarsi viduryje kelio gera. Jei gaunate trise ne pradžioje semestro, tai iš tiesų reiškia būti gera vieta pradėti. Jei gaunate tuojau, mugės, ten tikrai tam tikrą darbą mokėti šiek tiek daugiau dėmesio, pasinaudoti sekcijų ir darbo valandomis. Jei gaunate fours ir penketai, puiku. Bet iš tikrųjų, mes tikimės, kad trajektorijos tarp studentų - labai individualiai vienam studentui, bet pradedant semestrą čia tarsi du į tris srities, bet baigiasi iki čia, 4:56 asortimentą. Štai ką mes iš tikrųjų ieško. Ir mes nepamiršti delta, kad jūs eksponuoti tarp savaitės nulio ir savaitės 12, kai aš darau rūšys. Nesvarbu, mums visiškai kaip jūs sąžiningai pradžioje, jei jūsų trajektorija yra iš tiesų aukštyn ir stiprus. Akademinis sąžiningumas - todėl leiskite man įdėti į mano rimtesnė balsas vos akimirką. Taigi, šis kursas turi skirtumų siųsti daugiau studentų nei bet kuri kita istorijoje skelbimo lentos, manau. Mes turime rūšiuoti pamečiau skaičių į tai taškas, kaip dažnai tai vyksta. Ir tai dar ne, nes studentai iš 50 yra, bet daugiau nesąžiningas nei jų klasiokai kitur. Bet suprasti ir tai, kad mes esame labai geras aptikti šis dalykas rūšiuoti. Ir tai yra privalumas, kad informatikos klasė turi tuo, kad mes gali ir mes lyginti visus studentus problema nustato porinių prieš kiekvieną kita vertus, ne tik šiais metais bet visi prieš metus. Mes turime galimybę, kaip studentai klasės, "Google" ir rasti kodą svetainėse kaip GitHub ir diskusijų forumuose. Yra absoliučiai sprendimai CS50-aisiais p nustato plūduriuojančius aplink ten. Bet jei jūs galite juos rasti, mes galime juos rasti. Ir visa tai yra labai automatizuotas ir paprastas, ir liūdna mus rasti. Bet aš noriu pabrėžti ir tai, kad Žinoma, akademinis sąžiningumas politika labai reiškė labai daug tos dvasios priešingybė. Iš tiesų, šiais metais mes perfrazuoti dalykus į mokymo programas, kad būtų tai, taškas dot dot, su išsamiau į mokymo programas. Bet svarbiausias tema kurso tikrai turi būti pagrįstas. Mes pripažįstame, kad yra reikšmingas suma pedagoginių vertė bendradarbiauja, tam tikru mastu, su klasės draugais, kai jūs du ar po tris ar jums labiau yra stovėjo balta lenta whiteboarding, taip kalbėti, savo idėjas - raštu iš pseudocode nuotraukose, diagramų, kas turėtų Mario, jei jums buvo rašyti pirmas į pseudocode. Ką reikėtų godus algoritmas - kaip jis turėtų elgtis už problema nustato vieną? Ir taip suprasti, kad elgesį kad mes skatiname yra labai daug palei tas linijas. Ir mokymo programą, pamatysite visa krūva kulkų pagal pagrįstas kategorija ir nėra pagrindo kategorija, kuri padeda mums padėti jums wrap savo mintis apie kur mes atkreipti ta linija. Ir apskritai, padorus nykščio taisykle yra tai, kad jei jūs sunkiai sekasi spręsti kai klaidų ir jūsų draugas ar klasiokas sėdi šalia tavęs, tai protinga jums parodyti jam ar jai Jūsų kodas ir sako, ei, jūs galite padėti man išsiaiškinti, kas vyksta blogai čia? Mes neturime paprastai apima priešingoje pusėje. Tai nėra teisingas atsakas į jūsų draugas ar klasiokas čia pasakyti, Oh, tiesiog pažvelgti į mano ir figūra jis iš to. Tai tarsi nepagrįstas. Tačiau atsižvelgdama kažkas, kitas smegenų, kita akis pora pažvelgti Jūsų ekrane ar pažvelgti kodą ir sako, jūs tikrai norite turėti kilpą čia? Ar tikrai norite kad kabliataškis čia? Arba O, kad klaidos pranešimas reiškia tai. Tai yra labai protinga ir skatinami elgesio. Tais atvejais, kuriuos buvau tipo nuorodomis anksčiau skliautais, kai studentai yra vėlai vakare, todėl prastas sprendimą sprendimai ir rašau savo kodą kažkas arba tiesiog pasakyti, čia jis yra Dropbox arba "Google" paiešką vėlai vakare. Ir todėl norėčiau paskatinti ir maldauti jus, jei jūs turite tuos neišvengiama akimirkos streso, jūs nelygumai iki prieš terminą, jūs neturite vėlai dieną, nes tai jau penktadienį, kad taškas, rašykite kurso galvų arba pats tiesiogiai. Pasakykite, klausytis, aš ne mano lūžio taško čia. Leiskite pokalbį ir suprasti jį. Kreipiantis į internetą ar kokios nors kitos ne protingas elgesys niekada sprendimas, ir per daug iš jūsų klasiokai nebegali čia Campus, nes tos blogos sprendimą. Bet tai labai lengva sijonas ta linija. Ir čia yra šiek tiek vaizdo nudžiuginti jus iš Reddit kad dabar viskas bus gerai. Taigi greitai Priminti tada, , kur mes nerašomas. Taigi, praeitą savaitę, priminti, kad mes pristatome sąlygos, o ne nulio o C šiuo metu. Ir ten buvo keletas naujų sintaksė, bet tikrai ne naujų idėjų per se. Mes turėjome Būlio išraiškos, kad galėtume arba kartu su dviejų vertikalių juostos arba ir kartu su dviem jungimo ženklus, sakydamas, kad tiek kairėje ir teisė turi būti tiesa tai vykdyti. Tada mes turėjome jungikliai, kurią mes pažvelgė bent trumpai, bet siūlau tikrai tiesiog skirtingi sintaksė pasiekti pačios rūšies tikslą, jei jūs žinote iš anksto, ką jūsų atvejai ketinate būti. Mes pažvelgė į kilpas. For ciklas yra gal labiausiai paplitusi, ar bent vienas, kad žmonės paprastai pasiekti už instinktyviai. Nors tai atrodo šiek tiek paslaptingas, pamatysite daug, daug pavyzdžių, tai prieš ilgas, kaip jūs turite jau per vėlu praėjusią savaitę. Nors kilpos gali panašiai pasiekti tą patį. Bet jei norite daryti, bet incrementation ar atnaujinimas Kintamojo reikšmės, turite padaryti daugiau nei rankiniu būdu už kilpa iki leidžia. Ir tada ten do-while cikle, kuri leidžia mums padaryti kažką bent vieną kartą, o kažkas kita yra tiesa. Ir tai ypač tinka programas arba žaidimus, jei norite kad tai paskatins už kažką vartotoją bent vieną kartą. Ir tada, jei jis ar ji nebendradarbiauja, galbūt norėsite tai padaryti vėl ir vėl. Su kintamųjų, tuo tarpu, mes turėjome linijas kodo, kaip šis, kuris galėtų būti dvi eilutes. Galite paskelbti int vadinamas skaitiklis, kabliataškis. Arba galite tiesiog paskelbti ir ją apibrėžti, taip sakant. Suteikite jam tuo pačiu metu reikšmė. Ir tada galiausiai, mes kalbėjome apie funkcijas. Ir tai buvo gražus pavyzdys ta prasme, kad ji iliustruoja dviejų rūšių funkcijas. Vienas iš jų yra GetString (), kuris, vėlgi, gauna eilutę iš vartotojo. Bet GetString () yra rūšies įdomus, tiek, kiek mes jį naudojo, nes mes visada naudojamas su kažkas kairėje pusėje lygybės ženklas. Tai reiškia, kad GetString () grąžina reikšmę. Jis grįžta, žinoma, eilutę. Ir tada kairėje pusėje, mes tiesiog įrašykite tą eilutę viduje kintamasis vadinamas pavadinimą. Tai skiriasi, tam tikra prasme, iš printf nes printf, bent jau mūsų naudojimas čia negrąžina nieko. Kaip žemę, ji grįžti kažką. Mes tiesiog nerūpi, kas tai yra. Bet ji turi kas vadinamas šalutinį poveikį. Ir kas tai yra šalutinis poveikis kiekvienas atveju mes matėme iki šiol? Ką printf daryti? Jis spausdina kažką ekrane, rodoma tekstas arba skaičiai ar kažkas ekrane. Ir tai tiesiog laikoma šalutinis poveikis nes ji tikrai nėra dalijamos jį atgal į mane. Tai ne viduje atsakymas juoda dėžutė, kad aš galiu tada pasiekti į ir patraukti. Tai tiesiog daro savo, daug kaip Colton buvo įkištas į tai black box ", praeitą savaitę, ir jis kažkaip stebuklingai buvo piešimo ant lentos be manęs iš tikrųjų dalyvauja. Tai būtų šalutinis poveikis. Bet jei aš iš tikrųjų turėjo pasiekti atgal čia ir pasakyti,, oi, čia yra eilutė nuo vartotojo, kad būtų būti grąžinta reikšmė. Ir iki šiol mes tik naudojamas funkcijas kad kiti žmonės parašė. Bet mes iš tikrųjų galite atlikti šiuos rūšių dalykų sau. Taigi, aš ruošiuosi eiti į CS50 prietaisą iš naujo. Leiskite uždaryti skirtuką, kad mes buvo atidaryti prieš akimirką. Ir leiskite man eiti į priekį ir sukurti naują failą. Ir aš ruošiuosi eiti į priekį ir vadiname positive.c. Taigi aš noriu kažką daryti su teigiami skaičiai čia. Taigi, aš ruošiuosi eiti į priekį ir daryti int - sorry - # Include. Tegul ne padaryti tą patį klaida, kaip ir anksčiau. Int main (void), atviras garbanotas petnešomis, uždaras garbanotais petnešomis. O dabar noriu daryti toliau. Noriu parašyti programą, kuri primygtinai reikalauja, kad vartotojas suteikia man teigiamas sveikasis skaičius. Taigi nėra GetPositiveInt funkcija į CS50 bibliotekoje. Yra tik GetInt (). Bet tai gerai, nes turiu konstruktai, su kuriais galiu neįvesti šiek tiek daugiau suvaržymų tos vertės. Aš galėtų padaryti kažką panašaus į tai. Taigi, int n - ir jei įvedate kartu, tiesiog suprasti, Aš ruošiuosi grįžti ir pakeisti kai akimirkai dalykų - taip int n lygus GetInt (). Ir tai ketina pateikti LC viduje n. Ir leiskite man būti labiau aprašomasis. Leiskite man pasakyti, kaip aš reikalauti, kad galite man duoti teigiamą sveikąjį skaičių. Gerai. Taigi tik šiek tiek nurodymus. O dabar ką aš galiu padaryti? Na, aš jau žinau, iš mano paprasta sąlygos arba filialai, kaip ir aš turėjo nulio, galėčiau ką nors pasakyti pavyzdžiui, jei n yra mažesnis arba lygus nulis, tada aš noriu kažką daryti patinka, kad nėra teigiamas. Ir tada aš galėčiau padaryti - Gerai, bet aš tikrai noriu gauti, kad int. Kad galėčiau eiti čia ir galėjau natūra Kitoje egzemplioriaus tai ir įtraukoje tai. Ir tada, Gerai. Taigi, jei n yra mažesnis arba lygi nuliui tai padaryti. Dabar ką daryti, jei vartotojas nebendradarbiauja? Na, tada aš ruošiuosi skolintis tai čia. Ir tada aš einu čia čia ir čia. Taigi, akivaizdu, kad tai ne sprendimas, tiesa? Nes ten nematyti pabaigos. Jei aš noriu reikalauti, kad vartotojas suteikia man teigiamas sveikasis skaičius, galiu faktiškai gauti int. Galiu tada patikrinkite tos int. Bet tada aš noriu patikrinti ją ir vėl patikrinti jį dar kartą ir patikrinkite dar kartą. Taigi akivaizdu, kas geriau statyti, kad naudojant čia? Viskas gerai, todėl kai kurie iš kilpos natūra. Taigi, aš ruošiuosi atsikratyti beveik visa tai. Ir aš noriu gauti šią int bent vieną kartą. Taigi, aš ketina pasakyti padaryti - ir aš grįžti į o tik akimirką - dabar ką daryti? Aš ruošiuosi padaryti int n gauna GetInt (). Gerai. Taigi tai gana geras. Ir dabar, kaip dažnai Noriu tai padaryti? Leiskite man printf viduje kilpa todėl galiu reikalauti dar ir dar, jeigu reikia,. Ir ką aš noriu tai o būklė daryti? Noriu išlaikyti tai daryti o kas yra? Taip. N yra mažesnė arba lygi nuliui. Taigi jau mes labai išvalyti šį kodą į viršų. Mes pasiskolino labai paprasta statyti - do-while cikle. Aš pavogtas tik svarbius linijas kodo, kad aš pradėjau kopijavimo ir įdėjimą, kuris buvo ne išmintingas. Ir todėl dabar aš iš tikrųjų įklijuokite tai čia ir tiesiog vieną kartą. O dabar ką noriu daryti ne labai pabaigoje šią programą? Aš tik pasakyti ką nors paprasto, patinka, ačiū už - ir Aš padarysiu% I int - Backslash n kablelis ir prijunkite n, kabliataškiu. Gerai. Taigi pažiūrėkime, kas vyksta dabar kai aš paleisti šią programą. Aš ruošiuosi eiti į priekį ir padarysiu teigiamas. Velnias. Keletas klaidų. Taigi leiskite man slinkti atgal iki pirmosios. Negalima dirbti per juos atgal. Darbas per juos iš viršaus į apačią kad ir jie kaskada ir tik vienas dalykas būti negerai. Numanomas deklaracija funkcija GetInt (). Taip. Taigi tai nebuvo pakankamai. I rūšies padarė tą pačią klaidą, bet šiek tiek skiriasi šiuo metu. Man reikia įtraukti ne tik stdio.h bet taip pat cs50.h, kuri apima vadinamieji deklaracijos gauti INT, kuri mokyti prietaisą, arba moko C kas GetInt () yra. Taigi leiskite man išsaugokite. Aš ruošiuosi ignoruoti kitų klaidų nes aš ruošiuosi tikimės, kad jie kažkaip susijęs su klaida Aš jau išspręsta. Taigi leiskite man eiti į priekį ir perkompiliuoti su make teigiamas, Enter. Velnias. Trys klaidos, vis dar. Leiskite man pereiti iki pirmosios. Nepanaudoti kintamojo n. Mes nematėme anksčiau. Ir tai taip pat yra šiek tiek paslaptingas. Tai yra kompiliatorius produkcija. O tai pabrėžė linija ten - positive.c :9:13 - sako, tai sako ant devynių linija positive.c, bent 13 simbolių, 13 stulpelis, jūs padarėte šią klaidą. Ir visų pirma, tai sakau man nepanaudotų kintamasis n. Taigi pažiūrėkime, - linija devyni. Aš naudoju n ta prasme, kad Aš jai suteikiant vertę. Bet kas sudarytojas nepatinka yra kad aš ne pažiūros jį naudoti. Bet palauk, aš naudoju jį. Atsižvelgiant į 11, aš naudoju jį čia. Bet jei aš slinkti toliau ne positive.c :11 - taip ne linija 11, charakteris 12 sudarytojas man sako, naudoti neoficialus identifikatorius n. Taigi nedeklaruoti priemonė Turiu nenurodomas jį kaip kintamasis, duomenų tipo. Bet palauk. Aš tiksliai, kad pagal devynių. Taigi, kas yra tikrai supainioti čia. Tai arba man ar sudarytojas, nes pagal devynių, vėlgi, aš skelbiantis int n, ir aš paskiriant jį grįžti vertę GetInt (). Tada aš naudoju, kad kintamojo n atitinka 11 ir tikrinti, ar jos vertė yra mažesnė nei arba lygus nuliui. Bet tai, matyt, yra blogas ir skaldytų kodėl? Pasakykite dar kartą? Ak, turiu pripažinti, n prieš patekti į kilpą. Bet kodėl? Aš turiu galvoje, mes tiesiog pasiūlė šiek tiek atgal, kad tai gerai deklaruoti kintamuosius visi į vieną eilutę ir tada priskirti jiems tam tikrą vertę. Pasaulinį kintamąjį - tegul ateina atgal į šį vos akimirką idėja. Kodėl tu nori, kad aš įdėti tai ne kilpą? Tai. Būtent. Taigi, nors, šiek tiek counterintuitive, leiskite man apibendrinti. Kai paskelbti n viduje iš do bloko ten - specialiai viduje tas garbanotas petnešos - kad kintamasis n yra kas vadinamas apimtis - nesusijęs su mūsų balais sistemos kursas - bet turi taikymo sritį, kad yra tik tiems garbanotieji petnešų. Kitaip tariant, paprastai, jei deklaruoti viduje rinkinio kintamasis garbanotas petnešos, kad kintamasis egzistuoja tik viduje tuos garbanotieji petnešų. Taigi, šia logika vien, nors Aš paskelbtas n atitinka devynių, jis iš esmės dingsta iš taikymo srities, dingsta iš atminties, taip sakant, tuo metu, kai aš paspauskite linija 11. Kadangi linija 11, deja, yra ne tas garbanotas petnešomis. Taigi, aš, deja, negaliu išspręsti šią problemą, grįžta į ką aš padariau anksčiau. Galbūt iš pradžių tai padaryti. Bet ką jūs dabar ne daro cikliškai? Jūs akivaizdžiai negauna LC cikliškai. Taigi, mes galime palikti GetInt () ir mes turėtų palikti GetInt () viduje kilpa, nes tai, ką mes norime kvaršinti vėl ir vėl vartotojui. Bet tai pakanka eiti iki linijos, tarkim, šešių. Žiniasklaida n kabliataškis. Nepasiduokite jos vertė dar, nes Jums nereikia tik dar. Bet dabar žemyn čia, pranešimas - tai Būtų labai paprasta klaida. Nenoriu šešėlis mano ankstesnį deklaracija n. Noriu naudoti n, kad iš tikrųjų egzistuoja. Ir todėl dabar atitinka 10 Aš priskirti n reikšmę. Tačiau atsižvelgiant į šešių aš pareiškiu, n. Ir taip aš galiu ar negaliu naudoti jį suderinti 12 metu? Galiu, nes tarp kurių garbanotas petnešos yra n paskelbta dabar? Vienas čia on-line penkių. Vienam čia on-line 14. Taigi, jei aš dabar nutolinti, išsaugokite šį failą, eikite atgal į ir paleisti, kad teigiamas, jį parengė šį laiką. Štai jau pažanga. Slash. . / Teigiamas, Enter. Reikalauju, kad jūs suteikiate man teigiamas sveikasis skaičius. Neigiamas 1. Neigiamas 2. Neigiama 3. Nulis. Vienas. Ir ačiū už tas yra kas dabar spausdinti. Leiskite man pabandyti kažką kita, iš smalsumo. Aš buvo pasakyta įvesti sveikasis skaičius. Bet kas, jei aš vietoj įveskite ėrienos? Taigi jūs dabar matote skiriasi eilutę - bandykite dar kartą. Bet niekur mano kodas aš rašyti bandykite dar kartą. Taigi, kur, matyt, tai bandykite dar kartą greitai iš, pasakytumėte jūs? Taip, nuo GetInt () pati. Taigi, vienas iš dalykų, CS50 darbuotojai ką daro už jus, bent jau tai pirmas kelias savaites, yra mes parašėme tam tikrą sumą Klaidų tikrinimo užtikrinti, kad, jei skambinate GetInt (), galite bent jau bus grįžti žinutę iš vartotojo int. Jūs negausite eilutę. Jūs negausite Char. Jūs negausite kažką nors apskritai. Gausite int. Dabar jis gali būti teigiamas. Jis gali būti neigiamas. Mes jokių garantijų, kad aplink. Bet mes kvaršinti vartotojui pakartoti, retry, bandykite dar kartą, kol jis arba ji iš tikrųjų bendradarbiauja. Be to, jei aš 1,23, tai ne tarpt. Bet jei aš įvesti, tarkim, 50, tai suteikia man vertę, kad aš norėjau. Gerai. Taigi nėra blogai. Bet apie tai, ką mes ką tik padaryta klausimų? Pagrindinis išsinešimui yra, turi būti aišku, ne tiek daug kilpa, kurį mes matėme prieš nors mes ne tikrai jį naudojo, bet iš taikymo srities klausimas, kur kintamieji gali būti tik gali būti naudojami tik per tam tikrą sritį. Gerai, leiskite man atkreipti dėmesį į pasiūlymą jūs padarėte anksčiau, kad pasaulinį kintamąjį. Kaip žemę, it turns out, kad kita Išspręsti šią problemą, tačiau paprastai klaidingas sprendimas arba Prastai suprojektuota sprendimas, yra deklaruoti kintamuosius kaip kas vadinamas pasaulinį kintamąjį. Dabar aš rūšies pažeidė savo apibrėžimą taikymo sritį, nes yra nėra garbanotas petnešos pačiame viršuje ir labai apačioje failą. Bet, kad implikacija tai, kad dabar atitinka keturių, n pasaulinį kintamąjį. Ir kaip rodo pats pavadinimas, tai tiesiog prieinama visur. Momentinė iš tikrųjų turi tai. Jei naudojamas kintamasis, galite prisiminti jums teko pasirinkti, jei tai už Sprite arba visoms sprites. Na, visi animacinius tik aiškiau būdas pasakyti pasauliniu mastu. Taip? Ak, tikrai geras klausimas. Taigi priminti, kad pirmųjų versiją mano kodą, kai aš neteisingai deklaruota ir nurodyta n linija devynių - Aš paskelbiau, kaip kintamasis ir aš davė jam vertę priskyrimo operatorius - tai davė man dvi klaidas. Vienas iš jų, tai, kad n nebuvo naudojamas, ir du, kad linija 11 tai tiesiog nebuvo deklaruoti. Taigi pirmasis aš ne adresas tuo metu. Tai nėra griežtai klaida deklaruoti kintamasis, bet ne naudoti jį. Dalykų mes padarėme per vienas, bet CS50 prietaisas, sąmoningai, pedagogiškai, yra mes alkūninis lūkesčiai kompiliatorius padaryti įsitikinkite, kad jūs darote viską ne tik teisingai, bet tikrai teisingai. Nes jei jūs deklaruojant kintamąjį kaip n ir niekada naudojant, arba naudojant jį teisingai, kas tada jis čia veikia? Jis tikrai neturi prasmės. Ir tai labai lengva, laikui bėgant, jei nereikia konfigūruoti savo kompiuterį Tokiu būdu, tiesiog turi kodą, kuris turi mažai liekanų čia, likučiai ten. Ir tada mėnesių pažvelgti atgal ir jūs kaip, kodėl tai yra linija kodas ten? Ir jei nėra rimtos priežasties, tai nėra naudinga jums arba jūsų kolegoms keliu, kad turi suklupti per jį tada. Kaip žemę, kur kad ateina? Na, priminti, kad kiekvieną kartą, kai mes kompiliuoti programa, visos šios medžiagos yra būtų išspausdintas. Taigi, mes grįžti į tai. Bet vėl, kad yra programa, kuri automatizuoja sudarymo procesą veikia faktinį kompiliatorių vadinamas žvangėjimas. Šis dalykas, mes galų gale pamatyti, turi daryti su derinimo su ypatinga programa, vadinama Debugger. Tai turi daryti su optimizuoti kodas - daugiau apie tai ateityje. Std = C99 - tai tiesiog reiškia, naudoti 1999 versiją C. C buvo maždaug net ilgiau nei kad, bet jie padarė keletą gražus pokyčiai 10 plius metų. Ir štai atitinkamos tie. Mes sakome, kad nieko, kad anksčiau būtų buvę įspėjimas klaida neleidžia studentui rengtų. Ir sienų priemonė padaryti, kad visa krūva dalykų, o ne tiesiog susiję su kintamaisiais. Ir tada leiskite man pereiti prie Šios linijos pabaiga. Ir tai taip pat, mes galų gale grįžti į. Tai akivaizdžiai pavadinimas Failas aš sudarymo. Tai primena failo pavadinimą Aš išvedė kaip ir pavadinimas mano vykdomąja programa. Tai-lcs50 tiesiog reiškia, naudoti CS50 biblioteka, ir visi nuliai ir tie, kurie darbuotojai parašė ir parengė anksčiau šiais metais, integruoti juos į savo programą. Ir kas nors žino ką-lm yra? Tai matematikos biblioteka, kuri yra tik ten, net jei esate ne daryti bet matematikos. Tai tiesiog automatiškai pateikiami mums padaryti. Na, leiskite man padaryti vieną kitą pavyzdį čia atveriant naują failą. Ir leiskite man išsaugoti šį vieną, nes string.c. Pasirodo, kad kaip mes kalbame apie duomenų rūšių šiandien, ten net daugiau vyksta po gaubtu nei mes matėme iki šiol. Taigi leiskite man greitai padaryti greitai programą. Įtraukti stdio.h. Ir aš išsaugoti tai. Ir žinote, neleisk man padaryti pačią klaidą vėl ir vėl. Įtraukti cs50.h. Ir leiskite man eiti į priekį dabar ir padaryti int main (void). O dabar aš tiesiog noriu padaryti programą kad tai daro - Pripažinti eilutę vadinamas ai ir gauti eilutę nuo naudotojo. Ir leiskite man padaryti šiek tiek Čia instrukcijos - prašau suteikti man eilutę - taip vartotojas žino, ką daryti. Ir tada žemyn čia toliau tai, Noriu padaryti taip - už int i gauna nulis. Vėlgi, kompiuterių mokslininkai paprastai pradėti skaičiuoti nuo nulio, bet mes galime padaryti, kad vieną, jei mes tikrai norėjo. Dabar aš ruošiuosi daryti i mažiau nei eilutės ilgis s. Taigi strlen - S T A L-El-N - Vėlgi, tai trumpas, nes ji yra lengviau tipo, nors tai šiek tiek paslaptingas. Tai funkcija, mes ne naudoti anksčiau, bet tiesiog tai daro - grįžti į mane numerį, kuris atstovauja iš eilutės ilgis kad vartotojas turi įvesti. Jei jie įvedėte Sveiki, tai sugrįš penkių, nes ten yra penkių raidės Hello. Tada ant kiekvieno pakartojimo šis ciklas, aš plius plius. Taigi dar kartą, standartinis statyti net jei jūs ne visai pernelyg patogiai arba susipažinę su ja dar. Bet dabar apie kiekvieną šio ciklo iteracija, pastebėsite, ką aš ruošiuosi daryti. Noriu eiti į priekį ir spausdinti iš vieno pobūdžio - taip% c Backslash n naujoje eilutėje. Ir tada, jūs žinote, ką aš noriu daryti? Koks žodis yra tai, kad vartotojas įveda į, pavyzdžiui, labas, noriu spausdinti H-El-L-L-O vieną simbolį eilutėje. Kitaip tariant, aš noriu gauti bent atskirų simbolių eilutę, kurią iki šiol eilutė turi tik buvo ženklų seka. Ir it turns out Galiu padaryti S, laikiklis, i skliaustai uždaromi, uždarykite skliaustelis, kabliataškis. Ir aš turiu padaryti dar vieną dalyką. Tai faile vadinamas string.h kad strlen yra paskelbiami. Taigi, jei aš noriu naudoti šią funkciją, Turiu pasakyti kompiliatorių, tikisi jį naudoti. Dabar leiskite man eiti į priekį ir padaryti programa, vadinama eilutė. Taškų, velniop, eilutė. Prašau duoti man eilutę. Aš eisiu į priekį ir įveskite jį. Sveiki, visais dangteliais, Enter. Ir dabar pastebėsite, aš atspausdintas tai vieną simbolį po kito. Taigi nauja detalė, kad čia yra eilutė, ne dienos pabaigoje, gali būti atvertas būdu jo asmens simbolių įdiegiant aikštėje laikiklis žymėjimas. Ir tai todėl, kad seka po dangtis iš tiesų seka simbolių. Bet kas, tvarkingas, apie juos yra į kompiuterio RAM - Mac kompiuteris, kokia ji yra, - jie pažodžiui atgal atgal atgal - H-El-L-L-O - individualiu, greta baitų atminties. Taigi, jei norite gauti ne aštuntasis toks baitų, kuri šiuo kilpos būtų laikiklis nulis, laikiklis vienas, laikiklis du, laikiklis trijų, keturių laikiklis - tai nulis indeksuojami iki penkių - kad bus išspausdinti H-El-L-L-O atskiroje eilutėje. Dabar, kaip erzina, leiskite man parodyti jums rūšių dalykų jūs galų gale būti suprasti, bent jau su kai arti atrodo. Už vieną, ką įtraukti į šiandien pavyzdžių, jei norite, yra iš tikrųjų vienas iš pirmųjų Jailbreaks "iPhone". Patarimai ir gudrybės reiškia krekingo telefoną todėl jūs iš tikrųjų galite naudoti ją skiriasi vežėjas arba įdiegti savo programinę įrangą. Ir jūs pastebėsite tai atrodo visiškai paslaptingas, greičiausiai. Bet pažiūrėkite į tai. IPhone buvo, matyt, krekingo su už linijos, jei sąlyga, kitur sąlyga, funkcijų krūva mes nemačiau. Ir vėl jūs ne Iš pirmo žvilgsnio tikriausiai suprasti, kaip tai veikia. Tačiau viskas, kad mes tarsi imtis savaime suprantamu dalyku mūsų moderniame gyvenime iš tikrųjų linkęs sumažinti net kai Šių pagrindus mes jau žiūri. Leiskite man eiti į priekį ir atidaryti vieną kita programa, holloway.c. Taigi tai taip pat yra kažkas, ką tikrai neturėtų žinoti. Net nė vienas iš darbuotojų, arba galėčiau tikriausiai suprasti tai, žiūrėdamas todėl, kad tai buvo kažkieno kodas , kuris buvo pateiktas į tai, kas istoriškai žinomas kaip klaidinančiu C konkursas, kur jums reikia parašyti programą kad kaupia ir dirba, bet yra taip velniškai paslaptingas ne žmogus gali suprasti, kas jis ketina padaryti, kol jie iš tikrųjų jį paleisti. Taigi, iš tiesų, jei jums pažvelgti į tai, kodas, matau jungiklį. Matau pagrindinis. Matau šie laužtiniuose skliaustuose reiškia kai masyvo natūra. Ar kas nors nori atspėti, ką ši programa iš tikrųjų ar jei aš paleisti Holloway? Taip. Gerai. Gerai padaryta. Taigi tik darbuotojai ir aš negaliu suprasti ką šitie dalykai. Ir dabar, galiausiai, leiskite man eiti į priekį ir atverti dar vieną programą. Tai vienas - vėl, mes pasirūpinsime kodą galima rasti internete - tai vienas tik rūšies gana pažvelgti. Visi jie padarė nukentėjo tarpo gana didelis. Bet tai tikras kodas. Taigi, jei jūs manote, kad gana, jei mes iš tikrųjų paleisti tai ne greitai, galų gale pamatysite, kaip mes gali daryti dalykus, kaip šis. Taigi mes palikti jus dėl šio rašto ir jus pamatyti trečiadienį. [Muzikavimo] SPEAKER 2: Kitame CS50, kad TFS etape sukilimo. GARSIAKALBIS 3: Štai jis. Gauk jį! [Muzikavimo]