[Powered by Google Translate] DAVID J. Malan: Dobre, to je CS50, a to je
koniec 1. týždňa, takže študijné karty sú v a celkový počet
spolužiaci, že máte tento rok je 745.
A my sme tak nadšení, že tak veľa z vás v priebehu
tento semester, ale aj napriek tomu je tento kurz je tak veľký,
uvedomiť, že to tieto veci ako obed piatok ako
úradné hodiny, 15-person profily, a tak ďalej, aby
sú naozaj chcel vytvoriť tento viac intímne
prostredie.
Takže aj keď môžeme zhromažďovať raz alebo dvakrát týždenne, tu v
Sanders, viem, že veľa z vašich skúseností v tomto kurze
bude veľmi sa hands-on na boku vašich spolužiakov
a pedagogickí pracovníci.
>> Tak ideme na to, Fall 2012.
Takže pripomenúť, že naposledy sme skončil na oznámenie zo dňa
nepresnosť, hovorí o reprezentáciu čísel.
A my sme sa na jednom z porúch, ktoré sa stali v
reálny svet, keď to prišlo k nedorozumeniu
ako počítače fungujú.
No, dnes budeme opäť ďalší z tých nápadov, ako
a pokračovať v našej diskusii o CS50 klienta
a C a čo to znamená naozaj programu.
Ale najprv, len pár oznámenia víchrici.
>> Sekcia začnú túto nedeľu, a prvý týždeň je vždy
trochu rýchlym rozbehom, pretože sme práve dostali do
svojho oddielu formulára.
Robíme to isté, teraz s výučbových kolegami, teraz
že poznajú svoje plány, takže sme s cieľom, by
V sobotu ráno, aby sa vám, s vaším sekcii
priradenie a TF.
Uvedomte si, že začnú budúci deň, v nedeľu
alebo v pondelok alebo v utorok.
A potom sme sa ubytovať v časti zmeny, ktoré nastanú
v nadchádzajúcich dňoch.
Úradné hodiny, zatiaľ sú, opäť, dnes, dvadsať hodín na 11, v
Annenberg, rovnako ako zajtra večer.
Aj keď problém sady sú všeobecne kvôli štvrtok
na poludnie, že ste si až päť neskoré dní stráviť,
teda dostupnosť úradných hodín vo štvrtok, ak
vy hotovosti v jednej z týchto neskorých dní, a tým, predloží
niečo na piatok.
Dovoľte mi navrhnúť, že Scratch je medzi viac zábavy, medzi
Viac najnižšej Kľúčovým problémom sady.
A ja by som visieť na týchto neskorých dní, strategicky, len
pre neskôr v semestri, kedy život začína v ceste
s midterms a iných tried.
Problém Set 1, medzitým, bude zanechané kurz je
Webové stránky tento piatok, ako bude na ihrisku chôdze
cez video, ktoré bude natočený v 14:30 v piatok
a potom odoslané on-line do druhého dňa.
>> Takže sme skončili v pondelok.
Chcem - vlastne, poznamenať, tu.
Pretože triedy - pretože Sanders nie je presne zapožičanie
sám k príležitostnému Q & A sem a tam moc dobre, že sme
Pokúsim sa niečo málo nových tomto roku, kedy
Ak nie ste spokojní zvýšiť svoju ruku, alebo si len
by radšej zdvihnúť ruku v miestnosti, ako je táto,
budeme mať niektoré z výučbových kolegami a CAS
obsadenie cs50.net/discuss počas prednášky.
Takže ak máte nejakú otázku, pretože som bol úplne
jasné, o niečom, alebo ste zvedaví, niektoré
tému, skúste vysielania to tam.
Označiť ju štítku Prednáška, a my sa budeme snažiť
dnes a budúci týždeň - Dáme skúste toto - postaviť ju
buď v elektronickej, on-line, alebo ak je to ako by sme mali
Naozaj sa jej zaoberali en masse, jeden z výučbových chlapíkov, alebo
CA zvýši ich ruku a spýtať sa
anonymne vaším menom.
Takže dáme to skúste a uvidíte, ako dobre to funguje.
Ale v každom prípade, aj naďalej zvyšovať ruky, ako by ste chceli.
>> Takže naposledy sme zistili, že 10% alebo jednu desatinu nie je v
Skutočnosť, 0.1, ako by ste sa učili pred mnohými rokmi.
Je to v skutočnosti, hodnota takto.
Ale to nie je celkom pravda, nie?
Musíme len toto obmedzenie v počítačoch, kedy, ak
majú len obmedzené množstvo pamäte, RAM, alebo viac
konkrétne bity, no, je tu len konečný počet
vecí, ktoré môžu predstavovať.
Napríklad, ak budeme mať číslo nula, a chceme, aby
predstavujú v binárnej, pomocou ôsmich bitov, kde bit,
znovu, je nula alebo jedna, môžeme
predstavujú ako 00000000.
A to je trochu zbytočne ukecaný.
Rovnako ako v desiatkovej sústave v reálnom svete,
všeobecne, ak chcete napísať číslo 123, sa
ľudia pravdepodobne nebudú písať 00000123, aj keď,
funkčne, že je to presne rovnaký počet.
Sme len kvapka úvodnej nuly, aby som tak povedal.
>> V binárne, môžeme to isté.
Binárne a nula, nula a binárne je len nula.
Potrebujete len jeden bit.
Ale znova, najčastejšie merná jednotka na svete
výpočtovej sú bajty, osem bitov.
Len preto, že jeden bit, celkom k ničomu.
Osem bitov, nie je príliš užitočná, ale aspoň je to viac
užitočnejšie ako jednu mernú jednotku.
Takže pomocou ôsmich bitov, budeme zvyčajne predstavujú binárne.
Takže tu máme čísla nula, jedna, dva, a potom, ako
Nate robil v našom videu minulú stredu, môžeme pokračovať
počítanie až sedem, osem.
A potom ak budeme používať viac a viac bitov, sme
môže počítať do nekonečna.
Ale ak máte len konečný počet týchto bitov, ako je
prípad akéhokoľvek počítačového systému, alebo dokonca strela
systém, dobre, naozaj máte len
konečné množstvo presnosti.
Takže ak chcete, aby zastupoval číslo ako 0,1, dobre,
Počítač musí vyberať.
A ak to má len konečný počet čísel pre to,
predstavujú, môže priblížiť 0,1 pre tých, ale to nemôže
nutne vám presne hodnotu, ktorú chcete.
A to je len jeden z problémov počítačov,
pod kapotou, našťastie.
>> Ako sme sa presťahovať ďalej v semestri, tieto nižšie úrovne
Podrobnosti oveľa menej zaujímavé, ale rozhodne
aplikácie týchto myšlienok môže mať niektoré veľmi reálny svet
následky.
Jedným z nich je trochu zábavy.
Ako mnohí z vás videli úžasný film Office Space?
Ak nemáte, je to váš neoficiálne
domáci za týždeň.
Ale v kancelárskych priestorov, sa chlapi v tomto filme sa
Výhodou práve tohto nápadu, ale oni vlastne ukradli
to z iného filmu, ktorý by sa Vám mohol mať
Videl, dokonca aj roky predchádzajúce.
Takže mi dovoľte, aby som vám niekoľko sekúnd tohto prívesu od
tento úžasný film a to je veľmi
akademicky relevantné.
>> [Hrá filmov]
Vlastne som bol povýšený.
Môžem naprogramovať vírus, ktorý bude trhať, že
miesto off veľký čas.
No, ako to funguje?
Zakaždým, keď je bankové transakcie, kde úroky sú
vypočítaný, existujú tisíce deň, počítač skončí
s týmito zlomky percenta.
Ale ja nebudem robiť nič nezákonného.
Nelegálne? Samir, toto je Amerika.
Musíte prisahám Bohu.
Pokiaľ nikto nevie o tom, ale nás, v poriadku? Žiadni rodinní príslušníci, žiadne
priateľka, nikto.
[Nepočuteľné].
Nebojte sa, človeče, ja to nikomu nepoviem ani.
[Film končí]
>> Dobre, takže možno som našiel tento film lepší ako väčšina
ľudia tu, ale v žiadnom prípade, vírus, že boli
snaží vytvoriť -
a vo filmoch, kedykoľvek sa to nazval niečo vírus,
to vo všeobecnosti nie je vlastne vírus.
Je to len program, ktorý niekto napísal niečo urobiť.
A v tomto prípade, že chlapci sa snažili napísať program
ktoré využili ich spoločnosť s názvom INNOTECH tieto
výpočtový systém, v rámci ktorého počítača, taky, aj keď to
príde na peniaze, nemôže byť nutne
predstavujú peniaze presne.
Takže aj keď budete musieť 0,10 dolárov na váš bankový účet,
0,10, dobre, že počítač skutočne myslíte, že máte
tento mnoho centov vo vašom bankovom účte.
A tak to, čo títo chlapci boli ašpirujúci na to - a oni
ukradol nápad, to dopadá z nadčloveka III, kde
Richard Pryor urobil rovnakú vec - oni boli nevyhnutne
písanie programov, ktoré ašpirujú, aby všetky koncové
čísla, všetky z malých, drobných, malých frakcií
Pennies, a nasáva tie z tak, aby sa ľudia len
myšlienka, oh, je to len 0,10 dolárov tam, ale všetci tí,
koncové čísla nakoniec sčítajú.
Tak skvelý nápad a to zlyhalo veselo v tom, že
najmä film.
>> Ale v reálnom svete, aj tam sú oveľa viac o
Dôsledky týchto druhov vecí.
A jedným z dôvodov, prečo sa do toho ponoriť do oblasti počítačovej
vedy je opäť jeho použiteľnosť nie
inžinierske vedy samotnej, ale len preto, aby
iných oblastiach.
Tak to je menej veselý pohľad na to, čo sa môže pokaziť, ale
je to tiež celkom otvorenie očí, myslím, pokiaľ ide o
pochopenie presne tak, ako všadeprítomné technológie ako
počítače a programovanie, alebo v týchto dňoch,
vo forme softvéru.
Takže to ďalší klip je len asi šesť minút, pokračuje
kde sme skončili minule, ale umožňuje nám nahliadnuť trochu
viac do hĺbky na jeden taký z týchto otázok.
Dovoľte mi, aby som preskočte na miesto, kde sme skončili,
ktorý bol tu.
A máme druhú časť dva, približne šesť minút tu.
>> [PLAY MOVIE]
Súdení modernej raketovej techniky.
V roku 1991, sa na začiatku prvej Gulf vojne, Patriot
Strela zažil podobný typ
číslo konverzie problém.
A ako výsledok, bolo zabitých 20 ľudí, 20 amerických vojakov,
a asi 100 ďalších zranených, keď Patriot, ktorý mal
na ochranu proti prichádzajúce pláva,
nepodarilo vystreliť raketu.
>> Keď Irak napadol Kuvajt a Spojené štáty rozpútali Desert
Storm začiatkom roka 1991, Patriot raketové batérie boli
nasadené na ochranu Saudskú Arábiu a Izrael z irackej
Plávať raketové útoky.
Patriot je americký strednej vzdialenosti povrch-k-vzduchový systém,
vyrábané spoločnosťou Raytheon.
Veľkosť Patriot Interceptor samotnej, ale o
približne 20 metrov dlhá a váži asi 2000 libier.
A to so sebou nesie bojovou hlavicu asi - myslím, že to je zhruba
150 libier.
A hlavice sám o sebe je vysoko výbušné, ktorý má
fragmenty okolo nej.
Kryt hlavica je navrhnutý tak, aby fungovať ako hrubé broky.
Rakety sú vykonávané štyri na obale a sú
prepravovaná návesu.
>> Patriot protiraketový systém siaha prinajmenšom do
20 rokov.
To bolo pôvodne navrhnuté ako raketa protivzdušnej obrany na
zostreliť nepriateľské lietadlá, v prvej vojne v Perzskom zálive.
Keď tá vojna prišiel, armáda chcela použiť na fotografovanie
stanovuje pláva, nie lietadiel.
Air Force Iracký nebol tak veľký problém, ale armáda
strach o pláva.
A tak sa pokúsili upgrade Patriot.
Záchytný nepriateľ strela jede MACH 5 sa deje
byť dosť náročné.
Ale keď bol Patriot ponáhľal do prevádzky, armáda
si nebol vedomý irackého úpravy, ktoré urobili ich
Pláva takmer nemožné zasiahnuť.
>> Čo sa stalo je Pláva, ktoré boli
prichádza v boli nestabilné.
Boli kývanie.
Dôvodom pre to bolo, že Iračania, aby si 600
kilometrov mimo a 300 km doletu, sa
hmotnosť z prednej hlavice a
z hlavice ľahší.
Takže teraz Patriot sa snaží prísť na Scud, a väčšina
čas, drvivá väčšina času, by sa
Len pozrite sa v Scud.
Akonáhle prevádzkovatelia systém Patriot, si uvedomil, Patriot
minul svoj cieľ, že odpálil Patriot hlavicu.
Aby sa predišlo možným obetiam, bolo dovolené
k pádu na zem.
To bolo to, čo väčšina ľudí videla, aké veľké ohnivé gule na oblohe,
a nepochopenie, ako zachytí jadrových hlavíc Scud.
>> Aj keď, na nočnej oblohe, Patriots sa zdá byť
Úspešne zničené Pláva na Dhahran, mohlo by byť
chyba týkajúce sa jeho výkonu.
Tam, vlastenca radarový systém stratil stopu
prichádzajúce Scud a nikdy zahájená z dôvodu
k softvéru chyby.
To bolo Izraelčania prvýkrát objavený, že čím dlhšia
bol tento systém zapnutý, tým väčší je časový nesúlad sa stal,
kvôli hodiny vložené do systému v počítači.
Asi dva týždne pred tragédiou v Dhahran, že
Izraelčania hlásené na ministerstve obrany, že
Systém bol strácame čas.
Po ôsmich hodinách prevádzky, všimli si, že
Systém bol stále výrazne menej presné.
Ministerstvo obrany odpovedal tým, že povie všetko
The Patriot batérie nenechať systémy
po dlhú dobu.
Nikdy nepovedal to, čo dlho bol - 8 hodín, 10
hodín, 1000 hodín.
Nikto nevedel.
>> Patriot batérie umiestnená v kasárňach v Dhahran
a jeho nedostatky vnútorné hodiny bol na viac než 100 hodín na
noc februára 25th.
Je sledovaný čas s presnosťou na asi desatinu sekundy.
Teraz desatina druhá je zaujímavé číslo, pretože
nemôže byť vyjadrený v binárnej, presne, čo znamená, že
nemôže byť vyjadrený presne v akejkoľvek
Moderný digitálny počítač.
Je ťažké uveriť.
Ale používať to ako príklad.
>> Poďme sa počet tretiny.
Jedna tretina nemôže byť vyjadrený v desatinné, presne.
Jedna tretina je 0,333 deje na nekonečno.
Neexistuje žiadny spôsob, ako to urobiť, aby s absolútnou presnosťou v desiatkovej sústave.
To je presne rovnaký druh problému, čo sa stalo v
Patriot.
Čím dlhšie systém bežal, horšie chybe v čase stal.
Po 100 hodinách prevádzky, chyba v tej dobe bol iba
asi jedna tretina sekundy.
Ale pokiaľ ide o cielenie raketu cestovanie na MACH 5,
to malo za následok sledovanie chýb viac než 600 metrov.
Bolo by fatálna chyba pre vojakov na zahrani.
>> Čo sa stalo, je spustenie Scud bol detekovaný včasného varovania
satelity a oni vedeli, že Scud prichádza v ich
Celkový smer.
Oni nevedeli, kde to prichádza.
Bolo teraz na radare zložky Patriot
systém, bráni Dhahran, lokalizovať a sledovať
prichádzajúce nepriateľské rakety.
Radar bol veľmi šikovný.
Tie by vlastne sledovať pozíciu Scud a potom
predpovedať, kde to asi bude nabudúce
radar poslal pulz von.
, Ktorá bola nazývaná rozsah brána.
Potom, čo Patriot rozhodne dosť času uplynulo ísť
dozadu a skontrolujte nasledujúce umiestnenia tohto zisteného
objekt, sa vráti späť.
Takže keď sa vrátil na zlé miesto, potom nevidí
námietky, a to rozhodne, že tam bol žiadny objekt.
Bol to falošný detekcie a kvapky na trať.
>> Prichádzajúce Scud zmizol z obrazovky radaru.
A sekúnd neskôr, narazila do kasární. Scud
zabil 28 a bol posledný výpoveď počas
prvý vojna v Perzskom zálive.
Tragicky, aktualizovaný softvér dorazil Dhahran
nasledujúci deň.
A softvér chyba bola stanovená, uzavretie jednej kapitoly v
ustarostený histórie Patriot rakety.
PATRIOT je vlastne skratka pre "fázové sledovanie
Úsek TARGET. "
>> Dobre, tak oveľa viac smutný výsledok nie je úplne
pochopenie tohto sveta.
A Takeaway, skutočne, z filmu je, že riešenie
tam bol reštart systému protiraketovej obrany
každý raz za čas.
A tak znovu, je jedným z cieľov tohto kurzu, rozhodne
na viac skromného meradle ako tieto aplikácie, je
Naozaj prejdi na každého z nás oči do presne tak, ako ste ísť o
Stroje na výrobu robiť to, čo od nich chcete robiť a ako idete
o tom, že správne, zatiaľ čo na ceste robí
dobre, elegantne, a tak ďalej.
A tak dnes, poďme sa ponoriť do trochu viac, ale
tak, že sa nie príliš rýchlo, a to najmä pre tých menej
pohodlné, ale aj tak, že sa môže zachovať záujem
tie pohodlnejšie, poďme rýchlo začať s trochou
z rekapituláciou niektoré z týchto myšlienok.
A opäť, pýtaj, ako osobne, alebo on-line, ak máte
otázky tak môžeme udržať všetky na rovnakej stránke.
>> Takže CS50 spotrebiče, rýchle krok späť, je
čo, svojimi vlastnými slovami?
To je v poriadku, ak máte tušenie, čo tieto slová môžu byť ešte.
[Nepočuteľné]
Dobre, tak univerzálne rozhranie pre -
že môžeme všetci zdieľať.
Absolútne.
Takže sme mohli, napríklad, ti ísť na niektoré
webové stránky, stiahnuť tento softvér pre Mac OS.
Stiahnite si tento softvér pre Windows, konfigurovať
týmto spôsobom a že.
Ale realita je potom narazíme na nespočet technických
podporovať problémy.
A tiež v týchto dňoch, veľa z toho, čo sa deje na strane servera,
vo svete výpočtovej techniky, a to najmä pokiaľ ide o
vývoj webových aplikácií a webových aplikácií, je v skutočnosti
často vykonáva na Unix alebo Linux počítačov, na rozdiel od
Macs alebo Windows PC.
>> Takže medzi upsides, potom použitie túto vec nazýva
CS50 Appliance ich budeme všetci mať rovnaké prostredie.
Takže všetci sú na rovnakej stránke bez ohľadu na to, aký hardvér
prišiel do areálu s, ale tiež bude fušovať do presne
v rovnakom prostredí, ktoré budete používať na
Semester Koniec aj pre vývoj webových, rovnako ako v
Budúcnosť reálnych aplikáciách ich.
Takže konkrétnejšie, CS50 Appliance je zadarmo kus
softvér, ktorý vám umožní spustiť iný operačný systém,
Linux, v tomto prípade, na svojom počítači, v okne.
Teraz si môžete nielen stiahnuť spotrebič.
Potrebujete program, s ktorým sa hrať alebo spustiť prístroj.
A ten kus softvéru, je všeobecne známy ako
hypervisor.
Hypervízora prichádzajú vo forme výrobkov, ako sú VMware,
Virtual Box, Parallels.
Všetky druhy spoločností, aby softvér, a to ako zadarmo a
obchodné, podobný.
Čo uvidíte v problému Set 1 sú inštrukcie o tom, ako
získať zadarmo softvér, s ktorými sa
spustiť CS50 Appliance.
A akonáhle to urobíte, budete mať v okne na vašom počítači Mac alebo PC,
desktop prostredie, ktoré vyzerá celkom ako to, kde
má v ponuke Štart-ako vec
ľavom dolnom rohu.
Má domovskú zložku, alebo domovský adresár, v ľavom hornom rohu
tam, môže odpadky, a tak ďalej.
Takže budeme šprýmař oddelene potrebné údaje, ako sme ísť.
>> Ale teraz poďme začať sa ponoriť do C.
Takže C je to programovací jazyk, podobný v duchu, aby
Scratch, ale ďaleko menej grafické, ale ironicky, ak
mocnejší, akonáhle sa dostanete pútavé s ním.
Takže v C, píšeme programy písaním zdrojového kódu, ktorý je
Tento anglický-ako syntax, podobne ako ponožky
preukázanie, že sme minule, ktorá vám umožní
vyjadriť sám seba celkom presne, ak
arcanely, k počítaču.
>> Takže aký druh výrobku softvéru si budete skutočne potrebovať
písať programy v jazyku ako C, zakladajú na našich
konverzácia v pondelok?
[Nepočuteľné]
OK, stačí textový editor.
Nepotrebujete žiadny špeciálny softvér
samo o sebe písať programy.
Potrebujete k tomu len textový editor, ako je Poznámkový blok, v systéme Windows,
TextEdit na Mac, alebo niečo, čo nazýva gedit, vo svete
Linux, ktorý budeme používať tú.
A to je, písať programy.
>> Ale písanie je len polovica z rovnice.
Potom je potrebné spustiť.
Aby však bolo možné spúšťať programy -
Nemožno spustiť zdrojový kód.
Tie namiesto toho robiť to, čo k nej ako prvý?
Jo.
DAVID J. Malan: Musíte
skompilovať.
A niekto iný, zostavovanie zdrojového kódu znamená -
[Nepočuteľné]
DAVID J. Malan: Presne tak.
Prekladať do núl a jedničiek.
Pretože všetky z nás, v týchto dňoch, majú počítače, ktoré majú procesory,
takmer všetky, ktoré sú vyrobené spoločnosťou s názvom Intel, a
Intel Inside, znamená, že je to mozog vnútri vašej
počítač, známy ako CPU.
A jedna z vecí, ktoré ten mozog robí, je, že vie,
ako pochopiť zákonitosti núl a jedničiek.
To vie, čo vzor bitov predstavuje Okrem toho, čo
vzor predstavuje súčty a rozdiely, čo sa vzor
bity predstavujú tlače, a vytvára počuteľný zvuk.
>> Takže v skratke, CPU, spolu s operačným systémom,
ktorý je kus softvéru, ktorý beží na procesore,
aby som tak povedal.
Spoločne tieto dva kusy vedieť, ako spustiť programy, ktoré
my ľudia písať.
>> Takže keď idem do CS50 Appliance tu, musím otvoriť
up textového editora a môžem prístup k tejto
v niekoľkých ohľadoch.
Môžem buď ísť do menu, programovanie,
a potom som si vybrať -
Nie, nie je to menu.
Môžem ísť k Príslušenstvo / gedit tu pre otvorenie
môj malý textový editor.
Alebo presnejšie povedané, môžem na túto malú ikonu v spodnej časti
ľavom rohu.
A teraz som si toto prostredie tu.
Je to celkom pripomína jednoduchý textový editor, len s
jeden alebo dva rozdiely.
V hornej časti, kde je kurzor blikajúci teraz, to je miesto, kde
Môžem začať písať svoj kód.
V spodnej časti je to, čo nazýva okno terminálu.
A aké veci môžem robiť v tejto
tzv okno terminálu?
[Nepočuteľné]
>> Dobre, tak budem spúšťať príkazy.
A niektoré z týchto príkazov sa bežal v pondelok bolo trochu
mystické na prvý, ale ls pre zoznam, cd pre zmenu adresára,
rm, pre odstránenie.
Takže je to niečo ako old-school spôsob navigácie vašej
počítač, iba pomocou klávesnice a textové príkazy,
a nie, všeobecne, použitie myši.
Ale uvidíme, netrvalo dlho, to vlastne nám dáva
trochu viac sily a trochu viac presnosti, s ktorými sa
vyjadriť sa.
A potom tu na ľavej, sme len tak vidieť,
ako sme začať písať softvér, trochu zhrnutie
program, ktorý sme napísal vľavo hore.
Ale uvidíme, že zase onedlho.
>> Takže poďme niečo urobiť pomerne jednoduchý tu.
Dovoľte mi, aby som najprv ísť dopredu a ísť do súboru, uložiť, a ja som len
bude kliknite na jharvard tu, cez vľavo, a
jharvard je opäť meno pre moje domovskej zložke, my
osobné súbory, mi, že sú teraz John Harvard, ako všetci z vás
čoskoro bude John Harvard v tomto prostredí.
Má tento domovský adresár, My Documents a tak ďalej,
že chcem zachrániť, teraz, tento súbor palcov
Takže budem hovoriť hello.c. Potom som ísť
dopredu a kliknite na tlačidlo Uložiť, a teraz, čo mám tu, je karta
volal hello.c, tak ako iný typ editora.
>> Takže teraz mi dovoľte pokračovať a začať písať program.
int main (void).
A potom som minule, printf, pre tlač formátu,
("Hello, world!"
);.
Takmer kompletné.
Ale ja som chýba pár detailov.
Čo chýba z tohto programu, ktorý som naozaj potrebujú pre
to vlastne kompiláciu?
Jo.
[Nepočuteľné]?
>> DAVID J. Malan: Jo, tak musím zahrnúť štandard
I / O knižnice.
Takže to musí ísť nad hlavnou, tak som len tak
aby určitý priestor pre to tam.
A ja budem robiť # include .
A všimnite si lomené zátvorky tam.
A ako stranou, gedit je trochu užívateľsky prívetivý, ak
niekedy trochu mätúci, v tom, že sa snaží pomáhať vašej
Oči upozornenie, čo vedenie s tým, čo.
Takže skutočnosť, že môj kurzor je hneď vedľa tohto uhlová
držiak, všimnite si, ako je to zdôraznenie druhej uhlová
Držiak a toto.
A to je len na to moju pozornosť na skutočnosť, že som
majú symetriu.
A symetria v programovaní je všeobecne dobrá vec.
Podobne, keď som pohnúť kurzorom na koniec, všimnite si, ako
Zložené zátvorky line up ukázať, že áno, mám otvorený
a uzavretý jeden, aby som tak povedal.
>> Dobre, a čo môžem urobiť jednu vec.
Nie je to nevyhnutne nutné, ale dobré praxe, tj
návrat 0.
A return 0 čo robí pre nás?
Alebo znamená čo?
[Nepočuteľné]
DAVID J. Malan: Ale nič sa nedeje.
A úprimne povedané, že je to ťažké pre mnoho pokaziť v
naprogramovať tento krátky.
Takže som len výborný jasné, že je všetko v poriadku.
Ja, človek, keď som spustiť tento program, bude pravdepodobne nikdy
vidieť, že 0.
Všeobecne platí, že sú tieto čísla, aby sa vrátil z hlavnej
iba vychovávať svoje hlavy k ľuďom, keď
sa niečo pokazí.
A ty sa trochu pop-up hovorí systémová chyba, jeden,
dva, tri, alebo bez ohľadu na počet bol, že
bol vlastne vrátil.
Takže niečo v poriadku s tým?
[Nepočuteľné]
>> DAVID J. Malan: Takže to nie je tak funkčný omyl
ale estetický.
Asi by som mal dať do znakom nového riadku tam
koniec tohto reťazca, takže sme vlastne presuňte kurzor na
ďalší riadok, a program, ktorý vyzerá trochu krajší.
>> Takže teraz ma nechaj ísť dole do môjho okna terminálu
a zoom späť dovnútra
A táto vec tu, je to len výzva.
Je to proste mi to pripomenul, kto som, jharvard @ prístroj tam, kde je
Spotrebič je názov počítača som na.
V zátvorkách sú to vlnovky, klikiháky symbol, ktorý
predstavuje to, čo?
Divákov: Home adresár.
DAVID J. Malan: Home adresár.
Takže to je len skrátený zápis pre ostatné ste v
Vaše osobné zložku, kde všetky vaše súbory ísť v predvolenom nastavení.
Takže teraz, tu, môžem zadať ls pre zoznam.
A jediné, čo som vidieť tu v tejto chvíli je hello.c.
A to je dobre, pretože som práve napísal.
>> Tak nechaj ma ísť dopredu a to, aby ahoj.
A všimnite si, nebudem písať, aby hello.c.
Namiesto toho, ja som len písať základné názov súboru, ahoj.
A aby, ako sme videli v pondelok, bude len usudzovať, že chcem
. C súboru.
Takže teraz som napísal, aby ahoj.
Teraz vidím túto pomerne dlhú príkaz a bude pokračovať
vidieť to znova a znova.
Ale aby bolo jasno, rinčať, slovo, ktoré práve objavil,
že je to skutočný kompilátor.
Urobte je len nástroj zostavenie.
Je to len ďalší užívateľsky prívetivý program, ktorý šetrí mi, že v
dlhodobo, od nutnosti písať z neuveriteľne únavné dlhé
Príkazy páči.
Takže by ste mohli spustiť rinčať ručne.
Dalo by sa napísať všetko ručne.
Proste dostane veľmi únavné.
A tak, aby je len program, ktorý zjednodušuje naše životy a
beží zložitejšie príkazy pre nás.
>> Dobre, tak čo teraz súboru by som mal mať
v mojom aktuálnom adresári?
Nielen hello.c, ale tiež ahoj.
Takže keď chcem spustiť ahoj, pripomínam, že hovorím dot lomítko,
kde bodka znamená ísť do aktuálnej zložky, nech ste kdekoľvek
sú, a potom spustiť program s názvom ahoj, a naozaj, teraz,
Mám Hello World.
Dobre, nejaké otázky na pracovnom postupe alebo syntaxe
čo sme práve urobili?
>> Dobre, takže sa poďme veci do zárezu znovu.
Tak toto bol nezaujatý len napísať program, ktorý iba
niekedy hovorí ahoj, svet.
Takže sme zmenili to, v pondelok, hovoriť, ahoj, David.
Je to trochu osobné, ale rovnako pevne dané ako
prvá verzia.
Takže nie je všetko, že presvedčivé.
Ale existuje, v C, funkcia iste okrem
tlač, funkcie, ktoré vám umožnia získať vstup od užívateľa.
A ako sme to urobili, druhý deň, a to takto.
Než som skutočne vytlačiť niečo, som sa prvýkrát dostal
niečo od užívateľa.
Tak ma nechaj robiť to znova.
>> String s, kde s je len ľubovoľný názov, tu, pre
string, rovná GetString.
Takže to, čo bolo GetString?
Je to samozrejme dostane reťazec, na základe jeho meno.
Ale čo to je, viac technicky?
Je to funkcia.
Takže je to funkcia, ktorá nepríde s C na sebe.
CS50 personál napísal.
A tak na použitie, môžete nielen patrí stdio.h,
Tiež je potrebné zahrnúť čo?
Jo.
Takže cs50.h, ktorá je len súbor sme písali pred niekoľkými rokmi.
Inštalovali sme ho na spotrebiče pre vás spolu
všetky štandardné súborov.
A tak v týchto prvých niekoľkých týždňov po triede, budeme používať
to len zjednodušiť proces robí veľmi základné
veci, ako dostať vstup od užívateľa.
Vzhľadom k tomu, ako uvidíme za pár týždňov, ako sa užívateľ vstup do
jazyk C je v skutočnosti prekvapivo zložitý,
najmä preto, že neviete vopred, zvyčajne, ako
veľa vecí je užívateľ bude písať dovnútra
A keď neviete, koľko dát sa očakávať, nemusíte
vedieť, koľko pamäte prideliť.
A ak ste skutočne máte kontradiktórne užívateľa, ktorý sa snaží
nabúrať sa do vášho systému, zrútenie počítača, dobre,
zvyčajne prvá metóda útoku je, rovnako ako ja na
Pondelok, zadajte celý dlhý sled náhodných znakov,
Enter, a uvidíme, čo sa zlomí.
Pretože všeobecne, ak sa program prestávok, ktoré naráža na
bezpečnostné chyba, potenciálne.
To iste naznačuje na vás, programátor, ktorý urobil
chyba, ale nebezpečne, možno ste urobili
súvisiace s bezpečnosťou chyba, a všeobecne budeme vidieť, že
to je, ako sa stroje ohrozená k tomuto dňu, a to ako
vo svete webu a programov na
príkazového riadku, ako je tento.
>> Dobrá.
Takže string s rovná GetString.
Takže konkrétnejšie teraz, čo na trati: 6 robiť?
Takže funkcia na pravej strane dostane reťazec,
berie koľko argumenty?
Dobre.
Preto nikto.
Trochu zdravý rozum skontrolovať.
Argument, opäť, je len vstup do funkcie zmeniť
jeho predvolené správanie nejakým spôsobom.
Ale v tomto prípade, nechcem meniť
správanie GetString.
Len som sa chcel dostať reťazec.
Tak som dal nič v zátvorkách, a potom som dal
bodkočiarka demarking koniec riadku kódu.
Teraz, rovná neznamená rovné, samo o sebe.
To znamená, že priradenie, čo znamená, že bez ohľadu na dal dostane
výstup na pravej vnútornej čo je na ľavej strane.
>> Takže na ľavej strane, môžeme povedať, že sme deklarovali
string volal s
A konkrétne, sme pridelené pamäte vnútri
ktoré dáme na kúsky, ktoré predstavuje postupnosť
znakov.
Ale pre dnešok, sme pridelené
alebo vyhlásené za reťazec.
Dobrá.
Takže teraz po tom, čo som to urobil, chcem pripojiť v hodnote
s, nie je hodnota David.
Tak to je v poriadku, prečo?
Takže je to len doslova pevne s
Je to povedať "ahoj, s", čo nie je to, čo chcem.
Tak som to urobiť.
Znak percenta je zástupný symbol, ale teraz musím
odovzdať do tlače aj druhý argument.
Pripomenúť, že argumenty funkcie sú od seba oddelené
čiarky, takže ďalšie čiarka tu som si po tomto liste s
A v tejto súvislosti teraz, s je premenná, a printf,
po obdržaní týchto dvoch vstupov -
reťazec na ľavej strane a názvy premenných sa na P -
bude zapojte posledne do bývalej pre nás, a
len vytlačiť pekný krásny reťazec obsahujúci
čo to je, že sme zadali dovnútra
>> Tak poďme to skúsiť.
Chystáte sa do toho pustite a oddialiť, späť
k môjmu terminálovom okne.
Zväčšenie na dne tu.
Opíšte, aby ahoj.
Rinčanie sa zdá k boli znovu spustite.
Idem písať. / Hello, Enter.
Nič sa nedeje ešte, ale je to na túto výzvu
že môžem písať niečo ako Nate, Enter, a teraz máme
Dobrý deň, Nate.
A ja si to znovu s Robom, a tak ďalej.
Takže dúfajme, že teraz tento program sa chová, ako som v úmysle.
>> Teraz, nie všetky, že užívateľsky prívetivý.
Nemám tušenie, čo sa sa odo mňa očakáva.
Takže môžeme určite vyčistiť to až trochu.
Nechaj ma ísť späť sem, a nie len potápanie v a
žiada užívateľa o reťazec, dovoľte mi, aby som explicitne povedať, na
užívateľ, čo som očakával.
Takže printf ("Zadajte reťazec:"
);
Takže žiadne premenné tu.
Žiadne percent znaky.
Len jednoduchý anglický výraz.
Dovoľte mi teraz ísť ku dnu tu a znovu môj program.
Ale nič sa zrejme zmenila.
Prečo?
Musím prekompilovať ho.
Tak chybička sa ľahko vlúdi.
Ale musíte nielen uložiť súbor, ale
prekompilovať program.
A tak keď som znovu spustiť, aby ahoj, teraz zvonenie beží.
Teraz už môže bežať. / Hello. A teraz vidím, "Zadajte reťazec:".
Dobre.
Teraz je to trochu viac užívateľsky príjemný.
Nate, Enter, ahoj, Nate.
>> No, skúsme to znova a začať premýšľať
o rohových prípadoch.
Takže rovnako ako v Scratch, budete podporovať alebo sú
podporovať v špec druh premýšľať o tom, čo by sa mohlo ísť
zle, keď nemáte predvídať všetko užívateľ mohol urobiť.
Chyby, a preto môže nasledovať.
Takže zadajte reťazec -
Čo je rohová prípad?
Čo je to scenár, ktorý som, programátor, nemusí mať
Predpokladá sa?
Jo.
Dobre.
Takže, čo keď som písať v rade, ako je tento?
Dobrá.
Takže to ešte funguje.
Gramaticky nedáva zmysel.
Ale aspoň program funguje.
>> Čo je ďalší roh prípad?
Niečo, čo som nečakala.
Jo?
Dobre.
Takže by sme mohli urobiť niečo ako naozaj, ale naozaj veľké číslo.
Takže ideme na to tu.
Dovoľte mi, aby som vzdialite na sekundu, dovoľte mi, aby som spomenul.
Nemožno kopírovať a vložiť sem.
Dobrá.
Takže nemôžem kopírovať a vložiť do tejto terminálovom okne, takže budeme
tiež len simulovať.
Dovoľte mi, aby som oddialiť, bude zabaliť.
Nebudem robiť to príliš dlho, pretože to nebude
skutočne rozbiť v tomto programe.
Ale to mohlo.
Enter.
Ale to sa nestalo.
Dobrá.
Ale je to skutočný roh prípad.
A jediný dôvod, prečo sa správal správne, tak
hovoriť, je preto, že CS50 funkcie GetString je vlastne
navrhnutá pod pokrievku, ako uvidíme za pár týždňov,
automaticky prideliť viac a viac pamäte RAM, stále viac a viac
pamäť od operačného systému, keď si uvedomí,, wow,
ste naozaj zadali v niečo celkom dlho.
Teraz, to je trochu lož.
Ak by sme skutočne zastavil na nejakú dobu a som písať v
niečo ako 5000000000 znakov na klávesnici
tu, alebo naozaj hit copy-paste celkom dosť, sme dosť možno
môže spôsobiť, že program na zrútenie.
Len trochu ťažšie simulovať, že s konečnou
množstvo času.
>> Čo je ďalší roh prípad, že by sme mohli skúsiť?
Jo?
Jo.
Tak prečo nie my odpovedáme nič?
Takže v skutočnosti máme na nejakú akciu, pretože inak
Program sa bude sedieť tam bliká celý deň.
Ale keď som jednoducho stlačiť Enter -
OK, teraz, stále vyzerá zle.
Vari pád, ale možno je teraz príležitosť
začať vykonávať viac prísny program
že v skutočnosti kontroluje.
A ak reťazec, veta, slovo, ktoré som
zadali má dĺžku 0, dobre, možno by som mal kričať Na
užívateľ, alebo mu povedať, alebo ju zadať reťazec znovu tak, aby
sme vlastne dostať to, čo vyzerá ako správne správanie a nie
Iba kompletné dohľad z mojej strany.
>> Otázka v chrbte?
Desatinné číslo.
Takže sme si mohli vyskúšať, že taky.
1,10000005.
Zdá sa, že takto to bude len práca skutočne v poriadku.
A skutočne sa očakáva.
Aj keď sme možno ste zadali, že číslo neexistuje, alebo
väčšie množstvo skôr, si uvedomiť, že keď sme písanie užívateľa
vstupné a my sme pomocou GetString funkcie, nie je
ohľadu na to, či to, čo píšem vyzerá ako číslo.
Pripomeňme si, že podľa ASCII, všetko na svojom
Klávesnica má číselnú hodnotu, ktorá môže byť mapovaná do
znak, char.
Takže v tomto prípade, aj keď sa môže zadať číslo,
počítač bude myslieť na to, aby som tak povedal, ako reťazec -
niečo, čo vyzerá ako číslo, ale je
nie vlastne číslo.
Ale to je vlastne dokonalý SEGUE, pretože teraz môžeme
vlastne prechod na písanie programov, ktoré
používať iné dátové typy.
>> Takže okrem používanie znaku, alebo skôr, vedľa používanie reťazcov,
uvedomiť, že máme iné dátové typy v C, rovnako ako v
other jazykov.
Char, ako už názov napovedá, je len jeden znak.
Plavák je plávajúca bodová hodnota, a to je len fantázia
spôsob, ako hovoriť reálne číslo - niečo, čo má desatinnú čiarku
bod v ňom s niektorými číslami na ľavej a / alebo pravej.
Int je celé číslo, ktoré je rovnako ako číslo 123.
A teraz zaujímavejšie, sú veci ako dvojníka.
Čo povieme double bol naposledy?
Je to 64, že jo.
Takže vzhľadom k tomu, typicky float je 32-bit -
takže je to tak dlho v pamäti, používa 32 núl a jedničiek na
predstavujú hodnoty - double je doslova dvakrát, čo
Znamená to, že môžete buď predstavovať väčšie čísla, alebo
môžete predstavujú viac presné čísla.
Takže môžete mať viac čísel za desatinnou čiarkou, ale
ako kolega povedal vo videu, dokonca aj niečo jednoduchého,
koncepčne ako tretina nemôže byť reprezentovaný presne podľa
počítač, pretože nakoniec vám dôjdu bitov, a
Preto môžete robiť len .33333333 toľkokrát, na
ktorý bod stačí povedať, že som z reprezentácie
priestor, musím len nazývať to deň a zastupovať ju
trochu nepresne páči.
A long long -
hlúpy názov, ale je to preto, že je dátový typ známy ako
dlho v C, ktorý zhodou okolností je často 32 bitov, rovnako ako
int je 32 bitov, ale dlho dlho
všeobecne 64 bitov.
Tak to jednoducho znamená, že môže predstavovať väčšie
čísla ako toto.
>> Dobrá.
Takže ak chceme skutočne začať reprezentovať veci, my
môže byť potreba viac sofistikované typy, a
to je dôvod, prečo máme reťazec.
Takže v CS50 knižnici, že súbor s názvom cs50.h, máme
vlastne deklaroval, dátový typ, aby som tak povedal, tzv string,
ale reťazec v skutočnosti neexistuje.
To je opäť jeden z týchto vrstiev sa budeme šupkou
späť na týždeň alebo dva a vyhoďte ho, a vlastne
pozerajú pod pokrievku, čo reťazec vlastne je, a
ako sa zastúpená.
Sme tiež sa pozrieme na logické hodnoty.
>> Takže, čo bolo bool v kontexte Scratch?
Je to pravda, alebo nie.
Takže je to len hodnota, ktorá je true alebo false, zapnúť alebo vypnúť, 1 alebo
0, ale ak chcete zobraziť svet.
Takže v C, a to vďaka CS50 knižnice, čo
obsahuje iné knižnice pod kapotou, máme
prístup k dátovým typom, ktorý je volal bool, ktorá bude
doslova nám umožní priradiť hodnoty true alebo false na
veci v programe.
>> Tak poďme do toho sem a napísať malý program, ktorý
robí niečo zahŕňajúce čísla miesto.
Tak nechaj ma ísť späť do CS50 Appliance, nechajte ma ísť napred a
vytvorte nový súbor s názvom tu -
povedzme niečo jednoduchého, ako math.c.
Dobrá.
A teraz ísť až na vrchol svojho programu, som
robiť obvyklé -
# Include , takže môžem použiť
printf, int main (void) -
vrátime do, prípadne, čo int znamená
tu, čo void znamená tú, ale teraz, len viem, že
budete musieť spúšťať programy, ako je tento.
Teraz budem pokračovať a poviem niečo málo
rôzne - printf ("Daj mi číslo:"
);.
Potom budem robiť int n = GetInt, pretože
Ukázalo sa, že GetInt je ďalšie funkcie v CS50 knižnici
okrem GetString.
A teraz idem robiť niečo hlúpeho, ako "vďaka
pre% d, "pre desatinné číslo, a potom sa čiarka n, a
potom sa vrátiť 0.
Takže znova, vráti 0 nemá nič spoločného s číslom som
žiada užívateľa o
Len znamená na konci, že všetky, pravdepodobne, je dobre.
>> Tak nechaj ma ísť k mojej terminálovom okne tu.
Dovoľte mi, aby som zadajte robiť matematiku, zadajte.
A je niečo zle.
Urobte matematika nefunguje.
Tu je prvý z našich chybových správ.
Prečo?
Trochu záhadné, ale -
Jo.
Tak cs50.h.
Takže znova, a to najmä na začiatku, budete písať vaše prvé
program pre PSet 1 v sekciách, v úradných hodinách, a
úprimne povedané, bude to ohromujúci niekedy to, čo tieto veci
sú vlastne hovorí.
Ale budete realizovať veľmi rýchlo začnú klesať
do vedier pričom táto znamená, že ste odišiel sa od jedného
z # obsahuje v hornej časti súboru.
A zvonenie, kompilátor, je informovať vás o toto tým, že
hovorí, skôr fancifully, implicitné vyhlásenie
funkcia GetInt je neplatný.
>> Dobrá.
Takže čo to znamená?
To len znamená, že ste implicitne vyhlásil GetInt v
pocit, že ste výslovne vyhlásil to.
Ak chcete explicitne deklarovať int, budete musieť naučiť
Rinčať, že to existuje.
A veľmi jednoduché riešenie pre ktoré je učiť ho
vrátane tohto iného súboru, cs50.h, na
hornej časti súboru.
Vzhľadom k tomu, doslova, čo # include robí, je to povie rinčať
skoro ísť nájsť súbor s názvom cs50.h, kopírovanie,
vložte ho automaticky do hornej časti môjho programu pre mňa,
a potom previesť zdrojový kód núl a jedničiek.
Ale to by samozrejme bolo veľmi únavné, ak sa my ľudia mali
ísť kopírovanie a vkladanie týchto veľkých súborov po celú dobu,
takže # include len robí všetko automaticky, bez nutnosti
kalí môj kód niekoho iného knižnice.
A knižnica je len ďalší súbor, ktorý obsahuje funkcie a
iné veci, ktoré niekto iný napísal, že sme
využitie pre naše vlastné dobro.
>> Dobrá.
Skúsime to znova.
Urobte matematiku.
Enter.
Dobré.
Takže sa zdá, že som pracoval.
Tak nech mi teraz beží matematiku;. / Math.
Zadajte dáva mi číslo, 123.
Vďaka za 123.
Teraz sa poďme skúsiť iný rohový prípad.
Reťazec je celkom štedrý, pretože
reťazec môže byť čokoľvek.
Môže vyzerať ako čísla, vyzerať
postavy, vyzerajú ako slová.
Ale int je int.
Takže teraz keď som ťažký užívateľa, a to hovorí: "Daj mi
číslo, "čo keď sa snažím urobiť niečo ako 0,1?
No, to je číslo, a to v súlade s
gramatika Aj tu používa, ale pod kapotou, som z
Predmet pomocou funkcie GetInt.
>> Tak uvidíme, čo sa stane.
Zadajte, skúste to znova.
Dobrá.
Nechaj ma byť ťažké a jednoducho stlačiť Enter znova.
Zadajte, Enter.
Takže teraz sa zdá, že GetInt je trochu viac
silnejšie ako GetString.
My, zamestnanci, ktoré sa vykonáva tak, že ak sa všimnúť
ste nám nedal int - a int je desatinné číslo
obsahujúce nuly, tie, dvojky, trojky, štvorky, päťky, šestky,
sedmičky, osmičky, alebo deviatky.
A to je všetko.
Žiadne desatinné miesta, žiadne znaky, bez interpunkčných znamienok.
Zdá sa, že musíme spolupracovať.
Tak skúsim štyri, päť, šesť, a to dostáva ma.
Takže naozaj, byť análny tu, mal by som asi povedať "Daj mi
číslo ", aby sa dopravujú k užívateľovi
presne to, čo mám v úmysle.
>> Teraz sa poďme zamyslieť pod kapotou.
Nebudeme sa pozerať na to, ako je cs50.h vykonaná dnes,
že knižnica.
Ale či to stále hovorí opakovanie, opakovanie, opakovanie, aký programovací
konštruovať som pravdepodobne pomocou pod pokrievku na
implementovať, že?
Takže len slučka, nie?
Jedným z najjednoduchších nápadov, ktoré sme videli na Scratch.
Forever konštrukcia, Repeat konštrukcie.
Možno predpokladať, že v tomto programe, pod kapotou, a to aj
keď je to napísané v C, a nie poškriabaniu, to robí
niečo ako ekvivalent večne, ak užívateľ nemá
napísané v celé číslo, povedzme opakovanie, opakovanie, opakovanie, opakovanie, takže
nakoniec, keď to dostaneme celé číslo, potom
vymaniť z tohto cyklu.
>> Takže aké ďalšie funkcie môžeme používať tu v knižnici CS50 je?
No,, druh zrejmých tie aspoň na základe
dátové typy, ktoré my teraz vieme existujú.
Zaviedli sme GetString, GetInt, ale v celej
Prvé týždne v termíne, môžete tiež použiť GetFloat a
GetDouble a GetLongLong aby sa presne
dátové typy, ktoré chcete.
Vzhľadom k tomu, kľúč detail je, že na rozdiel od niektorých jazykoch,
ako je Python a Ruby, kde nemusíte nutne musieť
vyhlásil dátový typ premennej -
nemusíte hovoriť počítač, aký druh vecí
budete dať do premennej -
v C, musíte byť vždy tak presné.
Takže ak chcete premennú s názvom n, kus skladovanie
že v tomto prípade sa stane, že 32 bitov podľa konvencie, môžete
musím povedať počítač, že tieto kúsky sú
bude pre uloženie čísla -
nie je postava, nie reťazec, nie float.
A to rieši problém sme efektívne
bežal do minulého týždňa.
Ak sme pomocou núl a jedničiek čísla predstavujú nielen
čísla, ale AS a BS a Cs, ako vo svete, je
Počítač bude vedieť, že tento vzor bitov v skutočnosti má
predstavuje číslo 65, na rozdiel od reprezentovať
písmeno, ktoré náhodne, podľa
ASCII, spomínam, bol ekvivalentný k 65?
>> Takže tieto dátové typy poskytovať kontext k počítaču, takže
že nevie, či sa tieto bity sa má vykladať v tom
int alebo ako reťazec.
Akékoľvek otázky, potom na to?
Jo?
DAVID J. Malan: Dobrá otázka.
Ak vezmeme z stdio.h, uložíme súbor -
dovoľte mi, aby som šiel do okna terminálu a spustite make matematiky, zoom
a zadať -
teraz som si rôzne chyby, pretože som implicitne
prehlasuje, akú funkciu teraz?
Printf.
Takže teraz som vytvoril nový problém, ktorého riešenie je
v podstate rovnaké.
Musím to dať späť.
PUBLIKUM: [Nepočuteľné]
DAVID J. Malan: Oh.
Takže keď to vezmem z -
Dobre, jo.
Takže keď som odstrániť štandardné I / O knižnice začlenenie do
tu, a potom hovoríš, že keď som sa zbaviť printf, sa
zbaviť printf?
Áno.
To by malo fungovať, pretože som už s použitím ktoréhokoľvek - POZOR.
Už som len tak ležať?
Oh, dobre.
To nebude fungovať, pretože o novom chybe, ktorú práve zavádza.
A toto je trochu viac intuitívne.
>> V čom je problém?
Nepoužité variabilné n
Takže táto chyba je výsledkom nášho prevedenie konfigurácie
Prístroj byť obzvlášť pedantská, naozaj zakričať
si pre každú možnú chybu, aj keď je to trochu
non-fatálna chyba takhle - je to naozaj tak veľký
zaoberať, že som pridelil int, dať číslo v nej, a potom
len robil nič s tým?
Takže funkčne, no.
To nie je rozbije program.
Je to len trochu hlúpe, nie?
Žiadne hodnoty na ktoré požiadali o zmenu tejto číslo, uložené
to v premennej, ak ste nikdy robiť nič
s tým, nech ju vytlačiť alebo uložiť.
Takže v tomto prípade, zvonenie pripúšťania toľko, a
to hovorí nepoužívané premennej n
>> Tak sme to spravit, ak skutočne chceme.
Ale znovu, to nie je dobré programovacie teraz.
Takže som mohol len urobiť -
ísť sem, dovoľte mi, aby som ich vymazať obrazovku, aby matematiku.
To funguje.
Teraz som si spustiť môj matematický program, vezme vstup -
dobre, to bolo zlé.
Berie vstup, a že je všetko robí, v tomto prípade.
>> Takže vlastne, poďme skúsiť ešte jeden rohový prípad, že by sme
nemyslel skôr.
V tomto prípade - tu, poďme späť k tej, ktorá je
trochu viac užívateľsky príjemný.
Nechaj ma ísť sem a spustite make matematiku znova.
Jejda, čo som urobil zle?
Musím vrátiť späť ďalšie.
Dobre.
Teraz sme späť v pôvodnom stave, kde všetci
je snáď dobre.
A teraz, keď spustím matematiku, 123 Zdá sa, že funguje.
Ale to nie je naozaj efektívny dôkaz, len povedať
v poriadku, že funguje.
789, ktorá funguje.
Lehota na podanie.
Pretože tam je ďalší roh prípady tu.
Reťazec sa naozaj nám veľa problémy zadaním
množstvo postáv.
Ale čo keď píšem v tomto?
Biť číslo 1 oveľa, oveľa tu -
v poriadku, je to stále trochu nudné, tak budem
zastaviť tu, a budem stlačte Enter.
>> Čo sa to sakra stalo?
Takže to môže byť v skutočnosti vysvetliť.
Tak sa to brať ako binárny?
Dobrá myšlienka, ale nie, to nie je fakt, že to vzal
ako binárny, pretože to naozaj, to bolo tak nejako
náhoda.
Môžeme to urobiť znova.
Takže tam je č 2 v binárnom systéme, ktorý je
asi dosť rovnako.
Enter.
Takže to nebol problém.
Čo ešte?
Exactly.
>> Takže myslíte, že späť na to, čo int vlastne je.
Je to 32 bitov, ktoré dohromady sú interpretované
ako číslo.
Ak sa majú 32 bitov, to znamená, že každý z kúskov môže byť
0 alebo 1, 0 alebo 1.
Takže to znamená, že sú dve možnosti pre tento kúsok,
dve možnosti pre to, dve možnosti pre to
bit - tak to je 2 krát 2 krát -
tak, že je 2 až na 32 sily je celkový počet
permutácie núl a jedničiek, ak máte 32
Zástupné symboly, nuly alebo jednotky, pred vami.
Takže ak som 2 na 32, matematicky, to je to čo?
Takže je to veľa.
Je to 4 miliardy eur, dávať alebo brať.
A 4000000000 nezdá byť tým, čím bola vytlačená tu.
V skutočnosti, to vyzerá bližšie k 2000000000.
Ale to nie je náhoda.
Skutočnosť, že je počítač nesprávne vyložila moje obrovské množstvo,
môj obrovský postupnosť jedničiek a potom môj obrovský sled dvojky,
ako približne 2 miliardy USD, je vysvetlené, ako?
Tam je limit na int.
Tam je určite maximálna hodnota, ktorú možno reprezentovať.
Ale je to zvyčajne 4 mld Sk, nie?
Ak 2 na 32 je zhruba 4 miliardy, ktoré sa javí ako
že je to najväčší počet.
Takže nie je zvyšok, ale dobrá myšlienka.
Záporné čísla.
Takže ak máte 4 miliardy možných vecí, ktoré môžete
predstavujú s týmito rôznych obmenách po 32 0s a
1s, dobre, to dá rozum, že my ľudia by mohli chcieť
predstavujú nielen pozitívne celé čísla
ale záporné celé čísla.
A skutočne, že je predpoklad, že C je.
Takže s 32 bitmi, môžete reprezentujú približne negatívne 2
miliárd celú cestu až k pozitívnemu 2000000000.
A tak v tomto prípade to, čo sme naozaj svedkami, je len
Fringe kapacity našej integer, a my máme, tak
hovoriť, vyliala celé číslo.
Snažili sme sa napchať viac bitov do neho, než vojde.
Takže konečný výsledok je, že sme v podstate majú všetky bity 1.
Sme prevrátil všetky naše bitov na, sme sa snažili reprezentovať
najväčšie možné množstvo, ale to zjavne nie je zďaleka
dostatočne veľké, aby reprezentovať dve veci, ktoré som práve zadanej a
Jo?
PUBLIKUM: [Nepočuteľné]
>> DAVID J. Malan: Dobrá otázka.
Prečo jednoducho nemôžeme predstavovať, že negatívne
prihlásiť len ako znak?
Tak sme absolútne mohli, a tak by sme mohli uložiť
ďalšie bit.
Ale ste stále bude musieť zastupovať túto pomlčku, a
že to bude stáť aspoň niečo,
pravdepodobne trochu.
Takže áno, mohli by sme mať 32 bitov použitých pre naše číslo, ale teraz
potrebujeme ďalšie trochu používané pre našu pomlčkou
symbol, znamienko mínus.
Takže teraz máme 33-bitové hodnoty, ktoré by sme mohli robiť, ale je to
len nie tak, ako to urobil.
Urobili sme rozhodnutie volanie rokmi, 32 bitov je trochu
merná jednotka tu.
Takže budeme používať jeden z týchto bitov účinne
predstavujú negativitu, a 31 bitov na reprezentáciu čísla.
Ďalšie otázky?
Dobrá.
To je veľa.
Prečo nejdeme dopredu a vziať naše päťminútovú prestávku tu?
>> Dobrá.
Takže znova, nie preceňovať matematické aplikácie
programovanie, poďme len utrhnúť z tohto jeden príklad
predtým, než sme sa presťahovať do iných konštruktov, práve preto, že
bude ilustrovať niekoľko spoločných potkýnal bodov na niektoré z
základy, pokiaľ ide o písanie programov.
V tomto prípade, robí aritmetické výrazy, ktoré majú niektoré
zaujímavé význam pre syntax.
>> Takže je to len formula, s ktorými sa môžeme previesť
teploty zo stupňov Fahrenheita na stupne Celzia.
Ak nechcete spomenúť, je to len vzorec.
Takže ak sa pripojiť Celzia hodnote 32 stupňov, čo je
zmrazenie, že to bude 32 mínus 32 je 0, a naozaj,
0 v stupňoch Celzia je tiež zmrazenie.
Tak rýchle sanity check tam - to je známa rovnica.
Nechaj ma ísť sa k zariadeniu, aj keď, a začať
písanie s názvom programu, rovnako ako, f2c, "Fahrenheit
Celsius dot c ".
A až na vrchol tu, idem začať s # include
stdio.h, a ja budem robiť int main (void), a
znova, budeme vracať aj v budúcnosti, aby to, čo int znamená
tam a čo void znamená, že.
A teraz mi dovoľte pokračovať a realizovať program, ktorý
v podstate robí tento prevod pre nás.
>> Takže printf, povedzme, teplota v stupňoch Fahrenheita.
A potom ma nechaj ísť dopredu a získať hodnotu od užívateľa.
Aké hodnoty by som mal dostať od užívateľa, ak chcem
je, aby mi teplotu v stupňoch Fahrenheita?
Jo?
Čo by ste navrhoval?
Jo.
Takže float cíti celkom rozumné.
Máme opäť len málo možností, že
sme videli doteraz.
Máme veci, ako char, double, float, int, long long,
bool, string.
Takže z nich, float cíti celkom rozumné.
Môžeme použiť dvojaký, právo, pretože ak skutočne chceme, aby
predstavujú ľudskú teplotu -
98.60000 -
môžeme použiť 64 bitov na to, že, ale to vyzerá
prezbrojenie na teplote.
Tak poďme s plavákom.
Teraz potrebujem premennú.
Len, aby to jednoduché, budem hovoriť, že f, ale ja
mohol len ako správne nazývať to teplota,
ale buď je v poriadku.
Takže float f = GetFloat.
Akonáhle som sa teraz sa rozhodli používať GetFloat, keď som
treba urobiť jednu opravu.
Jo.
Takže musíme # include , inak kompilátor
bude kričať na nás.
Teraz, keď mám float, nechajte ma ísť dopredu a robiť
konverzie.
>> Takže prvé, dovoľte mi, aby som tiež dostať do zvyk tu o
komentovať môj kód.
Takže znova, komentár je len zápis na človeka, ktorý je
nie je súčasťou programu na sebe, ale to jeden, pomáha
pochopiť, čo si urobil ráno, alebo ďalšie
mesiac, pomáha vaše vyučovanie človek pochopiť, čo si urobil
alebo čo ste chceli robiť, tak je to
všeobecne veľmi dobrá prax.
Každých pár riadkov kódu, napísať komentár k
sami, alebo váš kolega.
Tak tu, budem hovoriť, "Opýtajte sa užívateľa na teplotu."
Nemusí to byť kompletná veta, len krátka fráza.
Ale myšlienka komentovanie v C je, že každý z vašich
komentáre by mali posilniť vás - alebo, povedzme, TF alebo kolegu -
zbierať svoj program a presne vedieť, čo to robí, tým, že
toľko čítanie kódu, ale čítanie pripomienky, ktoré
by mali byť stručné a jasné.
Dobre, takže teraz ma nechaj ísť ďalej a povedať, "Previesť
Fahrenheit na stupne Celzia. "Takže budem pokračovať, a to,
povedzme, float c
Budeme Celzia ako hodnota s plávajúcou čiarkou.
>> A dovoľte mi, aby som sa bodnúť sa na toto.
Vzorec je opäť tu.
Ako 5/9 krát F mínus 32.
Takže ideme na to.
Takže 5 delené 9, mínus -
jejda, som pokazil to už.
Times.
Takže 5/9 krát F mínus 32.
Takže F mínus 32, bodkočiarku.
A teraz, tu dole, budem pokračovať
a hovoria, vytlačte výsledok.
A táto časť je ľahká. Printf.
Ako mám ísť o tlači to?
No, mohol by som povedať "Toto číslo v stupňoch Celzia je% f \ n",
len pre niektoré estetiku.
A potom to, čo hodnota sa chcem pripojiť tu printf je
Druhý argument?
Dobre.
Takže len c
Takže začneme s tým a potom už len vrátiť 0.
Opäť, to nemá nič spoločné s matematikou.
To len znamená, že je všetko v poriadku.
>> Teraz, je to správne, tento program?
Dobrá.
Tak som urobil nejaké chyby.
Aj keď nemáte tušenie, čo programovací ich môžete triediť
chrbta toho vyvodzujú na základnej škole, čo
chyby tu môže byť.
Čo je to jeden z prvých?
PUBLIKUM: [Nepočuteľné]
DAVID J. Malan: Jo.
Takže nám chýba zátvorky.
Bolo to zámerné, že som zátvorky v keynote
posuňte tu, pretože je to vlastne tento pojem objednávky
operácií, alebo priorita, pričom niektoré operácie -
násobenie -
majú vyššiu záväzné, majú vyššiu prioritu, ako veci
ako sčítanie alebo odčítanie.
Takže sme urobili to pre rokov len aby bolo jasné, presne
čo matematická operácia by mala byť vykonaná ako prvý.
Tak som mal asi napodobňovať presne to.
V opačnom prípade, je počítač pravdepodobne bude snažiť robiť
niečo ako predel 5 od 9, potom násobiť F, potom odčítajte
32 z celej veci.
Čo nie je, v skutočnosti to, čo chceme robiť.
Tak poďme parenthesize.
Poďme pridať svoje zátvorky tu, zátvorky tu.
Poďme si tohle sem.
Tu, som si všimol ďalšie chybu som urobil po ceste.
Jo?
PUBLIKUM: [Nepočuteľné]
>> DAVID J. Malan: Ah.
Dobré.
Takže sme vlastne mať rovnakú celé číslo
Divízie vydanie z pred.
Aj opraviť, že sa pozrieme, čo sa tento príznak.
Ale budeme musieť správnemu
ďalšie chyba tu.
Jo?
PUBLIKUM: [Nepočuteľné]
DAVID J. Malan: Áno.
Takže, hlúpa chyba som, ale nesmierne dôležité.
Počítač nebude len prižmúriť oči a nechajte
mi použiť kapitálu F, keď som vlastne deklaroval premennú
ako malá f tu, v súlade 8.
Tak som potrebné opraviť v riadku 11 mi kapitalizácie, ktorá
Pred chvíľou bol kapitál F omylom.
Čo tu?
Malo by to byť malými písmenami, ako dobre?
Malo by byť, ale to je náhoda.
To% f nemá nič spoločného s premennou.
Takže len pre super clear tu, nechajte ma ísť napred a
premenovať, krátko, "teplotu." Dovoľte mi, aby som premenovať
Tento "teploty." Dovoľte mi, aby som to premenujete.
Pretože, znovu,% f globálne znamená, "plávajúce bodovú hodnotu."
Nemá nič spoločné s mojím premenné.
Ale "teploty" všade možne je len trochu rozvláčny,
takže som ísť späť do môjho malého "f" s
>> Teraz mi dovoľte, aby som do toho do môjho okna tu.
Značka f2c -
ktorý bol opäť, ľubovoľný názov I
dal k tomuto súboru.
Zdá sa, že zostavujú.
Dovoľte mi, aby som bežať f2c.
Enter.
Teplota v stupňoch Fahrenheita - poďme urobiť jednoduchý jeden.
32.
OK, opraviť.
Ale, keď som teraz urobiť 212 na varenie -
damn.
Dobrá.
Takže, jasne nie je správne, ak vaše TF pokúsi
najmenej dve hodnoty.
Tak v čom je problém tu?
No, už si prstom na to, čo je problém.
Ale prečo je to, že v prípade,?
Až tu, keď robím matematiku 5 deleno 9.
Takže koncepčne, je to úplne správny.
Úplne v súlade so vzorcom.
Ale iba počítačov robiť presne to, čo ste
povedz im robiť.
A to, čo sme skutočne hovoriť počítač je tu
rozdeliť celé číslo 5 v celej číslo 9
a daj mi výsledok.
Problém ale je, keď nemáte divízie použitím údajov
Typy, výstup je rovnaký typ dát ako vstupy.
A tak ak dva vstupy sú obaja ints, výstup bude
byť int.
A tak 5 deleno 9 je bod niečo.
Ale čo je najbližšie celé číslo na niečo?
Takže, je to vlastne 0.
Tak ako sme sa bavili v pondelok, všetko, čo po desatinné
bod dostane skrátené.
Je to jednoducho dostane vyhodiť.
Tak to je úplný omyl, pretože som mohol rovnako dobre
vynásobte všetko 0 tu.
>> Teraz, to môžem opraviť v niekoľkými spôsobmi.
Mohol by som to urobiť.
5,0 delené 9.0.
Technicky, som ani nemusíte robiť.
To sa stačí len, aby jedno z čísel float -
alebo dvojité - tým, že desatinnú čiarku tu.
Vzhľadom k tomu, čo sa teraz stane, je pri delení celé číslo od
float, alebo double, počítač to bude realizovať
oh, jedným z nich je presnejšie.
Dovoľte mi, aby som chybovať na strane dáva vám väčšiu presnosť ako
ste zamýšľali.
Tak to bude previesť výsledok -
vráti výsledok ako desatinné hodnoty, ako.
Tak to bude fungovať.
To bude fungovať.
A je tu ešte jedna mechanizmus, ktorý uvidíme v
väčší detail budúci týždeň.
Môžete si skutočne, ako programátor, povedzte počítač
skutočne liečiť jeden dátový typ ako
by to bolo iné.
>> Takže som mohol skutočne urobiť.
V zátvorke, môžem povedať niečo podobné (float), otvorený
parenie, úzkym párenie.
A to je to, čo sa nazýva "liatie". Opäť, viac
na tomto budúci týždeň.
Ale to je len programový spôsob rozprávania
počítač, jo ja viem, 9 je celé číslo alebo dlhé.
Ja viem, že to nie je hodnota s plávajúcou čiarkou.
Ale zoberte to ako taký rovnako.
Takže na obsadenie dátový typ znamená previesť
od jedného k druhému.
Úprimne povedané, je to len trochu škaredý, takže navrhujem, ideme
späť na pôvodný návrh len konverzie
aby sa tieto veci plávajúcou desatinnou čiarkou hodnoty ručne.
Pretože teraz je to proste super jasné, čo sa deje, a
to nie je všetko, že rušivo.
>> Takže poďme sa teraz vrátiť do svojho terminálovom okne.
Urobte F2C.
Nechaj ma ísť napred a spustiť tento.
A ako stranou, vás nudiť písania týchto príkazov
znovu a znovu, si uvedomiť, že počítače, ako je Linux tu,
majú tendenciu byť dosť chytrý.
A ak som narazila Up, môžeme ísť cez môj celej histórii
príkazy, hore a dole.
Takže v tomto prípade tu, môžem len ísť až spustite make F2C.
Ja sa kričal na, pretože som to urobil, že pred sekundou.
Je to už aktuálne.
Takže teraz môžem bežať f2c znovu.
Skúsme 32 Fahrenheit.
Teraz sa poďme skúsiť 212 Fahrenheit.
>> Uf.
Zdá sa, že sa do práce.
Teraz, je to dobre, ale je to trochu ľubovoľný že
Som ukazuje šesť čísel po desatinných miest.
Je to tak?
Ak ste osoba počasia v televízii, že ste trochu doofus
ak čítate teplotu na
tento stupeň presnosti.
Tak poďme zjednodušiť tým.
Takže poďme skutočne ísť sem, k môjmu printf.
A jo, ja chcem plávať.
Ale ja chcem, aby teraz určiť presnosť.
A ja budem trochu stručné.
Ja poviem, daj mi jeden bod po desatinné miesto.
Takže skôr než hovoriť% f, budem hovoriť% .1 f
A to len znamená, daj mi jednu pozíciu
za desatinnou čiarkou.
Dobrá.
Skúsme to znovu.
Dovoľte mi, aby som znovu spustiť po kompilácii.
A teraz píšem v 32, a ja sa vrátim
stručnejší hodnotu.
A môžem písať, teraz, 212, a získať späť viac stručné
hodnota rovnako.
A je tu ďalšie veci, ktoré môžete robiť s printf.
Môžete si skutočne určiť, ako široký je číslo by malo byť.
Ak chcete mať výplň na to, takže môžete zarovnať alebo
vľavo zarovnať všetky vaše čísla alebo
skúste centrá veci.
Takže uvedomila, že existujú malé triky, ktoré môžete urobiť tu.
Ale oni jednoducho sa redukuje na formáte kódov,
to, že máme tú.
>> Takže pokiaľ ide o tejto otázke priorít.
To je veľmi nudné tabuľky prejsť metodicky.
Ale uvedomte si, že autori C prišli s
Pravidlá, ktoré špecifikujú, ktoré prevádzkovatelia majú vyššiu
prednosť, viac záväzný výkon, než ostatní.
Takže vzhľadom na to, na základnej škole, sme sa všeobecne vedeli, že je to
násobenie a delenie, potom sčítanie a odčítanie,
potom niektoré ďalšie veci.
Vo svete programovania, je tu oveľa
dlhší zoznam vecí.
A to nie je niečo, čo stojí za zapamätanie teraz.
Dostanete aklimatizovať na to onedlho.
Ale rovnako ako v základnej škole, zátvorky všeobecne riešiť
otázky priority, tým, že super clear pre
počítač a ľudský podobný čo je určený.
Takže zvážte to len trochu ťahák tam.
Ale väčšina z týchto údajov nebudeme mať na nejakú dobu.
>> Dobrá.
Teraz, poďme vybudovať a odklon od týchto hlúpa
matematické príklady.
Stále používajú rovnaké základy, ale kto
vyjadrovania trochu viac ako Scratch.
Takže v Scratch, mali sme booleovské výrazy.
A v angličtine, Boolovský výraz, čo?
True alebo false.
Je to niečo, čo vyhodnotí na true alebo false.
1 alebo 0.
Zapnúť alebo vypnúť.
Či už chcete nazývať.
Teraz v Scratch, jednotlivé diely skladačky vyzeral takto.
A to je kombinácia, na dne, z troch
dieliky.
Jedna spojka -
niečo, čo má prázdne a prázdne.
A potom dva logické výrazy vnútri nej.
Takže môžete vnárať Booleovské výrazy získať viac
zložité booleovských výrazov.
Napríklad, ak je sobota, a to je pekné
počasie, potom ísť von.
Alebo tak niečo svojvoľné takého.
Takže sa môžete pripojiť logické výrazy prísť s
väčšia pravdivostná hodnota, ktorej odpoveď je založená
na tých menších.
>> Teraz, v C, našťastie, to je mapovanie
vlastne celkom jednoduché.
Zátvorky pomôcť tomu, aby sa situácia nevyjasní tu.
&& Je to, čo znamená "a". Tak to je, ako
budeme previesť tieto bloky od nuly do C.
A podmienky, sme videli v Scratch, na ľavej strane
strana tam, môžem vyskladať podobne v C. Ak je x menšie
ako y, potom to urobiť.
Alebo ak x je väčšie ako y, potom to.
Else logicky musí byť rovnaká, tak povedať,
, Že sú rovnaké.
Takže teraz môžeme začať budovať tieto veci.
>> Takže poďme urobiť príklad.
Dovoľte mi, aby som otvoriť súbor, ktorý je na ihrisku internetových stránkach tohto
Som napísal v predstihu.
To sa nazýva nonswitch.c.
A uvidíme, prečo za chvíľu.
Takže v tomto súbore - nonswitch.c--
najprv uvedomiť, že je tu celá partia
pripomienky na vrchole.
To je len vysvetlenie názvu súboru, čo to
robí, a tak ďalej.
A to zrejme ukazuje použitie Boolean A-ing -
konjunkcii dvoch výrazov.
>> Takže poďme sa pozrieť, ako tento program funguje.
Môžem zahrnúť svoje dva súbory, cs50.h a stdio.h.
Keby som posunúť dole, teraz, na programe, je to trochu dlhšie
ako sme napísal predtým, ale celkom čitateľné.
Tak som najprv vytlačiť pre užívateľa, na riadku 18,
"Daj mi číslo medzi 1 a 10." Tak
že je to tu.
Teraz som si na celé číslo.
Ale uvedomte si, že GetInt - veľmi jednoduchý.
Je to jednoducho dostane int.
Bude to, aby to dostať int a nie
reťazec alebo float.
Ale to nebude robiť akékoľvek hranice kontroly.
To nebude filtrovať čísla, aby sa medzi
určitý sortiment.
Takže musíme implementovať, že sami.
Takže rovnako ako v Scratch, kde by som mohol urobiť konjunkcii
dva výrazy, môžem to urobiť v C takto.
Ak je n vyššia ako alebo rovná 1, a n je menšie ako a
alebo rovný 3, budem veľmi ľubovoľne vyhlášky, ktorou sa
číslo byť malé množstvo.
Len kvôli vyhlásenie.
Else if n je medzi 4 a 6, print "Vybrali ste si médium
číslo. "Else, ak n je medzi 7 a 10, print" Vybrali ste si
veľké číslo. "Else tlače" Vy si vyberiete neplatný počet. "
Pretože logicky, že takto, ak máme
vyčerpania náš sortiment.
>> Takže uvedomiť to nie je úplne ako zapísať väčšie než alebo
rovná v matiku.
Je to tak?
Tie zvyčajne nakresliť to takto, s linkou pod ním.
Ale nie je tam žiadny taký kľúč na mojej klávesnice.
Takže symbol C pre vyjadrenie väčší alebo
rovná sa dva znaky, a symbol po dobu kratšiu ako
alebo rovná sa dva znaky, rovnako.
Dobrá.
Takže keď som spustiť tento program, budete pravdepodobne uhádnuť, čo to je
robiť.
Ak by som do toho a urobiť nonswitch, Enter.
A potom spustite nonswitch.
Dajte mi číslo medzi 1 a 10.
Chystám sa dať mu 11.
Vybral som neplatné číslo.
Skúsim číslo 3.
Vybral som si malý počet.
Takže pomerne priamočiara tam.
>> Čo keď chcem zmeniť správanie tohto programu a
niečo trochu iného miesto?
Nechaj ma ísť ďalej a povedať.
Dovoľte mi, aby som sa zbaviť toho všetkého.
A dovoľte mi povedať, či (n == 42).
A potom budem pokračovať a povedať tlač "Vybrali ste si
Správna odpoveď. "Else budeme pokračovať a povedať,
printf ("Vybrali ste si
zlá odpoveď ");. Dobre.
Len preto, že.
>> Teraz, o niekoľko bodov môžeme tu.
Raz som nemal zadajte symbol, ktorý by si myslel, je
najrozumnejším.
Keď chcem skontrolovať rovnosť, ukázalo sa, že nepoužívate
znamienko rovná sa.
Namiesto toho použiť rovná znamienko rovnosti.
A prečo by to malo byť, len intuitívne?
Jo.
PUBLIKUM: [Nepočuteľné]
DAVID J. Malan: Správne.
Znamienko rovná sa už používa pre priradenie.
Niekto sa naozaj si to premyslieť.
A tak teraz, keď ide o rovnosť testovanie, musíme
byť viac explicitný, a povedz rovná rovná.
Veľmi častou chybou je urobiť to.
A ak v úradných hodinách, alebo niekedy budúci týždeň, alebo v
Ďalšie dva týždne si niečo také a potom
bojovať s ním 10, 20 minút sa snaží prísť na to,
čo sakra chyba je, si uvedomiť, že ste jedným z tých,
ľudia, ktorí z tejto chyby.
Takže, Super ľahké.
Ale cieľom je teraz odraziť túto chybu.
To by mohlo hodnotiť, pretože to, čo je to vlastne hovorí?
Ak je n dostane 42.
Takže sloveso ľudia používajú, ústne, vyjadriť
Pojem práca je "dostane." Takže ak n dostane 42.
Takže to znamená, priradiť 42 až n
Teraz mám logický výraz v zátvorke,
vnútri tohto stavu, ktorého hodnota je 42.
Je to tak?
Pretože ak budete hodnotiť zvnútra von, celkom
Odpoveď, teraz je 42.
>> Takže ak som sa vás na otázku, "či (42)," to, čo je
že vlastne hovorí?
No, logické výrazy iba true alebo false.
1 alebo 0.
Zapnúť alebo vypnúť.
Takže sa zdá, že majú rohovú prípad tu, keď všetci
náhle, hovorím "ak (42)". To nie je logická hodnota.
Takže to, čo počítače robiť, keď je to v podstate zodpovedá
niečo, čo to nie je 0 je interpretovaná byť pravdivý.
1.
On.
Všetci sú funkčne ekvivalentný.
Iba hodnota 0, alebo kľúčové slovo false, as stretneme
nakoniec vidieť, je v skutočnosti falošný.
Takže ", ak (42)" skutočne pravda, pretože to je nenulové.
Takže presnejšie tu, Boolean hodnota naozaj nie je tak
Koľko true alebo false, ale pre tento
prípade, ak je 0 alebo nenulová.
Takže false false, alebo nie.
A to nám umožňuje zahrnúť všetky viac
možnosti v zátvorkách výrazu.
Takže musíme, niekedy tak starostlivo, hovoria, že toto -
if (n == 42).
Jednoducho preto, že musíme určiť test rovnosti,
nie je priradenie hodnoty.
>> Čo iného stojí za zmienku tu?
Tieto zložené zátvorky sú skutočne nie je nutné.
Robil som ich len preto, aby sa niť-vyberavý tu.
Ale keď máte podmienku, ktorá má iba jeden riadok
kód, ako pohodlie, programátori nemusia používať
zložené zátvorky.
Postačí len zarážky, z estetických dôvodov, a
Potom napíšte riadok kódu.
Iba vtedy, keď chcete napísať dva riadky kódu - pre
inštancie, inak printf ("Ahoj!"). Ak chcete urobiť
to, že je chybný.
Môžete zarážka všetko, čo chceš, ale skutočnosť, že máte
napísal dva riadky kódu bez použitia zloženej zátvorky
znamená, že tento program nebude fungovať správne alebo mohlo
Ani zostaviť správne.
Takže teraz, aby som bol úprimný, myslím, že najlepšie zvyk je len
používať zložené zátvorky, a zistíte, že oni robia
Super jasné, čo sa deje.
>> Tiež, ako stranou - najmä ak ste medzi tými, ktorí používajú
odporúčané knihy alebo zdroje on-line -
si uvedomiť, že tam je to pojem štýlu
programovanie.
A niektorí ľudia skutočne radšej dať zložená zátvorka
sem na riadku.
Niektorí ľudia radšej robiť smiešne veci,
Páči dať ich sem.
Nie je zlá odpoveď, ak ide o
štýl, ale to je v poriadku.
Ale niektorí ľudia to.
[Smiech]
DAVID J. Malan: Tak som spomenul teraz, jednoducho preto, že ako
môžete prečítať na veci v knihách alebo on-line, budete si
rôzne správy z rôznych učiteľov a
rôzni autori.
A len uvedomiť, že, funkčne, sú
všeobecne ekvivalent, ale byť konzistentné.
Takže v tomto prípade, budeme štandardizovať na kučeravý
traky zoraďovať tu naľavo.
>> Dobrá.
Tak poďme do toho hneď a spustiť to, a uvidíme, čo sa stane
s týmto programom.
Urobte nonswitch.
Potom spustite nonswitch.
Daj mi celé číslo medzi 0 a - takže to nie je relevantné
už, ale ja som jednoducho ísť na ľubovoľne povedať 42.
A ja som si vybral správnu odpoveď.
No, poďme si to vlastne v inom smere.
Ukazuje sa, že je to nejaký iný syntax sme
možno použiť v programe.
Tu je nový kus syntaxe, ktorý je funkčne rovnaký,
ale len predstavuje ďalší spôsob vyjadrovania.
Tak toto je to, čo sa nazýva "switch". A
switch funguje nasledovne.
To trvá, v zátvorke, hodnotu, ktorú chcete
"Switch" na.
Ak chcete chovať rôzne v závislosti na jeho hodnote.
Takže to znamená, spínač na hodnotu n
A čo to znamená?
No, ak n je 1 alebo 2 alebo 3, choďte do toho a vytlačiť "You
vybral veľké množstvo "a potom sa lámu.
Dôvodom pre prerušenie je, že spôsob C funguje je
Akonáhle nájde prípad, ktorý zodpovedá, začne vykonávanie
všetky kód pod ním.
Takže ak mám jeden riadok kódu, ako ja tu na linke 27, je
sa vykoná.
Ak môžem pridať ďalší riadok sem, dostane vykonaný.
Ďalšie linka tu, dostane vykonaný.
Program iba zastaví realizáciu toho, čo je pod
použiteľné case, kedy som sa explicitne
hovoria "zlomiť." Tak zle.
Práve v tomto prípade, rovnako ako výsledok.
Prípad 4 alebo 5 alebo 6, podobne, sa deje
vytlačiť správu.
V tomto prípade, stredné číslo.
Prestávka.
Prípad 7, 8, 9, 10, bude to vytlačiť "Vybrali ste veľký
číslo. "Break.
A potom je tu doslova kľúčové slovo názvom "default"
to skutočne ako "iný" konštrukcia.
Takže nová syntax, ale intelektuálne,
vôbec nič nové.
Je to rovnako ako Scratch.
If, else if, else, ak druh bloku.
>> Tak to je zapnutý verzia tohto programu.
Všimnime si ale, že sme to urobili s číslami tu.
Dovoľte mi, aby som otvoriť druhú verziu, len aby ukázal,
niečo trochu konkrétnejší.
Takže tu máme stupňov miesto.
Ukázalo sa, že môžete použiť prepínače nielen s číslami, ale na
znakov.
Nie vo všetkých dátových typov, ale aspoň na charakteroch.
Takže tu, mohli by sme urobiť niečo, ako keby hodnota C, ktorá
Užívateľ napísal v, v súlade 19, pomocou funkcie GetChar,
je kapitál alebo malé písmená, poďme interpretovať ako triedy,
a tvrdí, že si vybral vynikajúci stupeň.
A dole pozdĺž switch, máme iné
púzdra na "B" s a "C" s, a tak ďalej.
Ale poďme sa teraz završujú jednu vec.
A opäť, druh letí
niektoré z týchto príkladov.
Ale je to naozaj tak, že sme mohli aplikovať, teraz -
alebo naozaj, len preložiť je teraz -
na C.
>> Tak nechaj ma ísť ďalej a robiť to.
Idem otvoriť nový súbor.
A ja budem robiť include .
A potom budem robiť, int main (void).
Dovoľte mi, aby som tento súbor uložiť ako loop.c.
Len ako príklad.
A ja idem ďalej a vykonajte nasledujúce.
Chcem písať veľmi nudné programu.
Tak 10.
Poďme to.
9.
Dobrá.
Akonáhle začnete robiť to v programovaní, ty si
pravdepodobne robí niečo zlé.
Ale začneme tam rovnako.
Chybička sa vlúdila.
To je vlastne v poriadku.
7.
6.
5.
4.
Nič sa nestane, keď sa dostaneme do 0.
3.
2.
1.
Dobre.
0.
Odstrániť.
>> Dobrá.
Takže návrat 0.
Takže tento program je zrejme bude robiť to, čo veľmi
zdĺhavo hovorí, že to bude robiť.
Bude to pre tlač všetkých tých
hodnoty, od zhora nadol.
Dovoľte mi teda urobiť, aby slučku.
A potom - POZOR.
Urobte slučku.
Bol som v zlom adresári.
A teraz mi dovoľte bežať slučku.
Enter.
Hej.
Very nice.
Pekný, dlhý program.
>> Dobre, ale teraz sa na to lepšie.
Rovnako ako v roku Scratch, keď ste začal používať opakovanie
konštrukcie, namiesto toho len kopírovanie a vkladanie všetky
skladačky, dovoľte mi predstaviť túto vec.
Takže v C, existujú rôzne smyčkování konštrukty,
z ktorých jedna vyzerá nasledovne.
"Pre" loop má tri veci, oddelené dvoma bodkočiarkami.
A potom, vo vnútri tela slučky, takže hovoriť -
veci vnútri zložených zátvoriek -
môžeme niečo urobiť znovu a znovu.
Takže to, čo som tu na obrazovke, to je
doslova komentár.
/ / Tu znamená prichádza komentár.
To nie je kód.
To je len anglický popis, pre mňa, človeka.
>> Takže inicializácia, podmienky a aktualizácie.
No, uvidíme, ako to funguje.
To mi umožňuje prepísať tento program takto.
Pre -
takže tu je môj slučka -
int i -
tu je premenná s názvom "i" -
dostane inicializované na 10.
Takže tam je moja inicializácia.
Chcem urobiť slučku tak dlho, ako "i" je väčší alebo
rovné 0.
A pri každom opakovaní tohto cyklu, chcem
robiť aj -.
Takže sme videli + + v pondelok.
- Je opakom.
Že znižuje hodnotu 1.
Vnútri tejto slučky, chcem skutočne niečo urobiť.
Tak som chcel povedať niečo ako printf.
Nechcem hovoriť 10 teraz, pretože to je samozrejme len
bude tlačiť rovnakú hodnotu.
Čo chcem tlačiť miesto, pravdepodobne?
Jo.
Takže "i". Takže% d, i
>> Takže budem ukradnúť jeden z tých nápadov od predtým -
to náhrada za formát kódov -
a potom sem, v dolnej časti, vrátim 0, len
pre správnu mieru.
Ale teraz, mám viac stručný program.
Je to len pár riadkov, a nie asi 10 alebo 11 riadkov.
Nechajte ma ísť na môj dotaz tu.
Remake slučky.
Znovu slučku.
A zdá sa, že je rovnaký.
Teraz je program nie je zaujímavejšie.
Ale teraz môžem napísať niečo také.
Môžem zmeniť to 100.
Potom môžem prekompilovať môj program.
A potom som si znova spustiť môj program.
A teraz to ide super-rýchlo na dnešných počítačoch.
Ale tam som sa -
a skutočne, môj scrollback vyrovnávacej nie je
dokonca ísť tak ďaleko.
Tam ideme.
Tak tu to máme všade 100.
Ale je to ľahké urobiť chybu tu.
Čo sa bude očakávané správanie, keď
náhodne urobiť?
Tak to cítia ako nekonečné.
Tak uvidíme, či počítač chová.
>> Tak nechaj ma ísť napred a urobiť slučku.
A dovoľte mi spustiť slučku.
Tak poďme vrátiť k tomu za chvíľu.
Necháme to plynúť.
Vzhľadom k tomu, čo by sme mali počítať až, minimálne?
Pravdepodobne najmenej 2 miliardy, keď máme toľko bitov, a
sme s využitím pozitívnych hodnôt.
Takže poďme skočiť späť.
Okrem týchto druhov slučiek, máme to, čo sa nazýva, zatiaľ čo
slučky. Takže, rovnako ako v Scratch, ste mali Forever
bloky, a vy ste mali Opakovať bloky.
Podobne, v C, stačí mať iné spôsoby, ako
vyjadriť sa.
Takže budete mať tento pojem cyklu while, ktorý umožňuje
Vyjadrite sa trochu inak.
A potom máte niečo, čo sa nazýva do-while,
ktorý funguje trochu odlišne rovnako.
A budeme dráždiť tie od seba v priebehu času.
>> Ale poďme sa pozrieť na túto poslednú tu.
Ak pôjdeme do -
stále beží.
Je to celkom nekonečný.
Tak ma nechaj ísť do pozitívny, a ukázať, ako môžeme skutočne
upravujú vstup užívateľa trochu efektívnejšie.
Je to celkom krátky program.
A máme tu, v hlavnej, int n vyhlásenie.
Tak mi premennú s názvom n Teraz, som doslova povedal
"Robiť." A potom mám otvorenú kučeravé
rovnátka, úzkym zložená zátvorka.
A potom zistíte, hneď po to, že sa hovorí, zatiaľ čo n
je menší ako 1.
Takže si všimnúť, že tieto riadky -
19 - 24 -
skladať kolektívne a do-while.
A opäť, nová syntaxe, nie je nová myšlienka.
Je to len ďalší spôsob, ako slučky, syntakticky.
Takže čo to robí?
Do nasledujúcej kým n je menšia ako 1,.
Tak čo chcem robiť?
Žiadam, aby ste mi celé kladné číslo.
Potom som sa skutočne snaží získať celé číslo od užívateľa.
Ale pokiaľ ide o poradie operácií tu, pretože
kým podmienka je tu, ja potom ísť skontrolovať, je n
menej ako 1?
Takže predpokladám, že užívateľ -
po požadovanej týmto spôsobom -
Typy v hodnotovom 0.
Táto podmienka bude true alebo false?
No, je to vlastne bude pravda.
Vzhľadom k tomu, n je 0, a 0 je menšia ako 1.
Takže čo to znamená?
Urob to znova.
Len raz, že podmienka vyhodnotená ako false.
Ak som písať 42.
No nie, 42 je menší ako 1.
Preto je tento slučka sa vykonáva spustením.
A tak v tomto bode, bude program povedať, vďaka za
42, v tomto prípade.
Teraz, keď máte tento spôsob vyjadrenia seba samého -
Nemali by sme čakať na to až do konca.
Bude to nejaký čas trvať.
Ak sa chcete pokračovať nabudúce, snáď.
>> Ale teraz, máte možnosť na snáď rozumieť
trochu pouťového cirkusanti humor.
Ospravedlňujem sa.
To nie je reprezentatívna humoru v informatike
svet, ale je to roztomilý.
[Smeje sa] Poďme koniec tohto záznamu.
A uvidíme sa v pondelok.
[APPLAUSE]