DAVID J MALAN: Minden Rendben, tehát ez CS50. És ez egyértelműen pénteken. És ez az a hét végére egy. Szóval lehet felidézni, hogy mi maradt ki, utoljára, egy filmsorozat a fajta. Mely által ki ezt a hazugságot, hogy nem Mindegy, mit tanítottak növekvő up, 1 osztva 10 nem, a Tény, 0,1 vagy 0,100, illetve 0,10000. Sőt, ha fordítani ezt programot, mint mi tegnap,, teszik pontatlanság, majd do pont, perjel, pontatlanság, megtudtuk, hogy ez az, amit az 1 osztva 10 valójában. Szóval ez nem igazán a helyzet. De ez nem hint néhány alapvető korlátozása számítógépek. És valóban, többek között a dolgokat fogunk csinálni ma megnézzük, hogy ez miért van történt, milyen hatásai vannak ennek, hogyan emberiség nem megragadni ezt a néhány nagyon Súlyos situations-- az eredmény az, amely már elég tragikus és expensive-- és vessünk egy pillantást, hogyan valóban védeni ezek ellen a korlátozásokat. Tehát intuitív módon, talán, miért van 1 osztva 10, szerint a számítógépem Itt nem csak 1/10, 0,10? Igen. Mit gondolsz? Közönség tagja: a radix a különbség? DAVID J MALAN: A mi? Ó, a radix a különbség? Szóval nem egészen. Ez valójában több alapvető fontosságú a hardver. Más gondolatok? Igen. KÖZÖNSÉG TAG: jelentik a számokat másképp? DAVID J MALAN: Szóval they-- jobb. Ők jelentik a számokat másképp. Pontatlanul, látszólag. Annak érdekében, hogy is-- Nos, eltérően, mi? Vagy kitől? Tőlünk? Közönség tagja: Igen. Nem használják a tizedes rendszer [hallhatatlan]. DAVID J MALAN: OK. Tehát bizonyos értelemben, nem az használja a decimális rendszert. A motorháztető alatt, mindent, sőt, bináris, és ez a kapcsolódó, az tény. De ez még egyszerűbb magyarázatot, mint hogy. Igen. KÖZÖNSÉG TAG: Csak olyan sok bit. Ők csak tárolni egy bizonyos mértékben, mint a tizedes. DAVID J MALAN: Igen. Ez az, ami igazán kapok rá. Kiderül, hogy a számítógépek jellemzően, mindig csak használjon egy véges mennyiségű információt hogy valamit ábrázol. Jobb? Végtére is, már csak egy fix mennyiségű hely a merevlemezen. Már csak egy fix összeget RAM, vagy a számítógép memóriájában. És ha csak egy fix összegű valamit, Biztosan akkor valójában nem számít fel a végtelenbe, vagy bármilyen kívánt számot. Te, milyen, meg kell válogathat milyen tartományban Az értékek fogsz támogatja. És így például egy-két hét ezelőtt, amikor beszélgettünk ASCII, és beszélgettünk 8 bit, vagy egy bájt, hogy úgy mondjam, A legnagyobb szám tudtunk képviseli a 8 bites volt, mi? 255. És tudjuk képviselni 256 teljes értékek de akkor nem, ha tölteni az egyiket A 0-- Nos, de ha tölteni az egyiket 0, akkor a legnagyobb szám természetesen, 255. Így kiderül, hogy ez az esetben is, ebben az összefüggésben. Elkezdtünk beszélgetni, utoljára, mintegy lebegőpontos számok, amelyek eltérnek egészek, a hogy van egy tizedesvessző és remélhetőleg néhány szám után, de ezek túl. A számítógép csak a tipikusan megy használni 32 bites, talán 64 bit hogy képviselje a lebegőpontos értéket. Tehát még akkor is, felnőttem tanulás matematika és tudván, hogy akkor feltétlenül meg végtelen számú számok tizedesvessző után, nem ha véges memória. Te, milyen, meg kell kerekíteni, vagy válogathat, amelyek szám fogsz képviselni. És így lehet gondolni, bizonyos értelemben, ez az a számítógép legközelebbi közelítés értéke 1/10, hogy kaphat, csak 32, vagy úgy bit. És ez nem csak 1/10. Például, ha ezen változtatni kell 1/3, ami szerintünk ennél is egyszerűbb. Tehát 1 osztva 3. Hadd menteni a fájlt. Hadd menjen előre, és újrafordítani azt. És hadd újra futtatni. Itt is, mint kiderült, 1/3 nem 0.3 majd egy végtelen számú 3'S azt követően. Itt van ez a pontatlanság végén. Tehát mi, emberek helyes, és mi megtanultad, valójában, helyes, de ütközünk fel ellen bizonyos korlátai. És mit gondoltam tennénk ma is kezdődik nézi, őszintén szólva, a tragikus következményei ennek Néha, amikor az emberiség nem elég végrehajtása Ennek valóság és ezeket a korlátozásokat. És majd meglátjuk egy sor matricák A History Channel vevő Nézd meg, hogy a dolgok rosszul sikerült. Arról van szó, 8 perc hosszú, és mi után visszatért ezt és nézd meg, hogy pontosan mi mást lehet baj. Ha tudnánk homályos a lights-- [Videó lejátszás] -Computers, Most már minden el fogjuk fogadni, A gyakran frusztráló problémák menjen velük. Hibák, vírusok és szoftver hibák kicsik árak fizetni a kényelmet. De a high-tech és a nagy sebességű katonai és űrprogram alkalmazások, A legkisebb probléma nagyításban is a katasztrófa. Június 4-én, 1996, a tudósok elő hogy indítson egy pilóta nélküli Ariane 5 rakétán. Ez vitt tudományos műholdak tervezett megállapítani, pontosan hogyan Föld mágneses mezeje kölcsönhatásba lép A napszél. A rakéta épült Az Európai Űrügynökség és elemelkedik a létesítmény partján a Francia Guyana. -És Mintegy 30 másodperc A repülés először észrevette, hogy valami nincs rendjén. Hogy a fúvókák voltak elfordítható oly módon, hogy tényleg nem kellene. 40 másodperccel a repülés, egyértelműen a jármű bajban volt, és ez mikor történt a döntést, hogy elpusztítsa azt. A tartomány biztonsági tisztviselőt óriási bátorság megnyomta a gombot, felrobbantotta a rakétát, mielőtt tudott vált veszélyt a közbiztonságra nézve. -Ez Volt a leánykori út az Ariane 5, és pusztítások a helyet, mert egy hiba beágyazva a rakéta program. -A Probléma a Ariane az volt, hogy volt egy szám, amely szükséges 64 bit kifejezni, és azt akarta átalakítani azt, hogy egy 16-bites számot. Azt feltételezték, hogy a szám soha nem lesz nagyon nagy, hogy a legtöbb ilyen számjegy A 64 bites szám volt 0 években. Nem volt igazuk. -A Képtelensége az egyik szoftver elfogadni az a fajta által generált Egy másik volt a gyökere a hiba. Software kidolgozása vált nagyon költséges része az új technológia. Az Ariane 4 rakéta volt nagyon Sikeres, annyira a szoftver létre azt is használják az Ariane 5. -Az Alapvető probléma az volt, hogy az Ariane 5. gyorsabb volt, felgyorsult gyorsabb. És a szoftver nem volt elszámolni, hogy. -A Megsemmisítése a rakéta Egy hatalmas pénzügyi katasztrófa, minden miatt egy perc szoftver hiba. De nem ez volt az első idejű adatok konverziós problémák már sújtja a modern rakétatechnika. -A 1991-ben, a start Az első Öböl-háború, A Patriot rakéta tapasztalt hasonló jellegű A számkonverzió probléma. Ennek eredményeként a 28 ember, 28 amerikai katona megöltek és mintegy 100 másik megsebesült, amikor a Patriot, ami kellett volna ellen védő bejövő scuds, nem a tűz egy rakéta. -Amikor Irak lerohanta Kuvait és Amerikában indított Sivatagi Vihar 1991 elején, Patriot rakéták akkumulátorok vezényeltek hogy megvédje Szaúd-Arábia és Izrael az iraki Scud rakéta támadások. A Patriot egy amerikai, közép-hatótávolságú felület-levegő rendszer által gyártott Raytheon cég. -A Méret a Patriot elfogó, önmagában körülbelül, mintegy 20 láb hosszú. És a súlya körülbelül 2000 fontot. És hordoz robbanófejet a about-- Azt hiszem, ez körülbelül 150 fontot. És a robbanófejet, önmagában, egy magas robbanásveszélyes, amely fragmensek körül. A ház a robbanófej célja, hogy úgy viselkednek, mint sörét. -A Rakéták végzett, 4 per konténer, és szállítják a félpótkocsi. -A Patriot elleni rakétarendszer nyúlik vissza, legalább 20 éve. Ez eredetileg tervezték mint egy légvédelmi rakéta lő le az ellenséges repülőgépek. Az első Öböl-háború, amikor a háború jött, A hadsereg akarta felhasználni arra, hogy lő le scuds, nem repülőgépek. Az iraki erők nem volt így sok a probléma, de a hadsereg aggódott scuds. És így igyekeztek frissíteni a Patriot. -Intercepting Ellensége rakéta haladó meccs öt volt, lesz elég ambiciózusak. De amikor a Patriot rohant helyezését, A hadsereg nem volt tisztában a Iraki módosítása tette a scuds szinte lehetetlen eltalálni. -Mi Történt, a scuds, hogy jöttek be, nem volt stabil, ők imbolyog. Ennek az az oka, volt az irakiak, annak érdekében, hogy 600 kilométernyi ki a 300 kilométeres hatótávolságú rakétát, vette súlya ki az első robbanófej és így a robbanófej könnyebb. Tehát most, a Patriot próbál jönni a Scud, és az idő nagy részében, A túlnyomó többsége időben, akkor csak repülni a száguldás. -Ha A Patriot-üzemeltetők rájött, hogy a Patriot elvétette a célt, úgy felrobbantotta a Patriot robbanófejet, hogy elkerülje az esetleges baleseteket, ha Hagytuk, hogy leesik a földre. -Ez Volt az, amit a legtöbb ember látta, azokat a nagy tűzgolyók az égen, és félreértik, mint elfogja a Scud robbanófejeket. Bár az éjszaka égbolt, Patriots megjelent hogy sikeresen pusztító scuds, a Dhahran, nem lehetne hibát annak teljesítményéért. Ott, a Patriot radarrendszer tudta követni a bejövő Scud, és soha nem indult, szoftverhiba miatt hiba. Ez volt az izraeliek, aki először fedezte hogy minél hosszabb a rendszer volt, annál nagyobb az időeltérés vált, mivel egy óra beágyazott A rendszer számítógépét. -közelítòleg Előtt 2 héttel A tragédia Dhahran, Az izraeliek jelentett A Honvédelmi Minisztérium, hogy a rendszer időveszteség, hogy miután körülbelül 8 óra futás, amikor észrevették, hogy a rendszer egyre észrevehetően kevésbé pontos. A Honvédelmi Minisztérium reagált, mondja minden a Patriot akkumulátorok hogy nem hagyja el a rendszert a hosszú ideig. Soha nem mondtam, amit sokáig volt. 8 órán? 10 óra? 1000 óra? Senki sem tudta. -A Patriot akkumulátor állomásozott a laktanyában A Dhahran, és annak hibás belső óra, már több mint 100 óra én éjjel február 25. -Ez Lánctalpas időt pontossággal A mintegy 1/10 másodpercnél. Most 1/10 egy második Érdekes száma mert nem lehet kifejezve bináris, pontosan. Ami azt jelenti, hogy nem lehet kifejezhető, pontosan, minden modern digitális számítógép. Nehéz elhinni, de Használja ezt a példát. Vessünk száma, 1/3. 1/3 nem lehet kifejezni decimális, pontosan. 1/3 0.333 folyik a végtelenbe. Kizárt, hogy ezt megtehessük, a Abszolút pontossággal, a tizedes. Ez pontosan ugyanolyan probléma, hogy történt a Patriot. Minél hosszabb a rendszer futott, a rosszabb az idő, hiba lett. -A 100 üzemóra, a hiba időben csak mintegy 1/3 a második. De tekintve a célba rakéta haladó meccs 5, ez eredményezte a nyomkövető Hiba több mint 600 méter. Lenne egy végzetes hiba A katonák Dhahran. Mi történt, egy Scud elindítása volt által észlelt korai előrejelző műholdak, és új, hogy a Scud volt jön az általános irányt. Nem tudom, hol jön. -Ez Most már csak a radar komponens a Patriot rendszer, védő Dhahran, hogy keresse meg és tartsa követni a beérkező ellenséges rakétát. -A Radar nagyon okos. Ez valóban követni a helyzet a Scud majd megjósolni, ahol valószínűleg lenne, A következő alkalommal, a radar küldött impulzust ki. Ez volt az úgynevezett tartományban kaput. -Akkor, Ha a Patriot úgy dönt, elég idő van telt, hogy menjen vissza, és ellenőrizze a következő hely erre észlelt objektum, megy vissza. Tehát amikor visszament a rossz hely, ez aztán nem lát tárgy és úgy dönt, hogy nem volt objektumot, ez egy hamis nyomozás, és eldobja a pályán. A beérkező Scud eltűnt a radar képernyőjén, és másodperccel később bevágta a várba. A Scud megölt 28 és az utolsó egy égetett az első Öböl-háború. Tragikus, a frissített szoftver megérkezett Dhahran a következő napon. A szoftver hibája volt rögzítették, záró egy fejezet van a bajba jutott történelem, a Patriot rakéták. [Lejátszás vége] DAVID J MALAN: Szóval vessünk egy pillantást néhány hasonló korlátozások csak egy kicsit. De először nézzük átmenet egy pár FYI van. Tehát one-- ezen a hétvégén, ott lesz szuper szakaszok, amelyek célja, hogy kiváltsa rendszeresen ütemezett szakaszok, amelyek elindul egy hét múlva. Vessen egy pillantást a CS50 honlapján További információ ezekről. Ők is forgatták, és áramlott élnek, akik nem tudnak részt venni. Probléma állítsa 1 van a Természetesen honlapján már, és mi megnézzük hogy csak egy kicsit. És munkaidőn túl, fog helyezze a hétfőtől csütörtökig. Szóval ez volt a legnagyobb kanonikus programot néztük utoljára. Ez olyan, mint a legegyszerűbb programmal lehet írni a C, és még ez egy kicsit merész állítás. Jobb? Mert van egy csomó látszólagos összetettsége e. Szóval vessünk egy gyors pillantást amit néhány ilyen elem volt, majd próbálja nyújtani A mentális modell arra, hogyan Ezek legegyszerűbb program dolgozni, majd kezdjük nézi a dolgokat egyre összetettebb. Tehát ez a sor itt, kiemelve most, sárga, mit mondunk, utoljára, hogy ez nekünk? Mi a célja, hogy szolgálja? Bárki távolabbról vissza? Igen. Közönség tagja: [hallható] DAVID J MALAN: Jó. Szóval ez ad hozzáférést a parancsokra, vagy menjünk hívjuk őket funkciókat, hogy valaki más írta, hogy bejelentették, hogy úgy mondjam, néhány más fájlt. Szóval majd meglátjuk, pontosan mi a .h fájlt van szemben egy .c fájlt, végül. De most, csak tudom, hogy printf, például, között van a funkciókat, hogy már bejelentett más fájlt, valahol máshol a felhő merevlemez, lehetővé teszi számunkra, hogy hozzáférést printf és használja anélkül, hogy újra feltalálni hogy a kerék magunkat. Közben fő. Mi volt az analóg fő, a múlt héten? Igen. Közönség tagja: Zöld zászló kattint. DAVID J MALAN: Igen. Scratch években, amikor a zöld zászlót kattintott. Ez olyan, mint a puzzle-darabot hogy indul dolgokat ki. És így hasonlóan, nem a világ úgy döntött, néhány évvel ezelőtt, hogy a C- és egy csomó más nyelveken, Ha akarsz írni egy programot, Az első funkció azt, hogy hívják, fő. És azt, hogy néz ki. De mi jön vissza, Egy másik alkalommal, hogy mit, int, és, semmisnek jelenti ebben az összefüggésben. Most, a kapcsos zárójelek természetbeni hasonló Scratch puzzle darab alakja amely magában foglalja bizonyos sorok száma. És közül a vonalak Itt van ez itt. printf egy olyan funkció, amelynek célja a az élet nyomtatni egy formázott karakterláncot. És formázott, azt jelenti, lehet csatlakoztatni helykitöltő értékek, és megadhatja, hány tizedesjegy pont, hogy hány számot nyomtatni után egy tizedespont és hasonlók. És a printf, persze, úgy egy vagy több érvek vagy paraméterek, más néven még egyszerűbben, mint bemenet. Szóval printf, mint sok funkciók, úgy bemenet. És ezek a bemenetek felkarolta a két zárójelben itt. És belül azoknak az egyik bemenet. Ez egy string, ahogy mi is hívták, ami csak egy karaktersorozat, mint egy szót, vagy kifejezést, vagy egy egész esszé sőt, dupla idézőjelek közé. És ez az, ami fogja befolyásolni a viselkedését printf, mert természetesen, ez csak egy általános nyomtatási funkcióval. Ez nem fog tudni mit nyomtatni, ha nem mondja meg. És akkor, néhány vonását. Mit mondunk ez a fura szimbólumok sorozatát is? Igen. Közönség tagja: Új sor. DAVID J MALAN: Új sor. Így kiderül, akkor nem csak a hit, adja, amikor írsz a program. Általában a fordító fog kapni egy kicsit zavaros, hogy mit gondolsz. Inkább meg kell szó szerint azt mondják, hogy nekem egy új sor itt. És így / n, amit általában hívja escape karakter. Tehát n, az új vonal. És a fordító tudja hogy ha látja / n, azt valójában rábírja a számítógépet, végül, vagy printf, ebben az esetben, kinyomtatni egy aktuális vonal, mint ütő a, írja, gombot a billentyűzeten. És végül, milyen is mondtunk ez a darab szintaxis számára? Mit jelentenek? Igen. Közönség tagja: [hallható] DAVID J MALAN: Ez csak a végén a vonal. Ez a végét jelenti. És rájönnek, hogy mi nem tedd őket mindenütt. Mi biztosan nem őket végein minden sorban. Például, ott sem a első sorban, ott sem a vonalon a, fő, ott sem miután a kapcsos zárójelek de akkor elkezd látni, és kap ismerik, ahol ez indokolt. És ez szinte mindig, miután egy függvény hívjon vagy egy nyilatkozatot, néhány fellépés hogy te tényleg figyelembe. És most már tudom, különösen, ha azok között, kevésbé kényelmes, Ezek azok a fajta hülyeségeket hogy akkor a végén véletlenül dörömböl a fejét a falba fölött. Mert akkor logikusan magabiztos néhány probléma ha már megoldódott a probléma set, és a szart, csak nem fordul le, vagy akár futni. És olyan gyakran, korán, ez lesz a az oka, hogy kimaradt egy zárójel, vagy ha kimaradt egy pontosvessző. És így csak legyen tudatában Az ilyen dolgokat, és próbáld meg nem kap csalódott őket, mert nagyon gyorsan teszi ezt megöregszik kalapot. De ez nagyon könnyű eljutni frusztrált korán, ennek eredményeként. Tehát most, vessünk egy pillantást, hogyan ezen a vonalon valóban működik majd nézd meg enyhén bonyolultabb egy. Tehát van itt, a képesnek kell ezen a képernyőn. És tegyük fel, hogy ez az én számítógép képernyőjén, de írom a Hello program és én nem hajtották végre, printf. Valaki végre, printf. Ki szeretné azt állítják, hogy hajtották végre, printf? Ha mi is? Rendben, mi a neved? DIÁK 1: [? Kopál. ?] DAVID J MALAN: Copal, gyere fel. Gyere fel. Minden rendben. Tehát van itt néhány név címkék, hiszen csinálni fogunk egy kis játék ezen. És mi fog hívni, printf. És ha azt szeretnénk, hogy jöjjön ide, amit épp most húzott a képernyőn, ez egész egyszerűen, van nekem, ez az. Rendben, szóval, hello my name is, printf, ha azt szeretné, hogy tegye, hogy a. Minden rendben. És ha tudsz menni állvány a számítógép képernyőjén mintha te vagy a funkciót, hogy jött ezzel a számítógépes rendszer. És a célja az életben van hogy ténylegesen nyomtatni valamit. De ugyanúgy, mint a programunk most volt a képernyőn, itt, mi lesz, hogy valóban ad némi bemenet. És így, ha a bemenet, itt, Úgy tűnik, hogy mi vezetjük a printf, nézzük milyen gúnyolni fel, mint ez. Megyek szó írjon egy darab papírra, hogy "hello, világ" backslash N. És hogy világos legyen, mit Most levonni ezt a papírt, így néz ki. Tehát, amikor elindul a program, és ezt a sárga vonal kód kerül végrehajtásra, olyan, mintha én, a Hello program am átadta néhány bemeneti ki, hogy egy függvény hogy valaki más írta. És ha, az ujjával, ténylegesen, az ujjával, rajzolni bármilyen ez akkor már átadta, A hatás végső soron az, hogy pontosan lássa, hogy a képernyőn. És egy kis sarok helyzet. És jó, nem szabad látni a, új vonal, ezen a ponton. Helytelen lenne az Ön számára hogy kifejezetten felhívja az új sor. De ha az írást szó a képernyőn, akkor a végén alá. Szóval nagyon köszönöm, de ragaszkodik itt csak egy pillanatra. Most kell egy másik önkéntes, ha tudnánk, hogy lesz szüksége, hogy játszani of-- Ez csak az emberek a zenekar most. Hogyan about-- OK. Pont itt. Gyere fel. Mi a neved? Diák 2: [? Ivay. ?] DAVID J MALAN: Sajnáljuk? Diák 2: [? Ivay. ?] DAVID J MALAN: Ethan, gyere fel. Nem? Kaptam, hogy rossz, akár Miután kétszer mondtam? Gyere fel. Nehéz hallani itt. OKÉ. És sajnálom, hogy mi a neve? Diák 2: [? Ivay. ?] [? DAVID J MALAN: Ivay. ?] OKÉ. Mert most, ha nem szem előtt tartva, akkor getString. Diák 2: OK. Cool. DAVID J MALAN: Tehát, ha szeretné itt állni egy pillanatra, vessünk egy pillantást egy kicsit bonyolultabb programot, amely most három sornyi kódot. Tehát van egy, adja meg nevét használva printf; Két, a hívás getString, majd olyan feladat, hogy a nevű változó, s karakterlánc, vagy nevezzük s; majd egy másik hívás, printf, de ezúttal két bemenettel. Szóval ezt már megtettük állam Ön nevét, vagy inkább, most már Már eddig is printf hívást. Így fogok írni, be a nevét. És igen, milyen fogok át, printf, csak egy pillanatra, egészen egyszerűen, ez. Tehát ha azt szeretnénk, hogy menjen előre, és felhívni a A képernyőn, ez a bemeneti most. Minden rendben. És felejtsd húr, most már van saját kódsort itt. Tehát, getString van szükségünk hogy valóban hívja, getString. Tehát a célja az életben, hogy csak gyalog ki a zenekar, ha lehetne, és kap valaki nevét. De nézzük kapsz valamit tenni azt. Ha azt szeretnénk, hogy menjen előre, és kap egy string, valakit nevét, hogy darab papírt, ha lehetne. Minden rendben. És majd meglátjuk, egy pillanat, akinek a nevét már kezd. Közben mi fogok készen, van egy üres Papír, amelyben, megyek tárolni bármilyen értéket az, hogy getString visszatér hozzám, Azt, hogy egy string változó nevű, s. Minden rendben. Szóval mi van itt? Nik. Minden rendben. Tehát van Nik nevét. Szóval ez az, amit szó szerint került vissza nekem, hogy úgy mondjam, a getString. Én, most megyek, végrehajtja a bal oldali e kifejezés, ahol egyszerűen másolja le, a mai célra, Nik. Tehát most, van egy változó nevezett, s, tárolására Nik nevét. Már átadta printf, a korábbi érvelést. De mi a harmadik és egyben utolsó sorban a kódot, én valójában a kezét printf egy kicsit different-- "hello,% s," backslash n. És így az utolsó sort fogok hogy send-- az utolsó dolog, én vagyok megy, hogy írja le őt, ez. Tehát a két sornyi kódot, vagy inkább az utolsó sorban a kód, kéri, hogy a két inputs-- egy, ez, és a két, ez. Tehát, ha a printf függvény Most ezeket a bemenet, hadd törölje a képernyőt az Ön számára. Igazából nem, akkor megy előre. Majd rá kellene bízni, hiszen ez ugyanazon a programot. Meg kell látni, hello, Nik. Minden rendben. Szóval ez volt jó néhány karikán ugrik át, csak írni, közölje Íme, valamint, hello, Nik. De ez az egyszerű ötlet, üzenetekkel, A bemeneti és kimeneti tompított fogadó, Pontosan a modell fogunk van még a legbonyolultabb feladatokat. Szóval nagyon köszönöm mindkettőtöknek. Van egy szép stressz labda itt. És köszönöm, hogy mi getString és a printf önkéntesek számára egyaránt. Köszönöm. Minden rendben. Köszönöm mindkettőtöknek. Így már beszélünk Eddig, főleg arról szálakat. És kiderül, hogy a C ténylegesen megérteni néhány különböző adattípusok. Tény, vessünk Nézd meg ezeket itt. Szóval C, és a sok nyelv, megérteni a dolgokat nevű karakter. A char általában egyetlen bájt, illetve nyolc bit. És ez jelenti egyetlen karakter, mint az A betű, vagy a fővárosban A betű, vagy a kisbetű Egy, vagy egy felkiáltójel, vagy bármely karaktert beírhatja a a billentyűzet, és néha még több. Azt is megtörténhet, hogy úszik a vízen. Az úszó, általában, egy 32-bites érték, vagy négy bájt mert megint egy bájt nyolc bit. Tehát egy úszó egy lebegőpontos értéket, valami egy tizedes pontossággal. És valóban, ez az, amit a film beszélt mikor beszéltek úszó pont értékeket, néhány rögzített számú bitet használják, hogy képviselje a valós szám. De van még dolgokat az úgynevezett páros. Ezek léteznek Java, Ha már vett APCS, és egy dupla, mint a neve is hálásan sugallja, kétszer olyan nagy, mint egy úszó. Ez még mindig egy valós szám, csak éppen több bitet amellyel lenni az egyre pontosabb, vagy tárolni, még nagyobb számban. int egyszerű. Beszéltünk arról, hogy utoljára. Ez csak egy szám. És ez általában 32 bit, vagy négy bájt. És igen, ha van, lássuk most, 32 bits-- és mi tette ezt a hét 0, még oly briefly-- ha 32 bit, mi a legnagyobb száma Be tudja képviselni egészként? Plusz-mínusz? Olyan ez, mint 4 milliárd, és ez csak akkor, ha mi vagyunk képviselő pozitív számok csak. Ha van 32 bit, és szeretne képviseli a negatív számokat is, A tartomány lényegében negatív 2 milliárd pozitív 2 milliárd. De általánosságban, elkezdünk 0 csomagnál akár 4 milliárd euróra. Nem kell tudni pontosan, de látjuk ezt, sőt, ha csak úgy nyit egy kis számológép, itt. Meg tudom csinálni 2 a 32, és a hogy pontosan mekkora, hány érték tudsz képviselnek, 32 bit. És ez nagyjából 4 milliárd. Szóval mi is látom, hogy számos néhány különböző helyeken. De ha kell többé számok, mint az, Kiderült, hogy a egy úgynevezett hosszú, hosszú. És hosszú ideig általában 64 bit, ami azt jelenti, hogy egy nagyságrenddel még nagyobb, mint egy int. Szóval én nem is kimondani a legnagyobb hívható képviseli, de ez jelentősen nagyobb. Most Mellesleg, történelmileg, ha egy int 32 bit, és egy hosszú, hosszú 64 bit, hogyan big egy hosszú, nem hosszú ideig? Az ember azt hinné, hogy ez hosszabb, mint egy int de talán kevésbé hosszú, mint egy hosszú, hosszú, de valójában attól függ. És így kiderül, az egyik A frusztráció is, A kód írása egyes rendszerek, az, hogy nem az összes ilyen adat típusok van előre meghatározott értékeket. Néha ez a sok bit. Néha, hogy sok bitet. Szóval tényleg kell tudni, Néha, milyen hardver futsz a szoftvert. Szerencsére, más nyelvek és más adattípusok, hogy most létezik, lehetővé teszi, hogy pontosabban. Nos, láttuk, húr, és láttuk bool is de kiderült, azok jönnek csak a CS50 könyvtár. Tehát azok nem épülnek a C. Azok helyett, jönnek, hogy nevű fájlt CS50.h, hogy mi lesz végül húzza vissza a rétegek. De most, ők csak további adattípusok. A bool változó igaz vagy hamis, és egy string karakterek sorozata, mint egy szó. Most printf, láttunk, olyan helykitöltők,% s egyike. És lehet, hogy képes, hogy most, következtetni ezekből más példát, hogyan Önnek is van egy helykitöltő A különböző adattípusok. Például, akkor gondolom, ha akarta, hogy nyomtassa ki egyetlen karakter segítségével printf, a helykitöltő valószínűleg% c. És ha azt szeretnénk, hogy nyomtassa ki a integer a helykitöltő,% i. % lld egy hosszú, hosszú decimális értéket, de hosszú, hosszú, így a térképek, hogy az. Aztán% f úszó pont értéke, vagy egy dupla, így néha ők újra felhasználni a különböző kontextusokban. Szóval majd meglátjuk, és használja néhány ilyen idővel. És a printf és egyéb funkciók is támogassa mások escape szekvenciák, és néha, ezek szükségesek. Tehát backslash n egy új vonal. Backslash t, csinál akárki szeretnénk, hogy a stab? Közönség tagja: Tab. DAVID J MALAN: Tab. Tehát, ha tényleg akar egy kinyomtatott lapot, nem fix számú terek, hanem egy tényleges tabulátorkarakter, nem találsz meg, lapon gombot a billentyűzeten, általában, Ön ténylegesen backslash t. Backslash idézőjel, miért kellett volna valaha szeretné, hogy? Jobb? Miért nem tudok csak írja idézőjel a billentyűzetem? Közönség tagja: Mert, különben ez fogja gondolni, hogy itt a vége Az tetszik a nyomtatás [? szöveget. ?] DAVID J MALAN: Pontosan. Ne feledje, a mi printf példák, amikor Teltek a printf input, bal oldalán, hogy a bemeneti karakterlánc és a jobb oldalon, hogy a bemeneti tavasz, persze, volt idézőjel. Ha a saját bemeneti kettős idézet a közepén, hogy A számítógép potenciálisan összezavarodnak, hogy, Teszi ezt idézőjel tartoznak a közepén? Vajon tartoznak a balt? Vajon tartozol az igazit? És igen, ha azt szeretné, hogy ez szuper tiszta, akkor backslash idézőjel, úgy, hogy megszökött, hogy úgy mondjam, és ez nem keveri valami mást. És van még néhány más itt, backslash r, szimpla idézőjelet, 0, hogy lássuk idővel is. És most, mi a helyzet a funkciókat? Tehát akciók hogy ki tudjuk venni az eddig ezen a nyelven, C, illetve, láttunk, printf, természetesen, és minden a többiek a képernyőn, Itt, hogy fel fogjuk használni a Természetesen az első néhány hét csak, jönnek, amikor a CS50 könyvtár. És, hogy sokkal könnyebb, a C, hogy valóban kap felhasználótól. Kiderül, hogy a C-ben őszintén szólva néhány nyelven, ez egy igazi fájdalom a nyak, hogy nem valami egyszerű, mint figyelmezteti a felhasználót A billentyűzet, vagy őt bemenet. És így ezek a funkciók megkönnyítik. És ez is hiba ellenőrzése során, így, amikor felidézni szerdán, mi látta, hogy a, próbálja újra, figyelmeztetés, amikor nem működött együtt, és beírtam egy szót, egy szám helyett? Megtettük a nehéz korai A ellenőrizze, hogy a felhasználó együttműködik. De ezek csak a képzés kerekek, hogy előbb-utóbb, és gyorsan, vegye le. Tehát, hogy újra bedugni, majd, vessünk egy gyors pillantást, ugyanúgy, mint tettük Scratch, a Néhány kanonikus konstrukciókat C. Ez azt jelentette, hogy, egyfajta Az, hogy egy forgószél túra, Csak úgy, hogy a referencia- és hogy láttad a dolgokat az elején. De aztán megnézzük, tényleges kódolás Bizonyos ezekből az építőelemekből. Annyira, mint a Scratch, Mikor pedig nyilatkozatok, mint, mondjuk, vagy várjon, a C, mi kell funkciókat is, mint a printf. Ha azt akarjuk kifejezni feltétele C, ez hasonlít, a lélekben, E puzzle darab, így nézett ki a semmiből. De ahelyett, mi Szó szerint csak írni, ha. És akkor, zárójelben, teszünk egy állapot, Ahol ez a feltétel, amit mindjárt hívja, megint egy logikai kifejezés. És újra, ez a fajta pszeudokódja. És valóban, a // egy megjegyzést. Ez csak angol szavakat magamnak. De ez az általános szerkezet egy, ha, állapot. De majd meglátjuk konkrét példák csak egy pillanatra. Ha azt szeretnénk, hogy egy kétirányú villát a közúti, ugyanúgy, mint mi a mi önkéntesként Szerda, akkor van egy, még ha. És ha azt szeretnénk, hogy egy harmadik és végleges állapot, vagy az alapértelmezett helyzet, akkor már csak egy más blokk van. És hasonlóan, a logikai kifejezések, tudsz, és össze őket. És láttuk szerdán, hogy ez nem egy jelet, ez a két, az alacsonyabb szintű oka annak, hogy akkor előbb-utóbb látni és játszani. Vagy-nek a dolgokat együtt 2 függőleges vonalak. A US billentyűzet, ennek általában egy kulcsfontosságú A Shift billentyű felett Ön Enter billentyűt, vagy a Return gombot. Aztán ott van ezeket a dolgokat, hogy fogjuk használni, talán egyszer vagy kétszer. Ezek funkcionálisan egyenértékű mit lehet csinálni egy adott, else if, else if mást, konstrukció, de ők hívják egy kapcsolót. Úgy néznek ki, nagyon különböző, de majd látni néhány disztribúciós kódot, a jövőbeni problémát sor, a legvalószínűbb, hogy néha csak egy csinosabb kifejezési módja egy egész csomó feltételeket, anélkül, hogy sok kapcsoszárójele és Sok zárójelben és behúzás. De nekünk nem több teljesítmény, mint ami van. És most hurkok. És ez, akkor nézd egy kicsit lassabban. De aztán, elkezdünk használni ezeket, különösen azok számára már ismerős. Ez a kanonikus módon, ha hihetetlenül misztikus módon, hogy írjon egy hurok C. Most egy hurkot Scratch volt elég egyértelmű. Van egy, örökre, blokk. Van egy, ismétlés, blokk csak egy szám van, hogy írja be. És az, a hurok, akkor végre mind az ilyen ötletek, de ez egy kicsit több technikai. De őszintén szólva, ez is viszonylag egyszerű. Ha már tudja a sorrendben műveleteket, akkor szó csak fogja, hogy csatlakoztassa értékek és mondd el a számítógépet, mit kell tennie. Tehát itt egy példa. Ez egy ciklus, ami meglehetősen Egyszerűen, számít az egyik számot fel keresztül egy másik. És csak ránézve rajta, akkor is, ha nem korábbi tapasztalatok ezt a nyelvet, milyen szám nem is valószínűleg kezdeni a számlálást? OK, 0. És biztos vagyok benne, hogy azért van, mert látom, hogy van egy int és egy i, mely változó. Ez kap kezdetben 0. Aztán később, úgy néz ki, mi elhaladó printf érték. És valóban, csináltam egy kis elírás itt. De ez könnyen meghatározni. Hadd tegyem hozzá, én itt. Most már printf lény telt, hogy helykitöltő értéket. És mi fog számítani, egészen? Közönség: 50. 50. 49. DAVID J MALAN: 49. Tehát 50, első pillantásra úgy tűnik, igaza van. De, mint kiderült, lesz a feltétellel, hogy mi tartsa ellenőrzése. És mi fog megállni egyszer i már nem kevesebb, mint 50. Szóval ez a hurok, Fordítva is igaz: végre, mindaddig, amíg az i kisebb, mint 50. De amint válik 50, vagy 51, vagy ami még rosszabb, azt automatikusan leáll. Minden rendben. Tehát valójában mi történik itt? Szóval ez a rendje műveleteket a hurok. Az egyik, hogy van a úgynevezett elindulni. Ez a sárga kiemelte darab A kód végrehajtása az első, és ez azzal a következménnyel jár, hogy a per Szerda, akkor valószínűleg képzelni. Ez létrehoz egy változót, az i és üzletek, hogy a változó értéke 0. Tehát én 0 Ezen a ponton a történet. A következő dolog, történik, ebben a konstrukcióban, az, hogy a feltétel lesz jelölve. Szóval azonnal ellenőrizze, jelentése i kevesebb, mint 50? És persze, a válasz A most bizonyára igen. Igen, mert én 0, és ez biztosan kevesebb, mint 50. Akkor mi történik, hogy ez a vonal kód kerül végrehajtásra. És valóban, ha van többszörös kódsor azok kapcsos zárójelek mindannyian kivégeznek egyik a másik után. És a hatás itt, Úgy tűnik, hogy nyomtassa ki A szám i, ami megy 0, majd 1, majd 2. De miért? Miért tart kap növekszik? Nos, a negyedik dolog, Az történik, hogy ez a szintaktikai kerül végrehajtásra, miután a pontosvessző. i ++ egy rövidített módja mondván; hogy az i értékét, és adjunk hozzá 1-et; majd a következő alkalommal, add 1-et; és a következő alkalommal, adjunk hozzá 1 hozzá. Tehát, ha folyamatosan megy, mi fog történni következőt én nem fogok alaphelyzetbe i soha többé. Ha én tartott inicializálása i értéke 0, ez a példa Soha nem lesz vége, mert én azt felragasztva 0. De mi fog történni, hogy a feltétel ellenőrizni fogják, a sort, majd kivégeznek, Az i inkrementációval, állapotban ellenőrizni fogják, kód kerül végrehajtásra. És ez tartott kerékpáros újra, és újra, és újra, amíg én ++ indukál értéke 50. A feltétel, majd azt mondja, 50 kevesebb, mint 50? A válasz természetesen az, nincs, és így az egész kódot megáll végrehajtó. És ha több kódot a képernyőn lent, ez az, ami történik ezután. Ez kiugrik ilyen kapcsoszárójele és továbbra is nyomtatni több után. Tehát egy vicc most, foxtrot, hogy akkor talán most már értem. Ez mindig vicces. Ez olyan, mint a nevetés fajta átszivárog, majd rájössz, hogy nem kellene nevetne humor, mint ez. De van néhány elvihető Itt, pedagógiailag is. Így kiderül, hogy én vagyok hiányzik egy darab a szintaxis, vagy foxtrot eltűnt egy darab szintaxis itt. Mi hiányzik, hogy már volt minden más Például, eddig? Visszatérés, ott van, így ez valami más, hogy mi jön vissza, mielőtt hosszú. Mi hiányzik, igaz? Igen. Közönség tagja: A inicializálásánál [hallhatatlan]. DAVID J MALAN: OK. Szóval igen. Tehát tulajdonképpen ez is-- Nos, és gróf inicializálódik fölé, vagy inkább kijelentette fölé. Szóval ez egy másik módja, hogy. De nem egy sorban ez érvényes mégis. Mit szólnál itt? Közönség tagja: Vajon a kapcsos zárójelek? DAVID J MALAN: Igen. Tehát a kapcsos zárójelek hiányoznak. De ezt a kódot, úgy értem, hogy ez a hitel, valójában, szintaktikailag helyes. Kiderül, akkor nem szükség van a kapcsos zárójelek ha csak egy kódsort végre kívánja hajtani belsejében a hurok. Most mindig, az osztályban, és a Minden disztribúciós kódot, többek között a kapcsos zárójelek különben is, csak a jobb átláthatóság kedvéért. De észre, hogy a tankönyvekben és az online példákat, akkor nagyon jól látni göndör melles hiányzik valamikor. És ez rendben, ha az, amit még beljebb és tervezett mindössze egyetlen sor kódot, és nem több sornyi kódot, potenciálisan. Minden rendben. Így kapcsolódik a kérdés a pontatlanság, egy olyan kérdés, túlfolyó, abban az értelemben, hogy hasonlóan, nem egész számok vannak korlátok nekik mint lebegőpontos értékek? A világ egy lebegőpontos értékeket, csak akkor lehetünk olyan pontosak, ami után, néha Rossz dolgok történnek, és a programok is hibás, és a hiba. Most még egészek, akkor problémákba ütközött. Most egy egész szám nem rendelkezik tizedesvessző vagy számok után. Ez csak egy természetes szám, tipikusan. Szóval, mi romolhat el egy int? Ha én vagyok a int, hogy száma, mi baj? Úgy tűnik, sokkal egyszerűbb. Igen. Közönség tagja: Ha a szám lesz [hallhatatlan] DAVID J MALAN: Igen. Mi van, ha számít olyan nagy, hogy nem tudom kifejezni, hogy igazán nagy szám. Jobb? Egy bizonyos ponton, fogsz haladja meg a határokat Egy 32-bites érték, vagy egy 64-bites érték. Most megint, nem vagyok benne biztos, hogy kell mondani ezt a 64 bites értéket, de tudom, hogy egy 32 bites egész, A legnagyobb érték lehet, ha csak pozitív értékeket, nagyjából 4 milliárd. Tehát ha megpróbálom számít, hogy 5 milliárd, valami történni fog. De lássuk, mi, sőt, megtörténhet. A világon az egész túlcsordulás, ahol, bizonyos értelemben, ragadják el a terhelést egy egész, hogy mi történhet? Tehát itt egy bináris szám, ez egy primitivizmus 0. Ez mind 1-es, és a helyőrzők ott van hatásköre 2, így ez bináris. Tehát ezek a 8, 1 bit a képernyőn. És ha felidézni, vagy gyorsan csinálni a matek, milyen értéket képviselt Itt a nyolc 1 bit? 255. És akkor is, ha nem volt egészen biztos abban, A matek, amit tehetünk, hogy ki. Vagy csak egyfajta Az ész rajta, várj egy percet, ha én vagyok amely 8 bites érték, és kaptam 256 lehetséges értékeit, de amelyek közül az első jelentése 0, Csak azt tudom, hogy a legnagyobb lesz 255, és ez az, amit ez az egyik lehet. Tegyük fel, hogy megpróbálok 1 hozzáadása ezt az értéket. Mit tennél évfolyamon iskolában, amikor hozzá egy 1, és nem igazán illik, mert akkor fel kell tüntetni az 1? Mi ez a szám megy válni, ha hozzá 1? Meg fog válni 0. Jobb? Mert ha már több bits-- és én próbálja, milyen, írja ki here-- ha több bitet, amit tehetett itt van hozzá a 1, és akkor lenne ez. Hoppá. Mi volna egy 1 bites egészen ide. De ha ez egy véges értéket, ez csak 8 bites, és ez az előre meghatározott a számítógép, hogy 1 gyakorlatilag nem létezik. Ez csak egyfajta lezuhan egy szikláról. És így, ha hozzá 1-255, mit értéke Mit láthatóan kap? 0. És ezért a számok véletlenül, és talán akaratlanul, a végén körülveszik, mint ez. Szóval mi lehet a következménye ennek? Nos, van egy pár más dolgot. Tehát az egyik, hogy nem a végén keres mint 0, akaratlanul, de akkor milyen látni, még a való világban, jobb vagy rosszabb, megnyilvánulása ez a gondolat, hogy a határérték. Például valakinek, aki valaha játszott Lego Star Wars, Tudja valaki véletlenül, hogy a maximális számú érmékkel gyűjthetünk a Lego Star Wars? Akkor gondolom alapján mai vezető kérdések. Ez nagyobb, mint 256, vagy 255. Ez 4 milliárd. Így kiderül, és van valami people-- Néhány googling megerősítette a múlt night-- ütött 4 milliárd aranyat, vagy miegymás, a Lego Star Wars. Bár úgy tűnik, van olyan módon, hogy trükk a játék, van egy bug vagy szolgáltatás, amely lehetővé teszi, Csak gyűlnek sok-sok pont. De a lehető legnagyobb érték szerint hogy ez a képernyő lövés valaki azt megtalálható az interneten, valóban, 4 milliárd. Most miért van ez? Ez pontosan 4 milliárd, Valószínűleg azért, mert valaki úgy döntött, aki írásban ezt a játékot, hogy meg tudják csinálni 4000000000, valami, valami, valami, mint az érték tettem fel a számológép korábban, de ez csak egy kicsit tisztább az emberre azt a maximális számát A coins-- vagy csapok, ahogy hívják them-- hogy összegyűjti a 4 milliárd. És igen, mi ennek az oka? Hogy van a LEGO játék végrehajtása ellen ami nyomon követi a számú érme van? Ők a mi? Közönség tagja: Megállítja számolás után 4 milliárd. DAVID J MALAN: Megállítja számolás után 4 milliárd, ami azt jelenti, következtetni, mint programozó, hogy ők valószínűleg egy 32 bites egész. Mint a programozó szó szerint csak gépelt, int, a saját kódját, és ez a típusú változó, hogy ők használ tárolni valaki kódot. Szóval van más megnyilvánulásait Az ilyen jellegű korlátokat. Szóval én még nem játszottam ezt a game-- és olvastam fel a történelem hogy erősítse a much--, de a eredeti változata civilizáció, ahol Önnek nyilvánvalóan kölcsönhatásban vannak egymással Más és háborút, vagy a béke, Gandhi kellett volna, hogy az egyik legbékésebb karakter, mint én értem, az első változata civilizáció. És valóban, skálán 1-től 10, ő agresszivitás, mindössze 1. Tehát még oly szelíden agresszív, látszólag. De egy bizonyos ponton, akkor nyilvánvalóan telepítse a demokrácia a földrajz. És ha telepíti a demokrácia az Ön változata a játék, akkor a agresszió szintje lemegy. Ez egy jó dolog. Az emberek jobban nyugodt Úgy tűnik, ebben a helyzetben. De úgy tűnik, valaki nem nincs, ha állapota Az eredeti verzió a kód. Így Gandhi agresszió szintjét ment Pozitív 1, mínusz 2, a negatív 1, de a játék nem megérteni a negatív számok. Szóval az történt, Gandhi agresszió szinten ment 1, 0, a negatív 1, amelyek hatása az volt, körülveszik a lét A legagresszívebb karakter a játék, értékben 255, skálán 1-10. És azóta, ott volt több inkarnációja ezt a játékot, és már tartotta a egyfajta húsvéti tojás, Gandhi látszólag borzasztóan agresszív. De ez volt az eredménye, amely Nagyon egyszerű programozási hiba abban a nagyon korai változata a játék. Most több zavaróan, több Nemrég, a Boeing 787 dokumentálták, mint aminek bug, nem az a fajta készülék Ön különösen szeretné, hogy egy hiba. És a tüneteket, hogy fogom olvasni Itt egy cikket az interneten, volt ez, a modell 787 repülőgép hogy már energiaellátása folyamatos 248 nap elveszíthetik minden váltóáram, AC, elektromos miatt a generátor ellenőrző egységek, GCUs, egyidejűleg bemegy fail-safe mode. Tehát ez egy figyelmeztetés volt kiállított ha ez a probléma fedezték fel. Ez a feltétel az okozza egy szoftver ellen, belső a GCUs, így integer vagy változó, hogy túlcsordul után 248 Január folyamatos teljesítmény. Boeing a folyamat kialakítása GCU szoftverfrissítés, hogy fogja orvosolni veszélyes helyzet. Annyira, mint a rakéta forgatókönyv, azzal jellemezve, ők már valamilyen változó hogy számolta, és a számolás, és a számolás, de fokozatosan csordultig határait az a képessége, Hasonlóan tett a rohadt repülőgép van egy változó túlcsordulás Miután elég ideje fut. És így a nyelv-in-pofa módon A munka körül ezt a kérdést az, hogy valóban, reboot, a sík minden 247 nap, úgy, hogy a memória gets megtörölte és a változó visszatér 0. De ismerniük, ez egy nagyon nagy inkarnációja szoftver, de különösen a hallunk az Apple operációs rendszerek megy autók, és az önálló autóvezetés a Google, és a tetszőleges számú inkarnációja szoftver a mindennapi életünkben, TV-k és karórák, és több, észre vették körül szoftver, amelyek mindegyike írta nálunk, embereknél. És mivel mi minden hamarosan felfedezik, ez nagyon egyszerű és nagyon jellemző hibázni írásakor szoftver. És ha nem elkapni őket, néhány rossz dolgok történnek. Most néha, bizonyos vicces dolog történhet, vagy legalábbis néha tudni, hogy számíthat némi rosszaság. Szóval 0 osztva 0, évfolyamtól iskola, általában egy rossz dolog. Ez nem definiált. És kiderül out-- és lássuk, én mic vedd ezt up--, hogy az Apple Volt néhány fun ennek a közelmúltban. Szóval van egy iPhone itt. Én fogok beszélni, hogy Siri és megkérdezem hogy nekem a választ 0 osztva 0. Mit 0 osztva 0? Siri: Képzeld el, hogy van 0 cookie-kat, és akkor szét egyenletesen között 0 ismerős. Hány cookie-k minden egyes ember kap? Látod? Ennek nincs értelme. És Cookie Monster szomorú hogy nincsenek cookie-kat. És szomorú, hogy nincsenek barátaid. DAVID J MALAN: Elég ellenszenves. Szóval ez az, amit éppen azt mondta, nem. Ez határozatlan, ez nem definiált, sőt, sok programozási nyelvek vagy, tényleg, a fordítóprogramok érzékeli, amikor, egy programot, próbálja osztani 0 0. Szórakoztatóbb, mint ez azonban az, hogy látszólag, Cookie Monster a Twitteren ezekben a napokban. És ő válaszolt erre, ezzel, ami teljesen imádnivaló. De vessünk egy gyors pillantást egy pár más konstrukciók, majd tegye néhány ilyen kódot kell használni, jó választás. Így kiderül, amellett, A hurkok, van egy úgynevezett while ciklus, hogy másképp néz ki, és végrehajtása egy kicsit differently-- és akkor előbb-utóbb látni examples-- de bizonyos értelemben, ez egyszerűbb, mert nem teszi lehetővé, hogy inicializálni és frissíteni határán belül a hurok. Továbbra is végrehajtja. Szóval lehet nem pontosan ugyanaz a dolog egy while ciklus, mint egy for ciklus, de a szintaxis, ultimately-- mint mi lesz végül see-- lesz más. Van még egy do while ciklus, amely valójában egy kicsit más, abban mivel egy for ciklus és egy while ciklus mindig állapotának ellenőrzésére az első, ha olvassa el ezt a dolgot, fentről lefelé, ez a fajta néz ki, hogy lesz ellenőrizze állapotát utolsó, mert ez valóban az utolsó sor kódot. És valóban, ez lesz hasznos Bizonyos programok írunk, Ha azt szeretnénk, hogy csak vakon tenni valamit és végül ellenőrizze az állapotot. Ez nem feltétlenül rossz dolog. Ha azt akarjuk, változók, amit tehetünk, ez egy pár különböző módon. És láttuk a foxtrot rajzfilm, ennek egyik módja, hogy, ahol állapítsa meg a változó, mint int számláló pontosvessző, majd later-- talán a következő vonal, talán 10 vonalak later-- hogy tényleg inicializálás. Tehát ezek a 2 sornyi kód Kijelentem, egy egész típusú változó és hívja meg a számláló, így ez ad nekem elég bit tart int. És akkor végül, hogy hozza A 0 érték a változónak. Ez rendezi a 0 és 1-es egy minta, hogy tudjuk, a múlt héten, számát jelenti ismerünk 0. Vagy őszintén, akkor ezt sokkal tömörebben, mint ez. Most mi is a képes meghívni. És valóban, itt egy 2 vonalon programot, vagy egy részlet cikkére, amely lehetővé teszi számunkra, hogy ténylegesen írni egy kódot, kap egy húr a user-- sokat mint mi önkéntes egy pillanatra ago-- tárolására az eredményt egy változó nevű nevet, és then-- ugyanúgy, mint mi önkéntes A printf-- kinyomtatja azokat az értékeket átadásával a két érv, a húr, majd a változó nevű, nevét, saját maga. Szóval vessünk egy pillantást, mielőtt Térjünk vissza Mario ott, egy pár most, példa erre. Megyek, hogy menjen előre és nyitott fel, mondjuk, a funkció-0.c. És mint mindig, ez a kód elérhető a tanfolyam honlapján, így játszhat mentén otthoni és később megnézem. De itt van a program, hogy ez Lényegében sorról 17-22. A fő program, ahol a program mindig fog kezdeni. Ez a program, úgy tűnik, megy hogy nyomtassa ki a nevét, a vastagbél. Ez akkor fog hívni getString, mint mi a mi önkéntesek. És akkor, ez érdekes, ez meg fog hívni PrintName. Kiderül, ennyi idő van Úgy tűnik, hogy a nevezett funkció PrintName. Amely kiírja valakinek a nevét. Nem kell használni a printf-re múlt, van PrintName. De ez félrevezető mert PrintName nem gyere C. emberek nem feltalálni mintegy 40 vagy 50 évvel ezelőtt, Tettem, helyette. És valóban, ha görgetni tovább részletezve, értesítés hogyan tudok írni a saját funkciók C. Majd végül megmagyarázni, miért mondogatom, void, néhány helyen, de ma, hadd Csak nézd meg a nevét. A 24. sor, ha azt szeretné, hogy létrehozhatunk saját funkciója, szó szerint írni a A függvény neve. Azért választottam PrintName. Zárójelben, akkor majd adja meg, milyen A bemenetek, és hány van szeretnénk ezt a funkciót, hogy. Ebben az esetben, azt akarom, hogy 1 nevű változó, nevet, és ez lesz a típusú, húr, így fog hogy néhány karaktersor. És akkor ez program-- ugyanúgy, mint a Scratch, Önnek egyedi puzzle pieces-- megy, hogy ez a szokás viselkedés. Meg fog hívni printf halad, hello, helyfoglaló, majd ez lesz dugó bármilyen a felhasználó neve. Tehát ez egy példa, amit egy számítógép tudós lenne Hívás kivétele, illetve a funkcionális bomlás, melyek csak divatos módon saying--, ha tetszik ez a magas szintű elképzelést, mint szeretnék funkcionalitás kiírja valakinek a nevét, akkor feltétlenül szó levelet printf majd át az érveket akarsz, és a program működni fog, hiszen szerda óta. De meg lehet kezdeni elvonatkoztatni fogalmát nyomtatás egy nevet. Akkor adja meg a nevét, mint PrintName, és ez a Ez a gondolat a rétegződés hétről 0. Ezentúl, I. és akkor nem kell tudni vagy érdekel, hogy PrintName végrehajtását. Igen használja printf, talán nem, ki tudja, mit használ? Kit érdekel? Most én beszélek itt, ahelyett, hogy itt lent. És valóban, mint a mi programok kap fejlettebb és kifinomultabb, fogunk tartani vesz készpénznek hogy az alacsonyabb szintű kirakós darab létezik. Mert írta őket vagy valaki más tette, így hogy tudunk majd építeni a tetejükön. Vessünk egy pillantást erre variáns, működik az egyik. Tehát ez az ember egy kicsit többet Részletes, de kiderült, hogy CS50 könyvtárában, már csak egy GetInt funkciót. Nem hiszem, évekkel ezelőtt, hogy végre egy GetPositiveInt funkciót. És ez egy kicsit bosszantó, mert ha srácok írunk egy programot, amelyben azt akarjuk, hogy a pozitív egész szám a felhasználó, akkor teljesen használni GetInt. És akkor teljesen ellenőrizze Az állapot és talán egy hurok ha ez int nagyobb 0-nál, és kiabálni a felhasználó ha ő nem ad Ön pozitív szám. De építsetek építőkocka magunkat, egy, Egyéni Scratch darab, ha úgy tetszik. Megyek, hogy a program Itt, hogy végül én azt szeretném tudni, hogy hívja GetPositiveInt, és azt akarom, hogy kinyomtathatja bármit is int. De ez kiveszik el most. Ez csak kapott egy magas szintű név, amely azt mondja, hogy mit csinál, ami csodálatos, mert nagyon intuitív most olvasni. És ha mégis érdekel, mi van alatta A motorháztető, hadd lépjünk le. És ez egy kicsit ijesztő Eleinte, főként ha ez az első program, de vessünk egy pillantást. Én már nem azt mondja, üres, mert kiderül, funkciók, hasonlóan getString, lehet visszatérési értéke számomra. Nem csak azt, nyomtatni a képernyőn, tudják ténylegesen átadja nekem valamit. És míg korábban PrintName, Nem kell semmit vissza. Kellett a mellékhatása valami felbukkan a képernyőn, de nem kell egy emberi hogy adja át nekem valamit. Itt, a GetPositiveInt, mint a GetInt, Szeretnék adni valamit vissza. Szóval azt mondom, nem, semmis, on line 23, de int, amely azt mondja, ez a funkció hogy írok, nevű GetPositiveInt fog adja vissza az egész, nem semmi, Nem semmis. Közben ez lesz, hogy nem tesznek bemenetek, úgyhogy, fajta, megfordította. Nem adom GetPositiveInt semmilyen bemenet, azt akarom, hogy adjon nekem termelését. És akkor most mi lesz? Tehát itt van, hogyan tudom, hogy egy változót. Megcsináltam kívül a hurok, okokból fogunk végül látni, de ez csak ad nekem 32 bit nevű, n, és én már előre meghatározó őket tárolni egész. És itt van, hogy nem, miközben konstrukció, és ez az oka, hogy hasznos. Szó Ehhez míg n értéke kisebb, mint 1. Nézzük, mi történik. Azt ki kell nyomtatni, kérjük adj egy pozitív int. Aztán kap egy int, a CS50 a működni és tárolni n. És akkor mi kódsort valószínűleg kerül végrehajtásra, a következő, logikus? Melyik sor száma? Igen, 31. Nem tudod ezt, amíg meg nem azt mondták, vagy valami következtetni rá, de ez igaz. Magától fentről lefelé majd ismétlődik. Tehát ha én beírtam mondjuk száma Negatív 1, n-nél kisebb negatív 1? Igen. Mivel a negatív 1 kisebb, mint 1. Szóval, mi történjen? Megyek, hogy ezt míg n értéke kisebb, mint 1, így fogok visszamenni 28. sor. És minden egyes time-- és Fussunk this-- hogy a funkció 1 lefordítani, és most pont perjel funkció 1. Ha I. típusú negatív 1, ez fog tartani kiabáljon velem amíg együttműködni, mert egyes én bemenetek kevesebb, mint 1 és ha ez míg kevesebb, mint 1, Megyek csinálom ezt. Ha végül, hogy ez egy több, mint 50, Szerencsére, azt mondja, köszi a 50. Miért? Mert amint n értéke nem kevesebb, mint 1, abbahagyom elakadás a hurok, és ez az új kulcsszó ma, Cserébe szó csinálja. Szóval már csak végre, egy értelme, ami megegyezik az getString, ahol én átadta vissza Aki használja velem, valamilyen értéket. Nem kell, hogy egy string, ez egy int. Tehát egy egyszerű, gyors Például, de hamarosan látni néhány kifinomultabb verziói még. Tény, vessünk egy pillantást a numerikusnál, amely az úgynevezett return.c. És ez tulajdonképpen egy kicsit egyszerűbb. Szóval ez a program célja a life-- nézzük lefordítani és futtatni, így a visszatérést, pont perjel, return-- nyilatkozat A program egyszerűen kockák értéke 2. Ez elég hülye, nehéz kód, nem veszi-e alapanyagot, de ez nem bizonyítja egy másik funkciót, hogy én írtam magamnak. Tehát itt, amit nyilvánították változó, úgynevezett x, int típusú, egyenlő a szám 2, teljesen önkényes. Ez csak néhány bolyhos nyomtatást. Azt mondja x ma már, mint és Ilyen, kocka dot dot dot. És a varázslat nyilvánvalóan összhangban 21. Hívom olyan függvény, kocka, Én lerakom egy papírlap A 2-es szám van ráírva, és milyen értéket, matematikailag, akarok kijutni belőle? Csakúgy, mint egy józan ellenőrzés? 8. Jobb? Azt akarom 2 kockára vágott vissza, 2 A hatalom a 3, így 8 vissza. Szóval, ha van kockát végrehajtani? Nos, észre, hogy ez végre itt lent. És csakúgy, mint korábban, logikusan, bár a szintaxis valószínűleg nagyon új sokan közületek, Azt akarom, hogy ez a funkció hogy adja vissza a lap papírok int rajta. Szóval van egy int, a név önkényesen, de kényelmesen nevű kocka. A bemeneti rá, az n Integer, szóval hogyan tudom át a számot 2. egy papírlapra. És akkor kiderül, C tartók matematika, így nem kell x-for-szer, csak használja a csillag szorzás. És ez adja vissza n-szer n-szer N, amely egyszerűen egy kockára vágott érték. Szóval hová megyünk mindezt? Ez határozottan egy forgószél túra, megnyugodhat, hogy a szuper szakaszok és a probléma készlet 1, leszel végigsétált mindez még inkább. És a probléma készlet 1, akkor átmenet A grafikus világában Scratch hogy valami parancssori C. De majd inspirációt ebből van a játék re tavalyi, ahol a C és a standard kiadás a o set akkor végre Mario piramis. És a hacker kiadás a p készlet, ha úgy döntenek, hogy megválasszák, akkor végre egy kicsit kihívást piramis két csúcs. Azt is hajt végre, algoritmust, mohó algoritmussal. Kiderült, hogy a néhány érdekes logika mögött a folyamat fut egy pénztáros állomás és valóban átadta valaki visszaadni. Van egy algoritmus, ami meglehetősen egyszerű, hogy talán még megragadni ösztönösen, amikor először olvasta it-- rájött, hogy ez, amit mindig is kész bármikor adtam valakinek valamilyen pénzt back-- amely lehetővé teszi, hogy mindig számának minimalizálása papírpénzekhez vagy fém érmék hogy átadod vissza a felhasználónak. És ez, persze, impozánsak mert ha megy, hogy a CVS vagy miegymás, ha nem akarjuk, hogy kézzel egy csomó is vagy egy csomó fillérekért. Azt akarjuk, hogy legkevesebb érmék, talán, lehetséges. Végül, akkor is vitatható a pancsolás a világon a víz és tényleg csak megbecsülésére Egy közötti leképezés áramlási sebességét, Az tetszik, vizet egy zuhanyzó, hogy mennyi vizet használnak. És ez az utalás, ott, lesz ez a klip itt, amit majd véget a mindössze 60 másodperc alatt, hogy fest egy képet alacsony áramlási zuhanyfejek. [Videó lejátszás] -Minden rendben. Megvan itt minden. Megvan a ciklon F sorozat, Hydra, Jetflow, Stockholm Supersteam, akkor nevezd meg. -És Mit ajánl? -Mit keresel? -Power Ember. Teljesítmény. -szerű Silkwood. -Ez A sugárzás. -Ez Igaz. -Most Mi ez? -Ez A Commando 450. Nem árulok, hogy az egyik. -De Ez az, amit akarunk. Ez egy kommandós 450. -Nem Hiszel nekem. Ez csak használják a cirkusz. Ez az elefántok. -I'll Fizet semmit. -Mi Jerry? -Ő Nem tudta kezelni ezt. Ő finom. Ó igen. [Lejátszás vége] DAVID J MALAN: Rendben. Ez, ha a CS50. Találkozunk a jövő héten. 1. Előadó: [? Scully?], [? Ian,?] amennyire ez az outro projekt, mit srácok jön? Hangszóró 2: Nos, most már adott ez a fajta gondolkodás, és úgy gondoljuk, hogy a legjobb módja az alábbiakra: Hangszóró 3: Szabad? Hangszóró 2: Igen. Minden eszközzel, valóban. Hangszóró 3: Szóval azt hiszem, tudjuk összefoglalni a mi ötletünk A Outros egy word-- semmi. DAVID J MALAN: Semmi? Hangszóró 3: Semmi. DAVID J MALAN: Mit jelent ez? Hangszóró 3: A Outros a semmiért. Hangszóró 2: Nos, úgy értem, a filozófia, Úgy értem, semmi sem mindig van valami. 1. Előadó: Szóval what's-- mi az előfeltétele? Hangszóró 3: Szóval ez olyan, mint az élet. OKÉ. Mit csináltál ma? DAVID J MALAN: felkeltem, már reggeli, és jött dolgozni. Hangszóró 3: Ez egy outro. Hangszóró 2: De, úgy értem, nem kell valami történne vele a the-- Hangszóró 3: Nem, nem, nem, nem. Semmi nem történik. 1. Előadó: Akkor miért nézünk? Hangszóró 3: Mert ez egy outro a CS50. DAVID J MALAN: Még nem.