[Powered by Google Translate] DAVID J. Malan: Dobře, to je CS50, a to je
konec 1. týdne, takže studijní karty jsou v a celkový počet
spolužáci, že máte tento rok je 745.
A my jsme tak nadšeni, že tak mnoho z vás v průběhu
tento semestr, ale i přesto je tento kurz je tak velký,
uvědomit, že to tyto věci jako oběd pátek jako
úřední hodiny, 15-person profily, a tak dále, aby
jsou opravdu chtěl vytvořit tento více intimní
prostředí.
Takže i když můžeme shromažďovat jednou nebo dvakrát týdně, tady v
Sanders, vím, že hodně z vašich zkušeností v tomto kurzu
bude velmi se hands-on na boku vašich spolužáků
a pedagogičtí pracovníci.
>> Tak jdeme na to, Fall 2012.
Takže připomenout, že naposledy jsme skončil na sdělení ze dne
nepřesnost, mluví o reprezentaci čísel.
A my jsme se na jednom z poruch, které se staly v
reálný svět, když to přišlo k nedorozumění
jak počítače fungují.
No, dnes budeme znovu další z těch nápadů, jak
a pokračovat v naší diskuzi o CS50 klienta
a C a co to znamená opravdu programu.
Ale nejdřív, jen pár oznámení vichru.
>> Sekce začnou tuto neděli, a první týden je vždy
trochu rychlým rozběhem, protože jsme zrovna v
svého oddílu formuláře.
Děláme totéž, nyní s výukových kolegy, nyní
že znají své plány, takže jsme s cílem, by
V sobotu ráno, aby se vám, s vaším sekci
přiřazení a TF.
Uvědomte si, že začnou příští den, v neděli
nebo v pondělí nebo v úterý.
A pak jsme se ubytovat v části změny, které nastanou
v nadcházejících dnech.
Úřední hodiny, zatím jsou, opět, dnes, dvacet hodin na 11, v
Annenberg, stejně jako zítra večer.
I když problém sady jsou obecně kvůli čtvrtek
v poledne, že jste si až pět pozdní dní strávit,
tedy dostupnost úředních hodin ve čtvrtek, pokud
vy hotovosti v jedné z těchto pozdních dnů, a tím, předloží
něco na pátek.
Dovolte mi navrhnout, že Scratch je mezi více zábavy, mezi
Více nejnižší Klíčovým problémem sady.
A já bych viset na těchto pozdních dnů, strategicky, jen
pro pozdější použití do semestru, kdy život začíná v cestě
s midterms a jiných tříd.
Problém Set 1, mezitím, bude zanecháno kurz je
Webové stránky tento pátek, jak bude na hřišti chůze
přes video, které bude natočen v 14:30 v pátek
a poté odesláno on-line do druhého dne.
>> Takže jsme skončili v pondělí.
Chci - vlastně, poznamenat, zde.
Protože třídy - protože Sanders není přesně zapůjčení
sám k příležitostnému Q & A sem a tam moc dobře, že jsme
Pokusím se něco málo nových letošním roce, kdy
Pokud nejste spokojeni zvýšit svou ruku, nebo si jen
by raději zvednout ruku v místnosti, jako je tato,
budeme mít některé z výukových kolegy a CAS
obsazení cs50.net/discuss během přednášky.
Takže pokud máte nějakou otázku, protože jsem byl úplně
jasné, o něčem, nebo jste zvědaví, některé
téma, zkuste vysílání to tam.
Označit ji štítku Přednáška, a my se budeme snažit
dnes a příští týden - Dáme zkuste tohle - postavit ji
buď v elektronické, on-line, nebo pokud je to jako bychom měli
Opravdu se jí zabývaly en masse, jeden z výukových chlapíků, nebo
CA zvýší jejich ruku a zeptat se
anonymně vaším jménem.
Takže dáme to zkuste a uvidíte, jak dobře to funguje.
Ale v každém případě, i nadále zvyšovat ruce, jako byste chtěli.
>> Takže naposledy jsme zjistili, že 10% nebo jednu desetinu není v
Skutečnost, 0.1, jako byste se učili před mnoha lety.
Je to ve skutečnosti, hodnota takto.
Ale to není zcela pravda, ne?
Musíme jen toto omezení v počítačích, kdy, pokud
mají pouze omezené množství paměti, RAM, nebo více
konkrétně bity, dobře, je to jen konečný počet
věcí, které mohou představovat.
Například, pokud budeme mít číslo nula, a chceme, aby
představují v binární, pomocí osmi bitů, kde bit,
znovu, je nula nebo jedna, můžeme
představují jako 00000000.
A to je trochu zbytečně upovídaný.
Stejně jako v desítkové soustavě v reálném světě,
obecně, pokud chcete napsat číslo 123, se
lidé pravděpodobně nebudou psát 00000123, i když,
funkčně, že je to přesně stejný počet.
Jsme jen kapka úvodní nuly, abych tak řekl.
>> V binární, můžeme totéž.
Binární a nula, nula a binární je jen nula.
Potřebujete pouze jeden bit.
Ale znovu, nejčastěji měrná jednotka na světě
výpočetní jsou bajty, osm bitů.
Jen proto, že jeden bit, docela k ničemu.
Osm bitů, není příliš užitečná, ale alespoň je to více
užitečnější než jednu měrnou jednotku.
Takže pomocí osmi bitů, budeme obvykle představují binární.
Takže tu máme čísla nula, jedna, dva, a pak, jak
Nate dělal v našem videu minulou středu, můžeme pokračovat
počítání až sedm, osm.
A pak pokud budeme používat více a více bitů, jsme
může počítat do nekonečna.
Ale pokud máte jen konečný počet těchto bitů, jako je
případ jakéhokoli počítačového systému, nebo dokonce střela
systém, dobře, opravdu máte jen
konečné množství přesnosti.
Takže pokud chcete, aby zastupoval číslo jako 0,1, dobře,
Počítač musí vybírat.
A pokud to má jen konečný počet čísel pro to,
představují, může přiblížit 0,1 pro ty, ale to nemůže
nutně vám přesně hodnotu, kterou chcete.
A to je jen jeden z problémů počítačů,
pod kapotou, naštěstí.
>> Jak jsme se přestěhovat dál v semestru, tyto nižší úrovně
Podrobnosti mnohem méně zajímavé, ale rozhodně
aplikace těchto myšlenek může mít některé velmi reálný svět
následky.
Jedním z nich je trochu legrace.
Jak mnozí z vás viděli úžasný film Office Space?
Pokud nemáte, je to váš neoficiální
domácí za týden.
Ale v kancelářských prostor, se chlapi v tomto filmu se
Výhodou právě tohoto nápadu, ale oni vlastně ukradli
to z jiného filmu, který by se Vám mohl mít
Viděl, dokonce i roky předchozí.
Takže mi dovolte, abych vám několik sekund tohoto přívěsu od
tento úžasný film a to je velmi
akademicky relevantní.
>> [Hraje filmů]
Vlastně jsem byl povýšen.
Mohu naprogramovat virus, který bude trhat, že
místo off velký čas.
No, jak to funguje?
Pokaždé, když je bankovní transakce, kde úroky jsou
vypočítaný, existují tisíce den, počítač skončí
s těmito zlomky procenta.
Ale já nebudu dělat nic nezákonného.
Nelegální? Samir, tohle je Amerika.
Musíte přísahám Bohu.
Pokud nikdo neví o tom, ale nás, v pořádku? Žádní rodinní příslušníci, žádné
přítelkyně, nikdo.
[Neslyšitelné].
Nebojte se, člověče, já to nikomu neřeknu ani.
[Film končí]
>> Dobře, takže možná jsem našel tento film lepší než většina
lidé tady, ale v žádném případě, virus, že byly
snaží vytvořit -
a ve filmech, kdykoliv se to nazval něco virus,
to obecně není vlastně virus.
Je to jen program, který někdo napsal něco udělat.
A v tomto případě, že kluci se snažili napsat program
které využily jejich společnost s názvem INNOTECH tyto
výpočetní systém, v jehož rámci počítače, taky, i když to
přijde na peníze, nemůže být nutně
představují peníze přesně.
Takže i když budete muset 0,10 dolarů na váš bankovní účet,
0,10, dobře, že počítač skutečně myslíte, že máte
tento mnoho centů ve vašem bankovním účtu.
A tak to, co tihle hoši byli aspirující na to - a oni
ukradl nápad, to dopadá z Nadčlověk III, kde
Richard Pryor udělal stejnou věc - oni byli nezbytně
psaní programů, které aspirují, aby všechny koncové
čísla, všechny z malých, drobných, malých frakcí
pennies, a nasává ty z tak, aby se lidé jen
myšlenka, oh, je to jen 0,10 dolarů tam, ale všichni ti,
koncové čísla nakonec sčítají.
Tak skvělý nápad a to selhalo vesele v tom, že
zejména film.
>> Ale v reálném světě, i tam jsou mnohem více o
Důsledky těchto druhů věcí.
A jedním z důvodů, proč se do toho ponořit do oblasti počítačové
vědy je opět jeho použitelnost ne
inženýrské vědy samotné, ale jen proto, aby
jiných oblastech.
Tak to je méně veselý pohled na to, co se může pokazit, ale
je to také docela otevření očí, myslím, pokud jde o
pochopení přesně tak, jak všudypřítomné technologie jako
počítače a programování, nebo v těchto dnech,
ve formě softwaru.
Takže to další klip je jen asi šest minut, pokračuje
kde jsme skončili minule, ale umožňuje nám nahlédnout trochu
více do hloubky na jeden takový z těchto otázek.
Dovolte mi, abych přeskočte na místo, kde jsme skončili,
který byl tady.
A máme druhou část dva, přibližně šest minut zde.
>> [PLAY MOVIE]
Soužený moderní raketové techniky.
V roce 1991, se na začátku první Gulf válce, Patriot
Střela zažil podobný typ
číslo konverze problém.
A jako výsledek, bylo zabito 20 lidí, 20 amerických vojáků,
a asi 100 dalších zraněno, když Patriot, který měl
na ochranu proti příchozí pluje,
nepodařilo vystřelit raketu.
>> Když Irák napadl Kuvajt a Spojené státy rozpoutaly Desert
Storm počátkem roku 1991, Patriot raketové baterie byly
nasazeny na ochranu Saudskou Arábii a Izrael z irácké
Plout raketové útoky.
Patriot je americký střední rozsah povrch-k-air systém,
vyráběné společností Raytheon.
Velikost Patriot interceptor samotné, ale o
zhruba 20 metrů dlouhá a váží asi 2000 liber.
A to s sebou nese bojovou hlavici asi - myslím, že to je zhruba
150 liber.
A hlavice sám o sobě je vysoce výbušné, který má
fragmenty kolem ní.
Kryt hlavice je navržen tak, aby fungovat jako hrubé broky.
Rakety jsou prováděny čtyři na obalu a jsou
přepravována návěsu.
>> Patriot protiraketový systém sahá přinejmenším do
20 let.
To bylo původně navržené jako raketa protivzdušné obrany na
sestřelit nepřátelské letouny, v první válce v Perském zálivu.
Když ta válka přišel, armáda chtěla použít k fotografování
stanoví pluje, ne letadel.
Air Force Irácký nebyl tak velký problém, ale armáda
strach o pluje.
A tak se pokusili upgrade Patriot.
Záchytný nepřítel střela jede MACH 5 se děje
být dost náročné.
Ale když byl Patriot spěchal do provozu, armáda
si nebyl vědom iráckého úpravy, které udělali jejich
Pluje téměř nemožné zasáhnout.
>> Co se stalo je Pluje, které byly
přichází v byly nestabilní.
Byli viklání.
Důvodem pro to bylo, že Iráčané, aby si 600
kilometrů mimo a 300 km doletu, se
hmotnost z přední hlavice a
z hlavice lehčí.
Takže teď Patriot se snaží přijít na Scud, a většina
čas, drtivá většina času, by se
Jen podívejte se v Scud.
Jakmile provozovatelé systém Patriot, si uvědomil, Patriot
minul svůj cíl, že odpálil Patriot hlavici.
Aby se předešlo možným obětem, bylo dovoleno
k pádu na zem.
To bylo to, co většina lidí viděla, jak velké ohnivé koule na obloze,
a nepochopení, jak zachytí jaderných hlavic Scud.
>> I když, na noční obloze, Patriots se zdá být
Úspěšně zničené Pluje na Dhahran, mohlo by být
chyba týkající se jeho výkonu.
Tam, na vlastence radarový systém ztratil stopu
příchozí Scud a nikdy zahájena z důvodu
k softwaru chyby.
To bylo Izraelci poprvé objeven, že čím delší
systém byl na, větší časový nesoulad se stal,
kvůli hodiny vložené do systému v počítači.
Asi dva týdny před tragédií v Dhahran, že
Izraelci hlášeny na ministerstvu obrany, že
Systém byl ztrácíme čas.
Po osmi hodinách provozu, všimli si, že
Systém byl stále znatelně méně přesné.
Ministerstvo obrany odpověděl tím, že řekne všechno
The Patriot baterie nenechat systémy
po dlouhou dobu.
Nikdy neřekl to, co dlouho byl - 8 hodin, 10
hodin, 1000 hodin.
Nikdo nevěděl.
>> Patriot baterie umístěná v kasárnách v Dhahran
a jeho nedostatky vnitřní hodiny byl na více než 100 hodin na
noc února 25th.
Je sledován čas s přesností na asi desetinu sekundy.
Nyní desetina druhá je zajímavé číslo, protože
nemůže být vyjádřen v binární, přesně, což znamená, že
nemůže být vyjádřen přesně v jakékoli
Moderní digitální počítač.
Je těžké uvěřit.
Ale používat to jako příklad.
>> Pojďme se počet třetiny.
Jedna třetina nemůže být vyjádřen v desetinné, přesně.
Jedna třetina je 0,333 děje na nekonečno.
Neexistuje žádný způsob, jak to udělat, aby s absolutní přesností v desítkové soustavě.
To je přesně stejný druh problému, co se stalo v
Patriot.
Čím déle systém běžel, horší chybě v čase stal.
Po 100 hodinách provozu, chyba v té době byl pouze
asi jedna třetina sekundy.
Ale pokud jde o cílení raketu cestování na MACH 5,
to mělo za následek sledování chyb více než 600 metrů.
Bylo by fatální chyba pro vojáky na Zahránu.
>> Co se stalo, je spuštění Scud byl detekován včasného varování
satelity a oni věděli, že Scud přichází v jejich
Celkový směr.
Oni nevěděli, kde to přichází.
Bylo nyní na radaru složky Patriot
systém, brání Dhahran, lokalizovat a sledovat
příchozí nepřátelské rakety.
Radar byl velmi chytrý.
Ty by vlastně sledovat pozici Scud a pak
předpovědět, kde to asi bude příště
radar poslal puls ven.
, Která byla nazývána rozsah brána.
Poté, co Patriot rozhodne dost času uplynulo jít
dozadu a zkontrolujte následující umístění tohoto zjištěného
objekt, se vrátí zpět.
Takže když se vrátil na špatné místo, pak nevidí
námitky, a to rozhodne, že tam byl žádný objekt.
Byl to falešný detekce a kapky na trať.
>> Příchozí Scud zmizel z obrazovky radaru.
A vteřin později, narazila do kasáren. Scud
zabil 28 a byl poslední výpověď během
první válka v Zálivu.
Tragicky, aktualizovaný software dorazil Dhahran
následující den.
A software chyba byla stanovena, uzavření jedné kapitoly v
ustaraný historie Patriot rakety.
PATRIOT je vlastně zkratka pro "sfázovaných sledování
Úsek TARGETu. "
>> Dobře, tak mnohem víc smutný výsledek není zcela
pochopení tohoto světa.
A Takeaway, skutečně, z filmu je, že řešení
tam byl restart systému protiraketové obrany
každý jednou za čas.
A tak znovu, je jedním z cílů tohoto kurzu, rozhodně
na více skromného měřítku než tyto aplikace, je
Opravdu přejdi na každého z nás oči do přesně tak, jak jste jít o
Stroje na výrobu dělat to, co od nich chcete dělat a jak jdete
o tom, že správně, zatímco na cestě dělá
dobře, elegantně, a tak dále.
A tak dnes, pojďme se ponořit do trochu více, ale
tak, že se ne příliš rychle, a to zejména pro ty méně
pohodlné, ale také tak, že se může zachovat zájem
ty pohodlnější, pojďme rychle začít s trochou
z rekapitulací některé z těchto myšlenek.
A opět, ptej, jak osobně, nebo on-line, máte-li
otázky tak můžeme udržet všechny na stejné stránce.
>> Takže CS50 spotřebiče, rychlé krok zpět, je
co, svými vlastními slovy?
To je v pořádku, pokud máte tušení, co tato slova mohou být ještě.
[Neslyšitelné]
Dobře, tak univerzální rozhraní pro -
že můžeme všichni sdílet.
Absolutně.
Takže jsme mohli, například, ti jít na některé
webové stránky, stáhnout tento software pro Mac OS.
Stáhněte si tento software pro Windows, konfigurovat
tímto způsobem a že.
Ale realita je pak narazíme na nespočet technických
podporovat problémy.
A také v těchto dnech, hodně z toho, co se děje na straně serveru,
ve světě výpočetní techniky, a to zejména pokud jde o
vývoj webových aplikací a webových aplikací, je ve skutečnosti
často provádí na Unix nebo Linux počítačů, na rozdíl od
Macs nebo Windows PC.
>> Takže mezi upsides, pak použití tuhle věc nazývá
CS50 Appliance je budeme všichni mít stejné prostředí.
Takže všichni jsou na stejné stránce bez ohledu na to, jaký hardware
přišel do areálu s, ale také bude fušovat do přesně
ve stejném prostředí, které budete používat k
Semestr Konec i pro vývoj webových, stejně jako v
Budoucnost reálných aplikacích jejich.
Takže konkrétněji, CS50 Appliance je zdarma kus
software, který vám umožní spustit jiný operační systém,
Linux, v tomto případě, na svém počítači, v okně.
Nyní si můžete nejen stáhnout spotřebič.
Potřebujete program, se kterým se hrát nebo spustit přístroj.
A ten kus softwaru, je obecně známý jako
hypervisor.
Hypervizory přicházejí ve formě produktů, jako jsou VMware,
Virtual Box, Parallels.
Všechny druhy společností, aby software, a to jak zdarma a
obchodní, podobný.
Co uvidíte v problému Set 1 jsou instrukce o tom, jak
získat zdarma software, s nimiž se
spustit CS50 Appliance.
A jakmile to uděláte, budete mít v okně na vašem počítači Mac nebo PC,
desktop prostředí, které vypadá docela jako to, kde
má v nabídce Start-jako věc
levém dolním rohu.
Má domovskou složku, nebo domovský adresář, v levém horním rohu
tam, může odpadky, a tak dále.
Takže budeme šprýmaři odděleně potřebné údaje, jak jsme jít.
>> Ale teď pojďme začít se ponořit do C.
Takže C je to programovací jazyk, podobný v duchu, aby
Scratch, ale daleko méně grafické, ale ironicky, pokud
mocnější, jakmile se dostanete důvtipný s ním.
Takže v C, píšeme programy psaním zdrojového kódu, který je
Tento anglický-jako syntax, podobně jako ponožky
prokázání, že jsme minule, která vám umožní
vyjádřit sám sebe docela přesně, pokud
arcanely, k počítači.
>> Takže jaký druh výrobku softwaru si budete skutečně potřebovat
psát programy v jazyce jako C, zakládají na našich
konverzace v pondělí?
[Neslyšitelné]
OK, stačí textový editor.
Nepotřebujete žádný speciální software
samo o sobě psát programy.
Potřebujete k tomu jen textový editor, jako je Poznámkový blok, v systému Windows,
TextEdit na Mac, nebo něco, co nazývá gedit, ve světě
Linux, který budeme používat tu.
A to je, psát programy.
>> Ale psaní je jen polovina z rovnice.
Potom je třeba spustit.
Aby však bylo možné spouštět programy -
Nelze spustit zdrojový kód.
Ty místo toho dělat to, co k ní jako první?
Jo.
DAVID J. Malan: Musíte
zkompilovat.
A někdo jiný, sestavování zdrojového kódu znamená -
[Neslyšitelné]
DAVID J. Malan: Přesně tak.
Překládat do nul a jedniček.
Protože všechny z nás, v těchto dnech, mají počítače, které mají procesory,
téměř všechny, které jsou vyrobeny společností s názvem Intel, a
Intel Inside, znamená, že je to mozek uvnitř vaší
počítač, známý jako CPU.
A jedna z věcí, které ten mozek dělá, je, že ví,
jak pochopit zákonitosti nul a jedniček.
To ví, co vzor bitů představuje Kromě toho, co
vzor představuje součty a rozdíly, co se vzor
bity představují tisku, a vytváří slyšitelný zvuk.
>> Takže ve zkratce, CPU, spolu s operačním systémem,
který je kus softwaru, který běží na procesoru,
abych tak řekl.
Společně tyto dva kusy vědět, jak spustit programy, které
my lidé psát.
>> Takže když jdu do CS50 Appliance tady, musím otevřít
up textového editoru a můžu přístup k této
v několika ohledech.
Můžu buď jít do menu, programování,
a pak jsem si vybrat -
Ne, není to menu.
Mohu jít k Příslušenství / gedit zde pro otevření
můj malý textový editor.
Nebo přesněji řečeno, mohu na tuto malou ikonu ve spodní části
levém rohu.
A teď jsem si toto prostředí zde.
Je to docela připomíná jednoduchý textový editor, jen s
jeden nebo dva rozdíly.
V horní části, kde je kurzor blikající nyní, to je místo, kde
Mohu začít psát svůj kód.
Ve spodní části je to, co nazývá okno terminálu.
A jaké věci mohu dělat v této
tzv. okno terminálu?
[Neslyšitelné]
>> Dobře, tak budu spouštět příkazy.
A některé z těchto příkazů se běžel v pondělí bylo trochu
mystické na první, ale ls pro seznam, cd pro změnu adresáře,
rm, pro odstranění.
Takže je to něco jako old-school způsob navigace vaší
počítač, pouze pomocí klávesnice a textové příkazy,
a ne, obecně, použití myši.
Ale uvidíme, netrvalo dlouho, to vlastně nám dává
trochu více síly a trochu více přesnosti, s nimiž se
vyjádřit se.
A pak tady na levé, jsme jen tak vidět,
jak jsme začít psát software, trochu shrnutí
program, který jsme napsal vlevo nahoře.
Ale uvidíme, že zase zanedlouho.
>> Takže pojďme něco udělat poměrně jednoduchý zde.
Dovolte mi, abych nejprve jít dopředu a jít do souboru, Uložit, a já jsem jen
bude klikněte na jharvard zde, přes vlevo, a
jharvard je opět jméno pro mé domovské složce, my
osobní soubory, mi, že jsou nyní John Harvard, jako všichni z vás
brzy bude John Harvard v tomto prostředí.
Má tento domovský adresář, My Documents a tak dále,
že chci zachránit, teď, tento soubor palců
Takže budu říkat hello.c. Pak jsem jít
dopředu a klepněte na tlačítko Uložit, a teď, co mám tady, je karta
volal hello.c, tak jako jiný typ editoru.
>> Takže teď mi dovolte pokračovat a začít psát program.
int main (void).
A pak jsem minule, printf, pro tisk formátu,
("Hello, world!"
);.
Téměř kompletní.
Ale já jsem chybí pár detailů.
Co chybí z tohoto programu, který jsem opravdu potřebují pro
to vlastně kompilaci?
Jo.
[Neslyšitelné]?
>> DAVID J. Malan: Jo, tak musím zahrnout standard
I / O knihovny.
Takže to musí jít nad hlavní, tak jsem jen tak
aby určitý prostor pro to tam.
A já budu dělat # include .
A všimněte si lomené závorky tam.
A jak stranou, gedit je trochu uživatelsky přívětivý, pokud
někdy trochu matoucí, v tom, že se snaží pomáhat vaší
Oči upozornění, co vedení s tím, co.
Takže skutečnost, že můj kurzor je hned vedle tohoto úhlová
držák, všimněte si, jak je to zdůraznění druhé úhlová
Držák a tohle.
A to je jen k tomu mou pozornost na skutečnost, že jsem
mají symetrii.
A symetrie v programování je obecně dobrá věc.
Podobně, když jsem pohnout kurzorem na konec, všimněte si, jak
Složené závorky line up ukázat, že ano, mám otevřený
a uzavřený jeden, abych tak řekl.
>> Dobře, a co mohu udělat jednu věc.
Není to nezbytně nutné, ale dobré praxe, tj.
vrací 0..
A return 0 co dělá pro nás?
Nebo znamená co?
[Neslyšitelné]
DAVID J. Malan: Ale nic se neděje.
A upřímně řečeno, že je to těžké pro mnoho pokazit v
naprogramovat tento krátký.
Takže jsem jen výborný jasné, že je vše v pořádku.
Já, člověk, když jsem spustit tento program, bude pravděpodobně nikdy
vidět, že 0.
Obecně platí, že jsou tato čísla, aby se vrátil z hlavní
pouze vychovávat své hlavy k lidem, když
se něco pokazí.
A ty se trochu pop-up říká systémová chyba, jeden,
dva, tři, nebo bez ohledu na počet byl, že
byl vlastně vrátil.
Takže něco v pořádku s tím?
[Neslyšitelné]
>> DAVID J. Malan: Takže to není tak funkční omyl
ale estetický.
Asi bych měl dát do znakem nového řádku tam
konec tohoto řetězce, takže jsme vlastně přesuňte kurzor na
další řádek, a program, který vypadá trochu hezčí.
>> Takže teď mě nech jít dolů do mého okna terminálu
a zoom zpět dovnitř
A tahle věc tady, je to jen výzva.
Je to prostě mi to připomněl, kdo jsem, jharvard @ spotřebič, kde
Spotřebič je název počítače jsem na.
V závorkách jsou to vlnovky, klikyháky symbol, který
představuje to, co?
Diváků: Home adresář.
DAVID J. Malan: Domovský adresář.
Takže to je jen zkrácený zápis pro ostatní jste v
Vaše osobní složku, kde všechny vaše soubory jít ve výchozím nastavení.
Takže teď, tady, můžu zadat ls pro seznam.
A jediné, co jsem vidět zde v tuto chvíli je hello.c.
A to je dobře, protože jsem právě napsal.
>> Tak nech mě jít dopředu a to, aby ahoj.
A všimněte si, nebudu psát, aby hello.c.
Místo toho, já jsem jen psát základní název souboru, ahoj.
A aby, jak jsme viděli v pondělí, bude jen usuzovat, že chci
. c. souboru.
Takže teď jsem napsal, aby ahoj.
Teď vidím tuto poměrně dlouhou příkaz a bude pokračovat
vidět to znovu a znovu.
Ale aby bylo jasno, řinčet, slovo, které právě objevil,
že je to skutečný kompilátor.
Udělejte je jen nástroj sestavení.
Je to jen další uživatelsky přívětivý program, který šetří mi, že v
dlouhodobě, od nutnosti psát z neuvěřitelně únavné dlouhé
Příkazy líbí.
Takže byste mohli spustit řinčet ručně.
Dalo by se napsat všechno ručně.
Prostě dostane velmi únavné.
A tak, aby je jen program, který zjednodušuje naše životy a
běží složitější příkazy pro nás.
>> Dobře, tak co teď souboru bych měl mít
v mém aktuálním adresáři?
Nejen hello.c, ale také ahoj.
Takže když chci spustit ahoj, připomínám, že říkám dot lomítko,
kde tečka znamená jít do aktuální složky, ať jste kdekoli
jsou, a pak spustit program s názvem ahoj, a opravdu, teď,
Mám Hello World.
Dobře, nějaké otázky na pracovním postupu nebo syntaxe
co jsme právě udělali?
>> Dobře, takže se pojďme věci do zářezu znovu.
Tak tohle byl nezaujatý jen napsat program, který pouze
někdy říká ahoj, svět.
Takže jsme změnili to, v pondělí, říkat, ahoj, David.
Je to trochu osobní, ale stejně pevně dáno jako
první verze.
Takže není všechno, že přesvědčivé.
Ale existuje, v C, funkce jistě kromě
tisk, funkce, které vám umožní získat vstup od uživatele.
A jak jsme to udělali, druhý den, a to takto.
Než jsem skutečně vytisknout něco, jsem se poprvé dostal
něco od uživatele.
Tak mě nech dělat to znovu.
>> String s, kde s je jen libovolný název, tady, pro
string, rovná GetString.
Takže to, co bylo GetString?
Je to samozřejmě dostane řetězec, na základě jeho jméno.
Ale co to je, více technicky?
Je to funkce.
Takže je to funkce, která nepřijde s C na sobě.
CS50 personál napsal.
A tak k použití, můžete nejen patří stdio.h,
Také je potřeba zahrnout co?
Jo.
Takže cs50.h, která je jen soubor jsme psali před několika lety.
Instalovali jsme jej na spotřebiče pro vás spolu
všechny standardní souborů.
A tak v těchto prvních několika týdnů po třídě, budeme používat
to jen zjednodušit proces dělá velmi základní
věci, jako dostat vstup od uživatele.
Vzhledem k tomu, jak uvidíme za pár týdnů, jak se uživatel vstup do
jazyk C je ve skutečnosti překvapivě složitý,
zejména proto, že nevíte předem, obvykle, jak
mnoho věcí je uživatel bude psát dovnitř
A když nevíte, kolik dat se očekávat, nemusíte
vědět, kolik paměti přidělit.
A pokud jste skutečně máte kontradiktorní uživatele, který se snaží
nabourat se do vašeho systému, zhroucení počítače, dobře,
obvykle první metoda útoku je, stejně jako já na
Pondělí, zadejte celý dlouhý sled náhodných znaků,
Enter, a uvidíme, co se zlomí.
Protože obecně, pokud se program přestávek, které naráží na
bezpečnostní chyba, potenciálně.
To jistě naznačuje na vás, programátor, který učinil
chyba, ale nebezpečně, možná jste udělali
související s bezpečností chyba, a obecně budeme vidět, že
to je, jak se stroje ohrožena k tomuto dni, a to jak
ve světě webu a programů na
příkazového řádku, jako je tento.
>> Dobrá.
Takže string s rovná GetString.
Takže konkrétněji teď, co na trati: 6 dělat?
Takže funkce na pravé straně dostane řetězec,
bere kolik argumenty?
Dobře.
Proto nikdo.
Trochu zdravý rozum zkontrolovat.
Argument, opět, je jen vstup do funkce změnit
jeho výchozí chování nějakým způsobem.
Ale v tomto případě, nechci měnit
chování GetString.
Jen jsem se chtěl dostat řetězec.
Tak jsem dal nic v závorkách, a pak jsem dal
středník demarking konec řádku kódu.
Nyní, rovnítka neznamená rovné, samo o sobě.
To znamená, že přiřazení, což znamená, že bez ohledu na dal dostane
výstup na pravé vnitřní co je na levé straně.
>> Takže na levé straně, můžeme říci, že jsme deklarovali
string volal s.
A konkrétně, jsme přidělené paměti uvnitř
které dáme na kousky, které představuje posloupnost
znaků.
Ale pro dnešek, jsme přiděleny
nebo prohlášeno za řetězec.
Dobrá.
Takže teď poté, co jsem to udělal, chci připojit v hodnotě
s, není hodnota David.
Tak to je v pořádku, proč?
Takže je to jen doslova pevně s.
Je to říct "ahoj, s", což není to, co chci.
Tak jsem to udělat.
Znak procenta je zástupný symbol, ale teď musím
předat do tisku i druhý argument.
Připomenout, že argumenty funkce jsou od sebe odděleny
čárky, takže další čárka tady jsem si po tomto dopisu s.
A v této souvislosti nyní, s je proměnná, a printf,
po obdržení těchto dvou vstupů -
řetězec na levé straně a názvy proměnných sa na P -
bude zapojte posledně do bývalé pro nás, a
jen vytisknout pěkný krásný řetězec obsahující
co to je, že jsme zadali dovnitř
>> Tak pojďme to zkusit.
Chystáte se do toho pusťte a oddálit, zpět
k mému terminálovém okně.
Zvětšení na dně zde.
Opište, aby ahoj.
Řinčení se zdá k byli znovu spusťte.
Jdu psát. / Hello, Enter.
Nic se neděje ještě, ale je to na tuto výzvu
že mohu psát něco jako Nate, Enter, a nyní máme
Dobrý den, Nate.
A já si to znovu s Robem, a tak dále.
Takže doufejme, že teď tento program se chová, jak jsem v úmyslu.
>> Teď, ne všechny, že uživatelsky přívětivý.
Nemám tušení, co se se ode mě očekává.
Takže můžeme určitě vyčistit to až trochu.
Nech mě jít zpátky sem, a ne jen potápění v a
žádá uživatele o řetězec, dovolte mi říci, výslovně
uživatel, co jsem očekával.
Takže printf ("Zadejte řetězec:"
);
Takže žádné proměnné zde.
Žádné procent znaky.
Jen jednoduchý anglický výraz.
Dovolte mi nyní jít ke dnu zde a znovu můj program.
Ale nic se zřejmě změnila.
Proč?
Musím překompilovat ho.
Tak chybka se snadno vloudí.
Ale musíte nejen uložit soubor, ale
překompilovat program.
A tak když jsem znovu spustit, aby ahoj, nyní zvonění běží.
Teď už může běžet. / Hello. A teď vidím, "Zadejte řetězec:".
Dobře.
Teď je to trochu více uživatelsky příjemný.
Nate, Enter, ahoj, Nate.
>> No, zkusme to znovu a začít přemýšlet
o rohových případech.
Takže stejně jako v Scratch, budete podporovat nebo jsou
podporovat v spec na druh přemýšlet o tom, co by se mohlo jít
špatně, když nemáte předvídat všechno uživatel mohl udělat.
Chyby, a proto může následovat.
Takže zadejte řetězec -
Co je rohová případ?
Co je to scénář, který jsem, programátor, nemusí mít
Předpokládá se?
Jo.
Dobře.
Takže, co když jsem psát v řadě, jako je tento?
Dobrá.
Takže to ještě funguje.
Gramaticky nedává smysl.
Ale aspoň program funguje.
>> Co je další roh případ?
Něco, co jsem nečekala.
Jo?
Dobře.
Takže bychom mohli udělat něco jako opravdu, ale opravdu velké číslo.
Takže jdeme na to tady.
Dovolte mi, abych vzdálíte na vteřinu, dovolte mi, abych zmínil.
Nelze kopírovat a vložit sem.
Dobrá.
Takže nemohu kopírovat a vložit do této terminálovém okně, takže budeme
také jen simulovat.
Dovolte mi, abych oddálit, bude zabalit.
Nebudu dělat to příliš dlouho, protože to nebude
skutečně rozbít v tomto programu.
Ale to mohlo.
Enter.
Ale to se nestalo.
Dobrá.
Ale je to skutečný roh případ.
A jediný důvod, proč se choval správně, tak
mluvit, je proto, že CS50 funkce GetString je vlastně
navržena pod pokličku, jak uvidíme za pár týdnů,
automaticky přidělit více a více paměti RAM, stále více a více
paměť od operačního systému, když si uvědomí,, wow,
jste opravdu zadali v něco docela dlouho.
Nyní, to je trochu lež.
Pokud bychom skutečně zastavil na nějakou dobu a jsem psát v
něco jako 5000000000 znaků na klávesnici
zde, nebo opravdu hit copy-paste docela dost, jsme dost možná
může způsobit, že program na zhroucení.
Jen trochu těžší simulovat, že s konečnou
množství času.
>> Co je další roh případ, že bychom mohli zkusit?
Jo?
Jo.
Tak proč ne my odpovídáme nic?
Takže ve skutečnosti máme na nějakou akci, protože jinak
Program se bude sedět tam bliká celý den.
Ale když jsem jednoduše stisknout Enter -
OK, teď, stále vypadá špatně.
Copak pád, ale možná je teď příležitost
začít provádět více přísný program
že ve skutečnosti kontroluje.
A pokud řetězec, věta, slovo, které jsem
zadali má délku 0, dobře, možná bych měl křičet na
uživatel, nebo mu říct, nebo ji zadat řetězec znovu tak, aby
jsme vlastně dostat to, co vypadá jako správné chování a ne
Jen kompletní dohled z mé strany.
>> Otázka v zádech?
Desetinné číslo.
Takže jsme si mohli vyzkoušet, že taky.
1,10000005.
Zdá se, že takhle to bude jen práce skutečně v pořádku.
A skutečně se očekává.
I když jsme možná jste zadali, že číslo neexistuje, nebo
větší množství dříve, si uvědomit, že když jsme psaní uživatele
vstupní a my jsme pomocí GetString funkce, není
ohledu na to, jestli to, co píšu vypadá jako číslo.
Připomeňme si, že podle ASCII, vše na svém
Klávesnice má číselnou hodnotu, která může být mapována do
znak, char.
Takže v tomto případě, i když se může zadat číslo,
počítač bude myslet na to, abych tak řekl, jako řetězec -
něco, co vypadá jako číslo, ale je
ne vlastně číslo.
Ale to je vlastně dokonalý segue, protože teď můžeme
vlastně přechod k psaní programů, které
používat jiné datové typy.
>> Takže kromě používání znaku, nebo spíše, vedle používání řetězců,
uvědomit, že máme jiné datové typy v C, stejně jako v
jiné jazyky.
Char, jak již název napovídá, je jen jeden znak.
Plovák je plovoucí bodová hodnota, a to je jen fantazie
způsob, jak říkat reálné číslo - něco, co má desetinnou čárku
bod v něm s některými čísly na levé a / nebo pravé.
Int je celé číslo, které je stejně jako číslo 123.
A teď zajímavější, jsou věci jako dvojníka.
Co řekneme double byl naposledy?
Je to 64, že jo.
Takže vzhledem k tomu, typicky float je 32-bit -
takže je to tak dlouho v paměti, používá 32 nul a jedniček na
představují hodnoty - double je doslova dvakrát, což
Znamená to, že můžete buď představovat větší čísla, nebo
můžete představují více přesná čísla.
Takže můžete mít více čísel za desetinnou čárkou, ale
jako kolega řekl ve videu, i něco jednoduchého,
koncepčně jako třetina nemůže být reprezentován přesně podle
počítač, protože nakonec vám dojdou bitů, a
Proto můžete dělat jen .33333333 tolikrát, na
který bod stačí říct, že jsem z reprezentace
prostor, musím jen nazývat to den a zastupovat ji
poněkud nepřesně líbí.
A long long -
hloupý název, ale je to proto, že je datový typ známý jako
dlouho v C, který shodou okolností je často 32 bitů, stejně jako
int je 32 bitů, ale dlouho dlouho
obecně 64 bitů.
Tak to prostě znamená, že může představovat větší
čísla než toto.
>> Dobrá.
Takže pokud chceme skutečně začít reprezentovat věci, my
může být potřeba více sofistikované typy, a
to je důvod, proč máme řetězec.
Takže v CS50 knihovně, že soubor s názvem cs50.h, máme
vlastně deklaroval, datový typ, abych tak řekl, tzv. string,
ale řetězec ve skutečnosti neexistuje.
To je opět jeden z těchto vrstev se budeme slupkou
zpět na týden nebo dva a vyhoďte ho, a vlastně
dívají pod pokličku, co řetězec vlastně je, a
jak se zastoupena.
Jsme také se podíváme na logické hodnoty.
>> Takže, co bylo bool v kontextu Scratch?
Je to pravda, nebo ne.
Takže je to jen hodnota, která je true nebo false, zapnout nebo vypnout, 1 nebo
0, ale chcete-li zobrazit svět.
Takže v C, a to díky CS50 knihovny, což
obsahuje jiné knihovny pod kapotou, máme
přístup k datovým typem, který je volal bool, která bude
doslova nám umožní přiřadit hodnoty true nebo false na
věci v programu.
>> Tak pojďme do toho sem a napsat malý program, který
dělá něco zahrnující čísla místo.
Tak nech mě jít zpátky do CS50 Appliance, nechte mě jít napřed a
vytvořte nový soubor s názvem zde -
řekněme něco jednoduchého, jako math.c.
Dobrá.
A teď jít až na vrchol svého programu, jsem
dělat obvyklé -
# Include , takže mohu použít
printf, int main (void) -
vrátíme do, případně, co int znamená
tady, co void znamená tu, ale teď, jen vím, že
budete muset spouštět programy, jako je tento.
Teď budu pokračovat a řeknu něco málo
různé - printf ("Dej mi číslo:"
);.
Pak budu dělat int n = GetInt, protože
Ukázalo se, že GetInt je další funkce v CS50 knihovně
kromě GetString.
A teď jdu dělat něco hloupého, jako "díky
pro% d, "pro desetinné číslo, a pak se čárka n, a
pak se vrátit 0.
Takže znovu, vrátí 0 nemá nic společného s číslem jsem
žádá uživatele o.
Jen znamená na konci, že všechny, pravděpodobně, je dobře.
>> Tak nech mě jít k mé terminálovém okně zde.
Dovolte mi, abych zadejte dělat matematiku, zadejte.
A je něco špatně.
Udělejte matematika nefunguje.
Zde je první z našich chybových zpráv.
Proč?
Trochu záhadné, ale -
Jo.
Tak cs50.h.
Takže znovu, a to zejména na začátku, budete psát vaše první
program pro PSet 1 v sekcích, v úředních hodinách, a
upřímně řečeno, bude to ohromující někdy to, co tyto věci
jsou vlastně říká.
Ale budete realizovat velmi rychle začnou klesat
do kbelíků přičemž tato znamená, že jste odešel se od jednoho
z # obsahuje v horní části souboru.
A zvonění, kompilátor, je informovat vás o toto tím, že
říká, spíše fancifully, implicitní prohlášení
funkce GetInt je neplatný.
>> Dobrá.
Takže co to znamená?
To jen znamená, že jste implicitně prohlásil GetInt v
pocit, že jste výslovně prohlásil to.
Chcete-li explicitně deklarovat int, budete muset naučit
Řinčet, že to existuje.
A velmi jednoduché řešení pro které je učit jej
včetně tohoto jiného souboru, cs50.h, na
horní části souboru.
Vzhledem k tomu, doslova to, co # include dělá, je to řekne řinčet
skoro jít najít soubor s názvem cs50.h, kopírování,
vložte jej automaticky do horní části mého programu pro mě,
a pak převést zdrojový kód nul a jedniček.
Ale to by samozřejmě bylo velmi únavné, pokud se my lidé měli
jít kopírování a vkládání těchto velkých souborů po celou dobu,
takže # include jen dělá vše automaticky, bez nutnosti
muddying můj kód někoho jiného knihovny.
A knihovna je jen další soubor, který obsahuje funkce a
jiné věci, které někdo jiný napsal, že jsme
využití pro naše vlastní dobro.
>> Dobrá.
Zkusíme to znovu.
Udělejte matematiku.
Enter.
Dobré.
Takže se zdá, že jsem pracoval.
Tak ať mi teď běží matematiku;. / Math.
Zadejte dává mi číslo, 123.
Díky za 123.
Nyní se pojďme zkusit jiný rohový případ.
Řetězec je docela štědrý, protože
řetězec může být cokoliv.
Může vypadat jako čísla, vypadat
postavy, vypadají jako slova.
Ale int je int.
Takže teď když jsem těžký uživatele, a to říká: "Dej mi
číslo, "co když se snažím udělat něco jako 0,1?
No, to je číslo, a to v souladu s
gramatika I zde používá, ale pod kapotou, jsem z
Předmět pomocí funkce GetInt.
>> Tak uvidíme, co se stane.
Zadejte, zkuste to znovu.
Dobrá.
Nech mě být obtížné a prostě zmáčknout Enter znovu.
Zadejte, Enter.
Takže teď se zdá, že GetInt je trochu více
silnější než GetString.
My, pracovníci, které se provádí tak, že pokud se všimnout
jste nám nedal int - a int je desetinné číslo
obsahující nuly, ty, dvojky, trojky, čtyřky, pětky, šestky,
sedmičky, osmičky, nebo devítky.
A to je vše.
Žádné desetinná místa, žádné znaky, bez interpunkčních znamének.
Zdá se, že musíme spolupracovat.
Tak zkusím čtyři, pět, šest, a to dostává mě.
Takže opravdu, být anální tady, měl bych asi říct "Dej mi
číslo ", aby se dopravují k uživateli
přesně to, co mám v úmyslu.
>> Nyní se pojďme zamyslet pod kapotou.
Nebudeme se dívat na to, jak je cs50.h provedena dnes,
že knihovna.
Ale jestli to pořád říká opakování, opakování, opakování, jaký programovací
konstruovat jsem pravděpodobně pomocí pod pokličku na
implementovat, že?
Takže jen smyčka, ne?
Jeden z nejjednodušších nápadů, které jsme viděli na Scratch.
Forever konstrukce, Repeat konstrukce.
Lze předpokládat, že v tomto programu, pod kapotou, a to i
když je to napsané v C, a ne poškrábání, to dělá
něco jako ekvivalent věčně, pokud uživatel nemá
napsáno v celé číslo, řekněme opakování, opakování, opakování, opakování, takže
nakonec, když to dostaneme celé číslo, pak
vymanit z tohoto cyklu.
>> Takže jaké další funkce můžeme používat zde v knihovně CS50 je?
No,, druh zřejmých ty alespoň na základě
datové typy, které my teď víme existují.
Zavedli jsme GetString, GetInt, ale v celé
První týdny v termínu, můžete také použít GetFloat a
GetDouble a GetLongLong aby se přesně
datové typy, které chcete.
Vzhledem k tomu, klíč detail je, že na rozdíl od některých jazycích,
jako je Python a Ruby, kde nemusíte nutně muset
prohlásil datový typ proměnné -
nemusíte říkat počítač, jaký druh věcí
budete dát do proměnné -
v C, musíte být vždy tak přesné.
Takže pokud chcete proměnnou s názvem n, kus skladování
že v tomto případě se stane, že 32 bitů podle konvence, můžete
musím říct počítač, že tyto kousky jsou
bude pro uložení čísla -
není postava, ne řetězec, ne float.
A to řeší problém se efektivně
běžel do minulého týdne.
Pokud jsme pomocí nul a jedniček čísla představují nejen
čísla, ale AS a BS a Cs, jak ve světě, je
Počítač bude vědět, že tento vzor bitů ve skutečnosti má
představuje číslo 65, na rozdíl od zastupující
písmeno, které náhodně, podle
ASCII, vzpomínám, byl ekvivalentní k 65?
>> Takže tyto datové typy poskytovat kontext k počítači, takže
že neví, jestli se tyto bity musí být vykládán v tom
int nebo jako řetězec.
Jakékoliv dotazy, pak na to?
Jo?
DAVID J. Malan: Dobrá otázka.
Vezmeme-li z stdio.h, uložíme soubor -
dovolte mi, abych šel do okna terminálu a spusťte make matematiky, zoom
a zadat -
teď jsem si různé chyby, protože jsem implicitně
prohlašuje, jakou funkci teď?
Printf.
Takže teď jsem vytvořil nový problém, jehož řešení je
v podstatě stejné.
Musím to dát zpátky.
PUBLIKUM: [Neslyšitelné]
DAVID J. Malan: Oh.
Takže když to vezmu z -
Dobře, jo.
Takže když jsem odstranit standardní I / O knihovny začlenění do
zde, a pak říkáš, že když jsem se zbavit printf, se
zbavit printf?
Ano.
To by mělo fungovat, protože jsem už s použitím kteréhokoliv - POZOR.
Už jsem jen tak ležet?
Oh, dobře.
To nebude fungovat, protože o novém chybě, kterou právě zavádí.
A tohle je trochu více intuitivní.
>> V čem je problém?
Nepoužité variabilní n.
Takže tato chyba je výsledkem našeho provedení konfigurace
Přístroj být zvláště pedantský, opravdu zařvat
si pro každou možnou chybu, i když je to trochu
non-fatální chyba takhle - je to opravdu tak velký
zabývat, že jsem přidělil int, dát číslo v ní, a potom
jen dělal nic s tím?
Takže funkčně, no.
To není rozbije program.
Je to jen trochu hloupé, ne?
Žádné hodnoty na které požádaly o změnu této číslo, uložené
to v proměnné, pokud jste nikdy dělat nic
s tím, ať ji vytisknout nebo uložit.
Takže v tomto případě, zvonění připouštění tolik, a
to říká nepoužívané proměnné n.
>> Tak jsme to spravit, pokud skutečně chceme.
Ale znovu, to není dobré programovací teď.
Takže jsem mohl jen udělat -
jít sem, dovolte mi, abych je vymazat obrazovku, aby matematiku.
To funguje.
Teď jsem si spustit můj matematický program, vezme vstup -
dobře, to bylo špatné.
Bere vstup, a že je vše dělá, v tomto případě.
>> Takže vlastně, pojďme zkusit ještě jeden rohový případ, že bychom
nemyslel dříve.
V tomto případě - tady, pojďme zpět k té, která je
trochu více uživatelsky příjemný.
Nech mě jít sem a spusťte make matematiku znovu.
Jejda, co jsem udělal špatně?
Musím vrátit zpět další.
Dobře.
Teď jsme zpátky v původním stavu, kde všichni
je snad dobře.
A teď, když spustím matematiku, 123 Zdá se, že funguje.
Ale to není opravdu efektivní důkaz, jen říct
v pořádku, že funguje.
789, která funguje.
Lhůta pro podání.
Protože tam je další roh případy zde.
Řetězec se opravdu nám hodně potíže zadáním
spousta postav.
Ale co když píšu v tomto?
Bít číslo 1 mnohem, mnohem zde -
v pořádku, je to stále trochu nudné, tak budu
zastavit zde, a budu stiskněte Enter.
>> Co se to sakra stalo?
Takže to může být ve skutečnosti vysvětlit.
Tak se to brát jako binární?
Dobrá myšlenka, ale ne, to není fakt, že to vzal
jako binární, protože to opravdu, to bylo tak nějak
náhoda.
Můžeme to udělat znovu.
Takže tam je č. 2 v binárním systému, který je
asi dost stejně.
Enter.
Takže to nebyl problém.
Co ještě?
Přesně tak.
>> Takže myslíte, že zpět na to, co int vlastně je.
Je to 32 bitů, které dohromady jsou interpretovány
jako číslo.
Pokud se mají 32 bitů, to znamená, že každý z kousků může být
0 nebo 1, 0 nebo 1.
Takže to znamená, že jsou dvě možnosti pro tento kousek,
dvě možnosti pro to, dvě možnosti pro to
bit - tak to je 2 krát 2 krát -
tak, že je 2 až na 32 síly je celkový počet
permutace nul a jedniček, pokud máte 32
Zástupné symboly, nuly nebo jedničky, před vámi.
Takže pokud jsem 2 na 32, matematicky, to je to co?
Takže je to hodně.
Je to 4 miliardy eur, dávat nebo brát.
A 4000000000 nezdá být tím, čím byla vytištěna tady.
Ve skutečnosti, to vypadá blíže k 2000000000.
Ale to není náhoda.
Skutečnost, že počítač nesprávně vyložila moje obrovské množství,
můj obrovský posloupnost jedniček a pak můj obrovský sled dvojky,
jako zhruba 2 miliardy USD, je vysvětleno, jak?
Tam je limit na int.
Tam je jistě maximální hodnota, kterou lze reprezentovat.
Ale je to obvykle 4 mld. Kč, ne?
Pokud 2 na 32 je zhruba 4 miliardy, které se jeví jako
že je to největší počet.
Takže není zbytek, ale dobrá myšlenka.
Záporná čísla.
Takže pokud máte 4 miliardy možných věcí, které můžete
představují s těmito různých obměnách po 32 0s a
1s, dobře, to dá rozum, že my lidé by mohli chtít
představují nejen pozitivní celá čísla
ale záporná celá čísla.
A skutečně, že je předpoklad, že C je.
Takže s 32 bity, můžete reprezentují zhruba negativní 2
miliard celou cestu až k pozitivnímu 2000000000.
A tak v tomto případě to, co jsme opravdu svědky, je jen
třásně kapacity naší celé číslo, a my jsme, tak
mluvit, vylila celé číslo.
Snažili jsme se nacpat více bitů do něj, než vejde.
Takže konečný výsledek je, že jsme v podstatě mají všechny bity 1.
Jsme převrátil všechny naše bitů na, jsme se snažili reprezentovat
největší možné množství, ale to zjevně není zdaleka
dostatečně velké, aby reprezentovat dvě věci, které jsem právě zadané a.
Jo?
PUBLIKUM: [Neslyšitelné]
>> DAVID J. Malan: Dobrá otázka.
Proč prostě nemůžeme představovat, že negativní
přihlásit jen jako znak?
Tak jsme absolutně mohli, a tak bychom mohli uložit
další bit.
Ale jste stále bude muset zastupovat tuto pomlčku, a
že to bude stát alespoň něco,
pravděpodobně trochu.
Takže ano, mohli bychom mít 32 bitů použitých pro naše číslo, ale teď
potřebujeme další trochu používané pro naši pomlčkou
symbol, znaménko minus.
Takže teď máme 33-bitové hodnoty, které bychom mohli dělat, ale je to
jen ne tak, jak to udělal.
Udělali jsme rozhodnutí volání lety, 32 bitů je trochu
měrná jednotka zde.
Takže budeme používat jeden z těchto bitů účinně
představují negativitu, a 31 bitů k reprezentaci čísla.
Další otázky?
Dobrá.
To je hodně.
Proč nejdeme dopředu a vzít naše pětiminutovou přestávku tady?
>> Dobrá.
Takže znovu, ne přeceňovat matematické aplikace
programování, pojďme jen utrhnout z tohoto jeden příklad
předtím, než jsme se přestěhovat do jiných konstruktů, právě proto, že
bude ilustrovat několik společných klopýtal bodů na některé z
základy, pokud jde o psaní programů.
V tomto případě, dělá aritmetické výrazy, které mají některé
zajímavé význam pro syntaxi.
>> Takže je to jen formule, se kterými se můžeme převést
teploty ze stupňů Fahrenheita na stupně Celsia.
Pokud nechcete vzpomenout, je to jen vzorec.
Takže pokud se připojit Celsia hodnotě 32 stupňů, což je
zmrazení, že to bude 32 minus 32 je 0, a opravdu,
0 ve stupních Celsia je také zmrazení.
Tak rychlé sanity check tam - to je známá rovnice.
Nech mě jít se k zařízení, i když, a začít
psaní s názvem programu, stejně jako, f2c, "Fahrenheit
Celsius dot c ".
A až na vrchol tady, jdu začít s # include
stdio.h, a já budu dělat int main (void), a
znovu, budeme vracet v budoucnosti, co int znamená
tam a co void znamená, že.
A teď mi dovolte pokračovat a realizovat program, který
v podstatě dělá tento převod pro nás.
>> Takže printf, řekněme, teplota ve stupních Fahrenheita.
A pak mě nech jít dopředu a získat hodnotu od uživatele.
Jaké hodnoty bych měl dostat od uživatele, pokud chci
je, aby mi teplotu ve stupních Fahrenheita?
Jo?
Co byste navrhli?
Jo.
Takže float cítí docela rozumné.
Máme opět jen málo možností, že
jsme viděli doposud.
Máme věci, jako char, double, float, int, long long,
bool, string.
Takže z nich, float cítí docela rozumné.
Můžeme použít dvojí, právo, protože pokud skutečně chceme, aby
představují lidské teplotu -
98.60000 -
můžeme použít 64 bitů k tomu, že, ale to vypadá
přezbrojení na teplotě.
Tak pojďme s plovákem.
Teď potřebuji proměnnou.
Jen, aby to jednoduché, budu říkat, že f, ale já
mohl jen jak správně nazývat to teplota,
ale buď je v pořádku.
Takže float f = GetFloat.
Jakmile jsem se teď se rozhodli používat GetFloat, když jsem
je třeba udělat jednu opravu.
Jo.
Takže musíme # include , jinak kompilátor
bude křičet na nás.
Teď, když mám float, nechte mě jít dopředu a dělat
konverze.
>> Takže první, dovolte mi, abych také dostat do zvyk zde o
komentovat můj kód.
Takže znovu, komentář je jen zápis na člověka, který je
není součástí programu na sobě, ale to jeden, pomáhá
pochopit, co jsi udělal ráno, nebo další
měsíc, pomáhá vaše vyučování člověk pochopit, co jsi udělal
nebo co jste chtěli dělat, tak je to
obecně velmi dobrá praxe.
Každých pár řádků kódu, napsat komentář k
sami, nebo váš kolega.
Tak tady, budu říkat, "Zeptejte se uživatele na teplotu."
Nemusí to být kompletní věta, jen krátká fráze.
Ale myšlenka komentování v C je, že každý z vašich
komentáře by měly posílit vás - nebo, řekněme, TF nebo kolegu -
sbírat svůj program a přesně vědět, co to dělá, tím, že
tolik čtení kódu, ale čtení připomínky, které
by měly být stručné a jasné.
Dobře, takže teď mě nech jít dál a říct, "Převést
Fahrenheit Celsius. "Takže budu pokračovat, a to,
řekněme, float c.
Budeme Celsia jako hodnota s plovoucí čárkou.
>> A dovolte mi, abych se bodnout se na tohle.
Vzorec je opět tady.
Jako 5/9 krát F minus 32.
Takže jdeme na to.
Takže 5 děleno 9, minus -
jejda, jsem pokazil to už.
Times.
Takže 5/9 krát F minus 32.
Takže F minus 32, středník.
A teď, tady dole, budu pokračovat
a říkají, vytiskněte výsledek.
A tato část je snadná. Printf.
Jak mám jít o tisku to?
No, mohl bych říct "Toto číslo ve stupních Celsia je% f \ n",
jen pro některé estetiku.
A pak to, co hodnota se chci připojit zde printf je
Druhý argument?
Dobře.
Takže jen c.
Takže začneme s tím a pak už jen vrátit 0.
Opět, to nemá nic společného s matematikou.
To jen znamená, že je vše v pořádku.
>> Nyní, je to správné, tento program?
Dobrá.
Tak jsem udělal nějaké chyby.
I když nemáte tušení, co programovací je můžete třídit
zad toho vyvozují na základní škole, co
chyby zde může být.
Co je to jeden z prvních?
PUBLIKUM: [Neslyšitelné]
DAVID J. Malan: Jo.
Takže nám chybí závorky.
Bylo to záměrné, že jsem závorky v keynote
posuňte tady, protože je to vlastně tento pojem objednávky
operací, nebo priorita, přičemž některé operace -
násobení -
mají vyšší závazné, mají vyšší prioritu, než věci
jako sčítání nebo odčítání.
Takže jsme udělali to pro let jen aby bylo jasné, přesně
what matematická operace by měla být provedena jako první.
Tak jsem měl asi napodobovat přesně to.
V opačném případě, je počítač pravděpodobně bude snažit dělat
něco jako předěl 5 od 9, pak násobit F, pak odečtěte
32 z celé věci.
Což není, ve skutečnosti to, co chceme dělat.
Tak pojďme parenthesize.
Pojďme přidat své závorky zde, závorky zde.
Pojďme si tohle sem.
Tady, jsem si všiml další chybu jsem udělal po cestě.
Jo?
PUBLIKUM: [Neslyšitelné]
>> DAVID J. Malan: Ah.
Dobré.
Takže jsme vlastně mít stejnou celé číslo
Divize vydání z před.
I opravit, že se podíváme, co se tento příznak.
Ale budeme muset správnému
další chyba zde.
Jo?
PUBLIKUM: [Neslyšitelné]
DAVID J. Malan: Ano.
Takže, hloupá chyba jsem, ale nesmírně důležité.
Počítač nebude jen přimhouřit oči a nechte
mi použít kapitálu F, když jsem vlastně deklaroval proměnnou
jako malá f zde, v souladu 8.
Tak jsem třeba opravit v řádku 11 mi kapitalizace, která
Před chvílí byl kapitál F omylem.
Co tady?
Mělo by to být malými písmeny, jak dobře?
Mělo by být, ale to je náhoda.
To% f nemá nic společného s proměnnou.
Takže jen pro super clear tady, nechte mě jít napřed a
přejmenovat, krátce, "teplotu." Dovolte mi, abych přejmenovat
Tento "teploty." Dovolte mi, abych to přejmenujete.
Protože, znovu,% f globálně znamená, "plovoucí bodovou hodnotu."
Nemá nic společného s mým proměnné.
Ale "teploty" všude možně je jen trochu rozvláčný,
takže jsem jít zpátky do mého malého "f" s.
>> Nyní mi dovolte, abych do toho do mého okna zde.
Značka f2c -
který byl opět, libovolný název I
dal k tomuto souboru.
Zdá se, že sestavují.
Dovolte mi, abych běžet f2c.
Enter.
Teplota ve stupních Fahrenheita - pojďme udělat jednoduchý jeden.
32.
OK, opravit.
Ale, když jsem teď udělat 212 na vaření -
damn.
Dobrá.
Takže, jasně není správné, pokud vaše TF pokusí
nejméně dvě hodnoty.
Tak v čem je problém?
No, už si prstem na to, co je problém.
Ale proč je to, že v případě,?
Až tady, když dělám matematiku 5 děleno 9.
Takže koncepčně, je to naprosto správný.
Zcela v souladu se vzorcem.
Ale pouze počítačů dělat přesně to, co
řekni jim dělat.
A to, co jsme skutečně říkat počítač je zde
rozdělit celé číslo 5 v celé číslo 9
a dej mi výsledek.
Problém ale je, když nemáte divize použitím údajů
Typy, výstup je stejný typ dat jako vstupy.
A tak jestliže dva vstupy jsou oba ints, výstup bude
být int.
A tak 5 děleno 9 je bod něco.
Ale co je nejbližší celé číslo na něco?
Takže, je to vlastně 0.
Tak jak jsme se bavili v pondělí, vše, co po desetinné
bod dostane zkráceny.
Je to prostě dostane vyhodit.
Tak to je naprostý omyl, protože jsem mohl stejně dobře
vynásobte všechno 0 zde.
>> Nyní, to mohu opravit v několika způsoby.
Mohl bych to udělat.
5,0 děleno 9.0.
Technicky, jsem ani nemusíte dělat.
To se stačí jen, aby jedno z čísel float -
nebo dvojité - tím, že desetinnou čárku zde.
Vzhledem k tomu, co se teď stane, je při dělení celé číslo od
float, nebo double, počítač to bude realizovat
oh, jedním z nich je přesnější.
Dovolte mi, abych chybovat na straně dává vám větší přesnost než
jste zamýšleli.
Tak to bude převést výsledek -
vrátí výsledek jako desetinné hodnoty, jakož.
Tak to bude fungovat.
To bude fungovat.
A je tu ještě jedna mechanismus, který uvidíme v
větší detail příští týden.
Můžete si skutečně, jako programátor, řekněte počítač
skutečně léčit jeden datový typ jako
by to bylo jiné.
>> Takže jsem mohl skutečně udělat.
V závorce, mohu říci něco podobného (float), otevřený
paren, úzkým paren.
A to je to, co se nazývá "lití". Opět, více
na tomto příští týden.
Ale to je jen programový způsob vyprávění
počítač, jo já vím, 9 je celé číslo nebo dlouhé.
Já vím, že to není hodnota s plovoucí čárkou.
Ale vemte to jako takový stejně.
Takže na obsazení datový typ znamená převést
od jednoho k druhému.
Upřímně řečeno, je to jen trochu ošklivý, takže navrhuji, jdeme
zpět na původní návrh jen konverze
aby se tyto věci plovoucí desetinnou čárkou hodnoty ručně.
Protože teď je to prostě super jasné, co se děje, a
to není všechno, že rušivě.
>> Takže pojďme se teď vrátit do svého terminálovém okně.
Udělejte F2C.
Nech mě jít napřed a spustit tento.
A jak stranou, vás nudit psaní těchto příkazů
znovu a znovu, si uvědomit, že počítače, jako je Linux tady,
mají tendenci být dost chytrý.
A pokud jsem narazila Up, můžeme jít přes můj celé historii
příkazy, nahoru a dolů.
Takže v tomto případě zde, mohu jen jít až spusťte make F2C.
Já se křičel na, protože jsem to udělal, že před vteřinou.
Je to již aktuální.
Takže teď můžu běžet f2c znovu.
Zkusme 32 Fahrenheita.
Nyní se pojďme zkusit 212 Fahrenheita.
>> Uf.
Zdá se, že se do práce.
Nyní, je to dobře, ale je to trochu libovolný že
Jsem ukazuje šest čísel po desetinných míst.
Je to tak?
Pokud jste osoba počasí v televizi, že jste trochu doofus
pokud čtete teplotu na
tento stupeň přesnosti.
Tak pojďme zjednodušit tím.
Takže pojďme skutečně jít sem, k mému printf.
A jo, já chci plout.
Ale já chci, aby nyní určit přesnost.
A já budu trochu stručné.
Já řeknu, dej mi jeden bod po desetinné místo.
Takže spíše než říkat% f, budu říkat% .1 f.
A to jen znamená, dej mi jednu pozici
za desetinnou čárkou.
Dobrá.
Zkusme to znovu.
Dovolte mi, abych znovu spustit po kompilaci.
A teď píšu v 32, a já se vrátím
stručnější hodnotu.
A můžu psát, teď, 212, a získat zpět více stručné
hodnota stejně.
A je tu další věci, které můžete dělat s printf.
Můžete si skutečně určit, jak široký číslo by mělo být.
Pokud chcete mít výplň na to, takže můžete zarovnat nebo
vlevo zarovnat všechny vaše čísla nebo
zkuste centra věci.
Takže uvědomila, že existují malé triky, které můžete udělat zde.
Ale oni prostě se redukuje na formátu kódů,
to, že máme tu.
>> Takže pokud jde o této otázce priorit.
To je velmi nudné tabulky projít metodicky.
Ale uvědomte si, že autoři C přišli s
Pravidla, která specifikují, které provozovatelé mají vyšší
přednost, více závazný výkon, než ostatní.
Takže vzhledem k tomu, na základní škole, jsme se obecně věděli, že je to
násobení a dělení, pak sčítání a odčítání,
pak některé další věci.
Ve světě programování, je tu mnohem
delší seznam věcí.
A to není něco, co stojí za zapamatování teď.
Dostanete aklimatizovat na to zanedlouho.
Ale stejně jako v základní škole, závorky obecně řešit
otázky priority, tím, že Super jasné
počítač a lidský podobný co je určen.
Takže zvažte to jen trochu tahák tam.
Ale většina z těchto údajů nebudeme mít na nějakou dobu.
>> Dobrá.
Nyní, pojďme vybudovat a odklon od těchto hloupá
matematické příklady.
Stále používají stejné základy, ale kdo
vyjadřování trochu více jako Scratch.
Takže v Scratch, měli jsme booleovské výrazy.
A v angličtině, booleovský výraz je to, co?
True nebo false.
Je to něco, co vyhodnotí jako true nebo false.
1 nebo 0.
Zapnout nebo vypnout.
Ať už chcete nazývat.
Nyní v Scratch, jednotlivé díly skládačky vypadal takhle.
A to je kombinace, na dně, ze tří
dílky.
Jedna spojka -
něco, co má prázdné a prázdné.
A pak dva logické výrazy uvnitř ní.
Takže můžete vnořovat Booleovské výrazy získat více
složité booleovských výrazů.
Například, pokud je sobota, a to je hezké
počasí, pak jít ven.
Nebo tak něco svévolné takového.
Takže se můžete připojit logické výrazy přijít s
větší pravdivostní hodnota, jejíž odpověď je založena
na těch menších.
>> Nyní, v C, naštěstí, to je mapování
vlastně docela jednoduché.
Závorky napomoci tomu, aby se situace nevyjasní zde.
&& Je to, co znamená "a". Tak to je, jak
budeme převést tyto bloky od nuly do C.
A podmínky, jsme viděli v Scratch, na levé straně
strana tam, můžu vyskládat podobně v C. Je-li x menší
než y, pak to udělat.
Nebo jestliže x je větší než y, pak to.
Else logicky musí být stejná, tak říci,
, že jsou stejné.
Takže nyní můžeme začít budovat tyto věci.
>> Takže pojďme udělat příklad.
Dovolte mi, abych otevřít soubor, který je na hřišti internetových stránkách tohoto
Jsem napsal v předstihu.
To se nazývá nonswitch.c.
A uvidíme, proč za chvíli.
Takže v tomto souboru - nonswitch.c--
nejprve uvědomit, že je tu celá parta
připomínky na vrcholu.
To je jen vysvětlení názvu souboru, co to
dělá, a tak dále.
A to zřejmě ukazuje použití Boolean A-ing -
konjunkci dvou výrazů.
>> Takže pojďme se podívat, jak tento program funguje.
Můžu zahrnout své dva soubory, cs50.h a stdio.h.
Kdybych posunout dolů, nyní, na programu, je to trochu déle
než jsme napsal dříve, ale docela čitelné.
Tak jsem nejprve vytisknout pro uživatele, na řádku 18,
"Dej mi číslo mezi 1 a 10." Tak
že je to tady.
Teď jsem si na celé číslo.
Ale uvědomte si, že GetInt - velmi jednoduchý.
Je to prostě dostane int.
Bude to, aby to dostat int a ne
řetězec nebo float.
Ale to nebude dělat jakékoliv hranice kontroly.
To nebude filtrovat čísla, aby se mezi
určitý sortiment.
Takže musíme implementovat, že sami.
Takže stejně jako v Scratch, kde bych mohl udělat konjunkci
dva výrazy, mohu to udělat v C takto.
Je-li n vyšší než nebo rovna 1, a n je menší než a
nebo roven 3, budu velmi libovolně vyhlášky, kterou se
číslo být malé množství.
Jen kvůli prohlášení.
Else if n je mezi 4 a 6, print "Vybrali jste si médium
číslo. "Else, pokud n je mezi 7 a 10, print" Vybrali jste si
velké číslo. "Else tisku" Vy si vyberete neplatný počet. "
Protože logicky, že takto, pokud máme
vyčerpání náš sortiment.
>> Takže uvědomit to není úplně jak zapsat větší než nebo
rovná v matiku.
Je to tak?
Ty obvykle nakreslit to takhle, s linkou pod ním.
Ale není tam žádný takový klíč na mé klávesnice.
Takže symbol C pro vyjádření větší než nebo
rovná se dva znaky, a symbol po dobu kratší než
nebo rovná se dva znaky, stejně.
Dobrá.
Takže když jsem spustit tento program, budete pravděpodobně uhodnout, co to je
dělat.
Pokud bych do toho a udělat nonswitch, Enter.
A potom spusťte nonswitch.
Dejte mi číslo mezi 1 a 10.
Chystám se dát mu 11.
Vybral jsem neplatné číslo.
Zkusím číslo 3.
Vybral jsem si malý počet.
Takže poměrně přímočará tam.
>> Co když chci změnit chování tohoto programu a
něco trochu jiného místo?
Nech mě jít dál a říct.
Dovolte mi, abych se zbavit toho všeho.
A dovolte mi říci, zda (n == 42).
A pak budu pokračovat a říct tisk "Ty si vybral
Správná odpověď. "Else budeme pokračovat a říct,
printf ("Vybrali jste si
špatná odpověď ");. Dobře.
Jen proto, že.
>> Nyní, o několik bodů můžeme zde.
Jednou jsem neměl zadejte symbol, který by si myslel, je
nejrozumnějším.
Když chci zkontrolovat rovnost, ukázalo se, že nepoužíváte
znaménko rovná se.
Místo toho použít rovná rovnítko.
A proč by to mělo být, jen intuitivně?
Jo.
PUBLIKUM: [Neslyšitelné]
DAVID J. Malan: Správně.
Znaménko rovná se již používá pro přiřazení.
Někdo se opravdu si to promyslet.
A tak teď, když přijde na rovnost testování, musíme
být více explicitní, a řekni rovná rovná.
Velmi častou chybou je udělat to.
A pokud v úředních hodinách, nebo někdy příští týden, nebo v
Další dva týdny si něco takového a pak
bojovat s ním 10, 20 minut se snaží přijít na to,
co sakra chyba je, si uvědomit, že jste jedním z těch,
lidé, kteří z této chyby.
Takže, Super snadné.
Ale cílem je nyní odrazit tuto chybu.
To by mohlo hodnotit, protože to, co je to vlastně říká?
Je-li n dostane 42.
Takže sloveso lidé používají, ústně, vyjádřit
Pojem práce je "dostane." Takže pokud n dostane 42.
Takže to znamená, přiřadit 42 až n.
Teď mám logický výraz v závorce,
uvnitř tohoto stavu, jehož hodnota je 42.
Je to tak?
Protože pokud budete hodnotit zevnitř ven, celkem
Odpověď, nyní je 42.
>> Takže pokud jsem se vás na otázku, "jestli (42)," to, co je
že vlastně říká?
No, logické výrazy pouze true nebo false.
1 nebo 0.
Zapnout nebo vypnout.
Takže se zdá, že mají rohovou případ tady, kdy všichni
náhlé, říkám "pokud (42)". To není logická hodnota.
Takže to, co počítače dělat, když je to v podstatě odpovídá
něco, co to není 0 je interpretována být pravdivý.
1.
On.
Všichni jsou funkčně ekvivalentní.
Pouze hodnota 0, nebo klíčové slovo false, as potkáme
nakonec vidět, je ve skutečnosti falešný.
Takže ", pokud (42)" skutečně pravda, protože to je nenulová.
Takže přesněji tady, Boolean hodnota opravdu není tak
Kolik true nebo false, ale pro tento
případě, pokud je 0 nebo nenulová.
Takže false false, nebo ne.
A to nám umožňuje zahrnout všechny více
možnosti v závorkách výrazu.
Takže musíme, někdy tak pečlivě, říkají, že toto -
if (n == 42).
Jednoduše proto, že musíme určit test rovnosti,
není přiřazení hodnoty.
>> Co jiného stojí za zmínku tady?
Tyto složené závorky jsou skutečně není nutné.
Dělal jsem je jen proto, aby se NIT-vybíravý zde.
Ale když máte podmínku, která má pouze jeden řádek
kód, jako pohodlí, programátoři nemusí používat
složené závorky.
Postačí jen odrážky, z estetických důvodů, a
Poté napište řádek kódu.
Pouze tehdy, když chcete napsat dva řádky kódu - pro
instance, jinak printf ("Ahoj!"). Pokud chcete udělat
to, že je vadný.
Můžete odrážka vše, co chceš, ale skutečnost, že máte
napsal dva řádky kódu bez použití složené závorky
znamená, že tento program nebude fungovat správně nebo mohlo
Ani sestavit správně.
Takže teď, abych byl upřímný, myslím, že nejlepší zvyk je jen
používat složené závorky, a zjistíte, že oni dělají
Super jasné, co se děje.
>> Také, jako stranou - zvláště pokud jste mezi těmi, kteří používají
doporučené knihy nebo zdroje on-line -
si uvědomit, že tam je to pojem stylu
programování.
A někteří lidé skutečně raději dát složená závorka
sem na řádku.
Někteří lidé raději dělat směšné věci,
Líbí dát je sem.
Není špatná odpověď, pokud jde o
styl, ale to je v pořádku.
Ale někteří lidé to.
[Smích]
DAVID J. Malan: Tak jsem zmínil teď, jednoduše proto, že jako
můžete přečíst na věci v knihách nebo on-line, budete si
různé zprávy z různých učitelů a
různí autoři.
A jen uvědomit, že, funkčně, jsou
obecně ekvivalent, ale být konzistentní.
Takže v tomto případě, budeme standardizovat na kudrnatý
šle seřazovat tady nalevo.
>> Dobrá.
Tak pojďme do toho hned a spustit to, a uvidíme, co se stane
s tímto programem.
Udělejte nonswitch.
Pak spusťte nonswitch.
Dej mi celé číslo mezi 0 a - takže to není relevantní
už, ale já jsem prostě jít na libovolně říct 42.
A já jsem si vybral správnou odpověď.
No, pojďme si to vlastně v jiném směru.
Ukazuje se, že je to nějaký jiný syntax jsme
lze použít v programu.
Zde je nový kus syntaxe, který je funkčně stejný,
ale jen představuje další způsob vyjadřování.
Tak tohle je to, co se nazývá "switch". A
switch funguje následovně.
To trvá, v závorce, hodnotu, kterou chcete
"Switch" na.
Chcete-li chovat různě v závislosti na jeho hodnotě.
Takže to znamená, spínač na hodnotu n.
A co to znamená?
No, pokud n je 1 nebo 2 nebo 3, jděte do toho a vytisknout "You
vybral velké množství "a pak se lámou.
Důvodem pro přerušení je, že způsob C funguje je
Jakmile najde případ, který odpovídá, začne provádění
všechny kód pod ním.
Takže pokud mám jeden řádek kódu, jako já tady na lince 27, je
se provede.
Pokud mohu přidat další řádek sem, dostane vykonán.
Další linka zde, dostane vykonán.
Program pouze zastaví provádění, co je pod
použitelné case, kdy jsem se explicitně
říkají "zlomit." Tak špatně.
Právě v tomto případě, stejně jako výsledek.
Případ 4 nebo 5 nebo 6, podobně, se děje
vytisknout zprávu.
V tomto případě, střední číslo.
Přestávka.
Případ 7, 8, 9, 10, bude to vytisknout "Vybrali jste velký
číslo. "Break.
A pak je tu doslova klíčové slovo názvem "default"
to skutečně jako "jiný" konstrukce.
Takže nová syntaxe, ale intelektuálně,
vůbec nic nového.
Je to stejně jako Scratch.
If, else if, else, pokud druh bloku.
>> Tak to je zapnutý verze tohoto programu.
Povšimněme si ale, že jsme to udělali s čísly zde.
Dovolte mi, abych otevřít druhou verzi, jen aby ukázal,
něco trochu konkrétnější.
Takže tu máme stupňů místo.
Ukázalo se, že můžete použít přepínače nejen s čísly, ale na
znaků.
Ne ve všech datových typů, ale alespoň na charakterech.
Takže tady, mohli bychom udělat něco, jako kdyby hodnota C, která
Uživatel napsal v, v souladu 19, pomocí funkce GetChar,
je kapitál nebo malá písmena, pojďme interpretovat jako třídy,
a tvrdí, že si vybral vynikající stupeň.
A dolů podél switch, máme jiné
pouzdra na "B" s a "C" s, a tak dále.
Ale pojďme se teď završují jednu věc.
A opět, druh letí
některé z těchto příkladů.
Ale je to opravdu tak, že jsme mohli aplikovat, nyní -
nebo opravdu, jen přeložit je nyní -
na C.
>> Tak nech mě jít dál a dělat to.
Jdu otevřít nový soubor.
A já budu dělat include .
A pak budu dělat, int main (void).
Dovolte mi, abych tento soubor uložit jako loop.c.
Jen jako příklad.
A já jdu dál a proveďte následující.
Chci psát velmi nudné programu.
Tak 10.
Pojďme to.
9.
Dobrá.
Jakmile začnete dělat to v programování, ty jsi
pravděpodobně dělá něco špatného.
Ale začneme tam stejně.
Chybička se vloudila.
To je vlastně v pořádku.
7.
6.
5.
4.
Nic se nestane, když se dostaneme do 0.
3.
2.
1.
Dobře.
0.
Odstranit.
>> Dobrá.
Takže návrat 0.
Takže tento program je zřejmě bude dělat to, co velmi
zdlouhavě říká, že to bude dělat.
Bude to pro tisk všech těch
hodnoty, od shora dolů.
Dovolte mi tedy udělat, aby smyčku.
A pak - POZOR.
Udělejte smyčku.
Byl jsem ve špatném adresáři.
A teď mi dovolte běžet smyčku.
Enter.
Woohoo.
Very nice.
Pěkný, dlouhý program.
>> Dobře, ale teď se na to lépe.
Stejně jako v roce Scratch, když jste začal používat opakování
konstrukce, místo toho jen kopírování a vkládání všechny
skládačky, dovolte mi představit tuhle věc.
Takže v C, existují různé smyčkování konstrukty,
z nichž jedna vypadá následovně.
"Pro" loop má tři věci, oddělené dvěma středníky.
A pak, uvnitř těla smyčky, takže mluvit -
věci uvnitř složených závorek -
můžeme něco udělat znovu a znovu.
Takže to, co jsem tady na obrazovce, to je
doslova komentář.
/ / Zde znamená přichází komentář.
To není kód.
To je jen anglický popis, pro mě, člověka.
>> Takže inicializace, podmínky a aktualizace.
No, uvidíme, jak to funguje.
To mi umožňuje přepsat tento program takto.
Pro -
takže tady je můj smyčka -
int i -
tady je proměnná s názvem "i" -
dostane inicializovány na 10.
Takže tam je moje inicializace.
Chci to udělat smyčku tak dlouho, jak "i" je větší než nebo
rovno 0.
A při každém opakování tohoto cyklu, chci
dělat i -.
Takže jsme viděli + + v pondělí.
- Je opakem.
Že snižuje hodnotu 1.
Uvnitř této smyčky, chci skutečně něco udělat.
Tak jsem chtěl říct něco jako printf.
Nechci říkat 10 teď, protože to je samozřejmě jen
bude tisknout stejnou hodnotu.
Co chci tisknout místo, pravděpodobně?
Jo.
Takže "i". Takže% d, i.
>> Takže budu ukrást jeden z těch nápadů od dříve -
to náhrada za formát kódů -
a pak sem, v dolní části, vrátím 0, jen
pro správnou míru.
Ale teď, mám víc stručný program.
Je to jen pár řádků, a ne asi 10 nebo 11 řádků.
Nechte mě jít na můj dotaz tady.
Remake smyčky.
Znovu smyčku.
A zdá se, že je stejný.
Nyní je program není zajímavější.
Ale teď můžu napsat něco takového.
Mohu změnit to 100.
Pak mohu překompilovat můj program.
A pak jsem si znovu spustit můj program.
A teď to jde super-rychle na dnešních počítačích.
Ale tam jsem se -
a skutečně, můj scrollback vyrovnávací není
dokonce jít tak daleko.
Tam jdeme.
Tak tady to máme všude 100.
Ale je to snadné udělat chybu zde.
Co se bude očekávané chování, když
náhodně udělat?
Tak to cítí jako nekonečné.
Tak uvidíme, jestli počítač chová.
>> Tak nech mě jít napřed a udělat smyčku.
A dovolte mi spustit smyčku.
Tak pojďme vrátit k tomu za chvíli.
Necháme to běžet.
Vzhledem k tomu, co bychom měli počítat až, minimálně?
Pravděpodobně nejméně 2 miliardy, když máme tolik bitů, a
jsme s využitím pozitivních hodnot.
Takže pojďme skočit zpátky.
Kromě těchto druhů smyček, máme to, co se nazývá, zatímco
smyčky. Takže, stejně jako v Scratch, jste měli Forever
bloky, a vy jste měli Opakovat bloky.
Podobně, v C, stačí mít jiné způsoby, jak
vyjádřit se.
Takže budete mít tento pojem cyklu while, který umožňuje
Vyjádřete se trochu jinak.
A pak máte něco, co se nazývá do-while,
který funguje poněkud odlišně stejně.
A budeme dráždit ty od sebe v průběhu času.
>> Ale pojďme se podívat na tuto poslední zde.
Pokud půjdeme do -
stále běží.
Je to docela nekonečný.
Tak mě nech jít do pozitivní, a ukázat, jak můžeme skutečně
upravují vstup uživatele trochu efektivněji.
Je to docela krátký program.
A máme tady, v hlavní, int n prohlášení.
Tak mi proměnnou s názvem n. Teď, jsem doslova řekl
"Dělat." A pak mám otevřenou kudrnaté
rovnátka, úzkým složená závorka.
A pak zjistíte, hned po to, že se říká, zatímco n
je menší než 1.
Takže si všimnout, že tyto řádky -
19 - 24 -
skládat kolektivní a do-while.
A opět, nová syntaxe, není nová myšlenka.
Je to jen další způsob, jak smyčky, syntakticky.
Takže co to dělá?
Do následující zatímco n je menší než 1,.
Tak co chci dělat?
Žádám, abyste mi celé kladné číslo.
Pak jsem se skutečně snaží získat celé číslo od uživatele.
Ale pokud jde o pořadí operací zde, protože
zatímco podmínka je tady, já pak jít zkontrolovat, je n
méně než 1?
Takže předpokládám, že uživatel -
po požadované tímto způsobem -
Typy v hodnotovém 0.
Tato podmínka bude true nebo false?
No, je to vlastně bude pravda.
Vzhledem k tomu, n je 0, a 0 je menší než 1.
Takže co to znamená?
Udělej to znovu.
Jen jednou, že podmínka vyhodnocena jako false.
Pokud jsem psát 42.
No ne, 42 je menší než 1.
Proto je tento smyčka se provádí spuštěním.
A tak v tomto bodě, bude program říct, díky za
za 42, v tomto případě.
Nyní, když máte tento způsob vyjádření sebe sama -
Neměli bychom čekat na to až do konce.
Bude to nějakou dobu trvat.
Chcete-li se pokračovat příště, snad.
>> Ale teď, máte možnost na snad rozumět
trochu pouťového kejklíře humor.
Omlouvám se.
To není reprezentativní humoru v informatice
svět, ale je to roztomilý.
[Směje se] Pojďme konec tohoto záznamu.
A uvidíme se v pondělí.
[APPLAUSE]