[Powered by Google Translate] [§ 4] [menej komfortné]
[Nate Hardison] [Harvard University]
[To je CS50.] [CS50.TV]
>> Dobre, vitajte späť do oddielu.
V tomto týždni sa časti budeme robiť pár vecí.
Budeme najprv nastaviť rekapitulácia Problém 2,
ktorá je Caesar a Vigenère problém set.
A potom budeme ponoriť sa do Quiz hodnotenie 0
a stráviť trochu času rekapituluje, čo sme hovorili o tom
v každom z prednášok tak ďaleko, a my tiež urobiť niekoľko problémov
z predchádzajúceho roka kvízy.
Tak vy máte dobrý spôsob, ako sa pripraviť na to.
>> Ak chcete začať, som naštartoval až na pár dobrých riešení
pre predchádzajúce problému nastavenie, Problem Set 2, do tohto priestoru.
Ak ste všetko hit odkaz,
a ak kliknete moje meno a kliknite na svoje prvé revíziu
uvidíte caesar.c, čo je presne to, čo som pri pohľade na.
Poďme si o tom pohovoriť naozaj rýchlo.
To je len ukážka riešenia.
Toto nie je nevyhnutne dokonalé riešenie.
Existuje mnoho rôznych spôsobov, ako napísať to,
ale existuje niekoľko vecí, ktoré som chcel zdôrazniť
že som videl, keď som bol triedenie, časté chyby, ktoré si myslím, že
Toto riešenie má veľmi dobrú prácu manipuláciu.
>> Prvý má nejaký hlavičke komentármi hore.
Na tratiach 1 až 7 sa zobrazia podrobnosti,
čo presne tento program robí.
Dobrý bežná prax, keď píšete kód v jazyku C
bez ohľadu na to, ak je váš program obsiahnuté v jednom súbore alebo
či už je to rozdelené na viac súborov, je mať nejaký
orientovať komentár hore.
To je tiež pre ľudí, ktorí idú von a písať kód v reálnom svete.
To je miesto, kde sa bude dať informácie o autorských právach.
Nižšie sú # obsahuje.
Na riadku 16 je tu tento # define, ktorá sa vrátime v len trochu.
A potom ešte raz spustí funkcie, jednou hlavnou štartov,
pretože tento program bol obsiahnuté v jedinom funkciu
Úplne prvá vec, ktorá sa stane a to je veľmi frazeológie a typické programu C
ktorý berie v príkazovom riadku argumentov, je to, že okamžite skontroluje
>> pre počet argumentov, argc.
Práve tu vidíme, že tento program ich čaká 2 argumenty presne.
Pamätajte si, že to, že prvý argument, že je to výnimočný
že je vždy názov programu, ktorý je prevádzkovaný,
názov spustiteľného súboru.
A tak, čo to robí, je, že zabráni užívateľovi spustenie programu
s viac alebo menej argumentov.
Dôvodom chceme skontrolovať tohto práva ďaleko je, pretože
nemôžeme skutočne prístup k tejto ArGV poľa tu spoľahlivo
kým som skontroloval, ako je veľký.
>> Jedným zo spoločných chýb, ktoré som videl boli ľudia by okamžite ísť
a drapák ArGV [1].
Oni si urvat kľúče argumentu z poľa a to sa aj kontrolu na to,
a potom by urobiť test na argc, rovnako ako ďalší test,
či je alebo nie je prvý argument bol skutočne celé číslo v rovnakom čase,
a že nefunguje, pretože v prípade, že nie sú dodávané argumenty
budete popada argument, že tam nie je, alebo sa pokúša chytiť ten, ktorý tam nie je.
>> Ďalšia veľká vec, že ​​si všimnete, je, že
vždy chcete vytlačiť nejaký užitočných chybové správy
pre užívateľov orientovať je.
Som si istý, že ste všetci spúšťať programy, kde zrazu spadne,
a získajte tento smiešny malý dialóg, ktorý sa objaví a povie
niečo hrozne tajomné a možno vám chybový kód alebo niečo také
to nedáva zmysel.
To je miesto, kde si naozaj chcete, aby niečo užitočného
a cielené na užívateľa tak, že pri spustení to idú "Ach," tvár dlaň.
"Viem presne, čo robiť. Viem, ako to opraviť."
>> Ak nechcete vytlačiť správu, potom môžete skončiť v skutočnosti
takže užívateľ ísť preskúmať svoj zdrojový kód
prísť na to, čo sa stalo.
Tam sú tiež niektoré časy, ktoré budete používať rôzne chybové kódy.
Tu sme len použitý jeden povedať, že bola chyba,
došlo k chybe, došlo k chybe.
Väčšie programy, často programy, ktoré sú volány inými programami,
vráti nejaký osobitný chybových kódov v rôznych situáciách
programovo komunikovať to, čo by inak
stačí použiť peknou anglickou správu pre.
Cool.
Pretože pracujeme sa, môžete vidieť, že vytiahnuť kľúč z
Testujeme, či kľúč zapadá.
Dostávame správu od užívateľa.
Dôvod, prečo sme to v tom robiť, keď slučka-a to je niečo, čo sa budeme zaoberať
v trochu, ale ukázalo sa, že ak zadáte ovládanie D
keď sa dostanete, že GetString riadku na termináli
čo to vlastne robí, je, že pošle špeciálny znak
programu.
Hovorí sa tomu ELF alebo koniec súboru znak.
A v tomto prípade, bude naša správa reťazec je null,
takže to nie je niečo, čo sme preverili v problému sama stanovila.
>> Ale ako budeme pokračovať, teraz, keď sme začali hovoriť o ukazovatele
a dynamické prideľovanie pamäte na haldy,
kontrola null, kedykoľvek máte funkciu, ktorá by mohla
vrátiť hodnotu null ako hodnota je niečo, čo budete chcieť dostať vo zvyku robiť.
To je tu predovšetkým pre ilustráciu.
Ale keď vidím GetString v budúcnosti,
tak z problému Vytvoriť 4 na, budete chcieť, aby to na pamäti.
Opäť, to nie je otázka pre problém Set 3 buď, pretože sme sa nevzťahuje to ešte.
Nakoniec sme sa k tejto časti, kde sa dostaneme do hlavného šifrovanie slučky,
a je tu pár vecí tu deje.
Po prvé, sme sa určiť iteráciou cez celý reťazec správy samotnej.
Tu sme držali strlen volanie v stave,
ktoré mnohí z vás upozornili, nie je skvelý spôsob, ako ísť.
Ukázalo sa, že v tomto prípade je to tiež nie je veľký,
čiastočne preto, že sme modifikáciu obsahu samotnej správy
vnútri slučky for, takže ak máme správu, ktorá je 10 znakov,
prvýkrát sme kto, že pre vedenie strlen vráti čo?
10.
>> Ale ak sme potom upraviť správu, že sme zmeniť jeho 5. charakter,
a hodíme do \ 0 znak v 5. pozícii,
na následné iterácii strlen (správa) sa nevráti to, čo urobil
Vôbec prvýkrát sme zopakovali,
ale namiesto toho vráti 5, pretože sme hodili v tomto null terminátor,
a reťazec je dĺžka je definovaná
podľa polohy tohto \ 0.
V tomto prípade, je to skvelý spôsob, ako ísť, pretože sme úpravou na mieste.
Ale zistíte, že je to vlastne prekvapivo jednoduché šifrovanie
ak môžete získať matematika správne.
Všetko, čo je potrebné je skontrolovať, či alebo nie list, ktorý ste pri pohľade na
je veľká alebo malé písmená.
>> Dôvod, prečo sme len pre kontrolu, že a nemáme pre kontrolu
je alfa prípad je, pretože
ak znak je veľká alebo, ak je to malé
potom je to určite abecedný znak,
pretože nemáme malá a veľká číslice.
Ďalšia vec, ktorú robíme, a to je trochu zložitejšie,
je sme upravili štandardný Caesara vzorca
že sme dali v špecifikácii problému set.
Aký je rozdiel tu je, že odpočíta
v prípade veľkým kapitálom, a potom sme pridali kapitál A
späť na konci.
>> Viem, že niektorí z vás to urobil vo vašom kóde.
Bolo niekto z vás to vo vašich príspevkov?
To si urobil ty. Môžete mi vysvetliť, čo to robí, Sahb?
Odpočítaním to, pretože ste mod hneď po ňom,
budete musieť vziať to tak, že spôsob, akým sa dostať [kašeľ] pozície.
A potom pridaním späť neskôr si prehodili ten, ktorý ste chceli.
Jo, presne tak.
What Sahb povedal, bolo, že keď budeme chcieť pridať
naše posolstvo a naším hlavným spoločne
a potom mod, že mod že NUM_LETTERS,
ak sa nezhromažďujú našej správu do príslušnej 0-25 rozsahu ako prvý,
potom by sme mohli skončiť dostať naozaj divný číslo
pretože hodnoty, ktoré sme pri pohľade na, keď sa pozrieme na správy [i],
keď sa pozrieme na tej charakteru našej prostý textové správy,
je hodnota niekde v tomto rozsahu 65 až 122
na základe hodnôt ASCII pre veľké a až malé písmená z
A tak, keď sme mod ju 26 alebo NUM_LETTERS,
pretože to bol náš # define vpravo hore tu,
, Čo sa deje, aby nám hodnotu, ktorá je v rozmedzí 0 až 25,
a my potrebujeme spôsob, ako potom škálovanie, že zálohovať
a dostať sa do príslušnej ASCII rozsahu.
Najjednoduchší spôsob, ako to urobiť, je len mierka všetko dole
do 0-25 rozmedzí začať,
a potom sa posunie všetko späť až na konci.
>> Ďalšou častou chybou, že som videl ľudí bežať do je, že
ak nemáte skutočne urobiť škálovanie hneď
pridať správu a kľúč dohromady a pridať ich, povedzme,
do char premenné, problém s tým
je od správy [i] je pomerne veľký počet začať s-
pamätajte, že je to minimálne 65, ak je to veľká postava-
Ak máte veľký kľúč, povedzme, niečo ako 100,
a pridáte tie 2 spolu do podpísaná char budeš dostať pretečeniu.
Budeš si hodnotu, ktorá je väčšia ako 127,
čo je najväčšia hodnota, ktorú char premenná môže držať.
Opäť platí, že je to dôvod, prečo by ste chceli robiť takéto veci začať.
Niektorí ľudia dostali okolo tomto prípade tým, že robí ak inde a testovanie
vidieť, keď by pretečeniu pred tým, že
ale tento spôsob sa dostane okolo toho.
A potom sa v tomto riešení sme vytlačiť celý reťazec až na samom konci.
Ostatní ľudia vytlačiť znak v čase. Obaja sú úžasné.
V tomto bode, to vy máte nejaké otázky, pripomienky ohľadne tejto?
Čo sa vám páči, veci sa vám nepáči?
>> Mal som otázku.
Možno mi to uniklo počas vysvetlenie, ale ako sa tento program
preskočiť medzery pre pripojenie kľúč k dĺžke textu?
To je len Caesarovho šifra. >> Oh, prepáč, jo.
Jo, uvidíme, že.
V kóde Caesar sme okolo toho, pretože
my len prevrátený znaky.
Máme len otočil je, ak boli veľké alebo malé písmená.
Vy pocit docela dobrý o tom?
Neváhajte kopírovať tento domov, vezmite si ju,
porovnaní s tým, čo ste napísal.
Rozhodne neváhajte a pošlite otázky o tom taky.
A opäť si uvedomiť, že cieľom tu so svojim problémom sety
nie je dostať vy písať dokonalé kód pre vaše problémové súbory.
Je to vzdelávacia skúsenosť. Jo.
>> Späť na DO, kým slučka, ak sa rovná nula,
takže null len znamená nič, jednoducho stlačte klávesu Enter?
Null je špeciálny ukazovateľ hodnoty,
a používame null, keď chceme povedať,
máme ukazovateľ premennú, ktorá smerovala k ničomu.
A tak typicky to znamená, že táto premenná, táto správa premenná
je prázdny, a tu, pretože sme pomocou CS50 špeciálny typ reťazca,
čo je CS50 string typ?
Už ste videli, čo to je, keď Dávid vytiahol kapucni v prednáške?
Je to funky-je to ukazovateľ, že jo?
Dobre, jo. >> Je to char *.
A tak naozaj sme mohli nahradiť tento
tu s char * správy,
a tak GetString funkcie, ak to nie je úspešne dostať reťazec od užívateľa,
nemôže analyzovať reťazec, a jeden prípad, v ktorom sa nemôže analyzovať reťazec
ak je užívateľ zadá koniec súboru znak, ovládacie D,
čo nie je niečo, čo zvyčajne robia, ale keď sa to stane
potom funkcia vráti túto hodnotu null ako spôsob, ako hovorí
"Hej, ja som nedostal reťazec."
Čo by sa stalo, keby sme nedávajte message = null,
čo je niečo, sme to robili ešte?
Prečo by to byť problém tu?
Pretože viem, že sme spolu hovorili trochu v prednáške o pretečeniu pamäte.
Jo, poďme to urobiť, a uvidíme, čo sa stane.
>> Vasila Blaženého otázka bola, čo sa stane, ak nebudeme skutočne mať
Táto správa = null test?
Poďme prejdite až na vrchol.
Vy môžete komentovať to.
Vlastne, ja budem šetriť ho v revízii.
To bude revízia 3.
Čo budete musieť urobiť, aby spustenie tohto programu je budete musieť kliknúť na tento ikonu ozubeného kolieska tu,
a budete musieť pridať argument k tomu.
Budete musieť dať Kľúčovým argumentom, pretože chceme odovzdať argument príkazového riadku.
Tu budem dávať mu číslo 3. Páči sa mi 3.
Teraz zoom späť, spustenie programu.
Je to beh, zostavovanie, stavebniny.
Ideme na to. Je to čaká na vyzvanie.
Ak píšem v niečom ako hello ak to šlo?
Oh, môj program trvalo príliš dlho bežať. Bol som jawing príliš dlho.
Tu to ide.
Teraz som písať ahoj.
Vidíme, že šifruje vhodne.
Teraz, čo sa stane, keď budeme robiť rýchle GetString vrátiť null?
Nezabudni, že povedať, že sme, že po stlačení ovládacieho D v rovnakom čase.
Budem prechádzať sem. Urobíme to znova.
Budova. Tam to ide.
Teraz, keď som narazila ovládanie D
Dostal som tento riadok, ktorý hovorí opt/sandbox50/bin/run.sh, Segmentation fault.
Už ste videli, že predtým?
>> [Študent] Prečo nie >> ľúto?
[Študent] Prečo nie je core dump v tomto prípade?
Jadro dump je-otázka je prečo nie je core dump tu?
Otázka je, že môže byť, ale core dump je súbor
, Ktorý sa uloží na pevný disk.
V tomto prípade sme zakázaná core dump
na úteku serveri tak, aby nemáme ľudí seg kritizovať
a vybudovanie ton core dump.
Ale môžete si ho.
Základné skládok sú také veci, ktoré môžete často zakázať,
a niekedy to.
Segmentation fault, aby som odpovedal na vašu otázku, Basil,
sa hovorí, že sme sa snažili pristupovať ukazovateľ
, Ktorý nebol nastavený, aby ukazoval na čokoľvek.
Nezabudnite Binky vo videu, kedy Binky sa snaží
ísť prístup ukazovateľ, ktorý nie je smerujúce k ničomu?
V tomto prípade myslím, že technicky ukazovateľ ukazuje na niečo.
Je to ukazuje na null, čo je technicky 0,
ale, ktorý je definovaný ako v segmente, ktorý nie je prístupný
váš program, takže získate Segmentation fault
pretože nie ste prístup pamäť, ktorá je v platnej segmente
ako haldy segmentu alebo zásobníka segment alebo dátového segmentu.
Cool.
Nejaké ďalšie otázky o Caesarovi?
>> Poďme ďalej. Poďme sa pozrieť na revízie 2 naozaj rýchlo.
To je Vigenère.
Tu v Vigenère
prejdeme tento docela rýchlo, pretože znovu,
Vigenère a Caesar sú veľmi podobné.
Header komentár je skôr,
# Define je pred vyhnúť sa používanie týchto magických čísel.
Pekná vec je, že sme chceli prejsť na
iný abeceda alebo niečo také.
Skôr než by museli ísť ručne zmeniť všetky 26 rokov v kóde
môžeme to zmeniť na 27 alebo pádu dole
ak sme používali rôzne abecedy, rôzne jazyky.
Opäť, máme túto kontrolu na počet argumentov,
a naozaj môžete takmer brať ako šablónu.
Skoro každý program, ktorý by mal mať zápis-
keby to malo trvať argumentov na príkazovom riadku-niektoré sekvencie z liniek
že číta takto na začiatku.
To je jedna z prvých zdravý rozum testov, ktoré chcete robiť.
>> Tu, čo sme urobili, bolo sme iste, že
kľúčové slovo je platný, a že bol druhý kontrola, že sme urobili.
Všimnite si, opäť, že sme sa rozišli to z argc a 2.
Všimnite si, že v tomto prípade jedna vec, že ​​sme museli urobiť, bolo miesto
použitie až aj my sme chceli overiť celý reťazec,
a aby k tomu, že ste skutočne ísť znak po znaku
cez reťazec.
Neexistuje žiadny dobrý spôsob, ako volať niečo na ňom
pretože aj, napríklad, až i vráti 0
, Pokiaľ nie je analyzovať celé číslo, tak, že sa ani pracovať.
Opäť, pekný správa musí užívateľovi oznámiť, čo presne sa stalo.
Potom tu, zase sme tiež zvládnuť prípad, kedy
používateľ zadá do ovládacieho D náhodný charakter.
>> A potom Charlotte mal otázku skôr, o tom, ako sa nám podarí preskočiť medzery
v našom reťazci tu.
To bolo trochu podobné tomu, čo sme robili s Myspace programu
že sme v bode, a tak to fungovalo
je to, že sme sledovali počet listov, ktoré sme videli.
Keď sme šli cez správy reťazca, ako sme šli cez znak po znaku,
sme sledovali index ako súčasť našej slučky for, a potom sme tiež sledovaná
počet písmen, tak non-špeciálne znaky, non-číslice, non-white space
že sme videli v samostatnej premennej.
A potom toto riešenie upravuje kľúč
získať aktuálne kľúč celé číslo, a to robí, že za behu,
priamo pred to potom ide na zašifrovanie aktuálne správy charakter.
Tam sú niektoré riešenia, ktoré boli dokonale taky skvelé
ktoré by zmeniť kľúč sa pri testovaní pre kľúč platnosti.
Okrem toho, že sa uistil, že charakter a kľúčové slovo
bol znak abecedy tiež ukázalo, že na celé číslo
v rozmedzí 0 až 25, aby potom prejdite majú čo do činenia, že neskôr v tomto pre slučke.
Opäť, tu vidíte je to naozaj presne rovnaký kód
že sme použili Caesar v tomto bode.
Robíte presne to isté, takže skutočný trik je prísť na to,
ako premeniť na základe kľúčového slova na celé číslo.
>> Jedna vec, že ​​sme tu, že je málo hustá
je, že sme zopakoval túto frázu, myslím, že by ste mohli nazvať,
3 samostatné časy na tratiach 58, 59, a 61.
Môže mi niekto vysvetliť, čo presne táto fráza robí?
Je to prístup postavu, ako si povedal.
Jo, je to [nepočuteľné] znak na kľúčové slovo,
a tak je to číslo videli písmen, pretože ste len pohybujúce sa
kľúčové slovo, akonáhle ste videli ten list,
tak, že sa to skutočne preskočiť medzery a tak podobne.
Jo, presne tak.
A potom, akonáhle ste videli kľúčové slovo prázdne stačí mod takže sa vrátiť okolo.
Presne tak. To je perfektné vysvetlenie.
To, čo Kevin povedal, je, že chceme, aby index do dané kľúčové slovo.
Chceme sa dostať na num_letters_seen charakter, ak chcete,
ale keď num_letters_seen presahuje dĺžku kľúčových slov,
spôsob, akým sa dostať späť do náležitého rozsahu ich budeme používať mod operátora
efektívne zabaliť okolo.
Napríklad, rovnako ako v krátkej, naše kľúčové slovo je slanina,
a je to 5 znakov dlhé.
Ale my sme videli 6 písmen v našom formáte obyčajného textu v tomto bode
a šifrované 6.
Budeme skončiť prístup k num_letters_seen,
čo je 6, mod dĺžka kľúčového slova, 5,
a tak dostaneme 1, a tak čo budeme robiť, je stretneme
prístup prvý znak vo vnútri nášho kľúčového slova v tomto bode.
>> Dobre, nejaké otázky na Vigenère
skôr než prejdeme?
Vy pocit docela dobrý o tom?
Cool, skvelé.
Chcem sa uistiť, že vy ste dostať šancu vidieť kód
že si myslíme, že vyzerá dobre a majú šancu učiť sa od neho.
To bude posledná budeme pomocou medzier v súčasnej dobe,
a budeme prechod teraz, a ja ísť na cs50.net/lectures
takže môžeme urobiť trochu preskúmanie kvíz.
Najlepší spôsob, ako si myslím, začať robiť kvíz recenzia
je prísť na tejto stránke prednášky, cs50.net/lectures,
a pod každou z týždňa čísel, takže keď som sa pozrieť tu v týždni 0,
Vidím, že máme zoznam tém, ktoré sme prebrali v týždni 0.
>> Ak niektorý z týchto tém sa zdá neznáme pre vás
budete určite chcieť vrátiť späť a prečesať skriptá a možno
dokonca preletieť prednášok, pozerať sa na ne znova, ak chcete
získať pocit, pre to, čo sa deje s každým z týchto tém.
Poviem navyše tento rok jeden z chladných zdrojov sme dostali
je, že tieto šortky, ktoré sme vytvorili, a keď sa pozriete v týždni 0,
nemáme všetky preberaných témach, ale máme docela málo z nich,
niektoré zložitejšie, preto je sledovanie týchto krátkych znova
je dobrý spôsob, ako sa dostať až do rýchlosti.
Najmä, ja dám do zásuvky pre 3 na dne, pretože som robil ty.
Ale ak ste zápasí s binárne, bity, šesťhranné, že druh veci,
binárny je skvelé miesto pre štart.
ASCII je ešte jeden, ktorý je dobrý pre zobrazenie príliš.
Môžete dokonca sledovať ma na 1.5x rýchlosti, ak budem príliš pomalý pre vás.
Pretože je to hodnotenie, neváhajte to urobiť.
>> Stačí začať naozaj rýchlo, budeme prejsť pár týchto vedomostných problémov
len rýchlo chrliť cez tieto.
Napríklad, poďme sa pozrieť na problém 16, že mám priamo tu na stole.
Máme tento nasledujúci výpočet v binárnej,
a chceme ukázať nejakú prácu.
Dobre, ja ti dám to výstrel.
Vy by mala nasledovať spolu s papierom,
a my urobíme to naozaj rýchlo.
Ak chceme vykonávať nasledujúce výpočet v binárnom kóde.
Mám 00110010.
A budem sa pridať k nej 00.110.010.
Pre matematiky géniov po spolu doma,
je to skutočne vynásobením 2.
Poďme začať.
Budeme sledovať rovnaký sčítanie algoritmus, ktorý my
keď pridáme desatinné čísla dohromady.
Naozaj jediný rozdiel je, že sme slučka späť okolo
akonáhle budeme mať 1 + 1 miesto, akonáhle sme sa dostali do 10.
>> Ak vychádzame z práva, naozaj rýchlo, čo je prvá číslica?
[Študent] 0. >> [Nate H.] 0.
Skvelé, druhá číslica?
[Študent] 1.
[Nate H.] Je to 1? 1 + 1 je?
[Študent] 10.
[Nate H.] Presne tak, takže to, čo je číslica, že píšem priamo pod 2 tie sčítajú?
[Študent] 1, 0, alebo 0 a potom niesť 1.
[Nate H.] 0 a niesť 1, presne.
Ďalej jeden hore, Basile, ty si hore.
Čo je to tretie? >> [Basil] 1.
[Nate H.] 1, perfektné. Kevin?
[Kevin] 0. >> [Nate H.] 0, Charlotte?
[Charlotte] 0. >> [Nate H.] Jo, a čo mám robiť?
[Študent] 1.
[Nate H.] A čo mám robiť? A potom som niesť 1.
Perfektné, Sahb? >> [Sahb] Teraz máte 1.
[Nate H.] A mám robiť tu niečo?
[Sahb] Potom pre budúci máte 1, pretože ste robili znova 1.
[Nate H.] Skvelé, takže tu môžeme dokončiť ju.
Cool.
[Študent] Má 0 + 0 = 0?
0 + 0 = 0.
1 + 1, ako si povedal, je 10, alebo 1, 0, skôr.
10 je chybný, pretože sa mi 10 znamená počet 10,
a je to vtip, ako sme reprezentovať to, keď sme písanie.
Zastupujeme číslo 2 v 1, 0, a číslo 10 je mierne odlišná.
>> Čo je celkom pekné o binárny je, že tam naozaj nie je, že veľa
prípadoch musíte naučiť.
K dispozícii je 0 + 0 = 0, 0 + 1 = 1,
1 + 1 je 0, a potom niesť 1,
a potom môžete vidieť tu na treťom stĺpci sprava
sme mali 1, 1, a 1.
A 1 + 1 + 1 je 1,
a nosíte ďalšie 1.
Keď robíte binárne sčítanie, veľmi jednoduchý.
Ja by som to ešte pár z nich do sanity check sami
predtým, než idete do systému, pretože je to
Asi niečo, čo uvidíme na kvíz.
Teraz poďme to urobiť budúci rovnako.
Poďme urobiť problém 17.
Budeme previesť nasledujúce binárne číslo na desiatkové.
Mám 10100111001.
Zapamätať si ma na binárne videu, že som to urobil
Prešiel som pár príkladov, a som ukazoval, ako
všetko funguje, keď robíte to v desiatkovej sústave.
Keď pracujete v desiatkovej sústavy Myslím, že sme
v tomto bode v našom živote tak plynule v tom, že
je to celkom ľahké zakryť mechaniku, ako to vlastne funguje.
>> Ale urobiť rýchlu rekapituláciu, keď mám číslo 137
to vlastne znamená a znova, je to v desiatkovej sústavy,
číslo 137 v desiatkovej sústave znamená, že mám 1 x 100 + 3 x 10 + 7 x 1.
To všetko je zostať na obrazovke.
A potom, keď sa pozriete na týchto číslach tu,
100, 10 a 1, zistíte, že sú to vlastne všetky sily 10.
Mám 10 m², 10 ¹, a 10 na nulu.
Máme podobný druh veci v binárnej,
okrem toho, že naša základňa, ako mu hovoríme, je 2 miesto 10.
Tieto 10s, že som napísal tu na dne,
Tento 10 ², 10 ¹, 10 k nulovej, 10 je naša základňa,
a exponent, 0, 1, alebo 2,
je naznačené na pozícii číslice v čísle, ktoré píšeme.
1, ak sa na neho pozrieme, to 1 v 2. pozícii.
3 je v prvej polohe, a 7 je v polohe 0..
To je, ako sme si rôzne exponentmi nižšie na našich základní.
>> Po všetko Dáme-vlastne, vieš čo?
Urobíme Ak sa môj tlačidlo Späť ísť?
Tam to ide.
I love this vrátiť vec.
Po tomto Myslím, že aspoň pre mňa
Najjednoduchší spôsob, ako začať konverziu binárne číslo
alebo šestnástkovej číslo, kde základ je 16
a nie 10 alebo 2, je ísť dopredu a zapísať
podklady a exponentmi pre všetky čísla v mojej binárne číslo na vrchole.
Ak začneme zľava doprava znova,
ktorý je tak trochu neintuitívne,
Budem zmeniť späť na čiernu tu, máme 2 do 0. polohy,
a potom máme 2 ¹, ² 2,
a potom 2 na 3, 2 na 4, 2 na 5, 6,
7, 8, 9, a 10.
Tieto čísla som napísal von, sú všetky exponenty.
Len som napísal základy tu v prvej 3 len pre priestor.
>> Na tomto mieste budem pokračovať, a ja som vlastne ísť zmazať
veci, ktoré sme urobili v desiatkovej sústave, ak je to v poriadku.
Vy ste všetci dostali to.
Tí z vás, sledovanie on-line Som si istý, že bude môcť pretočiť ma, či by ste chceli.
Prepnutie späť na pero.
Teraz, čo sa dá robiť ak vy nie ste úplne až na rýchlosť na vašich právomocí 2,
to je úplne v pohode.
To sa stáva. Chápem.
Raz som mal pohovor, kde mi bolo povedané, čo by som mal vedieť všetky sily 2
až cez 2 do 30..
Nebolo to práca, ktorú som dostal.
Mimochodom, môžete vy choďte do toho a to spočítajte tu,
ale s binárne nemá moc zmysel,
a ani to zmysel s desiatkovej, alebo šestnástkovej buď,
si to spočítajte, kde budete mať nuly.
Môžete vidieť mám 0 tu, je tu 0, 0 tu, 0 tu, 0 tu, 0 tu.
Prečo by to nemalo zmysel robiť skutočné matematiky
pre výpočet zodpovedajúcej silu 2 pre túto pozíciu?
Presne, ako povedala Charlotte, bude to 0.
Pokojne ušetriť čas, ak výpočtu sily 2 nie je vaša silná stránka.
V tomto prípade sa stačí spočítať pre 2 na 0, ktorý je-?
[Študent] 1.
[Nate H.] 1, 2 na 3, ktorá je-?
[Študent] 8. >> [Nate H.] 8.
2 až 4?
[Študent] 2. Je mi ľúto, 1.
[Nate H.] 2 do 4 je 16, presne.
2 k 5, Kevin? >> 32.
[Nate H.] 32, 2 na 8?
[Študent] 32 x 8, 256.
[Nate H.] Perfect.
A 2 na 10?
[Študent] 1024.
[Nate H.] Jo, 1024.
>> Akonáhle sme dostali tieto čísla môžeme zhŕňajú ich všetky.
A to je miesto, kde je to naozaj dôležité, aby to pár vecí.
Jedným z nich je ísť pomaly a skontrolovať svoju prácu.
Môžete povedať, že je tu 1 na konci tohto čísla,
tak som určite dostať nepárne číslo ako môj výsledok,
pretože všetky tie ostatné sa bude aj čísla
vzhľadom k tomu, že je to binárne číslo.
Druhá vec, ktorú musíte urobiť, je, ak sa dostanete do tohto bodu na skúšky
a vy ste to napísal tak ďaleko
a máte málo času
pozrieť sa na počet bodov, ktoré tento problém stojí.
Tento problém, ako môžete vidieť, keď som otočiť späť do svojho notebooku naozaj rýchlo-
tento problém je za 2 body, takže to nie je ten druh Okrem
mali by ste ísť cez ak ste naozaj v časovej tiesni.
Ale budeme prepnúť späť na iPad, a pôjdeme cez to naozaj rýchlo.
>> Páči sa mi robiť malé množstvo prvého
pretože som zistil, že jednoduchšie.
Páči sa mi 32 a 8, pretože oni idú spolu celkom ľahko, a dostaneme 50.
16 a 1 dostane 17.
Tam sme sa 57,
a potom môžeme urobiť zvyšok tohto, tak môžeme urobiť 57, 156.
Poď.
Man, dobre, uvidíme.
Mali sme 57, 256, a 1024.
V tomto bode, by som radšej prejsť.
Nemám tušenie. Jasne som potrebné, aby si prečítali na túto tému.
7, 6, a 4, dostanete 17.
1, 5, 5, 2, 13.
Potom dostaneme 3, a potom sme si 1.
1337.
Veľkonočné vajíčko, niekto?
Niekto spoznať toto číslo?
Chris rozpozná číslo. Čo to znamená, Chrisi?
[Chris] Leet.
Leet, takže keď sa pozriete na to, vyzerá to, že Leet.
Hacker veci. Dajte si pozor na takéto veci na strednodobé alebo kvíz, skôr.
Ak vidíte, že takéto veci a ste premýšľal "Hm,"
, Ktorý by mohol niečo znamenať.
Neviem. David rád uvedenie dovnútra
Je to dobrý spôsob, ako zdravý rozum skontrolovať.
Rovnako ako v poriadku, môžem vidieť, čo sa deje.
>> To je týždeň 0/Week 1 veci.
Ak by sme prepnete späť do nášho notebooku teraz,
oddialiť, a pár ďalších vecí.
Tam je ASCII, ktoré sme robili veľa s problémovými sad.
Tento pojem kapitálu A. Čo je to vlastne?
Vedieť, že je to desatinné číslo.
65 je to, čo je mapovaná v ASCII tabuľke,
a to preto, ako počítač píše to,
a to je, ako sme sa dostať preč sa písaním
charakter kapitálu a charakter malé písmená
v niektorých z týchto riešení a problémov sád, ktoré ste robili.
Pár ďalších vecí.
Máme vyhlásenie, logické výrazy, podmienky, cykly, premenné a vlákien.
>> Tí všetci Zdá sa, že zmysel pre najviac sa rozdeliť?
Niektoré z tejto terminológie je trochu funky občas.
Rád si o vyhlásenie ako najviac časť niečoho, čo končí bodkočiarkou.
Vyhlásenie ako x = 7, ktorý stanovuje premenné,
pravdepodobne len x = 7.
Pravdepodobne x je tiež typ, ktorý je možné uložiť číslo 7,
takže je to int prípadne float alebo krátky alebo char,
niečo také.
Boolean výraz je použitie týchto dvojníka sa rovná
a prásk rovná alebo nie je rovná, menej než, väčšie ako,
menšie alebo rovné, všetky takéto veci.
Podmienky sú teda v prípade else.
Ja by som si, že nemôžete mať else bez zodpovedajúcej, ak.
Rovnako tak, nemôžete mať else ak je to bez zodpovedajúcej, ak.
Slučky, pripomínajú 3 druhov slučiek sme boli kladivami do teba
za posledných pár oddielov a problémových súborov.
Použitie so zatiaľ čo keď ste sa dostal vstup od užívateľa,
pomocou while kým určité podmienky, je pravda,
a potom pomocou tým, pre slučky, ak potrebujete
vedieť, ktorý iterácia slučky sa práve on je, ako som o tom premýšľať.
Alebo ak robíte pre každý znak v reťazci by som chcel niečo urobiť,
pre každý prvok poľa chcem urobiť niečo k tomuto prvku.
>> Vlákna a udalosti.
Tie sme nevzťahuje tak explicitne v C,
pamätajte však že týmto od nuly.
To je predstava mať rôzne skripty.
To je tiež tento pojem vysielanie udalosť.
Niektorí ľudia nemali používať vysielania vo svojich projektoch spočiatku,
ktorá je úplne chladný,
ale to sú 2 rôzne spôsoby zaobchádzania s týmto väčší problém tzv súbežnosti,
ktoré je, ako sa vám programy spustiť
alebo zdanlivo vykonať súčasne?
Rôzne úlohy beží, zatiaľ čo ostatné úlohy sú tiež beží.
To je, ako operačný systém vyzerá, že pracuje.
To je preto, aj keď, napríklad,
Ja som dostal môj prehliadač beží, môžem tiež obrátiť na Spotify a hrať pieseň.
To je viac koncepčné veci pochopiť.
Ja by som sa pozrieť na závity krátkych
Ak sa chcete dozvedieť viac o tom.
>> Poďme sa pozrieť, som presvedčený, že by mohol byť
problém na to v jednej z nich.
Opäť si myslím, že nite a akcie nie sú niečo, čo sa bude týkať v C
len preto, že je to podstatne ťažšie ako v Scratch.
Mali by ste si s tým starosti tam, ale rozhodne pochopiť pojmy,
pochopiť, čo sa deje.
Ešte než sa vrhneme na akékoľvek otázky týkajúce sa týždni 0 materiálu?
Všetci cítia celkom dobre?
Pochopenie premenné a čo je premenná?
>> Ďalej. Týždeň 1.
Pár vecí tu, že sa nijako zvlášť pokryté
v kvíze preskúmania nutne a tiež sú viac koncepčné veci myslieť.
Prvá z nich je táto predstava o tom, čo zdrojového kódu, prekladača a objektových kódov sú.
Niekto? Basil.
Je objektový kód, myslím zdrojový kód je to, čo ste vložili do Clang,
a objektový kód je to, čo rinčať vyhlási tak, že váš počítač môže čítať program.
Presne tak.
Zdrojový kód je kód C, že ste vlastne písať hore.
Objektový kód je to, čo dostanete z kovový zvuk.
Je to 0s a 1s v tomto binárnom formáte.
Tak čo sa stane, je, keď máte veľa objektových súborov,
povedať, že ste zostavovaní projektu alebo programu, ktorý používa viac súborov zdrojového kódu,
ktoré podľa konvencie sú uvedené na. C príponu.
To je dôvod, prečo máme caesar.c, vigenère.c.
Ak píšete Java programy, ktoré im rozšírenie. Java.
Python programy majú príponu. Py často.
>> Akonáhle budete mať viac. C súborov, môžete skompilovať.
Rinčanie vypľuje všetko binárne haraburdie.
Potom, pretože si chcete iba 1 programu
máte linker odkaz všetkých týchto objektových súborov spoločne
do 1 spustiteľného súboru.
To je tiež to, čo sa stane, keď použijete CS50 knižnicu, napríklad.
Knižnica CS50 je tak, že. H hlavičkový súbor
že budete čítať, že # includecs50.h.
A potom je to aj špeciálne binárny súbor knižnice
, Ktorá bola zostavená, aby ich 0s a 1s,
a že-l, takže ak sa vrátime k našim priestory a my sa naozaj rýchlo,
na to, čo sa tu deje, keď sa pozrieme na našu rinčať príkaz,
to, čo máme, je to náš zdrojový kód súboru tu.
Jedná sa banda kompilátor.
A potom sa na samom konci, to-l vlajky odkaz v
skutočné binárne súbory pre tieto 2 knižnice, CS50 knižnica a potom matematická knižnica.
>> Pochopenie každý typ účelu súborov '
v procese kompilácie je niečo, čo budete chcieť, aby sa mohli
obsahovať aspoň na vysokej úrovni prehľad.
Zdrojový kód vypovedaciu Object code vyjde.
Objektové súbory kód prepojiť, a dostanete krásnu, spustiteľný súbor.
Cool.
To je tiež, kde môžete získať chyby na viacerých miestach
v procese kompilácie.
To je miesto, kde, napríklad, ak budete mať túto prepojenie vlajkou,
CS50 vlajka, a ho vynecháte v priestoroch alebo keď vediete svoj kód,
to je miesto, kde budete mať chybu v prepojení fáze,
a linker bude hovoriť, "Hele, si volal funkcie GetString
že je v CS50 knižnici. "
"Povedal si mi, že je v CS50 knižnici, a nemôžem nájsť kód pre neho."
To je miesto, kde budete musieť pripojiť do, a to zvlášť
od kompilátora chyby, pretože kompilátor hľadá syntaxe a také veci.
Je dobré vedieť, čo sa deje, keď.
>> Ostatné veci vedieť.
Povedal by som, že budete určite chcieť, aby sa pozrieť na krátky na obsadiť vykonáva Jordan
rozumieť tomu, čo ints sú pod kapotou,
what znaky sú pod kapotou.
Keď hovoríme o ASCII a my skutočne pozrieť na ASCII tabuľky,
čo to robí je, že nám pod kapotou vzhľad
na to, ako počítač v skutočnosti predstavuje kapitál a číslice 7
a čiarka a otáznik.
Počítač má tiež zvláštne spôsoby, ktoré reprezentujú
číslo 7 ako celé číslo.
To má zvláštny spôsob, ako reprezentovať číslo 7 ako číslo s plávajúcou čiarkou,
a tie sú veľmi odlišné.
Obsadiť je, ako povedať, že počítač "Hej, chcem previesť
z jednej reprezentácie do inej reprezentácie. "
Prečo by sme sa na to pozrieť.
>> Tiež by som sa pozrieť na krátky, o knižniciach a krátke na prekladača.
Tí hovoria o procese kompilácie,
Čo je knižnica, a ísť cez niektoré z týchto otázok, ktoré by vás mohli pýtajú.
Otázky týkajúce sa týždeň 1 materiálu?
Existujú témy Tu, ktoré sa zdajú skľučujúca by ste chceli pokryť?
Snažím sa vyhodiť väčšinu týchto predchádzajúcich tém tak, že sa môžeme dostať do
ukazovatele a urobiť trochu rekurzie.
Myšlienky?
Niečo na pokrytie?
Čas na nejaké čokolády možná?
Vy pracujete cez to.
Budem držať popíjanie kafe.
2. týždeň.
Dobrý nápad, dobrá výzva.
V týždni 2 sme si rozprávali trochu viac o funkciách.
>> V prvých niekoľkých problémových setoch som naozaj písať žiadne funkcie vôbec
iné než ktoré funkcie?
[Študent] Hlavné. >> Hlavné, presne.
A tak sme videli rôzne kostýmy, ktoré nosia hlavné.
Tam je ten, v ktorom je neakceptuje žiadne argumenty,
a povieme prázdnotu medzi zátvorky,
a potom je tu druhý, kde sme si chcete vziať argumenty príkazového riadku,
a ako sme videli, že je miesto, kde budete mať int argc a ArGV string array
alebo teraz, keď sme skutočne vystavení reťazec byť char *, že je
budeme začať písať ako char * ArGV a potom držiakov.
V problému Set 3, vy videl veľa funkcií,
a ste zaviedli veľa funkcií, kresliť, pozrite sa, ťahanice.
Prototypy boli všetky napísané tu pre vás.
>> Čo som chcel hovoriť o tom tu s funkciami naozaj rýchlo
je to, že tam sú 3 diely, kedykoľvek sa budete napísať funkciu.
Musíte zadať návratový typ funkcie.
Musíte zadať názov funkcie, a potom sa budete musieť zadať
zoznam argumentov alebo zoznam parametrov.
Napríklad, keď som mal napísať funkciu zhrnul veľa celých čísel
a potom sa vrátiť ku mne súčet toho, čo by môj návrat typ
keby som chcel zhrnúť celé čísla a potom sa vrátiť čiastku?
Potom názov funkcie.
Ak by som do toho pustite a napíšte zelene, táto časť je návratový typ.
Táto časť je názov.
A potom v zátvorkách
je miesto, kde som sa dať argumenty,
často skrátil ako args, niekedy volal params pre parametre.
A ak máte jeden, stačí zadať jeden.
Ak máte viac oddeľte každý z nich s čiarkou.
A pre každý argument si dať 2 veci, ktoré sú, Kevin?
[Kevin] Musíte dať typ a potom meno.
A potom meno, a meno je meno, ktoré budete používať
odkazovať na tento argument v rámci súčtu funkcií,
vo funkcii, že ste v súčasnej dobe písania.
>> Nemusíte sa-napríklad, keď idem zhrnúť,
hovoria, pole celých čísel-Dáme to int pole,
a ja dávam nejaké zložené zátvorky tam-
potom, keď som sa odovzdať pole na funkciu SUM
Minul som ju na prvej pozícii v zozname argumentov.
Ale pole, ktoré som odovzdať nemusí mať názov ARR.
Arr bude, ako som odkazovať na tento argument v tele funkcie.
Ďalšia vec, ktorá je potrebné vziať do úvahy,
a to je mierne odlišné od funkcií, ale myslím, že je to dôležitý bod,
je, že v C, keď píšem funkciu, ako je tento
Ako mám vedieť, koľko prvkov je v tomto poli?
To je trochu chyták.
Hovorili sme o tom trochu minulý týždeň v oddiele.
Ako mám vedieť, počet prvkov vo vnútri poľa v C?
Je tam spôsob, ako?
>> Ukazuje sa, že neexistuje žiadny spôsob, ako vedieť.
Musíte prejsť do samostatne.
Tam je trik, ktorý môžete robiť
ak ste v rovnakej funkcii v ktorom pole bolo vyhlásené,
a pracujete s zásobníka poľa.
Ale to funguje len ak ste v rovnakej funkcii.
Akonáhle odovzdať pole na inú funkciu, alebo ak ste vyhlásil poľa
a dáte, že pole na halde, ktoré ste použili malloc
a tento druh vecí, potom sú všetky stávky sú preč.
Potom ste skutočne prejsť okolo
zvláštne tvrdenie alebo iný parameter, ktorý
ti, aká veľká pole je.
V tomto prípade, chcel by som použiť čiarky to ľúto, že to bude mimo obrazovku tu-
a ja by som odovzdať v inom argumente
a nazývať to int ľan na dĺžku.
>> Jedna vec, ktorá by mohla prísť na kvíz
je výzvou na písanie alebo zaviesť určitú funkciu s názvom niečo.
Ak sa vám nedávajú prototyp, tak celá táto vec tu,
celý tento neporiadok je nazývaný deklarácie funkcie alebo funkčný prototyp,
To je jedna z prvých vecí, ktoré budete chcieť donútiť, ak to nie je uvedený
na vás hneď na kvíz.
Ďalšie trik som sa naučil, je, že
povedať, že sme to vám prototyp pre funkciu, a my hovoríme, "Hele, musíš napísať."
Vnútri zložených zátvoriek, ktoré máte v kvíze
ak si všimnete, že je návratový typ a zistíte, že návratový typ
je niečo iné, než prázdna, čo znamená, že funkcia nevracia nič,
potom jedna vec, budete určite chcieť urobiť, je napísať
nejaký return na samom konci funkcie.
Návrat, a v tomto prípade, dáme prázdne, pretože chceme, aby vyplniť prázdne.
Ale to vás dostane myslenie správnym spôsobom o tom, ako budem pristupovať k tomuto problému?
A to pripomína budete musieť vrátiť hodnotu
k volajúcemu funkcie.
>> Jo. >> [Študent] Má štýl použije, keď sme písať kód na kvíz?
Ako je odsadenie a také veci? >> [Študent] Jo.
Nie, nie toľko.
Myslím, že veľa-to je niečo, čo budeme objasniť na kvíz v deň,
ale zvyčajne starosti # obsahuje a tento druh vecí, je to trochu mimo.
[Študent] Potrebujete, aby sa vyjadril svoje vlastnoručné kód?
Potrebujete, aby sa vyjadril svoje vlastnoručné kód?
V poznámkach je vždy dobré, ak máte obavy o čiastočné úveru
alebo ak chcete oznámiť svoj zámer na porovnávač.
Ale ja, zase, bude objasniť na teste sám a na deň kvízu,
ale ja neverím, že budete musieť písať komentáre, no.
Zvyčajne nie je, ale je to určite jedna z tých vecí, kde
môžete komunikovať svoj zámer, ako "Hej, to je miesto, kde budem s ním."
A niekedy, že vám môžu pomôcť s čiastočným úveru.
Cool.
>> Basil.
[Basil] Aký je rozdiel medzi prehlasuje, povedzme, int LANG
v argumentoch alebo parametre oproti deklarovaní premennej vo funkcii?
Wow, káva išiel priedušnici.
[Basil] Ako, ktoré veci chceme dať v argumentoch.
Jo, to je veľká otázka.
Ako si vybrať to, čo veci, ktoré chcete dať do argumentov
proti aké veci by ste mali urobiť, vnútri funkcie?
V tomto prípade sme zaradili obe tieto ako argumenty
preto, že sú niečo, čo každý, kto sa bude používať funkciu SUM
musí špecifikovať tie veci.
>> Súčet funkcie, ako sme hovorili o tom, nemá žiadny spôsob, ako zistiť,
aký veľký je pole sa dostane z jeho volajúceho alebo ten, kto je pomocou funkcie SUM.
To má žiadny spôsob, ako zistiť, aké veľké toto pole je.
Dôvod, prečo sme prejsť v tejto dĺžke tu ako argument
Je tomu tak preto, že je to niečo, čo sme v podstate rozprávanie volajúci funkcie,
kto ich bude používať funkciu SUM, "Hej, nielen že budete musieť dať nám poľa
z ints, budete tiež musieť povedať nám, aký veľký je pole, ktoré ste nám je. "
[Basil] Tí budú obe argumenty z príkazového riadku?
Nie, to sú skutočné argumenty, ktoré by ste odovzdať funkciu.
>> Dovoľte mi, aby som to novú stránku tu.
[Basil] Ako meno by pass-
[Nate H.] Ak mám int main (void),
a ja dám v mojom návrate 0 sem v dolnej časti,
a že chcem volať funkciu SUM.
Chcem povedať, int x = sum ();
Ak chcete použiť funkciu SUM musím prejsť v oboch pole, ktoré chcem zhrnúť
a dĺžka poľa, takže ak je
za predpokladu, že som mal celý rad ints,
že som mal int numbaz [] = 1, 2, 3,
druh použitia, ktoré nabúral do syntaxe tu,
potom to, čo budem robiť, je v súčte by som chcel odovzdať
ako numbaz a číslo 3
povedať sumu funkciu "Dobre, tu je pole chcem, aby ste spočítať."
"Tu je jeho veľkosť."
Dáva to zmysel? Znamená to, že odpoveď na vašu otázku?
>> V mnohých ohľadoch to robí paralelne, čo robíme s hlavnou
keď máme argumenty príkazového riadku.
Program, ako Caesara, napríklad, že potreba
Argumenty príkazového riadku nebudú môcť nič robiť.
Nebolo by vedieť, ako šifrovať, ak ste si povedať, že to, čo kľúč na použitie
alebo ak ste nepovedal to, čo ste chceli reťazec na zašifrovanie.
Dopytovanie pre vstup, to je miesto, kde máme 2 rôzne mechanizmy
pre prijatie vstup od užívateľa, pričom pre informácie od užívateľa.
Pre Problém Set 1 sme videli tento GetInt, GetString, GetFloat cestu
z výzvy pre vstup, a to je volaný pomocou štandardného vstupného prúdu.
Je to trochu odlišné.
Je to niečo, čo môžete urobiť, zrazu na rozdiel od
pri vyvolaní programu, pri spustení program beží.
Argumenty príkazového riadku všetci sú špecifikované pri spustení programu beh.
Boli sme miešanie dva z nich.
Keď používame argumenty funkcie, je to podobne ako argumenty príkazového riadku na hlavnej.
Je to, keď vyvoláte funkciu, ktorú potrebujete oznámiť,
čo presne potrebuje na plnenie svojich úloh.
Ďalšia dobrá vec pozerať sa na a ja ťa nechám na to pozrieť vo svojom voľnom čase,
a to bola pokrytá v kvíze, bol tento pojem pôsobnosti
a lokálne premenné oproti globálnych premenných.
Do venovať pozornosť.
>> Teraz, keď sme stále na tejto inej veci,
v týždni 3 sme začali hovoriť o vyhľadávanie a radenie.
Vyhľadávanie a triedenie, aspoň v CS50,
je veľmi úvod do niektorej z teoretickej časti výpočtovej techniky.
Problém hľadanie, problém triedenie
sú veľké, kanonické problémy.
Ako si nájsť konkrétne číslo v poli miliárd celých čísel?
Ako si nájsť konkrétne meno v telefónnom zozname
, Ktorý je uložený na vašom notebooku?
A tak sme zaviesť tento pojem asymptotickej doby behu
naozaj kvantifikovať, ako dlho, ako ťažké to problém je,
ako dlho berú riešiť.
V, verím, 2011 v kvíze je tu problém, že som si zasluhuje
pokrývajúci veľmi rýchlo, čo je tento, problém 12.
O nie, je to Omega.
>> Tu hovoríme o najrýchlejšom možnom behu
k určitému algoritmu a potom najpomalší možné behu.
Tento Omega a O sú naozaj len skratky.
Sú notační skratky pre ostatné
ako rýchlo v najlepší možný prípad bude náš algoritmus run,
a ako pomaly v najhoršom možnom prípade bude náš algoritmus beží?
Poďme urobiť pár z nich, a tie boli tiež zahrnuté
v krátkej na asymptotickej notáciu, ktorá vrelo odporúčam.
Jackson odviedol naozaj dobrú prácu.
S binárne vyhľadávanie, hovoríme o binárne vyhľadávanie ako je algoritmus,
a väčšinou si rozprávame o tom, pokiaľ ide o jeho veľké O.
Čo je to veľký O?
Čo je najpomalší možná doba chodu binárneho vyhľadávania?
[Študent] N ²?
Zavrieť, myslím, že podobne ako.
Je to oveľa rýchlejšie, než to.
[Študent] Binary? >> Jo, binárne vyhľadávanie.
[Študent] Je to log n
Prihlásiť n, takže to, čo robí prihlásiť n znamená?
To polovičky pri každom opakovaní.
Presne tak, v najpomalší možný prípad,
povedať, či máte zoradené poľa
milióna celých čísel a počet hľadáte
je buď prvý prvok v poli, alebo posledný prvok v poli.
Nezabudnite, binárne vyhľadávacie algoritmus pracuje tak, že pri pohľade na prostredný prvok,
zistiť, či je to zápas, ktorý hľadáte.
Ak je, potom skvelé, ste ju našli.
>> V najlepšom možnom prípade, ako rýchlo sa binárny vyhľadávací beh?
[Študenti] 1.
1, je konštantný čas, veľký O z 1.. Jo.
[Študent] Mám dotaz. Keď sa povie log n, myslíš vzhľadom na základni 2, nie?
Áno, tak to je iná vec.
Hovoríme protokolu n, a myslím, že keď som bol na strednej škole
Vždy som predpokladal, že log je základ 10.
Jo, takže áno, prihláste základňa 2 je zvyčajne to, čo používame.
Opäť platí, že návrat do binárneho vyhľadávania, ak hľadáte pre jeden
prvok na samom konci, alebo prvok na samom začiatku,
pretože začnete v stredu, a potom je vyhodíte
podľa toho, čo polovica nespĺňa kritériá, ktoré hľadáte,
a idete na ďalšiu polovicu a ďalšia polovica a ďalšia polovica.
Ak som hľadal najväčší prvok v miliónoch integer poľa
Idem na polovicu je nanajvýš protokolu 1000000 krát
ako som sa konečne vyskúšať a uvidíte, že element Hľadám
je v najväčšej alebo v najvyššej index poľa,
a že bude trvať log n, prihláste 1 milión krát.
>> Bubble sort.
Myslíte si, chlapci si na bubliny radenie algoritmus?
Kevin, môžete mi dať rýchly rekapituláciu toho, čo sa stalo v algoritme bubble sort?
[Kevin] V podstate to ide cez všetko v zozname.
Vyzerá to na prvé dva.
Ak je prvý z nich je väčší ako druhý to swap nich.
Potom sa porovnáva druhý a tretí, to isté, swapy,
tretej a štvrtej, celú cestu dole.
Väčšie čísla budú nasledovať až do konca.
A po mnohých cykloch však máte hotovo.
Presne tak, to, čo Kevin povedal, je, že budeme sledovať väčšie počty
bublina až do konca poľa.
Napríklad, nebude vám vadiť, pešia nám prostredníctvom tohto príkladu, ak je to naše pole?
[Kevin] Budete mať 2 a 3.
3 je väčší ako 2, takže je swap.
[Nate H.] Dobre, tak vymeníme tieto, a tak sme si 2, 3, 6, 4, a 9.
[Kevin] Potom budete porovnávať 3 a 6.
3 je menší ako 6, tak ich necháte,
a 6 a 4, mali by ste vymeniť, pretože 4 je menší ako 6.
[Nate H.] Dobre, tak som si 2, 3, 4, 6, 9.
[Kevin] A 9 je väčší ako 6, takže si nechajte ho.
A vy by ste sa vrátiť cez to znova.
>> [Nate H.] Mám urobiť na tomto mieste? >> [Kevin] č
A prečo som nespravil v tejto chvíli?
Vzhľadom k tomu, to vyzerá, že moja pole je radený. Pozerám sa na neho.
[Kevin] Prejdite si to znova a uistite sa, že nie sú žiadne ďalšie swapy
než budete môcť plne zastaviť.
Presne, takže treba ísť ďalej až do konca a uistite sa, že nie sú žiadne swapy
že je možné vykonať v tomto bode.
Bolo to naozaj len šťastie, ako si hovoril, že sme skončili
iba musel platiť 1 priechod a my zoradené.
Ale urobiť to vo všeobecnom prípade budeme skutočne musieť urobiť to znova a znova.
A v skutočnosti, to bolo príkladom najlepší možný prípad,
ako sme videli v problému.
Videli sme, že najlepší možný prípad bol n
Išli sme cez pole 1 krát.
Čo je najhorší možný prípad tohto algoritmu?
[Kevin] N ².
A čo to vyzerá? Čo by pole vyzerať, že by sa n? Čas?
[Kevin] [nepočuteľné] zoradené.
Presne, takže keď som mal pole 9, 7, 6, 5, 2,
Najprv 9 by bublina celú cestu hore.
Po 1 iterácii budeme mať 7, 6, 5, 2, 9.
Potom 7 by bublina hore, 6, 5, 2, 7, 9, a tak ďalej, a tak ďalej.
>> Museli by sme ísť cez celé pole n časy,
a môžete skutočne dostať o niečo presnejšie ako toto
pretože akonáhle sme presunuli 9 po celú cestu až do svojho posledného možného postavenie
vieme, že nikdy nebudete musieť porovnať proti tomuto prvku znova.
Akonáhle začneme buble na 7 až
vieme, že sa môžeme zastaviť, akonáhle 7 je priamo pred 9
lebo sme už porovnali 9 k nemu.
Ak to urobíte v inteligentným spôsobom, že to nie je naozaj, myslím, že veľa času.
Nebudete porovnať všetky možné [nepočuteľné] kombinácie
zakaždým prejsť každej iterácii.
Ale napriek tomu, keď hovoríme o tom hornú hranicu môžeme povedať, že
sa pozeráte na n ² porovnaní celú cestu cez.
>> Vráťme sa späť, a od tej doby sme začínam trochu málo času
Povedal by som, že by ste sa mali rozhodne ísť cez zvyšok tejto tabuľky,
vyplniť to všetko von.
Myslite na príkladoch. Myslite na konkrétnych príkladoch.
To je naozaj šikovný a užitočné urobiť.
Nakreslite to.
Toto je druh tabuľky, ktoré, ako si prejsť v informatike
mali by ste naozaj začať poznať tieto strany srdca.
Jedná sa o druhy otázok dostanete v rozhovoroch.
Ide o druhy vecí, ktoré sú dobré vedieť,
a myslím, že na tie hrany prípadoch, naozaj prísť na to, ako premýšľať o
s vedomím, že pre bubliny triediť najhoršie možnú poľa
triediť s tým je ten, ktorý je v opačnom poradí.
>> Ukazovatele. Poďme trochu pohovoriť o ukazovatele.
V posledných niekoľkých minútach sme sa tu
Ja viem, že to je niečo, čo spolu so súborom I / O, ktorá je pomerne nový.
Keď hovoríme o ukazovateľoch dôvod chceme hovoriť o ukazovatele
Je tomu tak preto, jeden, keď pracujeme v C
sme naozaj na pomerne nízkej úrovni v porovnaní s väčšinou moderných programovacích jazykov.
Sme skutočne schopní manipulovať premenné v pamäti,
zistiť, kde oni sú v skutočnosti nachádza v našej pamäti RAM.
Akonáhle ste sa rozhodli, aby prijal tried operačný systém, ktorý uvidíte
že je opäť akýmsi abstrakcie.
To nie je v skutočnosti pravda.
Máme virtuálna pamäť, ktorá sa skrýva tieto údaje od nás.
>> Ale teraz môžete predpokladať, že keď máte program,
Napríklad, keď začnú svoj Caesara programu-
Budem prepnúť späť do môjho iPad naozaj rýchlo-
že na samom začiatku programu, ak máte, povedzme,
4 GB RAM na vašom notebooku,
vám zrušil tento kus, a my Vám zavoláme túto RAM.
A začína v mieste, budeme volať 0,
a končí na mieste, ktoré budeme nazývať 4 GB.
Ja naozaj nemôžem písať. Človek, sa hacknut, že.
Keď váš program vykoná
operačný systém vyrezáva pamäť RAM,
a špecifikuje rôzne segmenty pre rôzne časti vášho programu žijete
Tu dole táto oblasť je tak trochu zeme nikoho.
Keď idete hore kúsok ďalej tu
máte skutočne na miesto, kde
kód pre umiestnenie programových život.
Že skutočné binárny kód, v skutočnosti, že spustiteľný súbor sa nahrá do pamäte
pri spustení programu, a to žije v kóde segmente.
A ako váš program spustí procesor sa pozerá na tomto kóde segmente
prísť na to, aký je ďalšie inštrukcie?
Aký je ďalší riadok kódu musím spustiť?
>> K dispozícii je tiež dátový segment, a to je tam, kde sa tieto reťazce konštanty
sa uloží, ktoré ste doteraz používali.
A potom ďalej tam je to miesto zvané haldy.
Máme prístup k pamäti tam pomocou malloc,
a potom smerom k vrcholu svojho programu
je tu hromada,
a to je, kde sme hrali po väčšinu začiatku.
To nie je v mierke alebo tak niečo.
Mnoho z toho je veľmi závislá na systéme,
operačný systém závislý, ale to je pomerne, ako sa veci blokového up.
Pri spustení programu a deklarovať premennú s názvom x-
Budem čerpať ďalšie krabicu dole, a to sa bude RAM rovnako.
A budem vyzerať.
Budeme kresliť zubaté čiary uviesť toto je len malá časť pamäte RAM
a nie všetci to, ako sme tomu v hornej časti.
>> Ak Prehlasujem celočíselnú premennú nazvanú x,
potom to, čo som vlastne si ich mapovanie
, Ktorý je uložený v tabuľke symbolov svojho programu
ktoré spája meno x do tejto oblasti pamäte, ktoré som vypracované
tu medzi zvislými pruhmi.
Keď budem mať riadok kódu v mojom programe, ktorý hovorí, že x = 7
procesor vie "Ach, áno, ja viem, že x žije v tejto lokalite v pamäti."
"Chystám sa ísť dopredu a napísať 7 tam."
Ako to vedieť, čo to je miesto v pamäti?
No, to, že všetko je hotové v čase kompilácie.
Kompilátor sa stará o prideľovaní, kde každé premenné sa chystáte ísť
a vytvoriť špeciálne mapovanie či skôr pripojenie bodky
medzi symbolom a, kde to bude, premenná je meno
a, kde to bude žiť v pamäti.
Ale ukázalo sa, že skutočne môžeme k nim pristupovať v našich programoch rovnako.
To dostane dôležité, keď začneme hovoriť o niektorých dátových štruktúr,
čo je pojem, ktorý budeme zavádzať neskôr.
>> Ale teraz, čo môžete vedieť, je to, že môžem vytvoriť ukazovateľ na toto miesto, x.
Napríklad, môžem vytvoriť premennú ukazovatele.
Keď sme sa vytvoriť premennú ukazovatele používame hviezdy notáciu.
V tomto prípade, to hovorí budem vytvoriť ukazovateľ na int.
Je to typ, rovnako ako každý iný.
Dávame mu premennú ako y,
a potom nastaviť tak, rovná adresu, na adrese.
V tomto prípade, môžeme nastaviť y poukázať na x
tým, že adresu x, ktoré nesúvisia s týmto ampersand,
a potom sme sa vydali y, aby ukazoval na neho.
Čo to v podstate robí, je, keď sa pozrieme na našu RAM
vytvára samostatnú premennú.
Bude to hovoriť y,
a keď tento riadok kódu vykoná
to je vlastne chystáte vytvoriť malý ukazovateľ, ktorý sme zvyčajne čerpať ako šíp,
a nastaví y poukázať na x.
Áno.
[Študent] Ak x je už ukazovateľ, by ste jednoducho
int * y = x namiesto ampersand?
Áno.
Ak x je už ukazovateľ, potom si môžete nastaviť 2 ukazovatele vo výške rovnajúcej sa navzájom,
v takom prípade by sa y poukázať na x,
ale to by chcel poukázať na čokoľvek x ukazuje.
Bohužiaľ, sme mimo čas.
>> Čo by som povedal v tomto bode, môžeme sa o tom porozprávať režime offline,
ale ja by som začať pracovať prostredníctvom tohto problému, # 14.
Môžete vidieť, že je to už trochu vyplnený tu pre Vás.
Môžete vidieť, že keď my deklarujeme 2 ukazovatele, int * x a y *,
a všimnite si, že ukázal na * vedľa premenné bolo niečo, čo bolo vykonané v minulom roku.
Ukazuje sa, že je to podobné tomu, čo robíme v tomto roku.
Nezáleží na tom, kde ste napísať *, keď ste vyhlásil ukazovateľ.
Ale my sme písali * vedľa typu
preto, že je veľmi jasné, že ste deklarovať premennú ukazovatele.
Môžete vidieť, že vyhlási 2 ukazovatele nám 2 krabičky.
Tu, keď sme x sa rovná malloc
čo to hovorí je zrušenie pamäte v halde.
Tento malý box tu, to kruh, sa nachádza na halde.
X ukazuje na neho.
Všimnite si, že y je stále neukazuje na nič.
Ak chcete získať pamäť na uloženie čísla 42 do x
by sme použili čo notáciu?
[Študent] * x = 42.
Presne, * x = 42.
To znamená, že za šípkou a hodiť 42 tam.
Tu, kde sme sa vydali y a x sme y ukazuje na x.
Opäť platí, že je to presne to, čo Kevin povedal, kde sme sa vydali y rovné x.
Y neukazuje na x.
Skôr, je to ukázal na to, čo x ukazuje na rovnako.
>> A potom sa konečne v tomto poslednom okne sú 2 možné veci, ktoré by sme mohli robiť.
Jedným z nich je dalo by sa povedať * x = 13.
Druhá vec je, že sme mohli povedať: Alex, vieš, čo by sme mohli robiť?
Dalo by sa povedať, * x = 13 alebo-
[Študent] Dalo by sa povedať, int čokoľvek.
[Nate H.] Ak bol odvolával sa na ako int premenné sme mohli urobiť.
Mohli by sme tiež povedať, * y = 13, pretože sú obaja ukázal na rovnakom mieste,
tak by sme mohli použiť buď premenná sa tam dostať.
Jo. >> [Študent] Čo by to vyzeralo, keby sme len povedať, int x je 13?
To by bolo deklarovať novú premennú s názvom x, ktorý by nefungoval.
Mali by sme mať kolízii, pretože je deklarovaná x za ukazovateľ tu.
[Študent] Keby sme mali toto vyhlásenie samo o sebe, čo by to vyzerať, pokiaľ ide o kruhu?
Ak by sme mali x = 13 a potom budeme mať pole, a skôr než na šípku
prichádza po vybalení z krabice by sme nakresliť ako len 13.
[Študent] V poli. Dobre.
>> Ďakujeme vám za sledovanie, a veľa šťastia na Quiz 0.
[CS50.TV]