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