>> [Přehrávání hudby]
>> DAVID J Malan: Tak jo, vítejte zpátky CS50.
To je začátek týdne dva.
Slovo od jednoho z našich přátelé na akademické půdě -
Máte-li zájem, možná, a to buď nyní nebo v nějakém budoucím období
ještě jednou pohodlnější, výuka studenti středních škol trochu
něco o informatice, dělat hlavu, aby tuto adresu URL.
Oni potřebují především teď na učitelé, zejména pokud máte
měl nějaký projev na informatice.
>> Takže připomenout, že minule jsme zavedli několik datových typů v jazyce C, a
které jste začali dostat své špinavé ruce s těmito dosud
v problému nastavit jeden.
A my jsme měli char.
Takže v poněkud technického hlediska, co je char, jak jej známe dnes?
>> Takže je to postava, ale pojďme Přesněji řečeno teď.
Co máme na mysli znakem nebo individuální char?
Nenumerický charakter -
tak nemusí být.
Ukazuje se, že sudá čísla, a to i interpunkce a písmena jsou
zastoupeny s těmito daty typ známý jako char.
Takže to není nezbytně abecedy.
Jo?
>> Takže je to ASCII znak.
Takže pokud si myslíte, že zpět do týdne nula, když jsme měli byte dobrovolníků
přijít a buď držet jejich ruce nebo ne všechny, jsou zastoupeny bity.
Ale společně jako skupina osmi představovaly byte.
A jsme zavedli pojem ASCII V té přednášce, která prostě
mapování mezi čísly a písmeny.
A ASCII použití, jako ti lidé předpokládaných, osm bitů
představují znak.
>> Tak podle toho, mohou být v případě osmi bitů Každý se na jednom ze dvou hodnot -
nula nebo jedna -
to znamená, že tam byly dvě možnosti pro tuto osobu -
nula nebo jedna -
dvě pro tuto osobu, dvě pro tento osoba, dvě pro tento jeden.
Takže celkem dvakrát dvakrát dva krát dva krát dva -
tak dva osmý celkově.
Takže tam je celkový počet znaků 256 je to možné, že můžete
představují s osmi bity.
>> Nyní, ti z vás, kteří mluví asijské jazyků by mohl vědět, že je tu více
znaky ve světě, než jen AS a BS a CS a DS.
A skutečně, ASCII nestačí pro Mnoho světových jazyků.
Ale o tom až jindy.
Prozatím víme, že v C, pokud chcete reprezentovat dopis, kus
interpunkce, nebo prostě něco, co postava v přírodě, používáme char.
A to je jeden byte nebo osm bitů.
>> Co int?
No, int je celé číslo.
Kolik bitů, pokud si vzpomínáte, bylo celé číslo obvykle?
Každý, kdo odvolání?
Takže je to obvykle 32.
Je to vlastně závisí na počítači že používáte.
Ale v zařízení, a v mnoha počítače, je to 32 bitů nebo čtyři
bajtů - osmkrát čtyři.
A ints právě používají pro ukládání čísla, a to buď negativní,
pozitivní, nebo nula.
>> A pokud máte 32 bitů a stačí pouze péče o kladných čísel, můžete
někdo přibližný, kolik je to možné celá počítač může představovat z
na nulu up?
Tak to by bylo dva na 32, což je zhruba čtyři miliardy.
Takže tyto síly dva se bude opakující se témata v informatice.
Jak uvidíme, jsou velmi pohodlné pracovat, i když to není zcela
snadné dělat matematiku v něčí hlavě.
>> Takže budeme říkat zhruba čtyři miliardy.
Nyní, long long -
můžete trochu hádat.
Je to déle než int.
Kolik bitů?
Takže 64 bitů nebo osm bajtů.
To prostě znamená, že můžete reprezentovat i vyšší číslo, větší nebo pozitivní
větší záporná čísla.
>> A co plavou?
To je plovoucí desetinnou čárkou hodnota 32 bitů.
To je jen reálné číslo, něco s desetinnou čárkou.
Ale pokud potřebujete více místa místo za desetinnou čárkou nebo chcete-li
představují větší počet s některými frakce po ní, můžete použít
double, což je 64 bitů.
>> Ale je to zajímavý stánek s jídlem zde.
Takže pokud se ints omezen 32 bitů a i dlouhé dlouhé výrobky jsou omezeny 64
bity, něco vyvolává otázku, co když opravdu chcete počítat
vyšší než 4 miliardy na int?
No, stačí použít long long.
Ale co když chcete počítat více než dva až 64., dávat nebo brát?
>> Nyní, to je obrovské množství.
Ale nakonec, možná jste skutečně péče o tyto druhy hodnot,
zejména pokud používáte databázi a začíná sbírat spoustu a spoustu
a velké množství dat a přiřazení jedinečné Čísla každého kusu těchto údajů.
Tak jsme trochu problém.
A podobně, s plovoucí desetinnou čárkou hodnoty - plováky nebo čtyřhra -
pokud máte pouze konečný počet bitů, kolik by si celkový počet
možná představují?
>> No, je to tak jasné, když zahrnovat desetinnou čárkou.
Ale je to jistě konečný.
Máte-li konečný počet bitů, konečný počet lidí, konečný
počet žárovek, určitě můžete představují jen konečný počet
s plovoucí desetinnou čárkou hodnoty.
Ale kolik reálných čísel jsou jejich ve světě?
Tam je nekonečný.
Tak to je trochu problém, protože jsme nemají nekonečné množství
Paměť RAM nebo uvnitř našich počítačů.
Takže některé náročné věci se může stát.
>> Tak pojďme do toho a zkuste to vyjádřit zde.
Nech mě jít dopředu a otevřít gedit.
Chystám se jít dopředu a uložit soubor s názvem "floats0.c" jen proto, aby se
v souladu s příkladem, který je K dispozici on-line, pokud byste chtěli.
A já jdu dál a definovat takto -
Chystám se jít dál a říct, int Hlavní neplatné, jak často.
>> A pak v tomto programu, budu prohlásit sám plovák, tak 32-bit
proměnné s názvem f libovolně.
A pak budu ukládat v něm Nevím, desetiny, takže 0,1.
Takže budu vyjádřit, že jako jeden děleno 10, který je zcela
legitimní C.
>> A pak se na druhém řádku, prostě jsem chcete vytisknout tuto hodnotu.
Takže připomínám, že můžeme použít seznámit printf.
Nechceme používat% i pro int.
Chceme využít% F na plováku.
A pak budu dělat zpětné lomítko n, zavřít Nabídka, čárka, f, středník.
>> Tak tady je můj program.
Je tu už jedna chyba.
Má někdo pro koho to kliknul už chci upozornit alespoň
jeden bug jsem udělal?
Jo?
Jo.
Zapomněl jsem "# include" na top, ale příznak, který, když se pokusím
sestavit to bude, že překladač bude na mě křičet,
říká nedefinovanou symbol nebo něco v tom smyslu.
To není něco pochopit jako printf.
>> Takže budu dělat "# include ", Soubor uložte.
A teď je v lepším stavu.
Ale já také bude bod se jeden nový údaj dnes.
Kromě určení místa Držáky jako% f% i% s, můžete
někdy ovlivňují chování tohoto zástupného symbolu.
Například, v případě plovoucí Bodová hodnota, pokud chci jen
Pro zobrazení jedno desetinné místo po období, můžu vlastně dělat 0.1f.
Takže jinými slovy, oddělte f a znak procenta s 0,1, jen
vyprávění printf, můžete mít celý banda čísel za desetinnou čárkou
bod pro mě.
Ale já jen chci vidět jeden z nich.
>> Takže budu pokračovat nyní a ušetřete tento program, jděte do svého terminálu
okno, a já jdu do toho a typ, aby plovák 0, zadejte.
Vidím, že poněkud záhadný řádek, který začnou dávat větší smysl, jak jsme
škádlit ji odlišuje tento týden a další.
Teď budu pokračovat a spusťte float nulu.
A sakra.
>> Takže je tu další chyba zde z nějakého důvodu.
Jsem si jistý, že jedna desetina, nebo jeden děleno 10, není 0,0.
Možná jsem prostě hledáte na dostatečný počet číslic.
Tak proč říkám, dva 0,2 vidět dva desetinná místa, ne jen jeden.
Nech mě jít zpátky do mého okna terminálu tady a nastartování párkrát na
viz můj historii.
Ještě aby float nula znovu, a pak znovu.
A nyní zadat.
>> A teď jsem si jistý, že je to špatně.
A já jsem mohl dělat tři a čtyři, a já jsem pravděpodobně bude držet vidět nuly.
Tak kde je chyba?
Jeden děleno 10 by měl být 0,1.
Někdo chtít píchnout, co Základním problémem je,?
Jo?
Oba jsou celá čísla.
No a co?
Takže s jedním děleno 10, která je co mám dělat v aritmetice.
A já jsem si 0,1.
>> Jo.
A tak to je opravdu to problém.
Když budete mít celé číslo v počítači a rozdělit jej jiným číslo,
Počítač je ve výchozím nastavení bude Předpokládejme, že chcete celé číslo.
Problém však, samozřejmě, je že 0,1 není celé číslo.
Je to reálné číslo.
A tak to, co dělá počítač podle Výchozí nastavení je to prostě vyhodí
vše za desetinnou čárkou.
Není zaokrouhlit nahoru nebo dolů o sobě.
Je to prostě zahodí vše za desetinnou čárkou.
A teď to dává smysl.
Protože teď jsme jasně odešel s nulou.
>> Ale počkejte chvilku.
Nevidím int nula.
Já jsem vlastně viděl 0,00.
Tak jak to mám smířit teď?
Pokud se jedna děleno 10 je nulová, ale já jsem 0,00 vidět, kde je stále
převeden zpět do reálné číslo?
Jo.
Přesně tak.
>> Tak tady v souladu pět, když jsem vlastně ukládání, že 0,1, který je pak
zkráceny na nulu, uvnitř plováku, to byly stejné
uložením ne jako int, ale Ve skutečnosti, jak plováku.
Navíc jsem pak pomocí printf na výslovně tisku, že číslo dvě
desetinná místa, i když tam nemusí být ve skutečnosti žádné.
>> Tak to je na houby, ne?
Zřejmě nemůžete dělat matematiku, alespoň na této úrovni
přesnost, v počítači.
Ale určitě existuje řešení.
Co je to nejjednodušší oprava bychom mohli možná ano, i jen intuitivně zde
vyřešit?
Jo?
Otočte celá čísla do -
jo.
I když si nejsem jistý, co je Opravdu se tady děje, je-li
zásadně má co do činění s těmito i je ints, no, proč ne já
aby to 10,0, takže to 1.0, soubor znovu uložit.
Nech mě jít zpátky do dno a překompilovat.
Dovolte mi, abych znovu.
A tam -
teď mám svou desetina reprezentován jako 0,10.
>> Dobrá.
Takže to není špatné.
A dovolte mi poukázat na jednu jinou cestu mohli jsme to vyřešil.
Dovolte mi, abych vlastně vrátit zpět v čase kdy jsme měli to jako jeden
Desátý před chvílí.
A dovolte mi, abych do toho pusťte a znovu uložit tento soubor jako jiný název souboru, jen aby
mít trochu checkpoint.
Takže to byla verze jedna.
A teď mi dovolte pokračovat a ještě jednu verzi.
Zavoláme tuto verzi dva nula indexovány.
>> A já budu místo toho to - víte co?
Přidání tečka nula pracuje v tomto případě.
Ale předpokládejme, že jeden byl variabilní.
Předpokládaná 10 byla proměnná.
Jinými slovy, předpokládáme, že jsem nemohl jen těžko kód 0,0 na konci
tohoto aritmetický výraz.
No, můžu něco dělat v závorkách tzv. lití.
Mohu cast že celé číslo od 10 do plováku, a já obsadil že celé číslo jedna na
plavat, stejně.
Pak matematika, co se děje třeba udělat je účinně 1.0 dělí o 10,0,
výsledek, který jde v f jako předtím.
Takže když jsem překompilovat to jako dělat plováky 2, a teď vznáší 2, mám stejný
odpovědět stejně.
>> Tak to je docela nepřirozený příklad, jak vyřešit tento problém
zavedením casting.
Ale obecně, odlévání to bude silná věc, a to zejména pro
problém nastavit dvě za týden době, kdy Chcete-li převést jeden typ dat
další, že na konci dne jsou zastoupeny stejným způsobem.
Na konci dne, každý co jsme mluvili dosud je
jen ints pod pokličku.
Nebo jestli je to příliš nízké úrovni pro vy, jsou to jen čísla
pod kapotou.
Dokonce i postavy, opět připomenout týden od nuly, jsou čísla
pod kapotou.
>> Což znamená, že můžeme převést mezi různé typy telefonních čísel,
jsou to jen kousky.
Můžeme převádět mezi čísly a písmena, pokud jsou to jen
bitů a naopak.
A odlévání tímto způsobem je mechanismus programování, který umožňuje násilně
změna jednoho datového typu na jiný.
Bohužel to není tak jednoduché, jak bych si přál.
>> Chystám se jít zpět do plováky 1, který byl jednodušší,
přímočará s 0,0 přidán do každé z nich.
A stejně jako rychlý opakovací, nech mě jít napřed a rekompilovat
to, aby plováky 2 -
Omlouvám se, je to, aby plováky 1.
A teď pojďme spustit plováky 1.
A na dně, všimněte si, že jsem opravdu dostat 0,1.
Takže, problém je vyřešen.
>> Ale ještě ne.
Já jsem teď bude trochu zvědavý, a já jdu zpátky do svého
printf prohlášení a Poslyšte, víte co?
Chtěl bych potvrdit, že tento je opravdu jedna desetina.
A budu chtít vidět , řekněme, pět desetinných míst.
To není problém.
Změním dva na pět, Jsem překompilovat s make.
I to, jak znovu plave 1.
Hledáte docela dobře.
Zdravý rozum kontroly může skončit tam, ale Začínám trochu odvážnější.
Chystám se změnit 0,5-0,10.
Chci vidět 10 číslic za desetinné místo.
>> A já jdu dál a překompilovat to a znovu plave 1.
Tak nějak jsem litovat, že testováno dál, protože moje matematika není tak
opravit už, zdá se.
Ale počkej, možná to je jen náhoda.
Možná, že počítač pracuje trochu divné.
Nech mě jít dál a dělat 20 desetinných míst a ujistil jsem se, že vím,
jak na matematiku.
Vím, jak programovat.
Udělat plováky 1, překompilovat a sakra.
To je opravdu, ale opravdu dostat daleko od značky.
>> Tak co se to tu děje?
Intuitivně, na základě našich předpokladů dříve o velikosti datových typů,
Co třeba tady děje pod kapotou?
Jo?
Přesně tak.
Chcete-li tolik přesnost a to je sakra hodně přesnosti -
20 čísel za desetinnou čárkou.
Nemůžeš představovat libovolný počet, pokud máte
libovolný počet bitů.
Ale my ne.
Pro plováku, máme jen 32 bitů.
>> Takže, pokud je 32 bitů pouze v deionizovaná způsobem - stejně jako naše lidi na, fáze
ruce nahoru a dolů - v konečném počtu způsoby, je jen konečný počet
reálných čísel, která mohou představovat s těmito kousky.
A tak se nakonec počítač se bude muset
začít řezat zatáčky.
Počítač může skrývat tyto údaje od nás trochu času.
Ale pokud začneme strkat na čísla a díval se dál a dál na
koncové čísla v celé řadě, pak začneme vidět, že je to
vlastně sbližování Myšlenka na jednu desetinu.
>> A tak to dopadá, tragicky, je tu nekonečný počet čísel
se nemůže představovat právě počítač, alespoň s konečnou
počet bitů, konečný množství paměti RAM.
Teď to bohužel někdy má reálné následky.
Pokud lidé nebudou dost vážím nebo druh brát za samozřejmost fakt,
že jejich počítač bude jen to, co řeknou to udělat, a ne
pochopit tyto základní zastoupení detaily -
který, upřímně řečeno, v některých jazycích jsou skrytých před uživatelem, na rozdíl od C -
některé špatné věci se může stát.
>> A co jsem myslel, že bych udělal je krok zpět.
A to je o osm minut videa.
To vysílalo před několika lety, a to dává vhled do toho, co ve skutečnosti může jít
špatně, když si nedoceňují těchto druhy detailů ve velmi all-moc
reálný svět.
Pokud bychom mohli ztlumit světla po dobu několika minut.
>> SPEAKER 1: Nyní se vrátíme k technice
katastrofy na Divy.
>> Počítače -
jsme všichni zvykli na to, často nepříjemné problémy
které jdou s nimi.
Chyby, viry a softwarové závady jsou malé ceny platit za
pohodlí.
Ale v high-tech a high-speed vojenský a kosmický program
aplikace, nejmenší problém lze zvětšit do katastrofy.
>> 4. června 1996, vědci připraveni spustit bezpilotní raketa Ariane 5.
To nesl vědecké družice navržena tak, aby přesně zjistit, jak
zemské magnetické pole ovlivňuje se solárními větry.
Raketa byla postavena pro evropský Kosmickou agenturou a odstartovala z jeho
zařízení na pobřeží z Francouzské Guyany.
>> JACK GANSSLE: U asi 37 sekund do let, ale nejprve si všiml
něco špatně.
Trysky byly výkyvné v způsob, jakým by se měl opravdu ne.
Přibližně 40 sekund do letu, jasně vozidlo bylo v potížích.
A to je, když oni dělali Rozhodnutí zničit.
Rozsah Bezpečnostní technik s obrovské střeva stisknutí tlačítka
vyhodil raketu před tím, než by se nebezpečí pro veřejnou bezpečnost.
>> SPEAKER 1: To bylo první plavbě z Ariane 5, a jejich zničení
se konala kvůli vložené chybu V raketě je software.
>> JACK GANSSLE: Problém na Ariane bylo, že existuje celá řada
která je požadována 64 bitů vyjádřit.
A chtěli převést k 16-bitové číslo.
Se předpokládá, že bylo nikdy bude velmi velký, že většina
tyto číslice v 64-bit řada z nich nuly.
Mýlili se.
>> SPEAKER 1: Neschopnost jednoho softwaru Program přijmout takové
číslo generované jiným byl u kořene selhání.
Vývoj softwaru se stala velmi nákladné součástí nové technologie.
Ariane 4 raketa byla velmi úspěšný, tolik softwaru
vytvořen pro to bylo také používané v Ariane 5.
>> PHILIP Coyle: Základním problémem bylo že Ariane 5 byl rychlejší,
urychlováním.
A software neměl představoval, že.
>> SPEAKER 1: Zničení rakety Byl to obrovský finanční katastrofu,
vše v důsledku nepatrné chyby softwaru.
Ale to nebylo poprvé, kdy údaje konverze problémy soužil moderní
raketová technika.
>> JACK GANSSLE: V roce 1991, se zahájením první války v Perském zálivu, Patriot
Střela zažil podobný typ o početně konverze problém.
V důsledku toho, 28 amerických vojáků byly zabito a asi 100 dalších zraněno
když Patriot, který měl na ochranu proti příchozí pluje,
nedokázal vystřelit raketu.
>> SPEAKER 1: Když Irák napadl Kuvajt a Amerika zahájila Pouštní bouře v roce
brzy 1991, baterie Patriot rakety byly nasazeny na ochranu Saúdské Arábie
a Izrael z irácké Scud raketové útoky.
Patriot je americký středního doletu povrch-k-air systém vyrábí
společnost Raytheon.
>> THEODORE Postol: Velikost Patriot interceptor sám je zhruba
20 stop dlouhý.
A váží asi 2000 liber.
A to s sebou nese bojovou hlavici o cca -
Myslím, že je to zhruba 150 liber.
A hlavice je sám o sobě brizantní výbušnina, která má
fragmenty kolem něj.
Kryt hlavice je určena jednat jako brokovnice.
>> SPEAKER 1: Rakety jsou prováděny čtyři na obalu a jsou přepravovány
o návěsu.
>> PHILIP Coyle: Patriot protiraketový Systém se vrátí na
minimálně 20 let.
Původně byl navržen jako obrany raketa vzduchu na
sestřelit nepřátelské letouny.
V první války v Perském zálivu, kdy ta válka přišel, armáda chtěli použít
sestřelit Scuds, ne letadel.
Irácké letectvo nebylo tak velký problém.
Ale armáda byla starosti pluje.
A tak se snažil upgradovat Patriot.
>> SPEAKER 1: přepady nepřítele raketu jede mach pět bylo
bude dost náročné.
Ale když byl Patriot spěchal do služby, armáda nebyla vědoma
Irácký změny, které dělaly jejich Pluje téměř nemožné zasáhnout.
>> THEODORE Postol: Co se stalo je Pluje, které byly
přichází velmi nestabilní.
Byli viklání.
Důvodem byla Iráčané, ve S cílem získat 600km z
300-kilometr-doletu, se hmotnost z předního hlavice.
Udělali hlavice lehčí.
Takže teď Patriot se snaží přijít na Scud.
A většinu času, převážná většinu času, bylo by to jen
létat Scud.
>> SPEAKER 1: Jakmile je systém Patriot Provozovatelé si uvědomil, že Patriot ujít
svůj cíl, se odpálil Patriots hlavice, aby se zabránilo možné
ztráty, pokud byla povolena padat na zem.
>> THEODORE Postol: To je to, co většina lidé viděli, jak velké ohnivé koule na obloze
a nepochopený jako odposlechů Scud hlavic.
>> Reproduktor 1: I když v nočním nebi Vlastenci se zdá být úspěšně
ničit Scuds na Zahránu tam mohl pochybovat o tom jeho
výkon.
Tam, Patriot radarový systém ztratil sledovat příchozí Scud a nikdy
zahájen v důsledku softwarové chyby.
>> Byl to Izraelci, který jako první objevil , že čím delší je systém
se na, větší časový nesoulad se stal v důsledku hodiny
vložené do systému počítače.
>> JACK GANSSLE: Asi před dvěma týdny Tragédie v Dhahran, Izraelci
hlásí ministerstvo obrany že systém ztrácel čas.
Po asi osmi hodinách provozu, si všimli, že tento systém je
stává znatelně méně přesné.
Ministerstvo obrany reagoval vyprávění všechny Patriot baterií
nenechat systémy po dlouhou dobu.
Oni nikdy neřekl, co byl dlouhou dobu.
Osm hodin?
10 hodin?
1000 hodin?
Nikdo nevěděl.
>> SPEAKER 1: Patriot baterie umístěné v kasárnách na Zahránu
a jeho vadný vnitřní hodiny byly na více než 100 hodin v noci
25.února.
>> JACK GANSSLE: Je sledován čas Přesnost asi desetinu sekundy.
Nyní desetina sekundy je zajímavé číslo, protože to nemůže být
vyjádřené v binární přesně, což znamená, že že nelze vyjádřit přesně
nějaký moderní digitální počítač.
Je těžké tomu uvěřit, ale použít jako příklad.
Pojďme se počtu jednu třetinu.
Jedna třetina nelze vyjádřit v desítkové soustavě přesně.
Jedna třetina je 0,333 děje na na nekonečno.
Neexistuje žádný způsob, jak to udělat s absolutní přesnost v desítkové soustavě.
To je přesně stejný druh problému která se stala v Patriot.
Čím delší je provozován, Nejhorší time error stalo.
>> SPEAKER 1: Po 100 hodinách provozu, chyba v čase jen
asi jedna třetina druhá.
Ale pokud jde o zaměření rakety cestování u Macha pět, to mělo za následek
Tracking Error více než 600 metrů.
Bylo by fatální chyba vojáci na Zahránu.
>> THEODORE Postol: Stalo se Scud zahájení byla zjištěna brzy
výstražné družice.
A věděli, že se blíží Scud v jejich obecném směru.
Oni nevěděli, kam že se to stane.
>> Reproduktor 1: Bylo nyní na radaru složka systém Patriot
bránit Zahránu najít a udržet sledovat z příchozí nepřátelské rakety.
>> JACK GANSSLE: radar Byl velmi chytrý.
To by ve skutečnosti sledovat polohu Scud a pak předpovědět, kde se
pravděpodobně by se příště radar poslal puls ven.
To se nazývá rozsah brána.
>> THEODORE Postol: Pak, jakmile Patriot rozhodne dost času uplynulo jít
zpět a zkontrolujte následující umístění Tento detekovaný objekt, se vrací.
Takže když se vrátil do špatné místo, pak nevidí žádný objekt.
A rozhodne, že tam byl žádný objekt, to byl falešný odhalování a
klesne trať.
>> SPEAKER 1: Příchozí Scud zmizel z radarové obrazovky, a
sekund později narazila do kasáren.
Scud zabil 28 a byl poslední vypálil během první války v Perském zálivu.
Je tragické, že aktualizovaný software přišel na Zahránu následující den.
Tento software chyba byla stanovena, uzavření jedné kapitoly v problémové
Historie Patriot rakety.
>> Patriot je vlastně zkratka pro sledování fázového pole
Intercept cíle.
>> DAVID J Malan: Dobře, takže vystřízlivění příklad, to je jisté.
A naštěstí, tyto nižší úroveň chyby nejsou něco, co my budeme
typicky ocenit, rozhodně ne některé z našich
Nejdříve programů.
Naopak, většina chyb, budete setkání bude logické povahy,
syntaktické povahy, přičemž kód prostě nefunguje správně.
A víte, že docela rychle.
>> Ale zvláště když se dostaneme do konec semestru, bude to
stále více a více možností opravdu přemýšlet o designu
z vašich programů a souvisejících zastoupení
tam taky, dat.
Například, budeme zavádět MySQL, která je populární databázový stroj
které můžete použít s webovými stránkami na ukládání dat na zadním konci.
A budete muset začít rozhodovat, konec pololetí nejen to, co
typy dat v tomto směru k použití ale přesně, kolik bitů k použití,
zda chcete uložit data jako data a času, jako vždy, a také
věci, jako jak velký chceš jedinečné ID, které mají být, řekněme, že uživatelé
v databázi.
>> Ve skutečnosti, pokud někteří z vás jste měl Facebook představuje nějakou dobu,
a víte, jak získat přístup do vašeho ID uživatele -
které se někdy objeví ve vaší profilu se URL, pokud jste zvolili
přezdívka pro adresu URL, nebo pokud jste Použité Facebook je graf API,
veřejně dostupné API, kterou si může požádat Facebook pro surových dat -
můžete vidět, jaké jsou vaše číselná ID je.
A před několika lety, Facebook podstatě musel změnit používat
ekvivalent ints na dlouhé vzdálenosti s využitím dlouho, protože v průběhu času, jak uživatelé přicházejí
a jít a vytvořit spoustu účtů a falešné účty, i oni velmi snadno
byli schopni vyčerpat něco jako 4 miliard možnou hodnotu jako int.
>> Takže více na ty druhy otázek po silnici, stejně.
Dobře, takže to bylo obsazení.
To je nepřesnost.
Pár rychlých oznámení.
Takže sekce formálně začne letos Neděle, pondělí, úterý.
Uslyšíte prostřednictvím e-mailu později tento týden jak k přiřazení sekce.
A budete zde také v tomto bodě, jak změnit část, pokud váš
Plán se nyní změnilo, nebo vaše úroveň pohodlí se nyní změnilo.
Mezitím P-set a jeden hacker jeden ar kvůli tento čtvrtek s možností
prodloužení této lhůty za Specifikace až pátek
v obvyklým způsobem.
>> Uvědomte si, že součástí problému set specifikace jsou uvedeny pokyny týkající se
jak používat CS50 spotřebiče zkontrolujte, stejně jako některé specifické nástroje CS50
jako u modelu 50, který vám může poskytnout se zpětnou vazbou dynamicky
kvalita vašeho kódu stylu a také zkontrolovat 50, který vám může poskytnout
dynamická zpětná vazba, aby vaši kodexu správnost.
Odpusťte, že jsme stále žehlení z několika smyček s kontrolou 50.
Několik svých spolužáků, kteří se začínají asi čtyři AM v pátek večer, kdy
spec šel si všimli, od té doby několik chyb, že pracujeme
díky, a omlouvám se pro každého, kdo zažil zbytečné frustrace.
Na vině je moje.
Ale budeme sledovat na CS50 dohodnout se, kdy že je vyřešen.
>> Takže slovo na skóre sami.
Tak to bude týden nebo dva před vámi začnete se dostat zpětnou vazbu na základní problémové okruhy
protože jste ještě nemáte Výuka chlapík.
A i pak, začneme hodnotit Problém C stanovuje, než jsme
vraťte se zpět a zhodnotit tak poškrábání že dostanete více relevantní
zpětná vazba rychleji.
Ale obecně na školních osnov, CS50 základní problémové okruhy jsou hodnoceny podle
po čtyři osy -
rozsah, správnost, design a styl.
>> Rozsah bude řada typicky mezi nula a pěti, které se
zachycuje, kolik kus, který si ukousl.
Obvykle budete chtít to být pět.
Můžete alespoň vyzkoušeli všechno.
A všimněte si, že je to multiplikativní faktor tak, že dělá jen část
Problém sada není nejlepší strategie.
>> Mezitím je více zřejmé význam správnosti -
Jen je váš program korektně respektovat specifikace?
To je váha úmyslně více těžce než ostatní dvě osy podle
až třikrát, protože si uvědomujeme, že obvykle budete trávit
mnohem více času honí nějaké chyby, jak se váš kód do práce, pak jste
jsou odsazení a výběrem odpovídající názvy proměnných a
podobně, která je na druhém konci spektra stylu.
>> To neznamená, že styl není důležité a budeme kázat ji
čas i na přednáškách av úsecích.
Styl odkazuje na estetiku vašeho kódu.
Vybrali jste dobře-pojmenované proměnné které jsou krátké, ale poněkud
popisné?
Je váš kód členité, jak jste viděli v přednáška a v souladu
ve velkém stylu 50?
>> Konečně je k průmyslovým vzorům tam uprostřed.
Design je těžší, kdo dal prst, protože je to mnohem
subjektivní.
Ale to je snad nejdůležitější tři osy z hlediska pedagogické
hodnota v průběhu času, a že to bude učitelské kolegy je příležitost
poskytnout vám kvalitativní zpětné vazby.
Opravdu, v CS50 přestože máme Tyto vzorce a výsledky, na konci
dne se jedná o velmi záměrně velmi malé kbelíky - bodové hodnoty
mezi nulou a třemi a nula a pět.
Nesnažíme čerpat velmi hrubé linky mezi základní problémové okruhy nebo mezi
studenti, ale spíše soustředit, stejně jako můžeme na kvalitativní, latinka
zpětná vazba, a to buď na psacím stroji nebo slovní od vaše konkrétní učební kolegy,
budete poznat docela dobře.
>> Ale obecně ty, které jsou váhy že různé osy budou mít.
Mezitím, taky to stojí za to udržet v paměti, že byste neměli předpokládat, že
Tři z pěti je 60% a tedy zhruba selhávají.
Tři záměrně chtěl být druh uprostřed silnice dobré.
Pokud jste stále na trojky začátku semestru, to je
opravdu chtěl být dobrým místo, kde začít.
Pokud jste stále dvojky, jarmarky, je tu určitě nějakou práci zaplatit o něco
více pozornosti, využít sekcí a úřední hodiny.
>> Pokud jste stále čtyřky a pětky, skvělé.
Ale opravdu, doufáme, že se trajektorie mezi studenty - velmi
individuálně na jednoho studenta, ale začíná semestr zde v jakési
dva až tři řady, ale končí tady v čtyři-pět rozsahu.
To je to, co opravdu hledáte.
A mějte na paměti, že deltu můžete vystavovat mezi nulou týden a týden
12, když dělám známky.
Nezáleží na tom, jak se k nám zcela jste veletrh na začátku, pokud váš
dráha je opravdu nahoru a silný.
>> Akademický upřímnost - a tak mi dovolte dát na mé vážnější hlas jen na chvíli.
Tak to samozřejmě má vyznamenání odesílání více studentů než jiné
v historii na reklamní tabuli, věřím.
Máme druh ztratil na to bod, jak často se to stane.
A to ne proto, že studenti v 50 jsou nic víc než jejich nepoctivost
spolužáci jinde.
Ale uvědomit si také, že jsme velmi dobře na odhalování takové věci.
>> A to je výhoda, že computer science třída má v tom, že
může a my porovnat všechny studenty Problém nastaví párové proti každé
jiná, a to nejen v tomto roce ale všechny předchozí roky.
Máme schopnost, stejně jako studenty třídy, na Google a najít kód
na stránkách jako GitHub a diskusních fór.
Tam jsou naprosto řešení CS50 je p-nastaví plovoucí kolem tam.
Ale pokud můžete najít, můžeme najít.
A to vše je velmi automatizován a snadné a smutné pro nás najít.
>> Ale chci zdůraznit také to, že Samozřejmě akademická poctivost politika
moc má být velmi opak tomto duchu.
Opravdu, v tomto roce jsme přeformulovat věci v učebních osnovách být tak, tečka
dot dot, se podrobněji v učebních osnovách.
Ale zastřešující téma v průběhu opravdu být rozumný.
Jsme si vědomi toho, že dochází k významnému množství pedagogických
hodnota o spolupráci, do určité míry, se spolužáky, kdy si
dva nebo tři nebo více jsou stojící na bílou tabuli
Whiteboarding se, aby se mluvit své myšlenky -
zápis z pseudocode v obrazech, diagramů, co by mělo být, pokud Mario
byste měli napsat, že první v pseudokódu.
Co by hladový algoritmus -
jak by se chovat za Problém nastaví jeden?
>> A tak si uvědomit, že chování které doporučujeme je velmi
hodně v tomto směru.
A v učebních osnovách, uvidíte celá parta kulky pod
přiměřené kategorie a není rozumné kategorie, která pomáhá nám pomoci
si zabalit svou mysl v okolí, kde my čerpat tento řádek.
A obecně, slušné pravidlo je, že pokud jste se snaží řešit
některé chyby a váš přítel nebo spolužák sedí vedle vás, je to
rozumné pro vás ukázat mu nebo jí váš kód a říct, hej, můžete pomoci
me zjistit, co se děje špatně?
>> Nechceme typicky zahrnovat na opačné straně.
To není správná odpověď na vaši přítel nebo spolužák tady, abych řekl, oh,
stačí se podívat na moje postava a že se z toho.
To je trochu nesmyslné.
Ale mít někoho jiného, ​​jiný mozek, další pár očí se podívat na
obrazovka nebo se podívejte na kódu a říkají, že jsou si jisti, že chcete
mít smyčky tu?
Nebo jste jisti, že chcete že středník tady?
Nebo oh, to znamená, že tato chybová zpráva.
Ti jsou velmi rozumné a podporováno chování.
>> Případy, na které jsem se zmiňovat dříve se redukuje, když jsou studenti
pozdě v noci, takže špatný úsudek, rozhodnutí a jejich posílání e-mailů kód
nebo někdo jiný jen říkám, tady, je to v Dropbox nebo
Googling pozdě v noci.
A tak bych povzbudit a naléhavě vás prosím, Pokud máte ty nevyhnutelné
chvíle stresu, jste narážela do proti termínu, nemáte pozdě
den, protože je to již v pátek od které bod, email průběhu hlavami nebo
sám přímo.
Řekněme, poslouchej, já jsem v mém prasknutí zde.
Pojďme se bavit a na to přijít.
Uchýlit se k internetu nebo jiné ne rozumné chování není nikdy
řešení, a příliš mnoho z vašich spolužáci jsou již zde na
Areál kvůli tomu špatný úsudek.
Ale je to velmi snadné obcházet tento řádek.
>> A tady je malý obrázek pro zpestření jste se z Reddit takže nyní
bude vše v pořádku.
>> Tak rychlou rekapitulaci, tedy , kde jsme přestali.
Takže minulý týden, připomenout, že jsme zavedli podmínky, není Scratch
ale v C tentokrát.
A tam byla nějaká nová syntaxe, ale opravdu žádné nové nápady samy o sobě.
Měli jsme logické výrazy, které bychom mohli nebo společně s dvěma svislými
pruhy nebo a spolu se dvěma ampersandy s tím, že po levé
a právo musí být pravda aby to vykonat.
Pak jsme měli spínače, které jsme se zaměřili na krátce, ale navrhuji, jsou opravdu
prostě jiné syntaxe pro dosažení Stejný druh cíle, pokud víte,
předem, jaké jsou vaše případy se bude.
>> Podívali jsme se na smyčky.
For je snad nejčastější, nebo alespoň jeden, že lidé
typicky dosáhnout pro instinktivně.
I když to vypadá trochu tajemný, uvidíte mnoho, mnoho příkladů tohoto
Netrvalo dlouho, jak jste již koncem minulého týdne.
While může podobně dosáhnout totéž.
Ale pokud chcete dělat žádné inkrementace nebo aktualizaci
proměnné hodnoty, musíte to více než ručně
pro smyčce, než dovolí.
A pak je tu do-while, což nám umožňuje něco udělat
alespoň jednou při co jinak je to pravda.
A to je zvláště dobré pro programy nebo hry na místo, kam chcete
vyzvat uživatele k něčemu alespoň jednou.
A pak, pokud on nebo ona nespolupracuje, možná budete chtít, aby to
znovu a znovu.
>> S proměnnými, mezitím jsme měli linky kódu, jako je tento, což by mohlo
být dva řádky.
Dalo by se prohlásit názvem int čítač, středník.
Nebo můžete jen deklarovat a definovat to, abych tak řekl.
Dát jí hodnotu současně.
>> A pak konečně, jsme si povídali o funkcích.
A to byl pěkný příklad v pocit, že to ukazuje,
dva typy funkcí.
Jedním z nich je GetString (), která opět dostane řetězec od uživatele.
Ale GetString () je docela zajímavé, pokud jsme použili,
protože jsme vždycky s něco na levé straně
znaménko rovná se.
To znamená, že GetString () vrací hodnotu.
Vrací se samozřejmě řetězec.
A pak na levé straně, my jsme prostě šetří tento řetězec uvnitř
proměnné s názvem jméno.
>> Toto se liší, v jistém smyslu, z printf protože printf, alespoň v našich
Použití zde nic nevrací.
Mimochodem, to něco vracet.
My prostě nezajímá, co to je.
Ale má to, co je tzv. vedlejší účinky.
A to, co je to, že vedlejší účinek v každém případ, že bychom viděli tak daleko?
Co printf dělat?
Tiskne něco na obrazovku, zobrazuje text nebo čísla, nebo tak něco
na obrazovce.
A to je jen za vedlejší efekt protože to není opravdu předání
mi to zpátky.
To není odpověď uvnitř černé skříňky, které jsem pak mohou
dostat do a chytit.
Je to prostě dělá to na jeho vlastní, moc jako Colton byl zapojen do tohoto
černá skříňka minulý týden, a nějak magicky kreslil na tabuli
beze mě vlastně jedná.
To by bylo nežádoucí účinek.
Ale když jsem se vlastně musel dostat zpátky tady a říkají, ach, tady je řetězec
od uživatele, který by být návratová hodnota.
>> A tak daleko jsme se používá pouze funkce že ostatní lidé psali.
Ale můžeme skutečně udělat to druhy věcí sami.
Takže jsem jít do CS50 spotřebič znovu.
Dovolte mi, abych zavřít kartu, že jsme se otevře před chvílí.
A dovolte mi jít dopředu a vytvořit nový soubor.
A já jdu dál a zavolejte tuhle positive.c.
Tak jsem chtěl udělat něco s kladná čísla zde.
Takže jsem jít dál a dělat int -
Omlouvám se -
# Include.
Nedělejme to stejné chyba jako předtím.
Int main (void), otevřený kudrnaté rovnátka, uzavřená složená závorka.
>> A teď chci udělat následující.
Chci napsat program, který trvá na tom, že uživatel zadá
mi kladné celé číslo.
Takže není GetPositiveInt funkce v knihovně CS50.
Je tu jen GetInt ().
Ale to je v pořádku, protože mám pojmy, s nimiž mohu uložit
trochu více omezení na tuto hodnotu.
Co jsem mohl udělat něco takového.
>> Takže int n -
a pokud jste psát dál, jen si uvědomit, Chystám se vrátit a
změnit některé věci v okamžiku -
takže int n se rovná GetInt ().
A to se děje, aby int uvnitř n.
A nech mě být více popisný.
Dovolte mi říci něco jako: Žádám, aby mi dát kladné celé číslo.
>> Dobrá.
Tak jen trochu instrukcí.
A teď co s tím mám dělat?
No, já už vím, z mé jednoduché podmínky nebo poboček, stejně jako já
měl v Scratch, mohl bych něco říct jako když n je menší než nebo rovna
nula, pak chci něco udělat jako, že není pozitivní.
A pak jsem mohl udělat -
OK, ale já opravdu chci, aby si to int.
Takže jsem mohl jít sem, a já mohl trochu kopie této odrážky a to.
A pak na tlačítko OK.
Takže, pokud n je menší než nebo rovna nule to.
>> A teď, co když uživatel nespolupracuje?
No, tak já jdu půjčit zde.
A pak jdu sem a tady a tady.
Takže to zjevně není řešení, ne?
Vzhledem k tomu, že je konec je v nedohlednu.
Chci-li požadovat, aby uživatel zadá mi kladné celé číslo, mohu
skutečně dostat int.
Pak mohu zkontrolovat tento int.
Ale pak chci podívat se na to znovu a podívat se na to znovu a znovu zkontrolujte.
Tak samozřejmě, co je lepší konstrukci, že se pomocí zde?
Dobře, takže nějaké smyčky.
>> Takže budu se zbavit téměř vše.
A já chci, aby si to int alespoň jednou.
Takže jsem chtěl říct to -
a vrátím se zatímco za chvíli -
teď, co?
Chystám se udělat pravý n dostane GetInt ().
OK.
Tak to je docela dobré.
A teď, jak často Chci to udělat?
>> Dovolte mi, abych dal printf uvnitř smyčky takže můžu žádat znovu a znovu,
v případě potřeby.
A co to chci dokud je podmínka dělat?
Chci v tom pokračovat zatímco to, co je tak?
Jo.
N je menší než nebo rovna nule.
Tak už máme výrazně vyčistit tento kód do.
Jsme si půjčili velmi jednoduché konstrukci - do-while.
Jsem ukradl pouze důležité řádky kódu, který jsem začal kopírování a
vkládání, což nebylo moudré.
A tak teď budu vlastně vložit to sem a udělej to jednou.
>> A teď to, co chci dělat na velmi konec tohoto programu?
Já si jen říct něco jednoduchého, líbí, díky za - a
Udělám% i pro int -
zpětné lomítko n, čárka, a pak zapojte n, středník.
>> Dobrá.
Tak uvidíme, co se stane teď když jsem spustit tento program.
Chystám se jít dopředu a dělat, aby pozitivní.
Sakra.
Několik chyb.
Takže dovolte mi, abych se posunout zpět k prvnímu.
Nepracujte přes ně dozadu.
Práce přes ně ze shora dolů lest oni kaskády a pouze
jedna věc se mýlit.
Implicitní prohlášení Funkce GetInt ().
Jo.
Takže to nebylo dost.
Tak nějak jsem udělal stejnou chybu, ale trochu jinak, tentokrát.
Musím zahrnují nejen stdio.h, ale také cs50.h, který zahrnuje
tzv. prohlášení o získání int, což naučit přístroj, nebo učí
C co GetInt () je.
>> Takže dovolte mi, abych znovu uložit.
Budu ignorovat další chyby protože budu doufat, že to
nějak souvisí s chybou Jsem již opravena.
Tak mě nech jít dopředu a rekompilovat s make pozitivní, Enter.
Sakra.
Tři chyby, stále.
Dovolte mi, přejděte do první.
Nepoužité proměnné n.
Jsme neviděli předtím.
A to je také trochu záhadné.
Toto je výstup kompilátoru.
A co že zvýrazněná linka tam - positive.c :9:13 -
říká, že to říká on-line devíti positive.c, na 13. znaku,
13. sloupec, jsi tuto chybu.
>> A především, je to vyprávění mě nevyužité proměnné n.
Tak uvidíme -
linka devět.
Já používám n v tom smyslu, že Dávám jí hodnotu.
Ale co kompilátor nemá rád, je že nejsem zdánlivě používat.
Ale počkej, já používám ho.
V souladu jedenáct, já používám ho zde.
Ale když jsem se posunout dolů další na positive.c :11 -
tak na řádek 11, znak 12 Kompilátor mi říká, využívání
nedeklarovaný identifikátor n.
>> Takže nehlášení znamená, že mám neurčeno to jako
proměnná s datovým typem.
Ale počkejte chvilku.
Udělal jsem přesně to, že v souladu devět.
Takže někdo je opravdu zmatený zde.
Je to buď já, nebo proto, že kompilátor v souladu devíti, opět jsem prohlásil
int n, a já jsem přiřazením vrátí hodnotu GetInt ().
Pak jsem pomocí této proměnné n v souladu 11 a kontrolu, zda je jeho hodnota nižší
než nebo roven nule.
Ale to je patrně špatné a zlomený proč?
Řekni to znovu?
>> Ach, musím prohlásit, n před vstupu do smyčky.
Ale proč?
Myslím, že jsme právě navrhla trochu dávno, že to je v pořádku deklarovat proměnné
vše na jednom řádku a pak přiřadit jim nějakou hodnotu.
Globální proměnná - pojďme vrátit na tuto myšlenku za chvíli.
Proč chcete, abych dal je mimo smyčku?
To je.
Přesně tak.
>> Takže, i když poněkud neintuitivní, dovolte mi shrnout.
Když deklarujete n uvnitř z DO bloku tam -
zejména uvnitř ty složené závorky -
tato proměnná n má to, co je nazývá rozsah -
nesouvisí s naší bodovacího systému Kurz - ale má rozsah, který je
omezeny na ty složených závorek.
Jinými slovy, pokud se obvykle deklarovat proměnná v souboru
Složené závorky, tato proměnná existuje pouze Uvnitř těchto složených závorek.
Takže této logiky sám, i když Já jsem prohlásil, n v souladu devět, to
v podstatě zmizí z rozsahu, zmizí z paměti, abych tak řekl,
v době, kdy jsem narazila linku 11.
Vzhledem k tomu, linka 11, bohužel, je mimo těch složených závorek.
>> Tak jsem se bohužel nemůže opravit tím, že se vrací s tím, co jsem dělal předtím.
Můžete nejprve udělat.
Ale to, co jste teď není cyklicky dělá?
Vy jste zřejmě nedostávají int cyklicky.
Takže můžeme nechat GetInt () a my by měl opustit GetInt () uvnitř
smyčky, protože to je to, co chceme, aby obtěžovat uživatele k znovu a znovu.
Ale to nestačí jít do souladu, řekněme, šest.
Int n, středník.
Nedávejte jí hodnotu, protože ještě nemusíte jen zatím.
>> Ale teď tady dole Oznámení zadávacího řízení - to by bylo velmi snadné chyba.
Nechci, aby můj stín předchozí Prohlášení o n..
Chci použít n které skutečně existuje.
A tak nyní v řádku 10, I přiřadit n hodnotu.
Ale v souladu šesti prohlašuji, n.
A tak můžu nebo nemůžu použít v souladu 12 teď?
Nemůžu, protože mezi kterými kudrnaté šle je n prohlášen teď?
Ten tady na lince pět.
K jednomu tady na lince 14.
Takže když jsem se vzdálíte, uložit tento soubor, přejděte zpět na a spusťte make pozitivní,
sestavil tuto dobu.
Tak to už je pokrok.
Slash. . / Pozitivní, Enter.
>> Žádám vás, abyste mi kladné celé číslo.
Negativní 1.
Negativní 2.
Negativní 3.
Zero.
Jeden.
A díky za ten je co se nyní tiskne.
>> Nech mě zkusit něco jiného, ze zvědavosti.
Jsem bylo řečeno, ke vstupu na celé číslo.
Ale co kdybych místo toho zadat beránek?
Takže nyní vidíte jiný dotaz -
zkuste to znovu.
Ale nikde v mém kódu jsem psát zkuste to znovu.
Tak kde, pravděpodobně, je to opakování výzva přichází, byste řekli?
Jo, od GetInt () sám.
Takže jedna z věcí, CS50 personál dělá pro vás, alespoň v těchto prvních několika
týdnů, je, že jsme psali nějaké množství kontroly chyb, které v případě
zavoláte GetInt (), budete alespoň vrátit int od uživatele.
Nebudete mít řetězec.
Nebudete mít char.
Nebudete něco úplně jinde.
Dostanete int.
>> Teď to nemusí být pozitivní.
To nemusí být negativní.
Neděláme žádné záruky obejít.
Ale budeme obtěžovat uživatele opakovat, opakování, opakování, dokud on nebo ona vlastně
spolupracuje.
Stejně tak, pokud mám 1,23, to není int.
Ale když se mi psát, řekněme, 50, že mi dává hodnotu, která jsem chtěl.
>> Dobrá.
Takže to není špatné.
Jakékoliv dotazy na to, co jsme právě udělali?
Klíčem je stánek s jídlem, aby bylo jasno, není tak smyčka, která jsme viděli
ještě předtím, než když máme opravdu používat, ale otázka rozsahu, kde
proměnné mohou být mohou být použity pouze během stanovené působnosti.
>> Dobře, dovolte mi, abych návrh jste se dříve, že z
globální proměnná.
Mimochodem, ukázalo se, že další Řešení tohoto problému, ale
obvykle správným řešením nebo špatně navržené řešení, je
deklarovat svou proměnnou jako to, co je tzv. globální proměnná.
Teď jsem trochu porušil svou definici rozsah, protože existuje
žádné složené závorky na vrchol a velmi dolní části souboru.
Ale důsledky, které je to, že nyní v souladu čtyři,
n je globální proměnná.
A jak už název napovídá, je to jen dostupné všude.
>> Scratch ve skutečnosti má tato.
Pokud jste použili proměnnou, možná si vzpomenete, si musel vybrat, jestli je to pro
Tento sprite nebo pro všechny skřítky.
No, všichni skřítci je jen jasnější způsob, jak říkat globální.
Jo?
Ach, opravdu dobrá otázka.
>> Takže připomínám, že v první verzi v mém kódu, když jsem špatně
deklarovat a n v souladu devět -
Prohlásil jsem to jako proměnná a dal jsem jí hodnotu s
operátor přiřazení -
To mi dávalo dvě chyby.
Jeden z nich, že n nebyl použit, a za druhé, že v souladu 11
Prostě to není deklarován.
Takže první, co jsem neměl Adresa v té době.
To není striktně chyba prohlásit, variabilní, ale nepoužívejte ho.
Ale jedna z věcí, které jsme udělali v CS50 zařízení, záměrně,
pedagogicky, je jsme zalomený nahoru očekávání kompilátoru, aby
Ujistěte se, že děláte věci, a to nejen správně, ale opravdu správně.
>> Protože pokud jste deklarování proměnné jako n a nikdy ji používat, nebo jej používáte
správně, pak to, co je to tam dělá?
Je to opravdu nemá smysl.
A je to velmi snadné, v průběhu času, pokud nenastavíte vlastní počítač v
Tímto způsobem, jen mít kód, který má malé zbytky tady, tam zbytky.
A pak měsíce později se podíváte zpět a jsi jako, proč je tato řada
Kód tam?
A pokud není dobrý důvod, je netěží vás nebo vaše kolegy
po silnici muset zakopnout to pak.
>> Mimochodem, kde je že jde?
No, připomněl, že pokaždé, když jsme sestavit Program, všechno tohle je
tiskne.
Takže se vrátíme k tomu.
Ale na druhou stranu, aby je nástroj, který automatizuje proces shromažďování podle
spuštění kompilátoru aktuální tzv. zvonění.
Ta věc, budeme nakonec vidět, má co do činění s ladění se zvláštním
program s názvem ladicí program.
To má co do činění s optimalizací kód - o tom více v budoucnu.
Std = C99 -
to znamená jen použít verzi 1999 C. C to už asi ještě déle než
, ale oni dělali nějaký pěkný Změny 10 a lety.
>> A tady je příslušná ty.
Říkáme, aby něco, co by dříve byli varování
Chyba brání studenta z kompilace.
A stěnou se rozumí to, že pro celá parta věcí, ne
souvisí jen s proměnnými.
A pak mi dovolte přejděte na na konci tohoto řádku.
A to taky, budeme nakonec se vrací.
To je samozřejmě název soubor jsem kompilaci.
To připomíná název souboru Jsem výstup jako název
mého runnable programu.
To prostě znamená, lcs50 použít CS50 knihovna, a všechny nul a jedniček, že
Zaměstnanci napsal a sestavil dříve v letošním roce, integrovat
je do svého programu.
>> A někdo, co-LM je?
Je to matematická knihovna, která je právě tam, i když jste
nedělá žádnou matematiku.
Je to prostě automaticky za předpokladu, nám dělat.
>> No, dovolte mi ještě jednu další příklad zde otevírá nový soubor.
A dovolte mi zachránit tohle jako string.c.
Ukazuje se, že pokud hovoříme o datech Typy dnes, je tu ještě
děje pod kapotou než jsme viděli doposud.
Takže dovolte mi, abych se rychle udělat rychlý program.
Zahrnout stdio.h.
A já kromě toho, že.
A víte, dejte mi neudělá stejnou chybu znovu a znovu.
Zahrnout cs50.h.
A dovolte mi, abych do toho teď a to int main (void).
>> A teď prostě chci udělat program že to dělá - deklarovat řetězcovou
volal sa dostat řetězec od uživatele.
A dovolte mi udělat malý návod zde -
Dejte mi prosím řetězec - tak uživatel ví, co má dělat.
A pak tady dole pod touto Chci udělat následující -
pro int i dostane na nulu.
Opět platí, že počítač vědci typicky začít počítat od nuly, ale mohli bychom
dělat, že jeden, pokud jsme skutečně chtěli.
Teď budu dělat i menší než délka řetězce s.
Tak strlen -
S-T-R-L-E-N -
znovu, je to výstižné, protože je to jednodušší, psát, i když je to
trochu záhadná.
>> Že je funkce jsme nepoužívá dříve, ale doslova to dělá -
návrat na mě číslo, které představuje délka řetězce
že uživatel napsal.
Pokud zadali ahoj, to by se vrátit pět, protože tam je pět
písmena ahoj.
Poté, při každém opakování Tato smyčka, i plus plus.
Takže znovu, standardní konstrukci, i když si nejste zcela příliš pohodlně, nebo
obeznámeni s tím ještě.
>> Ale nyní při každém opakování tohoto cyklu, Všimněte si, co budu dělat.
Chci jít do toho a vytisknout z jednoho znaku -
tak% c n lomítko na nový řádek.
A pak, víš, co chci dělat?
Ať už je slovo, které uživatel zadá v jako ahoj, chci vytisknout
H-E-L-L-O, jeden znak na každém řádku.
Jinými slovy, já se chci dostat na Jednotlivé znaky v řetězci,
přičemž až do teď má řetězec jen Byl posloupnost znaků.
>> A ukázalo se, co můžu udělat s, držák, i, závorka, zavřete
závorka, středník.
A mám udělat ještě jednu věc.
Je to v souboru s názvem string.h že strlen je deklarována.
Takže pokud chci používat tuto funkci, Musím říci kompilátoru,
očekávat, že ji používat.
Teď mě nech jít dál a dělat program s názvem řetězec.
Dot, lomítko, řetězec.
>> Prosím, dejte mi řetězec.
Půjdu do toho a zadejte jej.
Dobrý den, ve všech velkých písmenech, Enter.
A teď jsem si všimnout, vytisknou jeden znak za druhým.
Takže nový údaj, je to, že řetězec, Na konci dne, může být
přístupné prostřednictvím jeho osoby znaky zavedením náměstí
držák notace.
A to proto, že řetězec pod kryt je skutečně posloupnost
znaků.
Ale to, co je hezké o nich je v paměti RAM počítače -
Mac, PC, co to je - jsou to doslova zády k sobě -
H-E-L-L-O -
na individuální, vedle bajtů paměti.
>> Takže pokud se chcete dostat na osmou takovou byte, který v této smyčky by
držák nula, jeden držák, držák dva, držák tři, čtyři držák -
to je nula indexovány až do pěti let -
, že se vytiskne H-E-L-L-O na vlastním řádku.
>> Nyní, jako ukázku, dovolte mi ukázat vám druhy věcí, které budete nakonec
rozumět, alespoň s některými blízko hledáte.
Za prvé, to, co jsme do dnešní příklady, pokud byste chtěli, je ve skutečnosti
jeden z prvních Jailbreaks pro iPhone.
Jailbreaking znamená praskání telefon takže se můžete skutečně použít na
jiný dopravce nebo instalace vlastní software.
A všimněte si, že to vypadá zcela tajemný, s největší pravděpodobností.
Ale podívejte se na tohle.
IPhone byl zřejmě přeskakoval pro smyčce, pokud podmínka, jinak
stav, parta funkcí jsme neviděli.
>> A opět, nebudete na první pohled pravděpodobně
pochopit, jak to funguje.
Ale všechno, co nějak se za samozřejmost v našich moderních životech
ve skutečnosti má tendenci snižovat i na některé z těchto základů jsme byli
dívá.
Nech mě jít dopředu a otevřete jednu jiný program, holloway.c.
Takže i to je něco, co by opravdu nevím.
Ani nikdo z personálu nebo jsem mohl pravděpodobně přijít se na to při pohledu na
to proto, že to byl něčí kód , který byl předložen na to, co je
historicky známý jako obfuscated C soutěž, kde můžete napsat program
který sestavuje a vede, ale je tak zatraceně mystický žádný člověk nemůže pochopit, co
bude to dělat do té skutečně spustit.
>> Takže opravdu, když se podíváte na to kód, vidím vypínač.
Vidím hlavní.
Vidím tyto hranaté závorky z čehož vyplývá, nějaký druh pole.
Má někdo chtěl hádat, co tento program skutečně
dělá, když spustím Holloway?
Ano.
OK.
Výborně.
Takže jen zaměstnanci a nemůžu přijít co tyto věci dělat.
>> A teď konečně, nech mě jít napřed a otevřít jeden jiný program.
Tahle -
znovu, uděláme zdrojový kód k dispozici online - tohle je jen
docela hezké na pohled.
Všechno, co udělal, je hit mezerníku docela dost.
Ale to je skutečný kód.
Takže pokud si myslíte, že je to hezké, kdybychom vlastně tento příkaz na příkazovém řádku,
nakonec uvidíte, jak se může dělat věci, jako je tento.
>> Tak jsme vás nechám v takovém případě a uvidíme se ve středu.
>> [Přehrávání hudby]
>> SPEAKER 2: V dalším CS50, TFS uspořádat vzpouru.
>> SPEAKER 3: Tady je.
Dostaňte ho!
>> [Přehrávání hudby]