Tip:
Highlight text to annotate it
X
>> SPEAKER 1: Dobře.
Vítej zpátky.
To je týden Dva CS50, a máme Dosud byly pomocí funkce, ale
z velké části za samozřejmost.
Použili jsme printf, která má vedlejší efekt tisku
věci na obrazovce.
Použili jsme get-int, float dostat.
>> Ale co když opravdu chcete vytvořit vlastní funkce, jak se někteří
Možná jste již začala udělat pro Problem Set One, i když
není nezbytně nutné?
Dobře, pojďme dál, a znovu, že Problém se ptal na uživatele
jejich jméno a tisk něco na obrazovce, ale zkuste vytknout některé
o shodnosti, které jsme vidět v našem kódu tak daleko.
Takže mám na mysli následující.
>> Chystám se jít dopředu a vytvořit nový program, stačí zavolat
to hello.c jako obvykle.
Chystám se jít dopředu a dát sám zahrnují standardní io.h v horní části.
Chystám se také oddat preventivně CS50 knihovny tak, aby
Nechápu křičel na překladač.
A teď budu pokračovat a prohlašují, int, hlavní, za neplatné.
>> A pak tady je to místo, kde chci začít zadávat funkčnost
některé další funkce, které já sám jsem budu psát, ale to není
v současné době neexistuje.
Předpokládejme například, že jsem chtěl napsat funkci, která mi umožňuje
vytisknout ahoj, čárku a pak nějaké uživatelské jméno.
Namísto toho, aby to printf Dobrý den,% s, nebylo by hezké, kdyby
tam bylo jen volaná funkce není printf, ale print jmeno?
>> Takže jinými slovy, chci být schopen napsat program, který dělá jen málo
něco takového.
Za prvé, já jsem chtěl říct printf váš jméno, čímž vyzývající uživatele k
dej mi jeho nebo její jméno, a pak jsem bude používat známé řetězec s na
deklarovat řetězec.
Dej mi proměnnou typu řetězec, říkají to a obchod v tom, že
Výsledkem volání se řetězec.
Ale teď v posledních týdnech, musel bych poněkud nudně udělal Dobrý den,% s / n.
>> A jinými slovy, jsme viděli tento Příkladem banda časů, a to je
triviální příklad, protože tam je jen jeden řádek kódu, takže to opravdu není
velký problém udržet psát znovu.
Ale předpokládám, že tento řádek kódu skutečně staly přítěží, a
není to jeden řádek kódu, ale je to 10 řádky kódu před pár týdny od teď,
a vy jste jen unaveni kopírování a vkládání nebo
přepisování stejný kód.
Nebylo by hezké místo provádění printf ahoj,% s, a tak dále,
Nebylo by hezké, kdyby tam byli jen volána funkce print jmeno, že
má argument -
jinými slovy, že má vstup -
a pak středník.
Takže funkce, nebylo by to by hezké, kdyby to existovalo?
Pak bych nemusel obávat co printf je, co% s a všechny
Tyto komplikace, které jsou není všechno tak zajímavé.
Jsou užitečné.
>> Takže print jmeno, bohužel, nebyl vymyslel nějaký 40 + lety.
Nikdo si to napsat.
Ale to je krása mít programovací jazyk, stejně jako v
Scratch můžete definovat vlastní bloky tak, v C a téměř jakýkoli jazyk, můžete
definovat vlastní funkce, může můžete definovat své vlastní funkce.
Takže i když se dostaneme do hlavní automaticky zdarma, můžeme prohlásit,
naše vlastní funkce.
>> Takže budu dělat nějaké místo tady nahoru nahoru a budu deklarovat my
vlastní funkce, která bude vypadat trochu divný, ale na první přijedeme
zpět k tomu zanedlouho.
Chystám se říct neplatné, a tím ukazuje tato funkce
něco, má vedlejší účinky, ale nevrátí mi něco v
stejným způsobem, jako se int nebo dostat řetězec sama.
A budu k této funkci název tiskového jména a budu
určit, že tento člověk bude trvat řetězec, a já budu volat, že
Název řetězce.
Mohl bych říkat, co chci, ale já chci, aby moje kód být self-dokumentovat.
Jinými slovy, je-li někdo z vás měl tento soubor otevřít a číst, mohli byste
druh odvozovat z názvu, který Vstup jakou roli to má hrát.
>> A teď dále, že jdu otevřít složená závorka a uzavřené složená závorka,
a tak zjistíte Dodržel jsem stejný vzor na tratích čtyři až sedm jako
Sledoval jsem na dobrý týden navíc nyní mezi, řekněme, vedení a devět
14, který skládat hlavní.
Jinými slovy, tisknout název je další funkce.
Nyní, kompilátor nebude znát volat tuto věc automaticky
protože jsem doslova vymyslel, ale to bude vědět ještě zavolat hlavní
automaticky, a pak samozřejmě v linka 13, Volám svou vlastní funkci.
A proto, že jsem prohlásil, že funkce se na řadový čtyřválec před hlavními,
to bude učit kompilátor co cituji, konec citátu, "print jmeno"
znamená a co by měla dělat.
Takže jsem trochu dávat to nový zvyk zablokovat v rámci, řekněme, Scratch.
>> Tak tady, mohu dát, že velmi časté nebo opakující se vzor kódu držím
psaní ve třídě, printf % S ahoj,% s / n ", -
Co chci, aby tady?
S?
Tak jsem chtěl dát jméno v této souvislosti.
Takže si všimnout trochu dichotomie zde.
Protože jsem prohlásil svou vlastní funkci a já jsem poněkud svévolně nazývá
vytiskne jméno, a protože jsem je uvedeno v závorkách, že se
funkce má jeden argument, typ což je řetězec - tak to je slovo,
nebo slovní spojení, nebo něco takového - a Volám tento argument název, který
znamená pouze proměnná, které je v prostor, abych tak řekl, je název.
>> S existuje pouze mezi tím, co dva Složené závorky, samozřejmě?
No opravdu, stejně jako linky 10 přes 14, takže stejně jako v pondělí nelze použít
S, ale to, co můžu udělat, je projít S do tisku názvu.
Vytisknout jméno jen tak se stane, že ji dám alias, synonymum, přezdívka,
volat to jméno, a teď použití v tomto řádku.
Takže teď mi dovolte zachránit to, oddálit.
>> Nech mě jít dál a dělat ahoj.
Vypadá to dobře.
Copak vyplivnout žádné chyby. . / Ahoj Enter.
Jak se jmenuju?
David.
A ahoj David.
Takže není tak vzrušující, ale jen, že teď.
Nyní máte tu samou látku jako jsme to udělali v nuly
aby naše vlastní funkce.
>> Ale je tu trochu Gotcha.
Dejme tomu, že jsem si opravdu myslel, to až do konce a já vlastně bez
opravdu přemýšlet o tom psal že funkce tady.
Pocit naprosto rozumné.
V Scratch není pojem z místa ve svých skriptech.
Dalo by se dal jeden sem, jeden sem, jeden tady, a to by mohlo začít
vypadat trochu chaotický, pokud nemáte položte ji úhledně, ale to není
na tom, kde fyzicky skripty se na obrazovce.
Bohužel v C - a to je na rozdíl od jazyky jako Java a Python
a další, které by vás mohly seznámit s - bohužel v C, aby se
nezáleží, protože hodinky to, co je teď stane.
>> Výchozí funkce, která se děje k provedení je, samozřejmě, hlavní.
Hlavní bude volat jméno v tisku linka osm, ale bohužel,
kompilátor nebude ani vědět, že tiskový jméno existuje, dokud se dostane do řádku 11,
což je bohužel bude příliš pozdě.
Takže pojďme udělat ahoj.
A teď sakra, dvě chyby generovány.
Takže teď mi dovolte přejděte do velmi Za prvé, jak jsme měli vždycky, a
Všimněte si, že je to na mě řval, "Implicitní deklarace funkce
tisknout jméno. "
>> Takže jsme viděli, tato zpráva dříve, implicitní prohlášení funkce.
Když jsme viděli, že takové chyby?
Když jsem nezahrnoval knihovny.
Pokud jsem zapomněl cs50.h a já bych si zařval na pro získání řetězce, nebo si int.
Ale v tomto případě, je tato funkce tisku jméno není v knihovně, ne?
Je to doslova v tomto souboru, takže co je opravdu problém?
>> No bohužel v C, to se ti tak neuvěřitelně doslova, že pokud
chcete funkci nazvanou tisku na jméno existují, buď muset implementovat
které fungují na velmi horní část kód tak, že je k dispozici pro snížení
funkce, ale upřímně řečeno, to se stane nedbalý velmi rychle.
Osobně jsem rád uvedení první hlavní protože pak je naprosto jasné, co to
program se na první pohled.
A navíc se můžete dostat do podivné rohu případy, kdy, pokud x chce volat
y, ale y nazvat x, stačí fyzicky nemůže skutečně dát jeden
*** sebou.
>> Ale ukazuje se v C, můžeme vyřešit velmi jednoduše.
Chystám se dát trochu prostoru tady, a já jsem prostě jít
preventivně, i když poněkud redundantně, bude učit
kompilátor, že existuje funkce říká tiskový jméno, to trvá řetězec,
a já jdu volat to jméno středník.
>> Tak to nyní v souladu čtyři, které jsme ještě neviděli, je prohlášení
ze jména funkce tisku, ale je to jen slib, že tato funkce bude
nakonec být definovány, případně být prováděna.
To teď můžu odejít sám, protože Nyní se jedná o definice,
implementace, něco jako poslední míli provádění této
některé funkce.
Takže upřímně řečeno, je to hloupost, je to nepříjemné, ale toto je cesta C, a to
protože vás doslovně a jako by počítač upřímně,
jen dělá přesně to, co si říct, že se dělat, a tak, že uspořádání je důležité.
>> Takže mějte na paměti, že a znovu začít Všimněte si opakování vzorů.
Kurzy jsou, že ano, pokud nemáte již začínají setkat zprávy
jako je tato, na první pohled se zdá zcela záhadné, ale když začnete
podívat se na těchto klíčových slov, jako "Implicitní prohlášení," zmínka o
Funkce v tomto případě - a upřímně řečeno, je někdy dokonce dostat trochu zelený
mrkev symbol, který vám řekne, kde problém asi je -
můžete začít pracovat si cestu přes Zatím neviditelné chybové zprávy.
Jakékoliv dotazy týkající se psaní Vlastní funkce tímto způsobem?
>> Pojďme udělat něco, co je trochu více přesvědčivé.
Spíše než jen dělat něco, co má vedlejší efekt tisku, nech mě jít
dopředu a uložit nový soubor, a budeme nazývají positive.c, i když je to
Bude to trochu jinak oproti minule.
A tentokrát chci znovu zavést Poslední dobou je positive.C příklad, který
síla je uživatel, aby mi kladné celé číslo.
Ale musel jsem použít dostat int minule.
Nebylo by hezké, kdyby tam byl funkce je volána získat kladný int
že jsem mohl jen zadat tuto kus funkčnosti?
Takže rozdíl je potkáme realizovat získat pozitivní int, ale na rozdíl od
print jmeno který měl vedlejší účinek - nevrátil se pro mě něco jako
číslo nebo řetězec -
se pozitivní int je, samozřejmě, bude vrá*** se, doufejme, že pozitivní int.
>> Tak pojďme na to.
Zahrnout cs50.h zahrnují standardní io.h.
Int main neplatné.
A teď tady, budu pokračovat a řekněme int, říkají n, se rovná
získat kladný int.
A stejně jako se int již existuje protože zaměstnanci to napsal, já jdu
převzít na chvíli, že dostanete kladný int existuje, a teď jdu
jít dál a říct printf, díky za% i / n ", n.
>> Takže teď, když jsem zkompilovat tento program, co se bude dít v mém terminálu
okno v dolní části obrazovky?
Chystám se pravděpodobně dostanete, že stejná chyba jako předtím.
Takže pojďme zkusit.
Udělat pozitivní.
A opět, implicitní prohlášení funkce, získat pozitivní int.
Takže můžeme to vyřešit v několik způsobů.
Budu držet to jednoduchý a jen dát své prohlášení sem a dostat
pozitivní int.
Musím tzv. podpis.
Podpis jen odkazuje k estetice
první řádek programu.
Takže to, co by měli dostat pozitivní int návrat?
>> Tak int.
Myslím ideálním případě by se vrá*** něco jako pozitivní int, ale
neexistuje.
Jsme neviděli, že mezi našimi daty typy, takže máme co do činění s
Skutečnost, že máme velmi málo datové typy pro práci s.
Ale můžeme vrá*** int a jen věřím, že to bude pozitivní.
Bude to nazvat získat kladný int.
>> A teď, jak o jeho argumenty?
Trvá žádný vstup?
Znamená to potřeba žádný vstup?
Takže to nemusí vědět předem cokoliv.
Získejte řetězec neobsahuje, dostat int není.
Printf dělá - je třeba mít některé Vstup prošel do něj - a tisknout název
potřeboval nějaký vstup, ale dostat int pozitivní není.
Takže budu explicitně říci kompilátoru neplatné.
Void je absence cokoliv jiného.
Tak void znamená, se nic uvnitř z těch závorek, středník.
>> A teď na dně mého souboru - a znovu, jsem jen trochu anální
zde uvedení hlavní v horní části, který je dobrá praxe, protože tímto způsobem,
kdykoli vy nebo někdo jiný otevře soubor, na
Funkce je tady.
Můžete se potápět v jednom z náměstí.
Takže teď budu duplikovat to, získat kladný int neplatné, ale nejsem
dopadne na středník teď.
Jdu otevřít složené závorky, a teď musím půjčit
některé nápady od pondělí.
>> Tak, jak si vzpomínáte, jsme udělali něco jako proveďte následující při
něco, co je pravda.
A co jsem udělal?
Udělal jsem něco jako dát mi kladné celé číslo,
trochu výzva.
Mohl bych použít všechna slova, co chci.
A pak jsem použil co?
Int n se rovná dostat int, žádné argumenty do ní.
>> A všimněte si rozdílu.
Když voláte funkci, při použití funkce, vy ne dát do prázdna.
Můžete dělat jen to, že při deklarování funkce, výuka kompilátor, co
by měl očekávat.
Takže nemusíte dát zrušit tam sami.
>> A teď, co se můj stav?
Tak, n se nerovná pozitivní, ale to je jen pseudo-kód.
Tak jak to mám vyjádřit čistěji?
Tak menší než nebo rovna nule.
Takže znovu, zjistíte, co můžete udělat menší než nebo rovno.
I když je to dva samostatné symboly, můžete tak učinit na
klávesnice jako takové.
>> Ale je tu ještě problém, že Posral jsem to minule taky.
Musím prohlásit -
přesně.
Musím prohlásit n mimo ze smyčky.
Takže musím dát n sem, a já ne chci znovu prohlásit ho zde
abych si novou proměnnou.
Jen chci přiřadit hodnotu zde.
>> A teď jsem úplně hotoví.
Dovolte mi, abych se před sebe a předstírat, že jsem udělal.
Udělat pozitivní, a teď je tu nová chyba.
Control dosáhne konce non-void funkce.
Takže nové chybová zpráva, ale pokud jste typ z šprýmaři odděleně každý slovy,
pravděpodobně naznačuje, co se děje.
>> Ovládejte.
Řízení spočívá pouze v řádu operací v programu.
Počítač je pod kontrolou a se něco pokazilo.
Tak se dostane na konec non-void funkce.
Jaké funkce je zřejmě na mysli?
Jaká je funkce non-void?
Tak se pozitivní int, a trochu matoucí, že dobře,
je to druh prázdnoty.
To má specifikaci neplatnost jeho argumenty, ale jeho výstup bude
být typu n.
Takže slovo na levé straně je tzv. návratový typ.
Slovo na vnitřní straně je zde nulové nebo více argumentů
že funkce má.
>> Takže to, co musím udělat?
Na tomto místě v mém kódu, řádek 21, kde bliká prompt nyní je, že jsem
mít kladný int uvnitř proměnné s názvem n.
Jak mohu dát ho zpátky do Main?
Doslova.
Návrat n středník.
>> Tedy stejně jako u Colton vrátil kus papír s odpovědí na mě při pádu
ten kus papíru, v malé černé krabice na stole, k tomu, že v
kód, můžete doslova jen napsat, vrátí n, a je to, jako by byly Colton
podal mi něco fyzického zpět.
V tomto případě, co se děje, je dostat kladný int se chystá předat zpět
co je pravděpodobně pozitivní číslo pro koho?
Kde se tato hodnota skončí?
, Která končí v této proměnné, n, a pak budeme pokračovat s linií devět.
>> Takže jinými slovy, aby z operací, tento program spustí
provádění a kompilátor zjistí, oh, chceš knihovnu?
Nech mě jít chytit, co je uvnitř, že.
Oh, chceš standardní IO knihovny?
Nech mě jít chytit, co je uvnitř, že.
Co kompilátor řekl sám když to udeří linky čtyři?
Oh, jsi slíbil realizovat Funkce se nazývá pozitivní, ale
dostaneme zpátky na později, něco, co v tomto směru.
>> Int main void jen znamená, že tady je vnitřnosti mého programu.
Linka je jen sedm složená závorka.
Linka osm říká na levé straně, dát mi 32 bitů na celé číslo, říkají n.
Na pravé straně je to říkat si pozitivní int.
Nyní se pojďme pozastavit ten příběh, protože nyní Nechci dál můj kurzor dolů.
Můj Kurzor se nyní chodí sem, protože nyní získat kladný int spustí.
Int n je deklarována.
Proveďte následující.
Printf mi dává kladné celé číslo.
>> Získejte int od uživatele, uložte ho na n, a možná to znovu a znovu.
Tento cyklus znamená, že tento kód může spustit nahoru a dolů takhle zase
a znovu, ale když uživatel konečně spolupracuje a dává mi pozitivní
int, jsem narazila řádek 21, na kterém místě číslo se předá zpět, a který z nich
měl bych zdůraznit teď?
Nine.
Control, abych tak řekl, vrátí na linku devět.
To je linie, která je nyní na starosti.
>> Takže to, co se děje po tentokrát pod kapotou, ale
když jsme použili funkce jako printf nebo dokonce dostat řetězec, který někdo jiný
napsal vám, kontrola byla předáním off někoho jiného řádek kódu
o řádek po řádku.
Je to prostě jsme nemohli vidět, a my by opravdu popsat to v tomto
programu, protože je to v některých jiných Soubor na pevném disku
unbeknownst nám.
Takže pojďme se vlastně sestavit a spustit hned.
>> Udělat pozitivní.
Kompilace, to je pokrok.
. / Pozitivní.
Dej mi kladné celé číslo.
Pojďme být obtížné.
Negativní 1.
Zero.
Dejme tomu 50.
Díky za padesát, a tak kontrola nyní se vrátil.
Jakékoliv dotazy, pak o tom myslíte?
Jo?
>> [Neslyšitelný].
>> Řekni to znovu.
Oh, dobrá otázka.
Takže si můžete všimnout paralelu zde Jsem typ řezu na roh.
V souladu 12, říkám, si pozitivní int vrací int, ale ten stejný
logika, to teď dá rozum, že v linka šest, říkám, že hlavní vrátí
int, ale to, co jsme ještě měl některý z našich programů?
Nikdy jsme neměli zmínku o toto klíčové slovo return.
>> Tak se ukázalo, že v C, a to nejméně verze toho, že jsme pomocí
z roku 1999, technicky, je to se děje automaticky.
Kdykoliv budete provádět program a vy implementovat funkci nazvanou main,
že funkce vrátí nulové Výchozí pokud nechcete říkat jinak,
a nula je jen konvence.
Svět se vrací nulu tím což znamená, že je vše v pořádku,
účinně opouštět nám čtyři miliardy možné věci, které by mohly jít
špatně, takže když jsme se vrá*** jednu, která může znamenat kód, který znamená, že tento
co se stalo.
Mohli bychom se vrá*** dvě, což znamená, ta druhá věc se stala chyba.
Mohli bychom se vrá*** čtyři miliardy, což znamená, že tato věc se stala chyba.
>> A jestli si teď přemýšlet o své vlastní PC nebo Mac, můžete připomenout, že
někdy dostanete záhadné chybové zprávy od softwaru, který jste
použití, a někdy má člověk Srozumitelný popis, ale je tu
často kód nebo číslo na obrazovce?
Pokud to nepřijde na mysl, jen dávat pozor na to.
To je to, co to typicky kódy na mysli.
Jsou zahrnuty v aplikaci Microsoft Word a další programy, takže pokud soubor
bug report s firmou, můžete řekněte jim, oh, mám číslo chyby 45.
A někteří programátor zpět ve společnosti může vypadat, že v jeho nebo její
kód a říct, oh, to proto, že jsem udělal tato chyba a to je důvod, proč uživatel
dostala tuto zprávu.
>> Ale upřímně řečeno, je to jen trochu rušivě a trochu nudné
k závěru, že alespoň na našich Prvních několik programů, a tak jsme
se vynechá to.
Ale celou tu dobu každý jeden z vašich Hlavní funkce tajně měl toto
linka automaticky přidány pro vás kompilátor, jen tím, že konvence
ušetří nějaký čas.
>> [Neslyšitelný].
>> Nemusíte zahrnout do hlavní.
To je v pořádku.
Je potřeba zahrnout, pokud jste byli provádění funkcí, jako je tento.
Jinak se funkce bytu se nebude fungovat.
Ale hlavní, že to není nutné.
Za týden nebo dva, začneme dostat do tohoto zvyku, jakmile chceme začít
znamenat chyby.
Opravdu dobrá otázka.
>> Tak rychle slovní přestávka zmínit, že tento pátek, nebudeme mít oběd
samo o sobě, ale my budeme mít večeři s některých studentů a zaměstnanců.
Pokud byste se k nám připojit, pocit může jít do cs50.net/rsvp.
18:00 tento pátek.
Vesmír je jako vždy omezená, ale budeme pokračovat v tom to na téměř
jednou týdně, pokud prostor Vypršel tento týden.
>> Takže cliffhanger, že jsme skončili na Pondělí bylo, že řetězce mohou ve skutečnosti
být indexovány, což právě znamená, že ty může dostat na první znak,
druhý znak, třetí znak a tak dále, protože můžete
efektivně myslet na řetězce, např. Dobrý den, jako v tomto případě pět
Písmena uvnitř krabic.
A můžete získat v každém z těchto Krabice s tím, co jsme udělali syntaxe
představí v pondělí?
Tyto hranaté závorky na vaší klávesnici.
To jen chtěl jít do místa nulové.
>> Začneme počítat od nuly, takže držák nula znamená h, držák jeden
E znamená, a tak dále.
A tak po celou dobu, kdy jsme byli pomocí řetězce a zadáním příkazu "ahoj"
a "svět" a další věci na na obrazovce, to bylo uloženo
v krabicích, jako je tento.
A hádejte.
Co každý box představuje fyzicky vnitřek vašeho počítače?
>> [Neslyšitelný].
>> Je nám líto?
>> Postavy.
>> Tak charakter, rozhodně v případě, řetězců a postava je jen
osm bitů nebo jeden byte.
Takže jste pravděpodobně alespoň nejasně obeznámeni s tím, že vaše
počítač má paměť.
To má dva typy paměti alespoň.
Jedním z nich je pevný disk, kde ušetříte věci trvale, a to
typicky velký, takže můžete mít filmy a hudbu a tak dále.
>> Pak máte další typ paměti tzv. RAM, R-A-M, Random Access
Paměť, a to je typ paměti, , který se používá, když je počítač
běží, ale pokud už ztrácím sílu nebo váš vybití baterie, cokoliv, co je uloženo
v paměti RAM zmizí, pokud už ztrácím sílu dohromady, protože to není
vytrvalý.
Ty mají obvykle v těchto dnech, koncert z toho dva koncerty, možná víc.
A vzhůru RAM je, že je to mnohem mnohem, mnohem rychlejší než pevné disky
nebo dokonce solid state disky v těchto dnech, ale je to obvykle dražší, takže
máte méně.
>> Takže dnešní rozhovor skutečně odkazuje RAM, který typ paměti, která
existuje jen když tam je moc dodávané do počítače.
Takže když napíšete H-E-L-L-O, Enter klávesnice, H se děje v jednom
byte RAM, E se děje v další byte paměti RAM, jako je
zbytek slova.
Takže vzpomenout, co jsme byli schopni udělat, minule to bylo.
Nech mě jít dopředu a otevřít soubor že jsme nazvali string.c a vyvolat
že vypadal trochu něco takového.
Dovolte mi, abych skutečně vrá*** zpět a změnit to přesně to, co vypadá,
délka řetězce s.
>> Takže se na programu zde.
Jsme patří CS50 knihovnu tak že můžeme použít získat řetězec.
Použili jsme standardní io.h takže můžeme použít printf.
Proč jsme je string.h?
To byl nový v pondělí.
Takže jsme chtěli délku řetězce.
Str. leng.
Lidé se rozhodli před lety, buďme stručné.
Místo toho, volat to "délka řetězce," nazvěme ji "str Leng" a nechte
Svět je číslo, které se, a tak to je to, co dostaneme přístup k s string.h.
>> To je dobře známá.
To je dobře známá.
To je dobře známá.
Jedná se o málo nových.
V souladu 22 - a vrátíme se na to, ale nyní víme -
a vy byste jen vědět to z nutnosti přečtěte si dokumentaci, nebo pokud
jste věděl, že C již -
dostat řetězec může někdy pokazit.
V případě, že uživatel je skutečně nepřátelský nebo nespolupracující a on nebo ona jen
nemá nic psat na klávesnici nebo typy tolik na klávesnici, která
to přemůže paměti počítače, teoreticky dostat řetězec by se mohl vrá***
něco jiného, než řetězec znaků.
To by se mohl vrá*** speciální hodnotu s názvem NULL ve všech čepice, N-U-L-L, a to je
jen tzv. sentinel hodnotu.
Je to zvláštní hodnotu, která označuje, něco špatného se stalo v tomto případě.
To je absence řetězce.
>> Takže null jsem kontrolu jednoduše tak, dlouhý příběh krátký, str. leng a
další funkce, které přicházejí s C, je-li očekávají řetězec, ale předáte je
absence řetězce, předáte je NULL, počítač nebo program
se prostě zhroutí úplně.
To bude viset.
To se bude hodit do nějaké chybové hlášení.
Špatné věci se bude dít.
Takže i když je to stále není dobře definované -
to bude dávat větší smysl v týdnu nebo dvě - v řadě 22, je to jen
Příkladem vlastní obranné kontrolu chyb jen v případě, že jednou z
milionů se něco pokazí, na Alespoň můj program nebude padat.
>> Takže pokud to není rovná něco špatného, Mám to pro smyčce, a to bylo
kde jsme měli ten druhý nový kus syntaxe.
Mám pro smyčky iterace od nula, až do délky s.
A pak tady, byl jsem vytištění s držák i, ale proč já používám% c všechny
Najednou místo% s ještě i když s je řetězec?
Je to postava, ne?
S je řetězec, ale s něčím držák, Držák s i, kde i je nulová
nebo jeden nebo dva, to je individuální znak v řetězci, a proto pro
že printf musí být informován, že je to opravdu postava očekávat.
>> A pak si vzpomenout, co to udělal Program vlastně dělat?
>> Vytištěno to ve sloupcích.
>> Jo, přesně tak.
Je to prostě vytištěno slovo, které jsem psát, sloupec, jeden znak na řádku.
Tak uvidíme znovu.
Tak, aby řetězec.
Zpracovala OK. . / String.
Dovolte mi, abych zadejte H-E-L-L-O, Enter, a opravdu jsem si to, na každém řádku jeden.
>> Takže mi dovolte ještě jeden optimalizaci zde.
Pokud si myslíte o tom, zejména pokud jste naprogramováno, je tu
pravděpodobně neúčinnost v souladu 24.
Jinými slovy, není to nutně Nejlepší design.
Jednoduchá, alespoň jednou vás Pamatuješ si, co str Leng je, ale je to
dělat něco hloupého potenciálně.
Co by to mohlo být?
>> [Neslyšitelný].
>> Přesně tak.
Je kontrola délky s pokaždé, i když
H-E-L-L-O je vždycky se pět znaků.
Pokaždé, když se prostřednictvím této smyčky, pět nemění.
Mohl bych být i zvyšování, ale to, co je délka s na každém
opakování této smyčky?
Je to pět, to je pět, to je pět, a přesto jsem však ptám
otázku znovu a znovu a znovu.
Teď upřímně řečeno, počítač je tak zatraceně rychle, nikdo nevšimne
Rozdíl je v tomto případě, ale tyto druhy špatných rozhodnutí o návrhu může
začnou sčítat, pokud kompilátor sám Nesnaží se opravit to pro vás, který
obvykle to by neměl být v alespoň v přístroji.
>> Tak jdu na to.
Chystám se přidat čárku moje první proměnná, i.
Chystám se dát sám jiný variabilní, volat to n, jen tím, že
konvence pro čísla, a pak jsem bude přiřadit n hodnotu řetězce
délka s.
A pak jsem se změní můj stav se co?
Jdu změnit svůj stav se, když jsem je menší než n..
>> Takže teď, kolikrát jsem kontrolu délky s?
Jednou, ale to je v pořádku kontrolovat i proti n znovu a znovu, protože teď ty
hodnoty se skutečně mění.
Nyní se, jen vím, že kdykoliv volání funkce, je to trochu
*** hlavou, není dost odradit opravdu od někdy pomocí funkcí, ale
jistě, když je řádek kódu líbí - a linky budou mít
zajímavější zanedlouho - tam, kde je tu příležitost přemýšlet, jestli jsem
zadejte tento kód, kolik krát to bude provádět?
Začnete vidět v průběhu času Výkon vašich programů může
opravdu změnit.
>> Ve skutečnosti, jeden z problému sady máme udělal v minulých letech zahrnuje
provádění, jak si může stáhnout z týden nula, kontrola pravopisu, ale
Kontrola pravopisu, který je navržen pro podporu slovník 150.000 a
Slova, která jsme vám kluci.
Budete muset psát kód, který načte tato slova do paměti RAM, takže do
krabice, jako jsme viděli na obrazovce na okamžik lety, a pak stejně rychle jako vy
můžete, musíte být schopni odpovědět otázka formy, je toto slovo
chybně?
Toto slovo je chybně?
Toto slovo je chybně?
>> A něco takového, co máme udělal v minulých letech se obrátil ji do,
když na opt-in dobrovolném základě, soutěž druhů, přičemž
studenti, kteří používají méně RAM a méně času, méně cykly procesoru, skončí
vyvěrá na vrchol málo leader board nebo pořadí, které klademe na
Kurz je úvodní stránka, jak máme probíhala v letech minulých.
Takže znovu, zcela volitelný, ale mluví k návrhu příležitosti
které jsou před námi, jakmile začneme budova na vrcholu některé z nich
základní stavební kameny.
>> Takže mi dovolte vrá*** se k tomuto schématu pro jen na chvíli a odhalit málo
něco víc.
To je skutečně řetězec, a udělali jsme Výhodou několika knihoven,
standardní io.h která má -
>> Printf.
>> Printf, mimo jiné.
cs50.h, která se int a získat řetězec a tak dále, string.h, který
měl str Leng.
Ale ukazuje se, že je ještě jiný.
Upřímně řečeno, je tu spousta a spousta záhlaví Soubory, které deklarují funkce
pro knihovny, ale to je ctype.h ve skutečnosti bude poněkud
výhodné, protože jdu jít dál a realizovat jeden
jiný program zde.
>> Nech mě jít dopředu a otevřít něco Napsal jsem předem s názvem
capitalize.c, a pojďme se Podívejte se, jak to funguje.
Všimněte si, že jsem pomocí, v této verzi z toho tři známé soubory.
Všimněte si, že v řadě 18, jsem získání řádek textu.
Všimněte si řádku 21, jsem tvrdil, že Následující kód bude
vydělávat s, co uživatel napsal v roce, a jak to dělám, že?
No, já si beru -
poučení z minula -
Já jsem prohlásil i a n a iterace *** znaky v řetězci.
A co je to za blok kód v souladu 24 až 27.
dělá Laicky řečeno?
>> Malé písmeno zpět.
>> Přesně tak.
Je-li držák s i -, takže v případě, že i-tý charakter s, což je specifický
char v řetězci, je větší než nebo rovnající se malá písmena a -
připomenout, že dvojitý ampersand znamenají a -
a stejný charakter, s držák i, je menší než nebo rovnající se malá písmena Z,
to znamená, že to, nebo b nebo c nebo dot, dot, dot, nebo Z, což znamená, že
to je malá.
Co chci dělat v tomto případě?
No, můžu to udělat poněkud záhadně, ale
pojďme škádlit to od sebe.
>> Jdu zavolat printf, vytiskne% c protože chci dotisk tohoto
znak na obrazovce.
Já pak bude trvat s. držák já, i-tý znak s, a proč
dělám tento malý trik tady, malá minus kapitálu je?
Co to bude dát já obecně?
>> [Neslyšitelný].
>> Přesně tak.
Nemám moc nepamatuju -
to bylo 65 na kapitálové A. opravdu nemám Pamatuješ si, co malá je,
ale to nevadí.
Počítač ví.
Takže tím, že říká, malá znaménko mínus kapitálu, je to divné, že
odečte jeden char od druhého, ale jaké jsou znaky pod pokličku?
Jsou to jen čísla.
Takže bez ohledu na tato čísla, nechte počítač si to pamatovat
spíše než já člověk.
>> Tak malá minus kapitál je bude mi rozdíl.
To se stává, že je 32, a že by se případ malým b a kapitálu B
a tak dále.
To zůstává konzistentní, naštěstí.
Takže jsem v podstatě řekl, se malé písmeno, odečíst z té
standardní rozdíl, a že držák účinně Změny S i od
malá písmena, samozřejmě, velká, aniž bych opravdu mají myslet
o nebo si pamatovat, co byli ti, Čísla s nimiž jsme hovořili o tom, kdy osm
dobrovolníků přišla na pódium?
Nyní mezitím, v jinak, pokud to není malé písmeno jak je stanoveno
linkou 24, stačí ji vytisknout.
Já jen chci, abyste se nedotkli znaky, které byly
vlastně původně malá písmena.
>> Takže pojďme se podívat.
Udělat využít.
Zpracovala, OK.
. / Vydělat.
A dovolte mi psát v H-E-L-L-O malými písmeny, Enter.
A zjistíte, že je převeden na velká.
Nech mě to udělat znovu jiný slovo.
Jak se o D-A-V-I-D s prvním D vydělával jako jméno je obvykle?
Enter.
Všimněte si, že je stále platná.
To jen, že první výstup D beze změny přes které else.
>> Takže mějte na paměti, pak pár věcí zde.
Za prvé, pokud jste někdy chtěli zkontrolovat dva podmínky najednou, můžete jim a
spolu, jak jsme předpovídali.
Můžete porovnat znaky tímto způsobem a účinně léčit znaky jako
čísla, ale upřímně řečeno, je to tak zatraceně mystický Nikdy nebudu pamatovat
jak přijít s tím od začátku bez uvažování přes to na docela
trochu času.
>> Nebylo by hezké, kdyby někdo tam napsal funkci nazvanou je
snížení, které by mohly odpovídat za mě true nebo false, tento znak je malá?
No naštěstí, kdo napsal ctype.h udělal přesně to.
Nech mě jít sem a přidat ctype pro c typy, a teď nech mě jít sem dolů a
přepsat tento řádek takto.
>> Takže pokud se to nazývá, je nižší, tvrdím, je držák i, pak jdu smazat
tyto dva řádky dohromady.
Takže teď někdo jiný, doufám, napsal s názvem funkce je nižší, a to
ukázalo se, že to udělali, a oni deklarovali že uvnitř ctype.h.
A teď jdu nechat linku 27 sám, jdu nechat linku 31
sám, ale všimněte si, jak moc jsem zpřísnila svůj kód.
Nyní je čistší.
Je to méně obtížné prohlédnout protože se funkce, je navíc
tak nádherně jmenoval to jen dělá to, co říká.
>> Takže teď jdu zachránit to.
Chystám se oddálit.
A stejně jako v Scratch byste mohli mít Booleovské operace, logické hodnoty true nebo
false, to je přesně to, co je nižší skutečně vrátí.
Dovolte mi, abych překompilovat.
Dovolte mi, abych re-run.
A teď zkusme to znovu, H-E-L-L-O, Enter.
To je docela dobrý.
A zkuste to znovu, ujistěte se, že jsem se nezničí něco vymyslet.
To je aktivováno stejně.
>> Ale to není dost dobrý, protože Další věc, která mě nikdy
vzpomenete, pokud pracuji přes to opravdu opatrně na, řekněme, papír
to zatraceně řádek.
Nebylo by hezké, kdyby tam byly volána funkce na horní?
Tak to dopadá, že je v ctype.h stejně.
Chystám se jít dopředu a zadejte -
dovolte mi, abych tento řádek zpět.
Místo toho tady, nech mě jít napřed a říkají, nahrazovat% C
Výsledkem volání této funkce Horní na i-tém charakteru s.
A teď všimnete, že to stále trochu vyvážit.
Musím sledovat, kolik závorky jsem otevřít a zavřít.
>> Takže teď je to ještě čistší.
Nyní je tento program stále lepší a lépe navržené pravděpodobně proto, že je
mnohem, mnohem čitelnější, ale Není to pojďme napravit.
Udělat využít.
. / Vydělat.
H-E-L-L-O. Pojďme spustit znovu, D--V-I-D. OK, takže jsme stále v
docela dobré kondici.
>> Ale teď k horní.
Navrhuji, že je tu ještě jedna zjemnění můžeme dělat, že by bylo
opravdu pěkné, mohlo by to opravdu dotáhnout do tohoto kódu, a opravdu nám pět
z pěti pro návrh, například.
Co by bylo hezké, jak se zbavit?
No, podívejte se, jak zatraceně dlouhé tento blok Kód je jen něco jednoduchého.
>> Nyní, jak stranou, protože můžete mít vidět v super části minulý
víkend, nemusíte nezbytně potřebuje, Složené závorky, když stačí mít jeden
řádek kódu, i když jsme navrhli držet je tak, že je mnohem
jasnější, jako v Scratch je ve tvaru písmene U bloky, co je uvnitř pobočky.
Ale nebylo by to bylo hezké, kdyby na horní, když vzhledem k jeho vstup, otočil se do
velká písmena, pokud tomu tak není, a to, co by bylo úžasné v opačném případě, pokud
je to už velká?
Stačí projít přes a nechat to být.
>> Takže možná, že to dělá.
Mohl bych to zkusit, a jen doufám, , že nemá, ale dovolte mi, abych
představit jednu věc.
Namísto použití tohoto zabudovaný terminál Okno se zde připomenout, že
Toto náměstí černá ikona vám větší okno terminálu, že mohu plný
obrazovky, pokud chci?
Tak to dopadá, že jsou nějak podivně jmenoval, ale je tu nazývají věci
manuálových stránek, manuálové stránky, muž v krátkosti, a já k nim přistupovat podle
psaní muž -
co chci psát na stroji?
Člověk do horní.
>> A teď zjistíte, jestliže existuje funkce uvnitř počítače, v
V tomto případě je přístroj, který je právě operační systém Linux, bude to
aby mi poněkud záhadný soubor výstup, ale zjistíte, že v průběhu času
vždy je formátován do značné míry stejné, takže začnete to zvyknout.
Všimněte si, v horní části na horní a zřejmě je stejný dokumentace
na snížit.
Ten, kdo psal, že to bylo nějaké řezání rohy a dát to všechno na jedné stránce.
Účelem těchto věcí "v život je převést
Dopis horní nebo malá písmena.
>> Všimněte si, že v Synopsis manuálové stránky Učí mě, co mám soubor
zahrnout používat tuto věc.
To mi dává podpisy na nich funkce, a to jak z nich, a to i
když jsme teď jen péče o jednom.
Zde je nyní popis.
Chcete-li horní převádí dopis c velká, pokud je to možné.
>> Stále není to poučné, ale dovolte mi, abych nyní podívat pod návratovou hodnotu, věc,
který je předán zpět.
Takže vrácená hodnota je, že převedeny písmeno nebo c, pokud
konverze nebylo možné.
Co je to c?
>> Původní charakter.
>> Původní charakter a víme, že by opět stoupá do
synopse, a ten, kdo to napsal Funkce se rozhodli, že vstupní
se na horní a spodní, je jen libovolně se měl jmenovat c.
Mohli by říkali, že většina něco chtějí, ale stále to
jednoduché c.
Tak jsem konzultovala manuálovou stránku.
Tato věta ujišťuje mě, že pokud to není malé písmeno, je to
bude dej mi C, což je perfektní, což znamená, že můžete zbavit
můj jiný stav.
>> Tak nech mě jít zpátky do gedit, a Nyní mi dovolte to.
Jdu kopírovat mé printf prohlášení.
Chystám se jít dopředu a doprava uvnitř smyčky pro tisk, které se, a získat
zbavit se tohoto celku, pokud by konstrukce.
Nebyl to špatný nápad, a bylo to velmi Kolik správné av souladu s
všechno, co jsme kázali, ale prostě není nutné.
Jakmile si uvědomíte, některé knihovny funkce existuje, že někdo jiný
psal, nebo možná jste napsal jinde souboru, můžete jej použít, a opravdu
začít zpřísnit kód.
>> A když říkám věci jako dobrém stylu, skutečnost, že se tato osoba nazývá
pracovat na horní, nebo dříve, je nižší je nádherně užitečná, protože
jsou velmi popisné.
Ty by nechtěl volat funkce x a y a z, které mají
mnohem, mnohem menší význam.
Jakékoliv dotazy týkající se této série vylepšení?
>> Takže stačí tedy jeden z takeaways je dokonce jako svůj vlastní problém
set - možná problém nastavit jednu, ale Určitě P nastavit dva a kupředu, dokonce
když jsou správně nemusí nutně znamenat, že jsou perfektní jen
ještě, nebo velmi dobře navržené.
To je další osy začít přemýšlet o tom.
Takže to byl řetězec uvnitř vašeho paměť počítače, ale pokud máte
celá parta postav jako H-E-L-L-O v paměti RAM, a předpokládejme,
které jste v programu volat získat řetězec několikrát taková, že
zavolejte si řetězec jednou, pak zavolejte si řetězec znovu.
No, co se děje na se stalo v průběhu času?
>> Jinými slovy, pokud máte linku kód, i když z kontextu, jako je
string s dostane -
pojďme na to.
String name rovná se řetězec.
Takže předpokládám, že řádek kódu je určena požádat uživatele o jeho nebo její jméno.
Tato další řádek kódu je chtěl zeptat, uživatel pro jeho nebo její školy, a
Tato další řádek, a tak dále.
Předpokládejme, že jsme pořád ptají uživatele pro další a
další a další řetězec.
Chystají se zůstat v paměti ve stejnou dobu.
Jedním z nich je nebude hadry druhé.
Škola je nepřepíše jiný.
Ale kam se všichni skončí v paměti?
>> No, pokud začneme kreslit na obrazovku, které můžeme použít tuto věc
zde jako tabuli, je-li tato černá obdélník představuje můj počítač je
paměť, budu libovolně začít rozdělit ji na malé čtverečky,
z nichž každá reprezentuje jeden bajt paměti.
Upřímně řečeno, pokud máte gigabajty paměti RAM v těchto dnech, máte miliardu bajtů
paměti ve vašem počítači, takže miliarda těchto čtverců.
Takže stačí říct, to ve skutečnosti není v měřítku.
>> Ale my jsme mohli držet čerpání všech těchto zjevně nejsou v měřítku čtverce, a to
souhrnně představuje mé paměti počítače.
Teď budeme prostě tečka, tečka, tečka.
Takže jinými slovy, když jsem teď vyzve Uživatel s get řetězce, aby mi
řetězec, co se stane?
Pokud uživatel zadá "ahoj", která končí v H-E-L-L-O. Ale předpokládejme, že
Uživatel pak druhy uvedené v -
Vlastně bych neměl dělat Dobrý den, protože se ptáme
je jejich názvy.
Tak pojďme zpátky, když to zvládnu.
>> Takže když jsem typ D-A-V-I-D pro mé jméno, ale připomenout, že druhý řádek
Kód byl dostat řetězec znovu získat jejich školu.
Kde je, že slovo, které uživatel druhy uvedené v jít dál?
No, možná to bude jít do H-A-R-V-A-R-D. Takže i když jsem
vypracován jako dvou řadách, je to jen celá parta bytech ve vašem
počítače RAM.
Je tu problém teď, protože teď, když jsem pomocí RAM v tomto velmi rozumné
ale trochu naivní způsobem, co můžete není zřejmě rozlišovat?
Tam, kde jeden začíná a kde jeden konec, ne?
Jsou trochu rozmazání dohromady.
>> Tak to dopadá počítač to nedělá.
Dovolte mi vlastně můžete vrá*** v čase a několik znaků a místo Harvardu
bude ihned po uživatelským jménem, uživatel skutečně dostane, za
scény, speciální znak vložil
Počítač pro něj.
/ 0, jinak známý jako znak NUL nepříjemně tzv. N-U-L, ne
N-U-L-L, ale píšete to jako / 0.
Je to jen všechny nulových bitů je marker mezi prvním slovem, které uživatele
napsal a druhý.
>> Takže Harvard vlastně teď končí jako je sekvence znaků
a ještě jedna / 0.
Takže jinými slovy, tím, že tyto ověřovací hodnoty, osm ***ící nula
bity, si nyní můžete začít rozlišovat jeden znak z druhého.
Takže celou tu dobu, co bylo "ahoj" je vlastně "ahoj" s / 0, a
Prozatím by se tam velmi dobře být trochu více paměti RAM
uvnitř počítače.
>> Nech mě udělat jednu věc nyní.
Ukazuje se, že všechny z těchto čtverců jsme byli kreslení, jsou, ano,
řetězce, ale obecně, tyto věci jsou pole.
Pole je jen kus paměti to je zády k sobě k sobě k sobě,
a obvykle používají řadu způsobem tohoto hranatá závorka zápisu.
Takže budeme vidět, jak se trochu v průběhu času, ale dovolte mi jít dopředu a
otevřít, řekněme věku.
A všimněte si, co s nimi můžeme dělat tytéž triky, malé
trochu syntaxe zde.
>> Takže v řadě 17 tohoto programu - skutečnosti, dovolte mi, abych nejprve spustit program
a tak můžeme vidět, co tohle dělá.
Zavolám, aby na věky zkompilovat tento program.
. / Stáří.
Kolik lidí je v místnosti?
Nazvěme to tři.
Věk první osobě?
18, 19, a 20.
A teď trochu směšně, já jen udělali program, který ages ty
tři lidé.
>> Takže je tu jasně příležitost pro nějakou zábavu aritmetiky zde.
Naštěstí, matematika je správná.
18 šel do 19, 19 šel do 20 a tak dále.
Ale to, co opravdu znamená být Ilustrativní je, jak jsme ukládání
věk těchto tří lidí.
Dovolte mi přiblížit, co je tady děje.
>> Takže v první řadě, by měly tyto první pár řádků je stále dost známé.
Já jsem jen výzva ke zvolení počet lidí v místnosti.
Pak jsem pomocí dostat int a dělat, když se to znovu a znovu a znovu.
Viděli jsme, že vzor dříve, ale linka 27 je nový a docela
užitečné, a bude se stále užitečné.
Všimněte si, že to, co je v souladu 27 je, že jsem se zdají být prohlášení
int tzv. věky, ale počkejte.
Není to jen int věku.
Tam je tato hranaté závorky, uvnitř které je n.
>> Takže držák n v této souvislosti, nikoliv uvnitř printf prohlášení zde, ale
V této jediné lince 27, tento řádek řekl, dej mi n INT, z nichž každá
je typu int.
Tak to je kbelík, abych tak řekl, z, v tomto případě tři celá čísla zpět do
zády k sobě, takže jsem skutečně má tři proměnné.
Alternativou, aby se jasné, že je to.
>> Pokud bych chtěl nejprve studenta věk, mohl bych to udělat.
Kdybych chtěl druhý studenta věk bych mohl udělat.
Kdybych chtěl třetí studenta věk, mohl bych to udělat.
A nedej bože potřebujeme každého z nás věk v této místnosti -
Myslím, že je to sakra hodně kopie, vložit znovu a znovu a znovu.
A navíc, když jsem zkompilovat tento program, pokud další student chodí přes ven
ze dveří, nyní moje číslo proměnných je nesprávné.
>> Takže to, co je hezké o pole je Jakmile se začnete cí*** sami
kopírování a vkládání, je pravděpodobné, že je to není nejlepší přístup.
Pole je dynamická potenciálně.
Nevím dopředu, kolik lidí se bude v místnosti,
ale vím, že musím n z nich, a budu zjistit, n, když přijde čas.
Tento řádek kódu nyní znamená, dej mi kus paměti, která vypadá takto
kde počet schránek na obrazovce je zcela závislá na n které
Uživatel napsal palců
>> Takže teď zbytek tohoto programu je vlastně docela podobné tomu, co jsme
Jen jsem se znaky.
Všimněte si, mám pro smyčce začíná v řádku 30.
Takže hned po jsem si pole, jsem přecházet z y rovná nule až na n.
Jen jsem to poučné printf zprávy jen říkám, dej mi věk
osoby #% i tak číslo jedna, číslo dvě, číslo tři.
A proč jsem to udělal?
Upřímně řečeno, lidé raději počítat od jedné na nahoru, zatímco počítačoví vědci,
nuly nahoru.
počítačoví odborníci nebudou použít tento druh programu, takže jsme
bude jen začít počítat v jednom, jako normální lidi.
>> A nyní v souladu 33, všimnete mírně jiný kus syntaxe.
I-tý věk v té proměnné typu pole dostane int.
A teď konečně, je to jen aritmetický sem.
Rozhodl jsem se v samostatné smyčce tvrdí, nějaký čas ubíhá, a nyní v této
samostatná smyčka, tyto řádky spustit.
>> Ode dneška za rok, člověk i bude i let, ale oznámení není
proměnné i.
To je nyní% i pro int.
A oznámení jako první zástupný symbol, I zapojte i plus 1, takže počítáme jako
normální člověk.
A pak se za hodnotu jejich věku, pro i let, beru ages držák
i - a proč to dělám a jeden tady?
Prostě věku.
Je to moje hloupá volba programů.
Prostě ve věku jednoho roku.
Mohl bych psát v jakékoliv číslo, které Já vlastně chci tam.
>> Takže co to vlastně všechno relevance tady?
No, dovolte mi vlastně listovat sem a namalovat obraz
toho, co leží před námi.
Co budeme dělat s naší další Problém nastavit dva se pustily do
svět kryptografie.
Takže to je řetězec znaků, takže sekvence z více znaků, a to, co
to říká?
Není to v online verzi ze snímků.
>> Takže tvrdím, že to se rovná to, hloupá reklama od mnoha let
před který by mohl vyvolat jeden z jeho původu.
Tak to je příklad šifrování nebo šifrování.
Ukazuje se, že pokud chcete ve skutečnosti poslat informace nebo sdílet
informace s někým bezpečně jako zprávy, jako je tato, můžete
vyškrábat dopisy.
Ale obvykle jsou slova nejsou kódovány náhodně.
Jsou deionizovaná nějakým způsobem nebo změnit nějakým způsobem, aby - oops.
To je zábava spoiler pro příště.
>> Takže si můžete zmapovat, co je zřejmě O všímat B., který seřadí
kapitalizace ručiček.
Zřejmě r e se stane.
Zdá se F-H-E-R se S-U-R-E. Tak Ukazuje se, že je mapování, a
V tomto případě je to dost hloupý mapování, jestli má někdo na to přišel?
To je něco, co nazývá Rot 13, 13 Otočit.
Je to nejhloupější šifrování mechanismy, protože to doslova
přidává 13 na každého z písmen, hloupý v tom smyslu, že pokud jste právě
mít trochu volného času na ruce a tužka, nebo si jen myslím, že
až v hlavě, můžete zkusit všechny možné obrázky - jeden, dva,
tři, tečka, tečka, tečka, jen 25 otočte celou abecedu a
nakonec budete zjistit, co tato zpráva je.
Takže pokud jste něco takového v základní školy předávání zpráv do
nejlepší přítel, pokud vaše základní školy Učitel jen pročíst
zprávy a brutální nuceni řešení, Možná jste dostali
odpověď, že.
>> Teď samozřejmě, v reálném světě, kryptografie je složitější.
To je úryvek textu, který je počítačový systém, který má uživatelské jméno a
hesel, jak téměř všichni z nás dělají, a To je to, co by mohlo vaše heslo
vypadat, pokud je uložen na pevném řídit, ale v zašifrované formě.
To není jen rotace dopisů, Je B a B je C. To je
mnohem sofistikovanější, ale používá co je obecně známé jako tajný klíč
kryptografie.
Tento snímek vypráví následující Příběh s několika ikonami.
>> Na levé straně, máme to, co zavoláme prostý text.
Ve světě kryptografie, prostý Text je původní zprávu
psaný v angličtině nebo francouzštině nebo jazyka vůbec.
Pokud chcete zašifrovat, budeme předávat je obrazově přes visacím zámkem, takže
některé druh algoritmu, některé funkce nebo program, který někdo napsal
že se pere písmena doufejme více komplikovaně než pouhým přidáním 13
ke každému z nich.
>> Co získáte z tohoto procesu, Uprostřed se nazývá cyphertext.
Tak trochu sexy slova.
To jen znamená, že je šifrována verze prostý text.
A pouze pokud máte stejný tajemství, 13 nebo minus 13, jste schopni
dešifrovat zprávy takhle.
>> Takže problém nastavit dva, mezi věcmi, budete dělat, když v Hacker
Edition, budete muset napsat kód bezva tato hesla, přijít na to,
co jsou zač a jak byly zašifrované, ale my vám trochu
z vedení podél cesty.
V Standard Edition, představíme pár šifer, šifrování
mechanismy, jeden s názvem Caesar, jeden volal Vigenere, které jsou stále
rotační šifry, kdy se stane něco, B se stává něčím, ale
musíte to udělat programově protože tam bude skutečně tajná
klíč zúčastněných, z nichž je obvykle číslo nebo klíčové slovo, které pouze
odesílatel a příjemce těchto zprávy by měl pochopit.
>> Nyní, to vlastně má inkarnace v reálném světě.
Toto, například, je málo orphan Annie je tajné dekodér prsten, a
může skutečně realizovat tyto rotační šifry -
Se stává něčím, B se stává něco - s několika koly,
jeden na vnější straně, druhá uvnitř taková, že pokud otočíte kolečkem nebo
kroužek, můžete skutečně zarovnat dopisy s různými písmeny,
získání tajného kódu.
A tak jako cliffhanger pro dnešek, co jsem myslel, že to je trochu
návrat, že pokud zapnete televizi 24. prosince, můžete sledovat
Film ad nauseum pro 24 hodin v řadě.
Ale pro dnešek, otevřu to tady a dá nám jen dvě minuty z
pedagogicky relevantní Vánoční příběh s malým chlapíkem jménem Ralphie.
>> [PŘEHRÁVÁNÍ]
>> -Ať už je to známé všem a různé, že Ralph Parker je jmenován
člen Malý sirotek Annie tajemství kruh a je oprávněn ke všem
se ctí a výhody vyskytující se na ně vztahují.
>> -Podepsáno, Little Orphan Annie.
Spolupodepsal, Pierre Andre inkoustem.
Vyznamenání a výhody již ve věku devíti let.
>> [Křičel na rozhlasových]
>> Pojď, jdeme na to.
Nepotřebuji All That Jazz o pašeráci a piráti.
>> -Poslouchejte zítra pro uzavření dobrodružství černý
pirátská loď.
Nyní je čas na tajemství Annie Zpráva pro vás členy
tajného kruhu.
Pamatujte si, děti.
Pouze členové Secret Circle Annie umí dekódovat Annie tajnou zprávu.
Pamatujte si, že Annie je závislá na vás.
Nastavit piny B2.
Zde je zpráva.
12., 11, 2 -
>> -Já jsem ve svém prvním tajné schůzce.
>> -25, 14, 11, 18, 16 -
>> -Pierre byl ve velké hlasové dnes.
Jsem poznal, že z dnešní zprávy bylo opravdu důležité.
>> -3, 25.
To je zpráva od Annie sama.
Pamatujte si, že nikomu to neříkejte.
>> -90 Sekund později jsem v jediné místnosti v domě, kde devítiletý chlapec
mohli sedět v soukromí a dekódování.
Aha, B. jsem šel na další.
E. První slovo je "být." S. Přicházelo to nyní snazší.
U. 25.
To je R.
>> -No tak, Ralphie.
Musím jít.
>> -Hned jsem dole, mami.
Gee svist.
>> -T. O. Ujistěte se, že.
Ujistěte se, že to, co?
Jaký byl malý sirotek Annie snaží říct?
Ujistěte se, že to, co?
>> -Ralphie, Randy má jít.
Prosím vás vyjde?
>> -Dobře, mami.
Budu hned zpátky.
>> -Byl jsem stále blíž do současnosti.
Napětí bylo hrozné.
Co to bylo?
Osud planety může visí na vlásku.
>> -Ralphie, Randyho musím jít.
>> -Hned jsem ven křičet nahlas.
>> -Už tam skoro jsme.
Prsty se mi letěl.
Moje mysl byla ocelová past.
Každý pórů vibroval.
To bylo skoro jasno.
Ano, ano, ano, ano, ano.
>> -Ujistěte se, že pít Ovaltine.
Ovaltine?
Mizerný reklamu?
Ten hajzl.
>> [END PŘEHRÁVÁNÍ]
>> Reproduktor 1: Toto je CS50, a že bude problém nastavit dva.
Uvidíme se příští týden.
>> SPEAKER 2: Na dalším CS50, se to stane.
>> Reproduktor 1: Takže jedno téma, nemáme Podíval se na potud je
že funkčních ukazatelů.
Nyní, ukazatel funkce je jen adresu veřejné
funkce, ale stejně jako -
syn -