[Musiikki soi] DAVID J MALAN: Okei, tervetuloa takaisin CS50. Tämä on alku viikon kaksi. Sana joltakin ystävät kampuksella - jos olet kiinnostunut, mahdollisesti joko nyt tai joskus tulevaisuudessa aikavälillä vielä kerran mukavampaa, opetus Lähi koulun oppilaat hieman jotain tietojenkäsittelytiede, tehdä pään että URL. Ne ovat erityisesti tarve juuri nyt on opettajat, varsinkin jos sinulla on oli joitakin altistuminen tietotekniikassa. Joten muistaa, että viime kerralla esittelimme muutamia tietotyyppejä C, ja saatat ovat alkaneet saada kädet likainen näillä toistaiseksi ongelmatilanteissa asetettu. Ja meillä oli merkkiä. Joten hieman teknisiä termejä, mitä on char kuten tiedätte sen tänään? Joten se on merkki, mutta katsotaanpa Tarkemmin sanottuna nyt. Mitä me tarkoitamme merkki tai yksittäisiä char? Ei-numeerinen merkki - niin ei välttämättä ole. On käynyt ilmi, että parilliset numerot, vaikka välimerkit ja kirjaimet ovat edustettuina tämän tiedot kirjoita tunnetaan char. Joten se ei ole välttämättä aakkosjärjestyksessä. Niin? Joten se on ASCII-merkki. Joten jos muistelen viikolla nolla, kun meillä oli tavu vapaaehtoisia keksiä ja joko pitävät kädet ylös tai ei kaikki, he edustivat bittiä. Mutta yhdessä ryhmänä kahdeksan, he edustivat tavu. Ja me otettiin käyttöön käsite ASCII tuohon luento, joka yksinkertaisesti on kartoitus numeroita ja kirjaimia. Ja ASCII käyttötarkoituksiin kuin ihmisillä implisiittinen, kahdeksan bittiä edustaa merkin. Joten vastaavasti, jos kahdeksan bittiä jokainen ottaa yhden kahdesta arvosta - nolla tai yksi - Tämä tarkoittaa, että oli kaksi vaihtoehtoa että henkilö - nolla tai yksi - kaksi, että henkilö, kaksi tähän henkilö, kaksi tämä yksi. Joten yhteensä kaksi kertaa kaksi kertaa kaksi kertaa kaksi kertaa kaksi - joten kaksi kahdeksas yhteensä. Joten siellä olevien merkkien määrä 256 mahdollista, että voit edustaa kahdeksan bittiä. Nyt ne teistä, jotka puhuvat Aasian kieliä voi tietää, että siellä on enemmän merkkiä maailmassa kuin vain Koska ja Bs ja Cs ja DS. Ja todellakin, ASCII ei riitä paljon maailman kielillä. Mutta siitä lisää toisella kertaa. Nyt tiedämme, että C, jos haluat edustamaan kirjeen, pala välimerkkejä, tai vain jotain merkki luonnossa, käytämme merkkiä. Ja se on yksi tavu tai kahdeksan bittiä. Entä int? No, int on kokonaisluku. Kuinka monta bittiä, jos muistatte, oli kokonaisluku tyypillisesti? Jokainen muistaa? Joten se on tyypillisesti 32. Se oikeastaan ​​riippuu tietokoneen että käytät. Mutta laite, ja paljon tietokoneita, se on 32 bittiä tai neljä tavua - kahdeksan kertaa neljä. Ja ints ovat vain käytetään varastointiin numerot, joko negatiivinen, positiivinen tai nolla. Ja jos sinulla 32 bittiä ja vain huolta positiivisia lukuja, voi kukaan ballpark kuinka monta mahdollista kokonaislukuja tietokone voi edustaa alkaen nollaan asti? Joten olisi kaksi 32, joka on noin neljä miljardia euroa. Joten nämä valtuudet kaksi tulevat olemaan toistuvia teemoja tietotekniikassa. Kuten näemme, ne ovat varsin kätevä työskennellä, vaikka se ei ole aivan helppo tehdä matematiikka yhden pään. Joten me sanoa noin neljä miljardia euroa. Nyt pitkään pitkään - voit sellaista arvaus. Se on pidempi kuin int. Kuinka monta bittiä? Niin 64 bittiä tai kahdeksan tavua. Tämä tarkoittaa vain sitä, voit edustavat jopa isompi numerot, isompi positiivinen tai isompi negatiivisia lukuja. Ja miten kellua? Se liukuluku arvo 32 bittiä. Tämä on vain todellinen numero, jotain kanssa desimaalin tarkkuudella. Mutta jos sen sijaan tarvitaan lisää paikkoja desimaalipilkun jälkeen tai haluat edustavat isompi määrä sisältää joitain murto jälkeen, voit käyttää kaksinkertainen, joka on 64 bittiä. Mutta on mielenkiintoista takeaway täällä. Joten jos ints rajoitetaan 32 bittiä ja jopa pitkän pitkät rajoitetaan 64 bittiä, että sellainen herättää kysymyksen, mitä jos todella haluat laskea suurempi kuin 4 miljardia int? No, voit vain käyttää pitkään pitkään. Mutta entä jos haluat laskea korkeamman kuin kaksi 64th, antaa tai ottaa? Nyt se on valtava määrä. Mutta lopulta, saatat itse välitä tällaisia ​​arvoja, varsinkin jos käytät tietokantaa ja alkaa kerätä paljon ja paljon ja paljon tietoa ja jaetaan yksilölliset numerot jokaiseen tietoihin. Joten meillä sellainen on ongelma. Ja samoin kanssa liukuluku arvot - kohoilla tai tuplaa - jos olet vain sai rajallinen määrä bittiä, kuinka monta kokonaismäärät saatoit mahdollisesti edustaa? No, se on vähemmän selvää, kun liittyy desimaalin tarkkuudella. Mutta se on varmasti rajallinen. Jos sinulla on rajallinen määrä bittejä, äärellinen määrä ihmisille, äärellinen määrä lamput, varmasti voit edustavat vain rajallinen määrä liukuluvuiksi. Mutta kuinka monta todellista numerot ovat niiden maailmassa? On ääretön. Niin, että sellainen ongelma, koska meillä ei ole ääretön määrä tai RAM-muistin sisällä tietokoneita. Joten haastavia asioita voi tapahtua. Joten mene eteenpäin ja kokeilla ilmaista täällä. Anna minun mennä eteenpäin ja avata gedit. Aion mennä eteenpäin ja tallenna tiedosto nimeltään "floats0.c" vain olla sopusoinnussa esimerkki siitä, että on saatavilla verkossa, jos haluat. Ja aion mennä eteenpäin ja määrittelevät sen seuraavasti - Aion mennä eteenpäin ja sanoa, int Tärkeimmät mitätön, koska me usein teemme. Ja sitten tässä ohjelmassa, aion julistaa itseni kellua, joten 32-bittinen muuttuja nimeltä f mielivaltaisesti. Ja sitten aion tallentaa sen En tiedä, kymmenesosa, joten 0.1. Joten aion ilmaista, että yhtenä jaettuna 10: llä, joka on täysin oikeutettua C. Ja sitten toisella rivillä, en yksinkertaisesti haluat tulostaa tämän arvon. Joten muistaa, että voimme käyttää tuttu printf. Emme halua käyttää% I int. Haluamme käyttää% f ja kellua. Ja sitten aion tehdä kenoviiva n, lähellä lainaus, pilkku, f, puolipiste. Joten tässä on minun ohjelma. On jo yksi bugi. Onko joku, jolle tämä napsautetaan jo haluavat osoittaa ainakin yhden vian, olen tehnyt? Niin? Joo. Unohdin "# include" at alkuun, he oire, joka, jos yritän koota tämä tulee olemaan, että kääntäjä on menossa huutaa minulle, sanomalla määrittelemätön symboli tai jotain tästä. Se ei ymmärrä jotain kuten printf. Joten aion tehdä "# include ", Tallenna tiedosto. Ja nyt se on paremmassa kunnossa. Mutta olen myös menossa kohta pois yksi uusi yksityiskohta tänään. Lisäksi täsmennetään paikka haltijat kuten% f% i% s, voit joskus vaikuttaa käyttäytymiseen Tämän paikkamerkki. Esimerkiksi, kun kyseessä on kelluva pisteen arvo, jos haluan vain näyttää yhden desimaalin tarkkuudella jälkeen ajan, en voi itse tehdä 0.1f. Eli toisin sanoen, en erottaa f-ja prosenttimerkki 0,1, vain kertoo printf, saatat olla koko joukko numeroita desimaalipilkun jälkeen piste minulle. Mutta en vain halua nähdä yksi heistä. Joten aion mennä eteenpäin nyt ja säästä Tämän ohjelman mennä minun terminaalin ikkuna, ja aion mennä eteenpäin ja tyyppi tehdä kellua 0, anna. Näen, että hieman arvoituksellinen viiva, joka alkaa järkevämpää kuin me kiusaa sen lisäksi tällä ja ensi viikolla. Nyt aion mennä eteenpäin ja ajaa kellua nolla. Ja pirun. Joten on toinen bugi täällä jostain syystä. Olen melko varma, että kymmenesosa, tai yksi jaettuna 10, ei 0.0. Ehkä olen vain ole etsimässä klo tarpeeksi numeroita. Joten miksi en sano kaksi 0,2 nähdä kaksi desimaalin tarkkuudella yhden sijasta. Anna minun mennä takaisin minun pääteikkunaan täällä ja osuma pari kertaa katso minun historiaa. Älä tee kellua nollaan, ja sitten uudelleen. Ja nyt tulee. Ja nyt olen melko varma, että tämä on väärin. Ja voisin tehdä kolme ja neljä, ja olen todennäköisesti aio pitää nähdä nollia. Missä siis vika? Yksi jaettuna 10 on 0,1. Joku haluaa ottaa puukottaa mitä olennainen kysymys on? Niin? He ovat molemmat kokonaislukuja. Niin mitä? Joten yksi jaettuna 10, joka on mitä teen matematiikassa. Ja saan 0.1. Joo. Ja niin se on todellakin, että asia. Kun otat kokonaisluku tietokone ja jaat sen toisella kokonaisluku, tietokone oletuksena on menossa olettaa, että haluat kokonaisluku. Ongelmana kuitenkin on tietysti että 0.1 ei ole kokonaisluku. Se on todellinen määrä. Ja niin mitä kuin tietokone ei Oletuksena on se vain heittää pois kaikki desimaalipilkun jälkeen. Se ei pyöristää alaspäin tai ylöspäin sinänsä. Se vain heittää pois kaiken desimaalipilkun jälkeen. Ja nyt se on järkevää. Koska nyt olemme selvästi jäljellä nolla. Mutta hetkinen. En näe int nolla. Olen todella nähdä 0.00. Joten miten voin sovittaa tämän nyt? Jos yksi jaettuna 10 on nolla, mutta olen nähdä 0.00, missä se saa muunnetaan takaisin todellinen määrä? Joo. Täsmälleen. Joten täällä linjassa viisi, kun olen itse tallentaa, että 0,1, joka on sitten typistetty nolla, sisällä kellua, se tehokkaasti vastaa varastointia eikä int, mutta todellakin, kuten float. Lisäksi olen sitten käyttämällä printf on nimenomaisesti tulostaa että numero kaksi desimaalin tarkkuudella vaikka ehkä todellisuudessa olla mikä tahansa. Joten tällainen perseestä, eikö? Ilmeisesti et voi tehdä matematiikkaa, ainakin tällä tasolla tarkkuus, ja tietokone. Mutta varmasti on olemassa ratkaisu. Mikä on yksinkertaisin fix voisimme ehkä tehdä, vaikka vain intuitiivisesti tästä ratkaista tämän? Niin? Käännä kokonaisluvut kahteen - joo. Vaikka en ole aivan varma, mitä on todella tapahtuu täällä, jos se pohjimmiltaan on tekemistä näiden molempien on ints, hyvin, miksi en tehdä, että 10,0, joten tämä 1.0, tallenna tiedosto. Anna minun mennä takaisin alas pohjaan ja käännä uudelleen. Haluaisin nyt uusintana. Ja siellä - nyt, Minulla on kymmenesosa edustettuina 0.10. Selvä. Niin se ei ole paha. Ja haluaisin huomauttaa yhdellä muulla tavalla olisimme voineet ratkaista tämän. Saanen todella rullata ajassa taaksepäin milloin meillä oli yhtenä kymmenes hetki sitten. Ja anna minun mennä eteenpäin ja tallenna tämä tiedosto kuin eri nimellä, vain on vähän tarkistuspiste. Niin että oli versio yksi. Ja nyt haluan mennä eteenpäin ja vielä yhden version. Soitamme tämän version kaksi nolla indeksoitu. Ja aion sen sijaan tehdä tämä - Tiedätkö mitä? Lisäämällä piste nolla toimii tässä tapauksessa. Mutta kai yksi oli vaihteleva. Oletettu 10 oli vaihteleva. Toisin sanoen olettaa, että en voinut vain koodata 0,0 lopussa Tämän aritmeettinen lauseke. No, voin itse tehdä jotain Suluissa kutsutaan valu. Voin heittää, että kokonaisluku 10 kellua, ja voin heittää, että kokonaisluku yksi kellua, samoin. Sitten matematiikka, joka aiotaan toteuttaa tehokkaasti 1,0 jaettuna 10,0, jonka tulos menee F kuin ennen. Jos siis kääntää tätä tehdä kellukkeet 2, ja nyt kelluu 2, saan saman vastata, samoin. Joten tämä on melko keinotekoinen esimerkiksi Tämän ongelman ratkaisemiseksi ottamalla käyttöön valu. Mutta yleensä, valu tulee olemaan voimakas asia, erityisesti Harjoitus kaksi viikon kuluttua, kun haluat muuntaa yhden tietotyypin toinen, joka on loppujen lopuksi esitetään samalla tavalla. Lopussa päivä, joka ikinen asia olemme puhuneet tähän mennessä on vain ints alla huppu. Tai jos se on liian alhainen taso sinä, ne ovat vain numeroita alla huppu. Jopa merkkiä taas muistaa viikosta nolla, ovat numerot alla huppu. Toisin sanoen, voimme muuntaa erilaisia ​​numeroita, jos he vain bittejä. Voimme muuntaa numerot ja kirjeitä, jos he vain bittiä, ja päinvastoin. Ja valu tällä tavalla on mekanismi ohjelmointi, jonka avulla voit väkisin muuttaa yksi tieto tyypistä toiseen. Valitettavasti tämä ei ole niin suoraviivaista kuin olisin halunnut. Aion mennä takaisin kellukkeet 1, joka oli yksinkertaisempi, suoraviivainen yksi 0,0 lisätty kuhunkin. Ja aivan kuten nopea kertaus, anna minun mennä eteenpäin ja kääntää Tämän tekevät kelluu 2 - Anteeksi, tämä on tehdä kellukkeet 1. Ja nyt juostaan ​​kelluu 1. Ja pohja, huomaa että olen todellakin saada 0.1. Niin, ongelma ratkaistu. Mutta ei vielä. Olen nyt menossa hieman utelias, ja aion mennä takaisin minun printf selvitys ja sanoa, tiedätkö mitä? Haluaisin vahvistaa, että tämä on todella kymmenesosa. Ja aion halua nähdä tätä vaikkapa viisi desimaalia. Se ei ole ongelma. Muutan kahdesta viiteen, Olen kääntää kanssa tehdä. Olen uusintana se kelluu 1. Näyttänyt aika hyvältä. Oma järki tarkastuksia voi päättyä siihen, mutta Saan hieman Jännitystä. Aion muuttaa 0,5-0,10. Haluan nähdä 10 numeroa jälkeen desimaalin tarkkuudella. Ja aion mennä eteenpäin ja kääntää Tämän ja uusintana kelluu 1. Olen sellainen pahoillani, testannut tätä pidemmälle, koska minun matematiikka ei ole niin korjata enää, miltä se näyttää. Mutta hetkinen, ehkä se on vain onnenpotku. Ehkä tietokone toimii hieman oudolta. Anna minun mennä eteenpäin ja tehdä 20 desimaalin tarkkuudella ja vakuuttaa itselleni, että tiedän miten matematiikka. Tiedän, miten ohjelma. Tee kellukkeet 1, käännöksen, ja hitto vie. Se on todella, todella saada kaukana totuudesta. Joten mitä täällä tapahtuu? Intuitiivisesti perustuvat oletuksiin aiemmin noin kokoa tietotyyppejä, mitä on tapahtumassa täällä alla huppu? Niin? Täsmälleen. Jos haluat näin paljon tarkkuutta ja se pahus paljon tarkkuutta - 20 numeroa desimaalipilkun jälkeen. Et voi mitenkään edusta mielivaltaisen määrän ellei sinulla ole mielivaltainen määrä bittejä. Mutta meillä ei ole. Saat kellua, meillä on vain 32 bittiä. Joten jos 32 bittiä voidaan permutoitu tavalla - aivan kuten meidän ihmisiin, vaiheessa kädet ylös tai alas - ja rajallinen määrä tavalla, on vain rajallinen määrä todellinen määrä voi edustaa kanssa bittiä. Ja niin tietokone lopulta on menossa on Aloita pinnallisuutta. Tietokone voi piilottaa tiedot meiltä vähän aikaa. Mutta jos alamme tönäisi numerot ja etsivät kauemmas ja kauemmas at perään numerot kokonaisluku, Sitten alamme nähdä, että se on todella lähentämällä Ajatus kymmenesosa. Ja niin se kääntyy pois, traagisesti, siellä on ääretön määrä numeroita emme voi edustaa tarkasti tietokone, ainakin, joilla on rajallinen määrä bittejä, äärellinen RAM-muistin määrä. Nyt valitettavasti tämä joskus on reaalimaailman seuraukset. Jos ihmiset eivät oikein arvostaa tätä tai tavallaan itsestään selvänä sitä, että heidän tietokone vain tehdä mitä he kertovat sen tehdä ja ei ymmärtää näitä taustalla edustus yksityiskohdat - jotka suoraan sanottuna, joissakin kielissä ovat piilotettu käyttäjältä, toisin kuin C - pahoja asioita voi tapahtua. Ja mitä ajattelimme tehdä on ottaa askel taaksepäin. Ja tämä on noin kahdeksan minuutin video. Se esitettiin muutama vuosi sitten, ja se antaa oivalluksia oikeastaan ​​mitä voi mennä pieleen, kun alle-arvostavat näitä erilaisia ​​yksityiskohtia hyvin aivan liian reaalimaailmassa. Jos voisimme himmentää valoja muutaman minuutin ajan. SPEAKER 1: Palaamme nyt engineering katastrofien moderneja ihmeitä. Tietokoneet - olemme kaikki tulleet hyväksyä usein turhauttavaa ongelmia jotka menevät heidän kanssaan. Vikoja, viruksia, ja ohjelmisto virheitä ovat pieniä hintoja maksamaan mukavuutta. Mutta korkean teknologian ja nopea sotilas-ja avaruusohjelma sovelluksissa, pienin ongelma voidaan suurentaa osaksi katastrofi. Kesäkuun 4. päivänä 1996 tutkijat valmis käynnistää miehittämätön Ariane 5-raketti. Se kantoi tutkimussatelliitit tarkoituksena on luoda tarkasti, miten Maan magneettikentän vuorovaikutuksessa aurinko tuulet. Raketti rakennettiin Euroopan Avaruusjärjestön ja nostetaan pois sen laitos rannikolla Ranskan Guayana. JACK GANSSLE: Noin 37 sekunnin lennon, he ensin huomannut jotain oli vialla. Suuttimet pyörivät vuonna miten ne ei todellakaan pitäisi. Noin 40 sekunnin lennon, selvästi ajoneuvo oli pulassa. Ja silloin he tekivät Päätös tuhota sen. Alueen turvallisuudesta vastaavan johtajan kanssa valtava sisua, painetaan nappia, räjäytti raketin ennen kuin se voi tullut vaaraa yleiselle turvallisuudelle. SPEAKER 1: Tämä oli neitsytmatkallaan Ariane-5, ja sen hävittäminen tapahtui, koska virhe sulautettujen vuonna raketin ohjelmisto. JACK GANSSLE: ongelma Ariane oli se, että oli olemassa useita että tarvitaan 64 bittiä ilmaista. Ja he halusivat muuttaa 16-bittinen numero. He olettivat, että määrä ei koskaan olemaan kovin suuri, että suurin osa ne numeroa 64-bit määrä olivat nollia. He olivat väärässä. SPEAKER 1: kyvyttömyys yksi ohjelmisto Ohjelman hyväksyä sellaista generoima toinen oli juureen vika. Ohjelmistojen kehittäminen on tullut hyvin kallis osa uutta teknologiaa. Ariane 4 raketti oli hyvin onnistuu, niin paljon, että ohjelmisto luotu se oli myös käytetty Ariane 5. Philip COYLE: Perusongelma oli että Ariane 5 oli nopeampi, kiihtyi nopeammin. Ja ohjelmisto ei ollut osuus siitä. SPEAKER 1: tuhoaminen raketti oli valtava taloudellinen katastrofi, kaikki johtuu minuutin ohjelmiston virhe. Mutta tämä ei ollut ensimmäinen kerta tiedot muuntaminen ongelmia oli vaivannut modernin ohjusteknologia. JACK GANSSLE: Vuonna 1991, jossa alku Ensimmäisen Persianlahden sodan Patriot ohjus kokenut samantyyppinen useita muuntaminen ongelma. Tämän seurauksena 28 American sotilaat kuoli ja noin 100 haavoittui kun Patriot, jonka piti suojaamaan saapuvan Scuds, ei palo ohjus. SPEAKER 1: Kun Irak hyökkäsi Kuwaitiin ja Amerikassa käynnisti Desert Storm in 1991 alussa, Patriot ohjuspattereita lähetettiin suojelemaan Saudi-Arabia ja Israelin Irakin Scud ohjukset. Patriot on Yhdysvaltain keskipitkän kantaman pinta-to-air järjestelmä valmistetaan Raytheon yhtiö. THEODORE Postol: koko Patriot torjuntahävittäjä itsessään on karkeasti 20-metriä pitkä. Ja se painaa noin 2000 kiloa. Ja se harjoittaa warhead noin - Minusta se on noin 150 kiloa. Ja ydinpommi itse voimakas räjähdysaine, joka on fragmentteja sen ympärille. Kotelo ydinpommi on suunniteltu toimia kuin Buckshot. SPEAKER 1: ohjukset tehdään neljä per kontti ja kuljetetaan jonka puoliperävaunu. Philip COYLE: Patriot ohjustentorjuntajärjestelmät järjestelmä menee takaisin vähintään 20 vuoden ajan. Se oli alun perin suunniteltu ilmapuolustuksen ohjuksen ampua alas vihollisen lentokoneita. Ensimmäisessä Persianlahden sodan aikana, jolloin sodan tuli, armeija halusi käyttää sitä ampua alas Scuds, ei lentokoneita. Irakin ilmavoimat ei ollut niin suuri ongelma. Mutta armeija oli huolissaan Scuds. Ja niin he yrittivät päivittää Patriot. SPEAKER 1: Kuuntelua vihollisen ohjus matkustaminen ottelu viisi oli aiotaan riittävän haastava. Mutta kun Patriot kiidätettiin palvelu, armeija ei ollut tietoinen Irakin muutos, joka teki heidän Scuds lähes mahdotonta lyödä. THEODORE Postol: Mitä tapahtui on Scuds, jotka olivat tulossa oli epävakaa. He olivat huojuu. Syynä tähän oli irakilaisia, vuonna Saadaksesi 600km pois 300 kilometrin kantaman ohjusten, otti paino pois edestä ydinpommi. He tekivät ydinpommi kevyempi. Joten nyt Patriot yrittää tulemaan Scud. Ja suurimman osan ajasta, ylivoimainen Suurimman osan ajasta, se vain lentää Scud. SPEAKER 1: Kun Patriot-järjestelmän operaattorit tajusi Patriot jäi tavoitteensa, ne räjäytti Patriots ydinpommi välttää mahdollisia Tappiot, jos se on sallittua pudota maahan. THEODORE Postol: Se oli mitä suurin ihmiset näkivät yhtä suuri tulipalloja taivaalla ja ymmärtää väärin kuuntelevansa Scud kärjillä. SPEAKER 1: Vaikka yötaivas Patriots näytti olevan onnistuneesti tuhoaa Scuds kello Dhahran siellä voi olla aivan varma sen suorituskykyä. Siellä Patriot tutkajärjestelmää menetetty Seuraa saapuvan Scud ja koskaan käynnistettiin, koska ohjelmisto virhe. Se oli israelilaisten ensimmäinen löydetty että enää järjestelmän oli, sitä enemmän aikaa ristiriita tuli takia kellon upotettu järjestelmän tietokone. JACK GANSSLE: Noin kaksi viikkoa ennen tragedia Dhahran, israelilaiset raportoitu puolustusministeriön että järjestelmä oli menettää aikaa. Noin kahdeksan tuntia käynnissä, he huomasivat, että järjestelmä on tulossa huomattavasti epätarkempi. Puolustusministeriö vastasi kertoo kaikki Patriot paristot ja jätä järjestelmät on pitkään. He eivät koskaan sanoneet, mitä pitkään oli. Kahdeksan tuntia? 10 tuntia? 1000 tuntia? Kukaan ei tiennyt. SPEAKER 1: Patriot akku sijoitettuna klo kasarmille Dhahran ja sen virheellinen sisäinen kello oli on yli 100 tuntia yöllä 25 helmikuu. JACK GANSSLE: Se jäljitetään aika tarkkuus noin kymmenesosa toinen. Nyt kymmenesosa toinen on mielenkiintoinen numeroa, koska se ei voi olla ilmaistuna binary tarkalleen, mikä tarkoittaa sitä ei voida ilmaista tarkasti tahansa moderni digitaalinen tietokone. On vaikea uskoa, mutta käyttää esimerkkinä. Otetaan numero kolmasosaa. Kolmasosa ei voida ilmaista desimaalilukuna täsmälleen. Kolmasosa on 0,333 menossa päälle ääretön. Ei ole mitään keinoa tehdä sitä absoluuttinen tarkkuus desimaalin tarkkuudella. Juuri samanlaista ongelmaa joka tapahtui Patriot. Kauemmin järjestelmä juoksi, pahinta aikaa virhe tuli. SPEAKER 1: Kun 100 käyttötunnin virheestä ajassa oli vain noin kolmasosa toisen. Mutta kohdentamisesta ohjus matkustaminen ottelu viisi, se johti tracking error yli 600 metriä. Olisi kohtalokas virhe sotilaat Dhahran. THEODORE Postol: Mitä tapahtui on Scud käynnistää havaittiin varhain varoitus satelliitteja. Ja he tiesivät, että Scud oli tulossa niiden yleistä suuntaa. He eivät tiedä, mistä se tuli. SPEAKER 1: Nyt oli jopa tutka osa Patriot-järjestelmän puolustaa Dhahran paikallistaa ja pitää Seuraa saapuvan vihollisen ohjuksia. JACK GANSSLE: tutka oli erittäin fiksu. Se olisi todella seurata asemaa Scud ja sitten ennustaa, missä se olisi todennäköisesti seuraavan kerran tutka lähetti pulssi ulos. Se oli nimeltään alue portti. THEODORE Postol: Sitten kun Patriot päätä tarpeeksi aikaa on kulunut mennä takaisin tarkistamaan seuraava paikka Tämä havaittu esine, se menee takaisin. Joten kun se meni takaisin väärin paikka, sitten se ei näe esine. Ja se päättää, että ei ollut esine, se oli väärä tunnistus ja putoaa radalla. SPEAKER 1: saapuvan Scud katosi tutkanäytöltä ja sekuntia myöhemmin se pamahti osaksi kasarmi. Scud kuoli 28 ja oli viimeinen ampui ensimmäisen Persianlahden sodan. Traagisesti, päivitetty ohjelmisto saapui at Dhahran seuraavana päivänä. Ohjelmisto virhe oli vahvistettu, sulkemalla yhden luvun vaikeuksissa historia Patriot ohjus. Patriot on oikeastaan ​​lyhenne asteittaiseen Array Tracking Siepata tavoitteesta. DAVID J MALAN: Okei, joten raitistaa esimerkiksi olla varma. Ja onneksi nämä alemman tason vikoja ei ole jotain, että me yleensä tarvitse arvostaa, varmasti ei joidenkin meidän aikaisintaan ohjelmia. Pikemminkin useimmat bugeja sinun ll kohtaaminen on looginen luonteeltaan, syntaktinen luonnossa jolloin koodi ei vain toimi oikein. Ja tiedät sen melko nopeasti. Mutta varsinkin kun pääsemme lukukauden loppuun, se tulee tullut yhä enemmän mahdollisuutta todella pohdittava suunnittelu ohjelmat ja taustalla edustus sielläkin, tietojen. Esimerkiksi me esitellä MySQL, joka on suosittu tietokanta moottori että voit käyttää sivustoja tallentaa tietoa loppupäätä. Ja sinun täytyy alkaa päättää lukukauden loppuun paitsi mitä tyyppisiä tietoja tämänsuuntaisia ​​käyttää mutta kuinka monta bittiä käyttää, vai et halua tallentaa päivämääriä kuten päivämääriä ja kellonaikoja kuin ajat, ja myös asioita, kuten kuinka suuri haluat ainutlaatuinen tunnukset olla vaikkapa käyttäjät tietokantaan. Itse asiassa, jos jotkut teistä on ollut Facebook osuus jo jonkin aikaa, ja tiedät, miten pääsee sinun Käyttäjätunnus - joka joskus näkyy omassa profiilin URL jos olet valinnut lempinimi URL, tai jos olet Käytetty Facebookin Graph API, julkisesti saatavilla API, jolla voit voi pyytää Facebook raaka data - voit nähdä, mitä numeerinen tunnus on. Ja joitakin vuosia sitten, Facebook olennaisesti piti vaihtaa käyttämästä vastaa ints käyttämään pitkiä kauan, koska ajan myötä käyttäjät tulevat ja mennä ja luoda paljon tilejä ja fake tilejä, vaikka ne helposti pystyivät imeä jotain 4 miljardia mahdollinen arvo kuin int. Joten enemmän tuollaisia ​​kysymyksiä tiellä, samoin. Okei, joten se oli valu. Se oli epätarkkuutta. Muutaman nopean ilmoituksia. Joten kohdat virallisesti alkaa tulevana Sunnuntai, maanantai, tiistai. Kuulet sähköpostitse myöhemmin tällä viikolla kuin teidän jaksossa toimeksiannon. Ja voit myös täällä tässä vaiheessa miten muuttaa osa, jos aikataulu on muuttunut tai mukavinta on nyt muuttunut. Samaan aikaan P-setin ja hakkeri yksi on koska tämä torstaina mahdollisuus pidentää määräaikaa kohti tekniset perjantaihin tyypillisessä tavalla. Ymmärtäkää, että mukana ongelma set tiedot ovat ohjeet miten käyttää CS50 laitteen käytöstä, tee, sekä joitakin CS50 erityisiä työkaluja tyyliin 50, joka voi tarjota sinulle palautetta dynaamisesti laatu koodi tyyli ja Tarkista 50, joka voi tarjota sinulle dynaaminen palautetta oman koodin oikeellisuus. Anteeksi, että olemme yhä silitys muutama kireyttä tarkistus 50. Muutama luokkatoverit, jotka eivät aloita noin neljä AM perjantai-iltana, kun spec nousi huomannut jälkeen muutamia virheitä, että teemme kautta, ja pahoittelut kaikille, jotka on kokenut aiheetonta pettymyksiä. Vika on minun. Mutta me seurata CS50 keskustella, kun se on ratkaistu. Joten sana tulokset itse. Joten se on viikon tai kaksi ennen kuin alkaa saada palautetta ongelma sarjaa koska sinulla ei vielä ole opetus kaveri. Ja silloinkin, alamme arvioida C ongelma asettaa ennen kuin palata ja arvioida tyhjästä, joten että saat osuvampia palautteen nopeammin. Mutta yleensä kohti oppimäärän, CS50 ongelma sarjaa arvioidaan pitkin Seuraavat neljä akselia - laajuus, oikeellisuudesta, muotoilu ja tyyli. Laajuus tulee olemaan useita tyypillisesti nollasta viiteen, että kaappaa kuinka paljon pala, että olet hieman pois. Yleensä haluat sen olevan viisi. Olet ainakin yrittänyt kaikkea. Ja huomaa sitä monikertaisesti niin, että tekee vain osa Harjoitus ei ole paras strategia. Samaan aikaan selvempi on merkityksen oikeellisuudesta - vain on ohjelman virheetön suhteen erittely? Tämä on painotettu tietoisesti lisää voimakkaasti kuin kaksi akselia, jonka kolminkertaisesti koska ymmärrämme että tyypillisesti aiot viettää paljon enemmän aikaa jahtaa alas joitakin bugeja, saada koodi toimisi, sinun sisennys sitä ja valitsemalla asianmukaiset muuttujan nimet ja kuten, joka on toisessa päässä kirjoa tyyliin. Se ei ole sanoa, tyyli ei ole tärkeä, ja me saarnata sen yli aikaa sekä luentoja ja kohdissa. Tyyli viittaa estetiikka oman koodin. Oletko valinnut hyvin nimetty muuttujat jotka ovat lyhyitä, mutta hieman Tarkempi? Onko koodi sisennetty kuin olet nähnyt luento ja yhdenmukaisesti tyylillä 50? Lopuksi on mallioikeus siellä keskellä. Design on vaikeampi yksi laittaa Sormi koska se on paljon subjektiivinen. Mutta se on ehkä tärkein kolmen akselin suhteen pedagoginen arvo ajan mittaan ja että tämä on Opetuksen kaverin mahdollisuus antaa sinulle laadullista palautetta. Itse asiassa CS50 vaikka meillä on nämä kaavat ja tulokset lopussa Päivän nämä ovat erittäin tarkoituksellisesti hyvin pieni kauhat - pistearvot nollan ja kolmen ja nolla ja viisi. Emme yritä tehdä hyvin karkea linjat välinen ongelma sarjaa tai välillä opiskelijoita vaan keskittyä niin paljon kuin voimme laadullisten, longhand palautetta, joko kirjoituskoneella tai sanallinen alkaen sinun opetus kaveri, saat tietää varsin hyvin. Mutta yleensä ne ovat painoja että eri kannoilta on. Samaan aikaan, liian, se on syytä pitää mielessä, että sinun ei pitäisi olettaa, että kolme viidestä on 60% ja siis noin ole. Kolme on tarkoituksella tarkoitus olla tavallaan keskellä tietä hyvä. Jos saat kolmosta at lukukauden alussa, se todellakin tarkoitus olla hyvä paikka aloittaa. Jos saat kaksittain, messut, siellä on varmasti töitä maksamaan hieman enemmän huomiota, hyödyntää jaksojen ja virka-aikana. Jos saat nelosta ja vitosta, hyvä. Mutta oikeasti, toivomme liikeradat opiskelijoiden keskuudessa - hyvin yksilöllisiä opiskelijaa kohden, mutta alkaa lukukauden täällä tavallaan kaksi kolmesta valikoima, mutta päättyy täällä on neljä viisi alue. Sitähän me todella etsivät. Ja meillä pitää mielessä, delta, että voit näytteille välillä viikolla nollan ja viikko 12, kun olen tekemässä laadut. Sillä ei ole väliä meille aivan miten olet oikeudenmukainen alussa, jos kehityskaari on todellakin ylöspäin ja vahva. Akateeminen rehellisyys - niin haluan laittaa minun vakavampi ääni vain hetken. Joten tämä kurssi on eroa lähettää enemmän opiskelijoita kuin mikään muu historian mainoksen aluksella, uskon. Meillä on tavallaan menettänyt count tässä kohta, kuinka usein näin tapahtuu. Ja se ei ole, koska opiskelijat 50 ovat kaikki enemmän epärehellisiä kuin luokkatoverit muualla. Mutta ymmärtää myös, että olemme erittäin hyviä havaitsemaan tällainen asia. Ja että on se etu, että tietojenkäsittelytiede luokka on, että me voi emmekä vertailla opiskelijat ongelma asettaa pareittain vastaan ​​joka muut, ei vain tänä vuonna mutta kaikki ennen vuotta. Meillä on kyky, kuten opiskelijoille luokan, Google ja löytää koodin sivustot, kuten github ja keskustelufoorumit. On ehdottoman ratkaisuja CS50: n p-setit kelluva noin siellä. Mutta jos löydät ne, voimme löytää ne. Ja kaikki tämä on hyvin automatisoitu ja helppo ja surullinen meille löytää. Mutta haluan korostaa myös, että Kurssin akateeminen rehellisyys politiikka on hyvin tarkoitus olla hyvin paljon vastakohta hengessä. Itse asiassa tänä vuonna olemme muotoiltu uudelleen asioita oppimäärän olla näin, piste dot dot, jossa tarkemmin oppimäärän. Mutta kantava teema aikana todella on oltava kohtuullisia. Ymmärrämme, että on olemassa merkittävä määrä pedagogisia arvo tehdä yhteistyötä, jossain määrin, luokkatovereiden kanssa, jolloin voit kaksi tai et kolme tai enemmän on seisoo valkoinen lauta whiteboarding, niin puhua, ideasi - kirjoittamisen pseudokoodina kuvina, kaavio mitä pitäisi Mario olla, jos olit kirjoittaa se ensin pseudokoodilla. Mikä olisi ahne algoritmi - miten sitä käyttäytyä kohti ongelma saadaan yksi? Ja niin ymmärtää, että käyttäytyminen että me kannustamme on hyvin paljon samoilla linjoilla. Ja oppimäärän, näet koko joukko luoteja alle kohtuullinen luokka ja ei ole järkevää luokka, joka auttaa meitä auttaa voit kääri mieltäsi noin jossa Emme piirtää että linja. Ja yleensä, kunnon nyrkkisääntö on, että jos sinulla on vaikeuksia ratkaista joitakin bug ja ystäväsi tai luokkatoveri istuu vieressäsi, se on kohtuulliset voit näyttää hänelle koodi ja sanoa, hei, voit auttaa minua selvittää, mikä vialla tässä? Emme yleensä omaksua vastakkaisella puolella. Se ei ole oikea vastaus teidän ystävä tai luokkatoveri täällä sanoa, oh, katsokaa minun ja kuva se pois siitä. Se on tavallaan kohtuutonta. Mutta kun joku muu, toinen aivot, toisen silmin katsomaan näytön tai katsomassa koodi ja sanoa, oletko varma, että haluat on silmukan täällä? Vai oletko varma, että haluat että puolipiste täällä? Tai oh, että virheilmoitus tarkoittaa tätä. Ne ovat hyvin kohtuullisia ja kannustetaan käyttäytymistä. Tapauksissa, joihin olin viittaamatta aiemmin pohjimmiltaan kun opiskelijat ovat myöhään illalla tehdä huono tuomio päätökset ja sähköpostitse heidän koodi joku muu tai vain sanomalla, täällä, se on Dropbox tai Google-hakuja myöhään yöllä. Ja niin kehotan ja pyydän teitä, jos sinulla ei ole näitä väistämättömiä hetkiä stressiä, olet törmäämättä vastaan ​​määräajan, sinulla ei ole myöhässä päivä, koska se on jo perjantaina, että kohta, sähköpostitse kurssin päät tai itseäni suoraan. Sanoa, kuunnella, olen minun katkeamispisteen täällä. Katsotaanpa keskustelu ja tajuta se. Turvautuvat web tai muu ei kohtuullinen käyttäytyminen on koskaan ratkaisu, ja liian moni luokkatoverit eivät ole enää täällä kampuksella takia huono tuomio. Mutta se on erittäin helppo hame että linja. Ja tässä on pieni kuva piristää teidät pois Reddit niin, että nyt kaikki on OK. Niin nopea kertaus sitten ja mihin jäimme. Joten viime viikolla, muistaa, että esittelemme ehtoja, ei Scratch mutta C tällä kertaa. Ja osa oli uusia rakenteita, mutta oikeastaan ​​mitään uusia ideoita sinänsä. Meillä oli Boolen että voisimme tai yhdessä kaksi pystysuoraa baareissa tai ja yhdessä kaksi et-sanomalla, että sekä vasen ja oikea on totta tämän toteuttaa. Sitten meillä oli kytkin, jonka me katsoimme klo lyhyesti, mutta ehdotan, ovat todella vain eri syntaksin saavuttamiseksi samanlaista päämäärää, jos tiedät etukäteen mitä tapauksissa tulevat olemaan. Tarkastelimme silmukoita. Silmukan on ehkä yleisin, tai vähintään yhden, että ihmiset tyypillisesti tavoitella vaistomaisesti. Vaikka se näyttää hieman arvoituksellisesti, näet monia esimerkkejä ennen pitkää, koska sinulla on jo viime viikon lopulla. Vaikka silmukat voivat samalla saavuttaa sama asia. Mutta jos haluat tehdä mitään incrementation tai päivittäminen muuttujan arvot, joudut tee se enemmän käsin kuin silmukan ennen sallii. Ja sitten on do-while-silmukka, jonka avulla voimme tehdä jotain vähintään kerran kun jotain muu on totta. Ja tämä on erityisen hyvä ohjelmia tai pelejä, joissa haluat että se kysyy käyttäjältä jotain ainakin kerran. Ja sitten, jos hän ei suostu yhteistyöhön, saatat haluta tehdä sen uudelleen ja uudelleen. Muuttujat puolestaan ​​meillä oli linjat koodia, kuten tämä, joka voisi on kaksi riviä. Voisit julistaa int kutsutaan laskuri, puolipiste. Tai voit vain julistaa ja määrittelevät sen, niin sanoakseni. Antaa sille arvon samaan aikaan. Ja sitten lopuksi puhuimme noin toimintoja. Ja tämä oli mukava esimerkki mielessä, että se havainnollistaa kahdenlaisia ​​toimintoja. Yksi on getString (), joka taas saa merkkijonon käyttäjä. Mutta getString () on sellainen mielenkiintoinen, Siltä osin kuin olemme käyttäneet sitä, koska olemme aina käyttänyt sitä jotain vasemmalla puolella yhtäläisyysmerkki. Tämä tarkoittaa sitä, että getString () palauttaa arvon. Se palauttaa tietenkin merkkijono. Ja sitten vasemmalla puolella, olemme yksinkertaisesti säästää merkkijonon sisällä muuttuja nimeltä nimi. Tämä on erilainen, tavallaan, alkaen printf koska printf, ainakin meidän kielen käytöstä, ei palauta mitään. Sivuhuomautuksena, se paluu jotain. Me vain välitä, mitä se on. Mutta se ei ole mitä kutsutaan sivuvaikutus. Ja mikä on se sivuvaikutus jokaisessa tapauksessa olemme nähneet tähän mennessä? Mitä printf tehdä? Se tulostaa jotain näytön, näyttää tekstiä tai numeroita tai jotain ruudulla. Ja tämä on vain pitää sivuvaikutus koska se ei oikeastaan ​​luovuttamalla sen takaisin minulle. Se ei ole vastaus sisällä musta laatikko, että voin sitten tartu ja napata. Se vain tekee sen omasta, paljon kuten Colton on liitetty tähän musta laatikko viime viikolla, ja hän jotenkin maagisesti veti pöydällä ilman minua todella mukana. Se olisi sivuvaikutus. Mutta jos olen itse ollut päästä takaisin ja sanoa, oh, tässä on merkkijono käyttäjältä, joka olisi olla paluuarvo. Ja tähän mennessä olemme vain käytetyt toiminnot että muut ihmiset ovat kirjoittaneet. Voimme kuitenkin tehdä näitä juttuja itse. Joten aion mennä CS50 laite uudelleen. Lopuksi haluan välilehti että me oli avata hetki sitten. Ja anna minun mennä eteenpäin ja luoda uuden tiedoston. Ja aion mennä eteenpäin ja kutsuvat tätä yhden positive.c. Joten haluan tehdä jotain positiivinen numerot tähän. Joten aion mennä eteenpäin ja tehdä int - Anteeksi - # Include. Ei tehdä samaa virhettä kuin ennen. Int main (void), avoin kihara ahdin, suljettu kihara ahdin. Ja nyt haluan tehdä seuraavasti. Haluan kirjoittaa ohjelma, joka vaatii, että käyttäjä antaa minulle positiivinen kokonaisluku. Joten ei ole GetPositiveInt toiminto vuonna CS50 kirjastossa. On vain GetInt (). Mutta se on OK, koska olen rakenteita, joiden kanssa voin asettaa hieman rajoittaa tämän arvon. Voisin tehdä jotain tällaista. Joten int n - ja jos kirjoitat pitkin, vain ymmärtää Aion mennä takaisin ja muuttaa joitakin asioita hetken - joten int n = GetInt (). Ja se tulee laittaa int sisällä n. Ja anna minun olla kuvaavampi. Saanen sanoa jotain Vaadin annat minulle positiivinen kokonaisluku. Selvä. Joten hieman ohjeita. Ja nyt, mitä voin tehdä? No, minä jo tiedän yksinkertainen ehtoja tai oksat, aivan kuten minä oli Scratch, voisin sanoa jotain kuten jos n on pienempi tai yhtä suuri kuin nolla, niin haluan tehdä jotain kuten, että ei ole positiivinen. Ja sitten voisin tehdä - OK, mutta en todellakaan halua saada että int. Niin voisin mennä tänne ja voisin sellaista kopio tämä ja luetelmakohdan tätä. Ja sitten, OK. Joten jos n on pienempi kuin tai nolla tehdä tämän. Nyt, mitä jos käyttäjä ei yhteistyötä? No, sitten aion lainata täällä. Ja sitten menen tänne ja täällä ja täällä. Joten tämä ei selvästikään ole ratkaisu, eikö? Koska ei ole loppua näkyvissä. Jos haluan vaatia, että käyttäjä antaa minulle positiivinen kokonaisluku, voin itse saada int. Voin tarkistaa sitten, että int. Mutta sitten haluan tarkistaa uudelleen ja tarkista uudelleen ja tarkista uudelleen. Joten tietenkin, mitä parempi rakentaa käyttävän täällä? Okei, joten jonkinlainen silmukka. Joten aion päästä eroon lähes kaikki tämä. Ja haluan saada tämän int ainakin kerran. Joten aion sanoa tehdä - ja tulen takaisin kun taas vain hetken - nyt, mitä? Aion tehdä int n saa GetInt (). OK. Niin se on aika hyvä. Ja nyt, kuinka usein Haluan tehdä tämän? Sanon printf lenkin sisältä joten en voi vaatia uudestaan ​​ja uudestaan, jos tarvetta on. Ja mitä haluan tämän while ehto tehdä? Haluan jatkaa tätä kun mitä on kyse? Joo. N on pienempi tai yhtä suuri kuin nolla. Joten jo, olemme merkittävästi puhdistaa tämän koodin ylös. Olemme lainanneet hyvin yksinkertainen rakentaa - do-while-silmukka. Olen varastanut vain tärkeää linjat koodia, joka aloin kopiointi ja liittäminen, mikä ei ollut viisasta. Ja nyt aion todella liitä se tänne ja tee se kerran. Ja nyt, mitä haluan tehdä osoitteessa aivan lopussa tämän ohjelman? Otan vain sanoa jotain yksinkertaista kuten, kiitos - ja Teen% I int - kenoviiva n, pilkku ja sitten plug in n, puolipiste. Selvä. Katsotaan mitä tapahtuu nyt kun ajaa tätä ohjelmaa. Aion mennä eteenpäin ja eivät tee myönteistä. Hitto. Vähän virheitä. Haluan siis siirry takaisin ensimmäiseen. Eivät toimi niiden kautta taaksepäin. Työ läpi ylhäältä alas etteivät he Cascade ja vain yksi asia olla väärässä. Implisiittinen ilmoitus toiminto GetInt (). Joo. Joten se ei ollut tarpeeksi. Olen sellainen teki saman virheen, mutta hieman erilainen tällä kertaa. Minun täytyy kuulu ainoastaan ​​stdio.h mutta Myös cs50.h, joka sisältää ns ilmoitusten saada int, joka opettaa laitteen tai opettaa C mitä GetInt () on. Joten anna minun tallentaa viestit. Aion jättää muut virheet koska aion toivoa, että he jotenkin liittyvät virhe Olen jo vahvistettu. Joten anna minun mennä eteenpäin ja kääntää kanssa tehdä positiivisia, Anna. Hitto. Kolme virhettä edelleen. Saanen siirry ensimmäiseen. Käyttämätön muuttujan n. Olemme ole nähnyt tätä ennen. Ja tämäkin on hieman arvoituksellinen. Tämä on lähtö kääntäjä. Ja mitä se korostettuna siellä - positive.c :9:13 - sanoo, se sanoo rivillä yhdeksän positive.c kello 13. luonnetta, 13. sarake, olet tehnyt tämän virheen. Ja erityisesti se kertoo minulle käyttämätön muuttujan n. Katsotaanpa - line yhdeksän. Käytän n siinä mielessä, että Annan sen arvoa. Mutta mitä kääntäjä ei pidä on että en ole ilmeisesti käyttää sitä. Mutta hetkinen, olen käyttänyt sitä. Linjassa 11, Käytän sitä tässä. Mutta jos selaa edelleen klo positive.c :11 - joten rivillä 11, luonne 12, kääntäjä kertoo minulle, käyttö Pimeän tunniste n. Joten pimeän tarkoittaa, että olen ei määritelty sitä muuttujan tietotyyppi. Mutta hetkinen. Tein juuri niin linjassa yhdeksän. Niin joku on todella hämmentynyt tästä. Se on joko minä tai kääntäjä, koska linjassa yhdeksän, jälleen, olen julistamalla int n, ja olen osoittaa se palauttaa arvon GetInt (). Sitten olen käyttäen, että muuttujan n mukaisesti 11 ja tarkistaa, jos sen arvo on pienempi tai yhtä suuri kuin nolla. Mutta tämä ilmeisesti on huono ja rikki miksi? Sano se uudestaan? Ah, minun täytyy julistaa n ennen silmukkaan tulevan. Mutta miksi? Tarkoitan, me vain ehdotti vähän sitten, että se on hieno julistaa muuttujia kaikki yhdellä rivillä ja sitten antaa heille jotain arvoa. Globaali muuttuja - Palataan kuin ajatus vain hetken. Miksi haluat minun laittaa se ulkopuolella silmukan? On. Täsmälleen. Joten, joskin hieman counterintuitive, haluan tiivistää. Kun julistaa n sisällä DO-lohkon siellä - Erityisesti sisällä ne aaltosulkeita - että muuttuja n on mitä kutsutaan soveltamisala - liity meidän pisteytysjärjestelmä vuonna Tietenkin - mutta on soveltamisala, joka on rajoitettava aaltosulkeita. Toisin sanoen, yleensä jos julistaa muuttuja sisällä joukko aaltosulkeita, että muuttuja on olemassa vain sisällä näitä aaltosulkeita. Joten että logiikka yksin, vaikka Olen ilmoittanut n linjassa yhdeksän, se olennaisesti katoaa soveltamisalan, häviää muistista, niin sanotusti, mennessä osuin linja 11. Koska linja 11, valitettavasti, on niiden ulkopuolella aaltosulkeita. Joten en valitettavasti voi korjata tämän Viittaan siihen, mitä tein sitä ennen. Saatat ensin tehdä tämän. Mutta mitä sinä nyt ole tekee syklisesti? Et ilmeisesti ole tulossa int syklisesti. Joten voimme jättää GetInt (), ja me pitäisi jättää GetInt () sisällä silmukka, koska se mitä haluamme kiusata käyttäjän uudelleen ja uudelleen. Mutta se ei riitä mennä jopa linja, eli kuusi. Int n, puolipiste. Älä anna sitä arvoa vielä, koska sinun ei tarvitse ihan vielä. Mutta nyt täällä, ilmoitus - tämä olisi erittäin helppo virhe. En halua varjo minun edellinen ilmoitus n. Haluan käyttää n että todella on olemassa. Ja nyt linjassa 10, Voin liittää n arvo. Mutta linjassa kuusi, julistan n. Ja niin voin tai en voi käyttää sitä linja 12 nyt? Voin koska joiden välillä kiharat henkselit on n julistettu nyt? Yksi täällä linjalla viisi. Yhteen täällä line 14. Joten kun nyt loitontaa, tallentaa tämän tiedoston, siirry takaisin ja suorita make positiivinen, se koonnut tällä kertaa. Niin, että jo käynnissä. Slash. . / Positiivinen, Anna. Vaadin, että annat minulle positiivinen kokonaisluku. Negatiivinen 1. Negatiivinen 2. Negatiivinen 3. Zero. Yksi. Ja kiitos yksi on mitä nyt painettu. Yritän jotain muuta, uteliaisuudesta. Minua käskettiin syöttää kokonaisluvun. Mutta mitä jos olen sen sijaan kirjoittaa lammasta? Joten nyt näet eri nopeasti - yritä uudelleen. Mutta missään minun koodi minä kirjoittaa uudelleen. Joten missä, oletettavasti, on tämä yritä uudelleen kysyy tulevat, sanoisit? Joo, alkaen GetInt () itse. Joten yksi niistä asioista CS50 henkilöstö tekee sinulle, ainakin näillä ensimmäisillä viikkoa, on olemme kirjoittaneet jonkin verran virheiden tarkastaminen sen varmistamiseksi, että jos soitat GetInt (), voit ainakin saada takaisin int käyttäjältä. Et saa merkkijono. Et saa merkkiä. Et saa jotain aivan muuta. Saat int. Nyt se ei ehkä ole positiivinen. Voisi olla negatiivinen. Me emme anna mitään takuita sen ympärillä. Mutta me kiusata käyttäjä yrittää uudelleen, Yritä uudelleen, yritä uudelleen, kunnes hän itse yhteistyötä. Vastaavasti, jos en tee 1,23, joka ei ole int. Mutta jos en kirjoita vaikkapa 50, että antaa minulle arvo, että halusin. Selvä. Joten ei paha. Kaikki kysymykset, mitä olemme juuri tehneet? Avain takeaway on, on selvää, ei niin paljon silmukka, joka olemme nähneet ennen vaikka meillä ei oikeastaan käyttänyt sitä, mutta kysymys soveltamisalaa, jos muuttujia voidaan voidaan käyttää vain joissakin tietyn soveltamisalaan. Okei, haluan käsitellä ehdotusta olet tehnyt aikaisemmin, että globaali muuttuja. Sivuhuomautuksena, käy ilmi, että toinen ratkaisu tähän ongelmaan, mutta tyypillisesti virheellinen liuos tai huonosti suunniteltu ratkaisu, on julistaa muuttuja kuin mitä nimeltään globaali muuttuja. Nyt olen sellainen rikkoo minun määritelmä Soveltamisalan koska on olemassa Ei aaltosulkeita huipulla ja hyvin pohjaan tiedoston. Mutta seuraus, että on, että nyt linjassa neljä, n on globaali muuttuja. Ja kuten nimikin kertoo, se on vain saataville kaikkialla. Scratch todella on näitä. Jos käytetään muuttujan, saatatte muistaa pitäisi valita, jos se on tämä sprite tai kaikki sprite. No, kaikki sprite on vain selkeämpi tapa sanoa maailmanlaajuinen. Niin? Ah, todella hyvä kysymys. Niin muistaa, että ensimmäinen versio minun koodi, kun väärin ilmoitettu ja määritelty n linjassa yhdeksän - Olen ilmoittanut sen muuttujan ja annoin sen arvo sijoitusoperaattori - Tämä antoi minulle kaksi virhettä. Yksi, että n ei ole käytetty, ja kaksi, että linja 11 se vain ei ole ilmoitettu. Joten ensimmäinen en osoite tuolloin. Se ei ole täysin virheen julistaa vaihtelee, mutta ei käytä sitä. Mutta yksi niistä asioista, olemme tehneet CS50 laitteen, tarkoituksella, pedagogisesti, on olemme kampi ylös odotukset kääntäjä tehdä Varmista, että teet asioita ei vain oikein, mutta todella oikein. Koska jos olet julistaa muuttuja kuten n ja koskaan käyttää sitä, tai käyttää sitä oikein, niin mitä se tekee siellä? Se todella palvele mitään tarkoitusta. Ja se on erittäin helppo ajan, jos eivät määritä omaa tietokonetta Näin vain on koodi, joka on vähän jäänteitä täällä jäänteitä siellä. Ja sitten kuukautta myöhemmin katsomme taaksepäin ja et pidä, miksi tätä linjaa koodi on? Ja jos ei ole mitään hyvää syytä, se ei ole hyötyä sinulle tai työtovereiden tiellä on kompastua sen jälkeen. Sivuhuomautuksena, jossa on että tulee? No, muistaa, että joka kerta meidän kääntää ohjelmaa kaikki tätä kamaa on tulostetaan. Niin me palaamme tähän. Mutta jälleen kerran, tee on apuohjelma, joka automatisoi laadintaprosessin by käynnissä todellinen kääntäjä nimeltään kalahtaa. Tämä asia, me lopulta nähdä, on tehdä testaajat erityistä ohjelma nimeltä debuggeri. Tämä on tekemistä optimoimalla koodi - siitä lisää tulevaisuudessa. Std = C99 - Tämä tarkoittaa vain sitä käyttää 1999 versio C. C on ollut noin pidempään kuin että, mutta he tekivät muutamia kivoja muutokset 10 plus vuotta sitten. Ja tässä merkityksellisimmät. Sanomme tehdä mitään, aiemmin olisi ollut varoitus virhe estää opiskelijan alkaen kokoamisessa. Ja seinän keinot tehdä sen koko joukko asioita, ei vain liittyvät muuttujat. Ja sitten haluaisin siirtyä loppuun tämän linjan. Ja tämäkin lopulta pyrimme palata. Tämä on tietysti nimi tiedosto olen koota. Tämä muistuttaa tiedoston nimi Olen lähte nimi minun runnable ohjelman. Tämä-lcs50 vain sitä käyttää CS50 kirjasto, ja kaikki nollia ja ykkösiä, jotka Henkilökunta kirjoitti ja koottu aiemmin tänä vuonna, integroida ne minun ohjelma. Ja kukaan tiedä, mitä-lm on? Se matematiikka kirjasto, joka on vain siellä, vaikka olet ei tee mitään matemaattisia. Se on vain automaattisesti edellyttäen meille tehdä. No, anna minun tehdä yksi toinen esimerkki tässä avaamalla uuden tiedoston. Ja haluan pelastaa tämän yhden string.c. On käynyt ilmi, että puhutaan tiedot tyypit tänään, on vielä enemmän meneillään alla huppu kuin olemme nähneet tähän mennessä. Joten haluan nopeasti tehdä nopeasti ohjelman. Sisällytä stdio.h. Ja minä pelastan sen. Ja te tiedätte, haluan tehdä samaa virhettä uudelleen ja uudelleen. Sisällytä cs50.h. Ja anna minun mennä eteenpäin nyt ja tehdä int main (void). Ja nyt haluan vain tehdä ohjelman että tämä - julistaa merkkijono nimeltään s ja saada merkkijono käyttäjältä. Ja haluaisin tehdä vähän ohjeet täältä - antakaa minulle string - niin käyttäjä tietää, mitä tehdä. Ja sitten tänne alle tämän, Haluan tehdä seuraavat - for int i saa nolla. Jälleen tietotekniikan tutkijoita tyypillisesti alkaa laskea nollaan, mutta voisimme tehdä, että yksi jos halusimme. Nyt aion tehdä i on pienempi kuin merkkijonon pituus s. Joten strlen - S-T-R-L-E-N - uudelleen, se on ytimekäs, koska se on helpompaa kirjoittaa, vaikka se on hieman arvoituksellinen. Se on funktio olemme ei käytetä ennen, mutta kirjaimellisesti tekee sen - palata minulle, joka edustaa merkkijonon pituus että käyttäjä kirjoittaa. Jos ne kirjoitetaan hei, se palaisi viisi koska siellä on viisi kirjaimet hei. Sitten jokaisen iteraation Tämän silmukan, i plus plus. Joten jälleen, vakio rakentaa vaikka et ole aivan liian mukava tai perehtynyt siihen vielä. Mutta nyt jokaisen iteraation tämän silmukan, huomaa, mitä aion tehdä. Haluan mennä eteenpäin ja tulostaa ulos yhden merkin - joten% c kenoviiva n uudelle riville. Ja sitten, tiedät mitä haluan tehdä? Riippumatta sana on, että käyttäjä tyypit in, kuten hei, haluan tulostaa H-E-L-L-O, yksi merkki per rivi. Toisin sanoen, haluan saada aikaa yksittäisten merkkijonon merkkejä, jolloin asti merkkijono on vain ollut merkkijono. Ja käy ilmi, mitä voin tehdä s, kiinnike, i, loppusulkumerkki, sulje suluissa, puolipiste. Ja minulla on tehdä yksi asia. Se on tiedosto nimeltä string.h että strlen on julistettu. Joten jos haluan käyttää tätä toimintoa, Minun täytyy kertoa kääntäjä, aio käyttää sitä. Nyt haluan mennä eteenpäin ja tehdä ohjelma nimeltä merkkijono. Dot, slash, merkkijono. Antakaa minulle merkkijono. Menen eteenpäin ja kirjoita se. Hei, kokonaan isoilla kirjaimilla, Anna. Ja nyt huomaa olen painettu tämän yhden merkin jälkeen. Joten uusi yksityiskohta on, että merkkijono, lopussa päivä, voi olla käsiksi tapa sen yksittäisten merkkiä ottamalla käyttöön neliö kiinnike merkintätapaa. Ja se johtuu merkkijono alla huppu on todellakin sekvenssi merkkiä. Mutta mikä on siisti niistä on tietokoneesi RAM - Mac, PC, mitä se on - he kirjaimellisesti takaisin takaisin takaisin - H-E-L-L-O - yksittäisten vieressä tavua muistiin. Joten jos haluat saada kahdeksas kuten tavu, joka tässä silmukka olisi kiinnike nolla, kannatin yksi, kiinnike kaksi, kiinnike kolme, kiinnike neljä - joka on nolla indeksoitu asti viisi - joka tulostaa H-E-L-L-O omalla rivillään. Nyt, teaser, haluan näyttää sinulle millaisia ​​asioita voit lopulta olla ymmärtää, ainakin joidenkin lähellä näköinen. Yhden, mitä olemme mukana nykypäivän esimerkkejä, jos haluat, on oikeastaan yksi ensimmäisistä jailbreaks iPhone. Jailbreaking tarkoittaa halkeilua puhelin joten voit itse käyttää sitä eri operaattorin tai install oman ohjelmiston. Ja huomaat tämän näyttää täysin arvoituksellinen, todennäköisesti. Mutta katsokaa tätä. IPhone oli ilmeisesti säröillä silmukka, jos ehto, muuta kunnossa, joukko toimintoja emme ole nähnyt. Ja vielä, et ole Ensi silmäyksellä luultavasti ymmärtää, miten tämä toimii. Mutta kaikessa tavallaan ottaa selvänä elämäämme todella pyrkii vähentämään jopa joitakin Näiden perustekijöiden olemme olleet katsomalla. Anna minun mennä eteenpäin ja avata yhden muu ohjelma, holloway.c. Joten tämäkin on jotain ei todellakaan tiedä. Vaikka yksikään henkilökunnan tai voisin todennäköisesti selvittää tämän tarkastelemalla koska tämä oli jonkun koodi joka toimitettiin mitä historiallisesti tunnettu sotkettu C kilpailuun, jossa voit kirjoittaa ohjelman joka kokoaa ja käy, mutta on niin pirun arvoituksellinen ei ihminen voi ymmärtää, mitä se tulee tehdä ennen he todella ajaa sitä. Joten todellakin, jos tarkastellaan tämän koodi, näen kytkin. Näen tärkein. Näen nämä hakasulkeissa mikä jonkinlainen array. Haluaako joku arvaa tämä ohjelma todella ei, jos juoksen Holloway? Kyllä. OK. Hyvin tehty. Joten vain henkilökunnan ja en voi selvittää mitä nämä asiat tekevät. Ja nyt lopuksi, anna minun mennä eteenpäin ja avata yksi muu ohjelma. Tämä yksi - uudelleen, teemme lähdekoodi saatavilla verkossa - tämä on vain Tällainen kaunis katsella. Kaikki he tekivät osuu välilyöntiä melko vähän. Mutta tämä on todellinen koodi. Joten jos luulet, että ihan, jos me todella ajaa tämä on nopea, lopulta näet, kuinka me voisi tehdä asioita, kuten tämä. Joten me jättää sinut, että huomautus ja nähdään keskiviikkona. [Musiikki soi] SPEAKER 2: Seuraavalla CS50, TF vaiheessa kapina. SPEAKER 3: Siinä hän on. Ottakaa kiinni! [Musiikki soi]