>> ROB: Dobře.
Vítejte v první části.
Jsem Rob.
>> JOSEPH: Já jsem Josef.
>> ROB: Takže budeme ponořit dovnitř
První věc, mluvit o tom, Je zařízení.
Takže doufejme, že většina z vás má stáhli již.
Ale můžete vidět podle pokynů na cs50.net/appliance.
Ach bože, teď jsem rozpačitý.
Pořád slyším.
>> JOSEPH: Wow, to zní jako to je dezorientovaný.
>> ROB: Takže někteří lidé mají problémy s ním, takže se nemusíte čekat, až
last minute problému nastaven na pokusit vyřešit Appliance a
zjistil, že to nefunguje.
>> JOSEPH: A když něco nefunguje a budete potřebovat pomoc, můžete přejít na
cs50.net/discussion kde jsme mít fórum, kde se
můžete psát své dotazy.
A my se k nim nakonec.
>> ROB: Dobře.
Tak tohle je to, co zařízení vypadá.
Opět, je to jen zcela oddělené operační systém běží v rámci
bez ohledu na operační systém běží na vašem notebooku.
A hlavní věcí, které budete používat je gedit.
Tak doufejme, že to má již stala známou stránky.
Terminál.
>> A můžete také spustit Chrome uvnitř spotřebiče.
Tam bylo několik lidí, kteří hlásili k internetu
nefunguje v Appliance.
A někteří z nich prostě předpokládat, že se nepředpokládá, že
internet v Appliance.
Ale ano, tam se předpokládá, být internet.
>> Řeknu to hned, ale to není opravdu nic neznamená.
Pokud internet nefunguje, To je to, co mají tendenci potřebovat
spustit ho opravit.
Pokud máte problémy internetu, ne Pamatuju si to, stačí poslat ho na
Diskutujte, a budeme říkat, že běží.
Ale internet je třeba pracovat.
>> Takže jediná věc - jo, nic jinak je opravdu důležité.
Ale já jsem jen chtěl poukázat na to, že -
viz v tomto pravém dolním rohu.
Takže každý z vašich zařízení by mít IP adresu.
A později v semestru, to IP adresa bude vhodnější, když
pracujete na webové p-set, protože budete mít přístup
Webové stránky, na kterém pracujete ze svého místní Chrome pomocí této IP adresy.
>> Ale to, co jsem chtěl použít IP adresu pro - a nemusíte to dělat, jsem
Jen chci poukázat na to -
je tady.
Tak tohle je okno terminálu na můj Mac, to není
Spotřebič vůbec.
A můžete se podívat do toho, co Tento příkaz dělá.
Ale já jdu na SSH přímo k mému Appliance.
Já nevím, co je IP.
>> JOSEPH: 168 -
>> 168.224.1.0.
>> ROB: Takže jakmile jsem udělal s tím, přihlásit
Nyní, v podstatě, to je totožný s okno terminálu v mém Appliance.
Takže jsem skoro nikdy skutečně odpracované zevnitř spotřebiče samotného.
Vždycky jsem si to běží v pozadí minimalizovaném
a SSHed do něj.
>> Problém s tímto je, že nebudete , aby bylo možné použít gedit snadno
přímo z tohoto.
Ale pokud chcete být opravdu v pohodě hacker, pak byste měli zvyknout na
příkazového řádku, textový editor stejně.
Takže Vim a Emacs a Nano, všechny z nich jsou různé alternativy.
Nano má tendenci být nejjednodušší.
A myslím, že to nemá žádný zvýrazňování syntaxe.
Oh, ne, je to zcela dělá.
Takže můžete použít Nano, protože že jeden je docela snadné.
>> Vidíte všechny tyto příkazy ve spodní části.
Tato malá mrkev symbol.
Pokud jste ještě neviděli, budete si muset vybrat pravděpodobně vidět to teď hodně.
To obecně znamená, že ovládací mrkev, jako dolní levé části klávesnice
řídicí znak.
Tak tady to mi říká, sem -
oh, to není oříznut, jestliže jsem zoom palců
Takže Control, X je, jak Chystám se ukončit.
A to říká, že může zasáhnout Y pro Ano, pro ukládání, N pro Ne.
Tak to je Nano.
>> Vim a Emacs mají tendenci být o něco více složité a ohromující.
Ale můžete se na to zvyknout, a pak se budete milovat.
Tak to je to.
>> JOSEPH: Není potřeba to udělat.
>> ROB: Jo.
Ty jsou zdarma k použití gedit pro Zbývající část semestru.
Takže nějaké otázky spotřebič související?
Nebo máte nějaké myšlenky na to, co jiného Je třeba mluví o
spotřebič?
Ano.
>> SPEAKER 1: Když SSHed do své věc, bylo heslo Crimson?
>> ROB: Jo.
Heslo pro skoro všechno v přístroji se děje
být Crimson.
>> SPEAKER 2: Instalace jako skutečný IDE na zařízení, bude to fungovat?
>> ROB: Dovedu si představit, Eclipse má mít Fedora verze, v tom případě, ano,
můžete to udělat.
Je to asi není opravdu stojí za to.
>> SPEAKER 2: OK.
Takže je to asi jednodušší, když jsem chtěl, aby používat Eclipse, stačí použít nativní a
pak nahrát do -
>> ROB: Oh, to je také asi jednodušší.
Ale můžete si to pracovat uvnitř spotřebiče.
>> JOSEPH: A pro kameru, otázka bylo, můžete nainstalovat další
IDE uvnitř spotřebiče?
>> ROB: Eclipse je Příkladem IDE.
Nějaké další otázky spotřebičů?
Dobrá.
>> Takže nyní budeme pohybovat na příkazovém řádku věci rozhraní související, tak CLI.
A opět, já jsem prostě jít do práce v zde, protože je totožný s
práci v terminálovém okně uvnitř spotřebiče.
Jak to, že písmo hledáte?
Je to dost velká?
Dobrá.
>> Takže existuje mnoho příkazů, které měli byste si docela používá pro
v průběhu semestru.
Velký dva pro navigaci jsou ls, seznam Soubory v tomto adresáři, a
cd, tak změňte adresář.
Tak jsem se může změnit na plochu a pak velmi časté vzor je cd na
adresáře a okamžitě ls to, co je v adresáři.
>> Lidé také často neuvědomují, že dokončení Tab je věc.
Tak jako CD, VH, a pak jsem narazila Tab.
Téměř nikdy jsem psát z Celá věc.
A pak když jsem držet bít Tab znovu, bude to automaticky
spustit výpis na mě.
Takže můžu cd vhosts, místního hostitele.
A to jen tak -
V případě, že jste slyšeli termín předtím, adresář je jen jiné slovo
pro složku.
Takže teď, pokud jste vidět -
Pojďme přinést, že na vrchol.
>> Takže teď, pokud vidíte v závorce, můžete vidět malé vlnovka, lomítko, vhost,
lomítko, místního hostitele.
Takže vlnovka, která se týká do mého domovského adresáře.
Je to adresář, který jste , když jste SSH palců
Je to adresář jsi, když můžete otevřít terminál.
Je to místo, kde začnete.
A tak jsem uvnitř mého domovského adresáře, a já jsem uvnitř VHOST
adresář uvnitř mého domovského adresáře.
A pak jsem uvnitř místní hostit adresář uvnitř, že.
>> Takže některé další užitečné věci s cd -
nebo dobře, obecně, tak dot vždy odkazuje na aktuální adresář.
Cd, tečka je docela bezcenný příkaz.
Ale to se mění na aktuální adresář.
Užitečnější jedna, pokud jde o cd je tečka, tečka, což je
stačí jít do jednoho adresáře.
>> A všimněte si, že tyto -
Chci říct, aliasy, ale tito symboly, tečka, a tečka, tečka, ty práce
pro skoro jakýkoli příkaz, kterou jste bude myslet na běh.
Tak jako cd je pravděpodobně, kde budete použití nejvíce, ale ty nejsou
věci, které prostě cd rozumí.
Je to v podstatě něco, co vaše celá příkazového řádku chápe.
Mnoho programů pochopit tečka a tečka, tečka.
>> Takže další užitečné ty - CD, pomlčka.
Tak, že se chystá přivést mě poslední adresář, který jsem dovnitř
Takže někdy budu dělat něco jako, oh, já pracuji tady.
A vidím nějakou chybu s něčím, a Já půjdu prozkoumat ji bude
nějaký náhodný adresář někde.
A mám dělat, když to nebudu vědět, dovolte mi, abych tam.
To bude.
Tak jsem dělat, co chci v tomto adresáři.
Bla, bla, bla, bla, bla.
A byl jsem rád, v pořádku, chci vrátit se na místo, kde jsem byl.
cd, pomlčka, a to mě přivádí zpátky.
>> Tak jdu hodit hodně z nich na vás dnes.
Nemyslím, že budete pamatovat všechny z nich.
Je to trochu jen vím, , že existují.
A pak později, když jste jako, hmm, chci se vrátit do
adresář, který jsem byl jen na, ach, počkejte, něco takového existuje.
Nemusíte jen zadat celý znovu adresáři.
>> JOSEPH: A nakonec budete jen používat znovu a znovu, a
to bude stát svalové paměti.
>> ROB: Jo.
Tak, jak už jsem řekl dříve, že tilda je váš domovský adresář.
Takže můžu cd, vlnovku.
Ale já nemám ani na to, že když jsem -
Vrátím se do adresáře, takže není to zbytečné příklad.
Ale když jsem to CD, které je rovněž stejně jako, jít do mého domovského adresáře.
Já Command, K.
>> JOSEPH: Můžete také zadat jasné, slovo, a měl by si ji pročistil.
>> ROB: A myslím, že i ovládání, L také dělá.
Takže mnoho různých způsobů.
Myslím, že tam jsou některé rozdíly, pokud jasné a řízení, L bude jen
Opravdu ji zatlačte na horní a Mohu stále posouvat zpět.
Příkaz, K doslova ničí všechno, a vy
Nelze rolovat zpět nahoru.
Přinejmenším, to je jak to funguje v iTerm2.
Nevím, jak ostatní věci -
oh.
>> S SSHing, takže pokud jste na Windows, budete muset stáhnout PuTTY
aby se SSH, protože Windows není mají jako vestavěné SSH nástroje.
Od Macs, můžete jen SSH přímo z terminálového okna.
OK.
Otázky?
>> S ls, takže něco si zvyknout u většiny z těchto příkazů je -
dobře, budu jen dělat jeden.
Kč, pomlčka, l.
Takže pomlčka, l je to, co budeme volat vlajku ls.
A mnoho z těchto příkazů mají vlajky které můžete předat na ně.
Takže v tomto případě, pomlčka, l je vlajka , který říká to, aby mi v plné
výpis všech informací z těchto souborů.
>> Takže zde vidíme, že desktop je změněna 30. července v 12:54.
Stažení byla změněna na 6. září.
Jedná se o aktuální velikosti a bajtů těchto adresářů.
Nemusíte rozumět To vše.
>> Tohle na levé straně, tyto drwx to, že bude mnohem více relevantní
později, když budete muset vypořádat s -
že má co do činění s tím, kdo má oprávnění podívat se na tyto soubory.
A tak pokud jste nebyli jediným uživatelem na tento počítač, měli byste být schopni
řekněme, OK, já měla být jen jedna možnost podívat se na tento soubor, nebo jsem
bude, aby všichni podívat se na tento soubor.
Takže někdo jiný na mém počítači Můžete se podívat na tento soubor.
Já ani nevím, co to - co to dělat?
>> JOSEPH: Nejsem si zcela jist, opravdu.
>> ROB: No nápad.
>> JOSEPH: Ale pokud nevíte, že je užitečné příkaz, který můžete použít
aby ti, co výstup znamená.
A pokud jste typ člověka před příkazem -
takže M-A-N. ROB: Man.
Takže člověk je ještě jeden to je velmi užitečné.
A člověk, ls.
Takže manuálové stránky, které mají obě příkazy, které budete používat
na příkazovém řádku, a mají také funkce, které budou relevantní
s C. Takže si může člověk -
a já jsem ignoroval 3.
Ale člověk 3 printf se chystá přivést až C verze printf.
Ale když jsem si to člověk printf, to je jít na vyvolání příkazu printf
co se děje na příkazovém řádku.
>> Takže člověk, ls.
Manuálové stránky může být docela ohromující.
Tady, když uvidíte tento zápis všech těchto příznaků, které ls
chápe.
Takže pokud půjdeme do pomlčka, l, a -
Jdu hodit to na vás.
Ale chcete-li hledat, chcete- první narazí na otázku
Značka nebo tlačítko lomítko.
Tak lomítko.
>> A pak můžu hledat na co chci.
Tak jdu na lomítko na přístrojovou, l.
A bylo to.
Takže použít dlouhý formát výpisu.
To nepomůže mi přijít na to, co že konkrétní sloupec znamená, ale já
Předpokládám, někde tady to by vysvětlovalo, že.
Takže používat manuálové stránky pro všechny příkazu že nemusíte hned pochopit.
>> Jsem si jistá, že je to možné, i člověk, člověk.
Rozhraní na on-line referenční příručky.
Jo, ještě jedna poslední, že je to možná trochu je relevantní ls, pomlčka,.
Takže výpovědní lhůty, pokud jsem to ls, Já si těchto pět souborů.
Pokud se mi ls, pomlčka,, I získat mnohem více souborů.
Takže společnou věc mezi všemi těmito Nové soubory je tečka předem.
>> Takže konvence je, že soubor, který začíná se tečka skryty.
Takže nechcete vidět, že soubor, Nechci, aby se to bordel s
Váš výpis adresáře.
Je to pouze tehdy, když výslovně požádat, v pořádku, ls, pomlčka,, ukaž mi.
Platí pro všechny soubory, včetně skrytých ty.
Takže některé další příkazy.
Oh, dotazy na tomto místě?
Ano.
>> SPEAKER 3: Když to uděláte ls, , co je tečka, tečka?
>> ROB: Oh.
Tak tohle je to, co jsem mluvil.
Je to totéž, kde Můžu jako jsou CD, tečka, tečka.
Takže technicky, tečka a tečka, tečka se soubory, které existují v každý
adresář, kde je soubor tečka označuje do aktuálního adresáře.
Takže když jsem cd, tečka, já jsem prostě jít zůstat v adresáři.
A tečka, tečka vždy se odkazuje na předchozí adresář o úroveň výš.
Takže když jsem se jít do protokolů a LS, pomlčka, al, Uvidím, tečka, tečka. cd do dot, dot
mě přivádí do předchozího adresáře.
Jo.
OK.
>> Takže další dost důležité příkaz rm.
Tak to je to, co budeme použít k odstranění.
A dovolte mi, abych vlastně dělat další příkaz první.
Tak mkdir.
Mkdir je to, jak můžete vytvářet adresáře.
A já vám vytvořit dočasný adresář a jděte do tohoto dočasného adresáře.
A jak se očekávalo, je prázdný.
Ale pokud ls I, pomlčka,, Stále mám tečku a tečka, tečka, tečka, protože odkazuje na
aktuální adresář.
A tečka, tečka označuje předchozí adresář.
A ty budou vždy existovat bez ohledu na adresář, kde se nacházíte
>> A to je zcela zbytečné příkaz, ale dotek.
Jen jsem ji používat, protože je to snadný způsob, jak vytvářet soubory.
Takže dotek, dotek b, stiskněte c je jen bude vytvořit tři soubory s názvem,
b, c, že ​​jsou úplně prázdné.
Takže místo mě vytvářet ty První místo je tak, že RM je
jak je můžeme odstranit.
Takže rm,.
Bude to a zeptejte se mě, odstraňte pravidelné prázdný soubor?
A pak řeknu ano.
>> Takže když jsem si jistý, že chci, aby smazat tento soubor, aniž by museli být
vyzvání vyjměte pravidelné prázdný soubor?, pak rm, pomlčka, f bude
příznak, který říká, nutí odstranit bez mě ani výzvy, oh, jsi
Opravdu chcete smazat soubor?
Ano, jsem si jistý.
Takže rm, pomlčka, fb bude jen to bez ptaní.
>> Takže pojďme udělat nějaké další adresáře.
mkdir, tmp2, cd, tmp2, dotknout, dotykové b.
OK.
Takže teď chci odstranit tmp2 jako adresář.
Takže rm tmp2.
Nemůžete odstranit tmp2, je adresář.
Takže otázka je, že rm není okamžitě pracovat na adresáře.
Je určen pouze pro soubory, jako jsou Soubory non-adresáře.
>> A tak to, co můžeme udělat Zde je rm, pomlčka, r..
To znamená rekurzivně, které by mohly neznamená nic pro vás ještě.
Ale když se dostanete do rekurze, to bude znamenat více.
Takže rm, pomlčka, r, tmp2 se chystá rekurzivně jít do tohoto adresáře.
Takže sestoupit do adresáře tmp2?
Ano, pojďme do toho.
Chceme odstranit tmp2 /?
Ano.
Chceme odstranit tmp2 / b?
Ano.
Nyní chceme odstranit adresář tmp2?
Ano.
A tak teď adresář a všechno uvnitř
z toho odstranil.
>> Tam je technicky příkaz rmdir které můžete použít k odstranění
adresářů, ale to funguje pouze na prázdných adresářů stejně.
A vidět, že, řekněme, udělat znovu mkdir, tmp2.
Tmp2, dotknout.
OK.
Takže když se snažím odstranit dirtmp2, bude to říci, adresář není prázdný.
Takže jsem skoro nikdy nepoužívejte odstranit Příkaz dir tak jako tak, protože rm, pomlčka,
r bude pracovat na prázdných adresářů a non-prázdné adresáře.
>> A také, jestli nechci mít na projít, že celý proces
sestupně do adresáře a vyjmutí každého jednotlivého souboru, rm,
pomlčka, rf, tmp2.
A teď je to pryč.
>> Něco, co dávat pozor o je rm, pomlčka, rf.
A to mě děsí ještě zadejte ho, protože když jsem omylem
stiskněte klávesu Enter, nebo tak něco.
Takže rm, pomlčka, rf, vlnovka by, aniž by mě výzva, f nevyzve
mi, bude to automaticky odstranit celý můj domovský adresář a
všechno v něm.
Takže si může myslet, že je to hloupost.
A dobře, že je.
>> Ale to se může stát velmi snadno nehoda-li, řekněme, chtěl jsem se odstranit
můj slash, vhost adresář.
A právě v rychlém psaní, Omylem jsem to udělat.
To bude odstranit rekurzivně i my domovský adresář a adresář vhost
v tomto konkrétním adresáři, který právě stane se to právě teď neexistuje.
Ale to by ještě odstranit celý můj domovský adresář.
Alespoň tím, že má f, to by mě první výzvu.
A já bych byl rád, oh, ne, já Nechci to udělat.
Ale lidé, lomítko, včetně mě mají tendenci dostat se do
zvyk vždy rf-Ing.
Dokonce i pravidelné soubory, které mohu jen RM, c, mám tendenci jen rm, pomlčka, rf, c.
Jen si dejte pozor, když jste rf-ing.
>> SPEAKER 4: Co je C dělat?
>> ROB: C je Mluvím o tomto souboru C v tomto adresáři, který rm, c.
>> JOSEPH: A více nebezpečně, pokud používáte hvězda, to se odkazuje na vše v
adresář.
Takže to, co jsem obvykle mají tendenci dělat je, že bude jít do adresáře a já chci, aby
odstranit všechny soubory tam.
Takže rm, pomlčka, rf, hvězda.
>> ROB: Jo.
Rm, pomlčka, rf, hvězda.
>> JOSEPH: A pokud si nejste opatrní co adresář jste v -
Nebyl jsem v temp, ale byl jsem náhodou v mém domovském adresáři,
pak budu odstranit vše v mém domovském adresáři.
A já jsem vlastně udělal předtím, a Myslím, že jste to udělal předtím nebo
Jay udělal dřív.
>> ROB: Já jsem omylem odstraněn -
tak ignorovat, že příkaz na chvíli.
>> JOSEPH: Není legrace.
>> ROB: Takže v adresáři bin lomítkem je banda binárních souborů, kde bude
být dobře známá jako kovový zvuk.
No, zvonit a v podstatě všichni z nich věci, které jsem běží na příkaz
linka je v tomto lomítko adresáři bin.
>> JOSEPH: Stejně jako ls, je tady.
>> ROB: Tak tečka, lomítko, ls by seznam tohoto adresáře.
>> JOSEPH: Rm je také v tomto adresáři.
>> ROB: Omylem jsem rm, rf-ed bin, který odstraní libovolný příkaz, co jsem mohl
možná někdy chtít.
Což pak jsem přeinstalovat nové spotřebiče v tomto bodě.
>> JOSEPH: Takže buďte velmi opatrní při můžete použít tento příkaz.
>> DIVÁKŮ: [neslyšitelné]?
>> ROB: Ano.
To je také špatný zvyk se dostat do.
Pokud si všimnete, že jsem teď -
dobře, můžete si toho nevšiml, ale můj zoom-in možná může.
Takže jsem teď root @ spotřebiče.
Takže jharvard je uživatel chceme abyste se vždy používat.
Root je uživatel, který má oprávnění dělat absolutně nic.
>> Takže všimnete, když jsem jharvard, když se pokusím cd -
co je adresář, který?
Oh, kořen je dobrý příklad.
Takže cd, kořen.
Permission denied.
Vzhledem k tomu, podíváme-li se na tomto seznamu -
a znovu, nemusíte se úplně pochopit.
Ale tyto tři pomlčky říkají které nenechte jakýkoli jiný
uživatel do tohoto adresáře.
A adresář se stane být vlastněn uživatelem root.
>> Takže fakt, že jsem jharvard a ne Ten, kdo není kořen je povoleno do
tento adresář, to znamená, že jsem chystá se popřít, povolení, když jsem
se snaží cd do něj.
Takže když jsem kořen, mám oprávnění k dělat naprosto cokoliv, včetně
vymazat důležité soubory k přístroji a
zničit celou věc.
>> Tak to je špatný zvyk se dostat do jen putování kolem
operačního systému jako root.
Dělám to tak jako tak.
Otázky?
A já ukončit kořen, zůstat jako jharvard.
OK.
>> Více příslušné příkazy.
Takže jít zpátky do našeho temp, mv příkaz je zkratka pro pohyb.
Můžete se pohybovat.
Nyní chceme říkat b, tak teď se to jmenuje b.
Nebo snad chceme přesunout b do jednoho adresáře.
Takže teď prázdný tomto adresáři je.
Vrátím se do svého domovského adresáře, a vidíme, že b je tady, protože
domovský adresář byl o úroveň výš od adresář, který b bylo palců
>> K dispozici je také cp.
Takže cp je kopírovat výborný část, tečka, textu.
Můžu říkat to, tečka, textu.
Nyní máme oba výborný část, tečka, textu a je, tečka, textu.
To také pracuje na adresáře.
RF-ED jsem jeden soubor.
Takže cp -
dobře, první zkusme CP tmp, tmp2.
Takže vynechání adresáře tmp.
Takže podobně jako rm, výchozí chování je to pracovat v adresářích.
>> A opět, podobně jako rm, výchozí chování - dobře, jak to funguje
s adresářů je, pomlčka-r pryč.
Takže kopírovat rekurzivně temp adresář do tmp2.
A tak teď máme oba tmp a tmp2, a to není tak užitečné, protože tmp
byla v první řadě prázdné.
Tmp2.
>> Nyní pojďme kopírovat tmp do tmp2.
A vidíme, že tmp2 má také soubor , protože adresář a
vše uvnitř, které Adresář byl zkopírován.
A to může být poněkud užitečné pokud, řekněme, že pracujete
o problému nastavit jednu -
nebo skutečnosti, později problém sady ještě důležitější, protože tam
bude celá parta souborů a věcí.
>> Ale jen chcete, na zlomek Druhá, že jsi rád, v pořádku, já jsem
jít zkusit něco jiného.
Dovolte mi stačí zkopírovat celý můj pset1 adresář do zálohy pset1 tak, že pokud
I skončí šroubování věci do pořádku, mohu vrátit se do svého záložního adresáře.
Existuje vhodnější způsoby verzí zálohování kód, ale
to je vždy rychlý způsob, jak jen se ujistěte, že máte kopii něčeho
že se chystáte změnit.
>> Takže echo je také příkaz one-off, které druh sillily bude jen tisknout
příkazový řádek přesně to, co co jste chtěli echo.
Tak echo ahoj.
Budeme jen vytisknout hi.
Echo hello world.
Budeme tisknout ahoj svět.
Který přichází do užívání, pokud kdo kombinuje příkazy.
>> A opět, nečekejte, že vám úplně pochopit to ještě, ale je to
něco vidět.
A pak, pokud jste Googling příklady nebo si uvědomíte, že chcete dělat
něco, to může být užitečné.
Tak pojďme, jako například takže ls, pomlčka, l.
Takže tady vidím výstup LS, pomlčka, l.
A já říkám, OK, chci, aby uložit, že do souboru.
Všechny tohoto výstupu tady, chci dát do samostatného souboru.
>> Takže to trochu větší než symbol je to, co budeme říkat.
Jsme přesměrování výstup do souboru.
Říkejme soubor bla, protože to je co mám tendenci vždy říkat.
Takže teď vidíme, máme soubor bla tady.
A když jsem ho otevřete, tak vidím, že je to přesně výstup z příkazu
že jsem běžel.
A podobně, můžete -
jestli je to výstup do souboru, tento je získat vstup ze souboru.
Co je to příkaz, který jsem -
>> JOSEPH: Myslím, že můžete použít více či méně, pravděpodobně.
>> ROB: Ale jak se jen o méně bla?
Nevím.
Přijedete-li do tohoto scénáře, stejně jako tam je psets, že je to užitečné pro.
>> JOSEPH: Můžete potrubí do echo.
Pipe soubor do echo ji vidět.
>> ROB: Je to potrubí.
>> JOSEPH: Je mi líto.
>> ROB: Dobře.
Tak tohle je výstup do souboru.
To je získat text ze souboru a předat ji do programu.
A budete také vidět toho chlapa.
Takže je to trochu dělá obojí najednou.
A vlastně, budu představit dva nové Příkazy jen využít toho.
>> Historie je šikovný příkaz, který je právě jít vytisknout výpis
něco, co jsem kdy spustit příkazový řádek.
Takže zde vidíme vše, co mám běží celou tuto dobu.
Spousta ls let.
>> A další užitečný příkaz grep, že jeho účelem je vyhledávat přes
text, hledá vzory, dobře, hledá cokoliv, co
Chci, aby to vypadalo na.
A tak šikovný použití zde je, řekněme chceme chytit historii.
A chci se podívat na příkazy kde jsem - co je to
užitečné kdo hledat?
>> JOSEPH: [neslyšitelné]?
>> ROB: Nebo pojďme se jen podívat na všechny dotýká, z jakéhokoli důvodu.
Takže to je to, co to bude vypadat.
A nemusíte se zcela pochopit, že.
Ale myšlenka je zde, historie dává Stejný výkon je tady udělal
kde je to tisk z celé Historie všeho, co jsem kdy běžet.
My jsme pak mimochodem, že -
takže místo toho, aby jej vytisknout na obrazovku, chceme projít, že na
Příkaz grep, který hledá všechny instance slova dotek.
>> A tak pomocí této kombinace Historie a grep nástrojů, vidím, OK,
tady je všechny příkazy jsem kdy běh, a tady je to trochu obyčejný.
Jsme na dně.
A to mi také dává příkaz Jen jsem běžel, aby měl
Slovo dotek v ní.
Ale potrubí je docela užitečná věc pro kombinaci více programů.
A skutečně, je to zkratka pro pronájmu me výstup historie do souboru bla, a
dovolte mi, abych grep pomocí souboru bla jako to, co chci, aby se podívali na.
Takže trubka je jen zkratka pro tyto dva příkazy.
Ano.
>> SPEAKER 4: [neslyšitelné]?
>> ROB: Ano.
Co je to -
Oh.
Pojďme otestovat.
Takže kočka, pes, ryba.
Takže chci grep.
Dash, r, znovu, bude rekurzivně, takže chci, aby sestoupil dolů
všechny adresáře.
Chci se rekurzivně grep pro všechny - a dovolte mi, abych dočasně dostat
to z cesty.
Ignorovat mě.
OK.
>> Takže chci, aby dočasně grep pro všechny instance slova ryb.
A tak zde to, co dělám, je grep rekurzivně pro slovo ryby.
A hvězda znamená, že přes všechny tyto Soubory v tomto adresáři.
A tak mi to dal oprávnění odepřen, protože to není dovoleno, aby četl, že
konkrétní soubor.
Ale to našel ryby v souboru, zkouška.
>> Mohl bych také říci, konkrétně, jen jsem chci se podívat do souboru bla, v
takovém případě to nebude nic najít.
Chci se podívat do souboru, zkouška.
To se najít ryby.
To je docela užitečné příkaz znát obecně.
Tam jsou některé alternativy k grep , které mají být
programátor přátelský, ale mám tendenci se ještě opřít o grep.
Otázky?
OK.
>> Existují další příkazy?
Oh.
Jen jeden-off ten, který jsem vždycky zde bude legrace je ráže.
Takže všimnete, když jsem v této krásné Režim celé obrazovky, nemám jako vrchol
panelu nástrojů nebo tak něco.
Takže cal jen mi dává pěknou Kalendář je to pravda
Nyní odříznout, předpokládám.
Ale pěkný malý příkaz.
>> JOSEPH: Je [neslyšitelný].
Další příkazy, které by mohly mít Viděl patří řinčení a dělat.
Půjdeme po nich více detailů později.
Ale pokud jste pracovali na pset, měli byste být
obeznámeni s těmi.
>> ROB: Dobře.
Dotazy na příkazové řádce, co?
Dobrá.
Takže pojďme se přesunout na některé C-související věci.
Proměnné matematika.
OK.
Takže stejně jako jsme měli matematiku ve Scratch, můžete také použít matematiku v C.
>> Než se dostaneme k tomu úplně, tak proměnné.
Pamatujte si, že vždy, když prohlašují, proměnné jako int x, nebo float y, vás
musí jej zadat před název proměnné.
Takže typy jsme viděli doposud jsou int, float, double, long long, který jsem
vlastně nevím, jestli máme vidět, že tak daleko.
>> Tam jsou některé ty ostatní.
Jsme vidět char.
K dispozici je krátká, což je jako by to Opakem long long, kde je to
menší než celé číslo.
Viděli jsme také řetězec.
Takže to, co je zvláštního na provázku?
Proč bych řekl, že je to ne tak docela jako int?
>> SPEAKER 4: Je to ve skutečnosti neexistuje.
>> ROB: Jo.
Takže jediný důvod, proč máme řetězec Je tomu tak proto, když děláte
hash, jsou cs50.h.
A uvidíme příklady později - oh, že nezpracovává, že dobře -
kde je cs50.h něco dělat podél řad typu
def, char hvězda, řetězec.
>> A tak, že říká, že nemáme ani Víš, co char hvězda je ještě.
Ale to se říká, chceme řetězec.
Jakékoliv místo, které jste používali řetězec, můžete by byly pomocí char hvězda,
, který je ve skutečnosti, že typ existuje v jazyce C.
Ale k tomu se dostaneme.
Jo, a jde zpátky.
Neat.
>> Takže to samé s bool kde true a false.
To není opravdu vestavěný typ v jazyce C. Místo toho, to je prostě, to má
Nulová hodnota?
Pak budeme jen za to, že je falešný.
Má to hodnotu -
dobře, to má každá hodnota, která není nula?
Pak budeme uvažovat, že je to pravda.
Takže jeden je pravda, dva je pravda, něco nenulová, je pravda.
Takže to jsou ty.
Otázky týkající se deklarování proměnných a typy proměnných a všechno, co?
Jo.
>> SPEAKER 4: Pro long long, v knize, to říkal, že to muselo být long long int.
Ale jen na tak dlouho dlouho fungovat?
>> ROB: Takže tyto modifikátory typu.
Tak int x.
Takže můžeme říci, unsigned int x.
Dá se říci, krátký int x.
Dá se říci, long long int x.
Ale skoro žádné z těch věcí, které jsem právě řekl, unsigned int, short int,
long long int, můžete zbavit int, a to bude jen předpokládat,
že jste měl na mysli int.
Tak nepodepsané x, což prostě znamená -
Víte, jak normálně s int, můžete říci, x se rovná negativní 3?
S unsigned int, to nemůžeš.
>> JOSEPH: A ještě jednou, pro kameru, Otázkou bylo, jaký je rozdíl
mezi long long int a jen long long?
>> ROB: Jo.
Tak jsem se skoro nikdy napsat dlouhé dlouhé int.
Budu psát long long.
>> JOSEPH: Nějaké otázky?
>> ROB: OK.
Tak hloupá připomínka, že to, jak deklarujeme proměnnou a inicializovat
proměnné a deklarovat další proměnné a inicializovat
to vše v jednom kroku.
Takže deklarace proměnné a proměnná inicializace nemají
se ale může být na stejném řádku.
>> Takže máme standardní operátory matematické které jste zvyklí -
plus, minus, dělení, časy.
K dispozici je také modulo, což uvidíme.
Není, alespoň v C, vestavěný zdroj
umocňování operátor stříška.
No, tam je operátor stříška, ale to není moc.
>> JOSEPH: Ale to není umocňování, Ano.
>> ROB: Nepoužívejte stříška předpokládat, že to znamená, že
jako hraněný nebo cokoliv jiného.
Takže některé věci byste měli mít na nevadí o rozdělení.
Já budu stát.
Tak prohlásil initialize odpověď.
Takže říkáme float odpověď se rovná 1 děleno 10.
Vytisknout odpověď na dvě desetinná místa.
>> A to je jedna z těch věcí, které jsem by člověk printf přijít na to, že
Co to sakra má%, tečka, 2f znamená?
A to právě znamená, dobře, ignorování 0.2.
A%, f je to, co používáme tisknout plavat.
0.2 říká, že tisk plavat na dvě desetinná místa.
Takže tento program má chybu, a ty by mohly viděli předtím v některých
Před CS kurz.
Ale co je to chyba?
>> SPEAKER 5: Zero.
>> ROB: Jo.
Takže když říkáme, odpověď se rovná 1 děleno 10, chceme
odpovědět na 0,1.
Ale 1 děleno 10, 1 je celé číslo, 10 je celé číslo.
A tak, když budeme dělat celé číslo děleno číslo, budeme se dostat zpět
celé číslo.
So 1 děleno 10 je 0,1.
>> Vzhledem k tomu, že je třeba, aby nám dal číslo, to jen tak zahodit, že
desetinné místo, a tvrdí, že Odpověď je 0.
A tak, když tiskneme odpověď zde, to bude tisknout 0.00.
>> JOSEPH: A jen jako poznámku, že ve skutečnosti odhodí, co je po
desetinná čárka.
Takže pokud jste místo toho měl 6 děleno 10, si možná myslíte, že by vám
0.6 a pak byste zaokrouhlit nahoru na 1.
Ale ve skutečnosti to, co se stane, když to typ úkoly, to je to, že to, co je kapky
za desetinnou čárkou.
Takže 0.6 se stanou 0.
>> ROB: Jo.
A budeme říkat zkrátí za to.
Takže pokaždé, když přetypovat na int, desetinná zkrácen.
Takže oprava, která - je tu vlastně dva.
A já budu dělat to druhé, protože tohle je mnohem jednodušší opravit.
>> Takže jedna oprava je použít plováky v divizi.
A opravdu, máte jen aby jeden z nich float.
Ale je to trochu jasnější jen aby oba plováky.
Tak 1,0 děleno 10,0 je dělení dvěma plováky.
Takže odpověď bude skončit float, a tak budete
správně vytisknout 0.10 zde.
>> Něco, co nefunguje tak dobře o, že je dobře, jistě, to bylo snadné
tak převést 1 až plavat tím, že 1.0.
Ale co když místo toho jsme měli dvě celá čísla jako int x se rovná 1 a int y
se rovná 10, a pak jsme chtěli Chcete-li x děleno y?
Takže to není snadné jen dělat X.0, nebo tak něco.
>> Takže oprava, která je casting.
Takže lití je způsob, jak v C převést z jedné proměnné typu na jiný.
Tak zde, 1 je celé číslo.
A tím, že tento plovák před že jsme obsazení 1 až plováku.
A tak to bude převádět 1 do 1,0.
A to bude převádět 10 na 10,0.
>> A pak, co se chovají podobně jako Předchozí verze se jen ukázalo,
kde, jak se očekávalo, dostaneme 0,10 a to bude tisknout to.
A můžeme to udělat s proměnné, taky.
Takže můžeme říci, float x děleno float y.
>> JOSEPH: Nějaké otázky?
>> ROB: Takže, stejně jako v běžném matematice, máme operátor přednost.
Takže matiku, máte větší pravděpodobnost říkat pořadí operací.
Zde je oficiální termín je operátor přednost.
Ale operátor přednost, nebo většina operátoři, je, jak by se dalo očekávat.
>> Takže stejně jako v matematice, 2 krát 10 je bude seskupeny blíže než
Tento 10 děleno 2 a pak 2.
Pořadí operací, bude to dělat 2 časy 10, 10 děleno 2, a poté
to bude dělat 20 plus 5 plus 2.
Takže je to, jak se očekávalo, a můžete použít závorky pro seskupení výrazů.
Nelze použít hranaté závorky do skupiny výrazů.
Jo?
>> SPEAKER 5: Mohl byste vlastně stačí přejít zpět o jednu chvilku?
Můžete obsadit int na řetězec?
>> ROB: Tak v C, můžete obsadit cokoliv Chcete-li cokoliv chcete.
To neznamená, že je to dobrá věc.
Takže, když cast int na řetězec, to znamená, že -
a my se do toho mnohem hlouběji -
>> JOSEPH: Mnohem později.
>> ROB: Nechtěl jsem říci mnohem později, tak jsem se snažil změnit svůj trest.
Dostaneme se do něj mnohem důkladněji později, kdy opravdu, když máte
Řetězec proměnné -
takže řetězec může být libovolně dlouho, že jo?
A my jsme říkali, že int je čtyři byty a dlouhé dlouhé osm
bajtů a plovák je čtyři bajty.
Takže řetězec, stejně jako int, má jen určitý počet bajtů k ní.
A to bude čtyři bajty.
>> Ale řetězec může být docela libovolně dlouho, že jo?
Tak ahoj svět už, jestli je to 10 znaky nebo cokoliv, je to již
bude v průběhu 4 bajty I vejde do řetězce.
A tak, jak struny opravdu funguje, je, že jsou-li v paměti, že řetězec
je zachována.
>> A tak se sem, když řeknu, že řetězec x rovná Hello World, vnitřní x je
Jen říkám, oh, ahoj svět je uložen v tomto konkrétním místě v paměti.
Takže když se budeme snažit obsadit celé číslo ke řetězec, pak se snažíme interpretovat
nějaký náhodný část paměti jako řetězec.
A to téměř vždy zlomí věci.
>> JOSEPH: Ale jestli to zaměňován vy, budeme se ho pokrývající
více do hloubky později.
>> ROB: Jo.
To je místo, kde budete dostat se do ukazatelů.
A to je významný kus dvou týdnů tohoto kurzu.
>> SPEAKER 6: Má to fungovat jako objekty v jiných jazycích, nebo ani ne?
>> ROB: Takže v jiných jazycích, objekty budou reprezentovat pomocí ukazatelů.
Není to totéž, ačkoli.
Jakékoliv myšlenky?
>> JOSEPH: Ne
Žádné myšlenky.
>> ROB: OK.
>> JOSEPH: Další.
>> ROB: Jen jdi s tím.
Dobrá.
Tak modulo.
Stejně jako máme plus, minus, dělit a násobit.
Takže modulo je ten, který může být Není neviděli.
A to jen říká, dát já zbytek.
Takže 55% 10.
Zbytek dělá 55 rozdělena od 10 by 5.
Takže 55% 10 je 5.
A 3% 5 bude 3.
8% 8 bude 0.
16% 15 bude 1.
>> JOSEPH: Jedna věc na vědomí s tím, Také je to nemusí fungovat podle očekávání
Používáte-li záporné číslo.
Takže negativní 5% 4, někteří lidé Možná si myslíte, že je -
co by si myslíte, že negativní 5% 4 bude?
>> SPEAKER 5: One.
>> JOSEPH: Takže někteří lidé říkají jedno, Někteří lidé říkají, že negativní jednu.
Ale co -
>> ROB: Já bych ani řekl jeden z nich.
>> JOSEPH: dva, je mi líto.
Někteří lidé říkají -
>> ROB: Three.
>> JOSEPH: Tři?
>> ROB: Negativní -
co bylo - negativní pět -
>> JOSEPH: Tři, tři, tři.
Promiňte.
Vzhledem k tomu, modulo, obvykle, když jste viděl jinde, obvykle to znamená,
vrací kladné číslo, že jo?
>> ROB: Takže když říkáme v matematice,% 10 je, mají tendenci chtít, aby vám -
pokud budeme mod do 10., pak očekáváme, že získat číslo mezi 0 a 9.
Ve zde, že není pravda, že jste Získáte záporná čísla se vrátil.
>> JOSEPH: Tak negativní 5% 4 by byl negativní 1.
>> ROB: Ale to je vzácné, že jsi mod-ing záporná čísla se začínají.
Přeskočit.
>> JOSEPH: Jo.
>> ROB: Meh.
OK.
Takže poslední věc poukázat na to, o plováky je, že je to nebezpečné chování,
ale plováky nejsou přesné zastoupení.
Takže jít zpátky do bajtů znovu, nezapomeňte že int je vždy čtyři byty a
plovák je vždy čtyři bajty.
Takže Lucasova příkladem je docela dobrý.
>> Takže myslíte, že z 1 děleno 3.
Tak 0,3333333.
Pokud mám jen 32 bitů, jak může I uložit 0,33333 přesně?
A možná, z jakéhokoli důvodu, říkáte, v pořádku, no, řekněme, že
že tento konkrétní 1011001, pojďme jen říct, že by měl být 0,333333.
No, máte jen konečný počet ty bity, takže je nemožné, aby
představují každý s plovoucí desetinnou čárkou vzhledem k jen 32 bitů hodnoty.
>> No, to je nemožné reprezentovat některý plovoucí bodová hodnota dána nekonečná -
dobře, vzhledem k tomu jakýkoliv konečný počet bitů.
Takže otázkou je, dobře, když jsme použili tisknout na dvě desetinná místa,
jsme správně dostat odpověď 0.10.
Ale pod kapotou, je to opravdu jsou uloženy tak blízko, jak je to možné, aby
0.10 jako ty kousky mohou představovat.
Je to na další snímek?
Nebo ne?
>> JOSEPH: Jo, je to tak.
>> ROB: Blegh, blegh.
>> JOSEPH: Jo, je to možné jen vytáhnout poznámky se trochu.
>> ROB: Jdu pro zvětšení v na poslední na to.
Ach můj bože, to je [neslyšitelný].
Takže číslo.
To je to, co se bude tisknout pokud jsme se spustit tento program.
A všimněte si, že to není opravdu velký problém pokud budeme jen starat o jako
dvě až tři desetinná místa.
Stejně jako my jen původně tištěný 0,10, a to je důvod, proč jsme neviděli nic špatného.
Ale jakmile začneme dostat do přesný, přesný počet, že je to
představuje, vidíme, že tomu tak není přesně představují 0,1.
>> A část problému je zde jako, v pořádku, to je v pořádku, ale, no,
První, co když jsme se snažili dělat, Odpověď rovná se rovná 0,1?
Je to jít vrátit true nebo false?
A tak to je těžké říct.
Myslím, že to vlastně může vrátit true.
Bude to první -
Nevím.
Odpověď je, jakmile začnete zabývat s plovoucí desetinnou čárkou hodnoty, jste docela
e by se neměla používat rovnost kvůli této nepřesnosti.
>> A za všechno, co vím, je to stý desetinné místo,
s plovoucí desetinnou čárkou nebyl schopen správně zpracovat.
A tak rovnost bude jen selhat i ačkoli číslo - pokud bylo
pomocí přesných čísel, by čísla byly přesně stejné.
Je to v průběhu asi 50 výpočty pomocí těchto plovoucí
bodové hodnoty, chyba může stavět a výš a výš, a
věci prostě něco pokazit.
>> JOSEPH: A tam byly opravdu slavné příklady tohoto děje.
Stejně jako inženýři NASA se dostali tento špatné, způsobuje rakety vybuchnout v
vzduchu poté, co byla zahájena.
A spousta otázek, jako je to.
Tak jo.
>> SPEAKER 6: Když se řekne 0,3 f, to zkrátit zbytek?
Nebo to zaokrouhlit směrem nahoru nebo dolů?
>> ROB: Bude printf kolem něj?
>> JOSEPH: Myslím, že printf zkrátí.
>> ROB: OK.
Takže můžeme podobně jít v opačném směr Tady, v tomto případě,
Nejbližší to mohlo představovat 0.1 byl s tímto číslem.
Nejbližší to by mohl být schopen představují 0,2 je v protikladu
směr, ,199999996356 nebo tak něco.
Takže když jsme šli v tomto směru věci, pak printf 0,3 f se vrátí
1,99 místo 2,00.
>> JOSEPH: A já nejsem úplně jisti, na které.
Možná budete chtít napsat malé, malé Program jen zkontrolovat, že.
>> ROB: I když to, co jsme si jisti, že pokud jste se pokusili obsadit, které se
int, a lití na int bude způsobí, že se zkrátit desetinu, pokud
pokusu o obsazení 1.9999999 na int, dostanete 1.
A tak byste měli obvykle použít kolo funkce v matematické knihovně.
Otázky?
OK.
>> JOSEPH: Tak pohybující se na podmínkách a logické výrazy.
Takže jste viděl ty.
A skutečně, dovolte mi, abych se ujistil, můj Počítač je ve správném formátu zde.
Space.
Je nám líto, budeme muset vypořádat trochu s cut-off na okrajích.
>> Ale jo, vy jste viděli předtím v roce Scratch.
Tak tohle tady je výrazem , který se používá v
podmíněný příkaz.
Takže odpověď větší než nula ti true nebo false.
A to je velmi důležité, protože které nám umožňují představit
logika do našeho kódu.
>> Tak například, to je program, psaný v Scratch, který požádá uživatele
pro celé číslo a řekne jim, ať číslo, které vám dal byla
kladné nebo záporné číslo.
A konverze sem vidět, je nejprve vytisknout prohlášení,
dej mi číslo.
A pak se jich zeptáte na celé číslo.
>> A pak použít podmíněné logiky nad zde ověřit, zda toto číslo
byl ve skutečnosti větší než nula, nebo ne.
Takže tady máme logický výraz uvnitř podmíněné If.
Je tam nějaké otázky?
Existují nějaké otázky o tom?
OK.
>> Takže tam je víc, než jen větší než, samozřejmě.
Můžete vytvořit logických výrazů pomocí většiny druhů věcí, které
by si myslel, ze v matematice.
Tak větší než.
To by mělo být menší než.
Promiňte.
A odstup.
>> ROB: Bože chraň ji opustit.
>> JOSEPH: Dobře.
Takže větší než, menší než, větší než nebo rovno, menší
než nebo rovno.
Používáme dvojité rovná pro kontrolu rovnost, protože jeden se rovná prostředky
úkol, že jo?
Ano.
A pak můžeme také nemají rovná podle pomocí vykřičník, rovná.
>> A tento symbol vykřičník může také být rozšířena tak, aby v případě, že chcete
k obrácení nějaký druh Boolean výraz, můžete to udělat.
Takže to vyhodnotí na true pouze v případě, že odpověď je méně
než nebo roven nule.
Jakékoliv dotazy na to?
OK.
>> Takže si můžete také kombinovat tyto Výrazy používající logické A a
logické Or.
Takže je to jen symbol A, který by měl být posun, 7..
A to je symbol trubka, která je není malá písmena L. Je to jedna
To je přímo nad klávesou Enter.
Takže můžete použít dva z nich symbolizuje logické a logické Or.
>> Takže to bude vracet hodnotu true pouze tehdy, pokud odpověď je jeden, dva, tři, nebo čtyři.
A to vrátí hodnotu true pouze tehdy, pokud odpověď Kromě toho je na obou stranách.
Takže to není jeden, dva, tři, nebo čtyři.
A jak byste použít že ve výrazu -
>> ROB: Nebo nula nebo pět.
>> JOSEPH: Zero nebo pět.
Promiňte.
Ano, ano, ano.
OK.
A tady teď, stejným způsobem, by se použít ten výraz, menší
Výraz strana-li podmíněné prohlášení, měli byste také použít
Stejným způsobem by jen uvedení uvnitř závorkách u příkazu If.
Takže to printf bude jen oheň, pokud odpověď je jeden, dva, tři, nebo čtyři.
Jakékoliv dotazy týkající se kombinuje výrazy?
>> Takže je tu další podmíněné konstrukt říkáme if / else.
Takže v podstatě, to teď znamená, OK, Pokud něco, co jsem chtěl zkontrolovat nebyl
pravda, pak jít do jiného a vykonávat tuto jinou akci.
Takže v tomto konkrétním případě, zeptal jsem se uživatel na celé číslo.
Je celé číslo větší než nula?
Ano?
No, pak se zvedl kladné číslo.
Pokud ne, pak to musí mít byl negativní, nebo nula.
Takže jste si vybral záporné číslo nebo nula v tomto případě.
Ano.
Nebo nula.
>> A pak tu máme také if / else, If a else.
Tak to nám umožňuje provést posloupnost věci, pouze v případě, že jako první se nezdaří.
Takže v tomto případě, teď děláme poslední si vyberete nulu.
Takže pokud se ani vybral pozitivní, ani záporné číslo, pak se musí
si vybral nulu.
Tak to prostě chodí dolů řetěz takhle.
>> Takže příklad toho, jak Pokud se liší od -
if / else se liší od jen sled stability.
A to je častá otázka, která lidé ptají se, no, pokud se dostanete jako
95, CS50, co bude tento Program vám řekne?
>> SPEAKER 5: Dostal jsi A.
>> JOSEPH: Ano.
Máš každý jeden z nich přímo.
Máš jedničku, máš B, budete dostal C a D, že jo?
Takže všichni z nich se hodnotí v pořadí.
Takže zatímco 95 je větší než 90, je to Také větší než 80, je to také
větší než 70, a to také vyšší než 60 let.
Takže máš všechny ty stupňů.
A předpokládám, že byste pouze chcete A.
>> Způsob, jak opravit, že je nahradit ty s Else / li 's.
Takže v tomto případě, že vidí, že 95 je větší než 90 °, a pak to dělá
nehodnotí ostatní z výkazů.
Jakékoliv dotazy týkající se, že?
>> Takže je tu další podmíněné druh struktura, která se zde, které se
volání příkazu switch.
Tak to umožňuje v podstatě kontrolovat co je hodnota čísla, které dal
do příkazu switch je.
Takže v tomto případě, jsme přepínání na n, a říkáme, oh, pokud n je
jeden, pak vytiskněte toto prohlášení.
A pak zlomit, což znamená, že výstup z příkazu switch.
>> Pokud to nebyl jeden, pak dobře, jen nakonec zkontrolovat všechny z těchto případů.
A tak se kontroluje, jestli je to jeden nebo dva nebo tři, a to vytiskne podle toho.
A co tady to default klíčové slovo dolů prostředky, je-li neměli zadávat jakákoli
z těch, řekněte Neplatné.
Takže řekněme, že jsem se požádat o n a uživatel dává mi čtyři.
No, to odpovídá žádný z těchto případů, tak to bude tisknout to, co je v
výchozí sekce.
Ano, otázka?
>> SPEAKER 5: Můžete použít Boolean výrazy místo
jeden, dva, nebo tři?
>> JOSEPH: Takže otázka je můžete použít Booleovské výrazy namísto jednoho,
dva, tři a?
A v C, věřím, že vám nemůže dělat, že.
Ale v jiných jazycích, které by mohly narazíte na konci roku
semestr jako JavaScript, můžete.
No, měli byste počítat první že hodnota a použít jej v
přepnout prohlášení.
Jo?
>> ROB: Takže část prospěch spínače prohlášení je, že na to, pokud jste to udělal
as if / else, tak jako v případě n se rovná se rovná jedné nebo cokoliv jiného.
Else / li n rovno rovná se dva, cokoliv.
Else / li n rovno rovná tři.
Takže jak by program spustit, je to by postupně jít dolů v tomto seznamu
a zkontrolujte, zda je n jeden?
Ne.
N dvě?
Ne.
Je n tři?
Jo.
Udělej to.
>> Vzhledem k tomu, s výroky spínač, je to skutečně schopen sestavit, aby to bylo
opravdu rychle.
A jakmile se říká, že spínač je říká, všechno v pořádku, n je dva, já jsem
bezprostředně chystá skočit tam, kde Já jsem měl začít provádění.
Nebudu se nejprve zkontrolujte, n je jedna, je n dva?
To může okamžitě začít dělat to, co má dělat.
>> A kvůli tomu, nemůže se booleovské podmínky.
Anebo to bude muset udělat, sekvenční, stejně jako, v pořádku, je n
větší než nula?
Jinak je n větší než 10, nebo cokoliv jiného.
>> JOSEPH: V tomto případě, pokud jste použili If / else, pak přepínač by-li to
běžet přibližně třikrát rychleji než if / else, pokud je.
Můžeme zorganizovat spínač v takové tak, že se neporušují
Po každém z těchto případů.
Takže v tomto případě, jsem rozdělení čísla, která se rozhodnou do jednoho a
dva být ne vysoká čísla a tři je vysoké číslo.
>> Takže v tomto případě, je-li n je jedna nebo dvě, to zasáhne případ a pak to bude
propadnout, protože není přestávka.
A to skončí tady.
Takže pokud si vybereme jeden, bude to dělat printf a pak zlomit tak, že žádný z
to je popraven.
A samozřejmě, pokud se vstoupit do třech nebo něco jiného, ​​pak to bude přeskakovat
ty, a ne tam, a to bude místo toho spustit
odpovídající řádek.
Existují nějaké otázky o tom?
Ano?
>> SPEAKER 4: Chtěli byste si chybu, pokud vám měl přestávku po případě, že jeden, ale to
neměl něco pro to udělat?
>> JOSEPH: Takže otázka je by vám chyba, pokud máte přestávku po
případě, že jeden, ale není nic, co dělat?
A odpověď je ne.
Nebudete ve skutečnosti dojde k chybě.
Jo, mm hmm.
>> Tak jako tak nějak malá změna tady, Chystám se dát printf zde.
Jejda.
Takže to, co by to tisknout, pokud Dal jsem jeden v jako vstup?
Jo.
To by se ti to netrvalo vysoký počet dvakrát, že jo?
Vzhledem k tomu, že by zasažen, že první případ, by to zlomit, a to by spadnout
až druhém případě.
Jakékoliv dotazy týkající se, že?
>> ROB: Už máte jiný dotaz?
>> JOSEPH: OK, v pohodě.
Dobrá.
Takže tam je něco jiného, ​​co nazýváme ternární operátor, který je v podstatě
alternativní syntaxe dělat Pokud i poté Else.
A to vám umožní dělat vše na jednom řádku.
Takže v tomto konkrétním programu, Ptám uživatele k n..
A jestliže n je větší než 100, říkám je, že si vybral vysoký počet.
Jinak jsem jim říct, že vybral nízké číslo.
>> Takže můžeme použít to opravdu dlouhé syntaxi, řetězec, S, a pak zkontrolujte, zda n je
větší než 100 a přiřadit to podle toho.
Ale můžeme to mnohem stručnější pomocí této syntaxe ternární operátor
který zahrnuje otázku značka a tlustého střeva.
Takže otazník je v podstatě ptám, že jo?
>> ROB: Možná přiblížit na to.
>> JOSEPH: Ano.
Dobrý postřeh.
Tak tohle je ternární operátor.
Poprvé jsem se zeptat, n je větší než 100?
Pokud je, pak jsem se provést první část před dvojtečkou.
Pokud tomu tak není, pak jsem spustit Druhá část za dvojtečkou.
Takže, pokud n je větší než 100, pak se zvedne vysoko a klade
že do řetězce s.
Pokud n je menší než 100, se vybere low a pak se dává, že do řetězce s.
Tak, že bude kondenzovat tento velký kus dolů do právě tohoto jednoho řádku.
>> SPEAKER 5: Je to populární?
>> JOSEPH: Ano, to je docela populární pro věci, kde v podstatě chcete
se přiřazení na základě nějaký stavu.
A v tomto případě jsme se snažili přiřadit hodnotu na řetězec s.
Není to tak -
Myslím, že jsem to opravdu raději že v ostatních případech.
Ale to je zvláště užitečné pro tento úkol.
>> ROB: To je docela obyčejný vzor kde máte nějaké proměnné, které
budete říkat, jestli něco, nastavte tato proměnná na jednu hodnotu, jinak nastavte
tato proměnná na jinou hodnotu.
A to je scénář kde pomocí trojice.
>> JOSEPH: A ty úspory spousta linek, že jo?
A to právě dělá váš kód pravděpodobně trochu čitelnější.
Ano, otázka?
>> SPEAKER 6: U trojice, můžete jít, řetězec s rovni s, otazník?
A pak byste mohli mít, řekněme, pět různých možností.
A v závislosti na tom, co je počet n byl by si vybrat jeden z nich?
>> JOSEPH: Takže otázka je, je tam druh syntaxe, kde si můžete udělat řetězec
s se rovná n, a pak mít více než dvě Možnosti po té otazníkem?
A jednoduchá odpověď je ne, že to není opravdu dobrý způsob, jak to udělat, že pokud
Chcete-li hnízdo vícenásobné trojice subjekty uvnitř každého jiný.
>> Dalo by se to jako n větší než 100, otazník, a pak další
ternární operátor, n větší než 50, otazník, a hnízdo to tak.
Ale v tomto případě, váš kód je dostat trochu nečitelný a chaotický,
a to by mohlo být lepší prostě jít na Pokud / Else v tomto bodě.
>> ROB: A také, jako okrajová poznámka, PHP nesprávně implementuje ternární
Operátor tak, aby vnořené ternaries ani fungovat jak by měly.
>> JOSEPH: Jo.
Takže to bude trochu matoucí, zvláště, když jdete
do různých jazyků.
>> ROB: Je to matoucí dost, že jazyky jsou špatně o tom.
>> JOSEPH: Takže vlastně, jen objasnit, to všichni víme, co to
% S dělá tady?
Jakékoliv dotazy týkající se, že?
Myslím, že jen pro kameru,% s v podstatě nám umožňuje dát zástupný symbol
pro řetězce.
A pak na konci, jsme určit, že Proměnná chceme dát do toho
Držák místo je s.
Takže v podstatě se s a dá to sem.
A pak to bude tisknout, jste si vybral vysoké nebo jste si vybral nízké číslo.
OK.
>> Takže smyčky umožňují provádět věci krouživými pohyby, že jo?
Možná jste narazili na tuto Scratch ve formě Forever smyček
nebo Repeat Until nebo opakujte, zejména počet opakování.
Tak proč je to pro nás dobré?
No, v C, řekněme, že jsme to Píseň realizován v Scratch, že
zpívá, je to píseň který nikdy nekončí.
Je to prostě pokračuje dál a dál a věčně a navždy.
No, nemůžete opravdu program že má nekonečný počet printf
prohlášení v tom, že jo?
>> Takže v tomto případě, jeden způsob že byste mohli udělat tuto práci a
, aby se vytisklo navždy je místo toho použijte cyklus while.
Takže když smyčka bude provádět to, co je v těle dvou složených závorek, které
Patří k ní na základě toho, co Podmínkou je.
Takže v tomto konkrétním případě dříve, pokud Chceme-li tisknout na věky, co
můžeme dělat?
No jasně, že jo?
>> Tak to nějak v sobě spojuje myšlenku nějaký logický výraz
spolu se smyčkou.
A dozvěděli jsme se o logický výrazy dříve.
Takže pokaždé, když stav vnitřek že když zůstává pravdou, tato smyčka
bude provádět dál a dál a dál.
A v tomto případě, pokud budeme jen dodávat s pravdou, to způsobí nekonečný
smyčky, která vytiskne píseň dál a dál a jak jsme žádali dříve, aniž by
má program, který má nekonečný počet printf závěrce, která je
není možné.
>> Takže více přesvědčivě, i když, můžete použít s
variabilní a stav.
Takže řekněme, že chceme opakovat fráze, naprosto praštěné, 10 krát.
Takže, co můžete dělat s smyčky while je můžete nejprve inicializovat čítače
Proměnná mimo While do 10.
A pak se v podstatě pokaždé, když jdete pomocí smyčky while, můžete vytisknout
prohlášení a pak se sníží Počítadlo variabilní až na konci,
v určitém okamžiku, jakmile odečteme I dost krát, 1 od I dost dob ​​-
a jen vyjasnit, jsem mínus mínus znamená, že se rovná I minus 1.
>> To v podstatě přinese I až Místo, kde jsem kdysi hit nula, to
podmínka již není pravda a takže na výstupu ze smyčky.
Takže úplně praštěný pouze vytiskne 10 krát.
Jakékoliv dotazy týkající se chvíli smyčky?
OK.
>> Takže tam je způsob, jak můžeme dělat to, co jsme právě dělal v výstižnější způsobem s
to, čemu říkáme Pro smyčky.
Takže pro smyčka se skládá z inicializace, stav, a
aktualizace, stejně jako jsme měli předtím V této smyčce while.
Takže pojďme se podívat.
V tomto cyklus while, měli jsme inicializace, pak jsme měli
za předpokladu, že budeme kontrolovat.
A pak jsme měli aktualizaci krok v horní části.
>> S smyčce for, to v podstatě trvá Tyto tři věci a sráží ji
se do jednoho řádku.
Takže první věc, která to dělá v Pro smyčky je inicializace.
A pak si to středník, a poté ty podmínky, které je I
větší než nula, jde tam, a pak aktualizovat krok.
Takže to dostane provádí na velmi konec těla smyčky.
Takže tyto dva programy jsou v podstatě rovnocenné.
>> Jakékoliv dotazy?
Takže to, co je rozdíl mezi těmito dvěma?
Může někdo poukázat na to?
To by mohlo být trochu jemnější.
Je to jen velmi malý rozdíl.
Ano?
>> SPEAKER 5: Nebudete moci používat Proměnná jsem mimo For smyčky
[Neslyšitelný]?
>> JOSEPH: Přesně tak.
Tak to je něco, co budeme mít na později volal variabilní rozsah.
Ale v podstatě to pravý život I mimo tento cyklus while.
Takže jakmile to while se provádí provádění, budu moci I pozdější použití
Na programu.
>> Vzhledem k tomu, s tím pro smyčce, to int I je rozsahem uvnitř to pro smyčce.
A proto, že je v této části FOR smyčky, která začíná
v závorce a končí složená závorka tam.
Cokoliv, co je prohlášen uvnitř zde nelze používat venku.
Takže když se snažím používat I mimo, je to řekni mi, nehlášené symbol.
A v podstatě, já bych to být schopni používat.
>> ROB: A dobře, před 10 lety, v roce doslova všechny případy, složené závorky jsou
to, co slouží k určení rozsah proměnné.
Takže tam, pravý jsem se rovná 10 je deklarována uvnitř této
sada složených závorek.
A tak tedy, pokud se pokusíte použít I před tímto složenou závorkou, je to v pořádku.
Můžete vidět, když zadáte, aby, vám viz pomlčka, pomlčka, STD, rovná, C99.
>> Takže to je novější verze C, který GCC zavedla, že také dává
tento zástupce.
Takže to používá k nemělo být dovoleno v C. A můžete vidět proč, protože to int
I mimo tohoto složenou závorkou, ale je to stále považováno za
Rozsah těchto složených závorek.
Ale to je velmi výhodné věc, a tak to je dobrý rozšíření.
>> JOSEPH: Nějaké otázky?
OK.
Takže to, co je mnohem užitečnější je, že někdy Chcete-druh dynamiky v
vaše smyčky, ne?
Nechcete jen nutně vytisknout úplně praštěný po celou dobu, můžete
chcete odpočítávat od 10, nebo tak něco.
A tak můžete použít proměnnou counter uvnitř této smyčky stejně.
A v tomto případě, tento program pouze odpočítává od 10 po celou cestu dolů.
A co to netiskne?
To netiskne nula, pravdu, protože když -
Ano, je to také netiskne 11.
>> Takže to netiskne nula, protože při Já je nula, pamatujte si, že hodnotí
stav před tím, než jde na k provedení těla smyčky.
A když jsem je nula, to je nepravdivé, tak to netiskne se odpočítávat
nula, to prostě vytiskne počítání po 10 po celou cestu až do 1.
Pokud bychom skutečně chtěli, aby to tisknout na nulu, pak bychom dát rovnítko
poté, co tento znak větší než.
OK.
>> Takže jeden způsob, jak to udělat ověřování vstupu, které je, když se zeptáte uživateli dělat
něco, co budete chtít, aby se ujistil, že postupujte podle vašich pokynů, je použití
Zatímco smyčky, ne?
Takže v tomto konkrétním případě, ptám se pro kladným číslem a pak jsem
čekání na vstup.
>> A pak jsem zkontroloval když vstup je menší než nula, aby jim ptát.
Tak dlouho, jak oni mi dát číslo že není pozitivní, pořád ptají,
pořád ptají, pořád ptají.
Ale to, co je trochu divné o tom?
Nebo to, co se nezdá být optimální o Tato struktura přímo tady?
Každý, kdo?
Ano?
>> SPEAKER 6: Jste opakování instrukce dvakrát.
>> JOSEPH: Správně.
Takže máme dvě printf prohlášení tady, že jo?
Takže tam je způsob, jak se to mohlo dostat jen dolů na jeden, který by naši
kód čitelnější a snáze se trochu čistší.
A pak bychom nemuseli se dostat do dvakrát tak dobře.
A jeden způsob, jak to můžete udělat, je pomocí do-while smyčky.
>> A Do-while je v podstatě jiná forma smyčce while, kde
co je uvnitř složených závorek dostane vykonán alespoň jednou.
Takže tady prohlašuji, int vstup mimo první.
A pak jsem si řekl, to Instrukce při vstupu
je menší než nula.
Tak to dopadne jako první dělat.
To bude vždy provádět toto alespoň jednou, tak to bude vždy požádat uživatele
pro vstup alespoň jednou.
A pak se to vyhodnotí, že vstup, a to se děje v kruhu.
Ano, otázka?
>> SPEAKER 6: Existuje způsob, jak to udělat [Neslyšitelné] typy, jako když řeknete,
GetString, a někdo [neslyšitelný]
Je tam způsob, jak [neslyšitelný]
>> JOSEPH: Takže otázka je, je tam způsob, jak to udělat vstupní ověření, zda uživatel
neklade na pravé straně typ proměnné?
Takže pokud budeme žádat o int a nám řetězec místo.
A funkce, které se používají pro vás, vezmi_int, GetString ve všech
ty funkce, které skutečně již to, že jakýsi základní typ vstupu
validace pod kapotou.
Takže pokud používáte funkce, které jsme vám dal, nemáte opravdu muset.
>> Ale pokud chcete, aby vypadal na to, jak můžete skutečně udělat, můžete se podívat
pod kapotou v souboru I/O--
není soubor, standardní I / O funkce jako čtení ze standardního vstupu a
standardní výstup.
A můžete získat lepší pocit o tom, jak byste mohli udělat.
>> ROB: Jeden problém, i když je specificky se například můžete
řekl, můžete očekávat řetězec a zadám int.
Jak by se vám poznat rozdíl mezi záměrně chtějí
string 123 proti chtít int 123?
Takže řetězec, je to skoro neexistuje validace, je to jen, co se jim
vstoupil budete interpretovat jako řetězec.
>> Int je jednodušší, protože bez ohledu na to, Vstup, který se od uživatele, budete
vždy s ohledem na řetězec.
A tak, že řetězec pak můžete zkontrolovat, jsou všechny tyto
vlastně číselné znaky?
>> JOSEPH: OK.
Jakékoliv dotazy týkající se do-while smyčky?
>> ROB: Jo, a to je také -
návrat do rozsahu, poněkud obyčejné chyba se snaží využít některé místní
variabilní v rámci této do-while smyčky uvnitř tohoto stavu.
A vlastně, kdybychom se zbavili to a řekl, int vstup se rovná
Vezmi_int, pak kompilátor bude křičet na us, protože neexistuje vstup
mimo oblast působnosti Tyto složené závorky.
>> JOSEPH: A to je důvod, proč jsme Potřebujeme zde tento lineup.
OK.
Takže se můžete také dostat se z smyčka co nejdříve, pokud chcete.
Tak to je jiný způsob, jak , kterým se provádí to, co jsme právě prováděna.
A namísto použití stav v závorkách, jsme pomocí
Je-li prohlášení uvnitř těla z do-while smyčky.
>> A v podstatě, pokud je vstup konečně větší než nula, bude se
vymanit se ze smyčky.
A tak půjdeme všichni cesta sem.
A můžete vidět, že to by pravděpodobně výhodné v tomto
scénář, protože je to málo trochu čistší a trochu
bit čitelnější.
Vzhledem k tomu, to jste nějak mají zvláštní řádky v něm.
Je to jen trochu ošklivější, Myslím, že v jistém smyslu.
Ano, otázka?
>> SPEAKER 4: Budou zlomit jen získat můžete z jedné sady rovnátka?
>> JOSEPH: Správně.
Takže otázka je zlomí pouze vám z jedné smyčky?
A odpověď je ano.
Takže pokud jste vnořené cykly for, pro například, když mám pro int I rovná 0
do 10 a pak pro int J rovná 0 až 10, když jsem vymanit se z vnitřní
smyčky, budu i nadále pokračovat do vnější smyčky.
Takže to bude držet provedení operace na vnější straně.
Jakékoliv dotazy týkající se, že?
Ano?
>> SPEAKER 5: Ale zlomit pouze funkce pro složených závorek, ne pro ostatní
prohlášení?
[Neslyšitelný]
>> JOSEPH: Takže otázka je zlomí pouze funkce pro smyčky jsou na rozdíl od
další příkazy, jako kdyby?
A ano, je to tento případ, protože jste vypadla z smyčky, vpravo,
v jistém smyslu.
>> ROB: V drtivé většině případů je to to je druh, pokud se něco,
pak se zlomit.
Takže nemusíte rozbít se vztahují na Pokud tomu tak je obal kolem něj.
A také, že to není moc smyčky, ale pamatujte, že přepínače jsou také
členění z přestávkami.
Viděli jsme přestávky se používá s přepínači předtím.
>> JOSEPH: A můžete také použít ve while a pro smyčky.
Jakékoliv dotazy?
OK.
Takže příště až se funkce.
Takže jste mohli použít jeden z těchto BYOB bloky ve vašem Scratch projektu.
A to v podstatě umožňuje definovat sadu
pokyny je třeba dodržovat.
>> A co tím myslím, že je pojďme si zpět k matematice, vpravo, algebra.
Máte to, co nazýváme funkce x, některé proměnné, a řekněme, že to
funkce f na X je X plus 5.
Takže si můžete myslet f x, protože to černé box, který bere 15, a potom
produkuje 20.
>> Takže obecně, funkce je něco, co trvá několik vstupů a
pak produkuje nějaké výstupy.
A proč jsou funkce dobré?
Jsou dobré z mnoha důvodů.
Takže může někdo chtít, aby se bodnout na to, co organizace znamená?
Pokud jde o důvod, proč funkce jsou užitečné?
Ano?
>> SPEAKER 4: To je vaše kód čitelnější.
>> JOSEPH: Správně.
Takže jedna z věcí, které je činí váš kód čitelnější, ne?
Místo toho, aby jako int x se rovná x krát x x x, můžu mít kostku x,
který je čitelnější a více srozumitelná pro čtenáře.
>> Organizace je také z hlediska rozdělit svůj kód do zvládnutelné
části, takže místo toho se snaží realizovat to vše v jednom dlouhém úseku
V hlavní, můžete nějak rozdělit do na jako, OK, pojďme napsat funkci
aby kostka něco, pojďme napsat fungovat na náměstí něco.
Tímto způsobem můžete rozdělit až na malé, malé díly, které můžete řešit
na rozdíl od snaží řešit velký problém najednou.
>> ROB: Nebo i drobné, malé části, které vy a partner může řešit.
>> JOSEPH: Jo.
>> ROB: Takže místo toho, aby oba Snažíte se implantovat jeden
fungovat ve stejnou dobu.
>> JOSEPH: Zjednodušení.
Každý, kdo chtějí, aby se hádat?
Ano?
>> SPEAKER 5: Více opakování.
>> JOSEPH: Správně.
Takže jedna věc, kterou můžete udělat s zjednodušení je, že je to něco na
ve stejném duchu jako opětovné použitelnosti je, že Jednou jsem se napsat funkci, krychle, mohu
stačí použít, aby znovu a znovu a znovu opět v mém programu namísto psaní
x x x x x nad a znovu a znovu.
A zjednodušení zde také jen znamená, že je váš kód druhu
snazší ladění, jakmile se rozdělit to se do funkce.
Protože pak můžete lokalizovat kdekoliv vaše problémy nějak je.
Jakékoliv dotazy?
>> Takže další nápad je abstrakce, ne?
Tato černá skříňka.
Jako víte, co dělá vezmi_int přijímat vstup od uživatele?
Jsme opravdu řekl, že jo?
Všechno, co jsem vám řekl, je vezmi_int dělá přesně to, co říká, že to dělá.
Takže i když to nemůžu říct, jak to funguje, budete stále vědět.
>> Takže v tomto konkrétním případě se jedná čtyřnásobný funkce, která dělá
různé věci na vstup pro vytváření výstupu.
A můžete čtyřnásobek čísla že se vynásobí čtyřmi.
Nebo můžete to, co nazýváme trochu posunout ji dvěma.
A budeme pokrývat to trochu později.
A není třeba vědět, jak to funkce vlastně funguje tak dlouho, jak to
funguje, jak je uvedeno.
>> Takže pod kapotou, mohl bych být jako, vrátí vstupní krát
osm děleno dvěma.
A vy byste nevěděl, že jo?
Vše, co potřebujete vědět, je, dělá to, co říká.
Tak to je užitečná věc o abstrakci.
>> A další věc je trochu tato myšlenka z lokalizace kód do jednoho
zejména část.
Takže pokud máte nějaký problém, vy ne jít celého kódu se snaží
opravit, kde je problém.
Takže v tomto případě, jsem implementoval kostka špatně.
Myslel jsem, že kostka byla vynásobením třemi.
>> Takže v tomto případě, je to jeden program že prostě se vynásobí třemi
všude.
A je tu další program, který má zapracovány kostka se do funkce.
A tak teď, když chci napravit svou chybu tady, musím opravit každý řádek
kódu v tomto programu.
Vzhledem k tomu, na druhé straně, pokud se používá funkce, jen jsem třeba změnit
co se děje na jednom místě.
>> Takže v informatice, jsme zavolejte vstupy a výstupy.
Vstupy se nazývají parametry nebo argumenty a výstupy se nazývají
návratové hodnoty.
A uvidíme, jak nám to pomůže trochu o definovat funkci ve vteřině.
Tak to je definice funkce pro Cubing.
Tak to trvá vstup, a pak to vrátí, že počet krát
sám třikrát.
Takže pojďme rozčlenit tento systém.
>> Takže máme hlavičku funkce, které v podstatě se skládá ze tří věcí.
Takže máme parametry, které jsou, jak jsem již řekl dříve,
vstupy do této funkce.
A pak dáme Funkci jméno.
V tomto případě, je to jen kostka.
A pak jsme se určit, jaký typ z návratová hodnota je.
>> Takže v tomto případě, můj kostka funkce bere na celé číslo, a to i
vrátí celé číslo.
Takže když jsem se projít ve dvou, dvou je celé číslo, se vrací osm ke mně, což
je celé číslo.
Takže návrat parametry název typu.
Otázky o tom?
>> A pak návratová hodnota je ve skutečnosti je uvedeno na konci tím, návrat
a pak se vracet, co obsahuje návratovou hodnotu.
Takže v tomto případě, pokud bychom to všechno společně, funkce se v
parametry, je to jen něco, a vrátí něco, co je typ
že říkáme, že to bude.
Jakékoliv dotazy?
>> Tak jak jsme se použít funkci?
No, my napíšeme funkci a pak jsme ho používat v našem programu, ne?
Tak jsem to nazval krychle, a pak mohu použít kostku.
>> Ale to, co je důležité si uvědomit, je to, že objednávka záležitosti.
Pokud mám kostku pod hlavní, je to bude běžet do krychle.
A v tomto bodě, tam je nic volal kostka v programu, a to
Jen bude vypadat, mám žádný nápad, co krychle.
>> Tak to vám řekne, implicitní deklarace funkce.
To je chyba, která se objeví.
A tak v tomto případě, kostka je pod hlavní, takže to nebude
o tom vědět.
>> SPEAKER 5: Takže hlavní je obvykle poslední funkce definované?
>> JOSEPH: Takže otázka je, je hlavní obvykle poslední
věc, kterou byste definovat?
A no.
Je to proto, že jsme většinou rádi hlavním být na vrcholu, že jo?
Vzhledem k tomu, že je to první věc, kterou Chcete-otevření programátor
program viz.
A tak jak jsme se vyřešit tento problém my Chci hlavním být na vrcholu, ale
funkce, které chceme, chceme jim být pod hlavním ještě mohli používat
je uvnitř hlavní?
>> No, my používáme to, co nazýváme prototyp funkce.
Takže to, co prototyp funkce v podstatě je je to první, co se
podpis nebo záhlaví funkce o tom, co chceme realizovat dolů
tu, a dáme ji na v horní části programu.
>> Takže v tomto případě, můžeme říci, že dobře, později v našem programu, jedeme
aby slib zavést tento volání funkce int kostka, která se
číslo vstupu.
Takže teď, protože to je nad hlavní, hlavní, bude to říct, oh, dobře,
později v programu, který se bude tam, takže jsem si na něj odkazují, takže budu
nech to projít teď.
>> A pak ve spodní části, realizujeme kostku.
A pak hlavní bude jen říct, dobře, bude to jakýsi odkaz
Tyto dva symboly společně.
A budeme pokrývat, co to znamená, že později.
A tak to bude vědět, že je to Funkce kostka, že by měl používat.
>> ROB: [neslyšitelné] o chtějí Hlavní v dolní části
nahoru, viděl jsem jak.
Existují věci, které stejně jako , aby ve spodní části hlavní.
Ale jakmile se projekt dostane zejména velký, obvykle hlavní je v
soubor všech jeho vlastní.
A v tomto bodě, jako je int kostka linka by -
uvnitř stdio.h jsou banda řádků jen tak int
kostka int linkový vstup.
>> A tak ty prototypy jsou věci, které mají tendenci dát do hlavičkových souborů, na
které ukazují, že nezáleží na tom.
No, na tom nezáleží.
Ti vždycky nahoře.
A pokud hlavní není soubor všech jeho vlastní, nemusíte se starat o uvedení
Jednotlivé funkční prototypy v souboru.
>> JOSEPH: A dostaneme se, že trochu Trochu později, když Rob začne mluvit
o kompilaci.
A tak je tu také rozdíl mezi parametrem a argumentem.
A parametr je právě to, co nazýváme tyto vstupy při
definujeme funkci.
A říkáme, že argument, když jsme ve skutečnosti se do ní funkce.
>> Takže v tomto případě se jedná o parametr, jak jsme řekli dříve.
A když jsme vlastně používat tam, kostka X, pak X je sám o sobě
to, co nazýváme argument, do funkce krychle.
>> ROB: Takže argumenty parametru jsou -
je tento rozdíl velmi zmatený zaměnitelně.
Na tomto místě, pro mě, je to jako jedna z tato slova, že když jsem ho vidět v
divoký, nemůžu si pomoct, ale hned otázka, zda se jeho použití v
správný kontext, protože Rozdíl je v tom dost subtilní, že právě
každý má tendenci -
Málem jsem vždycky říkám argument, bez ohledu na to, co mám na mysli.
>> JOSEPH: A funkce jsou také užitečné za to, co nazýváme vedlejší účinky.
Takže funkce může mít žádné vstupy, a to může také produkovat žádné výstupy.
Takže v tomto konkrétním případě jsem definovat podprogram, který nemá žádný
vrátí hodnotu.
A aby se stanovilo, že používáme to, co nazýváme mezeru sem.
A tak vedlejší efekt této funkce je, že to prostě vytiskne věci
ven na stránku.
To není ve skutečnosti se některý vstupy, a to není
vlastně produkovat žádné výstupy.
>> Ale to by mohlo být užitečné v tom smyslu, Chcete-li, například, ladění
něco, co ve svém programu, pokud chcete napsat trochu podprogram, který
vytiskne, řekněme, obsah paměti, nebo tak něco.
A tak se tyto nežádoucí účinky jsou někdy užitečné mimo rámec
o stejně jako vstupy a výstupy.
Jakékoliv dotazy?
>> A na konec tohoto konkrétního segmentu, co tento program dělat?
Dám ti kluci pár sekund číst přes to.
Na velmi základní úrovni, to, co chceme říci, je to, že vymění x a y, ne?
>> Tak kolik z vás skutečně myslíte to vymění x a y?
Zvedněte ruku.
Nikdo.
OK.
Kdo si myslí, že to bude Není zaměnit x a y?
A suma, která byla není celá místnost.
Takže někteří lidé nejsou jisti.
OK.
To je rozumné.
>> Takže pojďme se projít, co se stane, když jste vlastně volat funkce první
Abychom mohli odpovědět na tuto otázku.
Tak tohle je to, co paměť trochu vypadá.
To je něco jako zjednodušený model co paměť vypadá, když
spuštění programu.
Takže je tu něco, co nazývá zásobník tady dole a
něco, co se nazývá haldy.
A ty rostou směrem střední paměti.
>> Takže v tomto konkrétním případě, kdy voláte funkci,
dostane kladen na zásobníku.
A pak, co je obsaženo v tom, že funkce zůstává v tom, co říkáme, že
Funkce stack frame.
A tak si pěkné vizualizaci to, let's - například jsme měli
programu main dříve.
A uvnitř hlavní, říkali jsme kostku.
Takže hlavní by nejprve jít na stack rám, protože je to první funkce
tomu se říká.
>> A pak, když kostka se nazývá vnitřek hlavní, dostane kladen na horní části hlavní
vnitřní paměti.
Takže to, co si všimnete, je, že kostka má své vlastní parametry a jeho
vlastní místní obyvatelé.
Takže, když jste vlastně složit něco funkce, parametry, které se
dostane se kopie toho, co bylo prošel od hlavní.
>> A nějak vysvětlit, pojďme projít program.
Takže máme hromadu, což je jen zásobník část.
A to, co děláme, je, že jsme nejprve inicializovat x a y na jeden a dva.
Takže máme tyto malé krabičky.
Oni sedí v hlavní stacku rám na zásobníku.
Obsahují jeden a dva.
>> Teď říkáme swapu.
Co se stane, je, že jsme projít x a y do swap a swap vytváří své vlastní kopie
o tyto proměnné používat uvnitř z jeho rámce zásobníku.
Takže teď tam máme, což obsahuje hodnotu, která měla x, b,
který obsahuje hodnotu, která měla y.
Tak jeden, dva.
>> A všimněte si, že je to samostatný z x a y uvnitř z hlavní.
Tak jsme se vytvořit dočasný proměnná obsahovat.
Vydali jsme se rovná b, takže změny z jednoho na dva.
A pak jsme se vydali b rovné na teplotě, což je jeden.
>> A pak se můžeme ukončit ven této funkce.
Když ukončíte z funkce, stack frame dostane vyskočila off zásobníku.
Říkáme, že tlačit.
Můžete tlačit rámeček zásobníku do zásobníku a pop, jestliže mimo zásobníku.
A tak to, co se stane, je vše, co byl v tomto zásobníku rámu druhu jen
jde v plamenech.
A tak, že již neexistuje.
>> Ale co jsme si všimli?
Nikdy jsme se vlastně změnilo hodnoty x a y, ne?
Takže ti zůstali místní hlavní.
A předáním věci do swapu, se vlastně nikdy nezměnil těchto hodnot.
A co nazýváme to?
Nazýváme to kolem hodnoty.
>> Takže v C, při předání věci do funkce, předává jim hodnoty a
vytvoří kopii nich funkci použít.
A dozvíme se o něco, co nazývá předávání odkazem později, ale to je
způsob, jak lze tento problém vyřešit.
Ale nebudeme bát že až později.
>> ROB: A ve skutečnosti, že termín, procházející odkazem, takže C ani nemá
předávání odkazem.
C výhradně se kolem hodnoty.
Bez ohledu na to, co děláte, jste vždy předáním kopie něčeho.
Je to jen, že, jak jsem trochu zmínil že předtím, než se ukazatele
a že řetězec je opravdu jen čtyři bytů ukázal někam do paměti.
>> No, pokud mám tento řetězec, a to mi říká, že je místo, kde řetězec -
dobře, když mám tento ukazatel na tuto místo v paměti, pak jsem si projít
Kopii tohoto ukazatele na funkce, a že funkce ještě ví, kde v
paměť je.
Tak jsou oba tyto ukazatele směřující na stejné místo v paměti, a
že to, jak budeme moci změnit věci nad rámec
aktuální stack frame.
>> JOSEPH: Chcete udělat kompilaci?
>> ROB: Ne, to je 05:30.
>> JOSEPH: OK.
Je 5:30.
OK.
Takže se budeme zabývat sestavování Myslím, že v další část, nebo váš sekce
vůdce bude v tomto bodě.
A -
>> ROB: Nějaké otázky?
>> JOSEPH: Nějaké otázky?
Ano?
>> SPEAKER 5: Použití řetězce z CS50, každá funkce, které chceme použít pro
ti, že to bude jako C funkce.
CS50 nebyl pryč a z jakékoliv další.
>> ROB: Správně.
Každý z C jako [neslyšitelné], můžete by se používat ty na našich řetězcích.
>> JOSEPH: A ještě jedna poslední věc, kterou chci zmínka je, že máme průvodce stylu
pro tuto třídu.
>> ROB: Jo, jo.
>> JOSEPH: Takže pokud jste přišel z Před naprogramováním pozadí, můžete
může mít určité konvence, kdy píšete kód, jako je uvedení
šle na stejném řádku nebo zejména způsoby odsazení
nebo pojmenování proměnných.
V této třídě, chceme následovat specifický styl průvodce jen proto,
dobře, když jdete ven a pracovat v průmysl, budete očekávat,
následovat průvodce stylu společnost, ve které jdete.
>> Stejně jako například Facebook myslím, že má zvláštní druh pojmenování
konvence.
A tam je rozdíl mezi velbloudem opláštění proměnné a, stejně jako
oddělte je podtržítek.
A také si myslím, že je nejdůležitější, stejně jako například odsazení, že jo?
>> Nemáme složené závorky začít tam, kde podmínkou je, a oni
jsou na dalším řádku.
A my jsme také dát složené závorky v i když je to jen jeden řádek.
A hodně krát, existují způsoby, jak dělat to, kde si můžete nechat tyto rovnátka
vypnout, pokud je to jen jeden řádek v rámci příkazu If.
Ale v této třídě, chceme následovat specifický styl průvodce jen tak dostanete
používá k takové věci.
>> ROB: Jo, a Style 50 se chystá prosazování tohoto stylu průvodce, a my jsme
bude používat styl 50 do platové třídy kódu.
Tak to dělá věci pro nás jednodušší a doufejme, že by neměl dělat věci, které
mnohem horší pro vás vzhledem k standardizovaný způsob by neměl být, že
nereálné.
>> JOSEPH: A konečně, najít styl průvodce, jděte na manual.cs50.net/style.
A jo.
>> SPEAKER 4: Chystáš se prosadit všechny znaky na řádek?
>> ROB: Ano.
>> JOSEPH: Je nám líto, kluci.
>> ROB: To je jako jeden z mála ty.
V tomto bodě, jsem OK s 120.
Jsem OK se říká 120 znaků na řádek.
Chápu, že je nějaké omezení.
Myslím, že 80 je tak malý, ale budeme prosazovat ji.
>> JOSEPH: Osobně si myslím, že se C, 80 znaků je v pořádku.
Jakmile začnete dostat do další jazyky, jako je JavaScript a PHP, ne
tak rozumné jen omezit je 80 znaků.
OK.
No, to bylo super sekce.
Má někdo chtěl cukroví?
>> SPEAKER 4: Ano.