DAVID J Humala: Kõik õige, nii et see on CS50. Ja see on selgelt reedel. Ja see on lõpuks nädalal üks. Nii võid meelde tuletada, et meil jäi, Viimane kord, mille pinge kehvasti. Millest me jätke vale, et ei asi, mida olete õpetanud kasvab up, 1 jagatud 10 ei ole, in Tegelikult 0,1 või 0,100 või 0,10000. Tegelikult, kui oleme kompileerida seda programmi, nagu me eile koos, teha ebatäpsus, ja seejärel teha dot, kaldkriips, ebatäpsuse, saime teada, et see on see, mida on 1 jagatud 10 tegelikult on. Nii et see ei ole tegelikult päris nii. Aga see vihje mingil põhiõiguste piiramise arvutid. Ja tõepoolest, hulgast asjad, mida me teeme täna vaatleme, miks see on juhtus, mis mõju on sellel, kuidas inimkond ei ole haarata seda väga tõsine situations-- tulemus, mis on olnud üsna traagiline ja expensive-- ja ka vaatleme, kuidas me võib tegelikult kaitsma vastu selliseid piiranguid. Nii intuitiivselt ehk miks 1 jagatud 10, vastavalt minu arvuti siin mitte ainult 1/10, 0,10? Jah. Mida sa arvad? Pealtvaatajal: radix on erinevad? DAVID J Humala: What on? Oh, radix on erinevad? Nii ei ole päris. See on tegelikult rohkem põhiline riistvara. Muud mõtted? Jah. Pealtvaatajal: Nad esindavad numbrid teisiti? DAVID J Humala: Nii they-- Right. Nad esindavad numbrid erinevalt. Ebatäpselt, ilmselt. Nii et on-- Noh, erinevalt sellest, mida? Või kelle käest? Meilt? Pealtvaatajal: Jah. Nad ei kasuta koma süsteemi [kuuldamatu]. DAVID J Humala: OK. Nii et mõnes mõttes, et nad ei ole kasuta koma süsteemi. All kapuuts, kõik on tõepoolest binaarne, ja see on seotud, tegelikult. Aga see on isegi lihtsam selgitus, kui on. Jah. Pealtvaatajal: Nad ainult nii palju bitti. Nad võivad salvestada ainult kuni teatud määral, nagu koos koma. DAVID J Humala: Jah. See on see, mida on tõesti saada seda. Tuleb välja, et arvutid Tavaliselt on alati ainult kasutada piiratud hulgal teavet esindada midagi. Õigus? Lõppude lõpuks, meil on ainult fikseeritud summa kõvakettaruumi. Meil on ainult fikseeritud summa RAM või arvuti mällu. Ja kui sul on ainult fikseeritud summa midagi, kindlasti ei saa tegelikult loota kuni lõpmatuseni või number, mida soovid. Sa, omamoodi, pea valida ja valida, mida vahemik väärtuste sa lähed toetada. Ja nii näiteks nädala või kahe tagasi, kui me rääkisime ASCII, ja me rääkisime 8 bitti, või baidi, kui nii võib öelda, Kõige rohkem saime esindada 8 bitti oli siis? 255. Ja me saame esindavad 256 Kokku väärtused kuid mitte siis, kui me kulutame üks neist kohta 0-- Noh, aga kui me veeta üks neist 0, siis kõige rohkem On muidugi, 255. Nii selgub, et see on puhul ka selles kontekstis. Me hakkasime rääkima, viimane kord, umbes ujukoma numbrid, mis erinevad täisarvud, in et neil on koma ja loodetavasti mõned numbrid Pärast seda, kuid nad on liiga. Arvuti on ainult tavaliselt läheb kasutada 32 bitti, ehk 64 bitti esindama Murdarv. Nii et kuigi me oleme kasvanud õppida matemaatikat ja teades et saate täiesti pea lõpmatu arv numbrid pärast koma, ei kui teil on piiratud mälu. Sa, omamoodi, on ringi, või valima mis numbreid sa lähed esindada. Ja nii sa ei mõtle, et mõnes mõttes see on arvuti kõige lähemal ühtlustamise väärtusega 1/10, et see võib saada, vaid 32 või nii bitti. Ja see ei ole ainult 1/10. Näiteks, kui ma seda muuta 1/3, mis meie arvates on isegi lihtsam. Nii 1 jagatuna 3. Lubage mul faili salvestada. Lubage mul minna ja uuesti kompileerida see. Ja andke mulle uuesti käivitada. Ka siin ilmselt 1/3 ei ole 0,3 ja siis lõpmatu arv 3 s tagant. Sul on see ebatäpsus lõpus. Nii et me inimestel on õiged, ja mida olete õppinud on tegelikult õige, kuid me keemistsentrid kuni vastu mõned piirangud. Ja ma arvasin me tahaks teha täna, on alustada vaadates ausalt öeldes traagilisi tagajärgi see Mõnikord, kui inimkond ei ole päris ellu selle reaalsuse ja need piirangud. Ja me näeme mitmeid kleebised alates History Channel, mis võtab vaadata, kuidas asjad on läinud valesti. See on umbes 8 minutit pikk, ja me tuleme tagasi pärast seda ja kui heita pilk täpselt mida veel saab valesti minna. Kui meil oleks päevasõidutulede lights-- [Video taasesitus] -Computers, Me kõik oleme tulnud vastu sageli heidutav probleeme, mis minna koos nendega. Bugs, viiruste ja tarkvara tõrkele on väike hind maksma mugavuse eest. Aga kõrgtehnoloogia ja kiire sõjaväe ja kosmoseprogrammi rakendused väikseim probleem võib suurendatakse arvesse katastroof. 4. juunil 1996 teadlast valmis käivitada mehitamata Ariane 5 raketi. See vedas teadusliku Satelliitide loodud täpselt kindlaks, kuidas Maa magnetvälja suhtleb koos päikesetuul. Rakett ehitati Euroopa Kosmoseagentuur ja välja tõsta selle rajatise rannikul Prantsuse Guajaana. -Ja Umbes 30 sekundit arvesse lend, nad esimest korda märkas, et midagi on valesti. Et pihustid olid pööramisega nii nad tõesti ei peaks. Umbes 40 sekundit arvesse lendu selgelt sõiduk oli probleeme, ja see, kui nad tegid otsuse hävitada. Vahemikus Safety Officer koos tohutu tahtejõud vajutasid nuppu õhku rakett enne seda võiks saada oht avalikule korrale. -See Oli neiu voyage Ariane 5, ja selle hävitamine võttis kuna selleks puudus varjatud raketi tarkvara. -The Probleemi kohta Ariane oli see, et oli see arv vaja 64 bitti väljendada, ja ta tahtis muuta see 16 bit number. Eeldati, et mitmed oli kunagi väga suur, et enamik neist numbrit 64 bit number oli 0 s. Nad olid valed. -The Suuda ühe tarkvara vastu selline number loodud teine ​​oli keskmes rike. Tarkvaraarendus on saanud väga kulukas osa uue tehnoloogia. Ariane 4 raketi olnud väga edukas, nii palju tarkvara loodud see oli ka kasutatud Ariane 5. -The Põhiline probleem oli see, et Ariane 5 oli kiirem, kiirendatud kiiremini. Ja tarkvara ei olnud moodustasid sellest. -The Hävitamine raketi oli suur rahaline katastroof, kõik tänu minut tarkvara viga. Aga see ei olnud esimene aega andmete muutmise probleeme oli vaevavad moodsa raketi tehnoloogia. -Kui 1991. aastal alguse Esimese Lahesõja Patriot rakettide kogenud Samalaadsed arvu muundamise probleemi. Selle tulemusena 28 inimest, 28. Ameerika sõdurid tapeti umbes 100 teised haavatud, kui Patriot, mis pidi kaitsta sissetulevad scuds, ei tule rakett. -Kui Iraak Kuveiti tungis ja Ameerikas käivitas Desert Storm alguses 1991 Patriot rakettide patareid lähetati kaitsta Saudi Araabia ja Iisraeli Iraagi Scud rakettide rünnakud. Patriot on USA, keskmaa pind-õhk süsteemi valmistatud Raytheon ettevõte. -The Suurus Patriot interceptor, ise on umbes, umbes 20 jalga pikk. Ja see kaalub umbes 2000 naela. Ja see viib lõhkepea on about-- Ma arvan, et see Umbes 150 naela. Ja lõhkepea ise, on plahvatusohtlikud, millel on fragmendid ümber. Korpus on lõhkepea on eesmärk on käitunud Jämejahu hallid. -The Raketid on läbi, 4 konteineri kohta, ja veetakse poolhaagise. -The Patriot anti raketisüsteemi ulatub vähemalt 20 aastat. See oli algselt mõeldud kui õhutõrje rakettide tulistada alla vaenlase lennukid. Esimeses Lahesõda, kui see sõda tuli mööda, armee tahtis seda kasutada tulistama scuds, mitte lennukid. Iraagi Force polnud nii palju probleeme, kuid armee oli mures scuds. Ja nii nad üritasid uuendada Patriot. -Intercepting Vaenlane rakett liigub mach viis pidi olema piisavalt suur väljakutse. Aga kui Patriot oli tormas teenust, armee ei olnud teadlikuks Iraagi muudatustest, mis tehakse oma scuds peaaegu võimatu tabada. -Mis Juhtus, on scuds et olid tulnud, olid ebastabiilsed, nad wobbling. Selle põhjuseks, oli iraaklaste, et saada 600 kilomeetri välja 300 kilomeetri vahemikku rakett, võttis kaalust välja ees lõhkepea ja tegi lõhkepea kergem. Nüüd, Patriot üritab tulla kell Scud ja enamiku ajast, Valdav enamus aega, see oleks lihtsalt lennata poolt Scud. -Kui Patriot haldurid mõistis Patriot oma eesmärki täitnud, nad lõhkeda Patriot on lõhkepea vältida võimalikke ohvreid, kui see lubati langevad maapinnale. -See Oli see, mida enamik inimesi nägi, need suured fireballs taevas, ja vääriti kui pealtkuulamist Scud lõhkepeade. Kuigi öösel taevas, patrioodid ilmunud olema edukalt hävitades scuds, kell Dhahran, ei saa olla viga selle toimivuse. Seal Patriot radar süsteemi kaotanud jälgida sissetuleva Scud, ja kunagi käivitatud, tõttu tarkvara viga. See oli iisraellased, kes esimesena avastas et enam süsteemi oli, mida pikem on lahknevus sai tänu kella varjatud Süsteemis arvutisse. -Umbes 2 nädalat enne tragöödia Dhahran, Iisraeli teatatud kaitseministeeriumil, et süsteem oli kaotamas ajal et pärast umbes 8 tundi järjest nad märkasid, et süsteem oli muutuvad märgatavalt vähem täpne. Riigikaitse osakond vastas ütleb kõik Patriot patareid et ei jäta süsteemid olnud pikka aega. Nad ei ole kunagi öelnud, mida pikka aega oli. 8 tundi? 10 tundi? 1000 töötunni? Keegi ei teadnud. -The Patriot aku seisvad kasarmud kell Dhahran, ja selle vigane sisemine kella, oli olnud üle 100 tunni ööl vastu 25. veebruar. -See Jälgida aega täpsusega umbes 1/10 sekundit. Nüüd 1/10 teine ​​on huvitav number sest see ei saa olla väljendatakse kahendsüsteemis, täpselt. Mis tähendab, et ta ei saa väljendada, täpselt, Igal kaasaegse digitaalse arvuti. On raske uskuda, kuid kasutada seda kui näidet. Võtame number, 1/3. 1/3 ei saa väljendada kümnendsüsteemis, täpselt. 1/3 on 0,333 kestnud lõpmatuseni. Ei ole nii, et seda teha, on absoluutne täpsus, in kohaga. See on täpselt samasugune probleem, mis juhtus Patriot. Mida pikem on süsteem jooksis, siis hullem aeg viga sai. -Pärast 100 töötunni viga ajal oli ainult umbes 1/3 sekundi jooksul. Aga nii on suunatud rakett liigub mach 5, selle tulemuseks oli jälgimise viga üle 600 meetri. Oleks saatuslik viga sõdurite juures Dhahran. -Mis Juhtus, on Scud käivitamine oli avastatud varajase hoiatamise satelliidid, ja nad puudutava uue et Scud oli tulevad oma üldist suunda. Nad ei tea, kust see tuli. -See Oli nüüd kuni radar osa Patriot süsteemi, kaitsta Dhahran, et leida ja hoida jälgida sissetulevate vaenlane rakett. -The Radar oli väga tark. Oleks tegelikult jälgida asendi Scud ja siis ennustada, kus siis ilmselt oleks, Järgmise ajal Radar saatis impulsi välja. See kutsuti vahemikus värava. -Siis, Kui Patriot otsustab piisavalt aega on edasi minna ja vaadata järgmise koht Selle avastatud objekti, see läheb tagasi. Nii et kui ta läks tagasi vale koht, seda siis ei näe objekti ja ta otsustab, et ei ole objekt, see oli vale tuvastamise, ja langeb teele. Ametisse astuv Scud kadus radari ekraani, ja sekundi pärast, siis slammed arvesse kasarmud. Scud hukkus 28 ja oli viimane üks lastud esimese Lahesõja. Õnnetuseks uuendatud tarkvara saabus Dhahran järgmisel päeval. Tarkvara viga oli fikseeritud, sulgemine üks peatükk probleemsete ajalugu Patriot rakettide. [Taasesituse lõpetamiseks] DAVID J Humala: Nii me vaatleme mõned sarnased piirangud lihtsalt natuke. Aga kõigepealt, olgem üleminek mõne FYI on. Nii one-- sel nädalavahetusel, seal on super lõigud, mis on mõeldud tõrjuda regulaarne lõigud, mis käivitub Nädala pärast. Võtke pilk CS50 veebilehte Lisainformatsiooni nende. Samuti filmitakse ja otseülekanne elada ei saanud osaleda. Ülesanded 1 kohta Muidugi kodulehel juba, ja me võtame pilk et natuke. Ja tööaega liiga, võtab pange see esmaspäevast neljapäevani. Nii et see oli kõige kanoonilise Programm me vaatasime viimast korda. See on nagu kõige lihtsam Programmi saab kirjutada C, ja isegi, et on natuke julge väide. Õigus? Sest seal on palju näilisest keerukusest sellele. Võtame pilgu mida mõned neist elementidest olid ja siis proovida anda vaimse eeskujuks, kuidas Nende lihtsamaid programme töötada ja siis hakkame Vaadates asju üha keerulisemaks. Nii et see joon siin esile nüüd, kollane, mida me siis ütleme, viimane kord, et see meie jaoks? Mis eesmärgil ta teenib? Igaüks kaugemalt tagasi? Jah. Pealtvaatajal: [kuuldamatu] DAVID J Humala: Hea. Nii et see annab teile juurdepääsu käske, või olgem kutsuda neid funktsioone, et keegi mujal kirjutas, et on välja kuulutatud, nii-öelda muul faili. Nii me näeme täpselt, mida .h faili on versus .c faili, lõpuks. Aga nüüd, lihtsalt tean et printf, näiteks on üks funktsioone, mis on olnud deklareeritud mõne muu faili, kuskil muidu pilve kõvakettale, et võimaldab meil pääseda printf ja seda kasutada ilma jalgratast ratta ise. Vahepeal peamine. Mis oli analoog peamine, eelmisel nädalal? Jah. Pealtvaatajal: Roheline lipp on klõpsatud. DAVID J Humala: Jah. Scratch on, kui roheline lipp klõpsatud. See on nagu puzzle tükk mis algab asjad ära. Ja nii sarnaselt, tegin maailma otsustas mõned aastad tagasi, et C, ja hunnik muid keeli, kui sa tahad kirjutada programm, Sinu esimene ülesanne Nimeks, peamine. Ja see peab välja nägema selline. Aga me tuleme tagasi, muul ajal, et mida, int, ja tühine, tähendab selles kontekstis. Praegu on looksulg on lahked ja nagu Scratch puzzle tükk kuju mis isoleerib mõned ridade arvu. Ja vahel liinidel siin on see siin. printf on funktsioon, mille eesmärk on elu on printida vormindatud stringi. Ja vormindatud, ma mõtlen sulle saab ühendada kohatäide väärtusi, ja saate määrata, kui palju kohaga punktid, mitu numbrit trükkida pärast koma jms. Ja printf muidugi võtab ühe või rohkem argumente või parameetrid, muidu tuntud, rohkem lihtsalt, sest sisendid. Nii printf, nagu palju funktsioone, võtab sisendeid. Ja need sisendid on omaks Kahe sulgudes siin. Ja sees need on üks sisend. See on string, nagu me oleme seda nimetas, mis on lihtsalt märgijada, nagu sõna või väljend, või tervikuna essee isegi, vahel jutumärkide. Ja see, mis toimub mõjutada käitumist printf sest loomulikult see on lihtsalt üldine väljatrükki. Ta ei kavatse teada, mida printida, kui te ei ütle seda. Ja siis mõned eritunnuste. Mida me öelda, et see imelik on sümbolite jada? Jah. Pealtvaatajal: Uus liin. DAVID J Humala: Uus liin. Nii selgub, sa ei saa lihtsalt tabas, sisestage, kui olete kirjalikult programmi. Üldiselt koostaja ei hakka natuke segaduses, mida sa mõtled. Pigem sa pead sõna otseses mõttes öelda, anna mulle uus liin siin. Ja nii / n on see, mida me üldiselt helistada Paomärk. Nii n, uue liiniga. Ja koostaja teab et kui ta näeb / n, see peaks tegelikult indutseerida arvuti, lõpuks, või printf, sel juhul, välja trükkida tegelik uut line, nagu pihta, siseneda, klahvi. Ja lõpuks, mida tegime öelda see tükk süntaks on? Mis see esindab? Jah. Pealtvaatajal: [kuuldamatu] DAVID J Humala: See on lihtsalt lõpuks joon. See on lõpuks avaldusega. Ja mõista, et me ei ole pane neid kõikjal. Me kindlasti ei pane neid otstes iga rida. Näiteks polegi kohta Esimene rida, polegi liinil koos, peamine, polegi pärast looksulg, aga sa hakkad nägema ja saada tuttav kus seda nõudnud. Ja see on peaaegu alati pärast funktsiooni helistada või märge, mõned meetmed et sa oled tegelikult võttes. Ja tean nüüd, eriti kui nende hulgas vähem mugav, need on erinevaid lollusi et saate lõpuks kogemata peksma oma peaga vastu seina üle. Sest sa pead olema loogiliselt kindlad mingi probleem olete lahendanud probleemi set, ja kuradi asi lihtsalt ei koostab või isegi käivitada. Ja nii sageli, varakult, et see läheb olla, sest sa vastamata sulgudes või sa vastamata semikooloniga. Ja nii lihtsalt olema teadlik ning selliseid asju, ja püüdke mitte pettunud neid, sest väga kiiresti teeb seda vanaks müts. Aga see on väga lihtne saada pettunud varakult, kui tulemus. Nüüd, võtame pilk kuidas see liin on tegelikult töötab ja siis vaatame veidi keerulisema. Nii et meil on siin, siis võime toetuda selle ekraani. Ja oletame, et see on minu arvuti ekraanil, aga ma kirjutan, hello programmi ja ma ei ole rakendatud, printf. Keegi teine ​​on rakendanud, printf. Kes tahaks väita, et on rakendatud, printf? Kui me võib? Hea küll, mis su nimi on? STUDENT 1: [? Copal. ?] DAVID J Humala: Copal, tule üles. Tule üles. Hästi. Nii et meil on siin, nimesilte, sest teeme natuke mängu see. Ja me teile helistada, printf. Ja kui sa tahad tule siia, ma olen lihtsalt ekraanile joonistada, see on lihtsalt, seal on mul see. Olgu, nii, hello my name is, printf, kui soovid siis pane see. Hästi. Ja kui sa ei saa minna seista arvuti ekraanil nagu sa on funktsioon, mis tuli selle arvutisüsteemi. Ja teie eesmärk elus on tegelikult printida midagi. Aga palju nagu programmis me oli just ekraanile, siin, me ei kavatse olla tegelikult annab teile mõned sisend. Ja nii, kui minu panus, siin on ilmselt mida edastatakse printf, olgem mingi mõnitama ta üles niimoodi. Ma sõna otseses mõttes kirjutada paberile, "Tere, maailm," kurakriips N. Ja olema selge, mida Ma olen lihtsalt tõmmati selle paberile, näeb välja selline. Nii et kui ma saan selle programmi, ja seda kollane koodirida saab täita, see on nagu oleksin, tere programmi olen jagab mõned sisend off funktsioon, et keegi kirjutas. Ja kui sa, sõrmega, võiks tegelikult, sõrmega, juhtida ekraanil iganes see on teile on antud, mõju, lõpuks on täpselt näha, et ekraanil. Ja natuke nurgas asjas. Ja hea, me ei näe , uus liin, sel hetkel. Oleks vale teile selgesõnaliselt juhtida reavahetus. Aga kui me hoida kirjalikult sõnu ekraan, nad lõpuks alla seda. Nii suur tänu, kuid jääda siinkandis Üks hetk. Nüüd on vaja veel üht vabatahtlike, kui me võiks et läheb vaja, et mängida rolli of-- See on ainult inimesed orkester nüüd. Kuidas about-- OK. Siin samas. Tule üles. Mis su nimi on? STUDENT 2: [? Ivay. ?] DAVID J Humala: Vabandust? STUDENT 2: [? Ivay. ?] DAVID J Humala: Ethan, tule üles. No? Kas ma saan, et vale, isegi pärast ütles ta kaks korda? Tule üles. On raske kuulda siin. OKEI. Ja mul on kahju, mis su nimi on? STUDENT 2: [? Ivay. ?] [? DAVID J Humala: Ivay. ?] OKEI. Sest nüüd, kui sa seda ei tee meeles, te getString. STUDENT 2: nuppu OK. Cool. DAVID J Humala: Nii et kui soovid siin seista hetkeks, Võtame pilk pisut keerulisem programm, mis Nüüd on kolm rida koodi. Nii et meil on üks, oma nimi kasutades printf; kaks, kõne getString, järgneb loovutatakse muutuja nimega, string s, või nimetatakse s; ja siis teine ​​kõne, printf, kuid seekord kaks sisendit. Nii et me oleme juba teinud riigi Sinu nimi või pigem oleme juba teinud printf kõne. Nii et ma lähen kirjutada, oma nimi. Ja nii ma lähen edasi, printf, vaid hetk, on lihtsalt see. Nii et kui sa tahad minna ja teha seda ekraanil, mis on oma sisend nüüd. Hästi. Ja unustada string, on meil nüüd oma rida koodi siin. Nii, getString peame tegelikult helistada, getString. Nii et teie eesmärk elus on lihtsalt jalutada viidud orkester, kui sa saaksid, ja saada kellegi nime. Aga olgem teile midagi panna see. Kui soovite, minge käia ja saada string, saada kellegi nime, mis paberile, kui sa saaksid. Hästi. Ja me näeme, on hetk, kelle nime me saada. Vahepeal ma lähen on valmis, on tühjalt paberi, kus ma lähen salvestada mida iganes väärtus on on, et getString on tagasi mind, I, olles string muutuja nimega, s. Hästi. Nii et mida sa siin on? Nik. Hästi. Nii et meil on Nik nimi siin. Nii et see on see, mis sõna otseses mõttes on tagastatud mulle, kui nii võib öelda, mida getString. Ma nüüd, lähen täita vasakpoolne selle väljendi, kus ma lihtsalt kirjutage, tänapäeva eesmärkidel, Nik. Nüüd on mul muutuja nimetatakse, s, ladustamiseks Nik nime. Olen juba üle antud printf, eelmine argument. Aga meie kolmas ja viimane rida kood, ma tegelikult on aga printf midagi natuke erinevalt-- "Tere,% s," kurakriips n. Ja nii viimane ma lähen to send-- viimane asi, mida ma olen läheb üles kirjutada nüüd on see. Nii et kaks rida koodi, või pigem viimane rida koodi, nõuab kahe inputs-- ühe selles, ja kaks, see. Nii et kui meie printf funktsiooni võib nüüd neid sisendina, andke mulle selge ekraan teile. Tegelikult ei ole, võite minna. Me jätan ta üles, kuna see on sama programmi. Peaksime nägema, hello, Nik. Hästi. Nii et see oli üsna vähe kõvadele hüpata kaudu, vaid kirjutada, riik oma Nime, ja tere, Nik. Aga see lihtne idee sõnum möödaminnes, sisend möödaminnes ja väljundi vastu võtta, on täpselt mudeli me lähed on isegi kõige keerulisemaid ülesandeid. Nii tänan sind nii palju, et sa nii. Meil on armas stress pall siin teie jaoks. Ja aitäh meie getString ja printf vabatahtlike jaoks. Aitäh. Hästi. Aitäh teile mõlemale. Nii et me oleme rääkinud Seni, enamasti umbes stringid. Ja selgub, et C võib tegelikult mõista paar erinevat tüüpi andmeid. Tegelikult võtame pilk nende siin. Nii C, ja palju keeli, mõista asju nimetatakse tähemärki. Süsi on üldiselt ühebaidise või kaheksa bitti. Ja see on üks sümbol, nagu täht A või kapitali täht A või väiketäht A või hüüumärk, või märk, mis saab sisestada kohta klaviatuuril, ja mõnikord isegi rohkem. Meil on ka juhtuda, et näha ujub. Ujuk on asjaolu, et üldjuhul 32-bitine väärtus, või nelja baiti sest jälle üks bait on kaheksa bitti. Nii float on Murdarv, midagi koma. Ja tõepoolest, see, mida Filmi rääkis millal nad rääkisid ujuvad punkti väärtusi, teatud fikseeritud bittide arv kasutatakse kujuta endast tegelikku arvu. Aga seal on ka asju, mida nimetatakse kahekordistub. Need on olemas Java, Kui olete võtnud APCS, ja topelt, nagu nimigi õnneks ütleb, on kaks korda nii suur kui sularahaga. See on ikka päris mitmeid, see lihtsalt on rohkem bitte kellega oleks veelgi täpsem, või salvestada veelgi suurem hulk. int on lihtne. Me rääkisime, et viimast korda. See on lihtsalt täisarv. Ja see on üldiselt 32 bitti või neli baiti. Ja nii, kui teil on, vaatame nüüd, 32 bits-- ja me tegime seda nädalal 0, kunagi nii briefly-- kui teil on 32 bitti, mis on suurim number, mida võib tähistada kui täisarv? Anda või võtta? See on nagu 4 miljardit, ja see on ainult siis, kui me oleme esindavad positiivset numbreid. Kui teil on 32 bitti ja soovid esindavad negatiivsete numbrite samuti, Sinu valikus on sisuliselt negatiivne 2 miljardit positiivset 2 miljardit. Aga üldiselt, hakkame 0 minna kuni 4 miljardit eurot. Sa ei pea teadma täpselt, kuid Me näeme seda, tegelikult, kui ma avada veidi kalkulaator siin. Ma suudan 2 32 ja see on täpselt, kui suur, mitu väärtust saab esindada, 32 bitti. Ja see on umbes 4 miljardit. Nii hoiame nähes, et number paari erinevaid kohti. Aga kui teil on vaja enam numbreid kui, Selgub seal on midagi, mida nimetatakse pika pikk. Ja pikk pikk on üldiselt 64 bitti, mis tähendab see suurusjärgus isegi suurem kui int. Nii et ma ei saa isegi hääldada suurim number, mida saab esindada, kuid see on tunduvalt suurem. Nüüd kui kõrvale ajalooliselt kui int on 32 bitti, ja pikk pikk on 64 bitti, kuidas suur on pikk, ei ole pikka? Sa arvad, et see on pikem kui int aga võibolla vähem pikk kui pikk pikk, kuid tegelikult sõltub. Ja nii selgub üks pettumusi ka kirjutamiseni kood teatud süsteemid, on see, et mitte kõik need andmetüübid on ette määratud väärtustest. Mõnikord on see palju bitti. Mõnikord on, et paljud bitti. Nii et sa tegelikult teada, mõnikord, millist riistvara näed oma tarkvara. Õnneks teistes keeltes ja muude andmete tüüpi, et nüüd on olemas, võimaldab teil olema täpsem. Noh, me nägime string, ja me nägime bool Ka Selgub aga need tulevad ainult CS50 raamatukogu. Nii et need ei ehitata arvesse C. Need asemel, tulla, et fail nimega CS50.h, võime me lõpuks Tõmmake kihti. Aga nüüd on nad lihtsalt täiendavate andmete liigid. Bool on õige või vale, ja string on märgijada, nagu sõna. Nüüd printf, me oleme näinud, on kohatäitjaid,% s on üks. Ja sa võiksid, et nüüd, järeldavad need teised näited, kuidas sa oleks võinud kohatäide Eri andmetüüpide jaoks. Näiteks võtta vist, kui te tahtsin välja trükkida ühe char kasutades printf, kohatäide on ilmselt% c. Ja kui sa tahad välja printida täisarv kohatäide,% i. % lld on pikka arvulises väärtuses, kuid pikk pikk, nii et kaardid sellele. Ja siis% f ujuva Punkti väärtus või topelt, nii et mõnikord nad uuesti kasutada erinevates kontekstides. Nii me näeme ja kasutame mõned neist aja jooksul. Ja printf ja muid funktsioone ka toetust teiste käsukoode, ja mõnikord on need vajalikud. Nii kurakriips n on uus liin. Längkriipsu t, kas keegi tahan võtke torkehaav? Pealtvaatajal: Tab. DAVID J Humala: Tab. Nii et kui sa tegelikult tahad välja trükkida tab, ei kindla arvu ruumid, kuid tegelik tabeldusmärgiga, sa ei tabanud oma, tab, klaviatuuril üldiselt seda tegelikult kurakriips t. Längkriipsu jutumärke, miks ma kunagi tahad seda? Õigus? Miks ma ei saa lihtsalt kirjutada topeltjutumärkide minu klaviatuuri? Pealtvaatajal: Sest muidu, see on läheb meelest on see lõpuni of meeldib oma print [? teksti. ?] DAVID J Humala: Täpselt. Pea meeles, et meie printf näiteid, kui me olid möödaminnes printf in sisend, vasakul, et sisend string ja õigust selle sisendi Kevadel oli muidugi jutumärke. Kui oma sisend on kahekordne quote keskel, et arvuti võib tulevikus Segaduse, et, teeb seda topeltjutumärkide kuuluvad keskel? Kas see kuulub vasaku üks? Kas see kuulub koos õige? Ja nii, kui sa tahad teha seda super selge, sa kurakriips jutumärke, nii et see on pääsenud, nii et rääkida, ja see ei ole conflated midagi muud. Ja seal on mõned teised siin, kurakriips r, ülakoma, 0, et me näeksime aja jooksul samuti. Ja nüüd, kuidas toimib? Nii meetmed, et me saame võtta seni selles keeles, C, noh, me oleme näinud, printf, muidugi, ja kõik teistega ekraanil, siin, et me kasutame jaoks Muidugi esimene paar nädalat ainult, tule kui CS50 raamatukogu. Ja nad teevad seda palju kergemaks, C, tegelikult saada kasutaja sisend. Selgub, et C ja ausalt öeldes mõned keeled, see on tõeline valu kaela tegema midagi lihtsat, nagu kiire kasutajale klaviatuuri, et tema panus. Ja nii need funktsioonid lihtsustavad. Ja see on ka viga kontrollida kogu, nii, et kui te mäletate kolmapäeval, me nägin, uuesti, hoiatus, kui ma ei teinud koostööd, ja ma kirjutada sõna, selle asemel, et number? Oleme teinud rasket tööd varakult kohta, veendumaks, et kasutaja teeb. Aga need on vaid koolitus rattad, et me lõpuks ja kiiresti startida. Nii et veel kord, siis, Võtame pilgu, palju nagu tegime Scratch kell mõned kanooniline konstruktsioone C. See on mõeldud, justkui kohta, olla keeristorm tour, just nii, et teil on viide ja et sa oled näinud asju alguses. Aga siis me vaatame tegelikku kodeerimine kasutada mõnda neist ehituskivid. Nii palju nagu Scratch, kui olime avaldused meeldi, öelda või, oodake, C, meil ei ole toimib hästi, nagu printf. Kui me tahame, väljendada seisund C, see on sarnane, vaimus, sellele puzzle tükk, mis tundus see Scratch. Kuid selle asemel, me sõna otseses mõttes lihtsalt kirjutada, kui. Ja siis, sulgudes paneme seisukorras, kui see tingimus on see, mida me tulen helistada jällegi loogiline väljendus. Ja jällegi, see on omamoodi pseudokoodi. Ja tegelikult // on kommentaar. See on lihtsalt inglise sõnad ise. Aga see on üldine struktuuri, kui tingimus. Aga me näeme konkreetset näiteid hetk. Kui sa tahad olla kahesuunaline teelahkmele, palju nagu tegime meie vabatahtlike kohta Kolmapäev, sul võib olla, muidu kui. Ja kui sa tahad olla kolmas ja lõplik seisund, või vaikimisi olukord, sul võib olla lihtsalt teine ​​plokk, seal. Ja samamoodi on boolean väljendeid, saad, ja neid koos. Ja me nägime kolmapäeval, et see ei ole ühe ampersand, see on kaks, madalama taseme põhjused, mis me lõpuks näha ja mängida. Või-se asjad kokku on 2 vertikaalne baarid. USA klaviatuuri korral, seda Üldiselt on oluline Shift klahv eespool Sinu Enter või Return. Siis on need asjad, mis me kasutame võibolla üks või kaks korda. Nad on funktsionaalselt samaväärne mida saate teha koos, kui muidu, kui muidu kui teine, ehitada, kuid nad nimetatakse lüliti. Nad näevad väga erinevad, kuid me vaata mõned meie jaotus koodi Tuleviku probleem komplekti, tõenäoliselt et see on mõnikord lihtsalt ilusam väljendamise viise terviku kamp tingimused, ilma palju looksulg ja palju sulgudes ja taandus. Aga nad annavad meile enam energiat kui meil juba. Ja nüüd silmad. Ja see, et me vaatame at natuke aeglasemalt. Aga siis, hakkame neid kasutada, eriti neile juba tuttav. See on kanooniline viis, kui uskumatult kauge tee, et kirjutada loop C. Nüüd silmus Scratch oli üsna lihtne. Sul on igavesti, plokk. Sul on korrake, plokk lihtsalt number pead sisestama. Ja, silmus, saate rakendada nii neid ideid, kuid see on natuke rohkem tehnilist. Aga ausalt öeldes, see on ka suhteliselt lihtne. Kui tead järjekorras toiminguid, siis sõna otseses mõttes lihtsalt läheb pistik väärtused ja ütleb arvuti, mida teha. Nii et siin on näide. See on silmus, mis üsna lihtsalt, loeb ühest number üles läbi teise. Ja just põrkav seda isegi siis, kui teil on no eelnev kogemus Selles keeles, mida number see ilmselt lugemise alustamiseks on? OK, 0. Ja ma usun, et on, sest sa näha, et seal on int ja i, mis on muutuv. See on vormindatud 0. Ja hiljem, tundub, me möödaminnes printf, väärtus. Ja tegelikult, ma tegin natuke kirjaviga siin. Aga see lihtsalt fikseeritud. Lubage mul lisada, i siin. Meil on nüüd printf olend edasi, et kohatäide väärtus. Ja mis toimub lugema üles läbi? Sihtrühm: 50. 50. 49. DAVID J Humala: 49. Nii 50, esmapilgul tundub õige. Aga selgub, saab olema Meie tingimus, et me hoida kontrolli. Ja me ei kavatse lõpetada, kui i ei ole enam alla 50. Nii et see silmus, vastupidi, peaks täita, niikaua kui i on väiksem kui 50. Aga niipea, kui see muutub 50 või 51, või veel hullem, see peaks automaatselt lõppema. Hästi. Mis tegelikult juhtub siin? Nii et see on järjekorras operatsioonide silmus. Üks on teil Niinimetatud ettekanne. See kollane rõhutas patakas kood käivitatakse esimene, ja see tähendab seda, et kohta Kolmapäev, sa ilmselt ette kujutada. See loob muutuja nimega i ja kauplust, et muutuja väärtus 0. Nii et ma ei 0 siinkohal lugu. Järgmine asi, mis juhtub selles konstruktsioonis on, et tingimus saab kontrollida. Nii et ma kohe kontrollida, on i alla 50? Ja muidugi vastus nüüd on kindlasti, jah. Jah, sest ma on 0 ja see on kindlasti väiksem kui 50. Mis siis juhtub, on see, et koodirida saab täide. Ja tegelikult, kas seal on mitu rida koodi need looksulg, nad kõik saavad hukati üksteise järel. Ja mõju siin, on ilmselt välja trükkida arvu i, mis läheb 0 ja seejärel 1 ja seejärel 2. Aga miks? Miks see saada suurendatakse? Noh, neljas asi, mis juhtub see, et seda süntaksit saab teostada pärast semikooloniga. i ++ on stenografisti viis öelda; võtab väärtuse i ja lisada 1 osas; ja siis järgmise korraga lisada 1 kuni ta; ja järgmine kord ümber, lisage 1 ta. Nii et kui meie läheme, Mis juhtub Järgmine on Ma ei kavatse initsialiseerida i kunagi. Kui ma hoida initializing i 0, selles näites oleks kunagi lõpuni, sest i oleks ummikus 0. Aga mis juhtub on et tingimus tuleb kontrollida, koodirida saavad täidetud, i saab suureneb, tingimus tuleb kontrollida, kood saavad täide. Ja see hoitakse jalgrattasõit jälle, ja uuesti ja uuesti, kuni i ++ tekitab väärtus 50. Seisund siis ütleb, 50 alla 50? Vastus on muidugi, ei ole, ja nii et kogu kood lõpetab täidesaatva. Ja kui sul on rohkem kood ekraanil allapoole, et see, mis juhtub järgmisena. Hüppab välja need looksulg ja jätkab printimist enam pärast seda. Nii nali nüüd, alates fokstrott, et Teil võib-olla nüüd aru. See on alati naljakas. See on nagu chuckles Selline imbuks, ja siis sa mõistad, siis ei tohi olla naersid huumor niimoodi. Aga seal on mõned Buffee siin, pedagoogiliselt ka. Nii selgub, et ma olen puudu tükk süntaks, või fokstrott on kadunud tükk süntaks siin. Puudu et oleme olnud igal teisel näiteks siiani? Tagasi, on olemas, nii et see on midagi muud, et me tuleme tagasi enne pikk. Puudu küll? Jah. Pealtvaatajal: initsialiseerimise [kuuldamatu]. DAVID J Humala: OK. Nii et jah. Seega tegelikult see on-- Noh, ja loota käivitub ülevalt, või õigemini, kuulutati välja eespool. Nii et see on üks võimalus seda teha. Aga mitte ühele joonele see kehtib küll. Kuidas siin? Pealtvaatajal: Kas lokkis traksid? DAVID J Humala: Jah. Nii looksulg puuduvad. Aga see kood, ma mõtlen, et nende krediidi, tegelikult, süntaktiliselt kehtivaks. Selgub, sa ei vaja looksulg Kui teil on ainult üks koodirida, et sa soovid sees silmus. Nüüd on meil alati, klassi ja kõik meie jaotus koodi sisaldama looksulg niikuinii, lihtsalt selguse huvides. Aga mõistan, et õpikutes ja veebinäiteid, siis võib väga hästi näha, lokkis traksid puudu millalgi. Ja see on OK, kui see, mida sa on liigestatud ja eesmärk on ainult üks rida koodi, mitte mitu rida koodi, potentsiaalselt. Hästi. Nii seotud küsimus ebatäpsuse, on küsimus ülevoolu, selles mõttes, et sarnaselt ei täisarvud on piirid neile nagu ujukoma väärtused? Maailmas ujukoma väärtusi, saame olla ainult nii täpne, misjärel, mõnikord halbu asju võib juhtuda, ja meie programmid võivad olla vigased ning viga. Nüüd isegi täisarvud, võite tekib probleeme. Nüüd täisarv ei ole koma või numbrid pärast seda. See on lihtsalt loomulik number, tavaliselt. Mis võiks minna valesti int? Kui ma kasutan int kuni arvu, mis võiks valesti minna? Tundub palju lihtsam. Jah. Pealtvaatajal: Kui number saab [kuuldamatu] DAVID J Humala: Jah. Mis siis, kui loete nii kõrge, et sa ei suuda väljendada, et tõesti suur number. Õigus? Mingil hetkel, sa lähed ületada piire 32-bitine väärtus või 64-bitine väärtus. Nüüd jälle, ma ei ole kindel, kuidas hääldada 64-bitine väärtus, aga ma tean, kus on 32-bitine täisarv, suurim väärtus võib olla, kas see on ainult positiivne väärtused, on umbes 4 miljardit. Nii et kui ma püüan loota, et 5 miljardit, midagi juhtub. Aga vaatame, mis tegelikult võib juhtuda. Tänapäeva maailmas täisarv ülevoolu, kus sa mõnes mõttes, ülevoolu andekuse täisarv, mis võib juhtuda? Nii et siin on binaarne number, see on Sarnasusi 0. See kõik on 1 s ja kohatäitjaid seal on volitused 2, nii et see on binaarne. Nii et need on 8, 1 bitti ekraanil. Ja kui te mäletate või teil kiiresti teha matemaatika, Mis väärtus on esindatud siin need kaheksa 1 bitti? 255. Ja isegi kui sa ei ole päris kindel, Math, mida võiks teha seda läbi. Või võite lihtsalt selline mõistuse läbi, oota üks hetk, kui ma olen mis tähendab 8-bitine väärtus, ja mul on 256 võimalikku väärtust, kuid millest esimene on 0, Ma lihtsalt tean, et Suurim läheb 255, ja see ongi see võiks olla. Nii arvan ma püüan lisada 1 selle väärtust. Mida sa teeksid klassis Kooli lisamisel 1, ja see tegelikult ei sobi, sest sa pead kandma 1? Mis on see number läheb saada, kui lisate 1? See saab muutuda 0. Õigus? Sest kui sul oleks rohkem bits-- ja ma proovida, selline, kirjuta see välja siin-- kui meil oleks rohkem bitte, mida me võiks teha siin on lisada 1 ja siis me tahaks saada seda. Oih. Tahame olla 1 bit kogu tee siia. Aga kui see on piiratud väärtus, see on ainult 8 bitti, ja mis on ette määratud arvutikasutaja poolt, et 1 on tõhusalt ole olemas. See lihtsalt selline kukub kaljult. Ja kui sa lisatakse 1 255, mida väärtust sa ilmselt saan? 0. Ja nii numbreid kogemata, ja võib-olla tahtmatult lõpuks ümbriste ümber niimoodi. Mis võib olla tagajärjeks see on? Noh, seal on mõned erinevad asjad. Nii et üks, see lõpuks otsin nagu 0, tahtmatult, kuid võite sellist näha, isegi reaalses maailmas, paremaks või halvemaks, ilminguid selle idee piiri. Näiteks keegi teist, kes kunagi mänginud Lego Star Wars, Kas keegi juhtub teadma maksimaalne arv münte saate koguda Lego Star Wars? Võtke vist põhineb Tänapäeva juhtivad küsimused. See on suurem kui 256 või 255. See on 4 miljardit. Nii selgub, ja seal on mõned people-- mõned googling kinnitas eelmisel night-- on saanud 4 miljardit kuldmünte, või tühi-tähi, Lego Star Wars. Kuigi ilmselt pole viisil petta mängu, seal on bug või funktsioon, mis võimaldab teil lihtsalt koguneb palju, palju punkte. Aga suurima võimaliku hinna järgi Selle ekraanipildi keegi mul leida online, on tõepoolest 4 miljardit. Nüüd, miks see nii on? See on täpselt 4 miljardit, Ilmselt sellepärast, et keegi otsustas, kes kirjutas seda mängu, et nad võiksid teha 4 miljardit, midagi, midagi, midagi, nagu väärtus panin üles koos kalkulaatoriga varem, kuid see on lihtsalt veidi puhtam inimestele öelda maksimaalset arvu of coins-- või naastud, nagu nad kutsuvad them-- et sa koguda on 4 miljardit. Ja nii, miks see nii on? Kuidas on LEGO mängu rakendamise counter mis hoiab silma peal müntide arv teil on? Nad kasutavad mida? Pealtvaatajal: See lõpetab lugedes pärast 4 miljardit. DAVID J Humala: See lõpetab lugedes peale 4 miljardit mis tähendab, et saate järeldada, programmeerija, et nad ilmselt kasutades 32-bitine täisarv. Nagu programmeerija sõna otseses mõttes lihtsalt trükitud, int, tema koodi, ja see on tüüpi muutuja, mis nad kasutavad salvestada kellegi koodi. Nii et teiste ilmingud taoliste piirides. Nii et ma ei ole mänginud seda MÄNG_ ja ma lugesin üles ajaloo veendumaks much-- kuid originaalversiooni Civilization, kus sa ilmselt suhtlevad omavahel teiste ja võib sõda või rahu, Gandhi pidi olema üks kõige rahulikum märki, kui ma aru, esimeses versioon tsivilisatsiooni. Ja tegelikult skaalal 1 kuni 10, tema agressiivsus oli vaid 1. Nii kunagi nii kergelt agressiivne, ilmselt. Aga mingil hetkel, saate ilmselt paigaldada demokraatia oma geograafia. Ja kui sa paigaldada demokraatia oma versiooni mängu, siis oma agressiooni tase langeb. See on hea asi. Inimesed on vaikne ilmselt selles olukorras. Aga ilmselt keegi tegi ole, kui tingimus esialgse versiooni koodi. Nii Gandhi agressiooni tase langes positiivne 1, miinus 2, negatiivne 1, kuid mäng ei mõista negatiivseid numbreid. Mis juhtus oli see Gandhi agressioon tase langes 1, 0, negatiivne 1, mis oli toime ümbriste ümber on Kõige raskemas iseloomu mängus, väärtuses 255, skaalal 1 kuni 10. Ja sellest ajast saadik on olnud rohkem kehastused Selle mängu ja nad pidasin seda omamoodi lihavõttemuna, et Gandhi on ilmselt nii kohutavalt agressiivne. Aga see oli tingitud väga lihtne programmeerimine viga et väga varajane versioon mäng. Nüüd enam häirivalt rohkem Viimasel ajal on Boeing 787 dokumenteeriti kellel on viga, ei ole selline seade mis sulle taha olla viga. Ja sümptomid, mis ma lugenud Siin on artikkel, online, oli see, mudel 787 lennukiga mis on powered pidevalt eest 248 päeva võid kaotada kõik vahelduvvool, AC, elektrivoolu tõttu generaatori juhtseadmed, GCUs, samaaegselt laskumist Fail-safe mode. Nii et see oli antud hoiatus Kui see probleem avastati. Haigust põhjustab poolt tarkvara counter, sisesed GCUs, nii täisarv või muutuv, mis ülevoolu pärast 248 päeva kestev väljundvõimsus. Boeing on protsessis arendada GCU tarkvara uuendada, et lahendab ohuolukord. Nii palju nagu rakett stsenaariumi, milles neil oli mingi muutuja et lootis, ja lugedes, ja lugedes, kuid tasapisi täis piirid oma võimete Samamoodi tegid kuradi lennuk muudetava ülevoolu pärast piisavalt aega töötab. Ja nii mittetõsine viis töötamise Selle probleemi on tõesti, reboot, oma lennuk iga 247 päeva, nii, et mälu saab pühkida ja muutuva ulatub 0. Aga taipavad, et see on väga suur kehastus tarkvara kuid eriti kuuleme Apple'i operatsioonisüsteemide lähevad autod, ja ise sõidavad autodega Google ja mis tahes arvu kehastused tarkvara meie igapäevaelus, TVs ja kellad, ja rohkem, aru, oli ümbritsetud tarkvara mis kõik on kirjutatud meile inimestele. Ja nagu me kõik varsti avastad, see on väga lihtne ja väga tüüpiline teha vigu, kui kirjutamise tarkvara. Ja kui sa ei saagi neid, halbu asju võib juhtuda. Nüüd mõnikord mõned naljakaid asju võib juhtuda, või vähemalt mõnikord me tean, et oodata mõned kurjus. Nii 0 jagatuna 0, st hinne koolis, on üldiselt halb. See on määratlemata. Ja selgub out-- ja vaatame, kui minu mic saab valida seda up-- et Apple olid mõned lõbus seda hiljuti. Nii et mul on iPhone siin. Ma lähen rääkida Siri ja küsida temalt mulle vastus 0 jagatuna 0. Milleks 0 jagatuna 0? SIRI: Kujuta ette, et sul on 0 küpsised ja jagate neid ühtlaselt hulgast 0 sõpra. Mitu küpsiste iga inimene saada? Vaata? See ei ole loogiline. Ja Cookie Monster on kurb et ei ole küpsised. Ja sa oled kurb, et sa ei ole sõpru. DAVID J Humala: See on selline ebameeldiv. Nii et see on see, mida just ütlesin seal. See on ebamäärane, see ei ole määratletud, ja tõepoolest, palju programmeerimiskeeli või tõesti, koostajad hakkab avastada, kui teie programmis, proovida jagada 0 0. Lõbusam kui see aga on et ilmselt Cookie Monster on Twitter nendel päevadel. Ja ta vastas sellele, kellel seda, mis on täiesti jumalik. Aga võtame pilgu paar muud konstruktsioonid, ja siis panen selle koodi kasutada, heas viise. Nii selgub lisaks jaoks silmuseid, seal on midagi, mida nimetatakse samas loop, et näeb välja teistsugune ja rakendatakse natuke differently-- ja me lõpuks näha examples-- kuid mõnes mõttes, See on lihtsam, sest see ei lase sul initsialiseerida ja uuendada jooksul piiri loop. Saate siiski seda rakendada. Nii saab teha täpselt samu asju koos samas silmus, nagu jaoks silmus, kuid oma süntaks, ultimately-- kui jagame lõpuks see-- saab olema erinev. Seal on isegi teha, kui silmus, mis on tegelikult natuke erinev, et arvestades, et loop ja samas loop alati kontrollida oma seisundit esimene, kui Lugedes seda asja ülevalt alla, see selline välja näeb see läheb vaadake seda seisundit viimase, sest see on Tõeliselt viimase rida koodi. Ja tõepoolest, et see saab olema kasulik teatud programmid, mis me kirjutame, kui tahad lihtsalt pimesi midagi ja lõpuks seisundi kontrollimiseks. See ei ole tingimata halb asi. Kui me tahame, muutujad, mida me teha saame see paar erinevalt. Ja me nägime fokstrott koomiks, üks viis seda teha, kus sa kuulutada oma muutuja, nagu int counter semikooloniga ja siis later-- võibolla järgmine line, võibolla 10 rida later-- sa tegelikult initsialiseerida ta. Nii et need 2 rida koodi Kinnitan tüüpi muutuja int ja nimetame seda counter, nii et see annab mulle piisavalt bitti korraldada int. Ja siis lõpuks, see paneb väärtus 0 arvesse, et muutuvat. See korraldab 0 s ja 1 s on muster, et me teame, eelmisel nädalal, tähistab number teame kui 0. Või ausalt, seda saab teha palju rohkem tabavalt, just niimoodi. Nüüd on meil ka võime helistada funktsioone. Ja tegelikult, siin on 2 rida programmi või väljavõte sellest, mis võimaldab meil tegelikult kirjutada mingi kood, mis saab stringi user-- palju nagu meie vabatahtlike hetk ago-- salvestades tulemus muutuja nimega nime, ja then-- meelega meie vabatahtlike koos printf-- trükib need väärtused läbides kaks argumenti, siis string, millele järgneb muutuja nimetatakse, nimi, ise. Võtame pilk, enne me tuleme tagasi Mario seal, at paar nüüd, näited. Ma lähen edasi minna ja avatud up, oletame, funktsioon-0.c. Ja nagu alati, see kood on kättesaadavad käigus kodulehel nii et saate mängida koos kell Kodu ja vaadata seda hiljem. Aga siin on programm see on Sisuliselt on line 17 kuni 22. Põhiprogrammi on koht, kus Programm on alati saab alustada. See programm, ilmselt läheb välja printida oma nimi, koolon. See on siis läheb kõne getString, nagu tegime meie vabatahtlikud. Ja siis see on huvitav, see saab helistada PrintName. Selgub, kõik see aeg, et Tundub, et funktsioon nimega PrintName. See prindib kellegi nime. Me ei pea kasutama printf alates Läinud, seal on PrintName. Aga see on eksitav sest PrintName ei tulla C. inimesed ei leiutada see umbes 40 või 50 aastat tagasi, Ma tegin selle asemel. Ja tegelikult, kui ma liikuda sätestatakse täiendavad, teate kuidas ma saan kirjutada oma funktsioonid C. Saadame lõpuks miks me ütleme, void, paaris kohas, kuid täna, olgem lihtsalt pilk nimi. On line 24, kui soovite luua oma funktsiooni, sa sõna otseses mõttes kirjutada funktsiooni nimi. Valisin PrintName. Sulgudes, siis siis täpsustada, milliseid sisendite ja kui palju sa tahan seda funktsiooni kasutada. Sel juhul ma tahan võtta 1 muutuja nimega, nimi, ja see saab olema tüübist, jada, nii see läheb olema mingi tähemärkide jada. Ja siis see program-- palju nagu Scratch, sul võib olla kohandatud puzzle pieces-- läheb on see komme käitumist. See saab helistada printf möödaminnes, hello, kohatäide, ja siis läheb pistik mis tahes kasutaja nimega. Nii et see on näide sellest, mida arvuti teadlane oleks kõne võtmiseks või funktsionaalsete lagunemine, mis on vaid fancy viise saying-- Kas siis, kui teile meeldib see suur idee, nagu ma tahan funktsionaalsus, mis prindib kellegi nime, absoluutselt sa võib sõna otseses mõttes kirjutada printf ja seejärel pass argumendid soovite, ja programm töötab, nagu ta on, sest kolmapäeval. Aga te võite abstraktne ära mõiste printimise nimi. Võite anda talle nimi, nagu PrintName ja selle on see idee kihilisus nädalast 0. Edaspidi ma ja sa ei pea teadma või hooli, kuidas PrintName rakendatakse. Jah, see kasutab printf, äkki see ei, kes teab, mida kasutab? Keda huvitab? Nüüd ma räägin siin, selle asemel, et siin. Ja tõepoolest, nagu meie programme saada rohkem arenenud ja keerukas, me ei kavatse hoida võttes iseenesestmõistetavana Madalama astme puzzle tükki olemas. Kuna me kirjutasime neid või keegi teine ​​tegi nii et siis saame ehitada peal neid. Võtame pilk selle variant, toimivad ühe. Nii et see üks on natuke rohkem arenenud, kuid selgub, et CS50 raamatukogu, seal on ainult GetInt funktsiooni. Me ei usu, aastaid tagasi, et rakendada GetPositiveInt funktsiooni. Ja see on natuke tüütu, sest kui kutid kirjutamise programm, kus soovite saada positiivne täisarv kasutaja, saab absoluutselt kasutada GetInt. Ja sa võid absoluutselt kontrollida seisundi ja võibolla loop kui see int on suurem kui 0 ja kisa kasutaja kui ta ei anna Teile positiivne arv. Aga olgem ehitada Ehituskivid ise, a, custom Scratch tükk, kui soovite. Ma lähen programmi siin et lõpuks ma tahad olla võimalik helistada GetPositiveInt, ja ma tahan olla võimalik välja trükkida mida iganes, et int on. Aga see on ammutatud ära nüüd. See on lihtsalt antud kõrge nimi, mis ütleb, mida ta teeb, mis on suurepärane, sest see on väga intuitiivne nüüd lugeda. Ja kui ma huvita, mida on all kapuuts, lase mind keri. Ja see on natuke hirmutav Esimesel, eriti Kui see on Sinu esimene programm, kuid olgem heita. Ma enam ei öelda, tühine, sest selgub funktsioone, meelega getString, saab tagastab väärtuse mulle. Nad ei ole lihtsalt printida ekraanil, nad saavad tegelikult kätte mulle midagi tagasi. Ja arvestades, et enne PrintName, Ma ei pea midagi tagasi. Mul oli vaja kõrvaltoime midagi ilmumise ekraanile, kuid ma ei pea inimene anda mulle midagi tagasi. Siin, kus GetPositiveInt, Nagu GetInt, Ma tahan, et antakse midagi tagasi. Nii ma räägin ei ole, tühine, real 23, kuid int, mis ütleb, see funktsioon et ma kirjutan, nimetatakse GetPositiveInt läheb anda mulle tagasi täisarv, mitte midagi, ei tühine. Vahepeal, see läheb ei võta sisendeid, nii et ma olen, selline, pöördus ta. Ma ei anna GetPositiveInt tahes sisend, ma tahan, et see annab mulle oma toodangut. Ja mis siis juhtub nüüd? Nii et siin on, kuidas ma saan kuulutada muutuja. Ma olen seda teinud väljaspool loop, põhjustel me lõpuks näha, aga see lihtsalt annab mulle 32 bitti nimetatakse, n, Ja ma olen eelnevalt kindlaks neid säilitada täisarv. Ja siin, et teha samal ajal ehitada, ja see on põhjus, miks see on kasulik. Sõna-sõnalt seda, samas n on väiksem kui 1. Vaatame, mis juhtub. Ma välja printida, siis mulle positiivse int. Siis ma saan int, kasutades CS50 on toimida ja salvestatud n. Ja siis, mida koodirida ilmselt saab teostada järgmise loogiliselt? Milline line number? Jah, nii 31. Sa ei tea seda enne, kui olete öeldud või mingi järeldada seda, kuid see on tõsi. See läheb ülevalt alla ja siis aina kordab. Nii et kui ma pannud, ütleme, number negatiivseid 1, on n vähem kui negatiivseid 1? Jah. Kuna negatiivse 1 on väiksem kui 1. Mis peaks juhtuma? Ma lähen tegema seda samas n on väiksem kui 1, nii et ma lähen tagasi line 28. Ja iga AEG_ ja olgem joosta see-- Funktsiooni 1 kompileerida, ja nüüd dot kaldkriips funktsiooni 1. Kui ma kirjutada negatiivne 1, see on läheb hoida karjuma mind kuni ma tegema, sest iga minu sisendid on väiksem kui 1 ja kui see on samas väiksem kui 1, Ma lähen, et hoida seda tegema. Kui ma lõpuks, et see on number nagu 50, õnneks ta ütleb, aitäh 50. Miks? Kuna kiiresti n ei ole väiksem kui 1 Ma lõpetate jäädagi see silmus, ja see uus märksõna täna Vastutasuks sõna otseses mõttes ei tee seda. Nii et ma olen lihtsalt ellu, on mõttes samaväärne getString, kus ma jagab tagasi kes kasutab mind, mingi väärtus. See ei pea olema string, see on int. Nii lihtne, kiire Näiteks, aga me varsti vaata mõned keerukamad versioone veel. Tegelikult võtame pilk numbriline üks, mida nimetatakse return.c. Ja see on tegelikult vähe lihtsam. Nii et see Programmi eesmärk on life-- olgem koostada ja kasutada seda, nii et tagasipöördumine, dot slash, return-- teate programmi lihtsalt kuubikuteks väärtus 2. See on päris loll, see on raske kood, see ei võta mingeid sisendeid, kuid see ei näidata teise funktsiooni, et olen kirjutanud ise. Nii et siin ma olen kuulutanud muutuja, mida nimetatakse x, tüüpi int, võrdne arv 2, täiesti meelevaldne. See on vaid mõned kohev trükkimine. Ta ütleb, x on nüüd selline ja selline, cubing dot dot dot. Ja maagia on ilmselt line 21. Ma helistan funktsioon nimega, kuup, Ma jagab ta paberilehe arvuga 2 kirjutatud, ja mis väärtuses, matemaatiliselt, ma tahan saada välja? Just nagu meelerahu vaadata? 8. Õigus? Ma tahan 2 kuubis, tagasi, 2 võimsus 3, nii et 8 tagasi. Nii et kui on kuubik rakendada? Noh, pane seda on rakendatud siin. Ja nagu enne, loogiliselt, kuigi süntaks on ilmselt väga uus paljud teist, Ma tahan seda funktsiooni anda mulle tagasi lehte paberile int ta. Nii et mul on int, siis nimi on meelevaldselt, kuid mugavalt nimega kuup. Sisend see on n kirjuta täisarv, nii et see kuidas ma saan edasi arv 2 paberileht. Ja siis selgub, C toed matemaatika, nii et sa ei pea X jaoks korda, sa lihtsalt kasutada tärniga paljundamiseks. Ja see tagasi n korda n korda n, mis on lihtsalt kuubis väärtus. Nii et kui me tahame kogu seda? See on kindlasti keeristorm tour, kindel, et super lõigud ja probleem seatud 1, saate kõndinud kõik see veelgi. Ja probleem seatud 1, me üleminek alates graafilise maailma Scratch midagi enamat käsurea C. Aga me innustust sellest siin mängus alates Läinud, kus kasutades C ja standard väljaanne p komplekti saate rakendada Mario püramiidi. Ja häkker väljaanne p komplekti, kui sa nii valida, valib, siis ellu natuke rohkem väljakutset püramiidi kaks tippu. Samuti saate rakendada algoritm, ahne algoritm. Selgub, et tema mõned huvitavad loogika taga protsess töötab kassast jaama ja tegelikult jagab keegi tagasi muutus. Seal on algoritm, mis on üsna lihtne, et sa võiksid isegi haarata intuitiivselt, kui te esimest korda lugeda see-- aru, et see, mida ma olen alati teha igal ajal olen andnud keegi mõnda raha back-- mis võimaldab teil alati arvu vähendamiseks paberraha või metallist münte et sa Usaldades kasutaja. Ja see muidugi on kaalukad sest kui sa lähed CVS või tühi-tähi, sa ei taha olla käega terve hulk neist või terve hulk penni. Sa tahad kõige vähem münte ilmselt võimalik. Lõpuks, võite ka vaidlustada võõpama maailmas vett ja tegelikult saada tunnustust jaoks kaardistamise vahel voolukulu, ja meeldib, vee dušš, kui palju vett. Ja vihje selles, on see klipp siin mis me lõpeb eest vaid 60 sekundit, et maalib pildi madala voolu duši. [Video taasesitus] -Hästi. Ma sain siin kõik. Sain Cyclone F seeria Hydra, Jetflow, Stockholm Supersteam, siis nime. -Ja Mida te soovitate? -Mida sa otsid? Power mees. Võimsus. -Näiteks Silkwoodi. -See Eest kiirgust. -See On õige. -Now Mis see on? -See On Commando 450. Ma ei müü seda. -Aga See on, mida me tahame. See on komando 450. -Ei Usu mind. See on ainult kasutatud tsirkus. See on elevandid. -Ma Midagi maksma. -Mis Umbes Jerry? -Ta Ei suutnud seda. Ta on õrn. Oo jaa. [Taasesituse lõpetamiseks] DAVID J Humala: Okei. Ongi Kui CS50. Näeme järgmisel nädalal. SPEAKER 1: [? Scully?], [? Ian,?] niipalju kui see outro projekti, Mis on kutid tulla? SPEAKER 2: Noh, me oleme andnud see erinevaid mõte, ja me arvame, et parim viis mina-- SPEAKER 3: Kas ma tohin? SPEAKER 2: Jah. Kõigi vahenditega, tegelikult. SPEAKER 3: Ma arvan, saame kokku võtta meie idee jaoks outros ühe word-- midagi. DAVID J Humala: Nothing? SPEAKER 3: Mitte midagi. DAVID J Humala: Mida see tähendab? SPEAKER 3: outros on umbes midagi. SPEAKER 2: Noh, ma mõtlen, filosoofia, Ma mõtlen, et midagi on alati midagi. SPEAKER 1: Nii what's-- Milline on eeldus? SPEAKER 3: Nii et see on nagu elu. OKEI. Mida sa täna tegid? DAVID J Humala: ma tõusin, oli hommiku- ja asus tööle. SPEAKER 3: Ongi outro. SPEAKER 2: Aga ma mõtlen, ei tohiks midagi juhtub temaga the-- SPEAKER 3: Ei, ei, ei, ei. Midagi ei juhtu. SPEAKER 1: Miks me vaadates? SPEAKER 3: Kuna see on outro eest CS50. DAVID J Humala: Pole veel.