[Powered by Google Translate] DAVID J. Malan: Rendben, ez CS50, és ez az
hét végén 1, így vizsgálatot kártya van, és az összes
osztálytársai, hogy van ebben az évben 745.
És mi annyira izgatott, hogy oly sok a kurzusra
ebben a félévben, de annak ellenére, hogy ez a tanfolyam olyan nagy,
észre, hogy ez ezek a dolgok, mint a péntek ebédet, mint
hivatali óra, 15-ember szakaszok, és így tovább, hogy a
valóban azt jelentette, hogy hozza létre ezt a bensőségesebb
környezet.
Így még akkor is gyűjthet egyszer vagy kétszer egy héten, itt
Sanders, tudom, hogy sok a tapasztalat ezen a kurzuson
nagymértékben lesz hands-on a mellett meg osztálytársai
és a tanári kar.
>> Szóval itt vagyunk, a Fall 2012.
Így emlékeztetni arra, hogy utolsó alkalom, hogy véget ért a tudomásul
pontatlanság, beszél képviselete számokat.
És nézte az egyik hibák, ami történt, az
valós világban, amikor jött a félreértés
hogyan számítógépek működik.
Nos, ma mi újra egy másik ilyen ötletek, mint
valamint folytatjuk a vitát a CS50 ügyfél
C és, hogy mit jelent valójában a program.
De először csak egy pár forgószél közleményei.
>> Szakasza kezdődik vasárnap, és az első héten mindig
Kicsit gyors indítás, mert csak most a
A szakasz formák.
Mi ugyanezt teszi, most, a tanítási fickók, most
hogy tudják, a menetrend, így vagyunk, amelyek célja a
Szombat reggel, hogy kövesse nyomon az Ön számára a szakasz
feladat és TF.
Ismerd fel, hogy fognak kezdeni a következő napon, vasárnap
vagy hétfőn, vagy kedden.
És akkor mi lesz elhelyezésére szakasz változásokat felmerülő
a napokban.
Hivatali órák, eközben vannak, megint este, 8 órától 11,
Annenberg, valamint holnap este.
Annak ellenére, hogy a probléma készletek általában esedékes csütörtökönként
Délben kiderül, hogy legfeljebb öt napot késő költeni,
ezért a rendelkezésre álló munkaidőn csütörtökönként, ha
Ön készpénz egy ilyen későn napok, és ezáltal nyújt
valami pénteken.
Engedjék meg, azt sugallják, hogy Scratch az egyik több móka, többek között a
több alacsony kulcs probléma készletek.
És én ragaszkodni a késedelmes napok, stratégiailag, csak
később a félévben, amikor az élet kezd útban
A vizsgaidõszak és más osztályok.
Probléma Set 1, eközben lenne beírás a kurzus
honlap ezen a héten pénteken, mert lesz a tanfolyam a séta
videón, amelyet filmeztek at 02:30 péntek
majd a kiküldött online a következő napon.
>> Így ért véget hétfőn.
Azt akarom, hogy - valójában egy megjegyezni.
Mivel az osztály -, mert Sanders nem pontosan kölcsönöz
magát, hogy alkalmi Q & A-hátra szörnyen jól vagyunk
megpróbálom egy kicsit új, ebben az évben, amelyben
ha nem kényelmes emelni a kezét, vagy csak
Inkább ne emelje fel a kezét egy szobában, mint ez,
megyünk, hogy néhány, a tanítás ösztöndíjasok és CA
legénységgel cs50.net/discuss közben előadás.
Tehát, ha van egy kérdés, mert teljesen le voltam
egyértelmű valami, vagy kíváncsi vagy néhány
téma, próbáld kiküldetés ott.
Tag azt címkét Előadás, és mi megteszünk minden tőlünk telhetőt
ma és a jövő héten - we'll próbáld ki ezt -, hogy a téren
sem elektronikus, online, vagy ha úgy érzi, mintha meg kellene
Tényleg tűzzék azt tömegesen, az egyik az oktatás ösztöndíjasok, vagy
CA fogja emelni a kezét, és kérje
névtelenül az Ön nevében.
Szóval adok e egy próbát, és látom, hogy jól működik.
De minden eszközzel továbbra is fel kezét, mint szeretné.
>> Tehát utoljára kimutatta, hogy 10%-os, illetve egytizede nem, a
Valójában, 0.1, mint tanították sok évvel ezelőtt.
Ez valójában egy értéket, mint ez.
De ez nem teljesen igaz, ugye?
Csak ezt a kényszert, amellyel a számítógépek, ha a
csak egy véges mennyiségű memória, RAM, vagy több
kifejezetten bit, nos, már csak véges számú
dolog, amit képviselnek.
Például, ha megvan a szám nulla, és azt akarjuk, hogy
képviselik bináris segítségével nyolc bit, ahol egy kicsit,
ismét, egy nulla vagy egy, talán
képviselnek, mint 00000000.
És ez egy kicsit feleslegesen bőbeszédű.
Csakúgy, mint a decimális rendszer a világban,
Általában, ha meg akarja írni a szám 123, akkor
az emberek valószínűleg nem levelet 00000123 még akkor is,
funkcionálisan, ez pontosan ugyanazt a számot.
Mi csak csepp nullát, hogy úgy mondjam.
>> A bináris, amit tehetünk, az ugyanaz.
Bináris és nulla, nulla és bináris csak nulla.
Csak akkor kell egy kicsit.
De ismétlem, a leggyakoribb mértékegység a világban
A számítási bájt, 8 bit.
Csak azért, mert egy kicsit, meglehetősen haszontalan.
Nyolc bit, nem túl hasznos, de legalább ez több
hasznos, mint egy mértékegység.
Így nyolc bit, akkor jellemzően képviselt bináris.
Tehát itt van a számokat nulla, egy, kettő, és azután, ahogy
Nate tette videónkat múlt szerdán, mi továbbra is
számítva legfeljebb hét, nyolc.
És akkor, ha az általunk használt több és több bitet, mi
számíthat fel a végtelenbe.
De ha csak véges számú ezeket a biteket, ahogy
az eset-ben bármelyik számítógépes rendszer, vagy akár rakéta
rendszer, nos, valóban csak egy
véges mennyiségű pontossággal.
Tehát, ha szeretné, hogy képviselje a számot, mint 0,1, nos, a
számítógép, hogy válogathat.
És ha csak véges sok szám tőle telhetőt
képviseli, akkor gyere közel 0,1-et, de nem tud
feltétlenül neked pontosan a kívánt értéket.
És ez csak az egyik kihívás a számítógépek,
a motorháztető alatt, szerencsére.
>> Ahogy haladunk tovább a félévben, ezek alacsonyabb szinten
további részletek egyre kevésbé érdekes, de minden bizonnyal a
alkalmazása ezeket a gondolatokat is van néhány nagyon is valós világ
következményei.
Az egyik egy kicsit szórakoztató.
Hányan látták a csodálatos filmet Office Space?
Ha nem, ez a nem hivatalos
házi feladat a héten.
De Office Space, a fickó ebben a filmben megteszik
előnye, hogy pontosan ez a gondolat, de valójában ellopták
ez egy másik film, hogy lehet, hogy
látott még évvel korábban.
Akkor hadd adjak néhány másodpercig ezen pótkocsi
ezt a csodálatos filmet, és ez nagyon sok
tudományos szempontból releváns.
>> [JÁTSZANAK MOVIE]
Igazából én inkább előtérbe kerül.
Tudok programozni egy vírus, ami leszedi, hogy a
tegye ki nagy idő.
Nos, hogyan működik?
Minden alkalommal, amikor van egy banki tranzakció, ha érdeke
számított, több ezer naponta, a számítógép végül
e frakciók egy cent.
De én nem fogok semmit törvénytelen.
Illegális? Samir, ez Amerika.
Meg kell Istenre esküszöm.
Ha senki nem tud erről, de minket, rendben? Nem családtagok, nem
barátnők, senkinek.
[Hallhatatlan].
Ne aggódj, ember, nem fogom elmondani senkinek sem.
[MOVIE VÉGE]
>> Rendben, talán találtam erre a mozifilmre jobb, mint a legtöbb
emberek itt, hanem minden esetben, a vírus, hogy azok
próbált létrehozni -
és a filmek, bármikor úgy nevezném valami vírus,
ez általában valójában nem egy vírus.
Ez csak a program, hogy valaki azt írta, hogy tegyen valamit.
És ebben az esetben, a srácok megpróbáltak írni egy programot
hogy kihasználta a cégük neve Innotech a
számítástechnikai rendszer, amelyben a számítógépek, is, még akkor is,
jön a pénz, nem feltétlenül
képviselnek pénz pontosan.
Így, bár lehet, hogy a 0,10 $ a bankszámláján,
0,10, nos, a számítógép lehet, hogy tényleg úgy gondolja, hogy van
ennyi cent a bankszámláján.
És amit ezek a srácok törekvő van - és ők
ellopta az ötletet, kiderül Superman III, amennyiben
Richard Pryor ugyanezt tették - ezek lényegében
írásban programok törekednek, hogy minden a hátsó
számát, az összes apró, pici, apró frakciói
fillérekért, és szifonos azokat le annak érdekében, hogy az emberek csak a
gondolat, oh, ez csak 0,10 $ van, de az összes ilyen
záró számok végül összeadódnak.
Tehát egy nagyszerű ötlet, és ez visszafelé sült el, hogy nevetségesen
különösen a film.
>> De a való világban is vannak sokkal kapcsolatban
következményei ilyen jellegű dolgokat.
És az egyik ok, hogy belevetik magukat a területen a számítógép
tudomány ismét alkalmazhatósága nem a
mérnöki tudományok egyedül, de csak azért, hogy
más területeken is.
Tehát ez egy kevésbé könnyed nézd meg, mi romolhat el, de a
ez is elég szemnyitás, azt hiszem, amikor a
megértése, hogy pontosan hogyan mindenütt jelen technológiák, mint például
számítógépek és programozás vagy ezekben a napokban,
formájában szoftver.
Tehát ez a következő clip mindössze hat perc alatt, továbbra is
ahol abbahagytuk legutóbb, de lehetővé teszi számunkra, hogy vizsgálja meg egy kicsit
mélyrehatóbb egy ilyen ezeket a kérdéseket.
Hadd ugorjon, ahol abbahagytuk,
volt itt.
És mi van a második része két, körülbelül hat perc van.
>> [PLAY MOVIE]
Sújtja a modern rakéta technológia.
1991-ben megkezdődött az első Öböl-háború, a Patriot
rakéta tapasztalt hasonló jellegű
szám konverzió probléma.
És ennek következtében 20 ember, 20 amerikai katona, megölték
és mintegy 100 másik megsebesült, amikor a Patriot, amely állítólag
elleni bejövő Scuds,
nem a tűz egy rakéta.
>> Amikor Irak lerohanta Kuvait és Amerikában indított Desert
Storm 1991 elején, Patriot rakéta elemek voltak
telepített védelme Szaúd-Arábia és Izrael az iraki
Scud rakéta támadások.
The Patriot egy amerikai közepes hatótávolságú föld-levegő rendszer,
által gyártott Raytheon cég.
A méret a Patriot légvédelmi maga, ez körülbelül
mintegy 20 méter hosszú, tömege körülbelül 2000 kg.
És ez hordoz robbanófejet körülbelül - Azt hiszem, ez nagyjából
150 £.
És a robbanófej maga egy magas robbanóanyag, amely
fragmensek körülötte.
A ház a robbanófej célja, hogy úgy viselkednek, mint sörét.
A rakéták hajtják 4 per konténer és
által szállított félpótkocsi.
>> The Patriot rakétavédelmi rendszer nyúlik vissza legalább
20 éve.
Ez volt eredetileg, mint egy légvédelmi rakéta
lő le az ellenséges repülőgépek, az első Öböl-háború.
Amikor a háború jött, a hadsereg akarta használni, hogy lőni
le Scuds, nem repülőgépek.
Az Air Force iraki nem is volt olyan sok a probléma, de a hadsereg
aggódott Scuds.
És így igyekeztek frissíteni a Patriot.
Elfogó egy ellenséges rakéta halad MACH 5 folyik
hogy elég ambiciózusak.
De amikor a Patriot rohant üzembe, a hadsereg
nem volt tudomása olyan iraki módosítással, hogy megtette
Scuds szinte lehetetlen eltalálni.
>> Mi történt a Scuds voltak
jön instabilak voltak.
Voltak ingadozik.
Ennek oka az volt, a irakiak, annak érdekében, hogy 600
kilométernyi ki egy 300 kilométeres hatótávolságú rakéta került
tömege az elülső robbanófej és
tette a robbanófej könnyebb.
Tehát most a Patriot akar jönni a Scud, és a legtöbb
az idő, a túlnyomó többség az idő, akkor
csak repülni a Scud.
Miután a Patriot-üzemeltetők felismerték a Patriot
hiányzott a cél, hogy felrobbantotta a Patriot robbanófejet.
Balesetek elkerülése érdekében, hogy hagytuk
esik a földre.
Ez volt az, amit a legtöbb ember látta, amint hatalmas tűzgolyó az égen,
illetve félreértette a elfogja a Scud robbanófejeket.
>> Bár az éjszakai égen, Patriots tűnt
Sikeresen megsemmisült Scuds, a Dhahran, nem lenne
Hibát körüli teljesítményt.
Ott, a Patriot a radarrendszer vereség a pályán egy
bejövő Scud és soha nem indított kellő
a szoftver hibája.
Ez volt az izraeliek, akik először felfedezték, hogy a hosszabb
a rendszer volt, annál nagyobb az idő eltérés vált,
miatt óra beágyazott a rendszer számítógép.
Körülbelül két héttel a tragédia Dhahran, a
Izraeliek jelentette a Honvédelmi Minisztérium, hogy a
rendszer időveszteség.
Körülbelül nyolc óra futás, de észrevette, hogy a
rendszer vált észrevehetően kevésbé pontos.
A Védelmi Minisztérium reagált, elmondta az összes
A Patriot elemeket, hogy ne hagyja el a rendszert
vonatkozó hosszú ideig.
Soha nem mondta, amit hosszú ideje volt - 8 óra, 10
óra, 1000 óra.
Senki sem tudta.
>> The Patriot akkumulátor állomásozott a laktanya at Dhahran
és a hibás belső óra volt, több mint 100 óra
az éjszaka február 25-én.
A lánctalpas idő pontossággal mintegy tizede a második.
Most egy tizede a második egy érdekes szám, mert
nem lehet kifejezni bináris, pontosan, ami azt jelenti,
nem lehet kifejezni pontosan minden
modern digitális számítógép.
Nehéz elhinni.
De ezt példaként.
>> Nézzük az első számú harmadik.
Egyharmada nem lehet kifejezni tizedes, pontosan.
Egy harmadik pedig 0,333 tart végtelenbe.
Nincs módja, hogy abszolút pontosságú tizedes.
Ez pontosan ugyanaz a fajta problémát, hogy történt
A Patriot.
Minél hosszabb a rendszer futott, annál rosszabb az idő hiba lett.
Miután 100 üzemóra, a hiba az időben csak
körülbelül egyharmada a második.
De szempontjából célba rakéta halad MACH 5,
eredményezett a követési hiba több mint 600 méter.
Lenne végzetes hibát a katonák Dhahran.
>> Mi történt a Scud elindítása volt kimutatható a korai előrejelző
műholdak és tudták, hogy a Scud jött a saját
általános iránya.
Nem tudja, hogy hol jön.
Ez most már fel a radar eleme a Patriot
rendszer, védő Dhahran, hogy keresse meg és nyomon követheti a
bejövő ellenséges rakéta.
A radar nagyon okos.
Te valójában követni a helyzet a Scud majd
megjósolni, ahol valószínűleg lesz a következő alkalommal, amikor a
radar küldött impulzus ki.
Ez volt az úgynevezett tartomány kaput.
Azután, amint a Patriot úgy dönt elegendő idő telt el, hogy menjen
vissza és ellenőrizze a következő helyszín erre észlelt
tárgy, megy vissza.
Tehát, ha visszament a rossz helyen, akkor majd nem lát
kifogást, és úgy dönt, hogy nincs objektum.
Ez egy hamis felderítése és esik a pályán.
>> A bejövő Scud eltűnt a radar képernyőjén.
És másodperccel később, akkor csapódott a kaszárnyába. A Scud
megölt 28 és volt az utolsó kirúgták alatt
Az első Öböl-háború.
Tragikus, hogy a frissített szoftver megérkezett Dhahran
a következő napon.
És a szoftver hiba volna rögzíteni, záró egy fejezet
A zaklatott történelem a Patriot rakéta.
PATRIOT valójában egy mozaikszó a "Fázisvezérelt követés
Elfogják a cél. "
>> Rendben, szóval sokkal szomorú kimenetele nem egészen
megértés ebben a világban.
És az elvihető, valóban, a film, hogy az oldat
ott volt, indítsa újra a rakétavédelmi rendszer
hébe-hóba.
És így ismét egyik célja a tanfolyam, biztosan
egy szerényebb mértékű, mint ezeket az alkalmazásokat, hogy
valóban nyitott mindenki szemét, hogy pontosan hogyan megy a
gépek csinálj, amit akarsz tőlük, és hogyan megy
mintegy csinálja helyesen, míg az út mentén csinálja
jól, elegánsan, és így tovább.
És így ma, hadd belevetik magukat egy kicsit többet, de
hogy mi nem megy túl gyorsan, különösen a kevésbé
kényelmes, hanem azért is, hogy tudjuk tartani a kamatot a
e kényelmesebb, nézzük csak gyorsan kezdődik egy kicsit
A bedugni néhány ilyen ötletet.
És ismét, kérje el, mind személyesen, vagy online, ha
kérdésekre, így tudjuk tartani mindenki ugyanazon az oldalon.
>> Tehát a CS50 Appliance, gyorsan hátralépett, az
mi, a saját szavaiddal?
Nem baj, ha nincs ötlete, mi ezek a szavak is lehet még.
[Hallhatatlan]
Oké, szóval egy univerzális interfész -
hogy mindannyian megosztani.
Abszolút.
Így lehetne például, mondd, hogy menjen néhány
webhelyről töltse le ezt a szoftvert a Mac OS.
Töltse le ezt a szoftvert a Windows konfigurálja a
erre-arra.
De a valóság az, akkor befut számtalan műszaki
támogatása kérdések.
És ezekben a napokban, sok, mi történik szerver oldalon,
a világban a számítástechnika, különösen, amikor a
webfejlesztés és web alapú alkalmazások, valójában
gyakran végzett Unix vagy Linux számítógépek, szemben a
Mac vagy Windows PC-k.
>> Tehát között upsides, majd használatának ez a dolog az úgynevezett
CS50 Appliance mi mindannyian ugyanabban a környezetben.
Szóval mindenki ugyanazon az oldalon nem számít, mit hardvert
jött egyetemen, hanem lesz dabbling pontosan
ugyanabban a környezetben, hogy fogod használni felé
félév végén, valamint a web-fejlesztés, valamint a
jövőben valós alkalmazásokban cikke.
Tehát konkrétan a CS50 Appliance egy ingyenes darab
szoftver, amely lehetővé teszi, hogy futtatni más operációs rendszert,
Linux, ebben az esetben a saját számítógépén, egy ablak.
Most már nem csak le a készüléket.
Szüksége van egy program, amely játszani, vagy futtassa a készüléket.
És hogy szoftver általában ismert, mint a
hypervisor.
Hipervizorokkal jön formájában a termékek, mint a VMware,
Virtual Box, Parallels.
Mindenféle tartozó társaságok szoftver ingyenes és
kereskedelmi, egyaránt.
Mit fog látni a probléma Set 1 adott utasítást, hogy hogyan
beszerzése szabad szoftver, amellyel
futtassa a CS50 Appliance.
És ha nem, akkor van, hogy egy ablak a Mac vagy PC,
asztali környezetet úgy néz ki nagyon, mint ez, ahol a
van egy Start menü-szerű dolog a
a bal alsó sarokban.
Van egy Fő mappába, vagy saját könyvtára, a bal felső
ott, egy szemetes, és így tovább.
Szóval mi kötekedik szét a szükséges adatokat, ahogy haladunk.
>> De most kezdjük, hogy belevetik magukat C.
Szóval ez a C programozási nyelv, szellemükben hasonlóak
Scratch, de sokkal kevésbé grafikus, de ironikus, amennyire
erősebb, ha egyszer hozzáértés vele.
Tehát C, írunk programokat írásban forráskód, amely
az angol-szerű szintaxis hasonló zokni
bemutatása, hogy mi volt utolsó alkalom, hogy lehetővé teszi, hogy
kifejezni magad elég pontosan, ha a
arcanely, a számítógéphez.
>> Szóval milyen terméket szoftver van valóban szükség van
programokat írhassanak olyan nyelven, mint a C, amely a mi
beszélgetés hétfőn?
[Hallhatatlan]
OK, akkor csak meg kell egy szövegszerkesztővel.
Önnek nem kell semmilyen különleges szoftvert
önmagában programokat írhassanak.
Csak kell egy szövegszerkesztővel, mint a Notepad, a Windows,
TextEdit Mac, vagy valami úgynevezett gedit, a világ
Linux, ami fogjuk használni itt.
És ez az, írni a programokat.
>> De írásban csak a fele az egyenlet.
Ezután kell futtatni azokat.
De ahhoz, hogy fusson programok -
Ön nem tudja futtatni a forráskódot.
Ha ehelyett meg kell tenni, amit vele először?
Igen.
DAVID J. Malan: Be kell, hogy
összeállításhoz.
És valaki mást, összeállításának forráskód jelenti -
[Hallhatatlan]
DAVID J. Malan: Pontosan.
Fordítás, hogy nullákkal és egyesekkel.
Mert mindannyian, ezekben a napokban, hogy a számítógépeket, amelyeken CPU,
szinte amelyek mindegyike által nevű cég az Intel, és
Intel Inside, azt jelenti, hogy ez az agy belsejében a
számítógép, az úgynevezett CPU.
És az egyik dolog, hogy az agy nem az, hogy tudja,
hogyan kell megérteni minták nullákkal és egyesekkel.
Tudja, milyen mintát bitek jelentése mellett, milyen
motívum jelentése kivonás, milyen mintája
bitek képviselik nyomtatás, és megteremti a hallható hang.
>> Így rövid, a CPU, párosulva az operációs rendszer,
amely a szoftver fut a tetején a CPU,
hogy úgy mondjam.
Együtt, a két darab tudják, hogyan kell futtatni programokat
Mi, emberek írni.
>> Szóval, ha bemegy a CS50 Appliance itt, meg kell nyitni
egy szövegszerkesztő, és én is elérheti ezt a
egy pár módon.
Én sem megy a menü, programozás,
és akkor lehet választani -
Nem, nem olyan menüt.
Mehetek a Kellékek / gedit ide a megnyitáshoz
az én kis szövegszerkesztő.
Vagy egyszerűbben, tudom kattintson a kis ikonra az alsó
a bal sarokban.
És most kap ebben a környezetben van.
Elég emlékeztet egy egyszerű szövegszerkesztő, mindössze
egy vagy két különbségeket.
A felső, ahol a kurzor villog most, ez az, ahol
Én írásához kódomat.
Az alsó van ez a dolog az úgynevezett terminál ablakot.
És milyen dolgokra van e
úgynevezett terminál ablakot?
[Hallhatatlan]
>> Oké, úgyhogy parancsok futtatására.
És néhány parancsot mi futott hétfőn egy kicsit
rejtélyes az első, de a lista ls, cd változás könyvtár,
rm, az eltávolítás.
Szóval ez a fajta egy old-school módon navigálásról
számítógép segítségével csak a billentyűzet és a szöveges parancsok,
és nem, általában, egy egér.
De majd meglátjuk, hamarosan, ez valójában ad nekünk
kicsit több erő és egy kicsit több pontosságot, amellyel
kifejezni magunkat.
És akkor ide a bal oldalon, mi csak fog látni,
amint elkezdünk író szoftver, egy kis összefoglaló a
programot, hogy már írt a bal felső sarokban.
De majd meglátjuk, hogy ismét nemsokára.
>> Szóval valamit tenni meglehetősen egyszerű itt.
Először is hadd menjen előre, és válassza ki a Fájl, Mentés, és én csak
majd kattintson a jharvard ide, több mint a bal, és
jharvard is, megint csak a nevet a home mappa, a
személyes akták, nekem, most, hogy John Harvard, mint mindannyian
hamarosan John Harvard ebben a környezetben.
Van ez a Home könyvtár, My Documents és így tovább,
hogy szeretnék menteni, most ezt a fájlt be
Így fogom hívni hello.c. Aztán megyek
előre, és kattintson a Mentés, és most mi van itt egy lap
nevezett hello.c, annyira, mint más típusú szerkesztő.
>> És most hadd menjek előre, és kezdjük el beírni a program.
int main (void).
És akkor én csináltam utoljára, printf, a nyomtatási formázott,
("Hello, world!"
),.
Majdnem teljes.
De én hiányzik egy pár további részletek.
Mi hiányzik ez a program, amit igazán szükség van a
hogy ténylegesen fordítani?
Igen.
[Hallhatatlan]?
>> DAVID J. Malan: Igen, ezért kell, hogy tartalmazza a szabványos
I / O könyvtár.
Tehát ez szükséges-fölé fő, ezért én csak megy
hogy némi helyet ott.
És én fogom csinálni # include .
És észre a szögletes zárójelben van.
És mint egy félretéve, gedit egy kis felhasználóbarát, ha a
néha egy kicsit zavaró, az, hogy megpróbálja segíteni a
szem észre, milyen vonalakat fel mi.
Így a tény, hogy a kurzor közvetlenül a könyök
tartó, észre, hogy ez kiemeli a többi könyök
tartó plusz ezt.
És ez még csak felhívni a figyelmet arra a tényre, hogy
tekintette szimmetria.
És szimmetria programozás általában egy jó dolog.
Hasonlóképpen, ha mozgatni a kurzort a végéig, észre, hogy a
kapcsos zárójelek felállás azt mutatják, hogy igen, van egy nyitott 1
és egy zárt egy, hogy úgy mondjam.
>> Rendben, és meg tudom csinálni egy másik dolog.
Ez nem feltétlenül szükséges, de jó gyakorlat, azaz
vissza 0-ra.
És return 0 mit nekünk itt?
Vagy azt jelenti, mi?
[Hallhatatlan]
DAVID J. Malan: De semmi baj.
És őszintén szólva nehéz a sok baj egy
programozhatja ezt a rövid.
Szóval csak, hogy szuper határozottan kimondja, hogy minden rendben van.
Én, az ember, amikor fut a program, valószínűleg soha nem
látom, hogy 0-ra.
Általában ezek a számok kerülnek vissza a fő
Csak felnevelni a fejüket az emberek, ha
valami balul sül el.
És egy kicsit pop up mondván: rendszerhiba, egy,
két, három, vagy bármi a szám volt, hogy
ténylegesen vissza.
Szóval bármi mást baj ezzel?
[Hallhatatlan]
>> DAVID J. Malan: Szóval ez nem annyira funkcionális hibát
hanem esztétikai.
Talán érdemes létrehozni egy újsor karaktert ott a
Ezt követően húr, hogy mi valójában a kurzort
a következő sor, és a program, csak úgy néz ki, egy kicsit szebb.
>> És most hadd menjek le a terminál ablakban
és a zoom vissza be
És ez a dolog itt, ez az úgynevezett prompt.
Ez csak eszembe, aki vagyok, jharvard @ készüléket, ha
készülék a számítógép neve vagyok.
Zárójelben a tilde, a cirkalom szimbólum, amely
képviseli azt, amit?
KÖZÖNSÉG: Home könyvtár.
DAVID J. Malan: Home könyvtár.
Tehát ez csak egy összevont írásmód mondod itt
a személyes mappát, ahol az összes fájl megy alapból.
Tehát most, itt, én is írja ls listából.
És az egyetlen dolog, amit látni itt a pillanat hello.c.
És ez jó, mert írtam ezt.
>> Szóval hadd menjen előre, és nem teszik hello.
És észre, nem vagyok gépelni, hogy hello.c.
Ehelyett Én csak beírja a bázis a fájl nevét, hello.
És hogy, mint láttuk, hétfőn, akkor csak arra következtethetünk, hogy szeretnék
a. c fájlt.
Szóval most írtad, hogy hello.
Most már értem ezt a meglehetősen hosszú parancsot, és a jövőben is
látta ezt újra és újra.
De egyértelmű, csenget, a szó, hogy csak megjelent,
ez a tényleges fordító.
Győződjön meg csak egy fordítási segédprogram.
Ez csak egy felhasználóbarát program, amely megment, az
hosszú távon, attól, hogy írja ki hihetetlenül unalmas hosszú
parancsokat, mint hogy az egyik.
Szóval lehet futtatni csenget kézzel.
Ön is írja az összes, hogy kézzel.
Csak lesz nagyon unalmas.
És így, hogy csak egy program, amely leegyszerűsíti az életünket és
fut bonyolultabb parancsokat nekünk.
>> Rendben, most mi fájl van
az én aktuális könyvtár?
Nem csak hello.c, hanem a hello.
Tehát, ha azt szeretné futtatni hello, emlékeztetni arra, hogy azt mondom pont perjel,
amennyiben dot úton megy az aktuális mappában, bárhol
vannak, majd futtassa a program neve hello, sőt, most,
Én hello world.
Rendben, bármilyen kérdése van a munkafolyamat, illetve a szintaxis
amit csináltam?
>> Rendben, nézzük a dolgokat egy fokkal újra.
Tehát ez volt underwhelming hogy csak írni egy programot, hogy csak
mindig azt mondja, hello, világ.
Tehát mi változott meg, hétfőn, azaz, hello, David.
Ez egy kicsit személyes, de ugyanolyan kemény, mint a kódolt
első változat.
Tehát egyáltalán nem olyan meggyőző.
De létezik, a C, funkciók mellett természetesen
print, funkciók segítségével kap felhasználói bevitel.
És ahogy tettük ezt, a másik nap, a következő volt.
Mielőtt ténylegesen ki kell nyomtatni valamit, először kaptam
valamit a felhasználó elől.
Szóval hadd ezt újra.
>> Húr s, ahol s értéke csak egy tetszőleges név, itt, a
string, egyenlő getString.
Szóval, mi volt getString?
Ez nyilvánvalóan kap egy string alapján a nevét.
De mi van, még technikailag?
Ez egy funkciót.
Szóval ez egy függvény, ami nem jön C per se.
CS50 staff írta ezt.
És így, hogy ezt, akkor nem csak magában stdio.h,
Azt is meg kell, hogy tartalmazza, mit?
Igen.
Szóval cs50.h, ami csak egy fájl írtuk néhány évvel ezelőtt.
Mi telepítette be a készüléket az Ön mellett
az összes szabványos fájlokat.
És így ezeket az első hetekben az osztály, akkor használja
ezt csak azért, hogy egyszerűsítse a folyamat során nagyon alap
dolgok, mint például egyre felhasználói bevitel.
Mert mint látni fogjuk néhány hét alatt, egyre felhasználói a
nyelv, mint a C valójában meglepően bonyolult,
különösen azért, mert nem tudod előre, általában hogyan
sok cucc a felhasználó megy írja be
És ha nem tudod, mennyi adatot várnak, akkor nem
tudom, hogy mennyi memóriát kiosztani.
És ha valóban van egy kontradiktórius felhasználónak, aki megpróbál
, hogy törjenek be a rendszer, összeomlik a számítógép, valamint,
általában az első módszer a támadás, ahogy tettem a
, Hétfő, írjon egy egész hosszú sorozata véletlenszerű karaktereket,
Enter, és meglátjuk, mi tör.
Mert általában, ha egy program breaks, hogy utal a
egy biztonsági hiba, potenciálisan.
Az biztos, hogy céloz meg, a programozó, miután tett
hibát, de veszélyesen, akkor tettek
biztonsággal kapcsolatos hibát, és általában látni fogjuk, hogy
ez hogyan gépek veszélyezteti a mai napig mind
A világ a web és programok a
parancsot, mint ez.
>> Rendben van.
Tehát az s karakterlánc egyenlő getString.
Tehát konkrétan most, mit 6 vezetéken csinál itt?
Tehát a függvény a jobb oldalon lesz string,
úgy hány érvek?
Oké.
Tehát nincs.
Egy kis józanság megtekintéséhez.
Egy érv ismét csak egy bemeneti funkció módosítására
Az alapértelmezett viselkedés valamilyen módon.
De ebben az esetben, nem akarok változtatni
viselkedését getString.
Csak azt akartam, hogy egy string.
Így tettem semmit a zárójelek, majd tettem egy
pontosvessző demarking végén a kódsort.
Most, az egyenlőségjel nem jelenti az egyenlő önmagában.
Ez azt jelenti, engedményezés, ami azt jelenti, tegye, amit kap
kiadott a jobb belső bármi is a bal oldalon.
>> Tehát a bal oldalon, azt mondjuk, hogy az általunk hirdetett
karakterlánc hívott s.
És még pontosabban, már lefoglalt memóriát belül
amit majd fel a biteket, ami egy sorozata
karakter.
De ma már kiosztott
vagy bejelentett egy string.
Rendben van.
Szóval most egyszer tettem ezt, azt akarom, hogy csatlakoztassa az érték
s, nem kell hozzáadni az Dávid.
Szóval ez a baj, miért?
Szóval, ez csak szó szerint a kemény kódolt s.
Ez az, hogy "hello, s", ami nem az, amit akarok.
Szóval tudom csinálni.
A százalék jel helyőrző, de most meg kell
bejut nyomtatása egy másik érv.
Emlékezzünk vissza, hogy érveket funkciókat elválasztva
vesszők, így a következő, vesszővel ide tettem ez után a levél s.
És ebben az összefüggésben most, s ez a változó, és a printf,
kézhezvételét követően a két bemenet -
a szöveg a bal és a változó nevét s jobbra -
akkor csatlakoztassa az utóbbit az előbbi a számunkra, és
Csak ki kell nyomtatni egy szép gyönyörű tartalmazó karakterlánc
bármi legyen is az, hogy mi gépelt be
>> Akkor próbáljuk meg.
Menni előre, és kicsinyítés, hátsó
az én terminál ablakot.
Nagyítás az alján van.
Írja be újra, hogy hello.
Zengés úgy tűnik, hogy ismételni.
Megyek, hogy írja. / Hello, Enter.
Semmi sem úgy tűnik, hogy még nem történt, de ez most ezt a parancsot
hogy írhat ilyesmit Nate, Enter, és most már
Hello, Nate.
És tudom csinálni újra Rob, és így tovább.
Így remélhetőleg most már ez a program úgy viselkedik, mint a szándékom.
>> Nos, nem is olyan felhasználóbarát.
Fogalmam sincs, mit várnak tőlem.
Így tudjuk biztosan tiszta ezt egy kicsit.
Hadd menjek vissza ide, és ahelyett, hogy csak a búvárkodás és
kéri a felhasználót egy string, hadd egyértelműen megmondani a
Felhasználói mit várok.
Szóval printf ("Adja meg egy karakterlánc:"
);
Tehát nem változók itt.
Nincs százalék jelek.
Csak az egyszerű angol mondatot.
Hadd Most menj az aljára ide és futtassa újra a programot.
De semmi sem úgy tűnik, hogy megváltozott.
Miért?
Azt kell fordítanod azt.
Így könnyen hibát tenni.
De van, hogy nem csak menteni a fájlt, de
újrafordítani a programot.
És ha én újra futtasd a make hello, most csenget fut.
Most már tudok futni. / Hello. És most látom "Adja meg egy string:".
Oké.
Most egy kicsit felhasználóbarát.
Nate, az Enter, hello, Nate.
>> Nos, próbáljuk meg újra, és indítsa el gondolkodni
mintegy sarok esetekben.
Szóval, csak úgy, mint Scratch, te ösztönözni, vagy hogy
ösztönözni a spec, hogy milyen gondolni, mi mehet
baj, ha nem előre mindent, amit a felhasználó esetleg csinálni.
Bugs ezért járna.
Szóval, adjon meg egy húr -
mi a sarokban ügy itt?
Mi az a forgatókönyv, hogy én, a programozó, esetleg nem
várható?
Igen.
Oké.
Szóval, mi van, ha én írjon be egy számot, mint ez?
Rendben van.
Tehát még mindig működik.
Nyelvtanilag semmi értelme.
De legalább a program működik.
>> Mi van a másik sarokban az esetben?
Valami, amit nem vártam.
Igen?
Oké.
Így tudnánk tenni valamit, mint egy nagyon-nagyon nagy szám.
Szóval ezt itt.
Hadd kicsinyítés egy kicsit, hadd kiemelni.
Nem lehet másolni és beilleszteni ide.
Rendben van.
Szóval nem lehet másolni és beilleszteni e terminál ablakban, úgyhogy
Csak szimulálják azt.
Hadd kicsinyítés, megy betakar.
Nem fogom ezt túl sokáig, mert nem fog
ténylegesen szünet ebben a programban.
De igen.
Az Enter billentyűt.
De nem tette.
Rendben van.
De ez egy valódi sarok ügyben.
És az egyetlen oka annak, hogy helyesen viselkedett, így
beszélni, mert a CS50 funkció getString ténylegesen
Ajánlott a motorháztető alatt, mint látni fogjuk néhány hét,
automatikusan kiosztani több és több RAM, egyre több és több
memóriát az operációs rendszer, amikor rájön, wow,
amit tényleg beírt valami egészen hosszú.
Nos, ez egy kicsit egy fehér hazugság.
Ha valóban megállt egy darabig, és én beírt
valami ilyesmi 5000000000 karaktert a billentyűzet
itt, vagy valóban hit copy-paste egy kicsit, akkor nagy valószínűséggel
okozhat a program összeomolhat.
Csak egy kicsit nehezebb, hogy szimulálja, hogy egy véges
ideig.
>> Mi van a másik sarokban az esetben tudtunk próbálni?
Igen?
Igen.
Szóval, miért nem válaszol semmit?
Tehát valójában, hogy bizonyos intézkedéseket, mert különben
A program fog ott ülni villog egész nap.
De ha én csak Enter -
OK, most mégis úgy néz ki rosszul.
Nem lezuhan, de talán van most lehetősége
végrehajtásának megkezdése szigorúbb programot
ténylegesen ellenőrzi.
És ha a húr, a mondat, a szó, amit
beírt területén 0 hosszúságú, nos, talán meg kell kiabálni a
felhasználó, vagy mondd neki, hogy belépjen egy string újra, úgy, hogy
valójában, hogy mit néz a helyes viselkedést, és nem
Csak a teljes felügyeletet a részemről.
>> Kérdés vissza?
Decimális számot.
Tehát lehet próbálni azt is.
1,10000005.
Úgy tűnik, hogy fog működni, csak a ténylegesen oké.
És ez tulajdonképpen várható.
Annak ellenére, hogy lehet, hogy ez a szám van megadva, vagy a
nagyobb szám korábban, amikor rájönnek, hogy mi gépelés felhasználó
bemenet és mi a getString funkció nem
függetlenül attól, hogy mit akarok gépelés néz ki, mint egy számot.
Emlékezzünk vissza, hogy megfelelően ASCII, mindent a
billentyűzet numerikus érték lehet térképezni, hogy a
karakter, a karakter.
Tehát ebben az esetben, bár talán írjon be egy számot, a
számítógép fog gondolni rá, hogy úgy mondjam, mint egy húr -
valamit, ami úgy néz ki, mint egy szám, de
valójában nem egy szám.
De ez valójában egy tökéletes Segue, mert most már tudjuk
valójában átmenet írásban programok
használjon más adattípusok.
>> Szóval mellett a karakter, vagy inkább mellett a húrok,
észre, hogy van más adattípusok a C, valamint a
más nyelveken.
A karakter, mint a neve is sugallja, csak egy karakter.
Az úszó egy lebegőpontos érték, és ez csak egy divatos
szóval a valós szám - valami, hogy van egy tizedes
pont, hogy néhány szám a bal és / vagy jobb.
Az int egész szám, ami csak egy szám, mint a 123.
És most látna érdekesebb olyan dolgok, mint a kettős.
Mit mondunk egy dupla volt az utolsó alkalom?
Ez 64, jobbra.
Tehát mivel jellemzően egy úszó 32-bit -
így ez ilyen sokáig a memóriában, akkor használat 32 nullákkal és egyesekkel, hogy
értékeket képviselnek - a kettős szó kétszerese, ami
azt jelenti, hogy akkor sem képviselt nagyobb számokat, vagy
Ön képviseli pontosabb számokat.
Szóval lehet, hogy több számot a tizedespont után, de a
a fickó azt mondta, a videó, még valami egyszerű
fogalmilag, mint 1/3 nem képviseli pontosan egy
számítógép, mert végül elfogy a bitek, és
ezért csak akkor tudjuk megtenni .33333333 oly sokszor, a
amely pontnál csak azt kell mondani, én vagyok az ábrázolás
hely, van, hogy csak ez egy nap, és képviseli azt
kissé pontatlanul tetszik.
És egy hosszú, hosszú -
hülye név, de ez azért van, mert van egy adattípust ismert
hosszú C-ben, amely véletlenül gyakran 32 bit, csakúgy, mint egy
int a 32 bit, de a hosszú ideig
általában 64 bit.
Tehát ez csak azt jelenti, hogy képviselje nagyobb
számok, mint ez.
>> Rendben van.
Tehát ha valóban szeretné elindítani képviselő dolgokat, mi
szükség lehet kifinomultabb típusok és
ezért van string.
Így a CS50 könyvtárban, hogy a fájl neve cs50.h, most már
ténylegesen bevallott adattípus, hogy úgy mondjam, az úgynevezett húr,
de a szöveg valójában nem létezik.
Ez ismét egy ilyen réteget fogunk héja
vissza egy-két hét, és dobja el, és ténylegesen
nézd a motorháztető alatt, hogy mi a szöveg valójában, és a
hogyan is képviseltette magát.
Mi is lesz nézni logikai értékeket.
>> Szóval, mi volt a bool keretében Scratch?
Igaz, vagy hamis.
Tehát ez csak egy értéket, hogy ez igaz vagy hamis, be-vagy kikapcsolása, 1 vagy
0, de szeretné megtekinteni a világ.
Így a C, köszönhetően a CS50 könyvtár, ami viszont
magában foglalja a másik könyvtár a motorháztető alatt, már
hozzáférést egy adattípust hívják bool, amely
szó szerint lehetővé teszi, hogy rendelni az értékeket true vagy false
dolgokat a program.
>> Szóval gyerünk ide, és írjon egy kis programot, amely
csinál valamit érintő számok helyett.
Akkor hadd menjek vissza a CS50 Appliance, hadd menjen előre, és
hozzon létre egy új fájlt, itt hívják -
mondjuk valami egyszerű, mint a math.c.
Rendben van.
És most menj fel a csúcsra a program, én vagyok
csinálni a szokásos -
# Include , hogy tudom használni
printf, int main (void) -
akkor jön vissza, végül, mit jelent int
itt, mit jelent void itt, de most, csak tudom, hogy
meg kell kezdeni programok, mint ez.
Most megyek előre, és mondjuk egy kicsit
különböző - printf ("Adj egy számot:"
),.
Akkor fogok csinálni int n = getInt, mert
Kiderült getInt másik funkció a CS50 könyvtárban
mellett getString.
És most fogok csinálni valami hülyeséget, mint a "köszönöm
A% d ", a decimális egész szám, majd vessző n, és
majd vissza 0-ra.
Tehát ismét vissza 0-nak semmi köze a szám vagyok
kéri a felhasználótól.
Csak azt jelenti, a végén, hogy az összes, feltehetően jól.
>> Akkor hadd menjek le a terminál ablak van.
Hadd írja, hogy a matematika, az enter billentyűt.
És valami baj van.
Győződjön matek nem működik.
Itt az első a mi hibaüzenetek.
Miért?
Egy kicsit rejtélyes, de -
Igen.
Szóval cs50.h.
Tehát újra, különösen a korán, akkor írja meg az első
program Pset 1 pontban, a munkaidőn és
őszintén szólva, ez lesz döntő néha mik ezek a dolgok
ténylegesen mondanak.
De rájössz nagyon gyorsan elkezd esni
gyűjtőzónákba ahol ez azt jelenti, hogy már abbahagyta 1
A # magában foglalja a tetején a fájlt.
És csenget, a fordító, hogy tájékoztatja Önt ezt
mondván, inkább fancifully, implicit nyilatkozat
funkció getInt érvénytelen.
>> Rendben van.
Szóval mit jelent ez?
Ez csak azt jelenti, hogy már hallgatólagosan bejelentett getInt ben
abban az értelemben, hogy már nem kifejezetten nyilvánította.
Kifejezetten állapítsa int, meg kell tanítani
Csenget, hogy létezik.
És a nagyon egyszerű megoldás, amely tanítani azt
beleértve a másik fájl, cs50.h készült,
a tetején a fájlt.
Mert szó szerint, mit jelent ez: # include azt mondja csenget
nagyon sokat menni megtalálják a nevű fájlt cs50.h, másol,
illessze automatikusan a tetején az én program nekem,
majd konvertálja a forráskódot nullákkal és egyesekkel.
De ez nyilvánvalóan nagyon unalmas, ha az emberek már
megy a másolás és beillesztés ezek a nagy fájlok minden alkalommal,
úgyhogy # include csak nem minden nélkül, automatikusan
muddying my kód valaki más könyvtár.
És egy könyvtár csak egy fájl, amely funkciók és
Más dolog, hogy valaki írt, hogy mi van
kihasználva a saját kedvéért.
>> Rendben van.
Próbáljuk újra.
Gyártó matek.
Az Enter billentyűt.
Jó.
Annak érdekében, hogy úgy tűnik, hogy működik.
Úgyhogy nekem most futni matek,. / Math.
Adja meg ad nekem egy számot, 123.
Köszönöm a 123.
Most próbáljuk másik sarokban ügyben.
Egy karakterlánc elég nagylelkű, mert a
szöveg bármi lehet.
Lehet néz számok néz
karakterek néznek ki, mint szavakkal.
De egy int egy int.
Így most, ha én vagyok a nehéz felhasználó, és ez azt mondja: "Add nekem
Számos, "mi van, ha megpróbálok tenni valamit, mint a 0.1?
Nos, ez a szám, és ez összhangban van a
nyelvtani szoktam itt, de a motorháztető alatt, én vagyok az
Természetesen a funkció getInt.
>> Szóval lássuk, mi történik.
Adja meg, próbálja újra.
Rendben van.
Hadd legyen nehéz, és az Enter leütése újra.
Enter, Enter.
Szóval most úgy tűnik, hogy getInt egy kicsit
erősebb, mint getString.
Mi, a személyzet, végre oly módon, hogy ha észre
Ön nem adott nekünk egy int - és int egy decimális szám
tartalmazó nullák, is, kettesével, hármasával, négyes, ötös, hatos,
hetes, nyolcas, vagy kilences.
És ennyi.
Nem tizedes jegyre, nem karaktereket, nincs központozás.
Úgy tűnik, hogy van az együttműködésre.
Akkor hadd próbáljam meg négy, öt, hat, és ez lesz velem.
Szóval tényleg, hogy az anális itt, azt kéne mondani, hogy "Adj nekem
egész szám "annak érdekében, hogy továbbítja a felhasználó
pontosan mit szándékoznak.
>> Most gondoljon a motorháztető alatt.
Nem fogunk nézni, hogyan cs50.h megvalósítása ma,
hogy a könyvtár.
De ha tartja mondván újra, újra, újra, milyen programozási
konstrukció vagyok feltehetően használ a motorháztető alatt a
végre ezt?
Szóval csak egy hurok, ugye?
Az egyik legegyszerűbb ötletek láttunk Scratch.
The Forever konstrukció, az ismételt konstrukció.
Feltételezhető, hogy ebben a programban, a motorháztető alatt, még
ellenére, hogy C-ben írt, és nem karcolás, csinál
valami úgynevezett egyenértékű örökre, ha a felhasználó nem
beírt értéke, mondjuk újra, újra, újra, újra, így a
végül ha nem kap egy egész szám, akkor
kitörni, hogy a hurok.
>> Szóval, milyen egyéb funkciókat tudjuk használni itt CS50 könyvtárában?
Nos, a fajta az nyilvánvaló is, legalábbis alapján a
adattípusok, hogy most már tudjuk, létezik.
Mi végre getString, getInt, hanem az egész
első heteiben a kifejezés, akkor is használhatja getFloat és
GetDouble és GetLongLong annak érdekében, hogy pontosan
adattípusok, amit akar.
Mert a legfontosabb részlet az, hogy ellentétben néhány nyelven,
mint a Python és Ruby, ahol nem kell feltétlenül
állapítsa meg az adattípus egy változó -
nem kell elmondani a számítógép milyen stuff
fogsz tenni a változó -
C-ben van, hogy valaha is olyan pontos.
Szóval, ha akarsz egy változót nevű n, egy darab a tárolási
hogy ebben az esetben történik, hogy 32 bitre megegyezés, akkor
El kell mondanom, hogy ezek a számítógép bitek
megy szám tárolásához -
nem egy karakter, nem egy string, nem egy úszó.
És ez azzal a kérdéssel foglalkozik már ténylegesen
futott be a múlt héten.
Ha mi a nullákkal és egyesekkel számok képviselik nem csak
számokat, hanem As és Bs és Cs, hogy a világ egy
számítógép fogja tudni, hogy ez a minta a bitek ténylegesen
jelenti a szám 65, szemben a képviselő
betű, amely véletlenül szerint
ASCII, emlékszem, egyenértékű volt a 65?
>> Tehát ezek adattípusok nyújtanak összefüggésben a számítógéphez, így a
, hogy tudja, hogy ezeket a biteket úgy kell értelmezni, mint egy
int vagy egy string.
Bármilyen kérdése van, akkor ezzel kapcsolatban?
Igen?
DAVID J. Malan: Jó kérdés.
Ha veszünk ki stdio.h, mi mentse a fájlt -
hadd menjek le a terminál ablakot, és futtasd a make matek, zoom
és be -
Most kapok egy másik hiba, mert én vagyok hallgatólagosan
nyilvánító mi működik most?
Printf.
Szóval most már létrehozott egy új probléma, amelynek megoldása a
lényegében azonos.
Azt kell, hogy tedd azt vissza.
KÖZÖNSÉG: [hangtalan]
DAVID J. Malan: Oh.
Szóval, ha veszek ki -
Oké, igen.
Tehát, ha leveszem a standard I / O könyvtár integráció up
itt, és akkor mondod, ha megszabadulni a printf, kap
Szabadulj meg printf?
Igen.
Ennek működnie kell, mert már nem vagyok bármilyen - Hoppá.
Hasznosnak Csak hazudni?
Ó, oké.
Ez nem fog működni, mert egy új hiba mi csak bevezetni.
És ez egy kicsit magától értetődő.
>> Mi a baj?
Kihasználatlan változó n.
Szóval ez a hiba annak a következménye, mi miután beállította a
készüléket különösen pedáns, valóban kiabálni
Ön minden lehetséges hibát, akkor is, ha ez a fajta
nem végzetes hiba, mint ez - ez tényleg olyan nagy
foglalkozik, hogy én kiosztott int, hogy egy számot, majd
Csak nem csinált semmit vele?
Szóval funkcionálisan, nem.
Ez nem fogja megtörni a program.
Ez csak ilyen hülye, ugye?
Nincs értéke miután kérte ezt a számot, tárolása
azt a változót, ha soha nem fog semmit
vele, hogy nyomtassa ki, vagy mentse el.
Tehát ebben az esetben, csenget az elismerése, mint sok, és
azt mondja, nem használt változó n.
>> Így tudjuk kijavítani ezt, ha igazán akar.
De ismétlem, ez nem jó programozási most.
Szóval én is csak ezt -
menj le ide, hadd törölje a képernyőt, hogy matek.
Ez működik.
Most már tudok futni a matematikai program, úgy bemenet -
nos, ez rossz volt.
Veszi bemenet, és ez minden ez, ebben az esetben.
>> Tehát tulajdonképpen, próbáljuk egy másik sarokban eset, hogy mi
nem gondolt korábban.
Ebben az esetben - itt, menjünk vissza az egyik, hogy a
kicsit több felhasználóbarát.
Hadd menjek vissza ide, és futtasd a make matek újra.
Hoppá, mit csináltam rosszul?
Van, hogy állítsa vissza tovább.
Oké.
Most már vissza az eredeti állapot, ahol az összes
ez remélhetőleg jól.
És most, ha én futni matek, 123 úgy tűnik, hogy működik.
De ez nem igazán hatásos bizonyíték, hogy csak azt
oké, hogy működik.
789, ami működik.
Ideje benyújtására.
Mert van másik sarokban esetekben itt.
A string nem igazán nekünk sok bajt beírja a
csomó karakter.
De mi van, ha én írja ezt?
Irány az 1-es szám egy csomó, csomó ide -
Rendben, ez kezd egy kicsit unalmas, úgyhogy megyek
megáll itt, és megyek az Enter leütése.
>> Mi a fene történt?
Szóval ez is lehet magyarázni.
Így telt el, mint bináris?
Egy jó gondolat, de nem, ez nem az a tény, hogy elvette
bináris, mert valóban, ez csak egyfajta
véletlen.
Meg tudjuk csinálni ezt újra.
Szóval nincs 2 a bináris rendszer, ez
valószínűleg elég egyébként.
Az Enter billentyűt.
Szóval nem ez volt a probléma.
Mi van még?
Pontosan.
>> Tehát úgy gondolja, vissza a mi int valójában.
Ez 32 bit, amelyek együttesen értelmezett
mint egy számot.
Ha van 32 bit, azt jelenti, hogy minden egyes bit lehet
a 0 vagy egy 1, 0 vagy 1.
Tehát ez azt jelenti, van két lehetőség erre bit,
Két lehetőség ezen két lehetőség erre
bit - annak érdekében, hogy ez 2-szer 2-szer -
annak érdekében, hogy ez a 2 a 32 teljesítmény a teljes száma
permutációk nullákkal és egyesekkel, ha 32
Helyőrzők, nullát vagy egyest, előtted.
Szóval, ha van 2 a 32, matematikailag, ez mi?
Szóval egy csomó.
Ez 4 milliárd ide vagy oda.
És 4000000000, nem úgy tűnik, hogy mi kinyomtatott itt.
Tény, hogy ez úgy néz ki, közelebb a 2 milliárdot.
De ez nem véletlen.
Az a tény, hogy a számítógép tévesen értelmezte a nagyszámú,
én hatalmas sorozata is, és aztán a nagy sorozat kettes,
A mintegy 2 milliárd ismertetjük hogyan?
Van egy kupakot a int.
Van egy természetesen egy maximális érték, amit képviselnek.
De ez általában 4 milliárd, ugye?
Ha 2 a 32 nagyjából 4 milliárd, hogy úgy tűnik, mintha
ez a legnagyobb szám.
Tehát nem a maradék, de egy jó gondolat.
Negatív számok.
Tehát, ha van 4 milliárd lehetséges dolog, amit lehet
képviselt a különböző permutációk 32 0s és
1s, nos, magától értetődik, hogy mi, emberek érdemes
jelentenek nem csak a pozitív egészek
de negatív egészek.
És valóban, ez az a feltételezés, hogy a C teszi.
Tehát a 32 bites, akkor képviseli durván negatív 2
milliárd egészen pozitív 2 milliárdot.
És ebben az esetben, amit mi igazán látni csak
a béren kívüli a kapacitás a mi egész, és mi van, így a
beszélni, túlcsordult egész.
Megpróbáltuk teletölteni több bitet bele, mint ami valóban illik.
Tehát a végeredmény már lényegében minden 1 bit.
Már tükrözött minden kedves bitek, már próbáltam, hogy képviseljék
a legnagyobb számú lehetséges, de ez nyilvánvalóan nem közel
elég nagy ahhoz, hogy képviselje a két dolog, amit csak gépelt be
Igen?
KÖZÖNSÉG: [hangtalan]
>> DAVID J. Malan: Jó kérdés.
Miért nem tudunk egyszerűen kijelenti, hogy a negatív
írjon, mint csak egy karakter?
Tehát teljesen lehetett, és mi is majd mentse
egy további bit.
De még mindig megy, hogy kijelenti, hogy kötőjel, és
ez fog kerülni, hogy legalább valamit,
valószínűleg egy kicsit.
Szóval igen, mi lehetett volna 32 bit felhasználhatja a szám, de most
szükségünk van egy másik bit felhasználhatja a kötőjel
szimbólum, a mínusz jel.
Tehát most már 33 bites értékek, amit tehetnénk, de ez
Csak nem úgy, ahogy kész.
Csináltunk egy ítélet hívást évvel ezelőtt, 32 bit egyfajta a
mértékegység itt.
Így fogunk használni egy ilyen bitek hatékonyan
képviselnek negativitás, és 31 bit, hogy képviselje a számot.
Egyéb kérdés?
Rendben van.
Ez rengeteg.
Miért nem megy előre, és megteszi az öt perces szünetet itt?
>> Rendben van.
Tehát ismét nem túlhangsúlyozni a matematikai alkalmazások
programozás, menjünk csak összeszedi ki ezt egy példa
mielőtt beköltözik más konstrukciók, csak azért, mert
jól szemlélteti néhány gyakori hátráltatója pontok egyes
az alapok, amikor a programok írásának.
Ebben az esetben a, ezzel aritmetikai kiértékelésének van bizonyos
Érdekes jelentősége a szintaxist.
>> Tehát ez csak egy képlet, amellyel képes átalakítani
hőmérséklet Fahrenheit Celsius.
Ha nem emlékszem, ez csak a képletet.
Tehát ha csatlakoztatja Fahrenheit értékének 32 fokos, ami
fagyasztás, hogy lesz 32 mínusz 32 0, és valóban,
A 0 Celsius is fagyasztás.
Így gyorsan józanság megtekintéséhez nincs - ez a jól ismert képlet.
Hadd menjek át a készülék, bár, és indítsa el a
írásban a program neve, például, F2C; "Fahrenheit
Celsius dot c ".
És ki a tetején van, megyek elindul # include
stdio.h, és én fogom csinálni int main (void), és a
megint, akkor gyere vissza a jövőben, hogy milyen int jelent
és mit jelent semmis ott.
És most hadd menjek előre, és végre egy programot, amely
alapvetően nem ez az átalakulás a számunkra.
>> Szóval printf, mondjuk a hőmérséklet Fahrenheit.
És akkor hadd menjen előre, és kap az értéket a felhasználó.
Milyen értéket kapok a felhasználó, ha akarom
őket, hogy adjon nekem egy hőmérséklet Fahrenheit?
Igen?
Mit javasol?
Igen.
Szóval úszó úgy érzi, elég ésszerű.
Van, megint csak néhány lehetőség, hogy
láttunk eddig.
Van dolgok, mint a char, dupla, float, int, long long,
bool, string.
Szóval ezek, float úgy érzi, elég ésszerű.
Jól jönne egy dupla, jobb, mert ha tényleg meg akarjuk
jelentenek az emberi hőmérséklete -
98,60000 -
tudtuk használni 64 bites csinálni, de úgy érzi, mintha
túlzás a hőmérséklet.
Szóval csak megy az úszó.
Most kell egy változót.
Csak az egyszerűség kedvéért, fogom hívni f, de
is ugyanúgy helyesen nevezik hőmérséklet,
de vagy jól van.
Szóval float f = getFloat.
Amint most úgy döntött, hogy használja getFloat, bár én
kell, hogy egy korrekciót.
Igen.
Tehát meg kell # include , különben a fordító
fog kiabálni nekünk.
Most, hogy van egy úszó, hadd menjen előre, és nem a
konverzió.
>> Tehát először is, hadd kerüljön a szokást itt a
kommentálva a kódot.
Tehát ismét megjegyzést csak egy jelölés, hogy az emberi, hogy ez
nem része a programnak önmagában, hanem egy, segít
megérteni, mit tettél a másnap reggel, vagy a következő
hónap, ez segít a tanítás más megérteni, mit tettél
vagy mit szándékoznak tenni, ezért
általában nagyon jó gyakorlat.
Minden néhány sornyi kódot, írjon egy megjegyzést, hogy
Ön vagy munkatársa.
Szóval itt fogok mondani, hogy "rákérdezés a hőmérséklet."
Nem kell a teljes mondatot, csak egy rövid mondat.
De az ötlet mögött kommentálva C-ben, hogy minden az Ön
hozzászólások kell képessé - vagy, mondjuk, a TF vagy egy munkatársnak -
a sovány a program, és pontosan tudja, mit csinál, mivel nem
annyira olvasni a kódot, de ha elolvassa a megjegyzéseket, amelyek
kell lennie, tömör és egyértelmű.
Rendben, most hadd menjek előre, és azt mondják: "Convert
Fahrenheit Celsius. "Szóval megyek előre, és nem,
mondjuk, float c.
Majd folyamatosan Celsius egy lebegőpontos értéket.
>> És hadd vessen egy stab ebben.
A képlet ismét fel ide.
Mivel 5/9 alkalommal F mínusz 32.
Akkor csináljuk.
Tehát 5 osztva 9, mínusz -
Hoppá, én elrontottam már fel.
Times.
Tehát 5/9 alkalommal F mínusz 32.
Tehát F mínusz 32, pontosvessző.
És most, itt, én megyek előre
és azt mondják, nyomtassa ki eredményt.
És ez a rész könnyű. Printf.
Hogyan megy a nyomtatás ezt?
Nos, azt is mondhatnám: "Ez a szám a Celsius a% f \ n",
Csak néhány esztétika.
És akkor milyen értéket akarok csatlakoztatni itt printf által
második érv?
Oké.
Szóval csak c.
Tehát kezdjük ezt, és aztán csak vissza 0-ra.
Ismét, ennek semmi köze a matek.
Ez csak azt jelenti, minden rendben van.
>> Nos, ez a helyes, ez a program?
Rendben van.
Szóval néhány hibát.
Akkor is, ha fogalmam sincs, mi a programozás, akkor rendezni
A következtet vissza az iskolában, amit a
hibák itt lehet.
Mi az első?
KÖZÖNSÉG: [hangtalan]
DAVID J. Malan: Igen.
Szóval hiányzik zárójelben.
Nem volt szándékos, hogy én tettem zárójelben a vitaindító
tolja ide, mert valójában ez a fogalom a rend
A műveletek, illetve elsőbbséget, ahol bizonyos műveletek -
szorzás -
magasabb kötelező, magasabb elsőbbséget, mint a dolgok
mint például összeadás vagy a kivonás.
Így tettünk ezt évek óta, csak egyértelművé tenni, pontosan
milyen matematikai műveletet kell tenni az első.
Szóval kéne utánozni pontosan ezt biztosítja.
Ellenkező esetben, a számítógép valószínűleg megpróbálom megtenni
valami hasonló megosztottság 5, 9, majd szorozzuk F, majd vonjuk
32 az egész dolog.
Ami nem, sőt, mit akarunk csinálni.
Szóval zárójelbe tesz.
Adjunk hozzá a zárójelek itt, zárójelek itt.
Nézzük, hogy ezt itt.
Itt, Csak most vettem észre egy hibát csináltam az út mentén.
Igen?
KÖZÖNSÉG: [hangtalan]
>> DAVID J. Malan: Ah.
Jó.
Tehát tulajdonképpen van egyforma egész
körzet kérdésről előtt.
Én korrektek, hogy lássuk, mi a tünet.
De mi lesz, ha a helyes 1
más hiba van.
Igen?
KÖZÖNSÉG: [hangtalan]
DAVID J. Malan: Igen.
Szóval, buta hibát csináltam, de hihetetlenül fontos.
A számítógép nem fog csak szemet hunynak, és hagyja
me használja tőkét F, amikor ténylegesen bevallott változó
a kisbetűs f itt, 8 vezetéken.
Szóval ki kell javítani a line 11 én kapitalizáció, amelyet a
perce volt a tőke F véletlenül.
Mi van itt?
Amennyiben ez kisbetűvel is?
Meg kell, de ez véletlen egybeesés.
Ez a% f semmi köze a változó.
Szóval, csak hogy szuper világos van, hadd menjen előre, és
átnevezni ezt röviden "hőmérséklet". Hadd átnevezése
ez a "hőmérséklet". Hadd ne nevezze át ezt.
Mert újra,% f globálisan azt jelenti, "lebegőpontos értéket."
Semmi köze az én változó.
De a "hőmérséklet" az egész hely egy kicsit bőbeszédű,
úgyhogy megyek vissza a kisbetűs "f" s.
>> Nos, hadd menjen előre le ablakom itt.
Gyártó F2C -
ami ismét a tetszőleges név I
adta ezt a fájlt.
Úgy tűnik, hogy összeállítani.
Hadd futni F2C.
Az Enter billentyűt.
Hőmérséklet Fahrenheit - csináljuk könnyű.
32.
OK, korrektek.
De, ha most ezt a 212 forrásponttartomány -
átkozott.
Rendben van.
Tehát nyilvánvalóan nem helyes, ha a TF megpróbálja
legalább két érték.
Akkor mi a probléma?
Nos, akkor már tegye az ujját, hogy mi a kérdés.
De miért van az, hogy a helyzet?
Akár itt, amikor csinálom a matek az 5 osztva 9.
Szóval fogalmilag, ez teljesen korrekt.
Teljesen megfelel a képlet.
De a számítógép csak akkor pontosan mit
mondd meg nekik csinálni.
És mi vagyunk hatékonyan mondja a számítógép itt
ossza el egész az 5. egész 9
és add nekem az eredményt.
A gond az, azonban, ha nem alá adatok felhasználásával
típusok, a kimenet azonos adatokat típusú, mint a bemenet.
És ha a két bemenet egyaránt ints, a kimenet megy
, hogy egy int.
És így 5 osztva a 9. pont valami.
De mi a legközelebbi egész pontra valamit?
Szóval, ez tényleg 0.
Tehát ahogy megbeszéltük hétfőn, minden tizedes
pont lesz csonka.
Csak kap eldobják.
Tehát ez egy teljes tévedés, mert én is, valamint csak
szorozzuk mindent 0 ide.
>> Most már tudom kijavítani ezt egy pár módon.
Tudnám csinálni.
5,0 osztva 9,0.
Technikailag nem is kell csinálni ezt.
Ez nem elegendő ahhoz, hogy az egyik csak a számok egy úszó -
vagy dupla - azáltal, hogy a tizedes pont itt.
Mert mi történik most, amikor osztani egy egész által
a float, vagy kettős, a számítógép fog megvalósítani
Ó, ezek egyike pontosabb.
Hadd err oldalán így pontosabb, mint a
Ön szánták.
Így fogja átalakítani az eredmény -
tér majd vissza az eredmény egy lebegőpontos értéket is.
Annak érdekében, hogy működni fog.
Ez működik.
És van egy másik mechanizmus, hogy mi lesz látható
részletesebben a jövő héten.
Tudod valójában, mint a programozó, mondd meg a számítógép
ténylegesen kezelni egy adattípust a
bár lenne még egy.
>> Így tudtam ténylegesen ezt.
A zárójelben tudok mondani valamit, mint a (float), nyitott
paren, közeli paren.
És ez az úgynevezett "casting". Ismét több
ezen a jövő héten.
De ez még csak a programszerű lehet megmondani
A számítógép, igen tudom, hogy a 9 egész szám, vagy egy hosszú.
Tudom, hogy ez nem egy lebegőpontos értéket.
De kezelje azt, mint egyébként.
Szóval, hogy leadott egy adattípust jelent átalakítására
egyikről a másik.
Őszintén szólva, ez csak egy kicsit csúnya, úgyhogy azt javaslom, menjünk
vissza az eredeti javaslatot az igazságos konvertáló
ezeket a dolgokat lebegőpontos értékek manuálisan.
Mert most már csak szuper világos, hogy mi folyik itt, és a
ez nem olyan zavaró.
>> Szóval most már menj vissza az én terminál ablakot.
Gyártó F2C.
Hadd menjek előre, és fuss ez.
És, mint egy félre, unatkozni írja ezeket a parancsokat
újra és újra észre, hogy a számítógépek, mint a Linux van,
általában elég okos.
És ha megüt Up, mehetünk az én egész története
parancsok, fel és le.
Tehát ebben az esetben is, én is csak megy Korhatár futtassuk le a make F2C.
Én, hogy kiabáltam, mert én csak tettem, hogy egy második napja.
Ez már naprakész.
Így most tudok futni F2C újra.
Próbáljuk 32 Fahrenheit.
Most próbáljuk 212 Fahrenheit.
>> Pfuj.
Úgy tűnik, hogy működik.
Nos, ez jó, de úgy érzi, egy kicsit, hogy az önkényes
Én mutató hat szám után a tizedes pont.
Igaz?
Ha az időjárás a személy, TV, te egyfajta doofus
ha olvasod a hőmérséklet
ilyen fokú pontosság.
Szóval egyszerűsítése.
Szóval tényleg megy fel ide, az én printf.
És igen, azt akarom, hogy lebegnek.
De azt akarom, hogy most meg a pontosságot.
És fogok egy kicsit rövid.
Fogom mondani, hogy adjon nekem egy pont után a tizedes.
Tehát ahelyett, mondjuk% f, fogok mondani% .1 f.
És ez csak annyit jelent, adjon nekem egy pozíció
a tizedesvessző után.
Rendben van.
Próbáljuk meg újra.
Hadd újra futtatni fordítása után.
És most azt írja, 32, és kapok vissza
tömörebb értéket.
És tudok gépelni, most 212, és menj vissza a tömörebb
érték is.
És van más dolog, amit tehetünk a printf.
Tudod valójában meghatározza, hogy milyen széles a számot kell lennie.
Ha azt szeretnénk, hogy a padding rajta, így jobb összehangolásának vagy
balra igazítása az összes szám-vagy
próbálja center dolgokat.
Tehát észre, vannak kis trükköket lehet csinálni ott.
De ők csak szűkülnek le a formátum kódok,
mint mi van ott.
>> Tehát jelen kérdésének elsőbbséget.
Ez egy nagyon unalmas táblázatot, hogy menjen át módszeresen.
De észre, hogy a szerzők a C jöttek fel a
szabályokat, amelyek meghatározzák a piaci szereplőknek nagyobb
részesítendő, több kötelező ereje, mint mások.
Így mivel az iskolában, általában tudta, hogy
szorzás és osztás, majd összeadás és kivonás,
majd néhány más dolog.
Egy olyan világban, programozás, van egy sokkal
hosszabb listát azokról a dolgokról.
És ez nem olyan dolog, érdemes memorizálni most.
Majd kap szoktatott előtt hosszú.
De csakúgy, mint az iskolában, zárójelek általában megoldja
kérdések elsőbbségi azáltal, szuper egyértelmű a
számítógép és emberi egyaránt milyen szánják.
Szóval, hogy ezt csak egy kis puskát ott.
De a legtöbb ilyen adatokat mi nem kap egy ideig.
>> Rendben van.
Most építsük fel, és helyezze el ezeket a kis buta
matematikai példákat.
Még mindig ugyanazt a fundamentumok, hanem indítsa
expresszáló magunkat egy kicsit több, mint a Scratch.
Tehát Scratch, mi volt ezeknek logikai kifejezések.
És az angol, a logikai kifejezés mi?
Igaz vagy hamis.
Ez valami olyasmi, hogy értékeli az igaz vagy hamis.
1 vagy 0.
Be-vagy kikapcsolása.
Bármit is szeretne nevezni.
Most Scratch, a puzzle darabkái nézett ki, mint ez.
És ez a kombináció, az alján van, a három
puzzle darabkái.
One összefüggésben -
valami, amely üres és üres.
És akkor két logikai kifejezések belsejébe.
Így fészket logikai kifejezések, hogy minél több
bonyolult logikai kifejezések.
Például, ha az, szombaton és ez jó
időjárás, akkor menj ki.
Vagy valami önkényes ilyesmi.
Szóval lehet csatlakozni logikai kifejezések, hogy dolgozzon ki egy
Nagyobb igaz érték, amelynek választ székhelye
A kisebbek.
>> Most, C, szerencsére, ez a leképezés
valójában nagyon egyszerű.
Zárójelek segíteni abban, hogy a dolgok egyértelművé itt.
&&, Ami azt jelenti, "és a". Szóval így
fogjuk átalakítani ezeket háztömbnyire Scratch a C.
És a körülmények láttunk Scratch, a bal oldali
oldalon van, én is verem őket hasonlóan C. Ha x kisebb
mint y, akkor ezt.
Különben, ha x nagyobb, mint y, akkor ezt.
Else logikusan azt egyenlőnek kell lennie, tehát mondjuk
hogy azok azonos.
Így most már kezdeni építeni ezeket a dolgokat.
>> Szóval nem egy példát.
Hadd nyitni egy fájlt, ami a kurzus honlapján, hogy a
Írtam előre.
Ezt nevezik nonswitch.c.
És majd meglátjuk, miért csak egy pillanatra.
Tehát ebben a fájlban - nonswitch.c--
1. észre, hogy van egy csomó
Megjegyzés a tetején.
Ez csak elmagyarázza a fájl neve, amit
nem, és így tovább.
És ez nyilvánvalóan mutatja a használatát Logikai ÉS-nek -
egyesítésekor két kifejezést.
>> Akkor lássuk, hogyan működik ez a program.
Én tartalmazzák a két fájlt, és cs50.h stdio.h.
Ha lapozzunk lefelé, most, hogy a program, ez egy kicsit
mint azt írtam korábban, de nagyon olvasható.
Szóval először kinyomtatni a felhasználó, a sorban 18,
"Adj egy egész szám 1 és 10 között." Így
, hogy ott van.
Most kapok egész.
De észre, hogy getInt - elég egyszerű.
Ez csak megy, hogy kap egy int.
Ez fogja biztosítani, hogy nem kap egy int, és nem
karakterlánc vagy úszó.
De ez nem fog csinálni bármilyen határ ellenőrzését.
Ez nem fogja szűrni a számok között a
bizonyos tartományban.
Tehát annak végrehajtására magunkat.
Szóval, csak úgy, mint Scratch, ahol tudtam csinálni egy kötőszó a
két kifejezést, meg tudom csinálni, hogy a C az alábbiak szerint.
Ha n értéke nagyobb vagy egyenlő, mint 1, és n értéke kisebb, mint a és
vagy egyenlő 3, fogok nagyon önkényesen rendeletet, amely a
szám, hogy egy kevés.
Csak kedvéért egy nyilatkozatot.
Különben ha n 4 és 6 között, print "Te szedett egy átlagos
száma. "Else ha n 7 és 10 között, print" Te választottál
nagy szám. "else print" Te vedd érvénytelen számot. "
Mert logikusan, hogy a következő, ha volna
kimerült kínálatunkban.
>> Tehát észre ezt nem egészen, hogyan írjuk nagyobb vagy
egyenlő egy matematikai osztály.
Igaz?
Ön általában rajzolni, mint ez, a vonal alá.
De nincs ilyen kulcsfontosságú én billentyűzeten.
Tehát a szimbólum C kifejezésére nagyobb vagy
egyenlő a két karakter, és a szimbólum kevesebb, mint
vagy egyenlő a két karaktert is.
Rendben van.
Szóval, ha futtatni ezt a programot, akkor talán kitalálni, mi ez
fog tenni.
Ha megy előre, és nonswitch, Enter.
Majd futtassa nonswitch.
Adj egy számot 1 és 10 között.
Fogom adni 11.
Felvettem egy érvénytelen számot.
Hadd próbáljam meg a 3-as szám.
Felvettem egy kis számot.
Tehát meglehetősen egyszerű ott.
>> Mit tegyek, ha szeretné változtatni a viselkedését a program és
tenni valamit egy kicsit más helyett?
Hadd menjek előre, és mondom ezt.
Hadd megszabadulni mindezt.
És hadd mondjam el, ha az (n == 42).
És akkor én megyek előre, és azt mondják print "Te felvette a
helyes válasz. "Else fogunk menni előre, és azt mondja:
printf ("Te felvette a
rossz válasz. "); Oké.
Csak azért, mert.
>> Most, néhány pontot tehetünk itt.
Az egyik, hogy nem írja be a szimbólumot, amit azt hiszem, az a
leginkább ésszerű.
Ha azt akarom, hogy ellenőrizze az egyenlőség, kiderül, hogy nem használja a
egyenlőségjel.
Te inkább használja az egyenlő egyenlőségjel.
És miért lenne az, csak ösztönösen?
Igen.
KÖZÖNSÉG: [hangtalan]
DAVID J. Malan: Helyes.
Az egyenlőségjel már használják megbízást.
Valaki nem igazán gondolja ezt végig.
És most, amikor az egyenlőség vizsgálatot, meg kell
jobban kifejezett, és azt mondják, egyenlő egyenlő.
Egy nagyon gyakori hiba, hogy ezt megtehesse.
És, ha az irodai órák vagy valamikor a jövő héten, vagy a
következő két hétben teszel ilyet, majd a
küzdenek, hogy 10, 20 percig, hogy kitaláljam,
mi a rohadt bug van, észre, hogy az egyik ilyen
az emberek, akik ezt a hibát.
Szóval, szuper könnyen elkészíthető.
De a cél most az, hogy kivédjék ezt a hibát.
Ez lehet értékelni, mert mi ez valójában mondani?
Ha n lesz 42.
Tehát az ige az emberek használni, szóban kifejezni
fogalma hozzárendelés "lesz." Tehát, ha n lesz 42.
Tehát ez azt jelenti, rendelni 42-n.
Most van egy logikai kifejezés zárójelben,
belsejében feltétel, amelynek értéke 42.
Igaz?
Mert ha értékeli azt a belülről kifelé, a teljes
válasz, most is 42.
>> Tehát, ha azt kérdeztem a kérdést, "ha (42)," mi a
Tényleg mond?
Nos, logikai kifejezések csak akkor lehet igaz vagy hamis.
1 vagy 0.
Be-vagy kikapcsolása.
Tehát úgy tűnik, hogy egy sarokba esetben is, amely szerint minden olyan
hirtelen azt mondom, "ha (42)." Ez nem egy logikai érték.
Tehát mi számítógépek tenni, bár, ez lényegében megegyezik
bármit, ami nem 0-t értelmezni, hogy igaz legyen.
1.
On.
Ők mind funkcionálisan egyenértékű.
Csak az értéke 0, vagy a kulcsszót hamis, mivel mi
végül látni, valójában hamis.
Így a "ha (42)" ténylegesen nem igaz, mert nem-nulla.
Így pontosabban itt egy logikai érték valóban nem annyira
sok igaz vagy hamis, de ez a
esetben, ha a értéke 0 vagy nem-nulla.
Tehát hamis vagy nem hamis.
És ez lehetővé teszi számunkra, hogy az magában foglalja az összes látna
lehetőségek a zárójeles kifejezésben.
Tehát meg kell, soha oly gondosan, mondom ezt -
if (n == 42).
Egyszerűen azért, mert meg kell adni a vizsgálat az egyenlőség,
Nem egy megbízást egy érték.
>> Mit érdemes megjegyezni itt?
Ezek a kapcsos zárójelek valójában nincs szükség.
Csináltam őket, csak hogy nit-válogatós itt.
De ha van egy feltétellel, hogy csak egy sor
kód, a kényelem, a programozók nem kell használni
A kapcsos zárójelek.
Elegendő csak a francia, esztétikai okokból, és a
majd írjuk meg a sort.
Csak akkor, ha azt szeretnénk, hogy írjon két sornyi kódot - a
Például más printf ("Viszlát!"). Ha akarod
, hogy ez hibás.
A francia, amit csak akarsz, de az a tény, hogy van
beírt két sor kód használata nélkül kapcsos zárójelek
azt jelenti, hogy ez a program nem fut megfelelően, vagy esetleg
sem összeállításához megfelelően.
Tehát most, hogy őszinte legyek, azt hiszem, a legjobb szokás csak
használja a kapcsos zárójelek, és rájössz, hogy teszik
super világos, mi folyik itt.
>> Is, mint egy félre - különösen, ha azok között, akik
az ajánlott könyveket, vagy források online -
észre, hogy ott van ez a fogalom a stílus
programozás.
És néhány ember valójában inkább tegye a kapcsos zárójel
ide egy sorban.
Vannak, akik inkább nem nevetséges dolgokat,
szeretem őket ide.
Nincs rossz válasz, amikor a
stílus, de ez rossz.
De néhány ember csinálni.
[Nevetés]
DAVID J. Malan: Szóval azért említem ezt most, egyszerűen azért, mert a
olvas fel a dolgokat a könyvekben vagy az interneten, fogsz kapni
különböző üzeneteket különböző tanárok és
különböző szerzők.
És csak észre, hogy funkcionálisan, ők
általában azonos, de légy következetes.
Tehát ebben az esetben, akkor egységesíteni a göndör
nadrágtartó sorakoznak itt a bal oldalon.
>> Rendben van.
Akkor menjünk előre, most és fuss ez, és meglátjuk, mi történik
ezt a programot.
Gyártó nonswitch.
Ezután futtasd nonswitch.
Adj egy egész szám 0 és - annak érdekében, hogy ez nem megfelelő
már, de én csak úgy önkényesen mondani 42.
És én felvette a helyes válasz.
Nos, hadd valójában ezt egy másik irányba.
Kiderült, hogy van egy másik szintaxis mi
használható a program.
Itt egy új darab szintaxis, amely funkcionálisan azonos,
de csak bevezet egy másik módja kifejezni magunkat.
Szóval ez az, amit a neve a "switch nyilatkozatot." És egy
switch kifejezés a következőképpen működik.
Tart, zárójelben, a kívánt értéket a
"Kapcsoló".
Azt akarod, hogy másképp viselkednek értéke alapján.
Tehát ez azt jelenti, kapcsoló értéke n.
És mit jelent ez?
Nos, ha n értéke 1 vagy 2 vagy 3, megy előre, és nyomtassa ki "Te
szedett egy nagy szám ", majd a szünet.
Ennek oka az a szünet, hogy az út a C működik, mint
amint talál egy eset, amely megfelel, elindul végrehajtó
az összes alábbi kódot is.
Szóval, ha van egy sor kód, mint én itt on line 27, akkor
lesz végrehajtva.
Ha újabb sort itt, nem lesz végrehajtva.
Egy másik vonal van, ez lesz végrehajtva.
A program csak akkor áll végrehajtó mi alatt
alkalmazandó ítélkezési kijelentés, amikor kifejezetten
mondják, hogy "szünet". Tehát rossz.
Jobbra, ebben az esetben, mivel emiatt.
4. eset vagy 5 vagy 6, hasonlóképpen, megy
hogy nyomtassa ki egy üzenetet.
Ebben az esetben a közeg szám.
Szünet.
Case 7, 8, 9, 10, ez fog kinyomtatni "Te szedett egy nagy
száma. "Szünet.
És akkor ott van szó a kulcsszó a "default"
ez hatékonyan, mint a "más" konstrukciót.
Tehát új szintaxis, hanem szellemileg,
semmi új itt.
Olyan, mint a Scratch.
Ha else if, else if, egyfajta blokk.
>> Szóval ez a kapcsolt változata a program.
De észre, hogy megcsináltuk a számok itt.
Hadd nyit a második verzió, csak megmutatni
egy kicsit konkrétabb.
Tehát itt van osztályzatok helyett.
Kiderült, hogy tudod használni kapcsolók nem csak egész számok, hanem
karakter.
Nem minden adattípus, de legalább a karakter.
Tehát itt tudnánk tenni valamit, mint ha az érték a C, hogy a
a felhasználó beírt, az a 19, használja a GetChar funkció
a tőke A vagy a kisbetűs, hadd értelmezi, mint egy osztály,
és azt mondják, hogy felvette egy kiváló minőségű.
És le végig a switch, akkor van más
tokok "B" s és "C"-ek, és így tovább.
De nézzük most egészítik ki egy másik dolog.
És ismét, milyen átrepülni
néhány ilyen példát.
De ez tényleg így tudjuk alkalmazni őket, most -
vagy tényleg, csak lefordítani őket most -
a C.
>> Szóval hadd menjen előre, és ezt.
Fogok nyitni egy új fájlt.
És én fogom csinálni tartalmazza .
És akkor fogok csinálni int main (void).
Hadd menteni a fájlt, mint egy loop.c.
Csak példaként.
És én megyek előre, és tegye a következőket.
Szeretnék írni egy nagyon unalmas program.
Tehát 10.
Csináljuk ezt.
9.
Rendben van.
Amint elkezdi ezt a programozásban, akkor
talán csinál valamit rosszul.
De kezdjük ott egyébként.
Hoppá.
Ez tényleg rossz.
7.
6.
5.
4.
Semmi sem fog történni, ha eljutunk 0-ra.
3.
2.
1.
Oké.
0.
Törlés.
>> Rendben van.
Szóval vissza 0-ra.
Szóval, ez a program nyilván fog csinálni, amit nagyon
unalmasan azt mondja, hogy fog csinálni.
Ez lesz nyomtatni az összes ilyen
értékek, fentről lefelé.
Szóval hadd megcsináljuk hurok.
És aztán - Hoppá.
Gyártó hurok.
Én voltam a hibás könyvtárban.
És most hadd futni hurok.
Az Enter billentyűt.
Woohoo.
Nagyon szép.
Szép, hosszú program.
>> Rendben, de most csináljuk jobban.
Csakúgy, mint a Scratch, amikor elkezdtem használni a hurok
konstrukció, ahelyett, hogy csak a másolás és beillesztés az összes
puzzle darabkái, hadd mutassam be ezt a dolgot.
Így a C, vannak különböző loop konstrukciók,
amelyek közül az egyik úgy néz ki, mint ez.
A "for" ciklus három dolgot, elválasztott két pontosvesszővel.
És aztán, belsejében a test a hurok, hogy úgy mondjam - a
cucc belsejében a kapcsos zárójelek -
tehetünk valamit, újra és újra.
Szóval mi van itt a képernyőn, ez
szó szerint csak egy megjegyzést.
A / / itt azt jelenti, jön egy megjegyzést.
Ez nem kód.
Ez csak angol leírást, nekem, az ember.
>> Szóval inicializálás feltételeket, és a frissítéseket.
Nos, lássuk, hogyan is működik ez.
Ez lehetővé teszi számomra, hogy átírják a program az alábbiak szerint.
For -
így itt jön a loop -
int i -
itt jön a változó nevű "i" -
lesz inicializálva 10-ig.
Tehát az én inicializálás.
Azt akarom, hogy ez a hurok, amíg az "i"-nél nagyobb vagy
0-val egyenlő.
És minden egyes iterációs e hurok, azt akarom,
csinálni i -.
Szóval láttunk + + hétfőn.
- Az ellentéte.
A csökkentést az értéket 1-gyel.
Belül a hurok, azt akarom, hogy valóban tenni valamit.
Így fogok mondani valamit, mint a printf.
Nem akarom, hogy mondjuk 10 most, mert ez nyilvánvalóan csak
nyomdába ugyanazt az értéket.
Mit kíván nyomtatni helyett, talán?
Igen.
Tehát "i". Szóval% d, i.
>> Szóval megyek lopni egy ilyen ötleteket a korábbi -
ez a helyettesítés a formátum kódok -
majd itt lent, alul, én vissza 0, csak
a jó intézkedés.
De most van egy tömörebb programot.
Ez csak egy pár sort, és nem egy 10 vagy 11 vonalak.
Hadd menjen a prompt le ide.
Remake hurok.
Rerun hurok.
És úgy tűnik, hogy az azonos.
Most, a program nincs sokkal érdekesebb.
De most beírhatja valami ilyesmi.
Tudom megváltoztatni ezt 100-ra.
Én aztán újrafordítani a programot.
És aztán újra futtatni a programot.
És most megy szupergyors a mai számítógépek.
De ott van -
és valóban, a scrollback buffer nem
is megy ilyen messzire.
Ott vagyunk.
Tehát ott van mind a 100.
De ez könnyű hibázni ide.
Mi lesz az elvárt viselkedést, ha
véletlenül csinálni?
Így olyan, mintha végtelen.
Tehát lássuk, ha a számítógép működését.
>> Szóval hadd menjen előre, és hurok.
És hadd futni hurok.
Szóval jött vissza, hogy csak egy pillanatra.
Majd hagyd, hogy futni.
Mert mit számítunk fel, minimálisan?
Valószínűleg legalább 2 milliárd, ha van, hogy sok bit, és
mi a pozitív értékeket.
Szóval ugrik vissza.
Emellett az ilyen típusú hurkok, már az úgynevezett közben
hurkok. Szóval, csak mint Scratch, meg kellett Örökké
blokkokat, és meg kellett ismétlés blokkokat.
Hasonlóképpen, a C, csak más módon
kifejezni magad.
Szóval van ez a fogalom a while ciklus, amely lehetővé teszi, hogy
kifejezni magát egy kicsit másképp.
És akkor van egy úgynevezett do-while ciklus,
ami működik kicsit másképp is.
És mi ugratni ezeket szét az idő múlásával.
>> De vessünk egy pillantást az utolsó itt.
Ha bemegyünk -
még mindig fut.
Elég végtelen.
Szóval hadd menjen pozitív, és mutassa meg, hogyan lehet valójában
szabályozzák felhasználói egy kicsit hatékonyabb.
Ez egy elég rövid program.
És itt van, a fő, int n nyilatkozatot.
Szóval adj egy változót nevű n. Most szó szerint mondom
"Igen." És akkor kaptam nyílt göndör
zárójel, kapcsos zárójel bezár.
És akkor észre, jobb után, hogy azt mondja, miközben n
1-nél kisebb.
Tehát észre, hogy ezeken a vonalakon -
19-24 -
együttesen alkotják a do-while ciklus.
Továbbá, az új szintaxis, nem új ötlet.
Ez csak egy másik módja a looping, szintaktikailag.
Szóval, mit jelent ez csinálni?
Tegye a következőket míg n értéke kisebb, mint 1.
Szóval, mit szeretnél csinálni?
Követelem, hogy adjon nekem egy pozitív egész szám.
Aztán tényleg próbálnak értéke a felhasználó.
De tekintve a műveletek sorrendjére itt, mert a
míg a feltétel itt lent, én majd megy, hogy ellenőrizze, az n
kevesebb, mint 1?
Tehát tegyük fel, hogy a felhasználó -
miután követelte ily módon -
típus az értéket 0-ra.
Ez a feltétel lesz igaz vagy hamis?
Nos, ez valóban lesz igaz.
Mivel a n értéke 0, és 0 1-nél kisebb.
Szóval, mit jelent?
Csináld újra.
Csak egyszer ez a feltétel eredménye hamis.
Ha azt írja be a 42.
Nos nincs, a 42 nem kisebb 1-nél.
Ezért ez a hurok történik végrehajtó.
És ezen a ponton, a program azt fogja mondani, köszönöm,
a 42, ebben az esetben.
Most, hogy ilyen módon kifejező magad -
Nem szabad várni, hogy ez a befejezéshez.
Ez fog tartani egy ideig.
Folytatás legközelebb, talán.
>> De most, megvan a képessége, hogy remélhetőleg, hogy megértsék a
kis stréber humor.
Elnézést.
Ez nem reprezentatív humor a számítástechnika
világban, de ez aranyos.
[Nevet] Legyen vége e megjegyzés.
És mi lesz látni hétfőn.
[Taps]