DAVID J Malan: Visos teisė, todėl tai yra CS50. Ir tai aiškiai penktadienį. Ir tai yra savaitės vienas galas. Taigi jums gali priminti, kad mes baigėte, Paskutinį kartą, su dvasia Įspūdingos filmą. Drauge mes atskleisti šį melą, kad nė Nesvarbu, ką jūs buvote mokomi auga iki 1 padalytą iš 10 nėra, į Faktas, 0.1 arba 0.100 arba 0,10000. Iš tiesų, jei mes kaupia šis programa, kaip mes padarėme vakar, su, kad paklaidos, o tada padaryti tašką, velniop, netikslumas, mes sužinojome, kad tai, kas 1, padalytą iš 10 iš tikrųjų yra. Taigi, kad tikrai ne visai tas atvejis. Bet tai nereiškia, užuominą į kai esminis apribojimas kompiuterius. Ir iš tiesų, tarp tai, ką mes ketiname daryti šiandien yra pažvelgti, kodėl tai turi išvaizdą atsitiko, kokį poveikį tai turi, kaip žmonija nesugebėjo suvokti tai kai labai rimtas situations-- nuo kurios rezultatas buvo gana tragiška ir expensive-- ir Pažvelgti, kaip mes žiūrime iš tiesų gali ginti prieš šių apribojimų rūšių. Taigi intuityviai, ko gero, kodėl 1, padalytą iš 10, pagal mano kompiuterio čia ne tik 1/10, 0,10? Taip. Ką tu manai? AUDITORIJA narys: Radix skiriasi? DAVID J Malan: The kas yra? Oi, radix skiriasi? Taigi ne visai. Tai tikrai daugiau esminis įranga. Kitos mintys? Taip. AUDITORIJA narys: Jie atstovauti numerius kitaip? DAVID J Malan: Taigi they-- Teisė. Jie atstovauja numerius kitaip. Netiksliai, matyt. Taigi, kad is-- Na, skirtingai nuo ko? Arba iš kurių? Iš mus? AUDITORIJA narys: Taip. Jie nenaudoja dešimtainio sistema [nesigirdi]. DAVID J Malan: Gerai. Taigi, tam tikra prasme, jie neturi naudoti dešimtainę sistemą. Priešais gaubtu, viskas yra, iš tiesų, dvejetainis, ir tai susiję, iš tikrųjų. Bet tai dar paprastesnis paaiškinimas, kad ne. Taip. AUDITORIJA narys: Jie tik tiek daug bitai. Jie gali tik saugoti iki tam tikro kiek, kaip ir su kablelio. DAVID J Malan: Taip. Tai, kas iš tikrųjų gauti į jį. Pasirodo, kad kompiuteriai Paprastai visada bus tik naudoti baigtinių informacijos kiekį atstovauti kažką. Teisė? Galų gale, mes turime tik fiksuotas suma laisvos vietos standžiajame diske. Mes turime tik fiksuotą sumą RAM, ar kompiuterio atmintis. Ir jei turite tik fiksuota suma kažką, Žinoma, jūs negalite iš tikrųjų skaičiuoti iki iki begalybės ar norimo numerio. Jūs, natūra, turi pasirinkti, kokiame intervale Vertybių jūs ketinate paremti. Ir taip, pavyzdžiui, savaitę ar dvi prieš kai mes kalbėjome apie ASCII, ir mes kalbėjome apie 8 bitai, arba baitas, taip sakant, didžiausias skaičius galėtume atstovauti 8 bitai buvo ką? 255. Ir mes galime atstovauti 256 bendras vertybes bet ne, jei mes praleidžiame vieną iš jų nuo 0-- Na, bet jei mes praleidžia vieną iš jų ant 0, tada didžiausias skaičius yra, žinoma, 255. Taigi, pasirodo, kad tai yra tuo atveju, taip pat, šiame kontekste. Mes pradėjome kalbėti, paskutinį kartą, apie slankiojo kablelio skaičių, kuris skiriasi nuo sveikųjų skaičių, ir kad jie turi kablelio ir, tikiuosi, kai numeriai po to, kad, bet jie yra per daug. Kompiuteris yra tik paprastai vyksta naudoti 32 bitus, o gal 64 bitų atstovauti slankiojo kablelio skaičius. Taigi, nors mes užaugo mokymosi matematikos ir žinant kad jūs galite turėti visiškai begalinis skaičius skaičiais po kablelio, o ne jei turite baigtinių atmintį. Jūs, natūra, turite apvalios, arba pasirinkti kurį numeriai jūs ketinate atstovauti. Ir todėl jūs galite galvoti, tam tikra prasme, tai yra kompiuteris artimiausių aproksimacija vertės 1/10, kad jis gali gauti, tik su 32 ar panašiai bitai. Ir tai ne tik 1/10. Pavyzdžiui, jei tai pakeisti į 1/3, kurį mes manome, yra dar paprasčiau. Taigi 1, padalytą iš 3. Leiskite išsaugoti failą. Leiskite man eiti į priekį ir perkompiliuoti ją. Ir leiskite man vėl ją paleisti. Čia taip pat, matyt, 1/3 nėra 0,3 ir tada begalinis skaičius 3 " vėliau. Turite šį netikslumą pabaigoje. Taigi mes, žmonės yra teisingi, ir ką sužinojau, iš tiesų, teisinga, bet mes nelygumai iki prieš kai kuriuos apribojimus. Ir ką aš maniau mes norime padaryti šiandien, yra pradėti pažvelgus, Atvirai kalbant, tragiškų pasekmių tai Kartais, kai žmonija ne visai įgyvendinti Šio realybės ir šių apribojimų. Ir mes pamatysite vinječių seriją iš istorijos kanalą, kuris trunka į tai, kaip viskas atrodo jau negerai. Tai apie 8 minučių ilgio, ir mes grįžti po to ir pažiūrėtų į tiksliai išvaizdą ką dar gali suklysti. Jei galėtume pritemdyti lights-- [Vaizdo įrašų atkūrimas] -Computers, Mes visi ateis priimti kad dažnai nelinksma problemų, kurios eiti su jais. Klaidos, virusų ir programinės įrangos trikdžių yra maži kainos mokėti už patogumą. Tačiau aukštųjų technologijų ir didelės spartos karinių ir kosmoso programos paraiškas, mažiausia problema gali Tebūna išaukštintas į katastrofą. Birželio 4, 1996, mokslininkai parengė pradėti nepilotuojamas Ariane 5 raketų. Jis nešėsi mokslo palydovai sukurta nustatyti tiksliai, kaip Žemės magnetinio lauko sąveikauja su saulės vėjų. Raketa buvo pastatytas Europos kosmoso agentūra ir pakilo iš savo įrenginio nuo Prancūzijos Gvianos priekrantės vandenų. -O Apie 30 sekundes į skrydis, jie pirmą kartą pastebėjau, kad kažkas negerai. Tai purkštukai buvo pasukami tokiu būdu jie tikrai neturėtų. Maždaug 40 sekundžių į skrydžio aiškiai automobilis buvo bėdų, ir tai, kai jie padarė sprendimas jį sunaikinti. Range Saugos pareigūnas milžiniškas viduriai paspaudėte mygtuką, susprogdino raketų, kol jis galėtų tapti pavojaus visuomenės saugumui. -Tai Buvo mergelė kelionė Ariane 5, ir jos naikinimo veiksmai buvo padėkite, nes škvalas įdėta į raketą programinės įrangos. -The Problema dėl Ariadnė buvo, kad buvo numeris, reikalingas 64 bitai išreikšti, ir jis norėjo paversti jį į 16 bitų skaičių. Jie prielaidą, kad skaičių buvo niekada nebus labai didelis, kad dauguma šių skaitmenų dydžio 64 bit skaičius buvo 0 aisiais. Jie buvo neteisūs. -The Vienas nesugebėjimas programa sutikti numeris, nurodytas rūšies generuoja kitas buvo ties gedimo šaknų. Programinės įrangos kūrimas tapo labai brangus dalis naujos technologijos. Ariane 4 raketa buvo labai sėkmingas, tiek daug, programinės įrangos sukurta ji taip pat buvo naudojamas ant Ariane 5. -The Pagrindinė problema buvo ta, kad Ariane 5 buvo greitesnis, pagreitinto greičiau. Ir programinė neturėjo sudarė tai. -Iš Raketų sunaikinimo buvo didžiulė finansinė katastrofa, visi dėl minučių programinės įrangos klaidos. Tačiau tai nebuvo pirmas laiko duomenų konvertavimo problemos buvo kentėjo modernią raketų technologiją. -in 1991, su pradžios Pirmojo Persijos įlankos karo, Patriot raketų patyrė panašų natūra skaičiaus perskaičiavimo problema. Kaip rezultatas, 28 žmonės, 28 amerikiečių kariai žuvo ir apie 100 žaizdos, kai Patriot, kuris turėjo apsaugoti nuo gaunamų scuds, nepavyko ugnį raketa. -Kai Irakas įsiveržė Kuveitas ir Amerikoje pradėjo Desert Storm 1991 pradžioje, Patriot raketų baterijos buvo dislokuota apsaugoti Saudo Arabija ir Izraeliu iš Irako Skadi raketų atakų. Patriot yra JAV, vidutinio nuotolio paviršius-oras sistemos pagaminti iš Raytheon kompanijos. -Iš Patriot Interceptor dydis, pati, apie, maždaug 20 pėdų ilgio. Ir ji sveria apie 2000 svarų. Ir ji vykdo daug about-- užtaisą Manau, kad tai maždaug 150 svarų. Ir užtaisą pati, yra didelė sprogstamoji, kuris turi fragmentus aplink jį. Iš galvutės korpusas sukurta veikti kaip šautuvo šratai. -The Raketos atliekami, 4 už konteinerį, ir yra gabenami puspriekabe. -The Patriot kovos raketinės sistemos nueina dabar bent 20 metų. Iš pradžių buvo suprojektuotas kaip priešlėktuvinės gynybos raketiniais nušauti priešo lėktuvus. Per pirmąjį Persijos įlankos karą, kai, kad karas atėjo kartu, armija norėjo jį naudoti numušti scuds, o ne lėktuvais. Irako pajėgų nebuvo tiek daug problemų, bet armijos buvo neramu apie scuds. Ir taip jie bandė atnaujinti Patriot. -Intercepting Priešą raketa keliaujant mach penkių ketino būti pakankamai sudėtinga. Bet kai Patriot buvo skubėjome eksploatuoti, armija nebuvo žinoma, kad dėl Irako modifikacija, kad padarė jų scuds beveik neįmanoma hit. -Kas Atsitiko, yra scuds kad ateidavo į, buvo nestabili, jie buvo Įtaka. Dėl šios priežasties, buvo irakiečius, kad gauti 600 kilometrų iš 300 kilometrų nuotolio raketų, paėmė svorio iš priekio galvutės ir padarė užtaisą lengvesni. Taigi dabar, Patriot bando ateiti tuo Traukties, ir didžiąją dalį laiko, Dauguma iš laikas, tai būtų tiesiog skristi iš Skadi. -Kai The Patriot sistemų operatorių supratau Patriot praleido savo tikslą, jie susprogdino Patriot anketa užtaisą, išvengti galimų aukų, jei jis buvo leista patenka į žemę. Išmokėtą sumą buvo tai, ką dauguma žmonių matė, tie dideli ugnies danguje, ir nesuprato, kaip ašyje Skadi galvučių. Nors naktį dangus, patriotai atsirado būti sėkmingai sunaikinti scuds, bent Dhahran, ten gali būti ne klaida apie jos veiklą. Ten, Patriot radaras sistema neteko stebėti priimamą Skadi, ir niekada pradėjo, dėl to, kad programinės įrangos trūkumas. Tai buvo Izraelio, kuris pirmą kartą atrado kad ilgiau sistema buvo įjungtas, tuo didesnis laiko neatitikimas tapo, nes laikrodis įterptųjų į sistemos kompiuterį. -About 2 savaites prieš Į Dhahran tragedija, Izraelis pranešė, kad Gynybos departamentas, kad sistema buvo prarasti laiką, kad maždaug po 8 valandų iš eilės, jie pastebėjo, kad sistema buvo tampa pastebimai mažiau tikslūs. Gynybos departamentas atsakė sakau visi Patriot baterijos ne palikti sistemas ant ilgą laiką. Jie niekada sakė, kas ilgą laiką buvo. 8 valandas? 10 valandas? 1000 valandas? Niekas nežinojo. -The Patriot "baterija dislokuota kareivinėse ne Dhahran, o jo trūkumų vidaus laikrodis, Buvo per 100 valandų nuo vasario 25 naktį. -Tai Stebimi laiko tikslumas apie 1/10 sekundės. Dabar 1/10 antrasis yra įdomi skaičius nes ji gali būti ne išreikštas dvejetainiu, tiksliai. Tai reiškia, kad negali būti išreikštas, tiksliai, bet šiuolaikinio skaitmeninio kompiuterio. Sunku patikėti, bet tai naudoti kaip pavyzdys. Paimkime skaičių, 1/3. 03/01 negali būti išreikšta dešimtaine, tiksliai. 1/3 yra 0.333 vyksta už begalybės. Nėra taip, kaip tai padaryti, su absoliutus tikslumas, dešimtaine. Būtent tos pačios rūšies Problema, kad atsitiko Patriot. Kuo ilgiau sistema bėgo, The Blogiau laikas klaida tapo. -Po 100 veikimo valandų, klaida laiku buvo tik apie 1/3 sekundės. Tačiau kalbant apie skirtomis raketa keliaujant mach 5 tai lėmė sekimo paklaida daugiau nei 600 metrų. Būtų lemtinga klaida už ne Dhahran karių. -Kas Atsitiko, yra Skadi paleidimas buvo aptikta išankstinio perspėjimo palydovai, ir jie new kad Skadi buvo ateina jų bendrą kryptį. Jie nežinojo, kur ji atėjo. -Tai Dabar buvo iki radaro komponentas Patriot sistema, ginti Dhahran, rasti ir išlaikyti kelio nuo gaunamus priešų raketos. -The Radaras buvo labai protingas. Būtų tikrai sekti Iš Skadi pozicija ir tada numatyti, kur tikriausiai jis toks ir būtų, kitą kartą, radaro siunčiami impulsas iš. Tai buvo vadinama asortimentas vartai. -Tada, Kai Patriot nusprendžia pakankamai laiko turi praėjo grįžti ir patikrinti kitą Vieta šiam aptiktą objektą, jis eina atgal. Taigi, kai jis grįžo į tą vieta, tai tada nemato objektą ir jis nusprendžia, kad nebuvo objektas, tai buvo klaidinga aptikimo, ir lašai takelį. Kadenciją Skadi dingo iš radaro ekrano, vėliau ir sekundes, ją pateko į kareivines. Skadi žuvo 28 ir buvo paskutinis vienas atleistas Pirmojo Persijos įlankos karo metu. Tragiška, atnaujinta programinė įranga atvyko Dhahran kitą dieną. Programinė įranga škvalas turėjo buvo fiksuota, uždarymas vienas skyrius neramus istorija Patriot raketos. [PABAIGA PLAYBACK] DAVID J Malan: Taigi mes pažvelgti kai kurie panašūs apribojimai tik šiek tiek. Bet pirmiausia, tegul perėjimas prie mažai FYI yra. Taigi one-- šį savaitgalį, yra bus super skyriai, kuris yra skirtas išstumia reguliarūs skyriai, kurie bus pradėti per savaitę, taigi. Pažvelkite į CS50 tinklalapyje išvaizdą Daugiau informacijos apie juos. Jie taip pat bus filmuojamas ir transliuojamas gyventi tiems, kurie negali dalyvauti. Problema nustatyti 1 yra ant Kursas tinklapyje jau ir mes pažvelgti kad tik šiek tiek. Ir darbo valandos per imsis įdėti šį pirmadienio iki ketvirtadienio. Taigi tai buvo labiausiai Canonical programa, mes pažvelgė paskutinį kartą. Tai kaip paprasčiausias programa, galite rašyti C, ir net tai iš paryškintu reikalavimo tiek. Teisė? Nes ten yra daug tariamas sudėtingumo tai. Taigi leiskite priimti greitai pažvelgti ką kai kurie iš šių elementų buvo ir tada pabandykite pateikti psichikos modelis, kaip tai paprasčiausias programų dirbti, ir tada mes pradėsime ieško dalykų vis sudėtingesnė. Taigi ši eilutė čia pabrėžė dabar geltonai, ko gi mes sakome, paskutinį kartą, kad tai daro mus? Koks tikslas ji tarnauja? Kiekvienas iš toliau atgal? Taip. AUDITORIJA narys: [nesigirdi] DAVID J Malan: Geras. Taigi ji suteikia jums prieigą į komandas, arba tegul skambinti jiems funkcijas, kad kažkas kitur rašė, kad deklaruojami, taip sakant, į kitą failą. Taigi mes tiksliai pamatyti, ką .h failą yra palyginti su .c failas, galų gale. Bet dabar, tiesiog žinau, kad printf, pavyzdžiui, yra tarp funkcijų, kurios buvo deklaruota kitu failo, kažkur dar ant debesies kietajame diske, kad leidžia mums naudotis printf ir jį naudoti nereikia išradinėti kad rato save. Tuo tarpu pagrindinis. Koks buvo pagrindinis, praėjusią savaitę analoginis? Taip. AUDITORIJA narys: Žalioji vėliava paspaudėte. DAVID J Malan: Taip. Įbrėžimams ųjų, kai žalia vėliava paspaudėte. Tai tarsi dėlionės gabalas kad prasideda ko ne. Ir taip panašiai, padarė pasaulį nusprendė prieš keletą metų, kad C, ir kitų kalbos krūva, jei norite parašyti programą, Jūsų pirmoji funkcija turi būti vadinamas pagrindiniu. Ir ji turi atrodyti taip. Bet mes grįžti, kitą kartą, į tai, ką, INT, ir tuščia, reiškia tame kontekste. Nes dabar, garbanotas petnešos yra natūra nuo nulio, kaip savo įspūdį formos kad apjungia keletą eilučių skaičių. Ir tarp linijose čia tai vienas čia. printf yra funkcija, kurios paskirtis gyvenimas yra atspausdinti suformatuotą eilutę. Ir suformatuotas, aš turiu galvoje tave gali prijungti placeholder vertybių, ir jūs galite nurodyti, kiek dešimtosios dalies Taškai, kiek numeriai spausdinti po kablelio ir pan. Ir printf, žinoma, užima vieną ar daugiau argumentų ar parametrai, kitaip žinomas, daugiau tiesiog, kaip įėjimai. Taigi printf, tarsi daug funkcijos, užima įėjimus. Ir tie įėjimai apkabino dviejų skliausteliuose čia. Ir viduje jų yra vienas įėjimas. Tai eilutė, kaip mes jį pavadino, kuri yra tik ženklų seka, kaip žodis arba frazė, ar apskritai esė net tarp kabutes. Ir tai, kas vyksta daryti įtaką elgesio printf nes, žinoma, tai tik bendrinis spausdinimo funkcijos. Jis nesiruošia žinoti, ką spausdinti, jei pasakys. Ir tada, kai individualiųjų požymių. Ką mes galime pasakyti tai keista simbolių seka yra? Taip. AUDITORIJA narys: Nauja linija. DAVID J Malan: Naujas linija. Taigi paaiškėja, jūs negalite tiesiog paspauskite, įvesti, kai rašote programą. Apskritai, kompiliatorių ketina gauti šiek tiek supainioti, ką reiškia. Atvirkščiai, jūs turite tiesiog sako, duok man naują eilutę čia. Ir taip / n yra tai, ką mes paprastai skambinti pabėgti charakterį. Taigi n už naują eilutę. Ir kompiliatorius žino kad kai jis mato / n, ji iš tikrųjų turėtų sukelti kompiuterį, galiausiai, arba printf, šiuo atveju, spausdinti faktinė Naujas linija, kaip pataikyti, įveskite, klaviatūros klavišą. Ir galiausiai, ką padarė sakome Ši sintaksė gabalas yra? Ką tai reiškia? Taip. AUDITORIJA narys: [nesigirdi] DAVID J Malan: Tai tiesiog geležinkelio linijos pabaigos. Tai pareiškimo pabaiga. Ir suprasti, kad mes ne įdėti juos visur. Mes, žinoma, nedėkite jų ne kiekvieno linijos galuose. Pavyzdžiui, ten nė dėl Pirmoji eilutė, ten nė viena ant linijos su, pagrindinė, ten nė viena po klamrami, bet jūs pradėsite matyti ir gauti susipažinęs su kur jis paragino. Ir tai beveik visada po funkcijos skambinti arba pareiškimas, kai veiksmai kad jūs iš tikrųjų atsižvelgiant. Ir dabar žinau, ypač jei tarp tų, mažiau patogus, tai yra kvailas dalykų rūšių kad jūs galų gale netyčia beldžiasi jūsų galva prieš daugiau nei sienos. Kadangi jums bus logiškai įsitikinę, kai problemos Jūs išspręsta problema rinkinys, ir velniškai dalykas tik nebus surinkti ar net paleisti. Ir taip dažnai, anksti, jis ketina būti, nes jūs praleidote skliaustų, arba jūs praleidote kabliataškį. Ir taip tiesiog turėti omenyje Šių rūšių dalykų, ir bandyti ne gauti nusivylė juos, nes labai greitai tai daro tapo sena skrybėlę. Bet tai labai lengva gauti nusivylusios anksti, kaip rezultatas. Taigi dabar leiskite pažvelgti, kaip atrodo Ši linija yra faktiškai dirba ir tada pažvelgti šiek tiek daugiau sudėtingas. Taigi, mes turime daugiau nei Čia gebėjimas atkreipti šiame ekrane. Ir tarkime, kad tai yra mano kompiuterio ekrane, bet aš rašau į Hello programą, ir aš neįgyvendino, printf. Kažkas kitas jau įgyvendinta, printf. Kas norėtų pretenduoti į Įgyvendinome printf? Jei mes gali? Gerai, kas yra jūsų vardas? STUDENTŲ 1: [? Akmuo. ?] DAVID J Malan: kopalas ateiti iki. Nagi iki. Gerai. Taigi, mes turime čia, kai žymos, nes mes padaryti šiek tiek žaidimas tai. Ir mes jums paskambinti, printf. Ir jei norite ateiti per čia ką aš ką tik sudarytas ekrane, tai tiesiog, ten mane, tai. Gerai, taip, labas mano vardas yra printf, jei norite įdėti, kad. Gerai. Ir jei galite eiti stendas pagal kompiuterio ekrane taip, tarsi jūs esate funkcija, buvo su šio kompiuterinėje sistemoje. Ir jūsų tikslas gyvenime yra kad iš tikrųjų spausdinti kažką. Bet labai panašus į programos mes tiesiog turėjo ekrane, čia, mes ketiname turi iš tikrųjų duoti jums šiek tiek įvestį. Ir taip, jei mano indėlis čia yra Matyt, tai, kas perduota printf, tegul rūšies išjuokti jį kaip šis. Aš ruošiuosi tiesiog rašyti popieriaus gabalas, "Sveikas, pasauli", Backslash N. Ir kad būtų aišku, kas Aš ką tik sudarytas dėl šio popieriaus, atrodo taip. Taigi, kai aš paleisti šią programą, ir tai geltona linija kodo paleidžiama vykdyti, tai taip, nors aš, Hello programos, esu atiduodami tam tikrą indėlį išjungti funkciją kad kažkas parašė. Ir jei jūs, su pirštu, realiai gali, su pirštu, piešti ant ekrano kokia tai jūs jau įteikė, poveikis, galiausiai, yra tiksliai pamatyti, kad ant ekrano. Ir šiek tiek kampelis atveju. Ir gerai, mes neturėtume pamatyti the, nauja linija, šiuo metu. Būtų neteisinga jumis aiškiai atkreipti ^ Z. Bet jei mes nuolat raštu žodžius, ekranas, jie galų gale žemiau, kad. Taigi labai ačiū, bet klijuoti aplink čia tik vieną akimirką. Dabar turime vieną kitą savanoris, jei galėtume, kad ketina reikia atlikti svarbų vaidmenį of-- tai tik žmonių orkestro dabar. Kaip about-- Gerai. Štai čia. Nagi iki. Koks tavo vardas? STUDENTŲ 2: [? Ivay. ?] DAVID J Malan: Atsiprašome? STUDENTŲ 2: [? Ivay. ?] DAVID J Malan: Etanas, nagi iki. Nėra? Ar aš galiu gauti, kad negerai, net po to, kai pasakė, kad du kartus? Nagi iki. Sunku girdėti čia. GERAI. Ir aš atsiprašau, koks tavo vardas? STUDENTŲ 2: [? Ivay. ?] [? DAVID J Malan: Ivay. ?] GERAI. Nes dabar, jei jūs neturite Protas, jūs GetString. STUDENTŲ 2: Gerai. Atvėsti. DAVID J Malan: Taigi, jei norėtumėte stovėti čia tik akimirką, Paimkime pažvelgti šiek tiek sudėtingesnė programa, kad dabar turi tris eilutes kodo. Taigi, mes turime vieną, nurodykite savo vardą, naudojant printf; du, kvietimas GetString, po to iki A užduoties kintamasis vadinamas, styginių S arba vadinamas -ai; ir tada kitas skambutis, printf, bet šį kartą su dviem įėjimai. Taigi, mes jau padaryta būklė Jūsų vardas, arba, tiksliau, mes jau padariau printf skambutį. Taigi, aš ruošiuosi rašyti, Nurodykite savo vardą. Ir taip, ką aš ruošiuosi praeiti, printf, vos akimirką, yra paprasčiausiai tai. Taigi, jei norite eiti į priekį ir daryti tai ekrane, kad jūsų įvesties dabar. Gerai. Ir pamiršti eilutę, dabar mes turime mūsų pačių linija kodą čia. Taigi, GetString, turime kad iš tikrųjų skambinti, GetString. Taigi jūsų gyvenimo tikslas yra tiesiog vaikščioti išėję į orkestro, jei galėtų, ir gauti kažkieno vardą. Bet tegul duoti jums kažkas įdėti jį į. Jei norite, eikite į priekį ir gauti eilutę, gauti kažkieno vardą, kad gabalas popieriaus, jei gali. Gerai. Ir mes pamatysime, vos akimirką, kurio vardas mes vis. Tuo tarpu, ką aš ruošiuosi turi pasiruošę, yra tuščias gabalas popieriaus, kuriame aš ruošiuosi saugoti kokia vertė ją yra tai, kad GetString grįžta į mane, Aš, būdamas styginių kintamasis vadinamas, Š. Gerai. Taigi, ką jūs turite čia? Nikas. Gerai. Taigi, mes turime Nik vardą čia. Taigi tai, kas pažodžiui buvo grąžintas man, taip sakant, pagal GetString. Aš, dabar einu vykdyti kairėje pusėje tos išraiškos, kur aš tiesiog nusikopijuokite, šiandienos tikslais, Nik. Taigi dabar turiu kintamąjį vadinamas, S, saugoti Nik vardą. Aš jau įteikė printf, ankstesnis argumentas. Tačiau mūsų trečiąją ir paskutinę eilutę kodas, aš iš tikrųjų turi ranka printf nors šiek tiek different-- "Sveiki% s" Backslash n. Ir taip paskutinė eilutė aš ruošiuosi į send-- paskutinis dalykas, aš tikiu, ketina užrašyti dabar tai. Taigi dvi eilutes kodo arba o paskutinės eilutės kodas, ragina dviejų inputs-- viena, tai, ir du, tai. Taigi, jei mūsų printf funkcija dabar gali priimti tai kaip indėlis, leiskite man išvalyti ekraną už jus. Tiesą sakant, ne, galite eiti į priekį. Mes palikti jį, nes tai tuo pačiu programą. Turėtume pamatyti, hello, Nik. Gerai. Taigi tai buvo nemažai lankus peršokti per, tiesiog rašyti, nurodykite savo pavadinimą, ir labas, Nik. Tačiau ši paprasta idėja Message Passing, įvesties artimųjų ir išvesties gavimo, yra tiksliai modelis mes ketiname turėti už net labiausiai sudėtingų funkcijų. Taigi Thank you so much jums abiem. Mes turime gražių stresą rutulinis čia jums. Ir ačiū mūsų GetString ir printf savanoriai vienodai. Ačiū. Gerai. Dėkojame jums abiem. Taigi, mes jau kalbame apie Iki šiol daugiausia apie stygos. Ir paaiškėja, kad C iš tikrųjų gali suprasti keletą skirtingų duomenų tipų. Iš tiesų, galime imtis Žvilgsnis tai čia. Taigi C ir kalbų daug, suprasti dalykus, vadinamus simbolių. Char paprastai yra vieno baito arba aštuonis bitus. Ir tai reiškia vieną simbolį, kaip laišku arba kapitalo raidė, arba mažosiomis raidėmis A arba šauktukas, arba bet kokio pobūdžio, kad galite įvesti į Jūsų klaviatūra, o kartais net daugiau. Mes taip pat atsitiktų pamatyti plūdės. Plūduras yra, plačiau, 32 bitų vertė arba keturių baitų nes vėl vienas baitas yra aštuoni bitai. Taigi plūdė yra slankiojo kablelio vertė, kažkas su kablelio. Ir iš tiesų, tai ką filmas buvo kalbama kai jie kalbėjo apie plaukiojantieji taško verčių, kai fiksuoto bitų skaičius naudojamas atstovauti tikrą numerį. Bet ten taip pat viskas vadinami dviviečiai kambariai. Tai egzistuoja Java, Jei atlikote APCs, ir dvigubai, nes pavadinimas laimei rodo, yra dvigubai didesnis plūdės. Jis vis dar realusis skaičius, jis tiesiog turi daugiau bitai su kuria būti dar tiksliau, ar saugoti, net didesnius numerius. INT yra paprasta. Mes kalbėjome apie tą paskutinį kartą. Tai tiesiog sveikas. Ir tai dažniausiai 32 bitai, arba keturių baitų. Ir taip, jei turite, pažiūrėkime dabar 32 bits-- ir mes tai padarėme savaitę 0, vis tiek briefly-- jei turite 32 bitų, kas didžiausias Taškų galite atstovauti kaip sveikasis skaičius? Suteikti arba užtrukti? Tai kaip 4 milijardai eurų, ir tai tik tada, jei mes atstovauja tik teigiamus skaičius. Jei turite 32 bitų, ir jūs norite atstovauti neigiamus skaičius, taip pat, Jūsų diapazonas yra iš esmės neigiamas 2 mlrd teigiamas 2 mlrd. Bet apskritai, mes pradėsime 0 eiti iki 4 mlrd. Jūs neturite tiksliai žinoti, bet matome tai, iš tiesų, jei aš tiesiog atverti šiek skaičiuoklė, čia. Galiu padaryti 2 32, ir tai tiksliai, kaip didelis, Kiek daug vertybių galite atstovauti, 32 bitai. Ir tai maždaug 4 mlrd. Taigi mes nuolat matau šį numerį per keletą skirtingose ​​vietose. Bet jei jums reikia daugiau numeriai nei, kad it turns out ten kažkas vadinamas ilgas ilgas. Ir ilgai ilgai paprastai 64 bitai, kurie reiškia, kad jis dydžio, kad net didesnis, nei int. Taigi, aš negaliu net ištarti didžiausia skaičius, kad jūs galite atstovauti, bet tai gerokai didesni. Dabar, kaip panaikinti, istoriškai, jei int yra 32 bitai, ir ilgai ilgai 64 bitai, kaip didelis yra ilgas, nėra ilgas ilgai? Jūs manote, kad tai ilgiau nei int bet gal mažiau ilga, nei ilgas ilgas, bet ji iš tikrųjų priklauso. Ir taip it turns out vieną iš nusivylimų taip pat su raštu kodą tikroms sistemoms, yra tai, kad ne visi šie duomenų tipų turi iš anksto nustatytus vertybes. Kartais tai tik daug bitai. Kartais tai, kad daugelis bitai. Taigi jūs iš tikrųjų turite žinoti, kartais, kokios aparatūros vykdote savo programinę įrangą. Laimei, kitas kalbas ir kitų duomenų tipų, kad dabar egzistuoja, leidžia tiksliau. Na, mes matėme eilutę, ir pamatėme bool, taip pat, bet it turns out tie ateis tik su CS50 bibliotekoje. Taigi tie, kurie nebuvo pastatyta į C. Tie, vietoj to, ateiti į tą bylą, vadinamą CS50.h, kad mes galų gale Nuplėškite sluoksnių. Bet dabar, jie tiesiog papildomas duomenų tipai. Bool yra true arba false, ir eilutė yra ženklų seka, kaip žodžio. Dabar printf, mes matėme, turi pamainymai% s yra vienas. Ir jums gali būti suteikta, kad dabar numanyti iš šių kitų pavyzdžių, kaip Jums gali turėti vietos rezervavimo ženklą įvairių duomenų tipų. Pavyzdžiui, spėti, jei jums norėjo išspausdinti vieną char naudojant printf, pakaitalą yra turbūt% c. Ir jei norite spausdinti patikrinimą sveikasis skaičius su imituojančiu,% i. % LLD yra ilgas ilgas Dešimtainis vertė, bet ilgai ilgai, todėl, kad žemėlapiai kad. Ir tada% f kintamosiomis punkto vertė arba dvigubas, todėl kartais jie pakartotinai naudojamas skirtinguose kontekstuose. Taigi mes pamatysime ir naudoti kai kurios laikui bėgant. Ir printf ir kitas funkcijas taip pat padėti kitiems "evakuacijos sekas, o kartais, tai yra būtina. Taigi Backslash n yra nauja eilutė. Kairinis pasvirasis brūkšnys t, Ar kas nors nori imtis Pabandyti? AUDITORIJA narys: Skirtukas. DAVID J Malan: Skirtukas. Taigi, jei jūs tikrai norite spausdinti skirtuką, o ne nustatytą skaičių erdvėse, bet tikrasis skirtukas simbolių, jums nereikia nukentėjo jūsų, skirtuką, klaviatūros klavišą, paprastai, jūs iš tikrųjų padaryti backslash t. Kairinis pasvirasis brūkšnys dvigubai citata, kodėl turėčiau norėti, kad? Teisė? Kodėl aš negaliu tiesiog įveskite dvigubas citata mano klaviatūros? AUDITORIJA narys: Nes kitaip, tai ketina manau, kad tai pabaiga panašaus spausdinimo [? teksto. ?] DAVID J Malan: Būtent. Atminkite, kad su mūsų printf pavyzdžiai, kai mes eidavo į printf į įvestį, dėl šios įvesties eilutę kairėje ir dėl šios įėjimo dešinėje pavasarį, žinoma, buvo dvigubai citata. Jei jūsų įvestis turi dvigubai citata viduryje, kad, kompiuteris potencialiai gali susipainioti, nes į, daro šį dvigubą citata priklauso viduryje? Ar tai priklauso kairiuoju vieną? Ar tai priklauso su teise vieną? Ir taip, jei norite, kad jis super aišku, jūs backslash dvigubos kabutės, taip, kad jis pabėgo, taip sakant, ir tai ne sietų kažkas. Ir ten keletą kitų čia Backslash r Viengubomis kabutėmis, 0, kad mes gali matyti, laikui bėgant, taip pat. O dabar, ką apie funkcijas? Taigi veiksmų, kad mes galime imtis iki šiol šia kalba C, gerai, mes matėme, printf, žinoma, ir visi iš ekrane kitiems, čia, kad mes naudosime už tik žinoma pirmieji keletą savaičių, ateiti, kai CS50 biblioteką. Ir jie daug lengviau, ir C faktiškai gauti vartotojo įvesties. Pasirodo, kad C, ir atvirai per kelias kalbas, tai tikras skausmas, kaklo daryti kažkas paprasta, kaip greitai vartotojas už klaviatūros, už savo indėlį. Ir taip šios funkcijos lengviau. Ir jis taip pat turi klaidą tikrinti visą, taip, kad, kai jūs prisiminti trečiadienį, mes pamačiau, bandykite dar kartą, įspėjimas, kai aš nebendradarbiavo, ir aš įvedėte Žodžiu, vietoj skaičių? Mes padarėme didelių svorių iškėlimą anksti į įsitikinkite, kad vartotojas bendradarbiauja. Tačiau tai yra tik mokymo ratai, kad mes galų gale, ir greitai, kilimo. Taigi, norint Priminti tada, tegul priimti greitai pažvelgti, panašiai kaip mes padarėme su nulio, esant kai kanoninės konstruktai C Tai reiškia, kad, rūšiuoti d būti viesulas kelionė, tik todėl, kad jūs turite nuorodą ir kad jūs matėte, ką iš pradžių. Bet tada mes pažvelgti faktinio kodavimo naudoti kai kurie iš šių statybinių blokų. Taigi, panašiai kaip nulio, kai mes buvome pareiškimai patinka, sako arba laukti, C, mes turime funkcijos taip pat, kaip printf. Jei norime išreikšti būklę C, jis panašus, dvasia, tai įspūdį, kad Atrodė tai nulio. Bet vietoj to, mes pažodžiui tik rašyti, jei. Ir tada, skliausteliuose, mes įdėti sąlygą, kur ši sąlyga yra tai, ką mes vėl skambinti,, Būlio išraiška. Ir vėl, tai yra tarsi Pseudocode. Ir, tiesą sakant, // yra komentaras. Tai tik angliškus žodžius sau. Bet tai yra bendra struktūra yra, jei būklę. Bet mes pamatysime betono pavyzdžiai tik akimirką. Jei norite turėti dvipusis kelio išsišakojimas, panašiai kaip mes padarėme mūsų savanoriauja Trečiadienis, jūs galite turėti, kitas, jei. Ir jei jūs norite turėti trečią ir Paskutine sąlyga, ar numatytasis situacija, Jūs galite turėti tik kita blokas, ten. Ir panašiai, ir loginės išraiškos, jūs galite, ir juos kartu. Ir mes matėme trečiadienį, kad tai ne vienas Ampersand, tai du, už žemesnio lygio priežasčių, mes galų gale pamatyti ir žaisti. Arba-mas dalykų kartu yra 2 vertikalios juostos. Dėl JAV klaviatūra, tai paprastai yra pagrindinis su Shift klavišą aukščiau Jūsų klavišą Enter arba grąžinti klavišą. Tada ten šiuos dalykus, kad mes naudosime gal kartą ar du kartus. Jie yra funkciškai lygiavertės ką galite daryti su an, jei kitur, jei else if kitur, statyti, bet jie vadinami jungiklis. Jie atrodo labai skirtingi, bet mes matyti kai mūsų platinimo kodą, būsimos problemos rinkinys, greičiausiai, kad kartais tiesiog gražiau iš būdų išreikšti visumą krūva sąlygų, be daug garbanotas petnešos daug ir iš skliausteliuose ir įdubimas daug. Bet jie suteikia mums ne daugiau galios, nei turime jau. Ir dabar kilpų. Ir tai viena, mes pažvelgti bent šiek tiek daugiau lėtai. Bet tada mes pradėsime naudoti jų ypač tiems, kurie jau susipažinę. Tai Canonical būdu, jei neįtikėtinai slaptas būdas, parašyti C kilpa Dabar į nulio kilpa buvo gana paprasta. Jūs turite visada, kad blokas. Jūs turite, pakartokite, blokas su tik skaičius turite įvesti. Ir su, už kilpos, galite įgyvendinti ir iš tų idėjų, bet tai šiek tiek daugiau techninio pobūdžio. Bet tiesą sakant, jis taip pat gana paprasta. Kai žinote užsakymo operacijos, jums tiesiog yra tik ketina prijungti vertybių ir pasakykite kompiuterį, ką daryti. Taigi čia pavyzdys. Tai yra, kad kilpa, gana tiesiog, skaičiuoja nuo vieno skaičių iki per kitą. Ir tik skaitydamas į jį, net jei jūs turite ne prieš patirtimi su Ši kalba, ką numeris tai tikriausiai pradėti skaičiuoti ne? Gerai, 0. Ir spėju, kad todėl, kad jūsų matyti, kad ten int ir i kuris yra kintama. Tai inicializuoti 0. Ir vėliau, atrodo, mes artimųjų printf, vertės. Ir, tiesą sakant, aš padariau šiek tiek typo čia. Bet tai lengvai nustatoma. Leiskite man pridėti, čia. Mes dabar turime printf savijautą išlaikė tą vietaženklį vertę. Ir tai, kas vyksta skaičiuoti ne per? Auditorija: 50. 50. 49. DAVID J Malan: 49. Taigi 50, iš pirmo žvilgsnio, atrodo teisinga. Bet tai, it turns out, bus Mūsų sąlyga, kad mes nuolat tikrinti. Ir mes ketiname sustabdyti kartą i yra ne ilgiau mažiau kaip 50. Taigi, tai kilpa, atvirkščiai, turėtų vykdyti, tol, kol i yra mažiau nei 50. Bet kaip tik jis tampa 50, arba 51, arba, dar blogiau, ji turėtų nustoti automatiškai. Gerai. Taigi, kas iš tikrųjų vyksta čia? Taigi tai yra tam operacijos kilpą. Vienas iš jų, jūs turite Vadinamasis iniciacijos. Ši geltona pabrėžė riekė kodo vykdomas pirmą kartą, ir ji turi tokį poveikį, kad, vienam Trečiadienis, jūs tikriausiai įsivaizduoti. Tai sukuria kintamąjį vadinamas I ir ją parduotuvių, kad kintamasis vertė 0. Taigi aš yra 0 šiuo metu į istoriją. Kitas dalykas, kad vyksta šiame konstruktą, yra tai, kad sąlyga bus tikrinama. Taigi aš patikrinti iš karto, yra i mažiau nei 50? Ir, žinoma, atsakymas dabar yra, be abejo, taip. Taip, nes i yra 0, ir tai tikrai mažiau nei 50. Tada, kas atsitinka, yra ta, kad šis linija kodą paleidžiama vykdyti. Ir iš tikrųjų, jei yra išsėtinė eilučių kodo tose garbanotas petnešos, jie visi gauti įvykdytas vienas po kito. Ir efektas čia yra Matyt, atsispausdinti numeris i, kurios vyksta būti 0, ir tada 1, ir tada 2. Bet kodėl? Kodėl tai gauti vienetu? Na, ketvirtas dalykas, kad atsitinka, kad šioje sintaksę paleidžiama vykdyti po kabliataškiu. Aš ++ yra sutrumpinimas būdas pasakyti; imtis I vertę ir pridėti 1 prie jo; ir tada, kai kitą kartą aplink, pridėti 1 su ja; ir kitą kartą aplink, pridėti 1 į jį. Taigi, jei mes nuolat vyksta, kas nutiks Kitas yra, aš nesiruošia inicijuoti aš kada nors vėl. Jei aš nuolat Inicijuojama i 0, šis pavyzdys būtų niekada nesibaigs, nes Būčiau įstrigo 0. Bet kas nutiks yra kad sąlyga bus tikrinama, kodinių linija gaus įvykdytas, i bus didinamas, sąlyga bus tikrinama, kodas gaus įvykdytas. Ir tai laikoma dviračiu vėl, ir vėl, ir vėl, kol i ++ sukelia vertę 50. Sąlyga tada sako, yra mažiau nei 50 50? Atsakymas, žinoma, yra ne, ir todėl visa kodas sustoja vykdyti. O jei turite daugiau kodą ekrane apačioje, tai, kas vyksta šalia. Ji pasirodo iš šių garbanotas petnešos ir toliau spausdinti daugiau po to. Taigi pokštas dabar iš Foxtrot, kad jūs galbūt dabar suprasti. Jis visada juokinga. Tai kaip chuckles rūšies prasismelkti, ir tada jūs suprasite, jūs neturėtumėte būti juokiasi humoro, kaip šis. Tačiau yra tam tikrų Takeaway čia pedagogiškai, taip pat. Taigi paaiškėja, kad aš trūksta sintaksės gabalas, arba Foxtrot s trūksta gabalas sintaksė čia. Ko trūksta, kad mes turėjome visais kitais Pavyzdžiui, iki šiol? Sugrįžk, yra ten, kad tai kažkas, kad mes grįžti į prieš ilgas. Ko trūksta, nors? Taip. AUDITORIJA nariams: iniciacijos [nesigirdi]. DAVID J Malan: Gerai. Taigi taip. Taigi iš tikrųjų, tai is-- Na, ir skaičius yra inicializuoti iki pirmiau, arba, tiksliau, deklaruojamos iki viršaus. Taigi tai yra dar vienas būdas tai daryti. Tačiau ne vienoje linijoje, tai galioja, nors. Kaip apie čia? AUDITORIJA narys: Ar tai garbanotas petnešos? DAVID J Malan: Taip. Taigi garbanotas petnešos trūksta. Tačiau šis kodas, aš turiu galvoje, kad jų kredito, yra iš tikrųjų, sintaksiškai neteisingas. Pasirodo, jūs neturite reikia garbanotas petnešos jei turite tik vieną eilutę kodo, kad Jūs norite vykdyti viduje kilpą. Dabar mes visada, klasėje ir visi mūsų platinimo kodą, įtraukti vingiuotus skliaustus Bet kokiu atveju, tiesiog dėl aiškumo dėlei. Bet suprantu, kad vadovėliuose ir internetiniai pavyzdžiai, jums gali labai gerai pamatyti garbanotas petnešos trūksta kažkada. Ir tai gerai, jei tai, ką jūs jau atitraukiama ir skirtas yra tik viena eilutė kodo, o ne keletą eilučių kodo, galimai. Gerai. Taigi susijusi su išleidimo netikslumas, tai iš perpildymo problema, ta prasme, kad panašiai, do sveikieji skaičiai turi ribas į juos kaip slankiojo kablelio vertybes? Pasaulyje slankiojo kablelio vertybes, mes galime būti tik tokie tikslūs, po kurio, kartais blogi dalykai gali atsitikti, ir mūsų programos gali būti Buggy ir klaidos. Dabar net su sveikaisiais skaičiais, galite paleisti į problemų. Dabar sveikas skaičius, neturi Dešimtainis taškas arba numeriai po jo. Tai tiesiog natūralusis skaičius, paprastai. Taigi, ką gali suklysti su int? Jei aš naudoju AN į int skaičius, kas galėtų suklysti? Atrodo daug paprastesnis. Taip. AUDITORIJA narys: Jei skaičius tampa [nesigirdi] DAVID J Malan: Taip. Ką daryti, jei jums suskaičiuoti toks didelis, kad jūs negali išreikšti, kad tikrai didelis skaičius. Teisė? Tam tikru momentu jūs ketinate viršyti ribas iš 32-bit vertės arba 64 bitų vertės. Dabar vėl, aš nesu įsitikinęs, kaip ištarti 64 bitų vertę, bet aš žinau, su 32 bitų sveikasis skaičius, didžiausia vertė gali būti, jei tai tik teigiamas vertės, yra maždaug 4 mlrd. Taigi, jei aš pabandyti suskaičiuoti iki 5 mlrd, kažkas nutiks. Bet pažiūrėkime, ką, tiesą sakant, gali atsitikti. Atsižvelgiant į sveikasis skaičius pasaulyje perpildymo, kur, tam tikra prasme, sklidinos An pajėgumus sveikasis skaičius, kas gali atsitikti? Taigi čia dvejetainis skaičius, tai Perjungimas į 0. Tai visi 1-ųjų ir pamainymai ten yra įgaliojimai 2, todėl tai yra dvejetainis. Taigi, tai yra 8, 1 bitai ekrane. Ir jei jūs prisimenate, arba jums greitai padaryti matematikos, kas vertė yra atstovavo čia su šių aštuonių 1 bitai? 255. Ir net jei buvo ne visai tikras, iš matematikos, jums galėtų padaryti jį. Arba galite tiesiog rūšies proto per jį, palauk, jei aš atstovaujanti 8 bitų reikšmę, ir aš turiu 256 galimų reikšmių, bet kuri pirmoji yra 0, Aš tiesiog žinau, kad Didžiausia bus 255, ir tai, ką tai vienas galėtų būti. Taigi manau, bandau pridėti 1 iki šios vertės. Ką darytum lygiui mokyklos, kai pridedate 1, ir ji tikrai ne tiks, nes jūs turite nešti 1? Kas yra šis skaičius bus tapti, jei norite pridėti 1? Jis taps 0. Teisė? Nes jei turėjo daugiau bits-- ir aš pabandyti, tipo, įveskite jį here-- jei mes turėjome daugiau bitų, ką mes gali padaryti čia yra įdėti 1, ir tada mes norime gauti tai. Oi. Mes norime turėti 1 bitas visą kelią čia. Bet jei tai yra baigtinis vertės, tai tik 8 bitai, ir kad iš anksto nustatytas kompiuteriu, kad 1 yra efektyviai nėra. Tai tiesiog rūšies nukrenta nuo skardžio. Ir todėl, jei norite pridėti 1 iki 255, kas vertę tu matyt gauti? 0. Ir taip numeriais netyčia, o gal netyčia, galų gale vyniojimo aplink kaip šis. Taigi, kas gali būti šio POVEIKIS? Na, yra keletas skirtingų dalykų. Taigi vienas, jis galų gale ieškote kaip 0, netyčia, bet jūs galite rūšies pamatyti, net ir realiame pasaulyje, geriau ar blogiau, pasireiškimai šio limito idėja. Pavyzdžiui, kas nors iš jūsų, kuris kada nors grojo Lego Star Wars, Ar kas nors atsitiktų žinoti didžiausias skaičius monetų galite surinkti į Lego Star Wars? Paimkite atspėti remiantis šiandien žinomų klausimai. Tai daugiau nei 256 ar 255. Tai 4 mlrd. Taigi paaiškėja, ir Yra keletas people-- kai "Google" paiešką patvirtino paskutinis night-- Dotarłeś 4 mlrd aukso monetų, arba Papuošalą, kad Lego Star Wars. Nors, matyt, yra būdas apgauti žaidimą, ten klaida ar funkcija, kuri leidžia jums tik sukaupsite daug ir daug taškų. Bet didžiausia įmanoma vertė, pagal į šią fotografiją ekrano Mylimas rasti internete, yra iš tikrųjų, 4 mlrd. Dabar, kodėl taip yra? Tai būtent 4 mlrd, tikriausiai todėl, kad kažkas nusprendė, kuris rašau šį žaidimą, kad jie galėtų padaryti 4 milijardai eurų, kažkas, kažkas, kažkas, kaip vertės Aš taikstytis su skaičiuotuvu anksčiau, tačiau tai tik šiek tiek švaresnis žmonėms pasakyti maksimalų skaičių iš coins-- ar smeigės, kaip jie vadina them--, kad jums gali rinkti yra 4 mlrd. Ir taip, tai kodėl tai yra? Kaip LEGO žaidimas skaitiklis įgyvendinti kad manimi sekti iš monetų skaičius turite? Jie naudoja, ką? AUDITORIJA narys: Tai sustos skaičiuojant po 4 mlrd. DAVID J Malan: Tai sustos skaičiuojant po 4 milijardai eurų, tai reiškia, jūs galite numanyti, kaip programuotojas, kad jie tikriausiai naudojant 32 bitų sveikasis skaičius. Kaip programuotojas pažodžiui tik įvestos, INT, jo ar jos kodas, ir tai kintamojo tipas, jie naudoja saugoti kažkieno kodą. Taigi ten kitas apraiškas iš šių ribų rūšių. Taigi aš ne grojo šį _pasirinkti ir aš skaičiau ant istorijos patvirtinti kaip much-- bet į Originali versija civilizacijos, kur Jūs, matyt, sąveikauja vienas su kitą ir gali kariauti arba turėti ramybę, Gandis turėjo būti vienas iš ramiausių simbolių, kaip aš suprasti, kad pirmasis versija civilizacija. Ir iš tikrųjų, nuo 1-10 mastu, jo agresyvumas buvo tik 1. Taigi vis tiek šiek tiek agresyvi, matyt. Bet tam tikru momentu, galite matyt įdiegti demokratiją savo geografiją. Ir jei jūs įdiegti demokratiją į jūsų žaidimo versija, tada jūsų agresija lygis krinta. Tai geras dalykas. Žmonės ramiau Matyt, toje situacijoje. Bet, matyt, kažkas padarė neturės, jei būklę originalioje versijoje kodą. Taigi Gandhi agresija lygis sumažėjo nuo Teigiamas 1, ± 2, į neigiamą 1, bet žaidimas nėra suprasti neigiamus skaičius. Taigi, kas atsitiko Gandhi agresija lygis sumažėjo nuo 1 iki 0, kad neigiama 1, kuri turėjo poveikį vyniojimo aplink yra labiausiai agresyvus charakteris žaidime, kurių vertė 255, nuo 1 iki 10. Ir nuo tada, ten buvo Daugiau įsikūnijimai Šiame žaidime, ir jie saugomi kaip iš margučiu rūšiuoti, kad Gandhi, matyt, taip siaubingai agresyvus. Tačiau ji buvo rezultatas labai paprasta programavimo klaida toje labai ankstyvame žaidimo versija. Dabar labiau nerimą, daugiau Neseniai "Boeing 787 buvo dokumentuota, turinčiais klaidą, o ne prietaiso rūšies kurią ypač nori turėti klaidų. Ir simptomai, kad aš skaityti čia iš straipsnio internete, buvo tai, modelis 787 lėktuvas , kuris buvo varomas nuolat už 248 dienų galite prarasti visus kintamoji srovė, AC, elektros energijos, dėl to, generatoriaus valdymo blokai, GCUs, tuo pačiu metu vyksta į saugus būdas. Taigi tai buvo įspėjimas išduotas kai ši problema buvo atrasta. Ši sąlyga sukelia pagal programinės įrangos skaitiklis vidinis GCUs, todėl sveikasis skaičius arba kintamasis, kad bus perkrautas po 248 dienų nepertraukiamo galią. Boeing yra iš proceso plėtoti GCU programinės įrangos atnaujinimas, kad bus ištaisyti pavojingą būseną. Taigi panašiai kaip raketa scenarijus, kuriame jie turėjo tam tikrą kintamojo natūra kad tikėjosi ir tikisi, ir tikisi, tačiau palaipsniui perpildyta kad jos galimybes ribas, Panašiai padarė Damn lėktuvu turėti kintamąjį perpildymo Po pakankamai laiko veikia. Ir taip kalba-in-skruosto būdas darbo išspręsti šią problemą yra tikrai, perkrauti, jūsų lėktuvas kiekvieną 247 dienų, todėl, kad atminties gauna išnyko paprastosios o kintamasis nueina į 0. Tačiau suprantame, kad tai labai didelis įsikūnijimas programinę įrangą, bet ypač kaip girdime apie "Apple" operacinės sistemos vyksta į automobilius, ir savarankiškai vairuoti automobilius iš "Google", ir bet įsikūnijimų programinės įrangos skaičius mūsų kasdieniame gyvenime, televizoriai ir laikrodžiai, ir daugiau, realizuoti buvo apsuptas programinę įrangą, kurie visi yra parašyta mus žmonėms. Ir kaip mes visi netrukus atranda, tai labai lengva ir labai tipiškas klysti, kai rašymo programinės įrangos. Ir jei jūs neturite juos sugauti, kai blogi dalykai gali atsitikti. Dabar kartais, kai juokingi dalykai gali atsitikti, arba bent kartais mes žinoti, kad tikėtis, kai blogumas. Taigi 0 padalintas 0, iš klasės mokyklos, paprastai yra blogas dalykas. Tai neapibrėžta. Ir paaiškėja out-- ir tegul pamatyti, jei mano mic gali pasiimti tai, kad "Apple up-- turėjo tam tikrą su šiuo įdomus neseniai. Taigi turiu iPhone čia. Aš ruošiuosi kalbėti "Siri" ir paprašyti ją kad man į 0 atsakymo padalinta iš 0. Kas yra 0, padalytą iš 0? SIRI: Įsivaizduokite, kad turite 0 slapukai, ir jūs juos padalinti tolygiai tarp 0 draugais. Kiek slapukai nėra kiekvienas asmuo gauti? Žr? Tai neturi prasmės. Ir Slapukas pabaisa yra liūdna kad nėra slapukus. Ir jūs esate liūdna, kad jūs neturite draugų. DAVID J Malan: Tai tipo nemalonus. Taigi tai, kas buvo ką tik pasakė ten. Tai neapibrėžta, tai nėra apibrėžta, Ir iš tiesų, daug programavimo kalbų ar tikrai, kompiliatoriai bus aptikti, kai jūs, į programą, pabandykite padalinti 0 iki 0. Smagiau nei šio, nors yra kad, matyt, Cookie Monster yra on Twitter šių dienų. Ir jis į tai atsakė, su tuo, kuri yra absoliučiai žavinga. Bet tegul greitai pažvelgti į kitų konstrukcijų pora, ir tada įdėti kai tai kodas naudoti, geros būdais. Taigi paaiškėja, be už kilpomis, ten kažkas vadinamas while cikle, kad atrodo kitaip ir yra įgyvendinama šiek tiek differently-- ir mes galų gale pamatyti examples-- bet tam tikra prasme, tai paprastesnis, nes juo neleidžia inicijuoti ir atnaujinti per kilpos ribos. Jūs vis dar galite ją įgyvendinti. Taigi jūs galite padaryti tikslius pačius dalykus su while cikle, kaip ir už kilpos, bet jūsų sintaksė, ultimately-- kaip mes galų gale see-- bus kitoks. Yra net while cikle, Do kuris iš tikrųjų yra šiek tiek kitoks, toje kadangi už kilpos ir while cikle visada patikrinti jų būklę pirma, jei jūs skaitote šį dalyką iš viršaus į apačią, Jis rūšies atrodo, kad jis ketina Check it būklę paskutinis, nes tai tikrai paskutinė eilutė kodo. Ir iš tiesų, kad tai bus naudinga į tam tikrų programų, kad mes rašome, jei norite tik aklai kažką daryti ir galiausiai patikrinti būklę. Tai nebūtinai yra blogas dalykas. Jei norime kintamuosius, mes galime padaryti ji įvairiais būdais pora. Ir matėme Foxtrot Cartoon, vienas iš būdų tai daryti, kur deklaruoti savo kintamasis, kaip int kovos kabliataškiu, ir tada later-- gal kitą linija, o gal 10 eilučių later-- jūs iš tikrųjų inicijuoti ją. Todėl šie 2 eilučių kodo paskelbti tipas int kintamasis ir vadina jį skaitiklis, todėl ji suteikia man pakankamai bitai surengti int. Ir tada galiausiai, tai kelia vertė 0 į tą kintamąjį. Ji organizuoja 0 "ir 1-ųjų A modelis, kad mes žinome, iš praeitą savaitę, atstovauja skaičių mes žinome, kaip 0. Arba atvirai, jūs galite tai padaryti daug daugiau glaustai, tiesiog patinka. Dabar mes taip pat turime gebėjimas skambinti funkcijas. Ir iš tiesų, čia 2 linija programa arba ištrauka dalį, kuri leidžia mums iš tikrųjų rašyti tam tikrą kodą, kad gauna iš user-- eilutę daug kaip mūsų savanorio akimirką ago-- saugoti į rezultatą kintamasis vadinamas vardas ir then-- panašiai kaip su mūsų savanore su printf-- spausdina šias vertybes išlaikius dviem argumentais eilutė, po kintamojo vadinamas, vardas, pati. Taigi leiskite pažvelgti, prieš mes einame atgal į Mario ten, esant dabar pavyzdžių ši pora. Aš ruošiuosi eiti į priekį ir atvira iki, tarkim, funkcijos 0.c. Ir kaip visada, šis kodas yra galima nuo kurso tinklalapyje, todėl jūs galite žaisti kartu ne Namai ir pažvelgti į ją vėliau. Bet čia programa tai esmė, nuo 17 eilutės iki 22. Pagrindinės programos yra, kur programa visada bus pradėti. Ši programa, matyt, vyksta spausdinti savo vardą, dvitaškis. Tai tada vyksta skambinti GetString, kaip mes padarėme su mūsų savanoriai. Ir tada, tai yra įdomus, jis ketina skambinti PrintName. Pasirodo, visą šį laiką, yra Atrodo, kad funkcija vadinama PrintName. Tai spausdina kažkieno vardą. Mes nereikėjo naudoti printf nuo pasekėjai, ten PrintName. Bet tai klaidinanti nes PrintName nėra ateiti su C. žmonės neturėjo sugalvoti ji prieš maždaug 40 ar 50 metų, Aš, vietoj. Ir iš tiesų, jei aš pereikite nustatantį tolesnes, pranešimu kaip aš galiu parašyti savo funkcijos C. Mes galų gale paaiškinti, kodėl mes nuolat sakydamas, negaliojančiu, keliose vietose, bet šiandien, tegul tiesiog pažvelgti į pavadinimą. On line 24, jei norite sukurti savo funkciją, Jums tiesiog parašyti Pavadinimas funkcija. Aš pasirinkau PrintName. Skliaustuose, jums tada nurodykite, kokių rūšių sąnaudų ir kiek jums nori, kad ši funkcija imtis. Šiuo atveju, aš noriu imtis 1 kintamasis vadinamas, vardas, ir jis ketina būti tipas, styginių, todėl jis ketina turi būti tam tikras simbolių seka. Ir tada, tai program-- panašiai kaip nulio, Jūs galite turėti pasirinktinį galvosūkį pieces-- teks šis paprotys elgesį. Ji ketina skambinti printf einančios, labas, vietos rezervavimo, ir tada ji ketina prijungti bet kokia vadinamas vartotojas. Taigi, šis yra pavyzdys, kas kompiuterių mokslininkas būtų kvietimas gavyba ar funkcinis skilimas, kuri yra tik išgalvotas būdai iš saying-- yra, jei Jums patinka šis aukšto lygio idėją, kaip aš noriu funkcionalumą, kad spausdina kažkieno vardą, visiškai jums galite tiesiog parašyti printf ir tada pereiti į argumentus, kuriuos norite, ir programa veiks, nes ji yra trečiadienį. Bet jūs galite pradėti abstrakti toli spausdinimo pavadinimą sąvoka. Jūs galite suteikti jai pavadinimą, kaip PrintName, o tai yra toks sluoksniavimasis savaitė 0 idėja. Nuo šiol, aš ir jūs neturite žinoti arba rūpintis, kaip PrintName įgyvendinama. Taip jis naudoja printf, gal ne, kas žino, kas naudoja? Kam rūpi? Dabar aš kalbu čia, vietoj žemyn čia. Ir iš tiesų, kaip mūsų programos gauti daugiau pažangių ir sudėtingų, mes ketiname gertumėte už suteiktas kad egzistuoja žemesnio lygio įspūdį. Nes mes juos parašė ar kas nors kitas padarė, todėl kad mes galime tada statyti ant jų. Paimkime į tai žiūrėti variantas, veikti vienas. Taigi tai viena yra šiek tiek daugiau pažengęs, tačiau paaiškėja, kad CS50 bibliotekoje, ten tik GetInt funkcija. Mes nemanė, prieš keletą metų, kad įgyvendinti GetPositiveInt funkciją. Ir tai šiek tiek erzina, nes jei vaikinai rašote programą besiskiriantis norite gauti teigiamas sveikasis skaičius nuo naudotojo, galite visiškai pasinaudoti GetInt. Ir jūs galite visiškai patikrinti su sąlyga, o gal kilpa jei tai int yra didesnis nei 0 ir klykauti ne vartotojui jei jis ar ji nesuteikia Jūs teigiamas skaičius. Bet Kurkime tai statybinis blokas save, A, užsakymą įbrėžimams gabalas, jei bus. Aš ruošiuosi turėti programą čia, kad galiausiai aš nori, kad būtų galima skambinti GetPositiveInt, ir aš noriu būti gali spausdinti bet kada, kad INT yra. Bet tai yra išgaunama toli dabar. Tai tiesiog buvo suteikta aukšto lygio pavadinimas, kuris sako, ką ji daro, kuri yra nuostabu, nes tai labai intuityvus dabar skaityti. Ir jei aš rūpintis, kas apačioje dangtis, leiskite man slinkite žemyn. Ir tai šiek tiek bauginanti per pirmąjį, ypač jei tai yra jūsų pirmoji programa, bet tegul pažvelgti. Aš nebe sakydamas negaliojančiu, nes ji Pasirodo, funkcijas, panašiai kaip GetString, gali grąžina reikšmę man. Jie ne tik turi spausdinti į ekraną, jie iš tikrųjų gali perduoti man kažką atgal. Ir o prieš PrintName, Man nereikėjo nieko atgal. I reikėjo šalutinį poveikį kažkas rodomi ekrane, bet man nereikėjo žmogų į rankas man kažką atgal. Čia su GetPositiveInt, kaip su GetInt, Noriu būti perduotas kažką atgal. Taigi aš sakau ne, tuščia, on-line 23, bet int, kurie sako, ši funkcija kad rašau, vadinamas GetPositiveInt ketina ranka mane atgal sveikasis skaičius, ne nieko, ne negaliojančiu. Tuo tarpu, ji ketina imtis jokių įėjimai, todėl aš, tipo, atstatomas ją. Aš ne suteikiant GetPositiveInt jokios įėjimas, noriu, kad jis man savo produkciją. Ir kas tada atsitinka dabar? Taigi čia, kaip aš galiu paskelbti kintamąjį. Aš padariau tai už kilpos, dėl priežasčių, mes galų gale pamatyti, bet tai tik suteikia man 32 bitai vadinami, N, ir aš iš anksto nustatyti juos saugoti sveikasis skaičius. Ir čia, kad padaryti, o konstruktą, ir tai, kodėl tai naudinga. Pažodžiui tai padaryti, o n yra mažesnis už 1. Taigi pažiūrėkime, kas vyksta. Aš atsispausdinti, prašome man teigiamą int. Tada aš gauti int, naudojant CS50 s veikti ir saugomi n. Ir tada, ką eilutę kodo tikriausiai paleidžiama vykdyti kitas, logiškai? Kuris eilutės numeris? Taip, taip, 31. Jūs nebūtų žinau, tai, kol jūs buvo pasakyta, ar rūšiuoti išvadą, kad, bet tai tiesa. Jis eina iš viršaus į apačią ir tada kartoja. Taigi, jei aš įvedėte tarkim, skaičius neigiamas 1, yra n mažiau nei 1 neigiamas? Taip. Nes neigiamas 1 yra mažesnis kaip 1. Taigi, kas turėtų atsitikti? Aš ruošiuosi tai padaryti o n yra mažesnis už 1, todėl aš ruošiuosi grįžti į eilutę 28. Ir kiekvienas LAIKĄ_ ir tegul eina this-- kad funkcija nuo 1 iki kaupia jį, ir dabar dot velniop funkciją 1. Jei aš tipo neigiamą 1, tai ketina išlaikyti šaukiantį mane kol aš bendradarbiauti, nes kiekvienas mano įėjimai yra mažiau nei 1 ir jei ji, o mažesnis už 1, Aš ruošiuosi laikyti tai daryti. Jei aš pagaliau suteikti jai skaičių kaip 50, Laimei, ji sako, ačiū už 50. Kodėl? Nes, kai tik n yra ne mažesnis kaip 1, sustabdyti strigti šios kilpos, ir tai naujas raktažodis šiandien grąža, tiesiog tai daro. Taigi aš tiesiog įgyvendinama, A prasme, GetString atitikmuo, kur aš atiduodami atgal į kas naudoja manimi, kai vertę. Ji neturi būti eilutė, tai int. Taigi paprastas, greitas pavyzdžiui, bet mes greitai pamatyti šiek tiek daugiau sudėtinga versijos dar. Iš tiesų, tegul ne išvaizdą skaitinė vienas, kuris yra vadinamas return.c. Ir tai vienas tikrai šiek tiek paprastesnis. Taigi šios programos paskirtis life-- tegul kaupia ir paleisti jį, todėl, kad grąžą, dot velniop, return-- pranešimas programa tiesiog kubeliai vertės 2. Tai gana kvaila, sunku kodas, ji nesiima jokių sąnaudų, tačiau ji įrodo, kita funkcija, kad aš parašiau save. Taigi čia aš deklaruotas kintamasis, vadinama x, int tipo, lygus skaičiui, 2, visiškai savavališkas. Tai tik keletas purus spausdinimas. Ji sako x yra dabar tokia ir pavyzdžiui, cubing dot dot dot. Ir magija yra, matyt, atitinka 21. Aš paskambinę funkcija vadinama, kubas, Aš atiduodami jam popieriaus lapą su numeriu 2 parašyta ant jo, ir kas vertė, matematiškai, aš noriu gauti iš jo? Tiesiog kaip normalumas patikrinti? 8. Teisė? Noriu 2 Cubed atgal, 2 3 galios, todėl 8 atgal. Taigi, kur yra kubas įgyvendinti? Na, pastebite, kad įgyvendinama žemyn čia. Ir kaip anksčiau logiška, nors sintaksė tikriausiai labai nauja ir daugelis iš jūsų, Noriu šią funkciją ranka mane atgal lapą popierius su ant jo tarpt. Taigi turiu int, kad vardas savavališkai, bet patogiai vadinamas kubas. Įvesties į jį, yra n tipo sveikasis skaičius, taip, kad tai kaip aš galiu pereiti į numerį 2 ant popieriaus lapo. Ir tada paaiškėja, C palaiko matematikos, todėl jūs neturite x'S laikais, jūs tiesiog naudoti žvaigždutę dauginti. Ir tai grįžta n kartų n kartų n, kuris yra tiesiog Cubed vertė. Taigi, kur mes einame su visa tai? Tai tikrai viesulas kelionė, būkite tikri, kad super sekcijų ir problema nustatyti 1, jums bus vaikščioti per visa tai visi daugiau. Ir problema Set 1, mes pereiti nuo grafinę pasaulyje nulio į kažką daugiau komandų eilutės C Bet mes semtis įkvėpimo iš šio žaidimo čia nuo pasekėjai, kuriame naudojant C ir standartinis leidimas p rinkinys jums įgyvendinti Mario piramidę. Ir hacker leidimas p rinkinys, jei to pageidautų išrinkti, Jums bus įgyvendinti šiek tiek daugiau sudėtinga piramidę su dviejų smailių. Jūs taip pat įgyvendinti plataus algoritmas, godus algoritmas. Pasirodo, ten įdomių logika už proceso veikia kasininko darbo vietoje ir iš tikrųjų dalijamos kažkas vėl pokyčiai. Yra algoritmas, kuris gana paprasta, kad galbūt net suvokti intuityviai, kai pirmą kartą perskaičiau it-- suprasdamas, kad tai, ką aš visada padaryti bet kuriuo metu aš tikrą žmogų, kai pinigų back--, kuri leidžia jums visada sumažinti skaičių popieriaus banknotai ar metalų monetos kad jūs atiduodami atgal vartotojui. Ir tai, žinoma, yra būtinybė nes jei jūs einate į CVS ar Papuošalą, Jūs nenorite būti paskelbtas visa krūva tie arba visa krūva centus. Jūs norite Retas monetas, tikriausiai, įmanoma. Galiausiai, jūs taip pat būti ginčijami taškytis vandens pasaulyje ir faktiškai gauti dėkingi kovai tarp normos srauto žemėlapių, panašaus, vandens dušu, tik kiek yra naudojamas vanduo,. Ir jame aliuzinis, bus šis įrašas čia kurį mes galų ant vos 60 sekundžių, kad piešia paveikslėlį mažo srauto dušo galvutes. [Vaizdo įrašų atkūrimas] -Gerai. Aš turiu viską, čia. Gavau Cyclone F serija, Hidra, Jetflow, Stokholmas Supersteam, you name it. -O Ką jūs rekomenduoti? -Ko tu ieškai? Power žmogus. Maitinimo. -kaip Silkwood. Išmokėtą sumą yra radiacijos. -Teisingai. -Dabar, Kas tai yra? Išmokėtą sumą aisiais Commando 450. Aš neparduodame, kad vienas. -Bet Tai, ką norime. Tai Commando 450. -Ne Patikėkite manimi. Jis naudojamas tik cirko. Tai dramblys. -I'll Nieko mokėti. -Kas Apie Jerry? -Jis Negalėjo dirbti, kad. Jis subtilus. O taip. [PABAIGA PLAYBACK] DAVID J Malan: Visos dešinę. Tai jei dėl CS50-aisiais. Mes jus pamatyti kitą savaitę. GARSIAKALBIS 1: [? Scully?] [? Ian,?] kiek šioje Outro projektą ką jūs vaikinai sugalvoti? SPEAKER 2: Na, mes jau davė tai minties įvairovė, ir mes manome, kad geriausias būdas to-- GARSIAKALBIS 3: Ar galiu? SPEAKER 2: Taip. Visomis priemonėmis, iš tikrųjų. GARSIAKALBIS 3: Taigi, manau, mes galime Apibendrinant mūsų idėja už su vienu word-- nieko outro. DAVID J Malan: Nieko? GARSIAKALBIS 3: Nieko. DAVID J Malan: Ką tai reiškia? GARSIAKALBIS 3: outros yra apie nieką. SPEAKER 2: Na, aš turiu galvoje, filosofijos, Aš turiu galvoje, nieko visada yra kažkas. GARSIAKALBIS 1: Taigi what's-- kas yra prielaida? GARSIAKALBIS 3: Taigi, tai, kaip gyvenime. GERAI. Ką jūs darote šiandien? DAVID J Malan: Atsikėliau, turėjo Pusryčiai ir atėjo į darbą. GARSIAKALBIS 3: Tai labai Outro. SPEAKER 2: Bet aš turiu galvoje, neturėtų kažkas atsitiks jam ant the-- GARSIAKALBIS 3: Ne, ne, ne, ne. Nieko neįvyksta. GARSIAKALBIS 1: Tad kodėl mes žiūrime? GARSIAKALBIS 3: Kadangi tai yra už CS50 Outro. DAVID J Malan: Dar nėra.