[MUSIC PLAYBACK]
>> David J. Malan: Dobre, to je CS50.
A to je jeden týždeň.
Takže pripomenúť, že naposledy v týždni nula, sme sa zamerali na výpočtovú myslenie.
A my sme prešli od toho, aby Scratch, grafické programovanie
jazyka od našich priateľov v Media Lab MIT.
>> A s Scratch, sme preskúmať teda idey ako funkcia, a podmienky,
a slučky, a premenné, a to aj udalosti, a nite a ďalšie.
A dnes, budeme naďalej používať tie nápady,
a naozaj pričom je pre samozrejmosť, ale preložiť
do iného jazyka známeho ako C. Now, C je viac tradičné jazyk.
Je to nižšia úroveň Jazyk, ak chcete.
>> Je to čisto textová.
A tak na prvý pohľad, je to všetko bude vyzerať trochu záhadný
ak ste nikdy predtým naprogramovaný.
budeme mať bodkočiarkami a zátvorky,
a zložené zátvorky a ďalšie.
Ale uvedomiť, že aj aj keď je syntaxe
asi vyzerať trochu neznáma pre väčšinu z vás, vidieť minulosť.
A pokúsiť sa zistiť, nápady že sú skutočne oboznámený,
pretože tu v týždni jedno, čo začneme urobiť, je porovnať,
spočiatku, Scratch proti C.
>> Tak napríklad, pripomenúť, že keď realizovaný prvý z našich programov
Naposledy sme mali blok, ktorý vyzeral trochu niečo ako tohle-- keď
zelenou vlajkou klikli, a potom sme mali jeden alebo viac dielikov pod ním,
V tomto prípade, povedzme, hello world.
Takže, naozaj, vo Scratch, keď kliknem, že zelený príznak
spustiť svoj program, takže hovoriť, to sú
bloky, ktoré sa dostanú vykonané, alebo spustiť.
A konkrétne Scratch povedal, ahoj, svet.
>> Teraz som mohol špecifikované rôzne slová tu.
Ale uvidíme, že mnohé z týchto blocks-- a naozaj,
v jazyku C veľa functions-- môže byť parametrized alebo prispôsobené
robiť rôzne veci.
V skutočnosti, v C keby sme chcete previesť, teraz,
Tento Scratch programu do tohto jazyka,
budeme písať Trochu niečo také.
>> Je pravda, že tam je nejaká neznáma Syntax tam s najväčšou pravdepodobnosťou, int,
a zátvorky a neplatné.
Ale printf-- hoci by ste myslím, že to bude len tlač.
Ale tlač znamená tlač formátovaný, ako budeme čoskoro vidieť.
To doslovne bude tlačiť na obrazovku bez ohľadu
je vo vnútri týchto zátvorkách, ktoré Samozrejme v tomto prípade je, hello world.
>> Ale všimnite si, niektoré ďalšie syntax, niektoré úvodzovky,
že zátvorky na konci, bodkočiarka a podobne.
Takže tam to trochu nad hlavou, tak povediac, a to ako kognitívno
a syntakticky, že ideme musieť pamätať onedlho.
Ale uvedomiť, že s praxou, to začne skákať na vás.
>> V skutočnosti, poďme zamerať sa na tomto jednom Funkcia specifically-- v tomto prípade,
pozdraviť svet.
Takže povedať, je funkcia.
Dobrý deň, svet je jeho parameter, Argument alebo jej prispôsobenie.
>> A ekvivalencie v C je len Bude tento jeden riadok tu,
kde printf je ekvivalentná, povedzme, dvojitý reťazec v úvodzovkách, ahoj
svet je ekvivalentné, samozrejme, s tým, čo je v bielom poli tam.
A spätné lomítko n, aj keď trochu podivné a neprítomný od nuly,
proste bude mať za následok Budeme pozri v počítači, ako môj Mac alebo PC,
púheho Pohybom kurzor na ďalší riadok.
Je to ako biť Enter na klávesnici.
>> Takže uvidíme, že zase onedlho.
Ale prvé, poďme sa na to pozrieť Ďalším príkladom v prípade slučiek.
Mali sme navždy slučka minule, čo bola séria skladačky
že urobil niečo doslovne forever-- v tomto prípade,
hovoria, Hello World, hello world, hello world, hello world.
Takže je to nekonečné slučke zámerné.
>> V jazyku C, ak chceme implementovať toto Rovnaká myšlienka, mohli by sme jednoducho to urobiť.
Aj keď pravda, world-- printf ahoj teraz zatiaľ čo len sémanticky, druh
vykúzli predstavu o tom opäť niečo, a znovu a znovu,
a na ako dlho?
No, true-- pripomeňme, že pravda, je len na jedno alebo.
>> A pravda je, samozrejme, vždy pravdivé.
Takže je to akýsi bezvýznamný Vyhlásenie len povedať pravdu.
Ale v skutočnosti, to je zámerné, pretože ak je to pravda, je jednoducho vždy pravdivý,
než je síce pravda len naznačuje, keď trochu nepriamo
že nasledujúce riadky kódu medzi týmito zloženými zátvorkami
mal jednoducho spustiť znova a znova, a znova a vlastne nikdy nezastaví.
>> Ak ale chcete, aby vaše slučka zastaviť, ako my
minule sa niečo podobné toto opakujte nasledujúce 50-krát,
v jazyku C môžeme urobiť to isté s tým, čo je volal pre loop-- kľúčové slovo
nie je pritom, ale pre.
A potom tu máme nejakú novú syntax tu, s int i = 0, aj menej ako 50,
i ++.
A vrátime sa k tomu.
Ale to je jednoducho, ako by sme preložiť sadu Stieracie blokov
k súboru C riadkov kódu.
>> Medzitým, za premenné.
A v skutočnosti, práve sme videl jeden pred chvíľou.
A v prípade Scratch, keby sme chcel deklarovať premennú som zavolal
pre i je celé číslo, len číslo, a chceme nastaviť na ľubovoľnú hodnotu,
by sme použili oranžová blokovať here-- nastaviť aj na 0.
>> A uvidíme dnes a mimo nej, rovnako ako minulý týždeň,
programátori robiť takmer vždy začína počítať od nuly, ale naozaj
konvencií.
Ale aj preto, že stiahnutie z naša diskusia o binárne,
Najmenšie číslo Môžete predstavujú s ľubovoľným počtom bitov
Je len bude 0 sám.
A tak budeme zvyčajne zahajujú inicializácia aj naše premenné na hodnotu 0.
>> A v jazyku C, aby urobili to isté, budeme hovoriť, int
pre celé číslo, ja len konvencií.
Mohol som volal táto premenná čokoľvek chcem, rovnako ako v Scratch.
A potom sa rovná 0 práve nadobúdatelia hodnota 0 z pravej
a vloží ho do premennej, alebo skladovacie kontajner tam, na ľavej strane.
A bodkočiarka, ako budeme see-- a sme videli niektoré z týchto already--
jednoducho znamená koniec myslenia.
Pristúpiť k robiť niečo iné na tratiach, ktoré nasledujú.
>> A teraz, čo boolovských výrazoch?
Pripomeňme, že v Scratch, títo boli výrazy
že sú buď pravdivé alebo false-- otázky,
v skutočnosti, že sú buď pravdivé alebo nepravdivé.
Takže v prípade Scratch, mohli by sme položiť jednoduchú otázku, ako je táto,
je aj nižšia ako 50 ° C?
Tak som sa, opäť je celé číslo.
Možno by sme ju používate v programe Scratch
sledovať skóre alebo nieco podobne.
Takže táto syntaxe tu v Scratch jednoducho znamená, je aj nižšia ako 50 ° C?
No, našťastie, je niečo Jednoduchý v C. A prekladať,
Tento by sme jednoducho povedať, že menej ako 50 ° C, pomocou známeho kľúča
na klávesnici.
>> Zatiaľ, ak ste chceli hovoria všeobecnejší niečo,
ako, no, je x menšie ako y, kde každý x a y sú samy o sebe premenné?
Môžeme urobiť to isté v C, tak dlho, ako sme
vytvoril tieto premenné už.
A uvidíme, ako sa tomu, že onedlho.
Radi by sme jednoducho povedať x menšie ako y.
>> Takže vy začínate pozri určité podobnosti.
A tých ľudí, ktorí urobili Scratch boli iste
inšpirovaný niektoré z týchto základných myšlienok.
A uvidíte tento druh syntax v mnohých languages--
nie len nuly, nie Len C, ale Python,
a JavaScript, a Iné jazyky pokoja.
>> Pozrime sa na ďalší konštrukt z C, potuchy o stave,
robiť niečo podmienečne.
Ak je niečo je pravda, to urobiť.
Ak je pravda, niečo iné, urob to.
Je to niečo programovanie ekvivalent k rázcestí.
Možno je to obojsmerný vidlica, trojcestný vidlica, alebo viac.
A v Scratch, mohli by sme mať vidieť niečo také.
>> Takže toto je jeden veľký.
Ale vziať do úvahy relatívnu jednoduchosť logiky.
Ak je x menšie ako y, potom hovoria x menej než y, inak, ak x je väčšia ako y,
potom hovoria, X viac než y.
A potom, logicky, ak si myslíte, že späť do nuly
alebo len svoju vlastnú ľudskú intuíciu, dobre, ak x nie je väčšie ako y, a x
nie je menšia ako y, potom sa samozrejme x bude rovná y.
Takže v tomto prípade by hniezdenia Stieracie tieto bloky,
môžeme dosiahnuť tri cesta rázcestia?
>> Medzitým, ak chceme to urobiť v C, ale pravdepodobne
Vyzerá trochu simpler-- prinajmenšom akonáhle sa zoznámi so syntaxou.
Ak x je menšia ako y, printf x je menšia než y.
Else if X viac než y, printf X viac než y.
Iný printf x je rovné y- a, opäť s tými, lomítko končí len
u tých nových tratí, takže ak máte vlastne bežal tento druh programu
to by len presunúť kurzor nakoniec
na ďalší riadok obrazovky.
>> Teraz sa medzitým Scratch mal iný sofistikovanejšie funkcie, iba
z ktorých niektoré budeme najprv prejsť do sveta C.
A jeden z nich bol volal zoznam v Scratch.
A to bol zvláštny typ premennej
Povolené ukladať viac vecí v nej späť k sebe, dozadu, dozadu.
>> V C, nemá zoznamy, samy o sebe, ale niečo
ktoré sú všeobecne s názvom poľa, aj keď budeme
vrátiť neskôr tento semester sa pozerá na niečo
volal zoznamu, alebo naozaj spájať zoznam.
Ale teraz, najbližší ekvivalent v C počas nás
sa bude niečo zvané polia.
A pole je jednoducho špeciálny typ premennej
ktorý vám umožní ukladať dáta späť k sebe, k sebe, k sebe.
>> A skutočne, v Scratch, ak chceme pristupovať
prvý prvok poľa alebo list-- a budem to hovoriť,
Podľa konvencie argv, argumentácia vektora, ale o tom onedlho.
Ak chcem sa dostať na prvý prvok z argv, vo svete Scratch
vlastne robíte zvyčajne začína počítať od 1.
>> A tak by som mohol dostať položky 1 argv.
To je len, ako implementovaná MIT pojem zoznamov.
Ale v C, idem Viac proste len povedať, argv,
čo je opäť meno môjho list-- alebo aby bolo jasné, pole.
A keď chcem prvý prvky, idem
používať hranaté zátvorky, ktorý vás nemusí často používané pod klávesnicou.
>> Ale jednoducho znamená 0, dajte mi ten prvý.
Tak príležitostne a ako plynie čas, ideme
začať vidieť všetky tieto dichotómia medzi Scratch a C,
pričom Scratch používa.
Sme v jazyku C použiť 0 tu.
Ale budete rýchlo zistiť, akonáhle pochopíte
základy každého jazyka, aby tieto veci začnú dostať o to viac
zoznámi prostredníctvom prax a prax.
>> Takže poďme sa vlastne vyzerajú teraz na programe.
Tu je prvá našej C zdrojový kód pre kompletné programy.
A program ideme ponúkať za odplatu
je ten, ktorý je rovnocenný na tomto skoršom Scratch kus.
>> Takže tu máme to, čo je pravdepodobne najjednoduchšie programu C
môžete písať, že v skutočnosti robí niečo.
Teraz sa pozrieme okolo, Pre túto chvíľu má zahŕňať
Štandardné IO.H, a tieto uhol držiaky a int, a neplatná,
a zložené zátvorky, a podobne.
>> A poďme sústrediť len na čo, aspoň intuitívne,
mohol vyskočiť na vás už.
V skutočnosti je hlavné, nemám nutne vedieť, čo to je,
ale podobne ako Scratch mal, že keď zelenou vlajkou kliknutí kúsok skladačky,
tak robí C ako programovací jazyk majú hlavné kus kódu, ktorý
dostane popravený v predvolenom nastavení. A naozaj, to doslova bude nazývaný hlavné.
>> Takže hlavné je funkcia.
A je to špeciálne funkcie, ktorá existuje v jazyku C, ktorý pri spustení programu,
to je hlavné, ktorý sa prevádzkujú default. Vo svete Scratch,
to bolo obvykle, keď zelená vlajka klikol, ktorá dostala spustí automaticky.
>> Medzitým sme videli skôr, printf alebo vytlačiť formátovaný, to je
Bude to funkcia, ktorá prichádza s C, spolu s celou partiou druhých,
že vôľa čas od času a znovu, aby sa robiť presne
ako už názov napovedá, niečo vytlačiť.
Čo chcete vytlačiť?
No, uvidíme, že uzavretím charaktery
ako these-- hello world, lomítko n v úvodzovkách,
môžeme povedať presne printf Čo k tlači na obrazovke.
>> Aby však bolo možné urobiť že sme sa bohužiaľ
je potrebné vziať niečo, čo je Už kryptické na nás ľudí,
ale aspoň je to trochu readable-- ostré zahŕňajú štandardný IO.H, int,
Hlavným, void, printf všetky magické zaklínanie sme práve videli na obrazovke.
Ale v skutočnosti máme na ísť ešte tajomné.
najprv musíme preložiť kód že píšeme do strojového kódu.
A odvolávať z minulého týždňa, že stroje, aspoň tie vieme tu,
Na konci dňa len porozumieť núl a jednotiek.
>> A môj Bože, keby sme museli písať tieto nuly a jednotky vlastne programu,
bolo by veľmi, veľmi rýchlo vziať srandu zo všetkého.
Ale ukazuje sa, za minulého týždňa, že tieto vzory núl a jednotiek
Len majú osobitný význam.
Za určitých okolností, by mohlo znamenať čísla.
>> V niektorých kontextoch, môžu znamenať listy, alebo farby, alebo ľubovoľný počet
ďalších abstrakciou tam na.
Ale rovnako ako má počítač CPU, Central Processing Unit,
alebo mozgy vnútri počítača.
Je to zvyčajne Intel vnútri, pretože to je
jedna z najväčších firiem ktorá robí procesorov pre počítače.
>> No, Intel procesory a ďalšie proste sa rozhodli v predstihu
že určité vzory núl a Tí sa rozumie konkrétne veci.
Niektoré vzory núl a jednotiek bude znamenať, tlačiť na obrazovku,
alebo pridanie týchto dvoch čísel, alebo odpočítať týchto dvoch čísel,
alebo presunúť tento kus dát z Pamäť môj počítač je tu,
alebo ľubovoľný počet iných veľmi nízkej úrovni, ale nakoniec užitočné, operácia.
Ale, našťastie, my ľudia nebudú musieť spoznať túto úroveň detailov.
V skutočnosti, rovnako ako minule, kde sme abstrahovať znova a znova a znova,
Budova z veľmi nízkej úrovni primitíva ako núl a jednotiek
na vyššej úrovni pojmy ako čísla a písmená,
a farby a ďalšie, takže môžeme ako programátori
stojí na ramenách iní, ktorí prišli pred nami
a použiteľný softvér, ktorý ostatných ľudia písali pred us--
menovite programy zvané kompilátory.
>> C je jazyk, ktorý je obvykle zostavené,
čo znamená, prepočítaná zdrojový kód do strojového kódu.
Najmä, čo to znamená je, že ak máte zdroj
kód, ktorý si sami písať, ako sme skoro bude za chvíľu na obrazovke,
a chcete previesť v konečnom dôsledku k stroju code--
tie nuly a tie, ktoré Iba váš Mac alebo PC
understands-- máte prvý krmivo, ktoré zdrojový kód sa ako
vstup pre špeciálne program s názvom kompilátor,
ktorého výstup sme Uvidíme je strojový kód.
A skutočne, minule sme sa rozprávali o, naozaj, na konci dňa,
riešenie problémov.
Musíš vstupy.
A máte výstupy.
A máte nejakú algoritmu v stredu.
>> Algoritmy môže určite byť realizované v softvéri,
ako sme videli s pseudokódu minulého týždňa a ako uvidíme sa skutočným kódom
tento týždeň.
A tak kompilátor naozaj len má sadu algoritmov vnútri
o tom, že vedia, ako previesť špeciálne kľúčové slová,
ako hlavný a printf, a iní, že sme práve
videl do vzorov núl a tie, ktoré Intel vnútri a ostatné CPU
v skutočnosti chápe.
Tak ako to urobíme?
Kde získame kompilátor?
>> Väčšina z nás tu máte Mac alebo PC.
A vy systémom Mac OS, alebo Windows alebo Linux, alebo Solaris,
alebo ľubovoľný počet iných operačné systémy.
A vskutku, mohli by sme ísť von na web
a stiahnuť prekladač pre váš Mac alebo PC
pre príslušný operačný systém.
Ale všetci by sme byť na Rôzne strany, tak povediac.
Mali by sme mať mierne rôzne konfigurácie.
A veci nebude fungovať všetky rovnaké.
A vskutku, v týchto dňoch mnohí z nás nepoužívajú
softvér, ktorý beží iba na našich notebookov.
Namiesto toho použiť niečo ako prehliadač, ktorý
nám umožňuje prístup k web-based aplikácie v cloude.
A neskôr tento semester, urobíme presne to.
Budeme písať aplikácie, alebo softvér pomocou code-- nie C,
ale iné jazyky ako Python a JavaScript--, ktoré pracujú v cloude.
>> A k tomu, že my sami V priebehu semestra
bude skutočne používať na báze cloud- Prostredie známy ako CS50 IDE.
To je programovací webová životné prostredie, alebo integrovaný rozvoj
Prostredie IDE, ktorý je postavený na vrchole niektorej open source softvér s názvom Cloud 9.
A my sme urobili niektoré pedagogický zjednodušenie do nej
tak, aby sa skryť určité funkcie v v prvých týždňoch, ktoré nepotrebujeme,
po ktorom môžete odhaľujú ich a robiť väčšinu
čo chcete so životným prostredím.
>> A nám umožňuje tiež, aby vopred nainštalovať určitý softvér.
Veci ako tzv CS50 knižnica, ktorá budeme čoskoro vidieť
nám poskytuje v jazyku C s niektorými ďalšie funkcie.
Takže ak idete nakoniec CS50.io, výzva na prihlásenie,
a akonáhle to urobíte a vytvárať účet zadarmo,
budete môcť pristupovať k Prostredie, ktoré vyzerá celkom takhle.
>> Teraz, to je v predvolenom režime.
Všetko je pekné a svetlý na obrazovke.
Mnohí z nás majú vo zvyku pracuje na CS50 kus, ktorý je
pomerne neskoro do noci.
A tak niektorí z vás možno radšej premeniť ju na nočný režim, tak povediac.
>> Ale nakoniec, čo ste uvidí v rámci CS50 IDE
Je tri odlišné areas-- oblasť na ležať tam, kde
súbory sa bude v mrak, čo je oblasť v pravom hornom rohu
kde váš kód bude upravovať.
Budete mať možnosť otvoriť Jednotlivé karty pre akýkoľvek program
že budete písať tento semester vnútri uvedeného pravom hornom rohu.
A potom s najväčšou arcanely, a napriek tomu mocne,
bude táto vec u Dno známy ako okno terminálu.
>> To je stará škola Command Line Interface,
alebo CLI, ktorý umožňuje môžete spúšťať príkazy
Na computer-- v tomto prípade, Počítač v cloud--
robiť veci, ako je kompilácia kódu zo zdrojového kódu do strojového kódu,
spúšťať programy, alebo začnite webový server, alebo o prístup k databáze,
a akýkoľvek počet ďalších techník že začneme používať onedlho.
Ale aby sa tam dostať, sme bude skutočne mať
prejsť do režimu online a začať hrať.
A k tomu, že, poďme najprv začať šťourat sa hlavné,
a písať hlavná časť programu.
A poďme použiť túto funkciu printf, ktorý sme použili skôr,
proste niečo povedať.
>> Tak som tu už vnútri CS50 IDE.
Ja som vopred prihlásený.
A ja na plný detekčné okno.
A tak nakoniec budete tiež v najbližších problémov
budú nasledovať podobné kroky, ktoré bude poskytovať dokumentáciu online.
Takže nemusíte sa obávať absorbovať každý malý technický krok
že ja tu dnes.
>> Ale budete mať obrazovku podobnú nasledujúcej.
A stalo, že sa v nočnom režime.
A môžete oživiť všetko up vypnutím nočný režim.
A na konci deň, budete vidieť
Tieto tri hlavné areas-- súboru Prehliadač vľavo, kódové jazýčky hore vrchole,
a okno terminálu v dolnej časti.
>> Nechaj ma ísť dopredu a napísať svoj prvý program.
Chystám sa preventívne ísť do súboru, Ukladať a uložiť svoj súbor ako hello.c.
V skutočnosti, podľa konvencie, akýkoľvek program, ktorý sme píšu, že je napísaný v jazyku C.
by mali byť pomenované niečo bodka c, konvencií.
Takže budem menovať to hello.c, pretože Len chcem pozdraviť svet.
Teraz idem pre zväčšenie out a na tlačidlo Uložiť.
A to všetko teraz mám tu je karta v ktorom môžem začať písať kód.
>> To nebude kompilovať.
To znamená, že nič.
A tak aj keď som prevedené to núl a jednotiek,
CPU bude mať žiadny Myšlienka, čo sa deje okolo.
Ale či píšem riadky, ktoré zodpovedajú up s C je conventions-- C bytosti,
Znovu, toto language-- sa syntaxou ako to, printf Dobrý deň world-- I a som
dostali pohodlne Pritom v priebehu času.
Takže si nemyslím, že som urobil prípadné typografické chyby.
>> Ale vždy, úplne prvá Doba tak urobíte, budete.
A čo sa chystám urobiť, by mohli veľmi rovnako nebude pracovať pre vás prvýkrát.
A to je úplne v poriadku, pretože práve teraz
Možno len vidieť veľa novosti, ale v priebehu doby, akonáhle sa zoznámi
s týmto prostredím, a Tento jazyk, a iní,
začnete vidieť veci, ktoré sú buď správne alebo nesprávne.
>> A to je to, čo učebné kolegami a samozrejme
asistenti dostať tak dobrí v priebehu času, je špinenie chyby alebo chyby v kóde.
Ale tvrdím, že existuje V tejto kóde nie sú žiadne chyby.
Tak som teraz chcete spustiť tento program.
>> Teraz na svoje vlastné Mac alebo PC, som v zvyk dvojitých ikon kliknutím
keď chcem spustiť nejaký program.
Ale to nie je model tu.
V tomto prostredí, ktoré je CS50 IDE.
Sme s použitím prevádzkovej Systém s názvom Linux.
Linux je pripomínajúce ďalší operačný systém, všeobecne známy
ako Unix.
A Linux je zvlášť známy pre majúce prostredie príkazového riadka, CLI.
Teraz sme pomocou špecifického Chuť Linux s názvom Ubuntu.
A Ubuntu je jednoducho istá verzia Linuxu.
>> Ale tieto Linuxu v týchto dňoch robiť vlastne prísť s grafickým užívateľským rozhraním.
A tá, ktorú sme náhodou Tu bude používať je web-based.
Tak to môže vyzerať aj trochu odlišný od niečoho
vy sám môže mať videli alebo spustiť v minulosti.
>> Takže budem pokračovať Teraz a vykonajte nasledujúce.
Ja som zachránil tento súbor ako hello.c.
Chystám sa ísť dopredu a Typ clanghello.c Tak Clang
pre jazyk C je kompilátor.
Je to pre-nainštalované v CS50 IDE.
A môžete si stiahnuť a absolútne nainštalovať tento na vlastnom počítači Mac alebo PC.
>> Ale opäť, nebudete mať všetky pre-konfigurácia pre teba urobil.
Takže teraz som len chystá spustiť clanghello.c.
A teraz si všimnúť túto syntax Tu bude nakoniec
uvedomiť, znamená, že som v priečinok alebo adresár s názvom Pracovný priestor.
Tento znak dolára je jednoducho konvencie po zmysle, zadajte svoje príkazy tu.
>> To, čo sa nazýva prompt, stačí konvencií je znak dolára.
A keď pôjdem napred a hneď na tlačidlo Vstúpiť, nič Zdá sa, že sa stalo.
Ale to je vlastne dobrá vec.
Čím menej sa to stane na obrazovky, tým väčšia je pravdepodobnosť
váš kód je správny, aspoň syntakticky.
>> Takže keď chcem spustiť tento Program, čo mám robiť?
No, to ukáže, že Predvolený názov konvencií
pre programy, ak nezadáte menovať váš program je len a.out.
A táto syntaxe príliš, budete zoznámiť sa s onedlho.
>> Dot lomítko jednoducho znamená, hej, CS50 IDE, spustiť program s názvom a.out
to je v mojom aktuálnom adresári.
Že bodka znamená aktuálny adresár.
A uvidíme, aké ďalšie také sekvencie postáv znamená, že onedlho.
>> Tak ideme na to, Enter, hello world.
A všimnite si, že to, čo sa stalo?
Nielenže tlačiť hello world.
To tiež premiestnená kurzor na ďalší riadok.
>> A prečo to bolo?
Aký bol kód, ktorý sme písali skôr že zabezpečila, že sa kurzor by
pokračovať na ďalšom riadku?
Legrační vec, o Počítač je to len bude
robiť doslova, čo si to povedať robiť.
>> Takže ak ste to povedať, aby printf Dobrý deň, čiarka, medzera, svet, v blízkosti citácie,
to doslova len bude vytlačiť tieto znaky.
Ale musel som tento špeciálny znak Na konci odvolania, spätné lomítko n.
A to je to, čo zaistená že postava šla
na ďalší riadok obrazovky.
>> V skutočnosti, nechaj ma ísť, a to urobiť.
Nechaj ma ísť dopredu a zmazať.
Teraz si všimnite, že Horná časť mojej obrazovke je tu
trochu červené svetlo karta naznačuje,
hej, ste neuložili súboru.
Takže budem pokračovať s kontrolou S alebo príkaz S uložte súbor.
Teraz to goes-- šiel na moment-- zelenú.
A teraz je to späť do len byť blízky ikona.
>> Ak mám teraz spustiť clanghello.c znovu, Enter, bodka lomítko, a.out, enter,
uvidíte, že to ešte funguje.
Ale je to pravdepodobne trochu buggy.
Práve teraz, moja prompt-- pracovný priestor, a potom ten znak dolára,
a potom môj skutočný prompt-- všetko je na rovnakom riadku.
Tak to určite estetický chyba, aj keď to nie je naozaj logická chyba.
>> Takže idem napraviť to, čo som práve urobil.
Idem znova spustiť a.out.
Všimnite si, som pridal znak nového riadku späť.
Som uloženie súboru.
>> Takže idem znova spustiť a.out, a-- sakra, chyba, chyba znamenať chybu.
Takže chyba je, že hoci Pridal som spätné lomítko n tam,
re-uloží, znova bežal program, správanie bol rovnaký.
Prečo by to malo byť?
>> Mi chýba krok, že jo?
Že kľúčový krok skôr bolo, že máte to-- keď zmeníte zdrojový kód,
to dopadá tiež spustiť to cez prekladač
Znovu tak dostanete nový strojový kód.
A strojový kód, nuly a tie,
sa bude takmer identické, ale nie je dokonale tak, pretože potrebujeme,
Samozrejme, že nový riadok.
>> Takže tento problém odstrániť, budem potrebovať znovu spustiť clanghello.c, vstupovať, bodka
lomítko, a.out.
A teraz, hello world je späť tam, kde som, že to bude.
Tak to je všetko v poriadku a dobré.
Ale a.out je celkom hlúpe meno pre Program, aj keď to sa stane byť,
z historických dôvodov default-- čo znamená, montážne výstupy.
>> Ale dovoľte mi pokračovať tu a to inak.
Chcem hello world skutočne nazvať Dobrý deň.
Takže ak to bolo ikonu na mojom desktop, to by nemalo byť a.out.
To by bol nazývaný Dobrý deň.
>> Tak, ako to urobiť, to dopadá že Clang, rovnako ako mnoho programov,
podporuje argumenty príkazového riadku, alebo vlajky, alebo prepínače,
ktorý jednoducho ovplyvniť jeho správanie.
Konkrétne Clang podporuje pomlčka O príznak, ktorý potom trvá druhé slovo.
V tomto prípade budem svojvoľne, ale rozumne, hovorte tomu ahoj.
Ale ja ju mohli nazvať niečo Chcem, s výnimkou a.out, ktorý
by bolo skôr vedľa bodu.
>> A potom stačí zadať meno spisu ja chcem zostaviť.
Tak sa aj keď na začiatku príkazu mám ešte Clang,
na konci príkazu Stále mám názov súboru,
Teraz mám tieto príkazový riadok argumenty, tieto príznaky, ktoré hovoria,
oh, mimochodom, výstup-o, súbor s názvom Dobrý deň, nie je predvolený a.out.
>> Takže keď som stlačte klávesu Enter teraz, nič Zdá sa, že sa stalo.
A predsa, teraz môžem robiť dot lomítko Dobrý deň.
Takže je to rovnaký program.
Nuly a tie sú identický na konci dňa.
>> Ale sú v dvoch odlišný files-- a.out,
čo je prvá verzia a len naivne menovaný,
a teraz Dobrý deň, čo je oveľa presvedčivejšie názov programu.
Ale úprimne, ja som nikdy bude to zase pamätať,
a znova a znova.
A skutočne, ako píšeme zložitejších programov,
povely nablízku budem musieť písať
sa dostane aj viac komplikuje stále.
>> A tak, aby sa nebála.
Ukazuje sa, že ľudia skôr aby sme si uvedomili, že príliš
mal tento presne rovnaký problém.
Oni príliš neužil museli typ pomerne dlhé, tajomných príkazov,
nieto ešte pamätať si ich.
A tak ľudia pred nami robili ďalšie programy, ktoré uľahčujú
zostaviť svoj softvér.
>> A skutočne, jedným z takých program sa nazýva Výrobok.
Takže ja idem dopredu a to urobiť.
Chystám sa vrátiť všetko, čo som práve urobil nasledujúcim spôsobom.
Nechaj ma typ LS.
A všimnite si tri things-- a.out, a hviezda, ahoj
a hviezda a hello.c.
Dúfajme, malo by to byť trochu intuitívne,
ak už predtým došlo Nič v tomto priestore.
Nebolo nič, čo by som mal vytvoriť, kým sme začali triedu.
>> A som vytvoril hello.c.
Potom som ho zostavil, a nazval ho a.out.
A potom som zostavil ho opäť mierne odlišne a nazval ho pozdraviť.
Takže mám tri súbory v tomto adresári, V tejto zložke s názvom Pracovný priestor.
Teraz vidím, že rovnako keď som oddialiť skutočnosti.
>> Keby som oddialiť tu a pozrite na tú hornej pravej ruky
roh, ako bolo sľúbené ľavá na pravej strane obrazovky
je vždy ukážem čo je vo vašom účte, čo je
Vnútro CS50 IDE.
A tam sú tri súbory tam.
>> Takže chcem sa zbaviť a.out a ahoj.
A ako by ste mohli si predstaviť, intuitívne, vás
mohol radiť kontrolného kliknutie alebo kliknite pravým tlačidlom myši na túto tému.
A táto malá ponuka objaví.
Tu si môžete stiahnuť súbor, spustite to, prezrieť, obnovovaciu, premenovanie,
alebo čo nie.
>> A mohol by som len odstrániť, a to by ísť preč.
Ale poďme robiť veci s príkazom linka pre túto chvíľu, tak, aby si pohodlne
s tým, a to nasledujúcim spôsobom.
Chystám sa ísť dopredu a vyberte a.out zadaním doslova rma.out.
Ukázalo sa, že príkaz na odstránenie alebo odstránenie niečoho,
nie je odstrániť alebo odstrániť.
>> Je to stručnejšie RM, stačí uložiť vám niektoré stlačenia klávesov, a stlačte Enter.
Teraz budeme mať trochu záhadne odstrániť bežný súbor a.out.
Ja naozaj neviem, čo je to nepravidelný súbor by bolo doteraz.
Ale ja chcem, aby ho odstrániť.
>> Takže idem Napíšte A pre Áno.
Alebo by som mohol písať to, a stlačte Enter.
A opäť sa zdanlivo nič nedeje.
Ale to je všeobecne dobrá vec.
>> Keby som typ LS tentoraz, čo by som mal vidieť?
Dúfajme, že len ahoj a hello.c.
Teraz, ako stranou, budete Všimnite si túto hviezdu, hviezdička,
to je na konci svojich programov.
A oni tiež objavil v zelenej farbe.
To je len CS50 IDE cesta z cluing vás do skutočnosti,
že to nie je zdrojový kód.
To je spustiteľný, je spustiteľný program, ktorý si môžete skutočne spustiť
tým, že robí dot lomítko, a potom je to názov.
>> A teraz, nechaj ma ísť dopredu a vyberte to, rm ahoj, Enter, odstrániť pravidelná
súbor Dobrý deň, áno.
A teraz keď som typ LS, sme späť hello.c.
Snažte sa odstrániť vaše Skutočná zdrojový kód.
Aj keď existuje funkcie zabudované do CS50 IDE kde
môžete prejsť históriu revízií a vzad v čase Ak omylom
zmazať niečo robiť budú mať na zreteli podľa týchto výziev áno alebo nie,
o tom, čo vlastne chcete robiť.
A keď som ísť až na vrchol ľavom rohu tu,
všetko, čo zostáva, je hello.c.
Takže tam zväzky ďalšie príkazy, ktoré ste
môže vykonávať vo svete Linuxu z ktorých jedna je, opäť, I.
A budeme si vyrobiť môj program teraz nasledovne.
>> Namiesto toho, aby robil rinčanie, namiesto toho, aby Clang-o,
idem proste Doslova typ, aby ahoj.
A teraz si všimnúť, som nepíšete, aby hello.c.
Som písanie robiť ahoj.
>> A tento program, aby to prichádza s CS50 IDE a ďalšie
všeobecne s Linuxom, je program, ktorý je
chystá urobiť program s názvom Dobrý deň.
A to bude predpokladať, podľa konvencie, že ak tento program môžu byť vykonané,
to bude byť vyrobené zo zdroja Kód súbor končiace v bodovom c, hello.c.
>> Takže keď som stlačte Enter Teraz si všimnite, že Príkaz, ktorý sa vykonaný
je v skutočnosti ešte dlhšie Pred ako predtým.
A to preto, že sme predkonfigurované CS50 IDE mať
Niektoré ďalšie funkcie postavené v tom, že nepotrebujeme ešte nie, ale čoskoro bude.
Ale kľúčové si uvedomiť Teraz mám program Dobrý deň.
>> Keby som typ LS znovu, ja majú ahoj program.
A môžem bežať ju Bodka a.out lomítko, nie,
pretože celý zmysel tejto Cvičenie bolo bodka lomítko Dobrý deň.
A teraz mám hello world.
Takže vpred, Sme takmer vždy len
bude kompilovať naše programy príkazom Vytvoriť.
A potom budeme je prevádzkovaný dot lomítko a názov programu.
Ale uvedomiť si, čo urobiť, je robí pre vy, je to, že nie je kompilátor.
Je to len výhoda programu že vie, ako vyvolať kompilátor
bežať tak, že vy sami ju použiť.
>> Čo ďalšie príkazy existujú Linux, a podľa poradia CS50 IDE?
Čoskoro vidieť, že je tu Príkaz CD, zmena Directory.
To vám umožní v rámci Váš rozhranie príkazového riadku
k pohybu vpred a späť, a otvárať rôzne zložky
bez použitia myši.
>> LS sme videli, čo je skratka pre zoznam súbory v aktuálnom adresári.
Urobiť Dir, môžete asi začať odvodzovať
čo to znamená now-- aby adresár, Ak chcete vytvoriť priečinok.
RM pre odstránenie RM Dir pre odobrať directory-- a tie,
Znova, sú príkazového riadku ekvivalenty toho, čo
mohol robiť v CS50 IDE s myšou.
Ale budete čoskoro zistí, že niekedy je to len
oveľa rýchlejšie robiť veci s klávesnicou,
a nakoniec oveľa silnejší.
>> Ale je to ťažké tvrdiť, že niečo sme robili doteraz
je všetko, čo silný, keď všetci sme boli hovorím, hello world.
A v skutočnosti, I napevno Slová ahoj svet do môjho programu.
Doteraz neexistuje žiadna dynamika.
Scratch bol rádovo zaujímavejšie minulý týždeň.
>> A tak sa poďme sa tam dostať.
Poďme sa krok smerom, ktorý by spôsob, ako niektoré z týchto funkcií.
Takže nielenže C prísť s printf, a zväzky ďalších funkcií
z ktorých niektoré uvidíme v priebehu času, to nie je
aby to všetko tak jednoduché, hneď po vybalení brány v získavaní užívateľských vstupov.
>> V skutočnosti je jedným z nedostatkov jazykov, ako je C,
a dokonca aj Java a napriek tomu iní, je, že to nie je
uľahčujú len dostať veci, ako je celé čísla od užívateľov, alebo reťazcov, slová,
a frázy, nieto veci ako hodnôt s plávajúcou čiarkou, alebo reálne čísla
s desatinnými miestami a v skutočnosti dlhá čísla, ako sme skoro uvidí.
Takže tento zoznam funkcií tu, títo sú rovnako ako ostatné Scratch dielikov
že sme predinštalované v CS50 IDE, ktorý budeme používať po dobu niekoľkých týždňov
ako koliesok druhov, a Nakoniec ich zložiť, a pozrite sa
Pod kapotou zrejme tým, ako sú tieto veci realizované.
>> Ale ako to urobiť, poďme v skutočnosti napísať program.
Nechaj ma ísť napred teraz.
A ja idem k vytvoreniu nového súbor kliknutím na tento malý Plus,
a kliknutím na tlačidlo Nový súbor.
>> Idem zachrániť tento ďalší jeden ako, povedzme, string.c,
pretože chcem hrať s reťazcami.
A reťazec v C je len postupnosť znakov.
Takže teraz poďme vpred a vykonajte nasledujúce.
>> Zahŕňajú štandardné IO.h-- a to dopadá štandardné IO,
IO jednoducho znamená vstup a výstup.
Tak to dopadá, že Táto linka je tu to, čo
Je nám susedné použiť printf.
Printf, samozrejme, produkuje výstup.
Takže aby bolo možné používať printf, to dopadá out musíte mať tento riadok kódu
V hornej časti súboru.
>> A vrátime k tomu, čo že v skutočnosti znamená, že onedlho.
Ukazuje sa, že v akýkoľvek program v jazyku C píšem,
Musím začať ju kód, ktorý vyzerá takto.
A všimnite si CS50 IDE a ostatné integrované vývojové
prostredie, ako je to, sa pokúsime čo najlepšie
oni môžu dokončiť svoje myšlienky.
V skutočnosti, pred chvíľou, keď undo čo som urobil, som stlačte Enter.
>> Potom som trafil otvorený kučeravé rovnátka, stlačte klávesu Enter znova.
A to dokončil svoju myšlienku.
To mi dal nový riadok, odsadené o nič menej pre príjemné štylistických dôvodov, uvidíme.
A potom sa mi automaticky dal že zložená zátvorka dokončiť svoju myšlienku.
Teraz to nie je vždy odhadnúť, čo chcete robiť.
Ale z veľkej časti, to robí ušetrí niekoľko stlačení klávesov.
Takže pred chvíľou sme spustili tento program-- Dobrý deň, svet, a potom ho zostavil,
a potom ju bežal.
Ale nie je tu žiadna dynamika.
Čo keby sme chceli robiť niečo iné?
No, čo keby som chcel vlastne získať reťazec od užívateľa?
Idem na použitie kúsok skladačky volal presne že-- dostať reťazec.
>> Ukázalo sa, že v jazyku C, že keď nechcete, poskytovať informácie pre kúsok skladačky,
alebo viac vhodne funkciu, budete doslova proste otvorené zátvorky,
V blízkosti zátvorka.
Takže je to, ako by tam žiadny biely rámček písať do.
Hlavné slovo blok pred Mal malú bielu krabičku.
Nemáme tu biely rámček teraz.
>> Ale keď som volať get reťazec I chcieť, aby výsledok niekde inde.
Takže veľmi časté paradigma v C je volanie funkcie, ako get reťazec tu,
a potom uložiť svoju návratovú hodnotu.
Je to výsledok jeho úsilie v niečom.
>> A čo je konštruovať v programovaní,
či už v základe, alebo teraz C, aby sme možno použiť na uloženie vlastne niečo?
Volal to premenná, že jo?
A v Scratch, my nie v skutočnosti jedno, čo sa deje v premenných.
>> Ale v tomto prípade sme vlastne robiť.
Idem povedať reťazec.
A potom som mohol zavolať to, čo chcem.
Idem to nazvať meno, dostane dostať reťazec.
>> A teraz aj keď ste trochu na tento nový,
Všimnite si, že som chýba nejaký detail.
Ja zabudla bodkočiarkou.
Musím dokončiť túto myšlienku.
Takže idem pohnúť kurzorom, a udrel bodkočiarka tam.
A čo som práve urobil?
V tomto riadku kódu, číslo 5 v čase,
Volám get reťazec so žiadnymi vstupmi.
Takže nie je málo bielej obrazovka ako na Save blok má.
>> Len hovorím, hej, počítač, dajte mi reťazec.
Znamienko rovnosti nie je naozaj znamienko rovnosti, samy o sebe.
Je to úloha operátor, čo znamená,
hej, počítač, posunúť hodnotu Z pravej strany smerom doľava.
A v ľavej strany, mám nasledujúce.
>> Hej, počítač, daj mi string-- postupnosť znakov.
A volať, že String Name.
A ja nemajú ani hovoriť Name.
>> Aj to mohol zavolať, konvenčne, niečo ako S,
rovnako ako sme použili aj na volať premenné i.
Ale teraz musím niečo urobiť s ním.
To by bolo dosť hlúpe kompilácie tento kód, beh
tento program, aj keď Začínam reťazec,
pretože je to stále len ísť pozdraviť svet.
>> Ale čo keď chcem to zmeniť.
Prečo to mám urobiť?
Percento s, čiarka s.
A to je ešte trochu záhadná.
>> Takže mi dovoľte, aby sa moje premenné jasnejšie.
Dovoľte mi, aby som pomenovať tento názov premennej.
A uvidíme, či nemôžeme dráždiť okrem toho, čo sa tu deje.
>> Takže na linke päť, ja začínam reťazec.
A ja ukladanie tento reťazec, bez ohľadu na užívateľ zadal
na svojej klávesnici, v premennej nazvanej názve.
A ukázalo sa, že printf nie je len
trvať jeden argument v dvojlôžkových citáty, jeden vstup do úvodzoviek.
>> To môže trvať dva alebo tri, alebo viac, napríklad že druhý, alebo tretí, alebo štvrtý,
sú všetky názvy premenných, alebo špecificky váži,
ktorý chcete zapojiť do, dynamicky, že reťazec v úvodzovkách.
Inými slovami, to, čo by bolo zlé?
Keby som len pozdravil meno, lomítko n, mi zachránil súbor, zostavil môj kód,
a bežal to, čo by sa stalo?
>> Je to jednoducho nepovie, ahoj pomenovať, doslova N-A-M-E,
čo je tak trochu hlúpy, pretože to nijako nelíši od sveta.
Takže niečo v úvodzovkách je čo doslova sa vytlačí.
Takže ak chcem mať zástupný tam,
Ja vlastne nutné použiť niektoré špeciálne syntaxe.
A ukázalo sa, ak si prečítať Dokumentácia pre funkciu printf,
to vám povie, že Ak používate percent ov,
môžete nahradiť hodnotu nasledujúcim spôsobom.
>> Po čiarkou po tom dvojité úvodzovky, stačí
zapísať na meno premenná, ktorá chcete
zapojiť do tohto formátu kódu alebo Špecifikátor formátu,
percentá s pre sláčiky.
A teraz, či som zachránil svoj súbor, Idem späť do môjho terminálu.
A píšem Urobiť reťazec, pretože, opäť, názov tejto
Súbor, ktorý som si vybrala, než bude string.c.
>> Tak som chcel povedať Urobiť reťazec, vstúpiť.
Ach môj bože, pozrite sa na všetky chyby sme urobili už.
A to je-- to, čo je to naozaj ako šesť, sedem riadok programu?
Tak toto je miesto, kde to môže veľmi rýchlo získať ohromujúci.
>> Toto okno terminálu má Teraz len vyvrhoval
obrovské množstvo chybových správ.
Iste, nemám väčšie chybu Správy než ja riadky kódu.
Takže to, čo sa deje?
>> No, najlepšie stratégie robiť kedykoľvek
sa stretávajú drvivá zoznam chýb, ako je to,
Je posúvať späť, pozrite sa na povel ste práve bežal, čo v mojom prípade
je vytvoriť reťazec.
Pozrite sa, čo robia urobil, a to, že dlhá Clang príkaz, neexistuje žiadny veľký problém.
>> Ale červená je zlá.
Green sa snaží byť jemný a užitočné.
Ale je to stále zlé, v tomto prípade.
Ale tam, kde je to zlé?
>> String.c, linka päť, znak päť.
Takže je to len obyčajný konvencie.
Niečo niečo hrubého čreva znamená, Číslo linky a číslo charakter.
Chyba, využitie nedeklarovaný Reťazec identifikátora.
Mali ste na mysli štandardom?
>> Takže, bohužiaľ, Clang sa snaží byť užitočný.
Ale je to zle, v tomto prípade.
Nie, Clang, nemal som na mysli štandardné IO.
Myslel som, že na prvom riadku, áno.
>> Ale linka päť Je to jeden tu.
A Clang nie je pochopiť, S-T-R-j-n-G.
Je to nedeklarovaný identifikátor, je Slovo to proste nikdy predtým nevidel.
A to preto, že C, jazyk píšeme kód práve teraz,
nemá premenné zvanej reťazca.
>> To nie je v predvolenom nastavení podporu niečo, čo nazýva reťazec.
To je CS50 kus žargón, ale veľmi bežné.
Ale môžem opraviť nasledujúcim spôsobom.
>> Mám chcete pridať jeden riadok kódu v hornej časti tohto programu,
zahŕňajú CS50.h, čo je ďalší súbor Niekde vnútri CS50 IDE, niekde
na pevnom disku, tak povediac, operačného systému Ubuntu
že bežím, že je súbor, ktorý je
bude učiť prevádzkové Systém, čo je reťazec, len
ako štandardné IO.H je súbor v operačnom systéme, ktorý je
bude učiť to, čo je printf.
>> V skutočnosti by sme sa dostali veľmi podobná správa
ak IO pripustil štandardu IO.H a snažil použiť printf.
Takže ja idem dopredu a len prevziať kontrolu L, aby som si vyčistil obrazovku.
Alebo môžete písať jasné a bude stačí zrušiť okno terminálu.
Ale stále môžete posúvať späť v čase.
>> A budem znovu spustiť Urobiť reťazec.
Kríž prsty tentoraz Enter.
Panebože, to fungovalo.
to mi ukazuje dlhý záhadný povel to je tým, čo generovaná cez Clang,
ale žiadne chybové hlásenia.
Takže si uvedomiť, hoci môžete získať úplne
zahltení počet chybových správ,
že to môže byť tak nepríjemné kaskádových efekt, kedy Clang nerozumie
Jedna vec, ktorá ju potom znamená, nerozumie ďalšie slovo,
alebo ďalší riadok.
A tak to proste tlmivky kódu.
Ale oprava by mohla byť jednoduchá.
A tak vždy zameria na Prvý riadok výstupu.
A ak nie pochopiť, stačí sa pozrieť
kľúčové slová, ktorá by mohla byť záchytné body, a číslo riadku,
a charakter, ak že chyba môže byť.
>> Teraz mi dovoľte ísť dopredu a zadajte dot lomítko, reťazec, vstúpiť.
Hm, to nie je zdraviť nič.
Prečo?
No, spomínam, kde je to beží?
>> Je to pravdepodobne uviazol v túto chvíľu v slučke, ak chcete na linke šesť,
pretože Získať reťazec od návrhu, napísal zamestnanci CS50,
je doslova chcel len sedieť čaká, a čaká,
a čaká na povrázku.
Všetko máme na mysli reťazca je vstup človeka.
Tak viete čo?
Nechaj ma ísť napred.
A práve z rozmaru, dovoľte mi, aby som typ moje meno, David, vstúpiť.
Teraz mám väčší dynamický program.
To povedal, ahoj Dávid.
>> Ak mám pokračovať a spustiť to znova, skúsim povedať meno Zamil, vstúpiť.
A teraz máme dynamický program.
Nemám pevne dané svet.
Nemám ťažké kódované pomenovať, alebo David, alebo Zamil.
>> Teraz je to oveľa viac ako programov Vieme, kde pokiaľ to trvať vstup,
to produkuje trochu iný výstup.
Teraz, to nie je najlepšia užívateľské skúsenosti, alebo UX.
Aj spustiť program.
>> Neviem, čo mám robiť, ak som vlastne prehliadnuť
alebo si pamätať zdrojový kód.
Takže poďme urobiť užívateľovi zažiť trochu lepšie
s najjednoduchšou vecou.
Nechaj ma ísť späť do toho Program a jednoducho povedať printf.
>> A nechaj ma ísť dopredu a hovoriť meno, hrubého čreva, a priestor, a potom bodkočiarka.
A len pre zábavu, nie vôľa n.
A to je úmyselné, pretože nechcem
výzvu pre presun na ďalší riadok.
>> Chcem, namiesto toho, aby reťazec překompilovat svoj kód do nového stroja
Kód bodka lomítko reťazec.
Ach, to je oveľa krajší.
Teraz už viem, čo vlastne počítač chce, aby som robil, dať mu meno.
>> Takže ja idem dopredu a zadajte V Rob, vstupovať, a Dobrý deň, Rob.
Tak, si uvedomiť, je to stále ešte na konci dňa, len deväť riadok programu.
Ale my sme vziať tieto detské krôčiky.
>> Písali sme o jeden riadok, s ktorými poznali, printf, hello world.
Potom sme odstránili trochu to.
A my skutočne použitá get reťazec.
A my hodil túto hodnotu v premennej.
A potom sme šli dopredu a zlepšilo ďalej s treťom riadku.
A to iteratívny proces vypaľovacím softvérom je naozaj kľúčové.
V CS50, av živote všeobecne, mali by ste všeobecne nie sadnúť,
majú program na mysli, a pokúsiť písanie celá tá prekliata vec naraz.
>> To bude nevyhnutne viesť k ceste viac chýb než my sami tu nevidel.
Dokonca som až do dnešného dňa, neustále vykonať ďalšie hlúpe chyby,
sú vlastne tvrdšie chyby ktoré sú ťažšie zistiť.
Ale budete robiť ďalšie chyby tým viac riadkov kódu písať naraz.
A tak to prax, napísať trochu kódu
ktorý vám vyhovuje, kompiláciu to, spustite ho otestovať všeobecnejšie
potom sa presunúť on-- tak rovnako ako my stále vrstvenie a vrstvenie minulý týždeň,
budova z niečoho veľmi jednoduché niečo zložitejšie,
to isté tu.
Nesadajte, a pokúsiť sa napísať celý problém.
V skutočnosti vziať tieto detské krôčiky.
>> Teraz, reťazce nie sú všetky že užitočné sami sebe.
Mali by sme v skutočnosti, v ideálnom prípade, rovnako ako na majú v našom súbore nástrojov niečo iné.
Takže poďme vlastne robiť presne to.
>> Nechaj ma ísť dopredu a hneď vybičovať trochu iný program.
A budeme nazývať int.c, na celé číslo.
Chystám sa, podobne, patrí CS550.h.
Idem obsahovať štandardné IO.
A to bude celkom obyčajný V týchto prvých dňoch triedy.
>> A budem pripravený Sám s hlavnou funkciou.
A teraz namiesto toho, ako sa dostať reťazec, Poďme ďalej a dostať int.
Nazvime to aj, a volať to dostať int, úzkym parens, bodkočiarka.
A teraz poďme robiť niečo s tým, printf.
>> Povedzme, že niečo podobné Dobrý deň, lomítko n, čiarka i.
Takže som celkom veľa napodobňovanie čo som urobil pred chvíľou.
Mám zástupný tu.
Som čiarkou aj tu, pretože chcem, zapojiť aj do tohto zástupného symbolu.
>> Tak poďme do toho a skúste zostavovaní tohto programu.
Súbor sa nazýva int.c.
Tak som chcel povedať, aby int, vstúpiť.
Ach môj bože, ale žiadny veľký problém, že jo?
Tam je chyba.
>> K dispozícii je syntaktická chyba Tu taká, že program nemôže
byť zostavené vnútri int.c, riadok sedemmiestne 27 formátu, chyba
špecifikuje typ char hviezda, čo to je.
Ale typ argument je int.
>> Takže aj tu nebudeme to-- aj keď dnes je veľa materiálu,
budeme vás zahltiť úplne každý rys C,
a programovanie všeobecnejšie V práve týchto prvých niekoľkých týždňov.
Takže tam je často bude žargónu s ktorými nie ste oboznámení.
A v skutočnosti, char hviezda je niečo ideme vrátiť do
za týždeň až dva roky.
>> Ale teraz uvidíme, či môžeme analyzovať slová, ktoré sú oboznámení.
Formáty-- takže sme počuli formát projektant formát kódu predtým.
To je oboznámený.
Type-- ale argument typu int.
Počkaj chvíľu, ja ich int.
>> Možno percent to vlastne má nejaký uvedený význam.
A naozaj, to robí.
Celé číslo, ak chcete printf ho nahradiť,
ste skutočne musieť použiť odlišný formát Špecifikátor.
A vy by ste to nevedel Ak vám niekto povedal,
alebo ste mali to urobil predtým.
Ale percent i je čo môžu byť bežne používané
V printf pre pripájanie celé číslo.
Môžete tiež použiť percent d na desiatkové celé číslo.
Ale ja ich pekný a jednoduchý tu.
Takže pôjdeme s tým.
>> Teraz mi dovoľte ísť dopredu a opakovanie make int, Enter.
To je dobre, žiadne chyby.
Dot lomítko int-- OK, zlé užívateľské skúsenosti, pretože som sa sám povedal,
čo robiť.
Ale to je v poriadku.
Som na lov rýchlo.
>> A teraz nechaj ma ísť dopredu a zadajte Davida, OK, Zamil, Robe.
OK, takže to je dobrá vec.
Tentokrát som pomocou funkcie, puzzle kus, nazvaný get int.
A ukázalo sa out-- a my pozri neskôr v term--
personál CS50 zaviedla sa reťazec, takým spôsobom,
že bude iba fyzikálno získať reťazec pre vás.
>> Že vykonal get int takým spôsobom, že to bude len
získať číslo pre vás.
A ak vás, človek, nespolupracujú, je to
doslova len tak hovoria opakovať, opakovať, opakovanie,
Doslova tam sedí slučky, kým budete zaviazať s nejakým magickým číslom,
ako je 50 ° C a 50 Dobrý deň.
>> Alebo keď narazíme to znova a zadajte 42, ahoj 42.
A tak sa funkcie get int Vnútri tejto skladačky
je dosť logické, dosť myšlienka, prísť na to, čo je to slovo?
A čo je to číslo?
Iba prijatie, nakoniec aj čísla.
>> Tak to dopadá, že toto nie je všetko, že expresívne.
tak ďaleko.
Takže hurá, naposledy sme šlo celkom rýchlo
do vykonávacích hier a animácií, a umeleckých diel v nuly.
A tu sme, že obsah s Hello World, a privítajte 50.
>> To nie je všetko, čo inšpiratívne.
A skutočne, títo prvý pár Príklady bude trvať nejaký čas
rozbehnúť vzrušením.
Ale máme oveľa viac ovládať sa v skutočnosti.
A budeme veľmi rýchlo začať vrstvenie
v hornej časti týchto základných tvary.
>> Ale prvé, poďme rozumieť aké sú obmedzenia.
V skutočnosti, jednou z vecí, Scratch nie je ľahké
robme naozaj vyzerať pod kapotou
a pochopiť, čo je to Počítač je, čo to môže robiť,
a aké sú jeho obmedzenia.
A naozaj, že nedostatok porozumenie, potenciálne dlhodobý
môže viesť k nášmu vlastnému písanie mistakes-- chyby, písanie nezabezpečeného softvéru, ktorý
dostane hacknut nejakým spôsobom.
>> Takže poďme sa niektoré kroky smerom Pochopenie tohto trochu lepšie
spôsob, povedzme, nasledujúci príklad.
Chystám sa ísť dopredu a realizovať real rýchly program s názvom vretenica.
Rovnako ako, povedzme, pridať nejaké čísla dohromady.
A idem ku kódu niektoré rohy tu, a len kopírovať a vkladať
kde som bol predtým, len takže môžeme ísť skôr.
Takže teraz mám základné začiatky z programu s názvom vretenica.
>> A poďme do toho a to dosiahnuť.
Chystám sa ísť dopredu a povedzme, intx dostane dostať int.
A viete čo?
Poďme urobiť lepšiu užívateľskú skúsenosť.
>> Takže povedzme x a účinne vyzve užívateľa, aby nám x.
A nechajte ma ísť dopredu a hovoriť, printf ako sa o y je tentoraz čaká
dve hodnoty od užívateľa.
A potom poďme jednoducho ísť dopredu a povedzme, printf súčet x a y je.
A teraz nechcem robiť percent ov.
Chcem robiť percent i, lomítko n, a potom pripojte súčet hodnoty.
>> Tak ako môžem ísť asi robí?
Vieš čo?
Viem, ako používať premenné.
Nechaj ma vyhlásiť novú, int Z.
>> A budem hádať tu.
Ak nie sú rovné v tom znamenie jazyk, možno môžem jednoducho X plus y,
tak dlho, ako som skončiť môj Myslel s bodkočiarkou?
Teraz sa môžem vrátiť tu dole, zapojte do Z, dokončiť túto myšlienku sa bodkočiarkou.
A pozrime sa teraz, ak tieto Sekvencia lines-- x je dostať int.
Y je dostať int.
>> Pridajte x a y, ukladať hodnotu v Z- tak opäť spomenúť na znamienko rovnosti
nerovná.
Je to úloha sprava doľava.
A poďme vytlačiť že súčet z X a Y nie je doslova z,
ale to, čo je vo vnútri z.
Takže poďme urobiť zmije - pekné, žiadne chyby tomto okamihu.
Dot lomítko zmija, vstupovať, x bude 1.
>> Y bude 2.
A súčet x a y je 3.
Takže to je všetko v poriadku a dobre.
>> Takže by ste si predstaviť, že matematiku by mal pracovať v programe, ako je tento.
Ale viete čo?
Je táto premenná, riadok 12, dokonca nevyhnutné?
Nemusíte sa dostať vo zvyku púheho ukladanie vecí do premenných
len preto, že je to možné.
A v skutočnosti, to je všeobecne považované za zlé konštrukcia
Ak vytvárate premennú, nazvaný z v tomto prípade niečo, čo v ňom skladovania,
a potom hneď ju používať, ale nikdy znova.
Prečo niečo dať názov rovnako ako z Ak ste doslova
bude používať, že to len raz, a to
proximálnej k miestu, kde ste vytvorili sa v prvom rade,
tak blízko, pokiaľ ide o riadkov kódu?
Tak viete čo?
Ukazuje sa, že C je dosť flexibilná.
Keby som skutočne chcú plug-in hodnotách tu,
Nepotrebujem vyhlásiť novú premennú.
Mohol by som plug-in X plus y, pretože C rozumie
aritmetika a matematické operátory.
>> Takže môžem jednoducho povedať, robiť túto matematiku, x a y, či už tieto hodnoty,
zástrčka výsledný integer do tohto reťazca.
Takže by to mohlo byť, hoci iba jeden riadok kratšie,
lepší dizajn, lepší program pretože tam je menej kódu, a preto
menej pre mňa pochopiť.
A je to tiež len čistejšie, ak nie sme
zavádzanie nových slov, nové symboly, rovnako ako z,
aj keď nie v skutočnosti slúži veľký účel.
>> Bohužiaľ, matematika nie je všetci, že spoľahlivé niekedy.
Poďme ďalej a to urobiť.
Chystám sa pokračovať Teraz a vykonajte nasledujúce.
>> Urobme printf, percento aj plus percentá Aj bude percenta aj, n lomka.
A ja urobím tohle-- xyx navyše y.
Takže som jednoducho ísť prepísať to trochu inak tu.
Nechaj ma to jednoducho urobiť rýchlu kontrolu zdravý rozum.
Opäť platí, poďme sa dostať pred seba.
Urobiť sčítačka, bodka lomítko výbavu.
x je 1, y je 2, 1 a 2 je 3.
Tak to je dobre.
Ale poďme skomplikovať to teraz bit, a vytvoriť nový súbor.
>> Idem volať tento jeden, hovoria, ints, množné číslo pre celé čísla.
Začnime, kde som bol pred chvíľou.
Ale teraz poďme urobiť niekoľko ďalších riadkov.
Nechaj ma ísť dopredu a urobiť nasledovné, printf, percento aj, mínus percenta i,
Je percenta aj, čiarka x, čiarka yx mínus y.
Tak som niečo robiť iná matematika tam.
Urobme ešte jeden.
Takže percent aj časy percent i je aj percento, lomítko n.
Poďme plug-in x a y a x y časy.
Budeme použiť hviezdičku na počítač pre časy.
>> Nepoužívať x. x je názov premennej tu.
Môžete použiť hviezda pre násobenie.
Urobme ešte jeden.
Printf percenta I, rozdelených podľa percent I sa percento aj,
lomítko n. xy deleno y- takže môžete použiť lomítko v jazyku C
robiť divízie.
A ideme na jednu ďalšiu.
Zostávajúce percentá I, rozdelených podľa percent Aj, sa percento aj.
xy-- a teraz zvyšok je to, čo zostane.
Pri pokuse rozdelením menovateľa do čitateľa,
koľko zostane, že ste nemohli rozdeliť von?
>> Takže tam nie je naozaj, nevyhnutne, symbol
sme použili na základnej škole za to.
Ale tam v C. Môžete hovoriť x modulo y, kde
Tento znak percenta v tomto context-- zavádzajúcim spôsobom, keď ste vo vnútri
z úvodzoviek, Vnútri printf, percentá
sa používa ako Špecifikátor formáte.
>> Ak použijete percent mimo že matematický výraz,
je to operátor modulo pre modulárne arithmetic-- pre naše účely
tu, jednoducho znamená, aká je Zvyšok x delené y?
Takže x delené y je x lomka y.
Aký je zvyšok x delené y?
Je x mod y, čo by programátor povedať.
>> Takže keď som sa žiadne chyby tu, dovoľte mi, aby som pokračovať a robiť ints, množné číslo, pekný,
a bodka Slash ints.
A poďme do toho a áno, povedzme, 1, 10.
Dobre, 1 plus 10 je 11, kontrola.
1 mínus 10 je negatívny 9, skontrolovať.
>> 1 krát 10 je 10, kontrola.
1 delené 10 je-- OK, budeme preskočiť, že jeden.
Zostávajúca časť 1 deleno 10 je 1.
To je správne.
Ale je tu chyba tu.
>> Takže ten, ktorý som dal môj odovzdať, nie je správne.
Myslím, že je to blízko do 0 ° C.
1 delené 10, viete, keď sme rezanie niektoré rohy, iste, je to nula.
Ale to by malo byť naozaj 1/10, 0,1, alebo 0,10, 0,1000, a tak ďalej.
>> To by nemalo byť naozaj nulový.
No, ukázalo sa, že je počítač robí doslova to, čo sme to oznámili robiť.
Robíme matematiku ako x delené y.
A obaja x a y, za riadky kódu skôr, sú celé čísla.
>> Okrem toho, na riadku 15, sme hovoriť printf, hej, printf plug-in
celé číslo, plug-in celé číslo, plug-in s integer-- špecificky
x, y a potom, a potom x delené y. x a y sú ints.
Sme tam dobre.
>> Ale čo je x delené x?
x delené y by mali byť, matematicky, desatina, alebo 0,1,
čo je reálne číslo, reálne číslo majúce potenciálne desatinnú čiarku.
To nie je celé číslo.
>> Ale čo je najbližšie číslo 1/10, alebo 0,1?
Jo, celkom to je nula.
0.1 je takhle moc.
A 1 je to moc.
Takže 1/10 je bližšie k 0, než je jedna.
>> A tak to, čo C robí pre us-- druh, pretože sme oznámili to to--
Je skracovať, že celé číslo.
Trvá to na hodnotu, ktorá je opäť má byť niečo ako 0,1000,
0, a tak ďalej.
A to všetko skrátenie za desatinnou čiarkou
tak, že to všetko veci, pretože to nie je
zapadajú do konceptu celé číslo, ktoré je len číslo ako negatívne 1, 0, 1,
hore a dole, to všetko odhodí za desatinnou čiarkou, pretože ste
nezmestí desatinnú čiarku V celej číslo podľa definície.
>> Takže odpoveď je tu nulová.
Tak ako opraviť?
Musíme iné riešenie dohromady.
A môžeme to urobiť, a to nasledovne.
>> Nechaj ma ísť dopredu a vytvoriť novú Súbor, tentoraz s názvom floats.c.
A uložiť ho tu v Rovnaký adresár, float.c.
A nechaj ma ísť dopredu a kopírovanie niektoré z týchto kódu z skôr.
>> Ale namiesto toho, ako sa dostať int, ideme na to.
Daj mi plávajúce bodovú hodnotu s názvom x. kde s pohyblivou rádovou čiarkou
Hodnota je len doslovne niečo s plávajúcou desatinnou čiarkou.
Môže sa pohybovať doľava, doprava.
Je to reálne číslo.
>> A dovoľte mi hovoria nie dostať int, ale dostať sa plávať,
ktorý bol tiež medzi ponuke možností v knižnici C250.
Zmeňme r na hotovosť.
Takže to bude mať float.
>> A teraz nechceme pripojiť ints.
Ukazuje sa, že musíme použiť percenta f pre float, percento f pre float,
a teraz ho uložiť.
A teraz, palce, aby plaváky, pekné, dot lomítko plaváky.
x bude jeden 1. y Bude 10 znova.
>> A, pekný, OK môj prírastok je správny.
Dúfal som, že po dobu dlhšiu, ale zabudol som to napísať.
Takže poďme a opraviť túto logickú chybu.
>> Poďme ďalej a chytiť nasledujúce.
Budeme jednoducho trochu kopírovať a vložiť.
A budem hovoriť mínus.
>> A budem hovoriť krát.
A ja chcel povedať rozdelená.
A ja nebudem robiť modulo, čo nie je tak Germaine tu,
delené f, a doba plus-- OK, poďme to urobiť znova.
>> Robia plaváky, bodka lomítko plaváky, a 1, 10, a-- pekný, nie, OK.
Takže som idiot.
Tak to je veľmi častý v informatike
robiť hlúpe chyby, ako je táto.
>> Na pedagogické účely, čo som naozaj chcel robiť
ak bola zmeniť vedu tu na plus, mínus, do doby,
a rozdeliť, ako vy snáď Všimol počas tohto cvičenia.
Takže teraz poďme re-kompilácii to Program, robiť dot lomítko plaváky.
>> A tretíkrát, poďme uvidíme, či to spĺňa moje očakávania.
1, 10, vstupovať, áno, OK, 1,000, delené 10.000, je 0,100000.
A ukázalo sa môžeme kontrolovať, koľko Čísla sú po tých desatinné miesta.
v skutočnosti budeme.
Vrátime sa k tomu.
>> Ale teraz, v skutočnosti, že matematický je správne.
Takže, ešte raz, čo je tu stánok s jedlom?
Ukazuje sa, že v C existujú nielen len strings-- a v skutočnosti,
nie sú v skutočnosti, pretože my pridať tie s knižnicou CS50.
Ale tam nie sú len ints.
>> K dispozícii sú aj pláva.
A ukázalo sa, veľa ďalších údajov Typy tiež, že budeme používať onedlho.
Ukázalo sa, že ak chcete jediný znak, nie reťazec znakov,
môžete použiť len znak.
>> Ukazuje sa, že ak chcete bool, logickú hodnotu pravda, alebo len nepravdivé,
Vďaka knižnici CS50, máme pridaný do C dátový typ bool rovnako.
Ale je to tiež prítomný v mnoho iných jazykov rovnako.
A ukázalo sa, že niekedy Potrebujete väčšie množstvo potom príde v predvolenom nastavení
s ints a plaváky.
>> A v skutočnosti, dvojitý je číslo ktorý používa nie 32 bitov, ale 64 bitov.
A long je číslo, ktoré používa nie 32 bitov, ale 64 bitov,
respektíve pre plávajúcou desatinnou čiarkou hodnoty a celé čísla, resp.
Tak nech to vlastne teraz vidieť v akcii.
>> Chystám sa pokračovať tu a vybičovať jeden iný program.
Tu budem pokračovať a to zahŕňa CS50.h.
A nechaj ma ísť, zahŕňajú štandardný IO.h.
>> A všimnite si niečo funky sa tu deje.
Nie je to farebné kódovanie veci rovnakým spôsobom, ako tomu bolo predtým.
A ukázalo sa, že je to preto, že som nedal tá vec názov súboru.
>> Idem zavolať tento sizeof.c, a udrel na Uložiť.
A všimnite si, čo sa stane s mojím veľmi biela kód proti tomuto čiernemu pozadia.
A teraz, aspon je tu niektoré fialové tam.
A to je syntaxe zvýraznené.
>> To preto, že skrátka som povedal IDE, aký typ súboru
je to tým, že mu meno, a špecificky príponu súboru.
Teraz poďme do toho a to dosiahnuť.
Chystám sa ísť dopredu a veľmi jednoducho vytlačiť following-- bool
Je percenta LU.
>> Vrátime sa k že za chvíľu.
A potom idem veľkosť tlače bool.
A teraz, len preto, aby ušetriť Sám nejaký čas, som
robiť celok banda z nich naraz.
A konkrétne, idem zmeniť na char a char.
Ten, budem meniť na dvojnásobok a double.
>> Ten, budem meniť s plavákom a hotovosť.
Ten, budem zmeniť na int a int.
A tento, budem Pre zmenu na long.
A to stále trvajú dlhá doba, dlhá dlhá.
>> A potom konečne som dal Sám jeden príliš veľa, reťazec.
Ukazuje sa, že v jazyku C, je tu špeciálny operátor nazvaný
veľkosť, ktorá je doslova bude pri spustení,
povedzte nám veľkosť každej z týchto premenných.
A je to spôsob, teraz môžeme pripojiť späť
z minulého týždňa diskusie dát a reprezentácie.
>> Nechaj ma ísť dopredu a kompilovať veľkosť bodového veľkosti lomítko časti.
A pozrime.
Ukazuje sa, že v jazyku C, konkrétne na CS50 IDE
Najmä pokiaľ ide o operačný systém Ubuntu,
čo je 64-bitový operačný Systém v tomto prípade
boolovské sa chystá iba jeden bajt priestoru.
To je, ako sa meria veľkosť, nie je v bitoch, ale v bytoch.
A pripomínajú, že jeden bajt je osem bitov.
Takže bool, hoci Technicky je potrebné iba 0 alebo 1,
je to trochu zbytočné Ako sme implementoval.
Je to vlastne bude používať celok byte-- takže všetky nuly, sú možno
všetky z nich, alebo niečo také, alebo len jeden 1 medzi osem bitov.
>> Char, medzitým, ktorý sa používa pre znak ako ASCII znak za minulého týždňa,
bude jeden znak.
A to synchs s našou predstavou pričom nie viac ako 256 bits-- skôr,
synchs sa s tým, že nie dlhší ako 8 bitov, čo
dáva nám toľko ako 256 hodnôt.
Dvojité sa chystá byť 8 bajtov alebo 64 bitov.
>> Plávajúce je 4.
Int je 4.
Dlhý, dlhý je 8.
A je reťazec 8.
Ale nebojte sa o tom.
Budeme zlúpnite túto vrstvu.
Ukázalo sa, že reťazce môžu byť dlhší ako 8 bajtov.
>> A naozaj, sme napísali struny Už hello world,
dlhší ako 8 bajtov.
Ale vrátime do že za chvíľu.
Ale odniesť tu je nasledujúci.
>> Každý počítač má len konečný množstvo pamäte a priestoru.
Môžete ukladať iba toľko súbory na počítači Mac alebo PC.
Môžete uložiť len toľko programov RAM beží naraz, nutne, a to aj
s virtuálnej pamäte, pretože Máte obmedzené množstvo pamäte RAM.
>> A len preto, aby v prípade, picture-- ste nikdy otvoril notebook
alebo objednať ďalšie pamäť pre počítače,
nemusí vedieť, že vnútri počítača
je niečo, čo vyzerá trochu ako je tento.
Takže je to len obyčajný spoločnosť s názvom Rozhodujúce, aby činí RAM pre počítače.
RAM je miesto, kde programy žiť, zatiaľ čo oni beží.
>> Takže na každom počítači Mac alebo PC pri poklepaní Kliknite na program, a to otvára,
a otvára nejaký dokument Word alebo nieco podobne,
uloží ho do pamäte dočasne RAM, pretože RAM je rýchlejší
ako pevný disk, alebo Váš solid state disk.
Takže je to práve tam, kde programy ísť žiť, keď používate,
alebo ak sú používané súbory.
>> Takže máte veci, ktoré vyzerajú takhle vnútri vášho notebooku,
alebo mierne väčšie veci vnútri počítača.
Ale kľúč je máte len konečný počet týchto vecí.
A je tu len obmedzené množstvo hardware sedí na tomto stole vpravo
tu.
>> Takže určite nemôžeme skladovať nekonečne dlhá čísla.
A napriek tomu, ak si myslíte, späť do obecná škola, koľko číslic môže
máte doprava o desatinnou čiarkou?
Keď na to príde, koľko číslic môže máte vľavo od desatinnej čiarky?
Naozaj, nekonečne veľa.
>> Teraz, my ľudia by mohol len vedieť vysloviť miliónov,
a miliardy, trillion, a kvadrilion a quintillion.
A ja posúvať hranice môjho understanding-- alebo my-- Rozumiem
Čísla, ale my výslovnosť čísel.
Ale oni môžu dostať nekonečne veľké s nekonečne veľa Číslice vľavo
alebo napravo od desatinnej čiarky.
>> Ale počítače majú iba obmedzené množstvo pamäte,
konečný počet tranzistorov, je konečný počet žiaroviek vnútri.
Takže čo sa stane, keď vám dôjdu priestoru?
Inými slovami, ak spomenúť na posledný týždeň
Keď sme hovorili o číslach samy o sebe sú zastúpené v binárnom,
Domnievame sa, že máme Tento 8-bitová hodnota tu.
>> A máme sedem 1 a jedna 0.
A predpokladám, že chceme pridať 1 k tejto hodnote.
To je naozaj veľké číslo práve teraz.
>> To je 254, ak si dobre spomínam matematický z minulého týždňa vpravo.
Ale čo keď zmením že najpravejšie 0 na 1?
Celé číslo, z Samozrejme, že sa stane osem 1 je.
Takže sme stále dobré.
>> A to pravdepodobne predstavuje 255, aj keď v závislosti od kontextu
mohlo by v skutočnosti predstavovať záporné číslo.
Ale o tom až inokedy.
Tento pocit, že to o tak vysoko, ako sa môžem spoľahnúť.
>> Teraz je len 8 bitov.
A môj Mac, určite má cestu viac ako 8 bitov pamäte.
Ale to predsa má konečný.
Takže rovnaký argument platí, aj keby sme majú viac z týchto tie na obrazovke.
>> Ale čo sa stane, keď ste uloženie toto číslo, 255,
a chcete spočítať jeden kúsok vyššie?
Ak chcete ísť od 255 do 256.
Problémom však je, že ak začína počítať od nuly, ako minulý týždeň,
nemôžete počítať ako s vysokým as 256, nieto 257,
nieto 258 m, pretože to, čo sa stane, keď pridáte 1?
Ak tak urobíte starú základnú školu prístup, dáte 1 tu,
a potom 1 plus 1 je 2, ale to je naozaj nula, môžete niesť 1,
niesť 1, nesú 1.
Všetky tieto veci, Tieto 1, prejdite na nulu.
A skončíš, áno, ako niekoho, poukázal na to, 1 na ľavej strane.
Ale všetko, čo môžete skutočne vidieť a vojde do pamäti
Je len osem 0 je, čo znamená, na nejakom mieste, ak vás, počítač,
Skúšal počítanie dostatočne vysoko, že ste bude zalomiť okolo, ako sa zdá,
na nulu, alebo dokonca negatívny Čísla, ktoré sú dokonca nižšie ako nula.
>> A môžeme trochu vidieť.
Nechaj ma ísť dopredu a písať skutočný rýchly programu tu.
Nechaj ma ísť dopredu a písať program s názvom pretečeniu.
Patrí CS50.h, zahŕňajú Štandardné IO.h-- oh,
Naozaj zmeškal zvýrazňovanie syntaxe.
Takže poďme uložiť ako overflow.c.
>> A teraz int main void-- a netrvalo dlho, zmienime
vrátiť sa k vysvetlením, prečo držíme písanie int main neplatné.
Ale teraz, nech to jednoducho urobiť to, brať to ako samozrejmosť.
Dajme sám int, a inicializovať ju na hodnotu 0.
>> Poďme potom urobiť pre int i získať zero-- v skutočnosti, poďme urobiť nekonečnú slučku
a uvidíme, čo sa stane.
Aj keď pravda, potom poďme vytlačiť n Je percenta i, n lomítko, plug-in n.
Ale teraz, poďme robiť n dostane n plus 1.
>> Takže inými slovami, na každom iterácie tohto nekonečnej slučky,
berme hodnotu n je, a pridať 1 k nemu, a potom
uloženie výsledku späť do n na ľavej strane.
A v skutočnosti, sme videli syntax Mierne takhle krátko.
Chladný trikom je namiesto písanie to všetko preč,
môžete skutočne povedať n a rovná1.
>> Alebo naozaj chcete byť fantázie, keď si, môžete povedať, n a navyše bodkočiarku.
Ale tieto dva posledne menovaní sú len čo by sme zavolať syntaktický cukor
Pre prvú vec.
>> Prvá vec, ktorú je jasnejšie, úplne v poriadku, úplne správne.
Ale to je bežnejšie, poviem.
Takže budeme to len na chvíľu.
>> Pozrime sa teraz, aby prepad, ktorý znie trochu zlovestný, dot pretečeniu lomítko.
Pozrime sa, n je stále dosť veľký.
Ale povedzme si, aký veľký môže dostať n?
>> n je int.
Videli sme pred chvíľou s veľkosťou Príkladom že int je štyri bajty.
Vieme, že od minulého týždňa, štyri byty je 32 bitov, pretože 8 krát 4, to je 32.
Že to bude 4 miliardy.
>> A my sme až 800,000.
To bude trvať večne počítať tak vysoko, ako som len možné.
Takže budem pokračovať, Ako ste si možno onedlho,
a stlačte Control C- povedané, Control C, veľa, kde sa vykonáva kontrola C celkovo
prostriedky zrušiť.
Bohužiaľ, pretože toto beží v cloude,
Niekedy oblak je pľuvať toľko vecí,
toľko výstup, bude to chvíľu trvať pre môj vstup
sa dostať do cloudu.
Takže aj keď som trafil Ovládacie C pred niekoľkých sekúnd,
je to určite bočné Účinok nekonečnej slučke.
>> A tak v takých prípadoch, my sme opustí to byť.
A budeme pridávať ďalšie okno terminálu sem
s plus, čo samozrejme nekladie takto, pretože je to stále myslí.
A poďme do toho a bude trochu rozumnejšie.
>> Chystám sa ísť dopredu a robiť toto len konečne mnohokrát.
Poďme použiť pre sláčiky, ktorý spomínal som sa skôr.
Poďme to urobiť.
Daj mi ešte premennú int aj dostane 0.
i je nižšia ako, povedzme, 64 i ++.
A teraz nechaj ma ísť dopredu a tlač out n je percento aj, n čiarka.
A potom n- je to stále bude trvať večne.
Poďme to urobiť.
>> n dostane n krát 2.
Alebo by sme mohli byť ozdobný a to časy rovná 2.
Ale povedzme, že n rovná samotnej krát 2.
Inými slovami, v tejto Nová verzia programu,
Ja nechcem čakať večne od podobných 800.000 až 4 miliardy.
Povedzme to máme za sebou.
>> Poďme skutočne zdvojnásobiť n zakaždým.
Čo, recall, je zdvojnásobenie Opakom majú, samozrejme.
A vzhľadom k tomu minulý týždeň máme opäť niečo, a znovu,
a znova, super rýchly, Zdvojnásobenie budú určite
dostať nás od 1 do najväčší možný hodnota, ktorú môžeme počítať, aby s int.
>> Takže poďme robiť presne to.
A vrátime sa k tomu onedlho.
Ale to je opäť rovnako ako opakovanie blok v Scratch.
A budete používať tento onedlho.
>> To jednoducho znamená počítať od nuly až do, ale nie rovnaké, až 64.
A na každom opakovaní tejto slučka, len držať postupne i.
Takže aj ++ - a tento všeobecný konštrukt Na riadku 7 je jednoducho super obyčajný spôsob,
opakujúcich sa niekoľko riadkov kód, niektorí koľkokrát.
Ktoré riadkov kódu?
Tieto zložené zátvorky, ako vy môže byť zbierané od tejto chvíle,
znamená, postupujte nasledovne.
>> Je to v ako Scratch, keď má žlté bloky
a iné farby, ktoré druh objatí alebo objať ďalších blokov.
To je to, čo ty kučeravý rovnátka sú tu.
Takže keď som dostal syntax right-- vás môžete vidieť symbol mrkva v C prostriedkov
to je koľkokrát som bol sa snaží tento problém vyriešiť.
Takže poďme sa zbaviť že jeden dohromady, a zavrieť to okno.
A budeme používať novú.
Urobiť prepad, dot lomítko prepad, Enter, v poriadku,
to vyzerá zle na prvom mieste.
Ale poďme posunúť späť v čase, preto, že som to urobil 64-krát.
>> A Všimnite si, prvýkrát, n je 1.
Druhýkrát, n je 2, potom 4, potom 8, potom 16.
A zdá sa, že akonáhle Aj dostať do zhruba miliarda,
či som to dvakrát znovu, že by mal mi dať 2 miliardy.
Ale ukazuje sa, že je to priamo na prahu.
>> A tak to vlastne pretečeniu int od 1 miliardu
zhruba negatívne 2 miliardy, pretože celé číslo,
Na rozdiel od čísel, ktorá máme boli za predpokladu minulý týždeň,
môže byť pozitívne aj negatívne v skutočnosti a v počítači.
A tak aspoň jeden z tých, bitov je účinne ukradnutý.
Takže sme naozaj len 31 bitov, alebo 2 miliardy možných hodnôt.
>> Ale teraz, stánok s jedlom je celkom Jednoducho povedané, bez ohľadu na tieto čísla sú
a to bez ohľadu na matematika, sa stane niečo zlé nakoniec,
pretože nakoniec sa snažíte permutáciu bitov jeden príliš mnohokrát.
A efektívne prejsť zo všetkých 1 je pre všetkých možná 0 je, alebo možno
Len nejaký iný vzor, ​​ktorý ju Je zrejmé, že v závislosti od kontextu,
možno interpretovať ako záporné číslo.
A tak by sa mohlo zdať najvyššej I môže počítať v tomto konkrétnom programe
Iba zhruba miliarda.
Ale je tu čiastočné riešenie tu.
Vieš čo?
>> Dovoľte mi, aby som menil z int k dlhej dlhé.
A nechaj ma ísť napred tu a say-- budem mať
tento stav zmeniť na unsigned long.
Alebo sa pozrime, nikdy Spomínam si sám.
>> Poďme ďalej a robiť pretečeniu.
Nie, to nie je ono, LLD, ďakujem.
Takže niekedy Clang môže byť užitočný.
Nepamätal som si, aký formát Špecifikátor bol na dlhú dlho.
>> Ale naozaj, Clang mi to povedal.
Green je nejaká dobrá, Stále znamená, že ste urobili chybu.
Je to hádať, že som mal na mysli LLD.
>> Tak nech mi to brať radu, dlhá dlhá desatinné číslo, okrem toho, že.
A dovoľte mi, aby som ju znova spustiť, dot lomítko pretečeniu, Enter.
A teraz, čo je v pohode, je to.
>> Keby som posúvať späť v čase, stále začať počítanie na rovnakej place-- 1, 2, 4,
8, 16.
Všimnite si, dostaneme všetci cesta až 1 miliardy.
Ale potom sme sa bezpečne dostať na 2 miliardy.
>> Potom sme sa dostať na 4 miliardy, potom 8000000000, 17000000000.
A my ísť vyššie, a vyššie a vyššie.
Nakoniec, aj to zlomí.
>> Nakoniec, s dlhou dlhá, čo je 64-bitová hodnota, nie
32-bitová hodnota, ak rátaš príliš vysoká, môžete zabaliť okolo 0.
A v tomto prípade sme sa náhodou skončiť s záporné číslo.
>> Takže ide o problém.
A ukázalo sa, že toto Problém nie je všetko, že tajomný.
Aj napriek tomu, že som úmyselne indukovanej to s týmito chybami,
to dopadá to vidíme trochu zo všetkého okolo nás, alebo aspoň niektorí z nás robiť.
>> Takže Lego Star Wars, ak ste niekedy hrali hru,
to dopadá môžete obísť lámanie, čo sa v LEGO svete,
a zbieranie mincí v podstate.
A ak ste niekedy hrali táto hra príliš veľa času,
ako tento nemenovaný jednotlivca tu robil, celkový počet
mincí, ktoré môžete zbierať znamená, že by sa mohlo zdať, 4 miliardy.
>> Teraz, keď je to vlastne zaoblené.
Takže LEGO sa snažila udržať veci užívateľsky prívetivý.
Oni to neurobili presne 2 až 32 výkon, za minulého týždňa.
Ale 4000000000 je dôvod, prečo.
Zdá sa, že na základe týchto informácií, že LEGO, a spoločnosť, ktorá
urobil toto aktuálny softvér, rozhodol že maximálny počet mincí
užívateľ môže hromadiť Je skutočne 4000000000,
pretože oni si vybrali v ich kóde na použitie nie je dlhá dlhá, zdá sa,
ale len celé číslo bez znamienka celé číslo, iba kladné celé číslo, ktorého
max hodnota je zhruba to.
No, tu je ďalší smiešny.
Takže v hre Civilization, ktorý niektorí z vás by mohol byť oboznámení s
Ukazuje sa, že tam pred rokmi Bola to chyba v tejto hre, pričom
ak ste hral úlohu Gándhího v hre,
namiesto neho bol veľmi pacifista, Namiesto toho bol neuveriteľne, neskutočne
agresívne, za určitých okolností.
A najmä spôsob, akým civilizácie Práca je, že ak sa hráč,
prijmú demokraciu, vaše agresivita skóre dostane
zníži o dva, takže mínus mínus, a potom mínus mínus.
>> Takže si odpočítať z 2 vaše skutočné Iterácie.
Bohužiaľ, ak vaše Iterácia je spočiatku 1, a odpočítať 2 z neho
po prijatí demokracie ako Gandhi tu mohlo
urobil, pretože bol veľmi passive-- 1 v mierke agresivity.
Ale keď prijme demokraciu, potom sa pohybuje od 1 do negatívnej 1.
>> Bohužiaľ, oni boli pomocou nepodpísané čísla,
čo znamená, že ošetrené dokonca záporná Čísla ako by boli pozitívne.
A ukázalo sa, že pozitívne ekvivalent negatívne 1,
v typických počítačových programov, je 255.
Takže ak Gandhi prijme demokracia má, a teda
Jeho agresivita skóre znížil, to vlastne valí okolo 255
a robí ho najviac agresívne charakter v hre.
Takže si môžete Googlu sa na to.
A bolo to naozaj, čo náhodná programovanie chyba,
ale to je celkom vstúpil ten svet od tej doby.
>> To je všetko zábavné a roztomilé.
Desivejšie je, keď skutočná reálnych zariadení, a nie hry,
majú tie isté chyby.
V skutočnosti, pred rokom prišiel článok out o Boeing 787.
>> A článok na prvom mieste pohľad znie trochu Arcana.
Ale to povedal, softvér zraniteľnosť v Boeing
Nová 787 Dreamliner má ísť potenciál spôsobiť pilotov
stratiť kontrolu lietadlo, prípadne
V polovici letu, úradníci FAA varoval aerolínie v poslednej dobe.
To bolo stanovenie že model 787
lietadlo, ktorý bol poháňaný nepretržite po dobu 248 dní
môže stratiť všetok striedavý prúd, AC, elektrickej energie v dôsledku generátora
Riadiace jednotky, GCUs súčasne ísť do núdzového režimu zlyhania.
Je to trochu ma stratí.
Avšak memo uviedol, OK, teraz mám, že podmienka bola spôsobená softwarom
proti interné riadiace generátor
Jednotky, ktoré pretečie po 248 dní nepretržitého výkonu.
Sme to vydávajúci Všimnite si, aby nedošlo k strate
Zo všetkého striedavé elektrické energie, čo by mohlo mať za následok
k strate kontroly lietadla.
>> Takže doslova, tam je nejaké číslo, alebo nejaký ekvivalent dátový typ,
sa používa v softvéri v skutočnom lietadle
že ak budete mať vaše lietadlo na dosť dlho, čo zrejme
môže byť v prípade, ak ste práve beží je neustále a nikdy odpájaní
vaše lietadlo, ako sa zdá, alebo púšťanie jeho vybijú batérie,
nakoniec počítať hore a hore a hore a hore a hore, a hore.
>> A od prírody, je obmedzené množstvo pamäte
pretečie, návratu k nula alebo niektoré záporné hodnoty,
vedľajší účinok, čo je desivo skutočnej reality
že lietadlo môže potrebovať byť reštartovaný, efektívne,
alebo by mohli spadnúť ešte horšie, ako to letí.
Takže tieto druhy otázok sú stále s nami,
even-- to bolo 2015 článok, všetky ešte desivejšie
keď nie nevyhnutne pochopiť, oceniť, alebo predvídať
tieto druhy chýb.
>> Tak to dopadá je tu ešte jedna ďalšia zlá vec, o reprezentáciu dát.
Ukazuje sa, že aj plaváky sú druh chybné, pretože plaváky taky,
Navrhol som sa 32 bitov, alebo Možno 64, ak používate double.
Ale to je ešte konečný.
>> A Háčik je v tom, že ak je to možné dať nekonečný počet čísel
za desatinnou čiarkou, nie je tam žiadny spôsob, ako
môžu reprezentovať všetky možné čísla, ktoré nás učili
V základnej škole sa môžu vyskytovať vo svete.
Počítač, v podstate, musí zvoliť podskupinu týchto čísel
reprezentovať presne.
>> Teraz, keď počítač nemôže koleso možno trochu,
a môže vám umožní zhruba obchodu ľubovoľné číslo by ste mohli priať.
Ale len intuitívne, ak vás majú konečný počet bitov,
môžete permutáciu len im v mnohých konečných spôsobmi.
Takže si nemôže použiť konečný počet
permutácie bitov, vzory núl a jednotiek,
reprezentovať nekonečný počet čísel,
čo naznačuje, že by mohli počítače Veľmi dobre sa nám klame občas.
>> V skutočnosti, ideme na to.
Nechaj ma ísť späť do CS50 IDE.
Nechaj ma ísť dopredu a vytvoriť malý program
tzv Nepresnosť, ukázať, že Počítače sú skutočne nepresné.
>> A nechaj ma ísť dopredu a začať s niektoré z týchto kódu pred rokom,
a teraz len vykonať nasledujúce.
Nechaj ma ísť dopredu a urobiť printf, percento f n lomka, 1 delené 10.
Inými slovami, poďme ponoriť hlbšie 1/10, ako je 1 a delené 10.
Iste, počítač môže predstavovať 1/10.
>> Tak poďme do toho a robiť nepresnosť.
Pozrime sa.
Formát Určuje typ double.
Ale tento argument má typ int.
Čo sa deje?
>> Oh, zaujímavý, takže je to ponaučenie z predtým.
Hovorím, hej, počítač zobraziť mi plavák s percenta f.
Ale ja dávať to 2 celých čísel.
Tak to dopadá, môžem opraviť to v niekoľkých ohľadoch.
>> Mohol som len otočiť jeden do 1,0, a 10 do 10,0, čo by, samozrejme,
má za následok prevedenie je do floats-- stále s nádejou
rovnaký počet.
Alebo sa ukáže, je tu niečo, uvidíme opäť onedlho.
Dalo by sa obsadenie čísla.
>> Môžete pomocou tohto okrúhlych zátvoriek výrazom, môžete povedať,
hej, počítač, vziať 10, o ktorom viem, je int.
Ale zaobchádzať s tým, prosím, ako keby je to float.
Ale to cíti zbytočne zložité.
>> Pre naše účely dnes, Povedzme, doslovne
činí je plávajúca bodovej hodnoty s desatinnou čiarkou, ako je tento.
Nechaj ma ísť dopredu a opakovanie, aby nepresnosť, dobrá, dot lomítko
nepresnosť, vstúpiť.
OK, máme dobrý vzhľad.
>> 1 delené 10, podľa môjho Mac tu, je vskutku 0,100000.
Teraz som sa učil na základnej škole tam by mal byť nekonečný počet 0 rokov.
Takže poďme sa aspoň pokúsiť vidieť niektoré z nich.
Ukazuje sa, že printf je trochu milovník ešte než sme používali.
Ukazuje sa, že nemusíte špecifikovať Len percent f, alebo jednoducho percenta i.
V skutočnosti môžete zadať niektoré kontrolné možnosti tu.
>> konkrétne Idem hovoriť, hej, printf,
v skutočnosti mi ukázať 10 desatinných miest.
Tak to vyzerá trochu divne.
Ale hovoríte percent, bodka, koľko čísel
Ak chcete vidieť po desatinnou čiarkou, a potom f
pre ploché, len preto, že je čo dokumentácie hovorí.
Nechaj ma ísť dopredu a okrem toho, že.
>> A všimnite si tiež, začínam unavený prepisovanie veci.
Takže som proste nastavenie hore a šípka dole na mojej kľúče tu.
A keď som stále biť, tie môžete vidieť všetky príkazy
že som urobil, alebo nesprávne vyrobené.
>> A ja idem dopredu a hneď Nie je vlastne používať, že zdanlivo.
Urobiť Nepresnosť, bodka lomítko imprecision-- tak
čo som sa naučil v základnej škole odhlási.
Dokonca aj keď som ju vytlačiť až 10 desiatkovej ju skutočne je 0,10000.
Ale viete čo?
>> Poďme trochu chamtivý.
Povedzme, ako, ukáž mi 55 poukazuje za desatinnou čiarkou.
Poďme naozaj vziať naprogramovať von na prechádzku.
Nechaj ma prerobiť s make nepresnosť, bodka lomítko, nepresnosť.
>> A tu to máme.
Vaša detstva bola lož.
Zdá sa, že 1 deleno 10 je skutočne 0.100000000000000005551115123--
>> Čo sa deje?
Tak to dopadá, keď sa druh vyzerať dosť ďaleko do podkladových
zastúpenie tohto číslo, to vlastne
nie je presne 1/10, alebo 0,1 a nekonečný počet núl.
A teraz, prečo tomu tak je?
>> No, aj keď je to jednoduchý Číslo na nás ľudí, 1 delené 10,
je to stále jedna z nekonečne veľa čísla, ktoré sme mohli vymyslieť.
Ale počítač môže predstavovať iba konečne veľa takže čísla.
A tak efektívne, čo Počítač sa ukazuje nám je jeho najbližší
približovanie k položke Chceme veriť, je 1/10,
alebo naozaj 0,10000 ad infinitum.
>> Skôr, keď sa jedná tak blízko, ako to môže dostať.
A skutočne, keď sa pozriete pod kapotou
ako sme tu prehliadaním 55 číslic za desatinnou čiarkou,
sme vlastne vidieť, že realitu.
Teraz ako stranou, ak ste niekedy videl movie--
väčšina z vás pravdepodobne haven't-- ale pred Superman 3 niekoľkými rokmi,
Richard Pryor v podstate zadlžujú tento realita v jeho spoločnosti ukradnúť veľa
zlomkov a zlomkoch haliere, pretože company-- ak si dobre spomínam,
bol to while-- bola v zásade zahodili všetko, čo nezapadol
do pojmu centov.
>> Ale ak spočítate všetky tieto malé, malé, drobné čísla znovu,
a znova a znova, môžete, rovnako ako v jeho prípad, urobiť dobrý množstvo peňazí.
>> Ten rovnaký nápad bol oklamaný novšie, ale teraz staršie
film, nazvaný Kancelárske priestory, kde chlapci v tomto filme,
urobil to isté, naskrutkovať ju úplne, skončil s cestou príliš veľa
peniaze na svoj bankový účet.
Bolo to všetko veľmi podozrivé.
Ale na konci dňa, nepresnosť je všade okolo nás.
>> A to tiež môže byť desivo prípad.
Ukazuje sa, že Superman 3 Kancelárske priestory a stranou, tam
môžu byť niektoré veľmi reálne svet následky
z realít nepresný reprezentácie dát
že aj my ľudia do tento deň nemusí nutne
chápať rovnako ako by sme mali, alebo si pamätať tak často, ako by sme mali.
A vskutku, nasledujúci klip z pohľadu na niektoré veľmi reálnom svete
Dôsledky, čo sa stane, keď vás neváži nepresnosť, ktorá
sa môže stať v číslach reprezentácii.
>> [Videoprehrávanie]
>> -Computers, Všetci sme si zvykli na sú často nepríjemné problémy, ktoré
ísť s them-- chýb, vírusov, a softvérové ​​závady,
Pre malé ceny platiť pre pohodlie.
Ale v high-tech a vysokou rýchlosťou vojenský a kozmický program aplikácie,
Najmenší môže problém zväčšovať do katastrofy.
>> Dňa 4. júna 1996, pripravené vedci zahájiť bezpilotné Ariane 5 rakety.
To niesol vedecké satelity navrhnutý
stanoviť presne, ako sa vzájomnému pôsobeniu magnetického poľa Zeme
so solárnymi vetry.
Raketa bola postavená Európska vesmírna agentúra,
a odštartovala z jej zariadení na pobreží Francúzskej Guyany.
>> -Na Asi 37 sekúnd do rokov, sa prvýkrát
Všimol sa niečo deje zle.
Trysky boli otočné v spôsob, ako sa naozaj nemali.
Približne 40 sekúnd do letu, Je zrejmé, že vozidlo bolo v ťažkostiach.
>> A to je, keď oni robili rozhodnutie ho zničiť.
Bezpečnostné dôstojník rozsah, s obrovské čreva, stlačil tlačidlo,
vyhodil raketu, predtým to mohlo predstavovať nebezpečenstvo pre verejnú bezpečnosť.
>> Toto bola panna plavba Ariane 5.
A jeho zničenie vzal miesto z dôvodu chyby
vložené do softvéru rakety.
-The Problém na Ariane bol že existuje celý rad, ktorá
vyžadované 64 bitov vyjadriť.
A chceli previesť to na 16-bitové číslo.
Sa predpokladá, že číslo bolo nikdy
byť veľmi veľká, že väčšina z nich Číslice v 64-bitové číslo boli nuly.
Mýlili sa.
>> -The Neschopnosť jedného Softvérový program prijímať
druh číslo generované Ďalším bol pri koreni zlyhania.
Vývoj softvéru sa stala veľmi nákladné súčasťou novej technológie.
Raketa Ariane boli veľmi úspešný, toľko softvéru
vytvorený pre to bolo tiež použitý v Ariane 5.
>> -The Základným problémom bolo to, že Ariane 5 bol rýchlejší, urýchlením.
A softvér nemal účtuje za to.
>> -The Zničenie rakety Bola to obrovská finančná katastrofa,
všetko kvôli chybe minút softvéru.
Ale to nebol prvý Problémy s konverziou dát časové
bol sužovaný modernej raketovej techniky.
>> -in 1991, so štartom prvej vojny v Perzskom zálive,
Patriot Missile zažil podobný typ
konverzného číslo problému.
A ako výsledok, 28 ľudí, 28 amerických vojakov,
bolo zabitých a asi 100 ďalších zranených,
keď Patriot, ktorý mal chrániť pred prichádzajúcimi Scud,
nedokázal vystreliť raketu.
>> -Keď Irak napadol Kuvajt, a Ameriku zahájená Púštna búrka začiatkom roku 1991,
Patriot Missile batérie boli nasadené chrániť Saudskú Arábiu a Izrael
z irackých raketových útokov Scud.
Patriot je v USA stredného doletu povrch vzduchového systému, vyrábané
od firmy Raytheon.
>> -Veľkosť Patriot Interceptor sama o sebe je asi zhruba 20 stôp dlhý.
A váži asi 2000 libier.
A to so sebou nesie hlavicu asi, Myslím, že to je zhruba 150 libier.
A hlavica je sám o sebe vysoko výbušný, ktorý
Má fragmenty okolo neho.
Puzdro hlavice je navrhnuté tak, aby správať ako hrubé broky.
>> -The Rakety sú vykonávané štyri na kontajner,
a sú prepravované pomocou návesu.
>> -The Patriot protiraketový systém siaha teraz najmenej 20 rokov.
Pôvodne bol vyvinutý ako obranné rakety vzduchu
zostreliť nepriateľské lietadlá.
V prvej vojny v Perzskom zálive, keď tá vojna prišla,
Armáda ju chcel použiť na zostreliť Scud, nie lietadiel.
>> Iracké letectvo bolo Nie je tak veľký problém.
Ale armáda bola starosti Scud.
A tak sa snažili upgrade Patriot.
>> -Intercepting Nepriateľa raketa jede mach 5
šiel byť dosť náročné.
Ale keď Patriot bol behave do prevádzky
armáda nebol vedomý Iracký modifikácie, ktorá vyrobený
ich Pláva takmer nemožné zasiahnuť.
>> Čo sa stalo je, že Pláva prichádzali boli nestabilné.
Boli kymácení.
Dôvodom je to Iračania za účelom
získať 600 kilometrov z 300 kilometer
doletu, vzal váhu z prednej hlavice.
Urobili hlavice ľahší.
>> Takže teraz je Patriot snaží sa prísť na Scud.
A väčšinu času, Drvivá väčšina z času,
to by len lietať podľa Scud.
Akonáhle prevádzkovatelia Systém Patriot si uvedomil, že Patriot minul svoj cieľ,
oni odpálili Patriot v hlavici aby sa zabránilo prípadným obetiam ak sa
nechá spadnúť na zem.
>> -To Je to, čo väčšina ľudí videla, Tie veľké ohnivé gule na oblohe,
a nepochopený as zachytí Scud hlavíc.
>> -Although V noci neba, Patriots sa objavil
byť úspešne ničiť Scud na zahranie,
tam mohol byť žiadna chyba o jeho výkonnosti.
Tam, radarový systém Patriot stratil na prichádzajúce Scud,
a nikdy začal v dôsledku na softvér chybu.
Bolo Izraelčanov, ktorí prvýkrát objavený že čím dlhšie je systém bol na,
tým väčšia je časový nesúlad sa stal v dôsledku hodiny vložené
V počítači systému.
>> -O Dva týždne pred Tragédia v Dhahran,
Izraelčania hlásených ministerstvo obrany
že systém stráca čas.
Po asi osem hodín alebo beh, si všimli, že v systéme
stal sa nápadne menej presné.
Ministerstvo obrany reagovala hovoriť všetky batérie Patriot
nenechať systémy na dlhú dobu.
Oni nikdy nepovedal, čo je to dlhá doba was-- osem hodín, 10 hodín, 1000 hodín.
Nikto nevedel.
>> -The Patriot batérie umiestnený v kasárňach
na zahranie a jej chybné interné Hodiny bol na viac ako 100 hodín
v noci z 25. februára.
>> -Je Sledoval čas s presnosťou asi desatinu sekundy.
Teraz desatín sekundy je zaujímavé číslo,
pretože nemôže byť vyjadrená v binárnom presne, čo
znamená, že nemôže byť vyjadrený presne v každom modernom digitálnom počítači.
Je ťažké tomu uveriť.
>> Ale použiť ako príklad.
Zoberme si číslo jedna tretina.
Tretina nemôže byť vyjadrené v desiatkovej sústave presne.
Jedna tretina je 0,333 deje na nekonečno.
>> Neexistuje žiadny spôsob, ako to urobiť s absolútna presnosť v desiatkovej sústave.
To je presne ten druh problému ktorá sa stala v Patriot.
Čím dlhšia je systém bežal sa horšie sa stala chyba čas.
>> -po 100 hodinách prevádzky Chyba v dobe bol len asi tretina
sekundy.
Ale pokiaľ ide o zacielení raketa jede Mach 5,
to viedlo k sledovaniu Chyba viac ako 600 metrov.
Bolo by fatálna chyba pre vojakov o tom, čo
Stalo je Scud štart bol detekované satelity včasného varovania
a oni vedeli, že Scud bol prichádza vo svojom všeobecnom smere.
Nevedeli, kde sa blíži.
>> -To Bol teraz na radare súčasť systému Patriot
brániť zahranie nájsť a udržať Trať prichádzajúce nepriateľské rakety.
>> -The Radar bol veľmi šikovný.
To by v skutočnosti sledovať poloha Scud,
a potom predpovedať, kde to asi bude nabudúce radar odoslané
pulz von.
Ktorý bol nazývaný rad brána.
>> -Tak, Akonáhle Patriot Rozhodne dosť času má
odovzdaný vrátiť a skontrolovať ďalšie umiestnenie tohto detekovaným objektom,
sa vracia.
Takže keď sa vrátil k zlý Namiesto toho potom nevidí žiadny objekt.
A to sa rozhodne, že neexistuje objekt, išlo o falošné detekcie,
a upustí stopu.
>> -The Prichádzajúce Scud zmizol z obrazovky radaru.
A sekúnd neskôr ho narazila do kasární.
Plávať zabila 28, a bol posledný jeden vystrelil počas prvej vojny v Perzskom zálive.
>> Je tragické, že aktualizovaný softvér dorazil zahranie nasledujúci deň.
Softvér vada mala Bolo opravené, zatváranie
jedna kapitola v problémovej História Patriot rakety.
>> [Videoprehrávanie]
David J. Malan: Tak toto je všetko povedať, že tieto otázky prepadu
a nepresnosti sú až príliš reálne.
Tak ako sme sa sem dostali?
Začali sme sa rozprávali o printf.
Opäť platí, že táto funkcia, ktorá vytlačí niečo na obrazovku,
a zaviedli sme potom niekoľko ďalších funkcií
z tzv knižnice CS50 je.
A budeme aj naďalej pozri nich v stanovenej lehote.
A my, a to najmä, ktorý sa používa get reťazec, a získať int, a teraz tiež získať float,
a napriek tomu iní stále sa stretávame s a používať sami onedlho.
>> Ale občas, majú sme už videli potrebu
ukladať, čo tieto funkcie ruka späť?
Oni nás späť reťazec ruky, alebo int, alebo float.
A niekedy musíme dať, že reťazec, alebo int, alebo float, niekde.
>> A ukladať tie veci, pripomínajú len rovnako ako v Scratch, máme premenné.
Ale na rozdiel od Scratch, v jazyku C máme skutočné typy
z variables-- dát typy, viac generally--
medzi nimi, reťazec, int, je plávať, a tí ostatní v pokoji.
>> A tak, keď budeme deklarovať premenné v jazyku C, budeme musieť deklarovať naše dátové typy.
To nie je niečo, čo bude musieť urobiť neskôr v priebehu semestra
ako sme prechod do iných jazykov.
Ale teraz, my potrebujeme sa a priori v predstihu,
vysvetliť, aký typ počítača premenné chceme, aby nám dať.
>> Teraz sa medzitým pre tlač tieto druhy dátových typov,
musíme povedať printf, čo môže očakávať.
A my sme videli percent ov pre sláčiky, a percento aj pre celé čísla,
a niekoľko ďalších už.
A tie sú proste požiadavky pre vizuálne prezentácie
týchto informácií.
>> A každý z nich môže byť v skutočnosti parametrized alebo vylepšil nejakým spôsobom,
Ak chcete ďalej ovládať typ výstup, ktorý dostanete.
A v skutočnosti sa ukázalo, že nielen Je tam spätné lomítko n pre nový riadok.
Je tu ešte niečo nazýva spätné lomítko R pre návrat vozíka, čo
je viac podobný k old school písací stroj,
a tiež Windows používa po mnoho rokov.
>> Tam je spätné lomítko t na kartách.
Ukázalo sa, že ak chcete dvojité úvodzovky vnútri reťazca,
Pripomeňme si, že sme použili úvodzovky double
citát vľavo a vpravo Konce našich reťazcoch tak ďaleko.
To by Zdá sa zmiasť veci.
>> Ak chcete dať úvodzovky v Uprostred string-- a samozrejme,
to je mätúce vidieť.
A tak budete musieť utiecť, takže sa hovoriť, s niečím, čo si úvodzovky
ako je doslova spätná lomky úvodzovky.
A je tu ešte niekoľko ďalších.
A uvidíme viac z tých, v skutočnom užívanie onedlho.
>> Takže poďme teraz prechod od dát a reprezentácie,
a aritmetické operátory, všetko z ktorých nám dal nejakú budovu
bloky, s ktorými hrať.
Ale teraz poďme skutočne dať us zvyšok slovníka
že sme už mali minulý týždeň Scratch
tým, že sa pozrieť na niektoré ďalšie konštrukty C- nie všetky z nich.
Ale myšlienky sme asi vidieť naozaj len
zdôrazniť preklad z jeden jazyk, Scratch, do druhého, C.
>> A v priebehu času, budeme vyzdvihnúť Ďalšie nástroje pre našu Toolkit
tak povediac, syntakticky.
A skutočne, uvidíte, že myšlienky sú teraz skôr známe z minulého týždňa.
Tak ideme na to.
>> Poďme ďalej a vybičovať program že v skutočnosti používa niektoré výrazy,
Boolean výraz.
Nechaj ma ísť napred tu a vytvoriť nový súbor.
Zavolám tento condition.c.
>> Nechaj ma ísť dopredu a zahrnúť knižnicu CS50.
A nechaj ma ísť dopredu a zahŕňajú Štandardné IO.H pre naše funkcie,
a printf, a ďalšie, resp.
Dovoľte mi, aby som sám seba, že často používaný vo int main neplatné, ktorého vysvetlenie zmienime
vrátiť sa v budúcnosti.
>> Teraz mi dovoľte ísť dopredu a dať Sám int cez get int.
Tak ma nechaj ísť dopredu a to urobiť.
Chcem povedať, či aj je less-- poďme rozlišovať medzi pozitívne, negatívne,
alebo nulové hodnoty.
>> Takže ak aj je menšia ako nula, dovoľte mi, aby som stačí tento program jednoducho povedať,
negatívne spätné lomítko n, inak ak aj je väčšia ako nula.
Teraz som samozrejme chcel povedať printf pozitívne, spätné lomítko n.
A potom ešte if-- by som mohol urobiť.
>> Mohol by som robil, keby som rovná 0.
Ale ja by som treba robiť na aspoň už jedna chyba.
Pripomeňme si, že znamienko rovnosti je nerovná, ako my ľudia to vedia.
>> Ale je to operátor priradenia.
A my nechceme, aby sa na 0 vpravo a vložte ho do aj na ľavej strane.
Tak, aby sa vyhli nejasnostiam, alebo Možno zneužitie rovná sa,
Ľudia sa rozhodol pred niekoľkými rokmi že v mnohých programovacích jazykoch
keď chcete skontrolovať rovnosť medzi ľavým a vpravo,
budete skutočne používať rovná rovná.
Takže ste hit znamienko rovnosti dvakrát.
Ak chcete priradiť sprava doľava, môžete použiť jediný znamienko rovnosti.
Takže sme mohli urobiť inak tohle-- ak aj rovná sa rovná nule.
>> Mohol by som potom ísť a otvorím zložené zátvorky,
a hovoria, printf 0, lomítko n, hotovo.
Ale pamätajte, ako tieto vidličky na ceste môže fungovať.
A naozaj, len premýšľať o logike.
i je číslo.
Je to celé číslo, konkrétne.
A to znamená, že to bude menej ako 0 alebo väčšia ako 0, alebo 0.
Takže tam je v istom zmysle to implicitné štandardný prípad.
>> A tak by sme mohli, rovnako ako Scratch, upustiť od else if,
a jednoducho povedať inde.
Logicky, ak vám programátor vedieť, že je to len
Tri vedierka, do ktorého scenár môže fall-- prvý,
druhý, alebo tretí v tomto case-- nie
obťažovať pridanie ďalšieho presnosť a ďalšie logika tam.
Jednoducho ísť dopredu s Predvolené prípad od iného.
>> Teraz sa poďme vpred po uložení to, aby
Podmienky dot lomítko conditions-- Nie je to skvelý užívateľské rozhranie,
Pretože nie som pobádať Užívateľ, ako som už spomenul.
Ale to je v poriadku.
Necháme to jednoduché.
Skúsme číslo 42.
A to je pozitívny.
skúsme číslo Negatívny 42, negatívne.
>> Skúsme hodnotu 0.
A skutočne to funguje.
Teraz uvidíte s problémy predtým, než Dlhé testovanie veci trikrát,
pravdepodobne nie je dostačujúce.
Pravdepodobne budete chcieť vyskúšať niektoré Väčšie čísla, niektoré menšie
Čísla, niektoré rohové prípady, as dôjdeme k ich popisu.
>> Ale teraz je to celkom jednoduchý program.
A som si istá, logicky, že spadá do troch prípadoch.
A skutočne, aj keď sme len zamerala na potenciálne tienisté stránky
nepresnosť a prepadu, v reality, kde je veľa problémov CS50 je,
nebudeme sa báť o, po celú dobu,
tieto otázky prepadu a nepresnosť, pretože v skutočnosti, v C,
je to vlastne nie je všetko, ľahko vyhnúť sa tie veci.
Ak chcete spočítať väčšie a väčšie a väčšie,
to dopadá existujú techniky, ktoré Môžete použiť, často zahŕňať veci zvanej
knižníc, zbierok kódu, aby ostatní ľudia písali, ktoré môžete použiť,
a iné jazyky, ako je Java a ďalšie, v skutočnosti
aby bolo oveľa jednoduchšie počítať ešte vyššia.
Takže je to naozaj niektoré z týchto nebezpečenstiev funkcií jazyka, ktorý používate.
A v najbližších týždňoch budeme vidieť, ako nebezpečné C v skutočnosti
môže byť, ak nechcete používať správne.
Ale odtiaľ, as Python a JavaScript, bude
máme vrstvu na niektoré dodatočné ochrany, a spustiť menej týchto rizík.
>> Takže poďme urobiť trochu viac Zaujímavý logika v našom programe.
Tak nechaj ma ísť dopredu a vytvoriť program s názvom Logical
Len tak môžem hrať s niektorými Skutočná logika, logical.c.
Budem stačí skopírovať a vložiť niektoré Kód z minulosti, takže sa vrátim
k tejto peknej východiskového bodu.
>> Nech mi tentoraz robiť char C. Som chystá dať mu meno C
len preto, že je to obvyklé, získať charakter od užívateľa.
A poďme predstierať, Ja sa vykonáva časť
Rm tohto programu je odstrániť Program pred tým vyzvanie užívateľa
na odstránenie súboru.
Ako by sme mohli urobiť?
>> Chcem povedať, či C sa rovná rovná, citácie koniec citátu,
y, potom budem predpokladať, že užívateľ zvolil áno.
Práve idem k tlači áno.
Ak by bolo skutočne písanie Program odstránenie,
môžeme odobrať súbor s viac riadkov kódu.
Ale budeme držať to jednoduchý.
>> Else if c rovná sa rovná n- a teraz tu, budem hovoriť,
užívateľ musí mať znamená nie.
A potom ešte, viete čo?
Neviem, čo iného Užívateľ bude písať.
Takže som len chcel povedať, že že je chyba, bez ohľadu
on alebo ona vlastne napísal.
>> Takže to, čo sa tu deje?
Tam je zásadný rozdiel proti, čo som urobil v minulosti.
Úvodzovky, úvodzovky, dvojité citácie, a napriek tomu jednoduché úvodzovky,
jednoduché úvodzovky.
Ukazuje sa, že v C, že keď Ak chcete napísať reťazec
použijete úvodzovky, rovnako ako máme Používam celú tú dobu sa printf.
>> Ale ak chcete riešiť len Jeden znak, tzv char,
potom ste skutočne používať apostrofy.
Tí z vás, ktorí si naprogramovať skôr, pravdepodobne nebude mať
musel starať o to Rozdiel v niektorých jazykoch.
V jazyku C, to záleží.
A tak keď som si char a ja chcem pristúpiť k porovnaniu tohto char pomocou rovná
sa rovná nejaké písmeno, ako je y alebo N, ja, v skutočnosti, je potrebné mať apostrofy.
>> Teraz poďme do toho a to dosiahnuť.
Poďme ďalej a robiť, aby logické bodka lomítko logické.
A teraz som boli vyzvaní.
Takže, podľa všetkého, lepšie užívateľskú skúsenosť by mi vlastne povedať, čo robiť tu.
Ale idem len slepo hovoria, Y áno, OK, pekný.
>> Povedzme to znovu spustiť, n po obdobie nie, pekný.
Predpokladajme, že rovnako ako u niektorých ľudí, ktorých poznám, moji Caps Lock kľúč je príliš často.
Takže ja kapitál Y, vstupovať, došlo k chybe.
OK, to nie je presne to, čo som očakával.
V skutočnosti, že počítač robí doslova čo
Povedal som to do-- kontrolu malé písmená Y a malé písmená n.
To nemá pocit, že dobrá užívateľské skúsenosti, hoci.
Spýtam sa pre a prijímam buď malé písmená alebo veľké písmená.
Tak to dopadá, možno budete chcieť hovoriť niečo ako vo Scratch,
rovnako ako doslovne alebo C sa rovná rovná sa kapitálu jednotnej citovanou y.
Ukázalo sa, že C nemá tento doslovný kľúčové slovo alebo.
>> Ale má dve zvislé pruhy.
Musíte sa držať Shift obvykle, Ak používate americkú klávesnicu,
a udrel na zvislý pruh Kľúčovým nad spiatočnej kľúč.
Ale to zvislá čiara zvislá čiara znamená alebo.
>> Pokiaľ naopak, chceli sme hovoriť a rovnako ako v Scratch,
by sme mohli urobiť ampersand znaku at.
To nedáva logický zmysel tu, pretože človek nemohol
zadali obaja y a malé písmená y a kapitál Y ako rovnaký znak.
Takže alebo je to, čo máme v úmysle tu.
>> Takže keď som to urobiť v oboch miestach alebo C rovná sa rovná kapitál N, teraz znovu spustiť,
make logické, spustite logické.
Teraz môžem písať y.
A môžem to urobiť znovu kapitál Y, alebo kapitál N.
A mohol by som pridať ďalšie kombinácia pokoja.
>> Tak toto je logickým Program ak teraz
Ja kontrola logicky pre táto hodnota alebo je táto hodnota.
A nemám na nevyhnutne prísť s ďalšími dvoma IFS Alebo keby.
Môžem skutočne spojiť niektoré z súvisiace logiku dohromady týmto spôsobom.
Takže by to bolo lepšie navrhnuté tak, ako len
povediac: Ak C sa rovná malými písmenami y, tlačiť áno, inak či c rovná kapitálu Y,
tlačiť áno, inak či c rovná lower-- inými slovami,
nemusíte mať stále viac a viac pobočiek.
Môžete kombinovať niektoré z ekvivalentu vetvy Logicky teda týmto spôsobom.
>> Takže poďme sa pozrieť na len jeden finálna prísada, jeden Finálny konštrukt,
ktorý umožňuje C.
A vrátime sa v Budúce ostatným ešte.
A potom budeme uzatvárať prehliadaním o teplote správnosti code--
dostať kód work-- ale dizajn kódu, a zasadiť semienka tie čoskoro.
>> Tak nechaj ma ísť dopredu a otvárajú nový súbor tu.
Vieš čo?
Chystám sa znova zaviesť že rovnaký program,
ale s použitím iného konštruktu.
>> Tak mi dajte rýchlo dať sám Prístup zahrnúť CS50.h
pre knižnicu CS50, Štandardné IO.H pre printf.
Daj mi moje int main neplatné.
A potom tu, nech ma ísť dopredu a to urobiť.
>> Char c dostane dostať char, rovnako ako predtým.
A budem používať nový konštrukt now-- spínač, na aký charakter?
Takže prepínač je niečo ako spínanie koľaje.
Alebo, naozaj, to je v istom zmysle if iné, ak else if,
ale písaný trochu inak.
>> Prepínač vyzerá takto.
Máte vypínač a potom to, čo znak alebo číslo, ktoré chcete prezrieť,
potom niektoré zložené zátvorky ako v Scratch, stačí povedať robiť toto.
A potom máte rôzne prípady.
>> Nemusíte použiť, ak a inde.
Doslova používať prípad slovo.
A vy by ste povedať niečo také.
>> Takže v prípade malými písmenami y, alebo v prípade, že Y kapitálu,
pokračujte a vytlačiť áno.
A potom vypukne spínača.
To je všetko.
Skončili sme.
>> Else if, tak povediac, malé písmená n, alebo N kapitál,
potom choďte do toho a tlač out nie, a potom zlomiť.
Else-- a tento druh je štandardný prípad indeed-- printf error--
a len pre istotu, hoci Logicky táto prestávka nie je nutné
preto, že sme na konci prepínače tak ako tak,
Ja som teraz vypadla z prepínača.
Takže to vyzerá trochu inak.
>> Ale logicky, je to v skutočnosti ekvivalentné.
A prečo by ste mali používať jeden nad druhým?
Niekedy proste osobné preferencie, Niekedy estetika,
keď som sa pozrel na to Teraz je tu niečo,
Treba povedať, pre čitateľnosť tohto kódu.
Myslím, nevadí skutočnosť, že toto Kód je nová pre mnohých z nás v miestnosti.
>> Ale to len tak je dosť.
Vidíte malé písmená Y, Y kapitálu, malé písmená n, kapitál N default,
to len trochu skoky na vás takým spôsobom,
že pravdepodobne, možno Predchádzajúci príklad
s IFS a zvislé pruhy, a inde IFS, nemusí mať.
Tak to je naozaj vec osobné voľba, naozaj, alebo čitateľnosť,
kódu.
>> Ale pokiaľ ide o funkčnosť, dovoľte mi, aby som pokračovať a robiť spínač, dot lomítko
switch, a teraz písať malými písmenami y, kapitál Y, malé n, kapitál N,
David, znovu pretože to je ani jeden znak.
Urobme x, chyba, ako sa očakávalo.
A logically-- a to je niečo, Chcel by som povzbudiť v general-- dokonca
aj keď sme len poškriabaniu Povrch niektoré z týchto funkcií.
>> A to nemusí byť zrejmé, keď vás si sadnúť na klávesnici,
Ako to funguje?
Čo by to urobiť?
Krásna vec, o ktoré majú notebook alebo desktop, alebo prístup
k počítaču pomocou prekladača, a s editora kódu, ako je táto,
sa môžete takmer vždy odpovedať na tieto otázky pre seba len pokúša.
>> Napríklad, ak je rétorická otázka po ruke boli,
čo sa stane, keď zabudnete prestávky na výroky?
Čo je vlastne veľmi časté, čo robiť,
pretože to nevyzerá ako by ste naozaj potrebujú.
Nemajú naozaj dokončiť svoj myslel ako zátvorke alebo kučeravé
rovnátka robí.
Poďme ďalej a překompilovat kód a uvidíme.
Tak, aby spínač, bodka lomítko prepínač.
Poďme písať malými písmenami y, vrchný prípad, Enter.
Tak som napísal y.
>> Program povedal, že áno, nie, chyba, ako by to bolo mení svoj názor.
Ale celkom to bolo, pretože to, čo sa deje s vypínačom sa o prvý prípad, že
Zápas v podstate znamená, hej počítač, vykonať všetky kód pod ňou.
A ak nechcete povedať zlomu, alebo Nehovorte pauzu, alebo nehovorte pauzu,
Počítač bude fúkať cez všetky tie linky
a vykonávať všetky z nich, kým sa dostane do tej zloženú zátvorkou.
Takže brzdy sú skutočne nevyhnutné.
Ale stánok s jedlom tu je, keď pochybností, skúsiť niečo.
Možno uložiť prvý kód, alebo ich uložiť do iného súboru
ak ste naozaj starosti poplietol a museli obnoviť
dielo, ktoré viete, že funguje.
>> Ale skúste veci.
A nebuďte ako strach, snáď, z toho, čo počítač môže robiť,
alebo že by ste mohli niečo rozbiť.
Vždy sa môžete vrátiť späť do istej staršej verzie.
>> Takže poďme končí pohľadom pri konštrukcii kódu.
Máme teraz túto schopnosť písať Podmienky a zápis slučky,
a premenné a funkcie volania.
Takže úprimne povedané, sme trochu späť na kde sme boli pred týždňom sa Scratch,
hoci s menej presvedčivé textovej Prostredie ako Scratch dovolí.
>> Ale všimnite si, ako rýchlo sme získali že slovnú zásobu, aj keď je to
bude chvíľu trvať prepadať, tak, že teraz môžeme použiť tento slovnú zásobu
písať ďalšie zaujímavé programy.
A poďme sa dieťa krok ku ktorej takto.
Nechaj ma ísť dopredu a vytvorenie nového súboru tu.
>> Idem to nazývať prototype.c, a zaviesť
Prvýkrát, schopnosť vytvoriť svoj vlastný funkcie.
Niektorí z vás môžu mať urobil to s Scratch,
kde si môžete vytvoriť svoj vlastné užívateľské bloky v základe,
a potom pretiahnuť na miesto všade tam, kde by ste chceli v C.
A vo väčšine programov jazyky, môžete to urobiť presne to,
že-- vytvoriť svoj vlastný funkcie, v prípade, že už neexistujú.
>> Tak napríklad, nechajte ma ísť napred a zahŕňajú CS50.h, a zahŕňajú
Štandardné IO.H, int main neplatné.
A teraz máme zástupného pripravený ísť.
Stále tlač veci rovnako ako mená ľudí dnes.
A to cíti jako-- by nemal byť pekné, keby tam
boli funkciu nazvanú názov tlačového?
Nemám použiť printf.
Nechcem mať na pamäti, Všetky formátu kódy.
Prečo nie ja, alebo prečo nie niekto predo mnou,
Vytvorenie funkcie nazýva tlač meno, že vzhľadom na to nejaké meno,
jednoducho vytlačí ho von?
>> Inými slovami, keď poviem, hej, počítač, daj mi reťazec
tým, že žiada užívateľov o také, pomocou funkcie get reťazec CS50 je.
Hej, počítač, dal, že reťazec premenná na ľavej strane,
a nazvať to.
A potom, hej počítač, pokračuj a vytlačiť to meno osoby, hotovo.
>> Teraz by to bolo pekné, pretože tento program, vhodne pomenovaný,
mi povie, čo to má robiť prostredníctvom mien tých, fungovali je.
Nechaj ma ísť a robiť prototyp, Enter.
A, bohužiaľ, toto sa nebude lietať.
>> Prototype.c, riadok 7, znak 5, chyba, implicitné vyhlásenie
z funkcie mená tlačového je neplatný v C99, C99
znamenať verzii C ktorá vyšla v roku 1999.
To je všetko.
>> Tak neviem, čo To všetko znamená, že doteraz.
Ale mám rozpoznať chybu v červenej farbe.
To je celkom zrejmé.
>> A zdá sa, že s zelená znak tu,
je problém s názvom tlače, otvorený Paren s, zavrieť zátvorka, semi-hrubého čreva.
Ale implicitné vyhlásenie Funkcia sme krátko predtým videl.
To znamená, jednoducho, že Clang nevie, čo mám na mysli.
>> Použil som slovo, slovnú zásobu, že je Nikdy nevidel, ani učili predtým.
A tak to musím naučiť čo táto funkcia znamená.
Takže ja idem dopredu a urobiť to.
>> Chystám sa ísť dopredu a realizovať moje vlastné volanie funkcie Print Name.
A budem hovoriť, ako vyplýva, že Robí to, printf, ahoj, percentá
s, lomítko n, meno, bodkočiarka.
Tak čo som práve urobil?
>> Tak to dopadá, aby implementovať svoje vlastné funkcie,
sme trochu požičať niektoré rovnakú štruktúru ako hlavný
že sme práve boli považovaná za samozrejmosť, a ja
viem len kopírovanie a vkladanie presne to, čo
Písal som v minulosti.
Ale všimnite si vzor tu.
Int, Main, Void, budeme šprýmař oddelene netrvalo dlho, čo to vlastne znamená.
>> Ale pre dnešok, len Všimnite si, súbežnosť.
Void, tlač názvu, string name, takže je tu
nachový kľúčových slov, ktoré ideme na začiatok
volá návratový typ, názov funkcie, a potom vstup.
Takže v skutočnosti, možno destilovať tento druh ako minulého týždňa
pretože sa jedná o názov alebo Algoritmus kódu ktorom sme
bude write-- algoritmus podkladových
Kód budeme písať.
>> To je jeho vklad.
To je jeho výstup.
Táto funkcia, názov tlač, je navrhnuté tak, aby reťazec s názvom názov,
alebo čokoľvek iné, ako vstup, a potom neplatné.
To nič nevracia, ako dostať reťazec alebo získať int robí.
Tak to bude mi niečo odovzdať späť.
Je to len bude mať Vedľajším efektom, tak povediac,
tlačiť meno osoby.
Takže si všimnúť, riadok 7, I môžu volať mená tlače.
Riadok 10, môžem definovať alebo zaviesť názov tlače.
Ale, bohužiaľ, to nestačí.
>> Nechaj ma ísť dopredu a překompilovat to po uložení.
Whoa, teraz som to urobil horšie, by sa mohlo zdať.
Takže implicitné vyhlásenie názov funkcie tlače je neplatná.
A opäť je tu ďalšie chyby.
Ale ako som varoval už skôr, a to aj ak sa dostanete zahltení,
alebo trochu smutné vidieť toľko Chyby, zamerať sa len na prvé
spočiatku, pretože by to mohlo len mali kaskádový účinok.
Takže C, alebo Clang konkrétnejšie, stále nerozpozná názov tlače.
>> A to preto, že Clang, zámerné, je tak trochu hlúpy.
To len robí to, čo si to povedať robiť.
A to robí len preto, v poradí v ktorom sa povedať robiť.
>> Tak som definované hlavné on-line štyri, rovnako ako sme robili dosť často.
Ja som je definovaný názov tlačového na riadku 10.
Ale ja sa snažím používať názov tlačového na linke sedem.
>> Je to príliš skoro, ešte neexistuje.
Takže som mohol byť šikovný, a to ako, OK, takže poďme len hrať spolu,
a pohybovať názov tlačového hore tu, a znovu zostaviť.
Panebože.
Fungovalo to.
Bolo to tak jednoduché, ako to.
>> Ale logika je presne to.
Musíte sa naučiť, čo to Clang je, že sa najprv definuje funkciu.
Potom ho môžete použiť.
Ale, úprimne povedané, to cíti ako šikmú plochu.
>> Takže zakaždým, keď som bežať na problém, som len
bude pre zvýraznenie a skopírujte kód Napísal som, nakrájajte a vložte ho sem.
A iste, mohli by sme vymyslieť niektoré scenáre
kde jedna funkcia by mohol treba volať iný.
A vy jednoducho nemôže dať každý Funkcia nad každý iný.
>> Tak to dopadá tú lepším riešením.
Môžeme nechať to byť.
A úprimne povedané, je to všeobecne pekné, a pohodlné, a dobrý dizajn
aby hlavné prvý, pretože, opäť, Hlavným rovnako ako kliknutie zelená vlajka,
že je funkcia, ktorá dostane popravený v predvolenom nastavení.
Takže si pokojne dať že v hornej časti súboru
takže keď vy alebo niektorý Iný človek pozrie na súbor
viete, čo sa deje jednoduchým prečítaním hlavné prvý.
Tak to dopadá, môžeme povedať Clang proaktívne, hej, Clang na linke štyri,
Sľubujem, že budem realizovať funkcia nazvaná Tlač
Názov, ktorý má názov reťazec s názvom ako vstup a vráti nič, void.
A budem dostať okolo vykonávanie neskôr.
>> Prichádza Main.
Hlavným teraz na linke 9 môžu používať Názov tlačového pretože Clang
dôveruje, že nakoniec, že narazia definíciu
implementácia Print Name.
Takže potom, čo mi zachránil súboru, nech ma ísť dopredu a vytvoriť prototyp,
vyzerá dobre tentokrát.
Dot lomítko, prototyp, dovoľte mi, aby som pokračovať a zadať názov.
David Ahoj Davide, Zamil, ahoj Zamil, a, naozaj, teraz to funguje.
>> Takže zložka je, že máme urobil vlastné funkcie, ako zvyk
Scratch blok my ju volá.
Ale na rozdiel od nuly, kde si môžete Len ju vytvoriť a začať používať,
Teraz musíme byť trochu pedantská,
a vlastne trénovať Clang používať, alebo ju čaká.
Teraz, ako stranou, prečo celú tú dobu majú sme boli len slepo na viere, vrátane
CS50.h vrátane štandardného IO.H?
>> Tak to dopadá, Medzi niekoľko ďalších vecí,
všetko, čo je v tých dot h Súbory, ktoré sa dejú byť súborov.
Sú hlavičkové súbory, tak povediac.
Sú stále napísaný v C. Ale oni sú iný typ súboru.
>> Pre túto chvíľu, môžete do značnej miery predpokladať, že všetko, čo je vo vnútri CS50.h
Je niekto vtipy, ako je táto, nie pre funkcie s názvom Print Name,
ale k Get reťazec, Get Float, a niekoľko ďalších.
A existujú podobné prototypy, jeden vložky, vnútri štandardného IO.H
pre printf, ktorá je teraz v moje vlastné tlače názov funkcie.
Takže inými slovami, celá táto doba máme práve slepo kopírovanie a vkladanie
patrí to, zahŕňajú to, čo sa deje?
To sú len trochu stopy k rinčanie pokiaľ ide o aké funkcie
sú skutočne realizované, len inde v rôznych súborov
inde v systéme.
>> Takže sme implementovaný meno tlače.
To predsa má tento nežiaduci účinok tlač niečo na obrazovke.
Ale to nie je v skutočnosti podaj mi niečo späť.
Ako môžeme ísť o vykonávania programu, ktorý
to mi podať niečo pre seba?
>> Dobre, skúsme to.
Nechaj ma ísť dopredu a realizovať súbor nazvaný return.c
takže môžeme ukázať, ako niečo rovnako ako Get reťazec, alebo získať Int,
je vlastne vracia niečo späť užívateľovi.
Poďme ďalej a definovať int main neplatné.
>> A opäť v budúcnosti, my budeme vysvetlí, čo to int i tú prázdnotu
je v skutočnosti robí.
Ale pre dnešok, zmienime brať ako samozrejmosť.
Chystám sa ísť dopredu a printf, pre dobrú užívateľské skúsenosti, x je.
A potom budem čakať na Užívateľ dať mi x s get int.
>> A potom budem pokračovať a vytlačiť x na námestí.
Takže keď máte len klávesnica, ľudia obyčajne
použite malú mrkvu symbol na klávesnici
reprezentovať na napájanie z nej alebo exponent.
SOx druhou je prítomný aj.
>> A teraz budem robiť.
Mohol by som do--, čo je x na druhú? x Squared je x krát x.
>> A my sme to urobili niektorí Pred časom už dnes.
To nemá pocit, všetko, čo veľký pokrok.
Vieš čo?
Poďme využiť niektoré z tejto myšlienky od minule abstrakcie.
>> Nebolo by pekné, keby tam je funkcia nazvaná
štvorec, ktorý robí presne to?
To ešte na konci deň, robí tú istú matematiku.
Ale poďme abstraktné preč myšlienky o venovanie
jedno číslo vynásobí Ďalším, a len dať mu meno,
ako štvorec túto hodnotu.
>> A, inými slovami, v C, poďme vytvoriť funkciu
volal štvorec, ktorý robí presne to.
Bude to nazvať štvorcových.
Bude to trvať int.
A my bude len nazývajú n, v predvolenom nastavení.
>> Ale my sme mohli nazvať niečo chceme.
A všetko, čo to bude áno, doslova, je návrat
výsledok n-krát n.
Ale preto, že je vracať niečo, ktorý
je kľúčové slovo vo fialovej máme Nikdy predtým nevidel, som na linke 11,
Nemožno jednoducho povedať void tentoraz.
>> Neplatné, v tomto príklade sme práve videli skôr názvu tlače, jednoducho znamená,
urob niečo.
Ale nie je mi odovzdať niečo späť.
V tomto prípade, ja chcem Pre návrat n krát n,
alebo čo to je, že číslo.
>> Takže nemôžem povedať, hej, počítač, Ja nič vrátiť, neplatné.
Bude to návrat zo svojej povahy, int.
A tak to je všetko, čo sa tu deje.
>> Vstup na námestí bude int.
A tak, že ju môžeme použiť, musí majú meno, N. To bude výstup
int, ktorý nepotrebuje meno.
Môžeme to nechať na hlavnej, alebo ten, kto je pomocou ma pamätať túto hodnotu Keby sme
chcieť s vlastným premenné.
>> A opäť, jedinou novou Tu je kľúčové slovo Return.
A ja som len robil nejakú matematiku.
Keby som naozaj chcel byť zbytočné, Mohol by som povedať, int výrobok dostane n-krát n.
>> A potom by som mohol povedať, vrátiť výrobok.
Ale opäť, aby môjho uhla čo nastane skôr to jednoducho nie je dobré design--
podobne, prečo zaviesť názov, symbol, rovnako ako výrobok,
len preto, aby okamžite vrátiť?
Je to trochu čistejšie, o niečo silnejší, takže
hovoriť, len povedať návrat n-krát n, zbaviť sa tejto línie úplne.
>> A je to len menej kódu na čítanie, menej príležitostí k chybám.
A uvidíme, či to v skutočnosti teraz pracuje.
Teraz, ja idem dopredu a robiť návrat.
>> Uh-oh, implicitné deklarácie funkcie.
Urobil som túto chybu predtým, žiadny veľký problém.
Dovoľte mi písať, alebo zvýrazniť a kopírovať, ten istý prototyp funkcie,
alebo podpis, funkcia tu.
Alebo by som mohol pohybovať celú funkciu.
>> Ale to je trochu lenivý.
Takže nebudeme robiť.
Teraz mi dovoľte vrátiť Znovu dot návrat lomítko.
>> x je 2. x na druhú je 4. x je 3. x druhou 9.
A funkcie sa zdá Teraz je potrebné pracovať.
Takže to, čo je tu v tom rozdiel?
Mám funkciu, ktorá sa nazýva štvorec, V tomto prípade, ktorý som dal na vstupe.
A ja sa vrátim výstup.
A napriek tomu, skôr, pokiaľ Otvorím iný príklad
z minulosti, čo Bol nazývaný prototype.c,
Mal som tlačovú meno, ktoré vrátil neplatné, tak povediac,
Alebo sa vrátila nič, a jednoducho mala nežiaduci účinok.
>> Takže to, čo sa tu deje?
No, zvažovať funkciu dostať reťazec len na okamih.
Boli sme pomocou funkcie dostať reťazec v nasledujúcom spôsobom.
>> Mali sme funkcie dostať reťazec, ako napríklad: CS50.h,
zahŕňajú štandardný IO.H, int main, neplatné.
A potom zakaždým, keď som volal get reťazec tak ďaleko,
Povedal som niečo ako reťazec s dostane dostať reťazec, pretože get string--
hovorme tento get.c-- get reťazec Samotný vracia reťazec, ktorý môžem potom
použiť, a hovoria, ahoj, čiarka, percent s, lomítko n, s.
>> Tak toto je rovnaký príklad, v skutočnosti, že sme mali predtým.
Tak sa vráti reťazec hodnotu.
Ale pred chvíľou, tlačový reťazec nevracia hodnotu.
To jednoducho má vedľajšie účinky.
Tak to je zásadný rozdiel.
Videli sme odlišný typy funkcií teraz,
z ktorých niektoré sa vrátili hodnôt, z ktorých niektoré nie sú.
Takže možno je to reťazec alebo int, alebo float.
Alebo možno je to len neplatné.
>> A rozdiel je že tieto funkcie, ktoré
získať dáta a vrátiť hodnotu sú vlastne prinášať niečo späť ku stolu,
tak povediac.
Tak poďme do toho a pozrite sa na jeden posledný sadu
príkladov, ktoré dáva zmysel, teraz z ako by sme mohli skutočne abstraktné lepšie,
a lepšie a lepšie, alebo viac, a ďalšie a ďalšie, v poradí
písať, nakoniec, lepšie kód.
Poďme do toho, a v duchu Scratch, vykonajte nasledujúce kroky.
>> Nechaj ma ísť dopredu a zahŕňajú CS50.h a štandardné IO.h.
Nechaj ma ísť dopredu a dať Sám int, hlavné, neplatné.
A nechaj ma ísť napred, volať toto cough.c.
>> A nechaj ma ísť dopredu a len ako Scratch, vytlačiť kašeľ / N.
A ja chcem urobiť trikrát.
Takže som samozrejme len tak skopírovať a vložiť trikrát.
Ja som teraz bude robiť kašeľ dot lomítko kašeľ.
Dajme sám trochu viac priestoru Tu, Enter, kašeľ, kašeľ, kašeľ.
>> Tam je, samozrejme, už teraz príležitosť pre zlepšenie.
Ja som skopírovať a vložiť párkrát dnes.
Ale to bolo len tak ja nie musieť zadať toľko znakov.
Aj napriek tomu čo zmenil tieto riadky kódu sú.
>> Tieto tri riadky sú identické, ktorý sa cíti leniví, a samozrejme tak,
a pravdepodobne nie je správny prístup.
Takže s tým, čo prísada môžeme zlepšiť tento kód?
Nemáme skopírovať a vložiť kód.
>> A vskutku, kedykoľvek máte pocit, yourself kopírovanie a vkladanie,
a to dokonca k zmene kódu, šance sú tam lepší spôsob.
A naozaj, tam je.
Nechaj ma ísť dopredu a urobiť pre sláčiky, aj keď možno nie syntaxe
prísť ešte prirodzene.
>> Tieto klávesy stlačte trikrát, jednoducho tým, že robí following--
a ja náhodou viem z praxe.
Ale máme rad príkladov teraz.
A uvidíte on-line Ďalšie referencie v pokoji.
>> To je syntax na riadku 6, ktoré podobne ako Scratch, ktorý sa opakuje
blok, opakujte nasledujúce trikrát.
Je to trochu magické teraz.
Ale to dostane viac, a známejší.
>> A to bude opakovať linka osem trikrát,
takže keď som re-kompilácii make kašeľ, dot lomítko kašeľ, kašeľ, kašeľ, kašeľ.
To ešte pracuje rovnakým spôsobom.
Takže to je všetko v poriadku a dobre.
Ale to nie je moc roztržitý.
>> Je to úplne správne.
Ale je to pocit, ako by tam by mohlo byť príležitosťou,
ako vo svete Scratch, na druhom štarte
sem pridať nejaké sémantiku, takže Nemám jednoducho niečo pre sláčiky,
a funkcie, ktorá hovorí: kašeľ, alebo sa kašeľ.
Vieš čo?
skúsim byť málo chladnejšie než to,
a vlastne napísať funkciu, ktorá má niektoré nežiaduce účinky, ktoré hovoria, že kašeľ.
>> A to trvá žiadny vstup, a nevracia žiadnu hodnotu ako výstup.
Ale viete, čo to robí?
To robí tohle-- printf, citát koniec citátu, kašeľ.
>> A teraz tu, idem ísť dopredu a pre int,
aj dostane na nulu, aj menej ako tri, ja a navyše.
Chystám sa to urobiť printf, ktorá je pravdepodobne implementácia nízka úroveň
detail.
Nezaujíma ma, ako ku kašľu.
Len chcem použiť funkciu kašeľ.
A ja som jednoducho ísť zavolať kašeľ.
>> Teraz si všimnite dichotómia.
Pri volaní funkcie, ak nemáte chcú dať to vstupy, úplne v pohode.
Proste to otvorené zátvorka, v blízkom okolí párenia, a máte hotovo.
>> Pri definovaní funkcie, alebo deklarovať prototyp funkciu je,
ak vopred viete, že to nie je bude trvať žiadne argumenty,
hovoria neplatné tam tých zátvorkách.
A v tom je isté, že vás nebude náhodne zneužiť ho.
Nechaj ma ísť dopredu a robiť kašeľ.
A samozrejme som urobil chybu.
>> Sakra, tam je to implicitné vyhlásenia.
Ale to je v poriadku.
Je to ľahké opraviť.
Potrebujem len prototyp výš v mojom súbore, ako som vlastne používať.
>> Takže teraz mi dovoľte kašeľ znovu, pekný.
Teraz to funguje.
Skontrolujte, kašeľ, kašeľ, kašeľ, kašeľ.
Takže by ste si mohli myslieť, že sme naozaj len niečo málo cez engineering tento problém.
A skutočne sme.
To nie je dobrá kandidát programu
v okamihu, keď pre refactoring, a to, čo je
volal hierarchický rozklad, kde budete mať nejaký kód, a potom
tak nejako faktor veci von, tak ako pripisovať viac sémantiku k nim,
a opakovane to nakoniec z dlhodobého hľadiska.
Ale je to stavebným kameňom smerom sofistikovanejšie programy
že začneme písanie onedlho že
nám umožňuje mať slovnú zásobu s ktorým písať lepšie kód.
A skutočne, pozrieme sa, či by sme nemožno zovšeobecniť to ďalej.
>> Zdá sa, že trochu chromý, že ja, hlavné, musieť starať o tejto látat pre sláčiky,
a volanie kašeľ znovu a znovu.
Prečo nemôžem len povedať kašeľ, prosím kašeľ trikrát?
Inými slovami, prečo nie ja len dať impulz na kašeľ a to urobiť?
>> Prečo nemôžem len povedať, v Hlavným kašeľ trikrát.
A teraz, to je druh kúzelné.
Je to tu veľmi iteratívny.
A je to naozaj malé dieťa krok.
>> Ale práve schopnosť povedať linka osem, kašeľ trikrát,
je to tak oveľa čitateľnejšie.
A navyše, nemám vedieť alebo jedno, ako je implementovaný kašeľ.
A skutočne, neskôr v Termín a záverečných prác,
ak budete riešiť projekt s spolužiak alebo dvaja spolužiaci,
budete si uvedomiť, že budete musieť, alebo chcete, rozdeliť prácu.
>> A budete chcieť rozhodnúť v predstihu, kto to bude robiť to, čo,
a v ktorom kúsky?
A nebolo by to bolo pekné ak ste napríklad,
postarať sa o písaní Main, hotovo.
A váš spolubývajúci, alebo Váš partnerské všeobecnejšie
sa stará o vykonávaní kašeľ.
>> A toto rozdelenie, títo Steny abstrakcie,
alebo vrstvy abstrakcie ak budete, sú super silné,
preto, že najmä pre väčšie, Zložitejšie programy a systémy,
to umožňuje viac ľuďom stavať veci dohromady, a nakoniec
steh svoju prácu spoločne týmto spôsobom.
Ale samozrejme, my je potrebné opraviť teraz kašeľ.
Musíme povedať, kašeľ že hej, vieš čo?
Budeš musieť vziať input-- tak nie je neplatný, ale int i teraz.
Poďme dopredu a dať do kašeľ int. aj dostane na nulu.
>> i je menšia ako koľkokrát.
Povedal som tri predtým.
Ale to nie je to, čo chcem.
Chcem kašeľ, ktoré majú byť zovšeobecnené na podporovať ľubovoľný počet iterácií.
>> Takže, naozaj, to je n, že chcem, bez ohľadu na užívateľské mi.
Teraz môžem ísť dopredu a hovoriť tlače kašeľ.
A bez ohľadu na to, aké číslo používateľ prejde,
Budem sa opakovať, že mnohokrát.
>> Takže na konci dňa, Program je totožný.
Nevšimnúť všetky tieto veci mohli by byť aj v inom súbore.
V skutočnosti neviem at the moment, ako printf je implementovaná.
>> Neviem, v túto chvíľu, ako dostať reťazec, alebo získať int, alebo si plavák
sú implementované.
A ja nechcem je vidieť na mojej obrazovke.
Ako to je, začínam sa zamerať na môj program, nie tie funkcie.
>> A tak, naozaj, len čo vás spustiť factoring kód, ako je toto,
mohli by sme dokonca pohnúť kašeľ do samostatného súboru?
Niekto iný mohol realizovať.
A vy a váš program sa stal veľmi krásne a veľmi čitateľný,
pravdepodobne naozaj štyri riadok programu práve tam.
>> Tak poďme do toho teraz a vykonať ešte jednu zmenu.
Všimnite si, že môj prototyp sa musí zmeniť up vrchol.
Dovoľte mi teda napraviť tak Nechápem zareval.
>> Skontrolujte, kašeľ, dovoľte mi bežať kašeľ, akonáhle viac, stále robí to isté.
Ale teraz si všimnite, máme prísada pre jednu finálnu verziu.
Vieš čo?
Ja nechcem len kašeľ, nevyhnutne.
Chcem mať niečo všeobecnejšie.
Tak viete čo?
Chcem to urobiť.
Chcem mať, podobne ako Scratch áno, vyjadrovať blok, ale nie len
povedať niečo určitý počet opakovaní.
Chcem, aby to povedať veľmi špecifický reťazec.
A preto nemám chcem, aby to len povedať kašeľ.
Chcem, aby to hovoriť, čo Reťazec odovzdaný.
>> Takže si všimnúť, som generalizované to tak, že teraz
dajme tomu cíti ako dobrého mena pre toto, ako Scratch,
prijíma dva argumenty, na rozdiel od nuly.
Jedným z nich je reťazec.
Jedným z nich je int.
>> A ja ich mohol prejsť.
Len som niečo ako myšlienku hovoria reťazec a až potom
koľkokrát neskôr.
Void to znamená, že stále nič nevracia.
To sú len vizuálna stránka efekty, rovnako ako u [? Jordan?]
slovné vedľajším účinkom kričí.
To ešte urobí niečo n-krát, 0 až do, ale nie rovná n.
To znamená, že n celkom trikrát.
A potom už len vytlačiť čo to je reťazec.
Takže som naozaj zovšeobecniť tento riadok kódu.
Takže teraz, ako môžem implementovať Funkcia kašeľ?
>> Môžem robiť void kašeľ.
A môžem ešte trvať v tom, ako koľkokrát budete chcieť kašľať.
Ale viete čo?
Teraz môžem punt povedať.
>> Môžem zavolať povedať s Slovo kašeľ, prechádzajúcej v n.
A keď chcem tiež implementovať, len tak pre zábavu, funkcie kýchnutí,
Môžem kýchanie určitý počet opakovaní.
A môžem mať znovu použitie n, pretože Všimnite si, že m v tomto kontexte alebo rozsah
existuje iba v tejto funkcii.
>> A n v tejto súvislosti len existuje v rámci tejto funkcie tu.
Takže sa vrátime k Tieto otázky rozsahu.
A tu, ja len chcel povedať, mesta Akko a potom n časy, bodkočiarka.
>> A teraz už stačí len požičať Tieto funkcie podpisy tady.
Takže kašeľ je správna.
Void kýchnutie je teraz správna.
>> A ja stále stačí povedať.
Tak som chcel povedať, povedzme reťazec s, int n, bodkočiarka.
Tak som over-skonštruoval sakra z tohto programu.
>> A to nie je nutne znamenať, že sa jedná
čo by ste mali robiť pri písaní aj tie najjednoduchšie programov.
Urobte niečo, čo je zjavne naozaj jednoduché, naozaj málo,
a re-implementovať ju s použitím príliš veľa kódu.
Ale budete skutočne vidieť, av čas obzerať na tieto príklady,
a uvedomiť si, ach, tie sú kroky sme sa skutočne generalizovať,
faktor niečo, až na konci dňa
môj kód je vlastne celkom rozumné.
Pretože ak chcem kašeľ tri Časy potom kýchnuť trikrát,
Ja jednoducho len znovu spustiť to, Program robiť kašeľ a spustite kašeľ.
A mám tri kašeľ a tri smrkaní.
>> A tak to je základným paradigma, ak chcete,
za ako by sme mohli ísť o v skutočnosti vykonávanie programu.
Ale poďme sa jednoducho vidieť teraz, čo to je sme robili všetko tejto doby,
a čo niektorí z finálnych kusov sú za týmto jednoduchým príkazom.
Na konci dňa, máme Bol pomocou Clang ako náš prekladač.
Boli sme písať zdroj kód, prevedením
cez Clang do strojového kódu.
>> A my sme používali len Urobiť s cieľom uľahčiť našim stlačenia klávesov, takže
že nebudeme mať na pamäti, tie zaklínanie sama o sebe Clang.
Ale čo je Uistite sa vlastne robí?
A, podľa poradia, čo je Clang vlastne robí?
>> Ukázalo sa, že aj keď sme zjednodušili dnešná diskusia tým, že hovorí,
budete mať zdrojový kód, odovzdať ako vstup do kompilátor, ktorý vám dáva
výkon stroja kód, dopadá tú
niekoľko rôznych krokov tam vnútri.
A kompilácie sa stane byť dáždnik termín pre veľa krokov.
Ale poďme len dráždiť na to naozaj rýchlo.
>> Ukazuje sa, že sme robili viac vecí Zakaždým, keď som spustiť program,
alebo zakaždým, keď som kompiláciu programu dnes.
Tak sa odkazuje na predspracovanie tohle-- niečo v programe C,
ako uvidíme znova a znova, ktorý začína týmto symbolom hash,
alebo hashtag symbol tu, znamená, je to direktíva preprocesoru.
To znamená, že v tomto prípade, hej počítač, urob niečo s týmto súborom
ako je skutočne zostaviť svoj vlastný kód.
>> V tomto prípade hash patrí znamená, v podstate, C je spôsob, ako povedať,
hej počítač, choď obsah z CS50.h a vložiť ich tu.
Hej počítač, ísť dostať Obsah štandardného IO.H,
všade tam, kde to je na pevný disk, vložte ho sem.
Takže tie veci sa dejú najprv počas predspracovania.
>> A Clang robí všetko za nami.
A to robí tak sakramentsky rýchlo, vy ani
zobraziť štyri rôzne veci deje.
Ale to je prvý takýto krok.
>> Čo sa vlastne bude diať ďalej?
No, ďalší úradník krokom je kompilácia.
A ukázalo sa, že zostavovaní programu
technicky znamená ísť od zdrojový kód, tie veci máme
píše dnes k niečomu volal zhromaždenia kód, niečo
ktorý vyzerá trochu inak.
>> A v skutočnosti, môžeme vidieť veľmi rýchlo.
Nechaj ma skutočne ísť do môjho IDE.
Nechaj ma ísť dopredu a otvorené hello.c, ktorý je prvý program, s ktorým sme sa
začala dnes.
A nechaj ma ísť dopredu a spustenie zvonenie A trochu inak, Clang-s, hello.c,
ktorý bude skutočne Daj mi iný súbor hello.s.
>> A budeme pravdepodobne nikdy znovu vidieť tento druh kódu.
Ak budete mať nižšiu úroveň Trieda systémy ako CS61,
uvidíte oveľa viac tohto druhu kódu.
Ale to je jazyk symbolických inštrukcií.
To je X86 jazyk symbolických inštrukcií že procesor, ktorý je základom
CS50 IDE skutočne rozumie.
>> A mystický, ako to robí hele, to je niečo,
Počítač rozumie celkom dobre.
Sub q, to ​​je odpočítať.
Je tu pohyby.
>> Je tu volanie funkcií tu, x vý, hnutie, doplnok, pop,
návrat.
Takže tam je nejaký veľmi Návod na nízkej úrovni
že CPU pochopili, že spomínal som sa skôr.
To je to, čo Intel Inside.
>> K dispozícii sú vzory nuly a tie, ktoré
mapovať tieto arcanely znie, ale trochu dobre menovaný, inštrukcie,
tak povediac.
To je to, čo sa stane, keď kompiláciu kódu.
získate zostavu jazyk z toho, ktorý
znamená, že tretí krok je zostaviť že zostava kód do, nakoniec,
strojné code-- nuly a jednotky, nie Text, ktorý sme práve videli pred chvíľou.
>> Takže predspracovania to má nájsť a nahradiť, a pár ďalších vecí.
Kompilácia trvá zdroj Kód z C, zdrojový kód
že sme napísali, na montáž kód, ktorý sme práve pozrel na.
Montáž trvá toto zhromaždenie Kód na nuly a tie
že procesor v skutočnosti bude pochopiť na konci dňa.
A prepojenie je posledným krokom že sa stane pre us-- znova,
tak rýchlo, my ani notice--, ktorý hovorí,
hej počítač, prijmú všetky nuly a tie, ktoré
vyplýval z kompilácie Davida kód, a jeho hlavnou funkciou je v tomto prípade.
>> A hele počítač, choď všetky núl a jednotiek
že personál CS50 napísal vnútri knižnice CS50.
Zmiešajte tie sa Davida.
A hele počítač, choď všetky nuly a tie, ktoré napísal niekto iný let
Pred pre printf.
A pridať tie, do Celá vec, takže máme
svy núl a jednotiek, The nuly a jednotky CS50 personálu,
printf nuly a jednotky, a niečo iné užívame.
>> Všetci si spojí dohromady do jedného program s názvom, v tomto prípade, ahoj.
Takže odteraz budeme len použiť slovo kompilácie.
A budeme brať za samozrejmosť, že keď hovoríme, zostaviť svoj program, to znamená,
hej vykonať predbežné spracovanie, zostavovanie a prepájanie.
Ale je to vlastne šťavnaté niektoré veci tam deje pod kapotou.
A to najmä ak zvedaví nejaký čas,
môžete začať strkať okolo seba na tejto nižšej úrovni.
Ale teraz si uvedomiť, že Medzi stánok s jedlom pre dnešok
sú pomerne jednoducho začiatok procesu,
ako sa dostať pohodlne niečo ako hello world.
V skutočnosti väčšina z toho, čo sme urobili dnes určite nebude klesať v super rýchlo.
A to bude trvať nejaký čas, a niektorí cvičí.
A šance sú, budete radiť of chcú zasiahnuť klávesnice
alebo kričať na obrazovke.
A to všetko je v poriadku.
Aj keď, možno snažiť sa to v knižnici toľko.
>> A nakoniec, budete byť schopný aj keď pre začiatok
videnie vzory, a to ako v dobrom kóde že ste napísali a chýb
že ste urobili.
A podobne ako proces stáva TF alebo CA je ako,
začnete cítiť lepšie a lepšie pri pohľade na tieto vzory,
a práve riešenie vašich vlastné problémy nakoniec.
Do tej doby, tam bude veľa z nás požičiavať ho podporili, a dostanete
cez to.
A v write-up pre všetky problémy
budete prevedení všetky príkazy
že som iste poznajú z veľa praxe teraz,
ale mohol letieť nad hlavou zatiaľ.
A to je úplne v poriadku.
>> Ale nakoniec, budete začať vidieť vzory objaviť.
A akonáhle sa dostať cez všetky hlúpe detaily, ako sú zátvorky,
a zložené zátvorky a bodkočiarkami, a veci, úprimne povedané,
že nie je vôbec intelektuálne zaujímavé.
A nie je cieľom užívať akýkoľvek úvodný triedu.
Sú to myšlienky, ktoré idú na hmotu.
>> To je slučky, a podmienky a funkcie,
a silnejšie abstrakcie, a factoring kódu,
a dobrý dizajn a dobrú štýl, a nakoniec správnosť
z kódu, ktorý je v konečnom dôsledku bude záležať najviac.
Takže budúci týždeň, budeme brať tieto myšlienky, ktoré sme prvýkrát videli v Scratch
a teraz preložené k C. A začneme
predstaviť prvý z Samozrejme je skutočný svet domén.
>> Budeme sa sústrediť na svete bezpečnosti, a konkrétnejšie kryptografia,
umenie zakódovanie informácie.
A medzi prvými Problémy vy sám
dostane písať mimo hrať s niektorými z syntaxe
a riešiť niektoré logické Problémy, nakoniec netrvalo dlho,
Je skutočne zakódovanie, alebo šifrovanie, a nakoniec dešifrovanie informácií.
A všetko, čo sme urobili Dnes sa pomerne nízky
Hladina sa len tak dovoliť nám, aby jeden a jeden,
a ďalší krok smerom k vyššie písanie napriek tomu najzaujímavejšie kód.
>> Takže o tom až budúci týždeň.
>> [Videoprehrávanie]
>> Čo mi môžete povedať o v poslednej dobe ste ho videl?
Čo môžem povedať, naozaj?
Myslím, že to bolo ako každá iná pre-produkcie skúška,
s výnimkou tam bolo niečo, povedal na samom konci, ktorý uviazol so mnou.
>> Toto bol CS50.
>> -To Strih všetci, skvelú prácu na skúšku.
>> -To Obed?
>> Jo, vy a ja môžem chytiť sendvič v trochu.
Nechaj ma vypočuť s David naozaj rýchlo.
David?
>> [END PLAYBACK]