>> [Zenelejátszás]
David J. MALAN: Rendben.
Ez CS50, és ez a a vége a 2. héten.
Így ma, megyünk hogy továbbra is a megjelenés
meg, hogy az általunk képviselt dolgok alatt a hood-- távolodik
a számok, mint egész és lebegőpontos értékek
és amelynek középpontjában a vonósok és végül több érdekes program.
De mi is vessünk egy pillantást a Néhány terület-specifikus problems--
az első az, ami legyen bevonásával kriptográfia,
a művészet kódolás információ, amelyben lásd fent itt
van egy kép a Radio Orphan Annie titkos dekóder gyűrűt múlt.
>> Ez valójában nagyon kezdetleges formában és gyermekbarát formában cryptopgraphy
amelyben ez a gyűrű két disks-- egy belső és egy külső.
És forgó egyik ilyen, akkor lényegében sorakoznak betűkkel, mint egy
Z-ig további betűk révén, mint a B A. Más szóval,
akkor szó forgatni az ábécé, így jön a leképezés
levelek levelek, hogy, ha akart küldeni egy titkos üzenetet
hogy valaki, mint Annie, meg lehetett írni le az üzenetet, majd forgassa
a levelek, ahol, ha érted mondani, hogy "A", ahelyett, hogy "B"
úgy érted, hogy azt mondják: "B" , ahelyett, hogy "C" -
vagy valami egy kicsit ügyes mint hogy-- majd végül
amíg Annie ezt dekóder gyűrű, ő képes dekódolni az üzenetet.
Most te is emlékszel, az tény, hogy ez a alkalmaztunk egy nagyon híres film, amely
játszik csömörig alatt a karácsonyi szezonban.
Vessünk egy pillantást ide.
Ralphie Parker: "Legyen ismert, hogy minden összefoglaló
hogy Ralph Parker-t nevezi ki tagja a Kis Árva Annie Secret
Kör és jogosult a kitüntetések és előnyök előforduló hozzá. "
>> Ralphie PARKER (elbeszélése): Aláírt Kis Árva Annie.
Ellenjegyzett, Pierre Andre!
Tintával.
Kitüntetések és juttatások, Már kilenc évesen.
>> [Zenelejátszás]
>> [RADIO CHATTER]
Ralphie PARKER: Gyere.
Essünk túl rajta.
Nem kell ez a jazz a csempészek és kalózok.
Bemondó: Figyelj holnap este a záró kaland
A The Black Pirate Ship.
Most itt az idő, Annie Titkos üzenetet neked tagok
A Secret Circle.
Ne feledje a gyerekek, csak a tagok Annie Secret Circle
tudja dekódolni Annie titkos üzenetet.
>> Ne feledje, hogy Annie is attól függően, hogy.
Állítsa be a csapok, hogy a B-2.
Itt van a message-- 12, 11, 2--
Ralphie PARKER (elbeszélése): I vagyok az első titkos találkozón.
Bemondó: --25, 14, 11, 18, 16--
Ralphie PARKER (elbeszélése): Oh, Pierre volt nagy hangja ma este.
Elmondhatom, hogy a ma esti üzenet volt igazán fontos.
>> Bemondó: Legalább 3, 25.
Ez egy üzenet Annie magát.
Ne feledje, ne mondd el senkinek.
>> [Zihálás]
Ralphie PARKER (elbeszélése): Kilencven másodperc múlva, én vagyok
Az egyetlen szobában ház, ahol a fiú kilenc
ülhetett adatvédelmi és dekódolni.
Ah.
"B."
>> [Nevet]
>> Ralphie PARKER (elbeszélése): Elmentem a következő.
"E"
Az első szó a "legyen."
Igen!
Hogy jön könnyebb most.
"U."
>> [Nevet]
>> Randy Parker: Ugyan már, Ralphie.
Mennem kell!
>> Ralphie PARKER: Mindjárt le, anya.
Gee zseniális.
"T." "O." "Győződjön meg róla, a "." Ügyeljen arra, hogy "mi?
Mi volt árva Annie mondani? "Ügyeljen arra, hogy" mi?
ANYA: Ralphie, Randy mennie.
Kérlek gyere ki?
>> Ralphie PARKER: Rendben, anya!
Mindjárt ki!
Ralphie PARKER (elbeszélése): Kezdtem közelebb van.
A feszültség volt szörnyű.
Mi volt ez?
A sorsa a bolygó lefagy a mérleg.
>> ANYA: Ralphie, Randy mennie kell!
>> Ralphie PARKER: Mindjárt ki, az isten szerelmére!
Ralphie PARKER (Elbeszélése): Majdnem ott!
Ujjaim repült!
Az agyam egy acél csapda.
Minden pórus vibrált.
Már majdnem tiszta!
Igen!
>> Ralphie Parker: "Légy biztos inni a Ovaltine. "
Ovaltine?
Egy vacak kereskedelmi?
>> [Zenelejátszás]
>> Ralphie Parker: A kurva anyját.
>> [Nevet]
>> David J. MALAN: Tehát akkor ez Egy pillantás, mi kriptográfia
lehet a Ez-- a inni múlt.
Tehát egy gyors bejelentés.
Ha szabad ezt Péntek 13:15, és
szeretne csatlakozni hozzánk CS50 ebéd, irány ezt az URL itt.
Érkezési sorrendben szolgálják, mint rendesen.
De az idő múlásával, akkor ügyeljen arra, hogy a legtöbb, aki szeretne részt venni
beoszthat-bölcs.
>> Így húrok.
Van Zamyla-- kit már most találkozott a legvalószínűbb
A Probléma Set 1-- akiknek nevét írta így.
És tegyük fel, hogy beírt nevét egy számítógépes program, amely az
használ valami hasonló getString.
Ahhoz, hogy letölteni azokat a billentyűleütéseket, hogyan
megyünk a képviselő húr, egy szó, egy bekezdés,
vagy több levelet, mint ezek itt?
>> Beszéltünk utoljára a egész számok és problémák
hogy merülnek fel egész túlcsordulás és lebegőpontos értékek
és problémák felmerülő pontosság.
A húrok, akkor legalább egy kicsit több rugalmasságot
mert strings-- csak a valós world--
lehet egy szép tetszőleges hosszúságú.
Elég rövid, nagyon hosszú.
De még akkor is, megyünk meg, hogy a számítógépek néha
elfogyott a memória, és még csak nem is tárolni elég nagy sor.
>> De most kezdjük vizualizálni egy string valami ezekben a dobozokban
itt.
Tehát hat ilyen dobozok, amelyek mindegyike mutatja a karakter vagy a "char".
Úgy emlékszem, hogy a "char" - c-h-a-r-- is az egyik a beépített adattípusok C.
És mi a jó az, hogy tudod használni hogy a fajta, mint egy építőelem,
egy puzzle-darabot, ha úgy tetszik, hogy egy nagyobb típusú adat, hogy mi lesz tovább
hívni a "string".
>> Nos, ami hasznos a gondolkodás a dolgok, mint húrok ilyen módon?
Nos, kiderült, hogy mi is valójában tőkeáttétel ezt a struktúrát
hogy valóban elérni egyes karaktereket Egy nagyon egyszerű módon.
Én megyek előre, és hozzon létre egy fájlt a "stringzero.c,"
de hívhatjuk, amit csak szeretne.
És a pályán honlapja Ebben a példában már előre,
így nem kell típus mindent.
>> És én megyek előre és először nem int main semmis.
És néhány napon belül, kezdjük ugratni egymástól
milyen üres itt van, miért ez int következő a fő, és így tovább.
De most, folytassuk másolni be ezt.
>> Fogok arra, hogy egy sor úgynevezett s.
És fogok visszatérni GetString függetlenül a felhasználó által.
Ez lesz egyszerű programot, nem utasítható,
Én csak úgy vakon arra számítanak, hogy a felhasználó tudja,
mit kell tenni, hogy ez egyszerű.
>> És most lesz egy hurok.
És azon belül a for ciklus vagyok lesz int i lesz nulla.
És én megint csak egy egyezmény, index változó számolás,
de nem tudtam hívni ezt, amit akarok.
Fogok tenni én kevésbé mint-- jól Zamyla neve hat betű hosszú.
Így fogok kemény kód, hogy van most.
>> És akkor ++.
És most benne ilyen göndör fogszabályozó fogok csinálni printf,
és szeretnék nyomtatni egy karakter egy időben.
Így fogom használni% C talán az első alkalommal.
És akkor azt akarom, hogy nyomtassa ki az összes karaktert külön sorba.
Így fogok tenni a kis backslash n ott.
Bezárás idézet.
>> És most én akarok valamit.
Azt akarom, hogy nyomtassa ki a adott betű a húr,
s, mint én vagyok iterációjával a nulla hat.
Más szóval, azt akarom, hogy nyomtassa ki az i-edik karakterét s.
Most hogyan tudom ezt megtenni?
>> Hát ugyanúgy, mint a dobozok ez az ábrázolás itt,
fajta, idézik fel a fogalom a boksz betűk, akkor hasonlóképpen csinálni
szintaktikailag C egyszerűen megadásával, Azt akarom, hogy nyomtassa ki s a i-edik karaktere.
A szögletes zárójelek a számítógép billentyűzet
hogy egy amerikai billentyűzet általában felett a vissza gomb.
>> Tehát ez nem teljesen igaz mégis, mivel lehet, hogy észrevette.
De fogom, hogy milyen vakon előretör itt.
És fogok tenni, hogy húr 0.
De mielőtt ezt, lássuk, mi Nem előre néhány gyakori hibák.
Fog ez össze?
Nem, én vagyok hiányzik egy csomó dolgot.
Könyvtárak hallottam.
>> Tehát ami header fájlok Lehet, hogy én szeretnék hozzá itt?
Igen.
>> Közönség: Meg kell standard I / O [nem hallható]
>> David J. MALAN: Kiváló.
Szóval kell standard I / O. Milyen cél akarok standard I / O?
A printf.
Így többek között stdio.h.
És azt is javasolja, hogy többek között A CS50 könyvtár milyen okból?
Ahhoz, hogy a húrok.
Szóval majd meglátjuk, mit CS50 könyvtár csinál
létre ez a fogalom a húr.
De most, ha csak gondol rá, mint egy tényleges adat típusát.
>> Annak érdekében, hogy úgy tűnik, hogy egy kicsit rendbe.
És most én megyek előre és valóban nem teszik húr 0.
Összeállítani.
Szóval ez jó.
Tehát ./string0 hadd nagyítás így tudjuk lásd közelebbről, mi történik.
Az Enter billentyűt.
Z-A-M-Y-L-A be.
És mi már nyomtatott ki Zamyla nevét.
>> Szóval ez nagyon jó.
Tehát most menjünk előre, és futtatni ezt a programot,
és írja ki Daven teljes nevét.
Meglepetés, meglepetés.
Az Enter billentyűt.
Hmm.
Még nem nyomtatott Daven a teljes első név helyesen.
Most ez nyilvánvalónak kellene lennie a visszapillantás, mert mi,
fajta, hülye tervezés döntés?
>> Igen, nehéz kódolt a hat belső én a hurok.
Most tettem, hogy csak azért, mert Tudtam Zamyla nevét
volt, lesz hat betű.
De ez bizonyára nem általános megoldás.
Így kiderül, mi is dinamikusan kitalálni a string hossza
meghívásával nevezett funkció strlen.
>> Ismét szándékosan tömören elemzi csak
annak érdekében, hogy sokkal kényelmesebb gépelni.
De ez egyet jelent a szerzés a karakterlánc hosszát.
Én megyek vissza a terminál ablak és futtassa újra a fordító.
De ez kiabál velem.
Értelemszerűen kijelentette könyvtári funkció strlen típusú unsigned int const--
Vagyok elveszett.
Teljesen.
>> Így különösen a szemek elkezdenek máz alatt
A hibaüzenetek, mint ez, a hangsúly őszintén az első néhány szót.
Tudjuk, hogy a probléma az 8 sor, amint azt itt.
És ez a karakterlánc-0.c.
Értelemszerűen nyilvánította könyvtári funkció strlen.
Annak érdekében, hogy általában fog egy minta a hibaüzenetek.
Értelemszerűen kijelentette valamit.
>> Tehát röviden, mit úgy tűnt, tettek tekintetében 8. sor, itt.
Mi lehet a megoldás még ha még soha nem használt strlen magad?
>> Közönség: része egy másik könyvtár?
David J. MALAN rész egy másik könyvtárat.
Így bejelentik, hogy úgy mondjam.
Ez szerepel néhány fájlban kivéve stdio.h és CS50.h.
Most hol van definiálva?
Hogy őszinte legyek, meg sem kell, hogy csak tudják ezt ki a fejedre,
vagy Google ezt a, és derítse ki.
Vagy tudja ezt, már megnyílt a CS50 készülék a terminál program, amely
csak a nagy, teljes képernyős változat mi van az alján, gedit ablak.
>> És kiderül, hogy van egy hasonlóan tömör parancs, az úgynevezett
férfi kézi, ahol, ha begépeli a a függvény nevét, és nyomja meg az Enter,
kapsz vissza eléggé misztikus dokumentáció.
Ez csak szöveg, hogy általában úgy néz ki, egy kis valamit, mint ez.
Ez egy kicsit nyomasztó első pillantásra.
De őszintén fogok legyen a szemem máz alatt
és csak összpontosítani a rész Érdekel, ebben a pillanatban.
>> Melyik ez.
Ami úgy néz ki, mint a szerkezetileg valami vagyok ismerős.
Valójában a man oldalon, így beszélni, megmondja
milyen fejléc fájlt funkció mint strlen meghatározása.
Szóval megyek vissza most a gedit.
És én megyek előre, és add ide #include
és mentse a fájlt.
>> Megyek, hogy törölje a képernyőt Vezérlés L Ha már kíváncsi.
És fogok újra futni make string.0, állítja össze ezúttal.
./string.0 Zamyla.
Úgy tűnt, a munka Engedj előre, és futtassa újra azt Davenport.
Az Enter billentyűt.
És az is, úgy tűnt, működik.
>> Így nem tehetünk egy kicsit jobban, mint ez, bár, elkezdhetjük rendben a dolgokat
akár csak egy kicsit.
És megyek, hogy valóban bemutatni egy másik dolog most.
Én megyek előre, és kivéve ezt egy másik fájlt.
És én fogom hívni A fájl string1.c csak
hogy összhangban legyen a kód Ön képes lesz arra, hogy megtalálja az interneten.
>> És nézzük hangsúly az pontosan ugyanazt a kódot.
Kiderül, hogy én már már egyfajta figyelembe
magától értetődőnek, hogy a laptop, és viszont, a CS50 készülék
van egy csomó memóriát, sok RAM, sok helyet byte
amiben tárolható szálakat.
>> De a valóság az, ha gépelt hosszú elég, és elég billentyűleütéseket,
Én elméletileg típus több karakter
mint a számítógép fizikailag van memória.
És ez problematikus.
Csakúgy, mint egy int csak számít olyan nagy, elméletben,
akkor csak belegyömöszölni annyi karakter a számítógép RAM Random
Access Memory.
>> Szóval, jobb előre ezt a problémát, sőt
bár lehet, hogy a ritka sarok eset, hogy úgy mondjam.
Nem történik meg gyakran, megtörténhet.
És ha ez megtörténik, és én nem előre és program azt,
programom tehet ki tudja, mi.
Freeze, lefagy, újraindítás, bármi.
Valami várt megtörténhet.
>> Szóval, mit fogok csinálni most, ezentúl tényleg,
előtt áll, amit valaha is vakon használja a változó, mint s hogy
hozzá van rendelve a visszatérési értéke más funkció, mint a getstring,
Megyek győződjön meg róla, hogy az érték érvényes.
Szóval tudom, csak olvastam CS50 dokumentációjában getstring,
amely végül fogjuk mutatni vagy, hogy getstring visszaadja a speciális szimbólum
NULL úgynevezett N-U-L-L minden sapkák, ha valami balul sül el.
>> Tehát általában, visszatér a húr.
De egyébként, ha visszatér az N-U-L-L-- majd végül, hogy mi az igazán
means-- az csak azt jelenti, valami rossz történt.
Most ez azt jelenti, hogy ugyanúgy, mint a Scratch, Tudom ellenőrizni a feltétel itt C,
ha s nem egyenlő NULL.
Tehát, ha nem láttam ilyet, ez csak azt jelenti, nem egyenlő.
>> Szóval ez az ellentéte egyenlő az egyenlők, ami, emlékszem,
eltér egyetlen értéke, ami a feladat.
Tehát, ha s nem egyenlő NULL, csak akkor nem
Azt akarom, hogy végre ezeket a sorokat a kód.
Más szóval, mielőtt merülés vakon
és indítsa iterációjával át s, és kezeli azt
mintha ez egy sorozata karakter, megyek először ellenőrizze,
várj egy percet, ez s egyáltalán nem megegyezik a különleges érték NULL?
>> Mert ha igen, rossz dolgok történnek.
És most tegyük fel, hogy a rossz dolgok történik azt jelenti, hogy a program összeomlik,
és nem feltétlenül vissza.
Szóval őszintén szólva, úgy néz ki, csúnyább.
ez a fajta zavaró most pillantott.
De ez válik ismerős nemsokára.
>> De fogom javasolni most egy másik javulást.
Ez már haladás a korrektség.
Az a program már több helyes, mert Abban a ritka esetben, hogy nincs elég memória
létezik, én is kezelni, és én csak nem csinál semmit.
Én legalábbis nem fog összeomlani.
>> De tegyük a végleges változat itt.
És nevű fájl string2.c.
Megyek be az ugyanazt a kódot egy pillanatra,
és fogom kiemelni ezt vonal, 11, itt, csak egy pillanatra.
Most a valóság az, hogy okos fordítók mint csenget is erősít ez nekünk
a színfalak mögött Anélkül, hogy valaha is tudta.
De nézzük gondol erről alapvetően, mint egy problémás design.
>> Ez a vonal a kód, természetesen, mondván inicializálni néhány változó i 0-ra.
Ez elég egyértelmű.
És mi megint ez állítás, itt, én ++ csinálsz?
Láttuk korábban, de nem nagyon beszélnek róla.
>> Közönség: növelésének i.
>> David J. MALAN: növelésének i.
Így minden iterációs keresztül Ez a hurok, minden ciklusban,
te megnő i egy.
Így egyre nagyobb és nagyobb, és nagyobb, míg a hurok megszűnik.
Hogyan felmondani?
Hát itt van ez a középső állapot amit korábban használt.
Láttad és walkthroughs a P halmaz.
>> De mi ez a mondás?
Tegye a következőket hurkot úgy Amíg én kevesebb, mint amit?
Közönség: A hossza a húr.
David J. MALAN: The hosszát a húr.
Így fordítja elég tisztán angol ebben az értelemben.
Most a probléma az, hogy minden alkalommal, amikor halad végig ezt hurok elméletben,
Azt kérdeztem ezt a kérdést.
Én vagyok kevesebb, mint a húr hossza s?
>> Most én változik minden iterációs?
Ez az.
Mivel a ++.
Tehát minden iterációs i egyre nagyobb.
De s egyre nagyobb, vagy kisebb, vagy megváltoztatása egyáltalán?
Nr.
Így a tervezés, az egyik tengely amely mentén igyekszünk értékelni kód
az osztályban, ez olyan fajta hülye.
>> Mint a szó szoros értelmében, minden iterációs
Ennek hurok kéri a ugyanazt a rohadt kérdés megint,
és újra, és újra, és a szó szoros értelmében ez soha nem fog megváltozni.
Legalábbis ha én nem érnek s és próbál változtatni a tartalmát s.
Így tudok egy kicsit jobban, mint ez.
>> És mit fogok tenni, nem Kijelentem, csak egy i változó,
de a második változó én önkényesen, de hagyományos, hívják n.
Rendeljen n egyenlő a húr hossza s.
Itt pedig, megyek nem egy okos kis optimalizálás, így
beszélni, hogy a végén a nap Nem helyes, vagy nem kevésbé helyes
mint korábban.
De ez egy jobb design.
Az a tény, hogy én vagyok a kevesebb idő, kevesebb CPU ciklust, így
beszélni, hogy válaszoljon az azonos kérdés, de csak egyszer.
>> Minden olyan kérdésre, hogy az általános javításának elve,
mondjuk, a program hatékonysága?
Igen?
Közönség: Miért használja a [nem hallható]?
David J. MALAN: Jó kérdés.
Akkor miért tesszük a ++ a végén i eleje helyett az i?
Ebben az esetben azt nem funkcionális hatás.
És általában, én inkább használja a postfix operátor
úgy, hogy ez egy kicsit világosabb, mint hogy a művelet történik.
>> Azok számára ismeretlen, van egy másik nyilatkozatok amellyel meg tudná csinálni ++ i.
Ezek funkcionálisan Ebben az esetben azzal egyenértékű
mert semmi más körül, hogy a növelés.
De akkor jön ki esetekben és sornyi kódot
amelyben ez a különbség.
Tehát általában, mi nem még beszélni ezt.
Mert őszintén szólva, ez teszi a kód szexisebb, és egyfajta esőköpeny,
és kevesebb karaktert.
De a valóság az, hogy ez sokkal nehezebb, Azt hiszem, még számomra is, hogy lezárja az agyam
körül néha, a műveletek sorrendjét.
Tehát, mint egy félre, ha nagyon nem tetszik ez,
annak ellenére, hogy ez a fajta szexi néz, akkor is csinálni i + = 1,
amely a csúnyább változata Ugyanez a gondolat a Postfix növelés.
>> Én mondom ezt, és kell gúnyolódni meg,
de akkor jön, hogy kódot valami szép nemsokára.
>> [Nevetés]
>> David J. MALAN: Igaz?
Igen.
Kérdés a közepén.
>> Közönség: Azt kell mondani, int n?
David J. MALAN: Ugye Nem kell mondani, int n.
, Mert már azt mondta int, nem kell azt mondani, hogy újra.
A fogást, hogy n kell azonos adattípust, mint én.
Szóval ez csak a kényelem kedvéért itt.
Igen.
>> Közönség: Tud megy át a print karakter s konzol én megint?
David J. MALAN: Abszolút.
Szóval% c, emlékszem az utolsó idő, csak egy helyfoglaló.
Ez azt jelenti, hogy egy char itt.
backslash n, persze, csak eszköz, hogy egy sortörés itt.
Úgy, hogy csak hagy, most, ez a darab az új szintaxis.
És ez szó szerint azt mondja, fogd a húr hívott s és menj a
i-edik karaktert, hogy úgy mondjam.
>> És ne mondja edik karaktert mert minden egyes iterációs erre a ciklusra
olyan, mintha mi nyomtat ki, az első s konzol 0,
mint a programozó lehet mondani.
Akkor s konzol 1, akkor s konzol 2, majd 3, majd 4.
De természetesen ez egy változó, úgyhogy csak kifejezni azt i.
>> Key, bár az, hogy észre, különösen, ha már nem
már acclimating erre a világra programozás, ahol minden
Úgy tűnik, hogy számít a nulla, Gotta indul számolás nulláról most.
Mivel a vonósok, az első karakter, a Z Zamyla nem jobb vagy rosszabb
fog élni helyre nullát.
>> Rendben, hadd hozza minket vissza, hogy Zamyla
és nézd meg, mi folyik valójában az a motorháztető alatt.
Szóval itt van ez a fogalom típusú öntvény.
Lehet, hogy tényleg játszott ezzel már,
Lehet, hogy a hacker kiadása P az egyiket.
De típus öntés csak utal az képesség C és néhány más nyelven
átalakítani egy adattípust a másikra.
>> Most, hogy lehet, hogy látjuk, hogy ez szép egyenesen?
Tehát ez, emlékszem, ez a kezdet az angol ábécé.
És a kontextus, emlékszem, a mint egy hete nem ASCII.
Az American Standard Code Információs váltásnál.
Ami csak egy nagyon hosszú út mondván leképezés betűk
a számok, és a számok a betűk.
>> Tehát A-tól M itt, pont pont pont, vonal fel, emlékszem,
a decimális 65-ig.
És mi nem beszélünk erről kifejezetten,
de biztosan van hasonló számok kisbetűk.
És valóban, vannak.
A világ úgy döntött, néhány évvel ezelőtt, hogy kevés a, kisbetű a,
lesz 97.
És a kis b megy hogy 98, és így tovább.
>> És bármely más gomb a billentyűzet, ott van
lesz egy hasonló mintát bit.
Vagy azzal egyenértékű, tizedes.
Tehát a kérdés kéznél, tehát az, hogy hogyan tudjuk
valóban látni ezt a motorháztető alatt?
Szóval megyek át a gedit újra.
És ahelyett, hogy típus ez a semmiből,
Én megyek előre, és Csak nyissa fel valamit
a mai kód nevű ASCII nulla.
>> És ASCII nulla néz ki.
Szóval betakar elménket körül ezt.
Tehát az első, amit nyilatkozott A kód, ami szép és jó.
Mert ez a szó szoros értelmében mondani, mire számíthat,
megjelenik egy leképezést a nagybetűket.
Most már nem igazán tudom, mit jelent ez, úgyhogy következtethetünk.
>> Angolul, talán némileg techie angol,
mit vonal 18 jelenik meg hogy csinál nekünk?
Csak a 18. sor.
Mi az indukáló?
Mi a helyzet, hogy kick off itt?
>> Közönség: A hurok.
>> David J. MALAN: A hurok.
És hányszor van hogy fog iterálására?
KÖZÖNSÉG: [közbeiktatásával VOICES] hatszor.
David J. MALAN: Nem hatszor.
Közönség: 26 alkalommal.
David J. MALAN: 26 alkalommal.
Ja, bocs.
26 alkalommal.
Miért?
Nos, ez egy kicsit furcsa, de Elkezdtem számolni 65.
Ami furcsa, de nem rossz.
Ez nem rossz egy mondani.
És csinálok, hogy csak a mert ehhez a példához,
Én vagyok a fajta felkészülés hogy a tőke A 65.
Most ez nem a legelegánsabb módja ennek az, hogy milyen kemény kód
ezoterikus értékek senki valaha várható emlékezni.
>> De most, észre, hogy én vagyok ezt egészen 65 plusz 26.
Mert nyilvánvalóan nem is akarok hogy nem a számtani a fejemben.
Úgyhogy hagyja, hogy a fordító csinálni.
De aztán minden egyes hurok, mindegyik ismétlésnél A hurok, én növelés i.
>> Tehát most ez úgy néz ki, egy kicsit rejtélyes.
De meg kell, hogy az alapvető épület blokkok amely megérteni.
% C csak helyőrzője a karakter.
% I helyőrzője egy int.
És kiderül, hogy ezzel a új szintaxis, ez zárójeles, így
beszélni, így egy adattípust belül a zárójelben
Tudom kényszeríteni a fordító kezelésére Én nem egész szám, hanem a kar.
>> Ezáltal megmutatta a karakter megegyezik az adott számot.
Most itt ez a kód nagyjából azonos.
Én csak azt akartam, hogy szuper világos az a tény,
hogy kezdek 97, amely kisbetűs a.
Akár a 26 további leveleket.
És én doing-- újra, casting i, hogy úgy mondjam.
Vagy típusú öntés i, hogy úgy mondjam.
>> Egy int, hogy a kar.
Tehát a végeredmény lesz, őszintén szólva, információ már tudjuk.
Fogok tenni ASCII 0 dot-- nem pont c.
Értesítést, akkor valószínűleg készült, hogy hiba, mint én csináltam véletlenül.
Készíts ascii-0-ra.
Most fogok csinálni ./ascii-0-ra.
Én nagyítás, és sajnos ez meg fog lépjünk ki a képernyőn.
De azt látjuk, egy egész táblázatot, ahol a térképek 97, b térképek 98,
és ha felfelé tovább A természetesen térképek 65.
Tehát ez csak azt jelenti, hogy mi az, amit prédikált,
van ez az egyenértékűség, a valójában az a valóságban.
Tehát egy gyors módosítása ezt.
Hadd nyitni ASCII-1.c.
És vegyük észre az okos, fajta a tisztázása ezt.
Ez ASCII 1.c, és észre ezt az őrült dolog.
>> És ez tényleg eljut a szív A mi számítógépek csinálnak.
Annak ellenére, hogy mi emberek azt nem számít szempontjából letters--
Nem indul gondolkodás, minden rendben a majd b,
és használja ezeket számolni fizikai tárgyak.
Akkor biztosan mondani, hogy én szeretnék inicializálása néhány változó nevű C--
de tudtam neveztem ezt bármit így c inicializálja a tőke A.
>> Mert a nap végén, a számítógép Nem érdekel, mit tárolása,
csak érdekel, hogy hogyan szeretné bemutatni ezt az információt.
Hogyan szeretné, hogy a számítógép értelmezni, hogy a minta a bitek?
Szóval ez nem olyasmi, amit általában azt javasoljuk, csinál.
Ez tényleg csak egy példa, hogy közvetíteni, hogy akkor teljesen
inicializálni egy egész a kar.
Mert alatta motorháztető egy char, persze,
csak egy szám 0 és 255.
>> Így biztosan tedd belsejében egy int.
És mi ezt is azt mutatja, hogy mi
tudja alakítani egy írja a másik, itt,
végül nyomtatás ugyanezt.
És valóban, ez azt rögzíti online-- volt a célja, hogy ezt kell mondanom, megint itt.
Hadd tisztítsák ezt fel az interneten, és mi lásd az online áttekintése, szükség szerint,
mi volt a célja is.
>> OK.
Tehát utolsó példa már magában A és a B, és aztán
a dolgokat egy kicsit.
Tehát a és a b és a c rejt a kapitalizáció
és az ekvivalencia cikkére, nézzük nézd meg ezt a példát, itt.
Egy másik példa kód.
Majd nyissa meg az egyik, hogy már, így
nem kell beírni minden ki a semmiből.
>> És észre előre mi ha több fejléc
fájlokat, amelyek között az új barátunk, string.h.
Most ez úgy néz ki, az első pillantás, egy kicsit rejtélyes.
De nézzük, ha nincs oka át, mi folyik itt.
Először kap egy string a felhasználó, és tettem, hogy a húr a változó
s az úgynevezett.
Másolás Beillesztés előtt.
A 22. sor, én vagyok látszólag csinál pontosan mit
Én egy perce, én iterációjával át a karakter s.
>> És az új trükköket itt használ húr hossza, a kisebb optimalizálás
tárolására a húr hossza n, inkább, mint amelyben strlen újra,
és újra, és újra.
És csak ellenőrzi, hogy i kisebb, mint n.
Most itt, a dolgok egy kicsit érdekes.
De ez csak egy alkalmazás ugyanennek az új ötlet.
Mi az angol nem s konzol képviselek?
>> Közönség: Counting minden karakter [nem hallható].
>> David J. MALAN: Counting minden karakter.
És még több tömören, s konzol képviselek mi?
Mit mondana.
Ne tegye meg a helyszínen itt.
>> Közönség: Nos--
David J. MALAN: Tehát, ha a szó ez-- ha a húr Zamyla, ami starts--
Közönség: --you foglalkozik a karakterek separately--
David J. MALAN: Jó.
Pontosan.
A szögletes zárójel jelölés segítségével eléréséhez minden egyes karakter külön,
így s konzol 0 lesz a első karaktere.
s konzol 1 lesz a második, és így tovább.
Tehát a kérdés, amit kérek, itt, ebben az állapotban, az mi?
Az i-edik karaktere s nagyobb vagy egyenlő, mint kisbetűs a?
És mit jelent ez, itt, A dupla jellel is jelölhetünk?
KÖZÖNSÉG (együtt): És.
David J. MALAN És.
Csak egyenértékűek az ezen.
És nem egy kulcsszót C, akkor használat, bosszantóan, jel jel.
És ez fordítva, arra kéri a S i-edik karaktere kisebb vagy egyenlő
a kisbetűs z?
És ismét itt, ahol megértése a mögöttes
végrehajtása számítógép van értelme.
Figyeljük meg, hogy, bár én a pont pont pont ott,
úgy néz ki, mint egy a z kisbetűkkel vannak minden összefüggő értékek fel 97-ig.
>> És ugyanazzal a nagybetűs kezdve 65.
Tehát az elvihető, akkor, az, hogy az angol,
hogyan írnád le milyen vonal 24 csinál?
Igen?
>> Közönség: 24 ez ellenőrzi, hogy hogy az egyes karakter egy kisbetűs.
David J. MALAN: Ez ellenőrzi, hogy minden karakter egy kisbetű.
Így még érthetőbb legyen, a i-edik karaktere s kisbetűs?
Ennyi vagyunk kifejező itt logikusan,
egy kicsit rejtélyesen, de végül szép egyenesen.
Az S-edik karaktere kisbetű?
>> Ha igen, és itt, ahol a dolgok egy kicsit elme hajlító
egy pillanatra, ha igen, megy előre, és nyomtassa ki a karaktert.
Tehát ez csak egy helyfoglaló, de milyen karakter?
Miért csinálom s konzol i mínusz ez a kifejezés itt?
>> Jól észre a minta itt.
A tényleges számok nem számít annyira.
De figyeljük meg, hogy a 97. milyen messze van a 65?
>> Közönség: 32.
>> David J. MALAN: 32.
Milyen messze van a 98 66?
>> Közönség: 32.
>> David J. MALAN: kis c a nagy C?
32..
Szóval van 32 komló egyik levél a másikba.
Szóval őszintén, tudtam egyszerűsíteni ezt az.
De akkor én vagyok ilyen kemény kódolás ez az alacsony szint a megértés
hogy nincs olvasó valaha fogja megérteni.
Így fogok általánosítani, mint én tudni, hogy a kisbetűk nagyobbak.
Tudom, hogy a nagybetűvel kisebb értékeket, ironikusan.
>> De ez gyakorlatilag egyenértékű mondván, kivonni 32-s konzol i.
Tehát ezek az összefüggésben betű, ha a levél
előfordul, hogy egy, a kisbetűs a, és én kivonás 32,
milyen hatása van, amelyek, Matematikailag a kisbetűs a?
Közönség: Capitalizes--
David J. MALAN: kihasználja azt.
És valóban, ez az, amiért a program neve tőkét nulla.
Ez a program sem épít a levél,
ellenőrzése után, ha ez valóban kisbetű.
Ellenkező esetben, a 30. sor, mit tegyek, ha ez nem egy kisbetű, hogy én vagyok
néztem egy bizonyos iteráció a hurok.
Csak nyomtassa ki.
>> Így nem változik a cucc ez nem is kisbetűs.
Korlátozza magát a kicsit egy a kis részt.
Most ez a meglehetősen misztikus.
De a végén a nap, ez a az, hogy hogyan, egyszer régen,
kellett végrehajtani a dolgokat.
Ha ehelyett nyitott tőkét egy, oh hála istennek.
Van egy funkció hívott, hogy a felső, ami
mindent megteszünk csináltál egy viszonylag alacsony.
>> Most a felső érdekes mert bejelentett egy fájlt,
és akkor csak azt tudják ezt ellenőrzi a dokumentációt,
vagy, hogy azt mondta, mondjuk az osztályban, ahol létezik, egy nevű fájlt ctype.h.
Tehát ez egy új barátunk.
És a felső pontosan amit a neve is sugallja.
>> Akkor át, amikor egy érv között ezeket zárójelben néhány karakter.
Megyek át az i-edik karaktert S a mi szép új jelölés
bevonásával szögletes zárójelben.
És akkor gondolom, mi a visszatérés érték felső látszólag megy
lenni?
A nagybetű.
>> Tehát, ha én át kisbetűvel a, Remélhetőleg a meghatározása, hogy a felső,
ez fog visszatérni egy nagybetűs A. Ellenkező esetben
ha ez nem egy kisbetű az első helyen, csak nyomtassa ki.
És valóban, észre második barátom.
Nem csak a felső van, de alacsonyabb, ami
tulajdonképpen megválaszolja a kérdést nekem.
>> Most aki írta ezeket a dolgokat, 10s évvel ezelőtt, tudod mit?
Megvalósított felső és csökkenti a kód, mint ez.
De ismétlem, összhangban ez a gondolat az absztrakció el,
fajta, alacsonyabb szintű végrehajtás részleteit.
És állva a vállán az emberek , akik előttünk jártak, a funkciók
mint a felső és az alsó, ami csodálatosan elég szépen
elemzi azt, amit csinálnak, az csodálatos paradigma, hogy fogadjanak el.
>> Most kiderül, hogy ha elolvastam a man oldalt, mondjuk, a felső,
Tanulok valami mást.
Tehát az ember TOUPPER.
Ez egy kicsit nyomasztó.
De észre, itt van, hogy említést a header fájlt kell használnom.
Mellesleg, mivel ez félrevezető, a funkció
használ ints helyett karakter okokból hibaellenőrzés.
De majd talán jön vissza, hogy a jövőben.
>> De észre, itt, a felső megtértek a C betű a nagybetűs, ha lehetséges.
Szóval ez elég egyértelmű.
És most nézzük egy kicsit konkrétabb.
Nézzük meg a részét a man oldal alatt a visszatérési érték.
A visszaadott érték az az átalakított levél.
Vagy c, ha az átalakítás nem volt lehetséges,
ahol c az eredeti bemenet.
Ami tudom, hogy innen, az érvelés, hogy a felső.
>> Tehát mi az elvihető ez?
A visszaadott érték az Az átalakított levél,
vagy c, az eredeti levél, ha az átalakítás nem volt lehetséges.
Mi javulás ezért hogy az a kód a design?
Igen?
>> Közönség: eltávolíthatja a mást.
David J. MALAN: Nem tudok távolítsa el a más állítás,
és nem csak a más nyilatkozatot.
>> Közönség: eltávolíthatja [nem hallható].
>> David J. MALAN: Nem tudok távolítsa el az egész villa
Az út, a ha más teljesen.
Tehát valóban, hadd nyissa a végleges változatát,
kihasználni-2, és vegyük észre, hogy milyen, ha akkor, szexi, a kód most kezd,
az, hogy én már csökkent néhány hét, vagy úgy vonalakat, hogy csak négy,
a funkcionalitás, hogy tervezett egyszerűen hívja a felső,
halad s konzol i, és a nyomtatás ki, és a helykitöltő% c,
az adott karaktert.
>> Most vitathatóan, van egy hiba, vagy legalábbis a kockázatát, hogy a hiba,
ebben a programban.
Tehát csak, hogy jöjjön vissza egy korábbi elvihető,
Mit kell tennem valószínűleg csinálni ezt a programot, hogy ez erőteljesebb,
úgy, hogy ez semmilyen módon nem tud lezuhan, még ritkán?
Közönség: Győződjön meg róla, hogy nem NULL.
David J. MALAN: Győződjön meg róla, hogy nem NULL.
Szóval tényleg, hogy ez a szuper megfelelő, tennem kell valamit, mint,
ha s nem NULL, akkor megy előre, és végre
ezeket a sorokat a kód, amely Tudok majd francia, mint az,
és aztán az én közel merevítő.
Tehát jó összekapcsolása a két fogalom.
Igen?
Közönség: Lehet használni a do while ciklus helyett?
David J. MALAN: sikerült Én egy do while ciklus?
Közönség: --you szeretnénk, hogy győződjön meg arról, hogy valójában [nem hallható].
David J. MALAN: sikerült használja a do közben?
A rövid válasz, nem.
Mert te arról, hogy be egy másik sarok eset.
Ha a string nulla hosszúságú.
Ha például, csak hit Adja meg, anélkül, hogy valaha gépelés Zamyla.
Fogom kézzel vissza a tényleges húr, ahogy majd végül látni,
hogy nulla karaktereket.
Ez még mindig egy sor, ez csak szuper rövid.
De ha egy do közben, fogsz vakon
megpróbál tenni valamit a hoz a húr,
és semmi sem lesz ott.
>> Közönség: Hát, ha nem do [nem hallható] miközben S--
David J. MALAN: Ó, én látni, folyamatosan kapok egy húr a felhasználó.
Tehát rövid válasz, akkor lehet, és folyamatosan zaklat
őket, hogy kapsz egy húr, ami rövid ahhoz, hogy elférjen a memóriában.
Abszolút.
Én csak úgy döntött, hogy nem.
Ha nem adja ide a húr I akar, én kilépek, adok fel.
De teljesen, erre a célra, akkor feltétlenül csinálni.
>> Így a könyvtár header fájlok mi most ismerik ezek itt.
Standard I / O, CS50.h, string.h, ctype.h, és vannak, sőt, mások.
Néhányan közületek felfedezték a matematikai könyvtár math.h.
De hadd mutassam be, most, hogy Ez a forrás az CS50 személyzet, Davin,
és Rob és Gabe különös állítottunk össze.
Hogy hamarosan hivatkozásra a tanfolyam honlapján.
Úgy hívják CS50 hivatkozás.
>> Amely csak, hogy egy gyors íze is, a következőképpen működik.
Hadd menjen reference.cs50.net.
Látni fogod a bal side elsöprő lista
funkciók, hogy jöjjön c.
De ha érdekel, ebben a pillanatban, valami hasonló strlen,
Azt írja, hogy ott.
Ez szűri le a listából hogy csak mi érdekel.
Megyek kattintson rá.
És most a bal oldalon, látni fogod, mi reméljük
egy egyszerűbb, az emberi barátságos magyarázata, hogy
ez a funkció.
>> Visszaadja a string hossza.
Itt egy szinopszist, itt van, hogyan használja szempontjából a header file,
és tekintve, hogy mi a funkciója úgy néz ki, mint tekintve érveket.
És akkor itt, visszatér a karakterlánc hosszát.
De azoknak, kényelmesebb, akkor valóban kattintva több kényelmes,
és a tartalmát ezen oldal, most meg fog változni
hogy az alapértelmezett értékek milyen kap használatával a man oldalt.
>> Más szóval, CS50 hivatkozás egyszerűsítés
A man oldalak a személyzet, a diákok számára.
Különösen a kevésbé kényelmes és a kettő között, így
Nem kell, hogy megpróbálja betakar az elme körül, őszintén szólva,
néhány meglehetősen rejtélyes szintaxis és dokumentáció valamikor.
>> Így tartsa szem előtt, hogy a napokban.
Tehát itt ismét egy Zamyla.
Nézzük most kérdezni, hogy ez egy kicsit több ember számára hozzáférhető.
Köszönet Chang, aki már nyomtatás több elefánt
nonstop az elmúlt pár napban.
Van egy lehetőség, hogy legalább egyikük el.
Ha tudnánk, hogy csak egy önkéntes hogy jöjjön fel, hogy vonja le a képernyőn.
És itt?
>> Gyere fel.
Mi a neve?
ALEX: Alex.
David J. MALAN: Alex.
Rendben.
Alex, gyere fel.
Azon vagyunk, hogy a a képernyőn kézírás itt.
Rendben, örülök, hogy találkoztunk.
>> ALEX: Szép találkoztunk.
>> David J. MALAN: Rendben.
Szóval, szuper egyszerű feladat.
Bár nem nagy a kap egy elefánt ma.
Ön szerepét játssza getstring.
És én fogom csak mondani a szöveg, hogy már ütött.
És tegyük fel, hogy te, getstring, hívták.
És az ember, mint én, már beírt Zamyla, Z-A-M-Y-L-A.
Csak megy előre, és írja Zamyla a képernyőn, mintha ütött meg
és tárolni valahol a memóriában.
>> Teret hagyva, mi lesz több egyéb szavaim nem baj, folytasd.
>> [Nevetés]
>> Tehát Zamyla, kiváló.
Tehát most, tegyük fel, hogy te, getstring, nevezzük újra.
És ezért, én az Ön számára, a billentyűzet, a másik nevet, Belinda.
Rendben.
És most a legközelebb getstring van hívott, én írja valami hasonló Gabe,
G-A-B-E. Te tényleg figyelembe a szív véletlen hozzáférésű memória.
Amely a rajz minden teljesen véletlenszerűen.
OK.
>> [Nevetés]
ALEX: Sajnos a kézírás rossz.
David J. MALAN: Nem, semmi gond.
És mi van Rob, R-O-B. OK.
Jó.
Szóval nem számítottak akkor ilyen feküdt a dolgokat ezen a módon.
De lehet, hogy ezt a munkát.
Szóval hogyan megy a szóló, ezeket a karakterek a memóriában?
Más szóval, ha arra gondolunk, ez négyszögletes fekete képernyő
mint ami a számítógép RAM, vagy a memória.
>> És emlékeztetnek arra, hogy a RAM csak egy csomó bájt,
és bájtok egy csomó bit.
És bitek valahogy végre, általában
valamilyen formában villamos hardver.
Szóval ez a fajta a rétegződés beszéltünk
és most már magától értetődőnek.
Hogy megy a döntés, hogy hova írjon
Rob versus Gabe versus Belinda versus Zamyla?
>> ALEX: Én csak tettem a elrendelheti, hogy elmondtad nekem.
>> David J. MALAN: És ez igaz.
De mi az irányadó, ahol fel Belinda neve és Gabe neve?
>> ALEX: Semmi?
David J. MALAN: [nevet] Annak érdekében, hogy működik, az rendben van.
Így számítógépek kis rendezettebb, mint ezt.
És amikor implement-- ott csak egy moment-- amikor valójában
végre valami hasonló getString egy számítógép,
Zamyla lehet lefektetett nagyjából mint te meg a képernyőn, ott.
>> És mi a legfontosabb, hogy észre itt, amit Alex tett,
van egyfajta demarkációs egymás között ezeket a szavakat, nem igaz?
Nem te írtad Z-A-Y-M-L-A-B-E-L-I-N-D-G-A-A-B--
más szóval, van valami demarkációs tűnő,
fajta véletlenszerű távolság között a különböző szavak.
De ez jó, mert a mi emberek most már
elképzelni, hogy ezek négy különböző szálakat.
Ez nem csak egy sorozat A sok karaktert.
Így a számítógép, akkor eközben Lehet, hogy egy sor hasonló Zamyla,
tesz minden egyes ilyen levelek belsejében egy byte memória.
De ez a szám sokkal nagyobb, Természetesen, mint hat karakter.
>> Van egy csomó RAM.
És ezentúl, ez rács dobozok megy
képviseli, amit Alex csak tette itt a képernyőn.
És most, Alex, tudjuk ajánlani a kék vagy narancs elefánt Chang.
ALEX: Elviszem a kék elefánt.
David J. MALAN: A kék elefánt.
Így egy nagy tapsot, ha tudnánk, az Alex itt.
>> [Taps]
>> ALEX: Köszönöm.
David J. MALAN: Köszönöm.
Tehát az, hogy az elvihető, bár a minta fajta változott az idők során, itt
A fedélzeten ott volt ez lehatárolás a különböző húrok
Alex van számunkra.
Most számítógépek, őszintén szólva, lehet nem ugyanaz a dolog.
Tudtak a fajta puff húrok bárhol RAM.
Fel itt, mint itt, itt, itt.
>> Ők pontosan ezt.
De persze, ez talán nem a legjobb tervezés.
Nem igaz?
Ha folyamatosan azt kérdezi, hogy Alex kap nevet, valószínűleg ő lenne
tenni néhány ide, talán fel itt, ide, ide, végül
itt.
De egy kicsit több tervezést, természetesen, mi lehetne rögzíteni a dolgokat tisztábban.
És valóban, ez az, amit a számítógép nem.
>> De a fogást, hogy ha a következő szöveg kapok
után Zamyla valami mint a Belinda,
javasol, ahol talán írni a levél b között e rács?
Hova mész?
Jobbra az a, alatti Z, az alábbiakban egy?
Mi lenne az első ösztönök az?
Közönség: alatt a z.
David J. MALAN: Tehát alatt a z.
És ez nagyon egyszerű, ugye?
Ez olyan szép, hogy az, amit csinálunk a billentyűzeten, amikor elérünk az Enter,
vagy egy e-mailt, ha így a felsorolás a dolgok.
De a valóság az, hogy a számítógépek próbálja meg, hogy hatékonyabb,
és teletölteni legalább annyira adatok RAM lehet,
így, hogy ne pazaroljuk az bájt.
Annak érdekében, hogy ne pazarolják bármilyen képernyő ingatlan.
És a probléma azonban az, hogy ha szó szerint a levelet
b után, hogyan fogunk tudja, hol Zamyla nevét végződik
és a Belinda neve kezdődik?
Szóval az embereket csak javasolt, illetve, nyomja meg az Enter billentyűt, lényegében.
Tedd le az alábbiakban.
Vagy akár Alex tette, csak kezdjünk el írni a következő név alatt az előző,
és az alábbiakban, hogy az egyik, és a akkor alá, hogy az egyik.
Ez egy vizuális cue.
>> Számítógépek egy vizuális dákó, de ez egy kicsit tömörebb.
Ez az a funky jellegű.
Backslash 0, ami talán emlékeztet backslash n
és így tovább, most.
A különleges escape sor.
Backslash 0 a módja ami nyolc nulla bitet a sorban.
0000 0000.
>> Ahogy kifejezni, hogy nem megüt a szám nulla a billentyűzeten,
mert tény, hogy egy ASCII karakter.
Úgy néz ki, mint egy szám, de valójában egy decimális szám
amely képviseli a körkörös glyph, a kör alakú betűtípus.
Eközben backslash nulla azt jelenti, hogy a szó szoros értelmében
fel nyolc nulla bájt itt nekem.
>> Szóval ez kissé önkényes.
Mi volna használni bármilyen minta bit, de a világ
úgy döntött, néhány évvel ezelőtt, hogy képviselje
a végén egy húr a memóriában, csak hogy egy csomó nulla.
Mert képes észlelni, hogy a.
Most, hogy azt jelenti, hogy nincs levél a ábécé is képviselteti nullákkal.
>> De ez rendben van, akkor már láttam hogy mi a 65 akár 97 akár.
Nem kap sehol Zárja be az összes nullát.
Így Belinda a számítógép memóriájában valójában fog menni itt.
Már készült, hogy a sárga csak hogy hívják fel a figyelmet.
És értesítés is, ez teljesen önkényes.
Már készült, mint a rács.
Mint, RAM csak valami fizikai tárgy.
Ez nem feltétlenül sorok és oszlopok, önmagában.
Ez csak kapott egy csomó bájt megvalósított hardver valahogy.
De ha miután Belinda I begépelte Gabe nevét,
ő lesz a végén itt a memóriában, és ha én beírtam Daven nevét,
például, ő lesz a vége itt.
És én továbbra is levelet még több nevet.
>> Sajnos, ha megpróbálom levelet szuper hosszú nevet,
Lehet, hogy végül elfogy a memória.
Abban az esetben, getstring van fog visszatérni NULL, ahogy mondta.
De szerencsére, legalábbis ebben a vizuális itt, nem kaptunk ilyen messzire.
>> Most meg mi a jó, hogy ez a általános elképzelés úgy kezeli a dolgokat
mint a dobozok képviselője jellemző C
és sok nyelven, ismert tömb.
A tömb egy másik típusú adat.
Ez egy adatstruktúra, ha úgy tetszik.
Struktúra abban az értelemben, hogy valóban, olyan, akár egy doboz, legalább
a lelki szemei ​​előtt.
A tömb egy összefüggő sorrendje azonos adattípusok,
háttal a háttal.
>> Tehát egy sor, más szóval, egy sor karakter.
Egy sor karakter.
De kiderül, hogy lehet tömbök fürtök a dolgok.
Sőt, mi tud még számokat egy tömbben.
Tehát a formában, amelyben fogunk kezdeni
nyilvánította az adatok szerkezete ismert, mint egy tömb
is fog használni szögletes zárójelben.
De ezek a szögletes zárójelek fognak különböző jelentése ebben az összefüggésben.
>> És lássuk a következő.
Tegyük fel, hogy én megnyílt egy új fájlt itt.
És tudom menteni ezt ages.c.
És én menteni ezt a Saját mappa itt.
És most én megyek előre és kezdjen el írni valamit
mint többek között CS50.h, többek között stdio.h, int fő érvénytelen.
És akkor belseje itt szeretnék az első, hogy egy int hívott korban.
>> És én fogom használni, hogy, hogy egy int a felhasználó a saját korában.
De ez a program célja, hogy kell használni a több ember, bármilyen környezetben.
Van egy sor ember.
Mindegyikük rendelkezik, hogy írja be a életkor talán néhány, nem is tudom,
verseny, vagy esemény hogy már megérkezett.
Így a következő ember, én Kell még egy változót.
>> Mert ha csak nem kor lesz getInt, ez
fog cucc, vagy felülírja az előző személy életkorát.
Szóval ez nem jó.
Tehát az első gondolatom Lehet, hogy, ó, rendben,
ha azt akarjuk, hogy több ember ages-- Nevezzük ezt Age1,
int Kor2 kap int, int age3 lesz getInt.
És most én fogom használni néhány pszeudokódja kódot.
>> Valamit csinálni ezeket a számokat.
Elmegyünk egy másik nap, amit csinálunk ott, mert csak
törődik a pillanat körülbelül Age1, Kor2, age3.
Sajnos egyszer lefordítani ezt a programot
és tedd elé a tényleges felhasználók, mi az alapvetően rossz kialakítás
döntés úgy tűnik, hogy volna?
Igen?
KÖZÖNSÉG: [nem hallható]
David J. MALAN: Igen, Én még nem is próbáltam
hogy kitaláljuk, hogyan sok korosztály tudom tényleg érdekel?
Ha kevesebb, mint három ember itt, és ezért kevesebb, mint három korosztály,
Én még mindig vakon vár három.
Isten ments, négy emberek jelennek meg.
Az a program, csak nem is támogatja őket.
>> És ez hosszú történet rövid, nem egy jó szokás.
Nem igaz?
Én alapvetően másolás és beillesztése kód és csak a csípés
a változó neveket.
És, istenem, ha volt, nem három korosztály, de a 10, vagy 100, vagy akár 6500
egyetemisták, például.
Ez nem lesz különösen elegáns kód, vagy a fenntartható.
Fogsz kell átírni a program minden alkalommal
az emberek száma változik.
>> Tehát szerencsére, a mi jelenlegi ages.c fájl ma,
van egy okos megoldás.
Először fogok kölcsönkérni a konstrukció általunk használt néhány alkalommal,
ez nem while ciklus, annak érdekében, hogy a száma, akik a szobában.
Elmegyek, hogy zaklat a felhasználó, ismét és újra, amíg ő ad nekem
értéke n, hogy ez egy pozitív egész szám.
>> Tudtam volna használni, az utolsó Az idő, hogy pozitív int.
De nincs ilyen az igazi, így mentem előre
és újra megvalósítani ezt az elképzelést.
Most itt ez az új trükk.
A 27. sorban, mint a megjegyzések sorban 26. sugallja,
egy tömböt, amelyben tárolni mindenki korban.
>> Tehát, ha azt akarjuk, hogy, nem egy int, nem két ints, de egy csomó ints.
Pontosabban n egészek voltak n talán három, lehet, hogy a 100, lehet, hogy 1000.
A szintaxis, egészen egyszerűen az, hogy mondjuk, milyen adattípust akarsz?
Mit akarsz hívni hogy darab memória?
Mit akarsz hívni a rács úgy néz ki, mint ez képileg?
>> És zárójelben van, azt mondod, milyen nagy szeretné, hogy a tömb legyen.
És korábban, amikor azt mondtam a szintaxis egy kicsit más itt,
mi még mindig a szögletes zárójelek de amikor én nyilvánította egy tömb,
a belsejében a számát szögletes zárójelek eszközök
milyen nagy akarsz a tömb legyen.
>> Ezzel szemben, amikor használtuk s konzol i egy pillanattal ezelőtt, s egy húr,
valóban egy sor karakter, de ha éppen nem nyilvánító változó,
mivel ezzel a kulcsszó itt, te csak egyre
egy specifikus indexet, egy adott elem a tömbben.
Amint azt tudjuk, hogy a többiek ennek egyértelmű.
Ha új én először fog kinyomtatni mi a kora személy szám i.
Ahol én csak azt mondom ember első számú, személy a második, ember száma három.
>> És én csak ezzel számtani, hogy mint a normális emberek,
mi számít egy erre a programot, és nem nulla.
Akkor hívom getint, de tárolni A válasz a korban zárójelbe i.
Amely az i-edik kor a tömbben.
Tehát míg utoljára bántak ezeket a dobozokat a karakter a Zamyla nevét,
és mások.
Nos, ezeket a dobozokat képviselnek 32 bites, vagy négy bájt
ahol tudunk tárolni egy int, int, int.
Amelyek mindegyike, ismét, azonos adattípus.
>> Most valami buta, mint az idő múlásával, csak
igazolni írásban ezt a programot.
És akkor itt, megint léptetjük mint a tömb mondás egy év múlva,
személy számú akarat valami éves.
És kitalálni, hogy math-- Úgy értem, ez
nem túl bonyolult arithmetic-- Én csak hozzá egy koruknak.
Csak bizonyítani, ismét ez.
>> Mint ahogy én is index egy húr, s, akkor én is index egy sor korosztály,
mint az ott.
Szóval, ha lesz ez vesz minket?
Szóval majd meglátjuk, végül, a néhány dolgot a napokban.
Egy, egész idő alatt, amikor a írásban a saját programok
mint Mario, mohó, hitel.
Már beírja a nevét A program és az Enter.
És akkor kapok a felhasználó által megadott.
>> A getString, getInt, getLongLong, vagy hasonlók.
De kiderül, hogy a C támogatások úgynevezett parancssori
érveket, ami megy, hogy menjünk valóban kap a szó, hogy a beírt,
A villogó prompt, után a program nevét.
>> Így a napokban, akkor begépelni valamit, mint Caesar,
vagy ./caesar 13., ezt követően.
Meglátjuk, hogy hogy működik.
Mert valóban, a probléma meg két, vagyunk
fog bemutatni egy kis valami
emlékeztet Ralphie a kihívást korábbi térképészet.
A művészet a kódolási információ.
Ez az, sőt, nagyon emlékeztet, amit Ralphie tett.
>> Ez egy példa egy titkosítási algoritmus az úgynevezett ROT13, R-O-T 13.
Ami egyszerűen azt jelenti, forgassa a betűk az ábécé 13. helyen.
És ha ezt teszed, akkor most látni mi az, talán egy ismerős kifejezés.
De ahogy fogunk használni ez végül is általában.
>> A P meg két, a standard változat, akkor végre egy pár titkosírás,
egy úgynevezett Caesar, egy úgynevezett Vigenère.
Mindkettő forgási algoritmusok, hogy valahogy
viszont egy levél egy másik levelet.
És Caesar szuper egyszerű.
Hozzá az egyik, akkor adjunk hozzá 13 vagy néhány szám legfeljebb 26.
Vigenère nem, hogy a egy főre levél alapján.
Tehát Vigenère, mint látni fogod A spec, sokkal biztonságosabb.
>> De a nap végén mi leszel végrehajtása és a P meg a két,
az, hogy a legfontosabb, hogy használja a két A titkosítás és a visszafejtés.
Hivatkozva a folyamat fordult sima szöveg, néhány eredeti üzenetet,
a Cypher szöveg, amely valami titkosított.
Majd visszafejteni újra.
>> A hacker kiadás, közben, akkor lehet
feladata valami hasonló lélekben, ahol kapsz
egy fájlt, egy tipikus Linux, vagy Mac vagy Unix számítógép nevű Etsy
jelszót, amely tartalmaz egy egész csomó felhasználóneveket és jelszavakat.
És ezek a jelszavak az összes nem titkosított, vagy kivonatos,
hogy úgy mondjam, pontosabban ahogy látni fogod a spec.
>> És a hacker kiadás kihívást Ön vesz egy bemenet, mint ez,
és repedések a jelszót.
Ez azt jelenti, kitalálni, mi a emberi jelszó valójában volt.
Mert valóban, a jelszavak általában nem tárolják a tiszta,
és általában jelszavak kell nehéz kitalálni.
Ez gyakran nem ez a helyzet.
>> És amit gondoltam, hogy az arra, hogy egy pár percig
pillantást a különösen rossz választás jelszavak
Egy film lehet felidézni szeretettel.
És ha nem, akkor meg kell bérelni.
>> [Videolejátszás]
>> -Helmet, Te ördög, mi folyik itt?
Mit csinálsz a lányommal?
>> -Permit Meg, hogy bemutassam a ragyogó fiatal plasztikai sebész,
Doktor Phillip Schlotkin.
A legnagyobb orr munka embere egész világegyetem és Beverly Hills-ben.
>> -A Fenség.
>> -Nose Munkát?
Nem értem.
Ő már volt egy orr munkát.
Ez volt az édes 16 jelen van.
>> Nem, ez nem az, amire gondolsz.
Sokkal, sokkal rosszabb.
Ha nem adja meg a kombináció, hogy a levegő pajzs,
orvos Schlotkin ad a lánya vissza a régi orrát.
- [Nyelés] Nooooooooooooo.
Hol szerezted ezt?
>> Rendben.
Megmondom, én elmondom.
>> Nem, apa, nem.
Nem szabad.
>> -Te Jobb kedvesem.
Hiányozni fog az új orrát.
De én nem mondom el nekik a kombináció nem számít, mit.
>> -nagyon Is.
Orvos Schlotkin, nem a legrosszabb.
>> Az én öröm.
>> Nem!
Várj, várj.
Elmondom.
>> -Tudtam Ez a munka.
Rendben, add ide.
>> -A Kombináció egy.
>> -Egy.
-Két.
-Három.
-Négy.
Öt.
-Szóval A kombináció egy, kettő, három, négy, öt.
Ez a leghülyébb kombináció Amit valaha hallottam életemben.
Ez az a fajta dolog, amit egy idióta lenne a holmiját.
>> Köszönöm, felség.
>> [REMOTE megszakad]
>> Mit csináltál?
>> -I Kikapcsolta a falon.
>> Nem, te nem, akkor kikapcsolta az egész film.
>> -I Biztos megnyomta a megfelelő gombot.
>> Nos, tedd vissza!
Helyezze a film újra!
>> Igen, uram!
Igen, uram.
-Gyerünk, Arnold.
Gyere, Gretchen.
Természetesen tudod, hogy én kell számlázni neked ezt.
Nos?
Sikerült?
Hol van a király?
>> -Ez Dolgozott, uram, van kombináció.
Remek.
Most már tudjuk, hogy minden utolsó lehelete A friss levegő a bolygóról Druidia.
Mi ez a kombináció?
>> Egy, kettő, három, négy, öt.
>> Egy, kettő, három, négy, öt?
Igen.
-Ez Elképesztő.
Megvan az azonos kombináció a csomagom.
Készülj Spaceball 1 azonnali távozása.
>> Igen, uram.
>> -és Változtatni a kombináció a csomagom.
[Ajtózáró SOUND]
[Sitt AJTÓK Ütő HELMET]
-Ahh.
[END Videolejátszás]
David J. MALAN: Ez az a CS50, találkozunk jövő héten.
Narrátor: A És most, a Deep Gondolatok, az Daven Farnham.
>> Daven FARNHAM: kódolás C így sokkal nehezebb, mint Scratch.
printf, Scratch hazugság volt.
>> [Nevetés soundbite]