>> SPEAKER 1: Dobre.
Vitaj späť.
To je týždeň Dva CS50, a máme Doteraz boli pomocou funkcie, ale
z veľkej časti za samozrejmosť.
Použili sme printf, ktorá má vedľajší efekt tlače
veci na obrazovke.
Použili sme get-int, float dostať.
>> Ale čo keď naozaj chcete vytvoriť vlastné funkcie, ako sa niektorí
Možno ste už začala urobiť pre Problem Set One, aj keď
nie je nevyhnutne nutné?
Dobre, poďme ďalej, a znova, že Problém sa pýtal na užívateľa
ich meno a tlač niečo na obrazovke, ale skúste vytknúť niektoré
o konformity, ktoré sme vidieť v našom kóde tak ďaleko.
Takže mám na mysli nasledujúce.
>> Chystám sa ísť dopredu a vytvoriť nový program, stačí zavolať
to hello.c ako obvykle.
Chystám sa ísť dopredu a dať sám zahŕňajú štandardný IO.H v hornej časti.
Chystám sa tiež oddať preventívne CS50 knižnice tak, aby
Nechápem kričal na prekladač.
A teraz budem pokračovať a vyhlasujú, int, hlavné, za neplatné.
>> A potom tu je to miesto, kde chcem začať zadávať funkčnosť
niektoré ďalšie funkcie, ktoré ja sám som budem písať, ale to nie je
v súčasnej dobe neexistuje.
Predpokladajme napríklad, že som chcel napísať funkciu, ktorá mi umožňuje
vytlačiť ahoj, čiarku a potom nejaké užívateľské meno.
Namiesto toho, aby to printf Dobrý deň,% s, nebolo by pekné, keby
tam bolo len volané funkcie nie je printf, ale print jmeno?
>> Takže inými slovami, chcem byť schopný napísať program, ktorý robí len málo
niečo také.
Po prvé, ja som chcel povedať printf váš meno, čím vyzývajúci užívateľa k
daj mi jeho alebo jej meno, a potom som bude používať známe reťazec s na
deklarovať reťazec.
Daj mi premennú typu reťazec, hovoria to a obchod v tom, že
Výsledkom volanie sa reťazec.
Ale teraz v posledných týždňoch, musel by som trochu nudne urobil Dobrý deň,% s / n
>> A inými slovami, sme videli tento Príkladom banda časov, a to je
triviálne príklad, pretože tam je len jeden riadok kódu, takže to naozaj nie je
veľký problém udržať písať znova.
Ale predpokladám, že tento riadok kódu skutočne stali príťažou, a
nie je to jeden riadok kódu, ale je to 10 riadky kódu pred pár týždňami od teraz,
a vy ste len unavení kopírovanie a vkladanie alebo
prepisovanie rovnaký kód.
Nebolo by pekné miesto vykonávania printf ahoj,% s, a tak ďalej,
Nebolo by pekné, keby tam boli len volaná funkcia print jmeno, že
má argument -
inými slovami, že má vstup -
a potom bodkočiarka.
Takže funkcie, nebolo by to by pekné, keby to existovalo?
Potom by som nemusel obávať čo printf je, čo% s a všetky
Tieto komplikácie, ktoré sú nie je všetko tak zaujímavé.
Sú užitočné.
>> Takže print jmeno, bohužiaľ, nebol vymyslel nejaký 40 + rokmi.
Nikto si to napísať.
Ale to je krása mať programovací jazyk, rovnako ako v
Scratch môžete definovať vlastné bloky tak, v C a takmer akýkoľvek jazyk, môžete
definovať vlastné funkcie, môže môžete definovať svoje vlastné funkcie.
Takže aj keď sa dostaneme do hlavnej automaticky zadarmo, môžeme vyhlásiť,
naše vlastné funkcie.
>> Takže budem robiť nejaké miesto tu hore hore a budem deklarovať my
vlastné funkcie, ktorá bude vyzerať trochu divný, ale na prvý prídeme
späť k tomu onedlho.
Chystám sa povedať neplatné, a tým ukazuje táto funkcia
niečo, má vedľajšie účinky, ale nevráti mi niečo v
rovnakým spôsobom, ako sa int alebo dostať reťazec sama.
A budem k tejto funkcii názov tlačového mená a budem
určiť, že tento človek bude trvať reťazec, a ja budem volať, že
Názov reťazca.
Mohol by som hovoriť, čo chcem, ale ja chcem, aby moje kód byť self-dokumentovať.
Inými slovami, ak je niekto z vás mal tento súbor otvoriť a čítať, mohli by ste
druh odvodzovať z názvu, ktorý Vstup akú úlohu to má hrať.
>> A teraz ďalej, že idem otvoriť zložená zátvorka a uzavreté zložená zátvorka,
a tak zistíte Dodržal som rovnaký vzor na tratiach štyri až sedem ako
Sledoval som na dobrý týždeň naviac teraz medzi, povedzme, vedenie a deväť
14, ktorý skladať hlavné.
Inými slovami, tlačiť názov je ďalšie funkcie.
Teraz, kompilátor nebude poznať volať túto vec automaticky
pretože som doslova vymyslel, ale to bude vedieť ešte zavolať hlavný
automaticky, a potom samozrejme v linka 13, Volám svoju vlastnú funkciu.
A preto, že som vyhlásil, že funkcia sa na radový štvorvalec pred hlavnými,
to bude učiť kompilátor čo citujem, koniec citátu, "print jmeno"
znamená a čo by mala robiť.
Takže som trochu dávať to nový zvyk zablokovať v rámci, povedzme, Scratch.
>> Tak tu, môžem dať, že veľmi časté alebo opakujúce sa vzor kódu držím
písanie v triede, printf % S ahoj,% s / n ", -
Čo chcem, aby tu?
S?
Tak som chcel dať meno v tejto súvislosti.
Takže si všimnúť trochu dichotómia tu.
Pretože som vyhlásil svoju vlastnú funkciu a ja som trochu svojvoľne nazýva
vytlačí meno, a pretože som je uvedené v zátvorkách, že sa
funkcia má jeden argument, typ čo je reťazec - tak to je slovo,
alebo slovné spojenie, alebo niečo také - a Volám tento argument názov, ktorý
znamená iba premenná, ktoré je v priestor, aby som tak povedal, je názov.
>> S existuje iba medzi tým, čo dvaja Zložené zátvorky, samozrejme?
No naozaj, rovnako ako linky 10 cez 14, takže rovnako ako v pondelok nemožno použiť
S, ale to, čo môžem urobiť, je prejsť S do tlače názvu.
Vytlačiť meno len tak sa stane, že ju dám alias, synonymum, prezývka,
volať to meno, a teraz použitie v tomto riadku.
Takže teraz mi dovoľte zachrániť to, oddialiť.
>> Nechaj ma ísť ďalej a robiť ahoj.
Vyzerá to dobre.
Vari vypľuť žiadne chyby. . / Ahoj Enter.
Ako sa volám?
David.
A ahoj Dávid.
Takže nie je tak vzrušujúce, ale len, že teraz.
Teraz máte tú istú látku ako sme to urobili v nuly
aby naše vlastné funkcie.
>> Ale je tu trochu Gotcha.
Dajme tomu, že som si naozaj myslel, to až do konca a ja vlastne bez
naozaj premýšľať o tom písal že funkcie tu.
Pocit úplne rozumné.
V Scratch nie je pojem z miesta vo svojich skriptoch.
Dalo by sa dal jeden sem, jeden sem, jeden tu, a to by mohlo začať
vyzerať trochu chaotický, ak nemáte položte ju úhľadne, ale to nie je
na tom, kde fyzicky skripty sa na obrazovke.
Bohužiaľ v C - a to je na rozdiel od jazyky ako Java a Python
a ďalšie, ktoré by vás mohli oboznámiť s - bohužial C, aby sa
nezáleží, pretože hodinky to, čo je teraz stane.
>> Predvolené funkcia, ktorá sa deje na vykonanie je, samozrejme, hlavné.
Hlavné bude volať meno v tlači linka osem, ale bohužiaľ,
kompilátor nebude ani vedieť, že tlačový meno existuje, kým sa dostane do riadku 11,
čo je bohužiaľ bude príliš neskoro.
Takže poďme urobiť ahoj.
A teraz sakra, dve chyby generované.
Takže teraz mi dovoľte prejdite do veľmi Po prvé, ako sme mali vždy, a
Všimnite si, že je to na mňa reval, "Implicitná deklarácie funkcie
tlačiť meno. "
>> Takže sme videli, táto správa skôr, implicitné vyhlásenia funkcie.
Keď sme videli, že takéto chyby?
Keď som nezahŕňal knižnice.
Ak som zabudol cs50.h a ja by som si zareval na pre získanie reťazca, alebo si int.
Ale v tomto prípade, je táto funkcia tlače meno nie je v knižnici, nie?
Je to doslova v tomto súbore, takže čo je naozaj problém?
>> No bohužial C, to sa ti tak neuveriteľne doslova, že ak
chcete funkciu nazvanú tlače na meno existujú, buď musieť implementovať
ktoré fungujú na veľmi hornú časť kód tak, že je k dispozícii pre zníženie
funkcie, ale úprimne povedané, to sa stane nedbalý veľmi rýchlo.
Osobne som rád uvedenia prvej hlavnej pretože potom je úplne jasné, čo to
program sa na prvý pohľad.
A navyše sa môžete dostať do podivné rohu prípady, kedy, ak x chce volať
y, ale y nazvať x, stačí fyzicky nemôže skutočne dať jeden
nad sebou.
>> Ale ukazuje sa v C, môžeme vyriešiť veľmi jednoducho.
Chystám sa dať trochu priestoru tu, a ja som jednoducho ísť
preventívne, aj keď trochu redundantne, bude učiť
kompilátor, že existuje funkcia hovorí tlačový meno, to trvá reťazec,
a ja idem volať to meno bodkočiarku.
>> Tak to teraz v súlade štyri, ktoré sme ešte nevideli, je vyhlásenie
z mena funkcie tlače, ale je to len sľub, že táto funkcia bude
nakoniec byť definované, prípadne byť vykonávaná.
To teraz môžem odísť sám, pretože Teraz sa jedná o definície,
implementácie, niečo ako poslednú míľu vykonávanie tejto
niektoré funkcie.
Takže úprimne povedané, je to hlúposť, je to nepríjemné, ale toto je cesta C, a to
pretože vás doslovne a ako by počítač úprimne,
len robí presne to, čo si povedať, že sa robiť, a tak, že usporiadanie je dôležité.
>> Takže majte na pamäti, že a znovu začať Všimnite si opakovanie vzorov.
Kurzy sú, že áno, ak nemáte už začínajú stretnúť správy
ako je táto, na prvý pohľad sa zdá úplne záhadné, ale keď začnete
pozrieť sa na týchto kľúčových slov, ako "Implicitná vyhlásenie," zmienka o
Funkcie v tomto prípade - a úprimne povedané, je niekedy dokonca dostať trochu zelený
mrkva symbol, ktorý vám povie, kde problém asi je -
môžete začať pracovať si cestu cez Zatiaľ neviditeľné chybové správy.
Akékoľvek otázky týkajúce sa písania Vlastné funkcie týmto spôsobom?
>> Poďme urobiť niečo, čo je trochu viac presvedčivé.
Skôr než len robiť niečo, čo má vedľajší efekt tlače, nechaj ma ísť
dopredu a uložiť nový súbor, a budeme nazývajú positive.c, aj keď je to
Bude to trochu inak oproti minule.
A tentoraz chcem znovu zaviesť Poslednou dobou je positive.C príklad, ktorý
sila je užívateľ, aby mi kladné celé číslo.
Ale musel som použiť dostať int minule.
Nebolo by pekné, keby tam bol funkcia je volaná získať kladný int
že som mohol len zadať túto kus funkčnosti?
Takže rozdiel je stretneme realizovať získať pozitívny int, ale na rozdiel od
print jmeno ktorý mal vedľajší účinok - nevrátil sa pre mňa niečo ako
číslo alebo reťazec -
sa pozitívny int je, samozrejme, bude vrátiť sa, dúfajme, že pozitívne int.
>> Tak poďme na to.
Zahrnúť cs50.h zahŕňajú štandardný io.h.
Int main neplatné.
A teraz tu, budem pokračovať a povedzme int, hovoria n, sa rovná
získať kladný int.
A rovnako ako sa int už existuje pretože zamestnanci to napísal, ja idem
prevziať na chvíľu, že dostanete kladný int existuje, a teraz idem
ísť ďalej a povedať printf, vďaka za% i / n ", n
>> Takže teraz, keď som skompilovať tento program, čo sa bude diať v mojom termináli
okno v dolnej časti obrazovky?
Chystám sa pravdepodobne dostanete, že rovnaká chyba ako predtým.
Takže poďme skúsiť.
Urobiť pozitívne.
A opäť, implicitné vyhlásenie funkcie, získať pozitívny int.
Takže môžeme to vyriešiť v niekoľko spôsobov.
Budem držať to jednoduchý a len dať svoje vyhlásenie sem a dostať
pozitívny int.
Musím tzv podpis.
Podpis len odkazuje k estetike
prvý riadok programu.
Takže to, čo by mali dostať pozitívny int návrat?
>> Tak int.
Myslím ideálnom prípade by sa vrátiť niečo ako pozitívna int, ale
neexistuje.
Sme nevideli, že medzi našimi dátami typy, takže máme čo do činenia s
Skutočnosť, že máme veľmi málo dátové typy pre prácu s
Ale môžeme vrátiť int a len verím, že to bude pozitívny.
Bude to nazvať získať kladný int.
>> A teraz, ako o jeho argumenty?
Trvá žiadny vstup?
Znamená to potrebný žiadny vstup?
Takže to nemusí vedieť dopredu čokoľvek.
Získajte reťazec neobsahuje, dostať int nie je.
Printf robí - je potrebné mať niektoré Vstup prešiel do neho - a tlačiť názov
potreboval nejaký vstup, ale dostať int pozitívny nie je.
Takže budem explicitne povedať kompilátora neplatné.
Void je absencia čokoľvek iného.
Tak void znamená, sa nič vo vnútri z tých zátvoriek, bodkočiarku.
>> A teraz na dne môjho súboru - a znova, som len trochu análny
tu uvedení hlavné v hornej časti, ktorý je dobrá prax, pretože týmto spôsobom,
kedykoľvek vy alebo niekto iný otvorí súbor, na
Funkcia je tu.
Môžete sa potápať v jednom z námestí.
Takže teraz budem duplikovať to, získať kladný int neplatné, ale nie som
dopadne na bodkočiarku teraz.
Idem otvoriť zložené zátvorky, a teraz musím požičať
niektoré nápady od pondelka.
>> Tak, ako si spomínate, sme urobili niečo ako vykonajte nasledujúce pri
niečo, čo je pravda.
A čo som urobil?
Urobil som niečo ako dať mi kladné celé číslo,
trochu výzva.
Mohol by som použiť všetky slová, čo chcem.
A potom som použil čo?
Int n sa rovná dostať int, žiadne argumenty do nej.
>> A všimnite si rozdiel.
Keď voláte funkciu, pri použití funkcie, vy nie dať do prázdna.
Môžete robiť len to, že pri deklarovaní funkcie, výučba kompilátor, čo
by mal očakávať.
Takže nemusíte dať zrušiť tam sami.
>> A teraz, čo sa môj stav?
Tak, n sa nerovná pozitívny, ale to je len pseudo-kód.
Tak ako to mám vyjadriť čistejšie?
Tak menšie ako alebo rovná nule.
Takže znova, zistíte, čo môžete urobiť menšie alebo rovné.
Aj keď je to dva samostatné symboly, môžete tak urobiť na
klávesnica ako také.
>> Ale je tu ešte problém, že Posral som to minule taky.
Musím vyhlásiť -
presne.
Musím vyhlásiť n mimo zo slučky.
Takže musím dať n sem, a ja nie chcem znovu vyhlásiť ju tu
aby som si novú premennú.
Len chcem priradiť hodnotu tu.
>> A teraz som úplne hotoví.
Dovoľte mi, aby som sa pred seba a predstierať, že som urobil.
Urobiť pozitívne, a teraz je tu nová chyba.
Control dosiahne koniec non-void funkcie.
Takže nové chybové hlásenie, ale ak ste typ z srandista oddelene každý slovami,
pravdepodobne naznačuje, čo sa deje.
>> Ovládajte.
Riadenie spočíva iba v poriadku operácií v programe.
Počítač je pod kontrolou a sa niečo pokazilo.
Tak sa dostane na koniec non-void funkcie.
Aké funkcie je zrejme na mysli?
Aká je funkcia non-void?
Tak sa pozitívne int, a trochu mätúce, že dobre,
je to druh prázdnoty.
To má špecifikáciu neplatnosť jeho argumenty, ale jeho výstup bude
byť typu n
Takže slovo na ľavej strane je tzv návratový typ.
Slovo na vnútornej strane je tu nulové alebo viac argumentov
že funkcia má.
>> Takže to, čo musím urobiť?
Na tomto mieste v mojom kóde, riadok 21, kde bliká prompt teraz je, že som
mať kladný int vnútri premenné s názvom n
Ako môžem dať ho späť do Main?
Doslova.
Návrat n bodkočiarka.
>> Teda rovnako ako u Colton vrátil kus papier s odpoveďou na mňa pri páde
ten kus papiera, v malej čiernej krabice na stole, k tomu, že v
kód, môžete doslova len napísať, vráti n, a je to, ako by boli Colton
podal mi niečo fyzického späť.
V tomto prípade, čo sa deje, je dostať kladný int sa chystá odovzdať späť
čo je pravdepodobne pozitívny číslo pre koho?
Kde sa táto hodnota skončí?
, Ktorá končí v tejto premennej, n, a potom budeme pokračovať s líniou deväť.
>> Takže inými slovami, aby z operácií, tento program spustí
vykonávanie a kompilátor zistí, oh, chceš knižnicu?
Nechaj ma ísť chytiť, čo je vo vnútri, že.
Oh, chceš štandardné IO knižnice?
Nechaj ma ísť chytiť, čo je vo vnútri, že.
Čo kompilátor povedal sám keď to udrie linky štyri?
Oh, si sľúbil realizovať Funkcia sa nazýva pozitívne, ale
dostaneme späť na neskôr, niečo, čo v tomto smere.
>> Int main void len znamená, že tu je vnútornosti môjho programu.
Linka je len sedem zložená zátvorka.
Linka osem hovorí na ľavej strane, dať mi 32 bitov na celé číslo, hovoria n
Na pravej strane je to hovoriť si pozitívne int.
Teraz sa poďme pozastaviť ten príbeh, pretože teraz Nechcem ďalej môj kurzor nadol.
Môj Kurzor sa teraz chodia sem, pretože teraz získať kladný int spustí.
Int n je deklarovaná.
Vykonajte nasledujúce.
Printf mi dáva kladné celé číslo.
>> Získajte int od užívateľa, uložte ho na n, a možno to znova a znova.
Tento cyklus znamená, že tento kód môže spustiť hore a dole takhle zase
a znova, ale keď užívateľ konečne spolupracuje a dáva mi pozitívne
int, som narazila riadok 21, na ktorom mieste číslo sa odovzdá späť, a ktorý z nich
mal by som zdôrazniť teraz?
Nine.
Control, aby som tak povedal, vráti na linku deväť.
To je línia, ktorá je teraz na starosti.
>> Takže to, čo sa deje po tentoraz pod kapotou, ale
keď sme použili funkcie ako printf alebo dokonca dostať reťazec, ktorý niekto iný
napísal vám, kontrola bola odovzdaním off niekoho iného riadok kódu
o riadok po riadku.
Je to proste sme nemohli vidieť, a my by naozaj opísať to v tomto
programu, pretože je to v niektorých iných Súbor na pevnom disku
unbeknownst nám.
Takže poďme sa vlastne zostaviť a spustiť hneď.
>> Urobiť pozitívne.
Kompilácia, to je pokrok.
. / Pozitívne.
Daj mi kladné celé číslo.
Poďme byť ťažké.
Negatívne 1.
Zero.
Dajme tomu 50.
Vďaka za päťdesiat, a tak kontrola teraz sa vrátil.
Akékoľvek otázky, potom o tom myslíte?
Jo?
>> [Nepočuteľný].
>> Povedz to znova.
Oh, dobrá otázka.
Takže si môžete všimnúť paralelu tu Som typ rezu na roh.
V súlade 12, hovorím, získať pozitívny int vracia int, ale ten rovnaký
logika, to teraz dá rozum, že v linka šesť, hovorím, že hlavné vráti
int, ale to, čo sme ešte mal niektorý z našich programov?
Nikdy sme nemali zmienku o toto kľúčové slovo return.
>> Tak sa ukázalo, že v C, a to najmenej verzia toho, že sme pomocou
z roku 1999, technicky, je to sa deje automaticky.
Kedykoľvek budete vykonávať program a vy implementovať funkciu nazvanú main,
že funkcia vráti nulové Predvolené ak nechcete hovoriť inak,
a nula je len konvencie.
Svet sa vracia nulu tým čo znamená, že je všetko v poriadku,
účinne opúšťať nám štyri miliardy možné veci, ktoré by mohli ísť
zle, takže keď sme sa vrátiť jednu, ktorá môže znamenať kód, ktorý znamená, že tento
čo sa stalo.
Mohli by sme sa vrátiť dve, čo znamená, tá druhá vec sa stala chyba.
Mohli by sme sa vrátiť štyri miliardy, čo znamená, že táto vec sa stala chyba.
>> A či si teraz premýšľať o svoje vlastné PC alebo Mac, môžete pripomenúť, že
niekedy dostanete záhadné chybové správy od softvéru, ktorý ste
použitie, a niekedy má človek Zrozumiteľný opis, ale je tu
často kód alebo číslo na obrazovke?
Ak to nepríde na myseľ, len dávať pozor na to.
To je to, čo to typicky kódy na mysli.
Sú zahrnuté v programe Microsoft Word a ďalšie programy, takže ak súbor
bug report s firmou, môžete povedzte im, oh, mám číslo chyby 45.
A niektorí programátor späť v spoločnosti môže vyzerať, že v jeho alebo jej
kód a povedať, oh, to preto, že som urobil táto chyba a to je dôvod, prečo užívateľ
dostala túto správu.
>> Ale úprimne povedané, je to len trochu rušivo a trochu nudné
k záveru, že aspoň na našich Prvých niekoľko programov, a tak sme
sa vynechá to.
Ale celú tú dobu každý jeden z vašich Hlavné funkcie tajne mal toto
linka automaticky pridané pre vás kompilátor, len tým, že konvencie
ušetrí nejaký čas.
>> [Nepočuteľný].
>> Nemusíte zahrnúť do hlavnej.
To je v poriadku.
Je potrebné zahrnúť, ak ste boli vykonávanie funkcií, ako je tento.
Inak sa funkcia bytu sa nebude fungovať.
Ale hlavné, že to nie je nutné.
Za týždeň alebo dva, začneme dostať do tohto zvyku, akonáhle chceme začať
znamenať chyby.
Naozaj dobrá otázka.
>> Tak rýchlo slovné prestávka spomenúť, že tento piatok, nebudeme mať obed
samo o sebe, ale my budeme mať večeru s niektorých študentov a zamestnancov.
Ak by ste sa k nám pripojiť, pocit môže ísť do cs50.net/rsvp.
18:00 tento piatok.
Vesmír je ako vždy obmedzená, ale budeme pokračovať v tom to na takmer
raz týždenne, ak priestor Vypršal tento týždeň.
>> Takže Cliffhanger, že sme skončili na Pondelok bolo, že reťazce môžu v skutočnosti
byť indexované, čo práve znamená, že tie môže dostať na prvý znak,
druhý znak, tretí znak a tak ďalej, pretože môžete
efektívne myslieť na reťazce, napr Dobrý deň, ako v tomto prípade päť
Písmená vnútri krabíc.
A môžete získať v každom z týchto Krabica s tým, čo sme urobili syntaxe
predstaví v pondelok?
Tieto hranaté zátvorky na vašej klávesnici.
To len chcel ísť do miesta nulové.
>> Začneme počítať od nuly, takže držiak nula znamená h, držiak jeden
E znamená, a tak ďalej.
A tak po celú dobu, kedy sme boli pomocou reťazca a zadaním príkazu "ahoj"
a "svet" a ďalšie veci na na obrazovke, to bolo uložené
v krabiciach, ako je tento.
A hádajte.
Čo každý box predstavuje fyzicky vnútro vášho počítača?
>> [Nepočuteľný].
>> Je nám ľúto?
>> Postavy.
>> Tak charakter, rozhodne v prípade, reťazcov a postava je len
osem bitov alebo jeden byte.
Takže ste pravdepodobne aspoň nejasne oboznámení s tým, že vaša
počítač má pamäť.
To má dva typy pamätí aspoň.
Jedným z nich je pevný disk, kde ušetríte veci trvalo, a to
typicky veľký, takže môžete mať filmy a hudbu a tak ďalej.
>> Potom máte ďalší typ pamäte tzv RAM, R-A-M, Random Access
Pamäť, a to je typ pamäte, , Ktorý sa používa, keď je počítač
beží, ale ak už strácam silu alebo váš vybitia batérie, čokoľvek, čo je uložené
v pamäti RAM zmizne, pokiaľ už strácam silu dohromady, pretože to nie je
vytrvalý.
Tie majú zvyčajne v týchto dňoch, koncert z toho dva koncerty, možno viac.
A hore RAM je, že je to oveľa oveľa, oveľa rýchlejší ako pevné disky
alebo dokonca solid state disky v týchto dňoch, ale je to zvyčajne drahšie, takže
máte menej.
>> Takže dnešný rozhovor skutočne odkazuje RAM, ktorý typ pamäte, ktorá
existuje len keď tam je moc dodávané do počítača.
Takže keď napíšete H-E-L-L-O, Enter klávesnice, H sa deje v jednom
byte RAM, E sa deje v ďalší bajt pamäte RAM, ako je
zvyšok slova.
Takže spomenúť, čo sme boli schopní urobiť, minule to bolo.
Nechaj ma ísť dopredu a otvoriť súbor že sme nazvali string.c a vyvolať
že vyzeral trochu niečo také.
Dovoľte mi, aby som skutočne vrátiť späť a zmeniť to presne to, čo vyzerá,
dĺžka reťazca s
>> Takže sa na programe tu.
Sme patrí CS50 knižnicu tak že môžeme použiť získať reťazec.
Použili sme štandardné IO.H takže môžeme použiť printf.
Prečo sme ich string.h?
To bol nový v pondelok.
Takže sme chceli dĺžku reťazca.
Str Leng.
Ľudia sa rozhodli pred rokmi, buďme stručné.
Namiesto toho, volať to "dĺžka reťazca," nazvime ju "str Leng" a nechajte
Svet je číslo, ktoré sa, a tak to je to, čo dostaneme prístup k s string.h.
>> To je dobre známa.
To je dobre známa.
Jedná sa o málo nových.
V súlade 22 - a vrátime sa na to, ale teraz vieme -
a vy by ste len vedieť to z nutnosti prečítajte si dokumentáciu, alebo ak
ste vedel, že C už -
dostať reťazec môže niekedy pokaziť.
V prípade, že používateľ je skutočne nepriateľský alebo nespolupracujúce a on alebo ona len
nemá nič písať na klávesnici alebo typy toľko na klávesnici, ktorá
to premôže pamäte počítača, teoreticky dostať reťazec by sa mohol vrátiť
niečo iné, než reťazec znakov.
To by sa mohol vrátiť špeciálnu hodnotu s názvom NULL vo všetkých čiapky, N-U-L-L, a to je
len tzv sentinel hodnotu.
Je to zvláštne hodnotu, ktorá označuje, niečo zlé sa stalo v tomto prípade.
To je absencia reťazca.
>> Takže null som kontrolu jednoducho tak, dlhý príbeh krátky, str leng a
ďalšie funkcie, ktoré prichádzajú s C, ak je očakávajú reťazec, ale predáte je
absencia reťazca, predáte je NULL, počítač alebo program
sa jednoducho zrúti úplne.
To bude visieť.
To sa bude hodiť do nejakej chybové hlásenie.
Zlé veci sa bude diať.
Takže aj keď je to stále nie je dobre definované -
to bude dávať väčší zmysel v týždni alebo dve - v rade 22, je to len
Príkladom vlastné obranné kontrolu chýb len v prípade, že jednou z
miliónov sa niečo pokazí, na Aspoň môj program nebude padať.
>> Takže ak to nie je rovná niečo zlé, Mám to pre sláčiky, a to bolo
kde sme mali ten druhý nový kus syntaxe.
Mám pre slučky iterácie od nula, až do dĺžky s
A potom tu, bol som vytlačenie s držiak aj, ale prečo ja používam% c všetky
Zrazu miesto% s ešte aj keď s je reťazec?
Je to postava, nie?
S je reťazec, ale s niečím držiak, Držiak s i, kde i je nulová
alebo jeden alebo dva, to je individuálne znak v reťazci, a preto pre
že printf musí byť informovaný, že je to naozaj postava očakávať.
>> A potom si spomenúť, čo to urobil Program vlastne robiť?
>> Vytlačené to v stĺpcoch.
>> Jo, presne tak.
Je to proste vytlačené slovo, ktoré som písať, stĺpec, jeden znak na riadku.
Tak uvidíme znova.
Tak, aby reťazec.
Spracovala OK. . / String.
Dovoľte mi, aby som zadajte H-E-L-L-O, Enter, a naozaj som si to, na každom riadku jeden.
>> Takže mi dovoľte ešte jeden optimalizáciu tu.
Pokiaľ si myslíte o tom, najmä ak ste naprogramované, je tu
pravdepodobne neplatnosť v súlade 24.
Inými slovami, nie je to nutne Najlepší dizajn.
Jednoduchá, aspoň raz vás Pamätáš si, čo str Leng je, ale je to
robiť niečo hlúpeho potenciálne.
Čo by to mohlo byť?
>> [Nepočuteľný].
>> Presne tak.
Je kontrola dĺžky s zakaždým, aj keď
H-E-L-L-O je vždycky sa päť znakov.
Zakaždým, keď sa prostredníctvom tejto slučky, päť nemení.
Mohol by som byť aj zvyšovanie, ale to, čo je dĺžka s na každom
opakovanie tejto slučky?
Je to päť, to je päť, to je päť, a napriek tomu som však pýtam
otázku znova a znova a znova.
Teraz úprimne povedané, počítač je tak sakramentsky rýchlo, nikto nevšimne
Rozdiel je v tomto prípade, ale tieto druhy zlých rozhodnutí o návrhu môže
začnú sčítavať, ak kompilátor sám Nesnaží sa opraviť to pre vás, ktorý
zvyčajne to by nemal byť v aspoň v prístroji.
>> Tak idem na to.
Chystám sa pridať čiarku moja prvá premenná, i
Chystám sa dať sám iný variabilný, volať to n, len tým, že
konvencie pre čísla, a potom som bude priradiť n hodnotu reťazca
dĺžka s
A potom som sa zmení môj stav sa čo?
Idem zmeniť svoj stav sa, keď som je menšia ako n.
>> Takže teraz, koľkokrát som kontrolu dĺžky s?
Raz, ale to je v poriadku kontrolovať aj proti n znova a znova, pretože teraz tie
hodnoty sa skutočne mení.
Teraz sa, len viem, že kedykoľvek volanie funkcie, je to trochu
nad hlavou, nie je dosť odradiť naozaj od niekedy pomocou funkcií, ale
iste, keď je riadok kódu páči - a linky budú mať
zaujímavejšie onedlho - tam, kde je tu príležitosť premýšľať, či som
zadajte tento kód, koľko krát to bude vykonávať?
Začnete vidieť v priebehu času Výkon vašich programov môže
naozaj zmeniť.
>> V skutočnosti, jeden z problému sady máme urobil v minulých rokoch zahŕňa
vykonávanie, ako si môže stiahnuť z týždeň nula, kontrola pravopisu, ale
Kontrola pravopisu, ktorý je navrhnutý pre podporu slovník 150.000 a
Slová, ktoré sme vám chalani.
Budete musieť písať kód, ktorý načíta tieto slová do pamäte RAM, takže do
krabice, ako sme videli na obrazovke na okamih rokmi, a potom rovnako rýchlo ako vy
môžete, musíte byť schopní odpovedať otázka formy, je toto slovo
chybne?
Toto slovo je chybne?
>> A niečo také, čo máme urobil v minulých rokoch sa obrátil ju do,
keď na opt-in dobrovoľnom základe, súťaž druhov, pričom
študenti, ktorí používajú menej RAM a menej času, menej cykly procesora, skončí
vyviera na vrchol málo leader board alebo poradí, ktoré kladieme na
Kurz je úvodná stránka, ako máme prebiehala v rokoch minulých.
Takže znova, úplne voliteľný, ale hovorí k návrhu príležitosti
ktoré sú pred nami, akonáhle začneme budova na vrchole niektorej z nich
základné stavebné kamene.
>> Takže mi dovoľte vrátiť sa k tejto schéme pre len na chvíľu a odhaliť málo
niečo viac.
To je skutočne reťazec, a urobili sme Výhodou niekoľkých knižníc,
štandardné IO.H ktorá má -
>> Printf.
>> Printf, okrem iného.
cs50.h, ktorá sa int a získať reťazec a tak ďalej, string.h, ktorý
mal str Leng.
Ale ukazuje sa, že je ešte iný.
Úprimne povedané, je tu veľa a veľa záhlavia Súbory, ktoré deklarujú funkcie
pre knižnice, ale to je ctype.h v skutočnosti bude trochu
výhodné, pretože idem ísť ďalej a realizovať jeden
iný program tu.
>> Nechaj ma ísť dopredu a otvoriť niečo Napísal som vopred s názvom
capitalize.c, a poďme sa Pozrite sa, ako to funguje.
Všimnite si, že som pomocou, v tejto verzii z toho tri známe súbory.
Všimnite si, že v rade 18, som získanie riadok textu.
Všimnite si riadku 21, som tvrdil, že Nasledujúci kód bude
zarábať s, čo užívateľ napísal v roku, a ako to robím, že?
No, ja si beriem -
poučenie z minula -
Ja som vyhlásil i a n a iterácie nad znaky v reťazci.
A čo je to za blok kód v súlade 24 až 27.
robí Laicky povedané?
>> Malé písmeno späť.
>> Presne tak.
Ak je držiak s aj -, takže v prípade, že i-ty charakter s, čo je špecifický
char v reťazci, je väčší než alebo rovnajúcu sa malé písmená a -
pripomenúť, že dvojitý ampersand znamenajú a -
a rovnaký charakter, s držiak i, je menší ako alebo rovnajúcu sa malé písmená Z,
to znamená, že to, alebo b alebo c alebo dot, dot, dot, alebo Z, čo znamená, že
to je malá.
Čo chcem robiť v tomto prípade?
No, môžem to urobiť trochu záhadne, ale
poďme podpichovať to od seba.
>> Idem zavolať printf, vytlačí% c pretože chcem dotlač tohto
znak na obrazovke.
Ja potom bude trvať s držiak ja, i-tý znak s, a prečo
robím tento malý trik tu, malá mínus kapitálu je?
Čo to bude dať ja všeobecne?
>> [Nepočuteľný].
>> Presne tak.
Nemám moc nepamätám -
to bolo 65 na kapitálové A. naozaj nemám Pamätáš si, čo malá je,
ale to nevadí.
Počítač vie.
Takže tým, že hovorí, malá znamienko mínus kapitálu, je to divné, že
odpočíta jeden char od druhého, ale aké sú znaky pod pokrievku?
Sú to len čísla.
Takže bez ohľadu na tieto čísla, nechajte počítač si to pamätať
skôr než ja človek.
>> Tak malá mínus kapitál je bude mi rozdiel.
To sa stáva, že je 32, a že by sa prípad malým b a kapitálu B
a tak ďalej.
To zostáva konzistentné, našťastie.
Takže som v podstate povedal, sa malé písmeno, odpočítať z tej
štadartný diferenciál, a že držiak účinne Zmeny S i od
malé písmená, samozrejme, veľká, bez toho aby som naozaj majú myslieť
o alebo si pamätať, čo boli tí, Čísla s ktorými sme hovorili o tom, kedy osem
dobrovoľníkov prišla na pódium?
Teraz medzitým, v inak, pokiaľ to nie je malé písmeno ako je stanovené
linkou 24, stačí ju vytlačiť.
Ja len chcem, aby ste sa nedotkli znaky, ktoré boli
vlastne pôvodne malé písmená.
>> Takže poďme sa pozrieť.
Urobiť využiť.
Spracovala, OK.
. / Zarobiť.
A dovoľte mi písať v H-E-L-L-O malými písmenami, Enter.
A zistíte, že je prevedený na veľká.
Nechaj ma to urobiť znova iný slovo.
Ako sa o D-A-V-I-D s prvým D zarábal ako meno je obvykle?
Enter.
Všimnite si, že je stále platná.
To len, že prvý výstup D bezo zmeny cez ktoré else.
>> Takže majte na pamäti, potom pár vecí tu.
Po prvé, ak ste niekedy chceli skontrolovať dva podmienky naraz, môžete im a
spolu, ako sme predpovedali.
Môžete porovnať znaky týmto spôsobom a účinne liečiť znaky ako
čísla, ale úprimne povedané, je to tak sakramentsky mystický Nikdy nebudem pamätať
ako prísť s tým od začiatku bez uvažovania cez to na celkom
trochu času.
>> Nebolo by pekné, keby niekto tam napísal funkciu nazvanú je
zníženie, ktoré by mohli zodpovedať za mňa true alebo false, tento znak je malá?
No našťastie, kto napísal ctype.h urobil presne to.
Nechaj ma ísť sem a pridať Cdruh pre c typy, a teraz nechaj ma ísť sem dole a
prepísať tento riadok takto.
>> Takže ak sa to nazýva, je nižšia, tvrdím, je držiak i, potom idem zmazať
tieto dva riadky dohromady.
Takže teraz niekto iný, dúfam, napísal s názvom funkcie je nižšia, a to
ukázalo sa, že to urobili, a oni deklarovali že vnútri ctype.h.
A teraz idem nechať linku 27 sám, idem nechať linku 31
sám, ale všimnite si, ako veľmi som sprísnila svoj kód.
Teraz je čistejšie.
Je to menej ťažké prehliadnuť pretože sa funkcie, je navyše
tak nádherne menoval to len robí to, čo hovorí.
>> Takže teraz idem zachrániť to.
Chystám sa oddialiť.
A rovnako ako v Scratch by ste mohli mať Booleovské operácie, logické hodnoty true alebo
false, to je presne to, čo je nižšia skutočne vráti.
Dovoľte mi, aby som prekompilovať.
Dovoľte mi, aby som re-run.
A teraz skúsme to znova, H-E-L-L-O, Enter.
To je celkom dobrý.
A skúste to znova, uistite sa, že som sa nezničí niečo vymyslieť.
To je aktivované rovnako.
>> Ale to nie je dosť dobrý, pretože Ďalšia vec, ktorá ma nikdy
spomeniete, ak pracujem cez to naozaj opatrne na, povedzme, papier
to sakramentsky riadok.
Nebolo by pekné, keby tam boli volaná funkcia na hornej?
Tak to dopadá, že je v ctype.h rovnako.
Chystám sa ísť dopredu a zadajte -
dovoľte mi, aby som tento riadok späť.
Namiesto toho tu, nechaj ma ísť napred a hovoria, nahrádzať% C
Výsledkom volanie tejto funkcie Horný na i-tom charakteru s
A teraz všimnete, že to stále trochu vyvážiť.
Musím sledovať, koľko zátvorky som otvoriť a zatvoriť.
>> Takže teraz je to ešte čistejšie.
Teraz je tento program stále lepšie a lepšie navrhnuté pravdepodobne preto, že je
oveľa, oveľa čitateľnejší, ale Nie je to poďme napraviť.
Urobiť využiť.
. / Zarobiť.
H-E-L-L-O. Poďme spustiť znovu, D - V-I-D. OK, takže sme stále v
celkom dobrej kondícii.
>> Ale teraz k hornej.
Navrhujem, že je tu ešte jedna zjemnenie môžeme robiť, že by bolo
naozaj pekné, mohlo by to naozaj dotiahnuť do tohto kódu, a naozaj nám päť
z piatich pre návrh, napríklad.
Čo by bolo pekné, ako sa zbaviť?
No, pozrite sa, ako sakramentsky dlhé tento blok Kód je len niečo jednoduché.
>> Teraz, ako stranou, pretože môžete mať vidieť v super časti minulý
víkend, nemusíte nevyhnutne potrebuje, Zložené zátvorky, keď stačí mať jeden
riadok kódu, aj keď sme navrhli držať je tak, že je oveľa
jasnejšie, ako v Scratch je v tvare písmena U bloky, čo je vo vnútri pobočky.
Ale nebolo by to bolo pekné, keby na hornej, keď vzhľadom k jeho vstup, otočil sa do
veľké písmená, ak tomu tak nie je, a to, čo by bolo úžasné v opačnom prípade, ak
je to už veľká?
Stačí prejsť cez a nechať to byť.
>> Takže možno, že to robí.
Mohol by som to skúsiť, a len dúfam, , Že nemá, ale dovoľte mi, aby som
predstaviť jednu vec.
Namiesto použitia tohto zabudovaný terminál Okno sa tu pripomenúť, že
Toto námestie čierna ikona vám väčšie okno terminálu, že môžem plný
obrazovky, ak chcem?
Tak to dopadá, že sú nejako podivne menoval, ale je tu nazývajú veci
manuálových stránok, manuálové stránky, muž v krátkosti, a ja k nim pristupovať podľa
písanie muž -
čo chcem písať na stroji?
Človek do hornej.
>> A teraz zistíte, ak existuje funkcie vnútri počítača, v
V tomto prípade je prístroj, ktorý je práve operačný systém Linux, bude to
aby mi trochu záhadný súbor výstup, ale zistíte, že v priebehu času
vždy je formátovaný do značnej miery rovnaké, takže začnete to zvyknúť.
Všimnite si, v hornej časti na hornej a zrejme je rovnaký dokumentácie
na znížiť.
Ten, kto písal, že to bolo nejaké rezanie rohy a dať to všetko na jednej stránke.
Účelom týchto vecí "v život je previesť
List hornej alebo malé písmená.
>> Všimnite si, že v Synopsis manuálové stránky Učí ma, čo mám súbor
zahrnúť používať túto vec.
To mi dáva podpisy na nich funkcie, a to ako z nich, a to aj
keď sme teraz len starostlivosť o jednom.
Tu je teraz popis.
Ak chcete horný prevádza list c veľká, ak je to možné.
>> Stále nie je to poučné, ale dovoľte mi, aby som teraz pozrieť pod návratovú hodnotu, vec,
ktorý je odovzdaný späť.
Takže vrátená hodnota je, že prevedené písmeno alebo c, ak
konverzie nebolo možné.
Čo je to c?
>> Pôvodný charakter.
>> Pôvodný charakter a vieme, že by opäť stúpa do
synopse, a ten, kto to napísal Funkcia sa rozhodli, že vstupné
sa na hornej a spodnej, je len ľubovoľne sa mal volať c
Mohli by hovorili, že väčšina niečo chcú, ale stále to
jednoduché c
Tak som konzultovala manuálovú stránku.
Táto veta uisťuje ma, že ak to nie je malé písmeno, je to
bude daj mi C, čo je perfektné, čo znamená, že môžete zbaviť
môj iný stav.
>> Tak nechaj ma ísť späť do gedit, a Teraz mi dovoľte to.
Idem kopírovať mojej printf vyhlásenia.
Chystám sa ísť dopredu a doprava vnútri slučky pre tlač, ktoré sa, a získať
zbaviť sa tohto celku, ak by konštrukcia.
Nebol to zlý nápad, a bolo to veľmi Koľko správne av súlade s
všetko, čo sme kázali, ale jednoducho nie je nutné.
Akonáhle si uvedomíte, niektoré knižnice funkcia existuje, že niekto iný
písal, alebo možno ste napísal inde súboru, môžete ho použiť, a naozaj
začať sprísniť kód.
>> A keď hovorím veci ako dobrom štýle, skutočnosť, že sa táto osoba nazýva
pracovať na hornej, alebo skôr, je nižšia je nádherne užitočná, pretože
sú veľmi popisné.
Tie by nechcel volať funkcie x a y a z, ktoré majú
oveľa, oveľa menší význam.
Akékoľvek otázky týkajúce sa tejto série vylepšenie?
>> Takže stačí teda jeden z takeaways je dokonca ako svoj vlastný problém
set - možno problém nastaviť jednu, ale Určite P nastaviť dva a dopredu, dokonca
keď sú správne nemusí nutne znamenať, že sú perfektné len
ešte, alebo veľmi dobre navrhnuté.
To je ďalší osi začať premýšľať o tom.
Takže to bol reťazec vnútri vášho pamäť počítača, ale ak máte
celá partia postáv ako H-E-L-L-O v pamäti RAM, a predpokladajme,
ktoré ste v programe volať získať reťazec niekoľkokrát taká, že
zavolajte si reťazec raz, potom zavolajte si reťazec znova.
No, čo sa deje na sa stalo v priebehu času?
>> Inými slovami, ak máte linku kód, aj keď z kontextu, ako je
string s dostane -
poďme na to.
String name rovná sa reťazec.
Takže predpokladám, že riadok kódu je určená požiadať užívateľa o jeho alebo jej meno.
Táto ďalší riadok kódu je chcel opýtať, užívateľ pre jeho alebo jej školy, a
Táto ďalší riadok, a tak ďalej.
Predpokladajme, že sme stále pýtajú užívateľa pre ďalšie a
ďalšie a ďalšie reťazec.
Chystajú sa zostať v pamäti v rovnakom čase.
Jedným z nich je nebude handry druhej.
Škola je neprepíše iný.
Ale kam sa všetci skončí v pamäti?
>> No, ak začneme kresliť na obrazovku, ktoré môžeme použiť túto vec
tu ako tabuľu, ak je táto čierna obdĺžnik predstavuje môj počítač je
pamäť, budem ľubovoľne začať rozdeliť ju na malé štvorčeky,
z ktorých každá reprezentuje jeden bajt pamäte.
Úprimne povedané, ak máte gigabajty pamäte RAM v týchto dňoch, máte miliardu bajtov
pamäte vo vašom počítači, takže miliarda týchto štvorcov.
Takže stačí povedať, to v skutočnosti nie je v mierke.
>> Ale my sme mohli držať čerpanie všetkých týchto zjavne nie sú v mierke štvorca, a to
súhrnne predstavuje mojej pamäti počítača.
Teraz budeme proste bodka, bodka, bodka.
Takže inými slovami, keď som teraz vyzve Užívateľ s get reťazca, aby mi
reťazec, čo sa stane?
Ak používateľ zadá "ahoj", ktorá sa končí v H-E-L-L-O. Ale predpokladajme, že
Užívateľ potom druhy uvedené v -
Vlastne by som nemal robiť Dobrý deň, pretože sa pýtame
je ich názvy.
Tak poďme naspäť, keď to zvládnem.
>> Takže keď som typ D-A-V-I-D pre moje meno, ale pripomenúť, že druhý riadok
Kód bol dostať reťazec znova získať ich školu.
Kde je, že slovo, ktoré užívateľ druhy uvedené v ísť ďalej?
No, možno to bude ísť do H-A-R-V-A-R-D. Takže aj keď som
vypracovaný ako dvoch radoch, je to len celá partia bytoch vo vašom
počítača RAM.
Je tu problém teraz, pretože teraz, keď som pomocou RAM v tomto veľmi rozumné
ale trochu naivný spôsobom, čo môžete nie je zrejme rozlišovať?
Tam, kde jeden začína a kde jeden koniec, nie?
Sú trochu rozmazaniu dohromady.
>> Tak to dopadá počítač to nerobí.
Dovoľte mi vlastne môžete vrátiť v čase a niekoľko znakov a miesto Harvarde
bude ihneď po užívateľským menom, používateľ skutočne dostane, za
scény, špeciálny znak vložil
Počítač pre neho.
/ 0, inak známy ako znak NUL nepríjemne tzv N-U-L, nie
N-U-L-L, ale píšete to ako / 0.
Je to len všetky nulových bitov je marker medzi prvým slovom, ktoré užívateľa
napísal a druhý.
>> Takže Harvard vlastne teraz končí ako je sekvencia znakov
a ešte jedna / 0.
Takže inými slovami, tým, že tieto overovací hodnoty, osem susediace nula
bity, si teraz môžete začať rozlišovať jeden znak z druhého.
Takže celú tú dobu, čo bolo "ahoj" je vlastne "ahoj" s / 0, a
Zatiaľ by sa tam veľmi dobre byť trochu viac pamäte RAM
vnútri počítača.
>> Nechaj ma urobiť jednu vec teraz.
Ukazuje sa, že všetky z týchto štvorcov sme boli kreslenie, sú, áno,
reťazca, ale všeobecne, tieto veci sú polia.
Pole je len kus pamäte to je chrbtom k sebe k sebe k sebe,
a zvyčajne používajú rad spôsobom tohto hranatá zátvorka zápisu.
Takže budeme vidieť, ako sa trochu v priebehu času, ale dovoľte mi ísť dopredu a
otvoriť, povedzme veku.
A všimnite si, čo s nimi môžeme robiť tie isté triky, malé
trochu syntaxe tu.
>> Takže v rade 17 tohto programu - skutočnosti, dovoľte mi, aby som najprv spustiť program
a tak môžeme vidieť, čo toto robí.
Zavolám, aby na veky skompilovať tento program.
. / Vek.
Koľko ľudí je v miestnosti?
Nazvime to tri.
Vek prvej osobe?
18, 19, a 20.
A teraz trochu smiešne, ja len urobili program, ktorý ages ty
traja ľudia.
>> Takže je tu jasne príležitosť pre nejakú zábavu aritmetiky tu.
Našťastie, matematika je správna.
18 šiel do 19, 19 išiel do 20 a tak ďalej.
Ale to, čo naozaj znamená byť Ilustratívny je, ako sme ukladanie
vek týchto troch ľudí.
Dovoľte mi priblížiť, čo je tu deje.
>> Takže v prvom rade, by mali tieto prvý pár riadkov je stále dosť známe.
Ja som len výzva k zvoleniu počet ľudí v miestnosti.
Potom som pomocou dostať int a robiť, keď sa to znova a znova a znova.
Videli sme, že vzor predtým, ale linka 27 je nový a celkom
užitočné, a bude sa stále užitočné.
Všimnite si, že to, čo je v súlade 27 je, že som sa zdajú byť vyhlásenie
int tzv veky, ale počkajte.
Nie je to len int veku.
Tam je táto hranaté zátvorky, vnútri ktorej je n
>> Takže držiak n v tejto súvislosti, nie vnútri printf vyhlásenie tu, ale
V tejto jedinej linke 27, tento riadok povedal, daj mi n INT, z ktorých každá
je typu int.
Tak to je vedro, aby som tak povedal, z, v tomto prípade tri celé čísla späť do
chrbtom k sebe, takže som skutočne má tri premenné.
Alternatívou, aby sa jasné, že je to.
>> Ak by som chcel najprv študenta vek, mohol by som to urobiť.
Keby som chcel druhý študenta vek by som mohol urobiť.
Keby som chcel tretie študenta vek, mohol by som to urobiť.
A nedaj bože potrebujeme každého z nás vek v tejto miestnosti -
Myslím, že je to sakra veľa kópie, vložiť znova a znova a znova.
A navyše, keď som skompilovať tento program, ak ďalší študent chodí cez von
z dverí, teraz moje číslo premenných je nesprávne.
>> Takže to, čo je pekné o pole je Akonáhle sa začnete cítiť sami
kopírovanie a vkladanie, je pravdepodobné, že je to nie je najlepší prístup.
Pole je dynamická potenciálne.
Neviem dopredu, koľko ľudí sa bude v miestnosti,
ale viem, že musím n z nich, a budem zistiť, n, keď príde čas.
Tento riadok kódu teraz znamená, daj mi kus pamäti, ktorá vyzerá takto
kde počet schránok na obrazovke je úplne závislá na n ktoré
Užívateľ napísal palcov
>> Takže teraz zvyšok tohto programu je vlastne celkom podobné tomu, čo sme
Len som sa znaky.
Všimnite si, mám pre sláčiky začína v riadku 30.
Takže hneď po som si pole, som prechádzať z y rovná nule až na n
Len som to poučné printf správy len hovorím, daj mi vek
osoby #% aj tak číslo jedna, číslo dva, číslo tri.
A prečo som to urobil?
Úprimne povedané, ľudia radšej počítať od jednej na hore, zatiaľ čo počítačoví vedci,
nuly hore.
počítačoví experti nebudú použiť tento druh programu, takže sme
bude len začať počítať v jednom, ako normálnych ľudí.
>> A teraz v súlade 33, všimnete mierne iný kus syntaxe.
I-tý vek v tej premennej typu poľa dostane int.
A teraz konečne, je to len aritmetický sem.
Rozhodol som sa v samostatnej slučke tvrdí, nejaký čas ubieha, a teraz v tejto
samostatná slučka, tieto riadky spustiť.
>> Odo dneška za rok, človek i bude aj rokov, ale oznámenie nie je
premennej i
To je teraz% aj pre int.
A oznámenia ako prvý zástupný symbol, Aj zapojte aj plus 1, takže počítame ako
normálny človek.
A potom sa za hodnotu ich veku, pre i rokov, beriem ages držiak
i - a prečo to robím a jeden tu?
Proste veku.
Je to moja hlúpa voľba programov.
Proste vo veku jedného roka.
Mohol by som písať v akejkoľvek číslo, ktoré Ja vlastne chcem tam.
>> Takže čo to vlastne všetko relevance tu?
No, dovoľte mi vlastne listovať sem a namaľovať obraz
toho, čo leží pred nami.
Čo budeme robiť s našou ďalšou Problém nastaviť dva sa pustili do
svet kryptografie.
Takže to je reťazec znakov, takže sekvencie z viacerých znakov, a to, čo
to hovorí?
Nie je to v online verzii zo snímok.
>> Takže tvrdím, že to sa rovná to, hlúpa reklama od mnohých rokov
pred ktorý by mohol vyvolať jeden z jeho pôvodu.
Tak to je príklad šifrovanie alebo šifrovanie.
Ukazuje sa, že ak chcete v skutočnosti poslať informácie alebo zdieľať
informácie s niekým bezpečne ako správy, ako je táto, môžete
vyškriabať listy.
Ale zvyčajne sú slová nie sú kódované náhodne.
Sú deionizovaná nejakým spôsobom alebo zmeniť nejakým spôsobom, aby - oops.
To je zábava spojler pre nabudúce.
>> Takže si môžete zmapovať, čo je zrejme O všímať B., ktorý zoradí
kapitalizácie ručičiek.
Zrejme r e sa stane.
Zdá sa F-H-E-R sa S-U-R-E. Tak Ukazuje sa, že je mapovanie, a
V tomto prípade je to dosť hlúpy mapovanie, či má niekto na to prišiel?
To je niečo, čo nazýva Rot 13, 13 Otočiť.
Je to najhlúpejší šifrovanie mechanizmy, pretože to doslova
pridáva 13 na každého z písmen, hlúpy v tom zmysle, že ak ste práve
mať trochu voľného času na ruky a ceruzka, alebo si len myslím, že
až v hlave, môžete skúsiť všetky možné obrázky - jeden, dva,
tri, bodka, bodka, bodka, len 25 otočte celú abecedu a
nakoniec budete zistiť, čo táto správa je.
Takže ak ste niečo také v základnej školy odovzdávanie správ do
najlepší priateľ, ak vaše základné školy Učiteľ len prečítať
správy a brutálny nútení riešenie, Možno ste dostali
odpoveď, že.
>> Teraz samozrejme, v reálnom svete, kryptografie je zložitejšia.
To je úryvok textu, ktorý je počítačový systém, ktorý má užívateľské meno a
hesiel, ako takmer všetci z nás robia, a To je to, čo by mohlo vaše heslo
vyzerať, ak je uložený na pevnom riadiť, ale v zašifrovanej forme.
To nie je len rotácie listov, Je B a B je C. To je
oveľa sofistikovanejšie, ale používa čo je všeobecne známe ako tajný kľúč
kryptografie.
Tento snímok rozpráva nasledujúce Príbeh s niekoľkými ikonami.
>> Na ľavej strane, máme to, čo zavoláme obyčajný text.
Vo svete kryptografia, prostý Text je pôvodný správu
písaný v angličtine alebo francúzštine alebo jazyka vôbec.
Ak chcete zašifrovať, budeme odovzdávať je obrazovo cez visiacim zámkom, takže
niektoré druh algoritmu, niektoré funkcie alebo program, ktorý niekto napísal
že sa perie písmená dúfajme viac komplikovane ako jednoduchým pridaním 13
ku každému z nich.
>> Čo získate z tohto procesu, Uprostred sa nazýva cyphertext.
Tak trochu sexy slová.
To len znamená, že je šifrovaná verzia obyčajný text.
A iba ak máte rovnaký tajomstvo, 13 alebo mínus 13, ste schopní
dešifrovať správy takhle.
>> Takže problém nastaviť dva, medzi vecami, budete robiť, keď v Hacker
Edition, budete musieť napísať kód bezva tieto heslá, prísť na to,
čo sú zač a ako boli zašifrované, ale my vám trochu
z vedenia pozdĺž cesty.
V Standard Edition, predstavíme pár šifier, šifrovanie
mechanizmy, jeden s názvom Caesar, jeden volal Vigenère, ktoré sú stále
rotačné šifry, kedy sa stane niečo, B sa stáva niečím, ale
musíte to urobiť programovo pretože tam bude skutočne tajná
kľúč zúčastnených, z ktorých je zvyčajne číslo alebo kľúčové slovo, ktoré iba
odosielateľ a príjemca týchto správy by mal pochopiť.
>> Teraz, to vlastne má inkarnácie v reálnom svete.
Toto, napríklad, je málo orphan Annie je tajné dekodér prsteň, a
môže skutočne realizovať tieto rotačné šifry -
Sa stáva niečím, B sa stáva niečo - s niekoľkými kolesami,
jeden na vonkajšej strane, druhá vnútri taká, že ak otočíte kolieskom alebo
krúžok, môžete skutočne zarovnať listy s rôznymi písmenami,
získanie tajného kódu.
A tak ako Cliffhanger pre dnešok, čo som myslel, že to je trochu
návrat, že ak zapnete televíziu 24. decembra, môžete sledovať
Film najmenších podrobností pre 24 hodín v rade.
Ale pre dnešok, otvorím to tu a dá nám len dve minúty z
pedagogicky relevantné Vianočný príbeh s malým chlapíkom menom Ralphie.
>> [PLAYBACK]
>> -Či už je to známe všetkým a rôzne, že Ralph Parker je menovaný
člen Malý sirota Annie tajomstvo kruh a je oprávnený na všetky
so cťou a výhody vyskytujúce sa na ne vzťahujú.
>> -Podpísané, Little Orphan Annie.
Spolupodpísal, Pierre Andre atramentom.
Vyznamenania a výhody už vo veku deviatich rokov.
>> [Kričal na rozhlasových]
>> Poď, ideme na to.
Nepotrebujem All That Jazz o pašeráci a piráti.
>> -Počúvajte zajtra pre uzavretie dobrodružstvo čierny
pirátska loď.
Teraz je čas na tajomstvo Annie Správa pre vás členmi
tajného kruhu.
Pamätajte si, deti.
Iba členovia Secret Circle Annie vie dekódovať Annie tajnú správu.
Pamätajte si, že Annie je závislá na vás.
Nastaviť piny B2.
Tu je správa.
12., 11, 2 -
>> -Ja som vo svojom prvom tajnej schôdzke.
>> -25, 14, 11, 18, 16 -
>> -Pierre bol vo veľkej hlasové dnes.
Som spoznal, že z dnešnej správy bolo naozaj dôležité.
>> -3, 25.
To je správa od Annie sama.
Pamätajte si, že nikomu to nehovorte.
>> -90 Sekúnd neskôr som v jedinej miestnosti v dome, kde deväťročný chlapec
mohli sedieť v súkromí a dekódovanie.
Aha, B. som išiel na ďalšie.
E. Prvé slovo je "byť." S. Prichádzalo to teraz jednoduchšie.
U. 25.
To je R.
>> -No tak, Ralphie.
Musím ísť.
>> -Hneď som dole, mami.
Gee svišťanie.
>> -T. O. Uistite sa, že.
Uistite sa, že to, čo?
Aký bol malý sirota Annie snaží povedať?
Uistite sa, že to, čo?
>> -Ralphie, Randy má ísť.
Prosím vás vyjde?
>> -Dobre, mami.
Budem hneď späť.
>> -Bol som stále bližšie do súčasnosti.
Napätie bolo hrozné.
Čo to bolo?
Osud planéty môže visí na vlásku.
>> -Ralphie, Randyho musím ísť.
>> -Hneď som von kričať nahlas.
>> -Už tam skoro sme.
Prsty sa mi letel.
Moja myseľ bola oceľová pasca.
Každý pórov vibroval.
To bolo skoro jasno.
Áno, áno, áno, áno, áno.
>> -Uistite sa, že piť Ovaltine.
Ovaltine?
Mizerný reklamu?
Ten hajzel.
>> [END PLAYBACK]
>> Reproduktor 1: Toto je CS50, a že bude problém nastaviť dva.
Uvidíme sa budúci týždeň.
>> SPEAKER 2: Na ďalšom CS50, sa to stane.
>> Reproduktor 1: Takže jednu tému, nemáme Pozrel sa na potiaľ je
že funkčných ukazovateľov.
Teraz, ukazovateľ funkcia je len adresu verejné
funkcie, ale rovnako ako -
syn -