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