[Powered by Google Translate] DAVID J. Malan: Rendben, ez CS50, és ez a kezdődik a hét kettő. Köszönöm. Kezdjük itt egy telefonhívást. Fogok tárcsázni 617-BUG-CS50. CS50: Ez CS50. A Shuttle Boy, 1-es gombot. Ahhoz, hogy kezdjük újra, nyomja meg a 9. DAVID J. Malan: Szóval azt mondta, a Shuttle Boy, nyomja meg az 1. Így megyünk az 1 gombot. CS50: Mi a származás? A quad, nyomja meg az 1. Mather, nyomja meg a 2. Boylston, nyomja meg a 3. Lamont, nyomja meg a 4. Mem Hall, nyomja meg az 5. Ahhoz, hogy kezdjük újra, nyomja meg a 0-ra. DAVID J. Malan: fogunk 1-es gombot a quad. CS50: Next gyűjtő elhagyja ezt a nagyon percenként 13:10, és majd 1:20, 1:30, 1:40 PM. Ez CS50. DAVID J. Malan: Szóval ez CS50 hangját. És ez egy példa a fajta végleges projektek esetében Például, akkor harap ki felé a végén a félévben. Például, hogy shuttleboy.cs50.net létezik - valójában egy projekt, amely először írtam miután CS51 vissza, amikor én voltam az alapképzésben. És az inspiráció itt volt akkoriban, minden tőlük az volt A nyomtatott shuttle busz menetrend, és nem volt fogalma látszó dolgokat online. És így a fajta galamb az egyik hétvégén, öntötte a nyomtatott menetrend, és átírta a számítógépes program. Abban az időben, a számítógépi program történt írandó A C. És valóban futott begépelésével Shuttle Boy egy villogó azonnali mintha csináltam eddig. De az évek során ez alakult át egy pillanatra üzenetküldés bot. Ez alakult újabban ebbe a honlapon, egy SMS-alapú eszközt, valamint ebbe a hang-alapú eszköz. És ez az, hogy célozni a fajta dolog, amit lehet tenni magad félév végén. Például, ott, az SMS-változata Shuttle Boy történik a következőképpen működnek. Ha a mobiltelefonján, akkor küldjön egy szöveges üzenetet a 41411 és majd küldje el a speciális szimbólum sboy, a Shuttle Boy, majd az A és B, ahol A jelentése egy eredete és B jelentése egy cél - például Boylston Tér Quad - mit kell vissza néhány másodpercen belül egy szöveges üzenet Shuttle Boy mondom, pontosan mikor a következő néhány transzfer vannak, ettől a pont lesz, hogy a pont B. És ez egy sokkal általánosabb példa arra, amit ismert, mint segítségével API. Így például ez itt csak shuttleboy.cs50.net, a tényleges web-alapú megtestesülése ezt. De az adatok hangsúlyozza ezen és más alkalmazások, amelyek CS50 kifejlesztette mind kitéve itt mindenki abban a formában Az API-k, alkalmazás programozási felületek. És ez csak a képzelet módja mondván, hogy az emberek szeretnek állunk az internet és a többiek egy ideig létrehozása szoftver segítségével annak érdekében, hogy megragad adat nálunk, és akkor készítsd el a saját alkalmazásokat tetejére E adathalmaz. Így például, a Shuttle Boy API oldalon van, ami történik, hogy a CS50 kézikönyv, lényegében dokumentumok hogyan megy a kért CS50 kiszolgálók adatokat. Például, ha ismeri a CSV fájlokat, vessző elválasztott értékek, ezek csak egyfajta gyors és piszkos Excel-szerű fájlokat. Szóval lehet kérni Shuttle Boy az összes adatot az összes házak és a GPS koordinátákat, és kapsz vissza, lényegében egy táblázatot, hogy hasonló akkor majd olvasni egy programot a saját, majd a generálja az eredményeket, mint a Shuttle Boy magát történik, hogy csinál. Azoknak, jobban ismert, több modern adat képviseletek közé JSON, JavaScript Object Notation. Valami jön vissza hozzád felé a végén a félévben. De ismétlem, ez csak egy a több CS50 saját API-kat. És izgalmas dolog most, ezekben a napokban, a Facebook és a Twitter és a Google, és elég sok minden népszerű weboldal ből ott van valamilyen API, ami azt jelenti, ha elolvassa a dokumentációja a honlapon, akkor regisztrálj egy fiókot, majd indítsa el a CD-író szoftver tetejére bármilyen eszköz vagy adatokat a vállalat nem rendelkezik. És így az egyik saját tanítási fickók egy pár évvel ezelőtt írt egy Mac verziót. Tehát a linkre Mac itt a bal felső sarokban, akkor valójában Töltse le a Mac OS widget, hogy fut a saját Mac, hogy nem a azonos típusú dolgokat. Szóval ez az egész épület tetején az adatsorok, mint ezek. De még azon a vége felé a félévben. Szóval merüljön valós gyorsan egy bug, csak, hogy milyen kap dolgok bemelegíteni ma, és szerintem vissza néhány dolgot nézett a múlt héten. Különösen, hadd menjen előre, és húzza fel, mondjuk, ez a példa van. Buggy1.c, ez elérhető a kurzus honlapján, ha volna szeretné letölteni, és piszkálni körül magad. De nézzük Nagyításhoz itt most ezt a meglehetősen rövid programot, és csak egy szuper-gyors bedugni néhány alapvető építőköveit, hogy tényleg megy csak elkezdi biztosra. Tehát a kék cucc, sorban 1-től 9, csak softball kérdés. Szóval ezek csak hozzászólás. Nekik nincs funkcionális jelentésük. De ők észrevételeket abban az értelemben, hogy ők megjegyzi, hogy a Én, az ember, arról, hogy magam annyira, hogy előadás után előadás, én tényleg emlékszem, mi ez a program tesz anélkül, hogy olvassa át sorról sorra, és felüdítő történet a fejemben. Továbbá, ha adom ezt a programot, hogy valaki másnak, mint a te, ez sokkal világosabb neked, mert megjegyzéseket, mint ez, mi a program ténylegesen csinál, vagy legalábbis, amit a programot kéne csinálnia. Függetlenül attól, hogy ez a helyes más kérdés összesen. Most, C, többsoros megjegyzéseket, emlékeztetnek arra, hogy on-line 1 itt van a mágikus szimbólum / *. Ez azt jelenti, itt jön a kezdete egy megjegyzést. És semmi más nem számít, amíg el nem éri a végén terminátor, amely * / az ellenkezője. Így az a tény, hogy én 80-néhány furcsa csillagos ide Balról jobbra tényleg csak esztétikai részlet. Ennek nincs funkcionális jelentése. Most mi a helyzet line 11? Mit jelent ez a teendő laikus szempontból? Mi ez? KÖZÖNSÉG: Tartalmazza a standard. DAVID J. Malan: OK, jó. Tehát magában foglalja a stdio.h könyvtár. Szóval mit jelent ez? Nos, hogy a belső fájl, stdio.h, egy csomó funkció nyilatkozatok - azaz, kód, hogy valaki más írta. És egy tökéletes példa egy függvény, ami bejelentett stdio.h jelentése - amely a kedvenc már? Így printf, az egyik a leggyakoribbak használni, biztosan korán, az a könyvtár van. Ha azt zárja ki, hogy a sort, csenget fog kiabálni rám valamit használ illegális szimbólum. Valami nem jelentett talán a kulcsszó, mert a még nem tájékoztatták a fordító milyen printf néz mint ha nem tartalmazza ezt a sort. És még le a Földre, tényleg, hogy mit mond a vonal megnyitja a fájlt, stdio.h, ahol ez a szerver merevlemez, vagy a készülék merevlemezére, és a copy-paste is ott az én fájl, anélkül, hogy a kelljen csinálni kézzel. Most, ha egyszer jutunk ide a fő, nemsokára indulunk ugratás egymástól milyen int és mi void van. De most nézzük meg a három vonal belül, 15-17. Ez itt azt állítják, mint a hibás. 7. sor az én megjegyzések azt mondja: "Ha nyomtatása 10 csillag, de nem. "Miért ez nem nyomtat, sőt, 10 ilyen csillagok? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Pontosan. Tehát észre, hogy kezdünk számolni 0-tól. És ez valójában egy egyezmény a programozás és számítógép-tudomány általában, kezdve számít 0-1 helyett. És ez tényleg csak abból adódik, hogy a Például, amikor már nyolc ember a színpadon, amikor a senki sem emelte a kezét, ők összes ténylegesen nulla. És ez csak egyfajta számítógép egyezmény úgy, tehát, hogy indítsa el számolás 0-tól. Ha ez a legalacsonyabb szám is képviseli bináris. Tehát itt kezdtem inicializálása i 0-ra. Már állítva i 0-val egyenlő. De aztán tette ezt a hibát itt, mondván i kisebb vagy egyenlő 10-ig. De ha úgy gondolja, hogy a, ha 0-val kezdődnek, és aztán megyek legfeljebb 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, én valóban lesz nyomtassa ki 11 csillag a képernyőre, mert már emelkedett A, és egyenlő a 10-ig. Így a könnyű megoldás itt, akkor mi? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Csak változtatni, hogy kevesebb, mint. Ha szeretné, akkor ezt. De általában, ez elítélik. És így kezd számolni 0-tól csak amit kell általában szokni. Nos, mi ez az egész konstrukció önmagában? Ez a vonal 15 demarks egy for ciklust. Tehát nem egy funkció. Ez csak egy nyilatkozat. Ez egy looping konstrukció, mint láttuk Scratch. És ez három részből áll. Figyeljük meg, hogy van az első rész a bal oldalon a pontosvessző. Ott van a középső részt a két pontosvessző. És akkor ott van a jobb oldali részén a jobb a második pontosvessző. Most, az első ilyen mit csinál? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Back ott? Igen? KÖZÖNSÉG: Inicializálási. DAVID J. Malan: Inicializálási. Szóval mit jelent ez? Van hirdetett nevű változó i. Ez a típus int, mert már meg int i. És én inicializálása i értékét 0-ra. Szóval, mi is ez valójában mondani? Ez gyakorlatilag azt mondja, hogy a számítógép hé, adj elég memória, elég RAM, hogy illeszkedjen a számot, majd helyezze a 0 szám, hogy darabja a RAM. És mint egy félre, mekkora egy int általában, legalábbis belülről a készülék? KÖZÖNSÉG: 32 bit. DAVID J. Malan: 32 bit. Ez azt jelenti, hogy nekem 32 bit, más néven 4 byte, és helyezze a 0 érték benne, ami elég egyszerű, mert ez csak azt jelenti, hogy meghatározott összes bitet 0-ra. Tehát most, a második rész itt a feltételt. És a feltétel, ahogy a neve is sugallja, mi a vizsgálat újra és újra és újra, hogy vajon ez igaz-e vagy hamis. Szóval, ez csak azt mondom, tegye be a következő sorokat a kód - nevezetesen a 16 vezetéken, mert ez az egyetlen tagolt alatt - amíg én 10-nél kisebb. És miután minden egyes iterációs ezen keresztül hurok, végezze el a Növelés, amely ebben az esetben az i + +. Most, nem kell, hogy i + +. Lehet, hogy i -. De ha ezt tettem, mi a viselkedés megy -e, hogy ezzel a programmal? KÖZÖNSÉG: Ez lesz egy végtelen ciklus. DAVID J. Malan: Ez lesz valamiféle végtelen ciklus, hacsak szerencsénk után negatív 2000000000, vagy úgy. Lehet, hogy a dolgok köré, csak a természet a véges bitek száma, hogy már kiosztott egy int. De ez biztosan fog navigálhat sokkal több, mint 10, és bizonnyal több mint 11-szer van. És most, ahogy Mellesleg, rájönnek, hogy i + + és i - tényleg csak szintaktikai cukor. Ez csak összevont írásmód mi egy kicsit kifejezetten írott az alábbiak szerint: i = i + 1. , Amely azonos a i + +. Csak a fajta úgy néz ki, csinosabb mondani i + +. Ez tömörebb, könnyebben olvasható. És a legtöbb ember csinálni helyette. De ez azonos funkcionálisan amit most láttam. Tehát röviden, a gyors javítás itt csak mondani navigálhat i 0-tól egészen a kevesebb mint 10-ig. És aztán valóban kap 10 csillag. Akkor próbáljuk meg. Hadd nyissa ki a terminál alján. Hadd menjek be a könyvtárba, hogy ez be És én fogom fordítani, hogy kézzel csenget most. És én fogom fordítani ezt buggy1.c, Enter. És most buggy1, miért nincs ilyen fájl vagy könyvtár hívott buggy1? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen. Szóval ez tényleg hívják a.out. Szóval, visszahívása, ha csak futni csenget, ha csenget a fordító, és nem adja meg a kívánt nevet adni a program, ez lesz az alapértelmezett a a.out. Szóval, tényleg, ha én ls - hoppá. És én Nem mondta - a fekete-fehér kérdés egyes akkor szembe került. De hadd tegyem ezt. Ott van a.out a bal oldalon van. Tehát futtatni a.out helyett buggy1. Szóval hadd menjen előre, és ezt. . / A.out, Enter. És nyilvánvalóan nem mit csináljon? KÖZÖNSÉG: Mentés. DAVID J. Malan: Mentés a fájlt. Annak érdekében, hogy könnyen megoldható ütő Control S, vagy megy Fájl, Mentés, mint a legtöbb program. Hadd menjek le ide, törölje a képernyőt, futtassa újra. És van még egy bogarat. Szóval, mi folyik itt - KÖZÖNSÉG: Nem összeállításához. DAVID J. Malan: Ah, jó. Én nem összeállításhoz. Mint egy idióta, nézem a kódot, hogy mi a baj. Szóval csenget buggy1.c most a.out. És puff, mentve. Tehát úgy néz ki, egy kicsit csúnya, mert nincs új sor bárhol a programban. De ismétlem, ez csak esztétikai részlet. És legalább ha mi számít e ki, meg kellene most látok 10 ilyen csillagokat. Nos, mi ez a második bemelegítés példa? Tehát buggy2 azt állítják, hogy ez a verzió is nyomtat 10 csillag, soronként egyet. Tehát ebben az időben, van egy újsor karakter, csak azért, hogy a dolgok egy kicsit szebb. De ahelyett, hogy mit kapok, ez. Szóval hadd csináljam csenget buggy2.c, Enter. Most már újra hívják a.out. Az Enter billentyűt. Én csak látni egy új sort, csak az utolsó új vonal költözik a prompt a következő sorra. És mégis egyértelműen voltam nyomtatás *, majd egy új sort, *, Majd egy új sort. De mi a hiba itt? Igen? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Pontosan. Tehát ellentétben néhány nyelv, mint a Python, ahol behúzás valójában funkcionális jelentését, a nyelv, mint a C - mint látni fogjuk, PHP, JavaScript - A behúzás tényleg csak az emberek javára. Így az a tény, hogy már behúzott vonal 16 és 17 jól néz ki, de nincs funkcionális jelentéssel. Ha azt akarom, mindkét vonalon végrehajtani részeként a hurok, akkor csatolnia kell azokat kapcsos zárójelek által ezt. Csak vágni, hogy a sarokba, és elhagyhatjuk a kapcsos zárójelek, ha mi a helyzet? KÖZÖNSÉG: Csak egy sort. DAVID J. Malan: Csak egy sort. Szóval, ez csak egyfajta szép egyfajta szintaktikai részletességgel, hogy a Ön nem vesztegeti az idejét írásban három sor, melyek közül kettő kapcsos zárójelek, csak írni egy sort. De ha két vagy több vonal, mi Valóban szükség van erre. És most hadd mentse el ezt. Hadd menjek előre, és futtassa újra csenget. Akkor hadd futtasd a.out, és most őket, soronként egyet. Most a.out megint egyfajta buta név egy program. Honnan tudhatom, hogy valóban csenget adjon nekem egy fájlnevet ez még inkább felhasználóbarát, mint buggy2 magát? Egy kicsit pontosabban? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: OK, úgyhogy valóban megteszi a nagyon felhasználóbarát parancsikont, és csak annyit írj, hogy buggy2. Én nem adja. C ebben az esetben, és nyomja meg az Entert. És mit jelent az, hogy lefordul buggy2.c nekem a kérve csenget csinálni. Konkrétan arra kéri csenget, fut csenget a módon több parancssori kapcsolókat, vagy, mint én valójában szüksége van. Idővel, akkor gyere vissza, amit az összes ilyen különféle rejtélyes kötőjeles kifejezések jelent. De most, hogy ez csak megmentettél a baj tekintettel, hogy emlékezzen, és, hogy írja ki az összes e Különböző kötőjeles kifejezések. És a fejjel rá végső soron hogy most már buggy2. Ha azt akarom, hogy ezt manuálisan, bár én ehelyett ezt - csengés-o buggy2 majd buggy2.c. És ez hasonlóképpen adj egy nevű fájlt buggy2. Tehát röviden, csenget ez a fordító. Győződjön meg csak egy felhasználóbarát eszköz, hogy mi lesz a további és a több, mivel ez csak elkezd egyszerűsíteni a dolgokat nekünk. És vissza 0, végül. Most, csak azért, mert, de kezdünk ugratás része ma és szerdán. Van még kérdése bármelyik ez? Igen? KÖZÖNSÉG: [hangtalan] ls idézőjelek ott? DAVID J. Malan: OK. Mikor gépelt ls az árajánlatok, amit én csinál valami varázslat a színfalak mögött, hogy rögzíti a hibát. Elfelejtettem, mintha már mondtam sokan a fórumok, van - mi ezt most - sudo yum-y frissítés appliance50. Hoppá, hogy ez leírva van. Így a készülék, mint egy operációs rendszer. Ez fut ezt az operációs rendszert, a Fedora. És most, mert az én lassú internet-kapcsolat, Nekem Tényleg Elárasztott meg. Szóval futó sudo yum frissítés, ahogy azt mondjuk, hogy nem a probléma set, lényegében hasonló fut automatikus frissítések Mac OS vagy Windows. És az oka futtatása legelején a probléma halmaz, mert amikor létrehoztuk a készüléket, I elrontottam, és én véletlenül készült az összes programot néz fekete a fekete képernyő, ezért ön nem látta őket alapértelmezés szerint. De a legújabb verzióját a készülék rögzíti ezt. És Megcsinálom hogy közben szünet, ha már van internet kapcsolatot. Tehát az idézőjelek csak elrejti a hibát, nagyon diszkréten, látszólag. Egyéb kérdés? Igen? KÖZÖNSÉG: Ha nem teszi származik? [Hallhatatlan] DAVID J. Malan: Jó kérdés. Ha nem teszi származik? Ez egy olyan Linux-program, amely már sok éve, hosszú előtt CS50. És jön egy operációs rendszer, mint a Fedora. Nem származik CS50 könyvtárból. Valójában, az egyetlen dolog, hogy jön a CS50 könyvtárból eddig, hogy láttuk, a getString, getInt, minden e Get funkciók, és a szó string, és bizonyos mértékben, a szó bool. De mi ugratni, hogy eltekintve, amikor belevetik magukat a CS50 készüléken. Szóval igen, még egy kérdés itt. KÖZÖNSÉG: Amikor azt mondta, hogy majd a buggy, hogyan működik a számítógép tudja [nem hallható]? DAVID J. Malan: Jó kérdés. Tehát, ha csak futtasd a make buggy1 vagy hogy buggy2, hogyan nem teszi tudja? Szóval alapértelmezés szerint, ha írja, hogy buggy1, hogy néz ki egy nevű fájl buggy1.c. És akkor végrehajtja a megfelelő csenget parancsokat, ezzel felülírva az alapértelmezett kimeneti fájl neve a.out. Valójában, ha megnézzük, hogy mit csinál, milyen - menjünk kilépéshez. Ha megnézzük, mi teszi valójában csinál, hogy buggy2, ez már naprakész. Szóval hadd vegye ki az rm parancsot, a programot írtam korábban. Beírás Y-E-S annak megerősítésére, hogy szeretnék eltávolítani. Ha most megcsináljuk, észreveheti, hogy ebben a nagyon hosszú sorban, van egy utolsó dolog, amit itt-o buggy2. Minden gyártmányt csinál halad ez az érv, hogy úgy mondjam, a Csenget, hogy nem kell beírni magam. Rendben, tehát egy gyors pár közigazgatási közleményei. Tehát a szakaszok, amelyek hivatalosan is megkezdte a jövő Vasárnap, akkor mindig szeretné, hogy, ha a van egy, egy laptop. Ha Ön nem rendelkezik a laptop, akkor érhetünk el nekem csepegtető nekem egy e-mailt. És mi kitaláljuk a munkafolyamatot. Mi általában talál szakaszban, hogy ők részt fogalmi, részben hands-on. Majd külön használni szakasza kérdések egy része A hét problémája készlet, séta néhány fogalmi anyag előadás. És ez mind a jelenlegi problémát set. És mi is belevetik magukat néhány gyakorlati tevékenységek, néha ebből lesz szükség, hogy be kell nyújtani, néha melyek nem. Például, az első héten, ők azt jelentette, éppen mint egy bemelegítő gyakorlat. És rájössz, hogy ezek a problémák valóban csak ezt. Ők azt jelentette, hogy viszonylag kicsi, de nem feltétlenül triviális programokat írni, amelyek nem feltétlenül izgalmas és maguk, hanem jó lehetőséget gyakorolni szintaxis, az új funkciók, a kényelmet egy rész, ahol van egy pár a osztálytársaival jelenthetnek valamint a TF. És mit fogunk csinálni időbeli nevű eszközt használjuk CS50 Spaces, amely ahelyett, hogy csak a CS50 Appliance, akkor ehelyett megy egy weboldal a böngészőben, ahol képes lesz arra, kódot írni egy böngészőablakban közben részben. És akkor, ha úgy dönt be, az oktatás többi ezután megjelenítése bármit is írsz a képernyőn az Ön böngészőjében ablak fel az osztály elé, akár névtelenül vagy nyilvánosan, hogy ő tud majd sétáljon végig az osztálytársaival, mit csináltál jól, mit nem csináltam jól. És ismét, megnyugodhat mindez lehet szépen anonimizálni. De lesz egy szép lehetőség sokkal interaktivitás, mint valami hasonló előadás lehetővé teszi. Addig mi lesz ezeket a dolgokat az úgynevezett super szakasz, amely nem kötelező, de mindenki előtt nyitva állnak a az osztály, hogy meg tudod csinálni ezt többet együttesen a probléma meghatározhatnak egy. Itt van a menetrend. Ezt is kifüggesztett a honlapon a cs50.net. Figyeljük meg, hogy nem lesz egy hacker-specifikus 1 holnap délután. És mi lesz film egy ma, egy holnap, és írjon a on-line 24 órán belül. Szóval, ha nem tudja, hogy ezek közül bármelyik alkalommal, ne aggódj. És ismét, az ütemezés interneten most cs50.net. Ami a vágás is, akkor már ütött egy feladni arra utasítja, hogy menjen a kurzus honlapján, hogy megtalálja ki a szakaszt. Ha az élet megváltozott, és meg kell változtatni a szakasz, nem probléma. Menj vissza ugyanezen URL, cs50.net/section, egyes szám, és akkor töltse ki a hasonló formában, így Ön majd adja meg a beállításokat. És mi lesz nyomon a hét végére, hogy mit tudunk befogadására. Múlt héten emlékeztetni arra, hogy javaslatot tettünk a CS50 Fórum, során a vita eszköz, előadás. Így volt 40 kérdés, hogy arra kérték, és válaszol közben előadás. Szóval úgy tűnt, hogy jól működik, úgyhogy továbbra is próbál csinálni. Amennyiben menet közben előadás, nem csak jól érzik magukat a tudatosság a kezed, nem probléma. Ide cs50.net/discuss, posta van, és az egyik tanítási ösztöndíjasok akkor vagy válaszolni elektronikusan vagy növeljék a kéz az Ön nevében névtelenül kérni, attól függően, jellegére vonatkozó kérdés. , Mind a visszajelzések általában psets lesz vissza egy héten belül. Mert eltart egy kis ideig szakaszok elérése egyensúly, az első Pset, 0 és 1, lesz egy kicsit késik a dolgok megnyugszik. De a híradásokat az, hogy az elkövetkezendő hetek során. Rendben, hadd tegyem én súlyos hang egy pillanatra. Tehát ez valójában egy érdekes éghajlati legyen tekintettel ezt a beszélgetést, amit az összes többi dolog folyik az egyetemen az ezekhez kapcsolódó. De CS50 bizonyára megvoltak a maga története e különleges téma, minthogy minden évben, ezt az utat, többféle éves, Ad-Boards durván 3%-át az osztály. Ez a legutóbbi év, 2011, CS50 Ad-bordával 35 versenyző. Ez nem hiszem, mivel nem egyértelmű. Ismerd fel, hogy a kurzus a tananyag, van egy lapja bemutató nyilatkozatot, ahol a vonalak. Ugyanez a megállapítás ismétlődik minden az egyik probléma meghatározza az egyik oldalon. Szóval említem ezt ma tényleg csak azért, hogy emberek tudatában ennek. És az általunk kipróbált különböző dolog. És gondoltam tennénk ma csak egy pillanatra ténylegesen megnézünk néhány korábbi esetekben, hogy jöjjön fel. Ahelyett, hogy tartsa ezeket a piszkos kis titkait, ténylegesen rámutatni, hogy mit tettek a diákok, és hogyan általunk észlelt , és igazán az, amit az átfogó motiváció a még akkor is, hogy ilyen beszélgetést. Tehát azt mondta, a vonal lényegében ez - a per a tananyag, akkor szívesen, akkor javasoljuk, hogy beszélni osztálytársaival. Ez az egész célja miután ezek együttműködési hivatali óra Annenberg és ösztönzi az embereket a A projekt végső együtt dolgozni. De a vonalat húzott, amikor eljön az ideje, hogy valóban levelet a végső megoldás. Beszél angolul, teljesen rendben van, beszél pszeudo-kód, teljesen rendben. Küldje egy osztálytársa a Pset, mondják el nekik, nézd át a képernyőn, mint a kéz továbbra gépelés, át a vonalat is. Nem látod a tanterv az adott sorokat. De csak festeni egy képet, hogy ez sajnos a Valójában észre, hogy vannak olyan honlapok, hogy ott tekintette megoldások ebben az osztályban, és sok más osztályokba. Az a tény, hogy Ön vagy egy 3%-a tudja, hogy ez létezik, azt jelenti, hogy tudjuk, hogy ez létezik. Az a tény, hogy vannak olyan honlapok, mint ez, ahol Fizethet valaki ténylegesen a probléma szettek - ez volt tényleges helyzet, hogy jött az elmúlt évben. Ez egy website hívott odesk.com. És Tim volt a neve annak a személynek van, aki kiküldetés ezt a weboldalt, és megkért valakit, hogy az ő Pset 7- ebben a konkrét esetben. Nos, odesk.com nagyon Google-képes, és mi is az nagyon jó Googling. Itt is vannak olyan területek -, és ez az ember nem kegyetlen, őszintén szólva. [Nevetés] DAVID J. Malan: Az a vicces dolog ez a honlap, ha olvasd el a Rólunk oldalon beszélnek a vállalati kultúra és hogyan ügyfélszolgálat számuk-on prioritás, hogy győződjön meg arról, hogy a feladatokat kap fordult időben. De minden komolyság újra, az a tény, hogy ezek az oldalak létezik, észre mi is a tudatában ilyen jellegű oldalakon. És hogy ön egy értelemben, hogy mit alkot ez általában úgy, hogy általában nem nagy botrányok, ahol az emberek dolgozik együtt be bármilyen tömeges skála, hanem inkább hogy ezek a késő éjszakai pillanatait gyengeség, ha van olyan sok a tennivaló, ez 04:00, te kimerült, és Szerintem magának, nos, hadd vessen egy pillantást a szobatársam vagy a barátom kódja vagy hasonló. És megnyilvánulásai ennek sajnos magában Student A benyújtó valami ilyesmi and Student B benyújtása valami ilyesmi, ami természetesen a számítógépes tudományos osztály, rendkívül könnyű számítógépes szakemberek kimutatására szoftver. Ez a másik közös paradigma, ahol volna valami óta dolgozik együtt, hogy valaki, talán beszélgettek Angol, csak finom, pszeudokód. De aztán eljön az ideje, hogy ténylegesen benyújtására, valamint a psets csak kap kicserélt e-mailben vagy Dropbox vagy hasonló. De a kísérlet, hogy kevésbé nyilvánvaló, hogy ez a mi történt, akkor ez a mi benyújtani. Ez is, nem elgáncsol jól megírt darab szoftver, mint mi, hogy valóban kimutatására ilyen jellegű dolgokat. És valóban, mit teszünk, run program, amely összehasonlítja az összes Az idei állításával ellen a múlt év állításával szemben, mindent, amit talált a Internet, szemben minden munkát honlapján odakint. Mindez nagyon automatizált. És így mi ezt nagyon nagy tisztesség, hogy a 97%-uk valóban dolgozik a seggüket ki ezen és más osztályok és üzembe az összes, hogy erőfeszítés, hogy a munka végső soron benyújtják a saját. És tudok menni korosztály számára. Ez csak egy maroknyi tavalyi esetekben. Néhány diák be ezeket a fájlokat azonosan Pset 2, Pset 3, Pset 4, Pset 5, Pset 6, Pset 9. Ebben az esetben, ez volt kvíz 0, és egy tavaly, ahol két diákok benyújtott egyformán ez a mondat a sok közül mások, "A kérés típusú -" pont, pont, pont. Tehát még egy osztályban, 600 tettünk észlelése A benyújtott vetélkedők. Szóval röviden, ez - őszintén szólva, utálom, ezt a fajta beszélgetés - de ez tényleg egy szándékos erőfeszítést ebben az évben, hogy megpróbálja vezetni le ezt a számot. Mert annak ellenére, hogy azt mondjuk, hogy ezeket a dolgokat minden évben, azt hiszem, a valóságban miután éltek rajta egy pár másodperc, mint máskor, és valójában csak rámutatva hogy mi tűnhet, eh, nem olyan nagy dolog, legalábbis Szerintem vissza erre az adott pillanatban, mind az igazságosság magad és a osztálytársai itt. Tehát, ha valaha is bármilyen kérdése, hogy hol a vonal nem, kérjük, csak érhetünk el nekem személyesen. De a válasz mindig, teljesen hangsúlyozta a last minute, készpénz a nap végén. Vagy, ha ez a kérdés, hogy nem minden késedelmes nap, őszintén szólva, e-mailt nekem személyesen. Majd kitalálok valamit. Kérem, ne tegye időt itt Harvard veszélyezteti. Nos, azt hittem, meg kell világosítani a hangulat, így tartalmazza ezt a következő diát. [Nevetés] DAVID J. Malan: Ez az oldal nagyon jó volt. Igazából egy kicsit zavart. Van ez. És akkor ez csodálatos volt. Oké, tehát gondolni, hogy cica késő éjszaka, amikor így ezeket a határozatokat. Rendben, szóval vissza több móka és kevésbé komoly dolog, mint a körülmények. Rendben, szóval röviden beszéltünk ezekről. Ez olyan dolog, ami valószínűleg elég ismerős a világ Scratch. És a világ Scratch, már ezt az igényt néha csinálj villa az úton. Vagy ezt vagy azt, vagy ez a másik dolog itt. És ha azt akarjuk, hogy ezt, fel tudjuk használni, a C most ezt, ha mást építeni. És akkor itt van logikai kifejezések. Például, logikai kifejezések itt tudjuk OR össze őket, abban az értelemben, hogy van ez a feltétel, VAGY ezt a feltételt. Tudunk és őket, abban az értelemben, hogy azt akarjuk, hogy ellenőrizze ezt a feltételt, és hogy feltételt. És itt van egy switch most, ami nem annyira hasonló szintaktikailag az ilyen jellegű feltételeket, de lehetővé teszi a számunkra, hogy nem felel meg, ha else if, else if, else ha, és a hasonló egyszerűen felsorolásával azokat eseti az eseti. Így láttuk az utolsó alkalom. És akkor elkezdtük érintve dolgok, mint a hurkok. Láttunk egy ilyen csak egy pillanattal ezelőtt. De vannak az egyéb looping konstrukciókat. Például, ez itt. Tehát while (feltétel), ezt a dolgot újra és újra. Tehát alapvetően, amit úgy tűnik, hogy a különböző közötti a hurok, és ez a while ciklus itt? Ez a hurok, és ez a while ciklus. Igen? Mi ez? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Jó. Tehát mivel a for ciklus feltételt, ott világosan tovább szintaxist. Van ez inicializálás, itt van ez a frissítés. A while ciklus, de csak ezt a feltételt. Tehát úgy tűnik, hogy ez egy kicsit lecsupaszítva szemben a vonatkozó hurok, ami azt jelenti, ha azt akarjuk, hogy a változó és azt akarjuk, hogy Növelés, akkor valóban meg kell ezt a dolgot magunkat. Szóval hadd menjen előre, és nyit gedit. Hadd kapcsoljon át a készüléket. És most csak egy gyors kis példa, hogy különbözteti meg az egyik ilyen a többi. És a hátsó fejemben van, azt kell mondanom, egy dolog. Én kifejezetten megemlítik a nevét Tim. Tim valójában valaki, hogy egy diák próbáltak tenni a házi feladatot nekik. Nem volt Tim az adott szakaszban. Szóval észre, nehogy nyilvánosságra egy diák, nem volt diák. Ez egy véletlenszerű ember az interneten dolgokat meghatalmazott útján tavaly. Tehát azt látjuk, hogy is. Tehát ebben az esetben is, hadd menjen előre, és nyit egy új fájlt. File, New. Ez ad nekem egy lap van. Hadd menjek előre, és mentse el loop.c. Hadd menjen, és kattintson a Mentés gombra. És akkor itt, menjünk előre, és kezdjük el beírni # Include . Hadd Nagyítás Most megteszem int main (void). Most hadd menjen előre, és nem az (int i = 0; i < oh, 10; i + +). És most megyek előre, és ne nyomtassa ki a csillag, hogy én tette korábban. És akkor a végén ez a program, mi csak megy nyomtat egy új sort, csak azért, hogy a gyors nem úgy néz ki minden rendetlen. vissza 0-ra. Úgy tűnik, szintaktikailag helyes? Eddig. Akkor lássuk. Szóval hadd kicsinyítés, menj be a terminál ablakot. És hadd menjen előre és fuss hurok, mert felhívtam ezt dolog loop.c. Tehát, hogy hurok. Úgy tűnik összeállításához OK. Hadd futni hurok, és most az Enter billentyűt. És úgy tűnik, hogy nyomtatott 10 csillag. Szóval, csak átalakítani, hogy ez egy while ciklus, és mi típusú kérdések is út vége. Tehát ahelyett, hogy ezt, hadd menjek be ide, és azt mondják, míg i kevesebb, mint 10 - hadd megszabadulni a for ciklus. OK, így van egy pár probléma már. Tehát az állapot ugyanaz, de én természetesen hiányzik a inicializálás. Én hiányzik a Növelés. Szóval mit kell a fordító valószínűleg azt mondja nekem, amikor megpróbál fordítani ezt a programot? Igen? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Jó. Így fog mondani valamit, mint a be nem jelentett - ebben a esetében, változó i. És valóban, használja a be nem jelentett azonosító i. És így ez ellentétben van a nyelven, mint a PHP és Python és Ruby, amellyel néhányan ismerős lehet, ahol akkor csak egyfajta kezdete a változók akarva-akaratlanul, és nem kell aggódnia nyilvánító őket kifejezetten mindig. A C-ben és a nyelvek, mint a Java és a C + +, meg kell super explicit. És ha egy változót nevű i, el kell mondanod nekem milyen változó van. Szóval kell majd rögzíteni ezt az alábbiak szerint. Megyek is, hogy menjen fel ide, és írja int i, ezért Én úgy nyilatkoztak, változó nevű i. Nos, én is kihagyott egy lépést. Én nyilvánvalóan nem inicializált, de lássuk, hogy Legalább gyártmányú csenget megálló panaszkodnak. Szóval hadd remake ezt a programot. Rendben, most már csak a panaszos más okból. "Változó 'i' inicializálatlan használata esetén itt." Rendben, tehát ez elég egyértelmű. Inicializált csak annyit jelent, hogy egyenlő értéket. És még nem történt meg, hogy hadd próbálja értéke 0. Most próbáljuk meg újra, és újra futni csenget. Szerkesztette: ebben az időben. És nem vagyok arról, hogy futtatni. De a nagy, öreg végtelen ciklus, mert tettem a inicializálás tettem az állapot, de én soha nem csináltam bármilyen Növelés. Szóval, hogyan tudom csinálni a Növelés? Nos, egy darabig hurok, úgy érzi, mintha megyek, hogy csinálni belül a hurok, mert ugyanúgy, mint az első A hét példák csinál looping konstrukciók, mint például a a zokni és a self-számlálás, tennünk kellett amit a legvégén, szeretnék visszamenni a következő sorra. Mi van, ha én megyek előre, és ezt i + + itt? Nézzük még lefordításával. Catch me már. Mi a baj itt? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Szóval ez biztosan nem int. Ez i. És a kapcsos zárójelek, mint korábban, behúzás nem elég. Szóval most már ezt a konstrukciót. Szóval, míg én 10-nél kevesebb, nyomtasson ki egy csillag, akkor növelni i. És ahogy a while ciklus működik, hogy amint bejön a alján a hurok, amely ebben az esetben úgy néz ki, mint a 10. sorban, ez fog visszamenni 6. sor, amikor is a feltételt kell újból ellenőrizni. És ha én még mindig kisebb, mint 10, akkor megteszem tételek 8 és aztán 9, aztán elérte a 10, és térjen vissza a 6, ismét újra és újra és újra, amíg én 10-nél kisebb. Szóval újra futtassuk le a make itt. Oké, most már összeállított rendben. Hadd újra futni hurok. És most már tényleg úgy tűnik, hogy működik. Szóval pluses és minuses itt? Nos, eddig van valójában nem egy egész PLO - annyira aranyos. Rendben, ez volt - ah, hogy baleset volt. Rendben, menjünk vissza a for ciklus. Tehát hurkok szép, mert ők szuper explicit. És annak ellenére, hogy egy kicsit nehézkes írni, ez nagyon erős, és lehetővé teszi, hogy nem több dolgot egyszerre. Míg a hurkok nem úgy tűnik, hogy egy hatalmas érték, csak mégis, mert úgy érzi, már csak több munkát. Meg kell tenni az inicializálási ide, a naprakésszé ide, és meg kell emlékezni, hogy mindent megtesz, hogy. Szóval majd meglátjuk, az időben, hogy míg a hurkok ténylegesen kölcsön magukat, hogy csak a különböző kontextusokban, más adatok struktúrákat, mint a listák és hash táblák, a dolgok akkor kap félévközi. De most, tudom, hogy van ez a harmadik fajta ismert, mint a do- míg a hurok. És láttuk ezt röviden. És ez lehet szuper segítőkészek Pset 1. Minden alkalommal, amikor akarsz valamit, majd ellenőrizze, hogy A felhasználó működött együtt, és ha nem, újra meg újra, a do- while ciklus alkalmas arra, hogy ez a fajta logika. Mivel a rendelés fentről lefelé itt is sugallja, nem szó szerint azt jelenti ezt. És ezt újra és újra, mi lenne az? Lehet, hogy ez azt jelenti, hívja getInt vagy getString majd ellenőrzése során az getInt vagy getString majd kiabál a felhasználó, ha nem működött együtt kérve őket, újra és újra és újra. Ha akarsz valamit egyszer, majd ellenőrizze néhány feltételt. Akkor próbáljuk meg. Hadd ténylegesen megváltoztatni ezt most, hogy a do-while ciklus. És én megyek előre, és tegye a következőket. Szóval tegye a következőket. Csináljuk int i = getInt (), de nézzük először megmondja a felhasználónak mi a teendő. Szóval egy kicsit más ebben az időben. "Adj egy int." Akkor fogom használni printf erre. És most megyek, hogy menjen le itt, és én fogom ezt míg én nem, mondjuk, nagyobb, mint - lássuk, i, mondjuk, kisebb, mint 0, vagy i nagyobb, mint 10. Más szóval, szeretnék egy szám 1-től 9-csak önkényesen. Szóval egy egyesített logikai kifejezést itt arról, hogy i kevesebb, mint 0, vagy nagyobb, mint 10, amely esetben fogom ezt hurok újra itt. Szóval megint ezt - míg i kisebb mint 0, vagy nagyobb, mint i 10. Tehát most menjünk előre, és ezt egyszer tettünk ezt. Nézzük csak egy gyors józanság csekket. printf ("Köszönöm, i% d", i.) Szóval ez az egyszerű program kéri a felhasználót egy int, gondoskodik arról, hogy ez a bizonyos tartományban, 1 és 9 közötti, majd köszönetet mond a felhasználó által emlékeztetve őket, amit ők csak beírt, ahogy egy kis józanság csekket. De lássuk, ha ez működik, mint tervezték. Hadd menjek fejjel lefelé van, és újra futtasd a make hurok. Hmm. "A be nem jelentett azonosító" i ". Ez furcsa. Azt hittem, úgy határozott, hogy. Ugyanaz a tünet, de különböző kódot. Igen? KÖZÖNSÉG: [hangtalan] belül a két, meg kell [Hallhatatlan]. DAVID J. Malan: Pontosan. Tehát ez valóban elvezet egy témára nevei hatályát. Kiderült, hogy a C, ismét igazán viszi szó. És ha valamit csinálni, mint ez, ahol állapítsa int majd rendelje hozzá valamilyen érték, de te, hogy belsejében a pár kapcsos zárójelek, ami C csinál, azt feltételezi, hogy csak szeretnénk a 32 bit nevei i léteznek az keretében a kapcsos zárójelek keretein belül a vonalak 6 és 9 között. Tehát én nyilvánították, és hozzá van rendelve a érték 8 vezetéken, de amint kapsz kívül 9-es vonal alatti kapcsos zárójel, i már nem körét, hogy úgy mondjam. S-C-O-P-E. Ez már nem a megfelelő kontextusban. Tehát most nem én, tehát ez, mintha mi sem volt kijelentette, hogy egyáltalán. Szóval, mi a javítást, akkor valami ilyesmit, ha a Ennek oka, hogy én nyilvánították a kapcsos zárójelek, amelyek látszólag rossz? Itt? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen. Így tudjuk inicializálni kívülre. Szóval hadd menjen előre, és törölje a nyilatkozatot, amellyel alkatrészek Én meg a típusát, és hadd tegye fel ide. Így az 5. sorban, most azt mondja: "Adj nekem egy int." Nevezzük i. Hirdetmény sorban 9, én nem akarom ezt, mert már a 32 bit. Nem akarom kérni a számítógépére, különböző 32 bit. Azt akarom, hogy ugyanezen 32 bit. És most, mert én bejelentett 5. sorban, még mindig legális használni sorban 11 és 12-es vonal. Akkor hadd próbáljam meg újrafordítani ezt, és látni ha csenget leáll kiabál. hogy a hurok. Így most ez "implicit nyilatkozatot funkció "GetInt" érvénytelen C99. "Mi ez? Igen? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen. Tehát most, hogy én vagyok ténylegesen használt getInt, ez nem valami hogy csak jön a C. Ezt származik CS50. Így kell ezt itt. És hadd menjen vissza a prompt le itt, és futtassa újra tenni. Oké, végre. Most már úgy határozott, hogy a másik hibát. Hadd futni hurkot, és meglátjuk, mi történik. "Adj egy int." Fogom adni 11. Fogom adni -1. Fogom adni foo. Adok neki 5. És most tényleg működik. De a prompt megváltozott oka van. Miért mondott újra az egyik ilyen alkalommal, de nekem egy int a másik három alkalommal? Miért van az, hogy a magatartás más? KÖZÖNSÉG: adott neki egy string. DAVID J. Malan: Tessék? KÖZÖNSÉG: Ön adott neki egy string. DAVID J. Malan: Igen. Tehát adott neki egy string ebben a harmadik kísérlet, amikor gépelt foo. Foo egy string. Ez nyilvánvalóan nem int. És az is, hogy CS50 hajtott végre getInt, hogy mi ne ellenőrizze, hogy valami kisebb, mint 0, vagy nagyobb, mint 10 az Ön számára, mert honnan tudjuk előre, hogy milyen int akarsz? De mi minimálisan ellenőrizni az Ön számára, nem a felhasználó legalább írjon egy egész? És ha nem, akkor kiabálni a felhasználó beírja "újra" a a képernyőn. Tehát most van egy program, ami hurok. Oké. Nos, melyik van valami a jobb konstrukció? Szóval, ez az, ahol a dolgok kezdenek egy kicsit rendetlen, a tény, hogy meg kell emlékezni, hogy állapítsa meg a változót ide ha szeretné használni belsejében valamilyen kapcsos zárójeleket és kívül. De még ha ez úgy néz ki, egy kicsit rejtélyes az első Dióhéjban, csak újra emlékezni az egyszerű logika. Annak érdekében, hogy bármit C, hogy ez a funkció vagy ez egy változó, van, hogy szerepeljen, ha ez a funkció néhány könyvtárban, vagy meg kell bejelenteni. De most meg kell, hogy külön szem előtt tartva azt a tényt, hogy a Ön kijelenti, hogy a jobb hatályát. Te nem hozataláért túl szorosan belül zárójelben. Szóval hadd ténylegesen visszaállíthatja. Ha visszamegyünk a mi, például a korábbi, és megyek vissza a int, int i = 0; i <10; i + +, és én do printf csillagok, mint ez, és zárja paren, és most printf i most - szerint ugyanazt a logikát, mi fog történni, amikor megpróbálom fordítani ezt a programot? KÖZÖNSÉG: Érvénytelen azonosító. DAVID J. Malan: Tehát ez egy érvénytelen azonosító, be nem jelentett azonosító. Nos, az ok, ez egy kicsit más. Itt nyilvánvalóan nem kapcsos zárójelek itt, hanem az azonos ötlet, ugyanaz a történet a hatály alkalmazandó. Ha már bejelentett egy változó, mint én belül a a hurok, akkor is, ha kifejezetten nem írt a göndör nadrágtartó, gondolok rájuk mentálisan még mindig ott van, ahol i eset csak akkor érvényes, belsejében a hurok. Ez nem érvényes, ha egyszer kap a következő sorra, amely Ebben az esetben a most 10. Szóval csak néhány kérdések körét és a hasonlók. Rendben, bármilyen kérdése? Rendben, így ez a fajta egy triviális kis program, nyomtatás csak kis csillag. De lássuk, ha eszébe jut ez a dal itt. Ez egy hihetetlenül idegesítő dalt a gyerekek is énekelni az iskolabusz és hasonlók. De mi a jó benne, hogy van ez a ciklikusság, ahol ez "99 üveg sör a falon, 99 üveg sör. Vegyünk egy lefelé, add körül, 98 üveg sör fal. "És akkor a dalt megismétli a 97, majd 96, majd 95, majd 94, egészen a 0-ra, ha valóban van, hogy amennyiben a buszon. Szóval ez egy jó program egyfajta munkagép, mert a Istenem, ha tudna csak végrehajtja-e ezt egy pár sornyi kódot, akkor kiköp a teljes szöveg az e dal elég gyorsan. De az út mentén, akkor lehet kezdeni, hogy most kötekedik eltekintve néhány ezen alapvető looping konstrukciók, és most is bevezetése funkciók írunk magunkat, visszatérési értékek hogy átadjuk körül. De először is, miért nem megyünk előre, és hogy a mi öt perc szünet itt? És mikor kapjuk vissza, fogjuk énekelni ezt a dalt. Rendben, szóval mi vissza. És amikor azt mondom, hogy most énekelni ezt a dalt, úgy értem programból, nem verbálisan. Tehát itt van beer1.c, amely egyike végrehajtásának különös dal. És csak hogy tisztázzuk, azok nem ismerik a mi ez a dolog úgy néz ki, mint, hadd menjek előre , és beer1, Enter. Most hadd futni beer1, és mit fogunk látni -, hogy hány üveg sör lesz-e? Majd írja be a 99, mint a dal mondja. Az Enter billentyűt. És most, ha mi lapozáshoz - Hoppá - ha lapozhat mindezt, akkor látjuk, hogy ez valóban énekelni az egész dalt. Várj egy percet. Erre görgetősávot kicsit elrontotta. Vegyünk a nagyobb ablakban. Szóval beer1, 99, ott is vagyunk. Tehát itt van az egész dalt, énekelt sokkal gyorsabb a számítógép, mint amilyen lehetett volna minket. Szóval észre, bár a ciklikus itt. Azt mondja, 99, majd 99, majd az "egyet le, add körül ", majd 98. És most ismétlődik újra és újra. Tehát ez valójában egy tökéletes lehetőség valamiféle hurok konstrukció. Figyeljük meg, hogy én vagyok a fajta vágás a sarokban van. Figyeljük meg, hogy azt mondom, "98 üveg sör a falon, 97 üveg sör a falon ", és hogy csak annyira hogy amikor kap egy üveg sört, nekem nincs aggódni az angol nyelvtan. De mi is erősít ez egy kicsit olyan, ha állapotban, talán. Ha ez a szám páratlan, megy előre, és azt mondja: "üveg", egyébként ha ez többes számban, hogy "üveg". De most én vagyok teljesen vágás a sarokban. Akkor lássuk, mi van itt. Tehát van néhány megjegyzést a tetején. Én többek között a két könyvtárak, voltunk közösen volt. És most hadd görgesse le az első tényleges sornyi kódot. 17. sor indul fő. Vonal 21 és 20 van, hány üveg sör lesz-e? És akkor hívom getInt. És most van egy kis józanság csekket. Szóval ez egy egyezmény, hogy akkor most kezd elfogadásáról a szigorúbban ellenőrizze a felhasználói bemenetet. Néha egyszerűen csak nem akarom, hogy jelezzen őket újra és újra és újra. Ha a felhasználó csavarokat, és nem működik együtt, rendben. Lépjen ki, és egyszerűen nem foglalkoznak velük. És ez az, amit csinálok itt. Ha n kisebb, mint 1, én csak fog kiabálni a felhasználó, "Sajnálom, hogy nincs értelme." És akkor fogok önkényesen return 1. Tehát újra, ez csak egy konvenció megszokni. Most, hogy azt a hitet. De eddig, mi mindig is visszatérő 0, mert mi már azt mondta, visszatér 0 jelentése mi? KÖZÖNSÉG: siker. DAVID J. Malan: Siker, ez minden. Tehát most, hogy mi végre kezd gondolkodni non-sikerek - más szóval, sarok esetekben hibaállapotokat - most már végtelen mennyiségben, vagy legalábbis 4000000000 lehetséges dolog mehet rosszul a programokat. És én kezdhetik bízzák azokat az egyéni számokat. Nos, általában elegendő csak vissza valami más, mint 0-ra. Szóval megyünk egyszerűen return 1 most. De az oka a visszatérő 1 olyan, hogy amint visszatér 1, találd ki, mi történik a többi program? Megáll. Ennyi. Így az a tény, hogy én vagyok vissza az 1-hatékony rövidre ezt a program végrehajtását, hogy a semmi vonal alatt 27 folytatódni fog végrehajtó. Amint fő visszatér, ez az. Rendben, így ha a felhasználó nem együttműködnek, és elérjük a 30 vezetéken mert írt egy legitim száma, itt az én végrehajtása ezt a dalt. Tehát először ki kell nyomtatni egy újsor karakter, csak esztétika. Én most már a hurok. És észre csinálok dolgokat egy kicsit egy másik irányba. Nem kell tennie kevesebb, nem kell csinálni + +. Én inkább azt inicializálni i változó, állítsa egyenlő n, a szám a felhasználó beírt, akkor tegye a következőket, így a Amíg én nagyobb, mint 0, akkor i - ha egyszer már elkészült 1 iterációs e hurok. Tehát visszaszámol egy for ciklus is. Nos, ez elég sok héten egy dolgot most, printf. Szóval print "% d üveg sör a falon." Print "% d üveg sört. "" Vegyen egy lefelé, add körbe. "Print "% D üveg sör a falon." Szóval ez még% d, de a észre, hogy az az érv, hogy printf változik. Miután a vessző, én tettem, mert azt akarom mondani 99. Ezek után vessző, van i, mert azt akarom mondani 99. Ezek után vessző, van i - 1, mert azt akarom mondani 98-at ez az első iteráció, és így tovább. És most ide, csak van néhány hülye kis megjegyzés. És akkor 42 vonal, én vissza 0-egyezményt, jelezve, hogy minden rendben van. Szóval, mi lenne, ha ezt elrontottam? Mi lehet a közös hiba itt lenni? Nos, mi van, ha véletlenül mondtam is, akarom számolni lefelé 0-ra, azt akarom, 0 üveg sör a falon? Tehát azt mondom, i nagyobb vagy egyenlő, mint 0-ra. Mi lesz a tünet, hogy most hátha újrafordítani beer1 és futtatni? KÖZÖNSÉG: Negatív. DAVID J. Malan: Igen, ez fog menni negatív. Ez egy off-by-one hiba, egy hihetetlenül Gyakori hiba, hogy a. Menjünk ténylegesen menj vissza a terminál ablakot és csináld Itt, így többet láthatunk egy időben. Adja meg, 99 üveg sör. Bezár, de jártunk már így kicsit túl messzire. Mi énekelte a dalt túlságosan le, oly módon, hogy most megüt a negatív szám. Tehát ez nem igazán működik. Rendben, így könnyen rögzíteni, hogy menjen vissza a úgy, ahogy egykor volt. De mi van néhány lehetőség most javulás? Nos, hadd nyissuk beer2.c és görgessen le ide, és megteszi a nézd meg ezt a verziót. Mi az első dolog, hogy kiugrik rád a különböző ez a verzió itt? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen, így nincs több i, mert előfordult, hogy me tudod mit, én kérek a felhasználótól n, és akkor én vagyok beállítás I egyenlő n, majd én változó i, de én soha nem megható n újra. Szóval mi a fene volt az a pont tőled elosztásának további 32 bit hívott én csak így tudok eltérő változó? Tehát ebben az esetben, azt a fajta elismerte, hogy a felesleges tervezési jellemzője. És én most akartam mondani, miközben n nagyobb, mint 0, menj előre, és nyomtassa ki ugyanazt a dalt, átadva egy n printf mint a második érv, és n - 1, mint a második érvet idelent. És akkor minden egyes iterációs e hurok megy előre, és csak a csökkentse n is. Most, funkcionálisan, ez a program lesz azonos. Ha azt írja be a 99-n kezdődik 99. Én csökkentő, csökkentő, csökkentő, csökkentő. Megyek, hogy egészen az "Egy üveg sör a falat, egy üveg sört. Vegyünk egy lefelé, add körbe. 0 üveg sör a falon. "A vége, mert én tettem kap a feltétel helyes. Ez nagyobb mint 0. Én nem ezt a hibát. Szóval melyik a jobb, version 1 vagy 2 verzió? Szóval hallottam egy csomó zúgolódástokat két. Miért kettő? Mi ez? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Ó, oké. Így nem fog 0-nál kisebb, de ne feledjük, a változata egy, a eredeti helyes változatát nem megy 0 alá sem. Úgy emlékszem, hogy ez a helyes verziót. Szóval legalább összehasonlítani a két helyes változat. Mi az az érv változat kettő, mmm, jobb? Igen? KÖZÖNSÉG: Ez kevesebb helyet. DAVID J. Malan: Oké, így kevesebb helyet, igaz? Mivel a változat egy használt 32 bit n, majd egy másik 32 bit i. Version 2 csak akkor használja 32 bit n, hogy úgy tűnik, hogy egy plusz. Egyéb gondolatok? Akar valaki mellett érvelni egy? Igen? KÖZÖNSÉG: Ki kell használni extra sor kód n -. DAVID J. Malan: Oké, persze. Szóval ez fair. Tehát ez csak, legalábbis számomra - Úgy értem, ez tényleg úgy érzi, egy kicsit Messier a tény, hogy Nem egyfajta magukba minden az én logika egy szép sorban, a for ciklus, mivel az a hurok. Itt valahogy kell tack e n - végén a hurok, mert ez logikusan szükséges. De ez a fajta súrolja nekem a rossz úton, csak azért, mert úgy tűnik, elkülönül a logikája ide, még akkor is, Ismét, ez szükséges. Egyéb gondolatok? Igen? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen. Szóval, mi van, ha ehelyett a végén a dal, meg akarta nyomtassa ki újra a nevét, a dal? Like "Köszönjük, hogy játszani 99 üveg sört", vagy valami buta, mint ez? De a lényeg az, amit akart elérni az eredeti értékre. Az a tény, hogy már mutáns vagy megváltozott n minden iteráció és ezért elpusztították az eredeti értékre azt jelenti, hogy nem tudod megtenni, hogy a végén. Most, vitathatatlanul, egyértelműen nem akarok hogy ebben a programban. Szóval, kit érdekel? De ez egy nagyon érvényes pontot. És hogy őszinte legyek, nem igazán senki helyes válasz van. Mindketten egyformán helyes. Tudtam meggyőzni mindkét irányban. Azt fogják mondani, hogy általában, ez egy jó elv, ha kérte a felhasználó bizonyos értéket, és tárolja egy változóban mint n, csak egyfajta elvi, ez talán jó tartani, hogy a kb. És minden kívánt adatokat változékonysága újra és újra, csak adj magadnak egy másolatot a változó, csak úgy, hogy férhetnek hozzá az eredeti. Ön költenek még 32 bit, de a valóságban ez számítógép, mint, két gigabájt RAM-mal ezekben a napokban, és mi quibbling több mint 32 bit? Tényleg nem olyan nagy ügy. És még ezen az eszközön itt, egy fél vagy egy koncert gigabájt RAM, 32 bit vs 64 bit, nem olyan nagy ügy. Természetesen ma is lesz mód túlterheltek a méret magának a programnak, ami lesz több száz kilobyte, ha nem egy pár megabájt, ezekben a napokban. Így ésszerű aggályokat, senki helyes válasz. De legalább ezek a gondolatok, hogy meg kell kezdeni a megy keresztül a fejedben? Mert Pset 0, bár igazán csak a várható helyességét, vagy legalábbis lemondanak különböző hibák lehet, hogy tapasztalt, ahogy haladunk előre a design lesz egy másik kulcsfontosságú eleme, mind a kód írása és az is a mi értékelő kódot. És így legalább ad gondoltam, hogy a dolgok, mint ez. És csak azért, mert valami működik, nem jelenti azt, hogy jó, nem jelenti azt, hogy a jól megtervezett. És ez az egyik dolog, a tanítás és az ösztöndíjasok probléma készletek segít kötekedik része az idő múlásával. Nos, mi a helyzet, mondjuk, ez a verzió itt? Hadd tegyek egy kicsit szexi itt egy pillanatra. Először is hadd hogy eltűnjön ez. És most hadd oldja meg a nyelvtani kérdés. Tehát ez a verzió, azt akarom, hogy rögzítse a nyelvtan oly módon, hogy ahelyett, hogy csak mondjuk zárójeles s, mint a "üveg" vagy a "palackok" - Nem akarom vágni, hogy a sarok - Azt is szeretném, hogy dinamikusan kinyomtatni a "palackok" vagy az "üveg", és ezáltal ezekkel% s helyőrzők ma. Szóval kell, hogy feltételesen ellenőrizze, milyen értéke van a i. És ha ez 1, azt akarom mondani, hogy "üveg", és ha ez valami mást, azt akarom mondani, hogy "üveg". Akkor próbáljuk meg ezt. Szóval, ha én == 1, akkor hadd menjen előre, és állapítsa meg - Szükségem van egy string, ezért hadd tegye húr s1, mert ez a először a fonalat törődöm most. Fogom mondani, hogy "üveg". És akkor lássuk, húr s2 - és elmagyarázom hova megyek egy pillanat alatt - "Palackok". Szóval emlékeztetnek arra, hogy ez a dal, akkor képesnek kell lennie nyomtatni a dolgokat, két különböző szót potenciálisan. Tehát, ha megnézzük ide vissza, észre, hogy ha eljutunk Ebben a példában itt "két üveg sört a falon, két üveg sört, egyet le, add körül ", azt akarom, ez a negyedik sorban most mondani, hogy "egy üveg sör fal ". Szóval kell dönteni, akarom mondani, hogy" palack "vagy "Üveg"? Szóval megyek önkényesen mondani, rendben, Megyek most, hogy egy változót nevű s1, string egy, hogy fog kapni dugva ide, és itt is, mert ezek a szavak mindig azonosak, csak azért, mert a jellegét a dalt. És én fogom hívni s2 amit szó akarok végül jelennek meg itt lent. Nos, a szó szoros értelmében, 99-szer 100-ból, ez lesz a ugyanaz mindkét ezekben az esetekben, mivel a 3. többes, a 2 többes szám, 4 többes számban. De ebben az esetben sarokban, ahol kap 2, majd 1, vagy akár 1, majd 0, I kell ezt a logikát. Szóval kell tölteni egy kis időt a kód egyre ezt a jogot. Szóval, ha ezt csinálom, ha én == 1, majd állítsa s1 egyenlő "üveg" és s2 megegyezik a "palackok", mert ez lesz az 1 üveget, és ez lesz a 0-palackok. És ez itt, ez mit jelent? Csak hogy világos legyen. Ez csak egy megjegyzés. Így az a tény, hogy lehet egysoros megjegyzés azt jelenti, hogy szólhatnak hozzá a kódot, mint ez, hanem egy másik közös paradigma is, hogy ha van egy szuper-rövid mondat, amely szeretne tenni magad, és ez csak olvashatóbbá tenni ez jobb a végén a sort, akkor egyáltalán ilyet. Szóval most mi van, ha tudom ezt megtenni? Különben, ha én nem egyenlő 1-re. Szóval bumm egyenlő - felkiáltójel az úgynevezett "bang". Szóval bumm = 1. Tehát, ha én nem egyenlő 1, mit inkább szeretnél csinálni? Nos, az első szó, azt akarom, hogy mi? Szóval karakterlánc 1 legyen "palackok" a többes palackok, és akkor ez lesz többes "palackok" is, most. És majd meglátjuk, ha ez valóban lesz számunkra, hogy hová akarunk menni. Tehát most, ha én görgessen itt észre, hogy én vagyok csatlakoztatása Nem csak én, hanem s1. Én csatlakoztatása i és s1. És akkor itt lent vagyok, mínusz 1, amely ugyanaz, mint a előtt, de s2. Más szóval, azt akarom, az angol alapuló változások Ezen logika. Nos, van már némi problémát ezen a kódot. Mi már tört ki a kapu itt? Igen? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Pontosan. Szóval már megsértette a leckét a hatályát. Szóval bejelentett S1 és S2, de én megcsináltam belsejében kapcsos zárójelek, ami azt jelenti, igen, ez a kód működni fog, akár amíg a 42 vonal, de amint megütöttem vonal 43, találd ki, mi nem már nem létezik? Nos, azt hiszem, mi már nem hatály - nem s1 vagy s2. Tehát-hoz erősít ez. Szóval hadd törölje a nyilatkozatokat. És én hagyom a változók neveit, és törölje ezt itt és törölje ezt itt. És mit sorok igazán Kijelentem ezeket a dolgokat? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen, így valószínűleg egészen ide, 33-ish. Szóval karakterlánc s1 majd húr s2. És kiderül, meg tudom csinálni. Ha kimondja a két változó azonos típusú, akkor valójában csak használd a vesszőt, és nem, hogy a C. All Rendben, így most van két változó - S1 és S2. Én bízzák azokat az értékeket ezen feltételek itt, vagy itt. És akkor én vagyok a őket az alábbiakban. Milyen jól van ez most működni fog? Nos, ez még mindig egy kicsit bugos, de most legalább látni milyen messzire ütött. Szóval hadd menjen előre, és beer3. Ez beer3? Igen, ez beer3. És most hadd menjen előre és fuss beer3. 399 99. Mi lehet Valószínűleg kihagyja a legtöbbjük. És itt lent, ezt nézd meg. "Egy üveg sör a falon, egy üveg sör, vegye egy lefelé, add körbe, 0 üveg sör a falon. " De én felhívja a figyelmet, hogy csak a fele a megoldás. Fajta elcseszte itt. Tehát úgy tűnik, hogy a sarok esetekben merül fel, amikor i értéke, amit két érték? KÖZÖNSÉG: 2, 1. DAVID J. Malan: 2 és 1. Ez nem 1 és nem 1. Ez tényleg csak az utolsó két versszak ezt a dalt. Szóval mit tegyek helyette szeretnél csinálni? Szóval úgy tűnik, hogy fogott az esetben, ha, ha i == 1, akkor az első szó a "üveg", de a második szó a "palackok". De itt, meg akarom változtatni, hogy ez == 2. És ha ez a helyzet, mit akarok a első szó legyen? KÖZÖNSÉG: "palackok". DAVID J. Malan: "palackok", így a két üveg. És akkor ezt a szót itt kell lennie - KÖZÖNSÉG: "Bottle". DAVID J. Malan: "Bottle", furcsa. Rendben, a kicsinyítés, menjen vissza ide, újra futtassuk le a make, re-run beer3 típusú 99 újra. Oké, "Segmentation fault (core dump)." Mit tettem rosszul? KÖZÖNSÉG: Ön nincs érték [hallhatatlan]. DAVID J. Malan: Ah, excellent pont. Rendben, mi a baj itt? Szóval szegmentációs hiba, és mi tényleg fog látni ezt jó néhány alkalommal a jövőben, szándékosan. De most, mit jelent ez valójában? A szegmentációs hiba szinte mindig azt jelenti, hogy valahogy megpróbált hozzáférni memória, RAM a számítógép, , hogy ne a saját, hogy már valójában nem kérte a operációs rendszert. Tehát ebben az esetben, észre mit tettem, ami hibás az én logika. Én célhoz S1 és S2 értéke, ha i értéke 1. Én is megtettem, ha i = 2. De én nem csináltam azt a végtelen számú egyéb lehetőségek - különösen a 3 vagy 4 vagy pont, pont, pont, 99. Tehát az egyik fix erre lehet, hogy csak nézzük van más feltételt. És hadd menjen ide és mondd s1 megegyezik - milyen legyen itt? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: "palackok", mert a közös ügy, ez csak ugyanaz a dolog. Tehát egyenlő idézet, idézőjel bezárva, "üveg". Tehát a többes szám palackok, majd ide, a többes szám palackok. Oké, most hadd menjek vissza a terminál ablak, újrafordítás, újra futtatni. 99. Hú. És nézzünk egy gyors józanság csekket. Technikailag, mi lenne érdemes elolvasni az összes ilyen, hogy győződjön meg arról, ők igaz, de nézzük meg legalább az ismert bűnösöket. 3 db, 2 üveg, 2 üveg, 1 üveg, 1 üveg, 0 palackok. Úgy tűnik, legalább fix, hogy most. De a fogást az, hogy milyen egy isten szörnyű rendetlenség ez csak azért, hogy megoldja a hülye egykarakteres nyelvtani részlet. Tehát van egyfajta oka annak, hogy ez a vágott sarok korábban, mert ez csak teljesen bosszantó, hogy meg kell írni ezt a sok kódot. De kiderült, hogy ott valamivel több elegáns módja kifejező pontosan ugyanaz a dolog. És mi is ezt az alábbiak szerint. Hadd hagyja a képernyőn egy pillanatra, és bevezetni valami ismert háromkomponensű üzemeltető. Ez a fajta egy vonalhajózási ez csak azt jelentette, hogy a mi él egy kicsit szexisebb, mint ígérte. És én fogom ezt az alábbiak szerint. Adj egy string nevű s1, hadd hozzárendelheti az alábbiak szerint. (I == 1)? "Üveg", egyébként "palackok". Karakterlánc s2 kap (i == 2)? "Üveg", egyébként "palackok". Szóval akkor mi a különbség itt? Ez a két sornyi kódot, amellett érvelek, lehet helyettesíteni ezt az egész felfordulást. Szóval ez egy rendetlenség, csak azért, mert ez a fajta súrolja nekem a rossz irányba, hogy ez sok sornyi kódot. Nem rossz. Ez nem rossz design. Mármint, ez teljesen korrekt és tökéletesen megfelel. De a kódolás lesz unalmas, ha van kifejezni magát, így fenébe kifejezetten újra és újra és újra egy egyszerű forgatókönyv, mint ez. Tehát a C egyes billentyűparancsok, mint ez. Tehát ez lényegében azt mondja nyilvánítja egy string nevű s1 és rendelje hozzá sem ezt az értéket, vagy ez az érték, ha i == - Sajnálom, azt kell mondanom, ez pontosabban. Állapítsa meg a változó s1, rendeljen hozzá ezt az értéket, ha ez igaz. Ellenkező esetben rendelje hozzá ezt az értéket. Más szóval, ez a fajta egy egysoros módja mondván, ha mást csinál átruházását az út mentén. Tehát, ha i 1, akkor megy előre, és ezt "üveg". És akkor ez más, nevezzük "palackok". Eközben, s2, a második szó, hogy meg kell határozni, ha az i értéke 2, akkor beállítása s2 az "üveg". Ellenkező esetben állítsa "palackok". És mi ez azt jelenti, most mehetek át ezt, és törli az összes e sornyi kódot. És amikor azt mondom, kissé nevetségesen, hogy ez most szexisebb, ez szexisebb a fajta stiláris értelemben. Az a tény, hogy funkcionálisan ez a kód valójában megy nem pontosan ugyanaz a dolog. És bár lehet, hogy néz ki egy kicsit rejtélyes az első pillantásra, mert nem láttam ezt a konstrukciót, mielőtt, azt azzal érvelnek, hogy ez végső soron lesz sokkal olvasható, és így sokkal könnyebb mi emberek, hogy egyfajta megérteni, mert most már csak olvasd el a kód minden egy sorban. Még mindig hasonló szellemben egy ha akkor, amikor ez a állapot és akkor ez mi van belül, és ha ez a az, ami belül más. De meg tudjuk csinálni, csak sokkal elegánsan. És ha most megy vissza a terminál, miután törölte az összes E vonalak és helyettük csak a két, újrafordítás, re-run üveg sör 99, figyelje meg, hogy az én nyelvtan valójában, még mindig helyes. Szóval megint valamit kezdeni. 2 üveg sör, 1 üveg sör. Úgy néz ki, rendben. Igen. Tehát ott van egy sokkal tömörebb megoldás. Szóval ez is, ahogy minél több elégedett C, nem szükségképpen az első Pset vagy akár második, de észre, hogy ezek a konstrukciók lehetővé teszi számunkra, hogy a dolgok valaha is elegánsabban. Most tegye egy másik dolog itt. Hadd menjek előre, és nyissa ki return1.c. Kezdjük megoldására egy másik problémát oly módon, hogy lehetővé teszi számunkra, hogy írjon kifinomultabb kódot. Tehát itt van egy egyszerű kis program, amelynek célja az élet hogy növelni értékeket. És valóban, vessünk egy lépést hátra. Hadd ezt kézzel. Hadd csináljam tartalmazza és int main (void). És hadd hívjuk ezt increment.c. És mit szeretnél csinálni? Én megyek előre, és mond valamit, mint - fogjuk hívni a számokat az azonos - int x. Így int x kap 2; printf x% d, új vonal, x. Szóval gépelés gyors, de valami ismerős dolog most. Akkor fogok csinálni x + +. Akkor fogom nyomtatni, hogy ugyanabban a mondatban újra. Aztán megyek vissza 0, csak úgy kilépni a programból. Rendben, ez egy olyan program, amely lépésekben egy számot. Az első fog initialize valami, 2, és akkor ez fogja növelni, és nyomtassa ki újra. Szóval Fussunk növedék, hihetetlenül egyszerű program. De tegyük fel, most, hogy akarom kocka az érték, így nem valami kissé önkényes. És én tényleg akarom x megkapja a kocka is. Így tudtam használni az úgynevezett a pow funkciót, de én nem igazán tudom, hol van még. Szóval fogom ezt a régi vágású módon. x-szer ez megfelel x-szer x-szer x. Szóval kocka az érték, megszorozva önmagában újra és újra és újra, azért, hogy így a hatalom 3 ebben az esetben. Így most a számokat kéne nyomtatni kell lennie, mint látni fogjuk itt - teszi increment, így valójában nem igazán növelni már, de hagyom a neve önmagában - 2, majd 8. Most már a kezdetektől a lehetőséget finomítás Itt, ahol ez a kocka dolog szorozni a szám Önmagában önmagában magától úgy, mint ez, hogy csak Hasznos, ha egy funkciót, ugyanúgy, mint valaki úgy döntött, évvel ezelőtt - tudod, milyen hasznos, ha egyikünk leül és írja printf úgy, hogy a világ többi része is használhatják, miért nem ülünk le és írjon egy függvényt nevű kocka hogy működik ez kocka nekünk így nem kell kézzel végrehajtása fogalma kocka értékek itt? Tehát egy egyszerű példa, de menjünk előre, és használja ezt, mint egy lehetőséget, hogy írjon a saját funkciója. Szóval eddig, most már csak a felhasznált fő, és mi már használt más emberek funkcióit, de még nem írt a miénk. Szóval itt vagyunk. Én megyek előre, és levelet nevezett funkció kocka. És megyek, hogy azt tegyen a bemenet. Tehát a bemeneti lesz egész. És mit fog ez csinálni? Ez lesz állapítsa int output = bemenet idők bemenet alkalommal bemenet. És akkor fog visszatérni, hogy a kibocsátás. És akkor kell külön most. Ez a funkció megy vissza egy int. Tehát itt akkor, hogyan akarsz írni saját funkciókat. Először dönti el, mi a neve a függvény lesz. És általában valami magyarázó jó, úgyhogy hívják kocka. Ezután meg kell határozni, mit fog visszatérni, mi kimenete lesz. És nem kell, hogy sok lehetőség még. Int, char, float, bool, string. Most, fogok ragaszkodni egy int, mert azt akarom, hogy vissza az egész. Ezután meg kell adnia, amit a bemenet, ha van. És ha kocka vesz egy érv, úgy valami között zárójelben meg kell adni, hogy az érv egy nevet, hogy a tudod nevezni valamit, amit végrehajtási vagy írás ezt a funkciót, és meg kell, hogy ez a típus, amely ebben az ügy lesz int. Így rövid, kocka egy függvény, amely vesz egy egész A bemeneti és visszatér értéke a kibocsátás. Szóval mit kezdeni, hogy a bemeneti? Nos, sorban 14, kijelentem változó nevű kimenet, és én rendelni azt az értéket, input-szer bemenet alkalommal bemenet. És aztán vissza kimenet. Szóval hogyan tudom használni ezt akkor? Mit változtatni ezeket a kiemelt karaktereket on-line 7-től lehet, mit gondolsz? KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Igen, kocka x. Tehát x egy változó, ami azt jelenti, hogy rendelkezik valamilyen értéket. Szerencsére, ez a típus egész. És mert x egy int, hogy azt jelenti, jusson be kocka. És bár én nyomós értékét x értékkel A kocka x, mint volt a helyzet eddig bármikor egyenlő jele és egy sor kódot, a cucc a jobb oldalon kerül végrehajtásra, majd lesz rendelve a érték a bal oldalon. Így a műveletek sorrendjére olyan reméljük. Így működik ez? Nos, hadd menjen le ide. Hadd nyissa fel a terminál ablakot. Hadd ne hogy növekmény, az Enter billentyűt. "Implicit nyilatkozatot funkció" kocka "érvénytelen C99. "Mint félre, C99 utal, hogy a nyelv a C, mint volt meghatározott 1999-ben, ami egy frissítést az verzió 1989, ami egy frissítés felett az eredeti. Szóval ez minden eszközzel. Szóval, mit jelent az, hogy "implicit nyilatkozat funkció "kocka" helytelen? "Ez itt. Ott van a 12-es vonal. KÖZÖNSÉG: [hangtalan]. DAVID J. Malan: Mi ez? KÖZÖNSÉG: Ez nem korábban. DAVID J. Malan: Ez nem korábban. Szóval ez a dolog. C a fajta ostoba, vagy C fordítók a fajta hülye. Tényleg csak azt, amit mond nekik. És különösen, csak olvasni a kódot tetejétől az aljáig, balról jobbra. Tehát, ha a fordító, csenget, olvas a kódot, line 1, kitalálja, hogyan kell ezt csinálni. Ó, itt jön a legfontosabb. Oké, hadd menjen előre, és állapítsa meg a változó x. Hadd nyomtatni valamit. 7. sor, mi a fene az a kocka? Ez nem bejelentett stdio.h. Nem jön a C fogalmam sincs, mit tegyek. És így csengés csak Bails és kilép az említett hibaüzenet. Így tudjuk kijavítani ezt egy pár módon. Mi lehet tanítani csenget mi kocka mellett csak mozog, ahol a nyilatkozatot. Szóval vágott és beillesztett azt tetején fő. Most, rájönnek, hogy csak azért, mert elsődleges már nem először, hogy ez még végre alapértelmezés szerint. Main fő. Ez az alapértelmezett függvény neve. Nem számít, hogy hol van a fájl. De legalább most már csenget látott kockát, mielőtt használni. Szóval lássuk csenget is boldogabb most. Győződjön növekmény, ez volt fordítani ebben az időben. Hadd futni növekmény. És valóban, úgy tűnik, hogy működik. Most, akkor jön ki forgatókönyveket végül, ha ez nem megvalósítható, hogy tegye minden funkció felett minden egyéb funkciót. Majd elakad e végtelen ciklusba a valóságban, amennyiben ez a fickó azt akarja, hogy itt lehetek, de ez srác kell ott lenni. Annak érdekében, hogy nem mindig működik. Szóval szerencsére, C egy elegánsabb megoldás. Fogom, hogy ezt vissza, ahol volt, csak azért, mert inkább, mint a főszabály, hogy a legfontosabb mindig a tetején, mert ez csak jó, hogy mi ezt a programot nem alapértelmezés szerint. És mit fogok csinálni akár itt nyilvánítja az úgynevezett egy prototípust. Megyek, hogy újra állapítsa my cube funkciót szó másolás és beillesztés. Igazából, ez nem szó szerint. Tehát szó másolás és beillesztés vonal 15 fölé vonal 6. Nem számít, milyen sor ez véget ér fel. Előfordul, hogy a 4-es vonal. De ez nem kell, mielőtt fő. De észre a különbséget. 4. sor végén pontosvesszővel, ami azt jelenti, hé, Csenget, veszem a szót, arról, hogy létezik egy függvény úgynevezett kocka, hogy vesz egy int, és visszatér egy int. De nem fogom elmondani, mi még. Csak tudom, hogy én megígérem, hogy elmondjam végül. És valóban, most már rendben van, hogy ez meg az alábbiakban. Így ez általában jobb, mert akkor a tetején a a fájlt, akkor csak elhadar, gyorstüzelő, egy sor Minden, mi a neve a funkciók, milyen bemenetek, milyen kimenetek. És, hogy több egyértelmű, input általában azt jelenti, érvet vagy paraméter szinonimája. Output: a visszatérési érték, mit is kézzel vissza. Tehát ebben az esetben is, kocka nyilvánították a tetején, de a meghatározott, más néven végrehajtott, az alján. És most térjünk vissza ide, és futtassa újra ezt. És most hadd menjek előre, és újra futtasd a make, futtassa újra növekmény. És most úgy tűnik, hogy működik, csak finom. Akkor most mi is megy előre, és vennünk valamit, mint a sör például ebbe a negyedik változata. Szóval hadd lapozzunk lefelé ide. És észre, hogy én ilyen volt ez a lecke a szív most. Az a tény, hogy én énekeltem ugyanazt a versszak ismét újra és újra ugyanazt a kórus sort a dalt, úgy érezte, Szeretek miért nem tudok tényező, hogy ki a funkciót? És valóban, ez az egyik motivációk. Amellett, hogy valaki a világban érdemes hogy egy kocka funkció - ez egy jó ok arra, hogy vennünk valamit, és írjuk meg a egyéni funkció - ha van egy darab kódot a program, csak teszi konceptuális értelemben, hogy te ilyen akarjuk, hogy ez a név - mint ebben az esetben, kórus - akkor hasonló levelet, hogy külön funkciót. Nem kell írni mindent, ami fontosabb, ha csak a úgy érzi, tisztább, hogy elkülönüljön, és adja meg a nevet. Tehát ebben az esetben is, észre, hogy van egy megjegyzés tetején ezt a funkciót, hogy csak énekel, ami a meghatározott számú palackok. Figyeljük meg, hogy itt nem kell hívni ezeket dolgok, bemeneti és kimeneti. Tény, hogy ez idő szerint csak felhívtam a b input for üveget. És észre itt void javasolja, mi? Ez a kórus - KÖZÖNSÉG: Nem vissza. DAVID J. Malan: Nem ad vissza értéket. És valóban, funkciók nem kell vissza értéket. Ők is csak csináljon valamit. Ezek lehetnek úgynevezett mellékhatások, melyeket ebben Amennyiben csak egy csomó nyomtatás a képernyőn. Tehát észre, hogy ez a kód itt, a szó szoros értelmében csak lopott az előző példában. Az egyetlen különbség az, ahelyett, hogy a i az én változó, én most már b, mint az én változó. Szóval b idelent, van b idelent, van b mínusz 1 ide. De a kód pontosan ugyanaz. De csak, hogy mutassa meg most, hogyan tudjuk ezt, hadd menjen előre, és valóban változtatni, hogy ez a for ciklus. for (int i = n; i> n, i -). Szóval, hogy ellopták a mi előző példában. Korábban ez a 37. sor, hogy én megkezdődött énekelni ezt a bosszantó dalt. De ahelyett, én csak megy most hívja kórusa i. Kész. Tehát most minden iterációs e hurok hívom ezt a másik funkció, kórus, hogy én történt írni. Nem volt írta valaki évvel ezelőtt. De a kórus, eközben használja printf nyomtatni ezeket a négy sort. De az a tény, hogy én hívom kórus újra és újra a ciklus azt jelenti, hogy fogok kapni, a legvégén, a pontosan ugyanazt a dalt, mint én eddig. Tehát röviden, most, ha nézek vissza a kód, bár funkcionálisan ez egyenértékű azzal, észreveheti, hogy ez kezd még olvasható. Én nem igazán tudom, hogyan getInt megvalósítják. Őszintén szólva, nem tudom, hogyan kórus megvalósítják. De ez nem számít nekem. Engem nem érdekel, mert most én egyfajta, mint egy ember, olvassa ezt fentről lefelé. És mivel a funkciókat neve szerint, amit igen, a kód egyre olvasható. És ahogy a mi programok sokkal bonyolultabb - A félév végén, akkor meg kell írni száz sornyi A kódot a nyelvek, mint a PHP és a JavaScript és hasonlók - rájössz, hogy ez sokkal könnyebb, mint a nyomon követése mit tettél. És amikor elkezd együttműködik a barátokkal, vagy partnerek és kollégák, akkor képes lesz arra, hogy írjon sokkal masszív programok kezdenek gyakorolni ezeket az alapvető építőelemeit. Tehát azt mondta, miért nem hívjuk meg egy nap? És mi találkozunk szerdán. [Taps]