[Powered by Google Translate] [Týždeň 3]
[David J. Malan - Harvard University]
[To je CS50. - CS50.TV]
Dovoľte mi, aby som riadiť nás v smere od miesta, kde sme skončili minule,
ktorý si začínal myslieť, trochu viac ako o syntaxi
a snažil sa vymyslieť niečo menej o všetkých detailov
že má trochu času, aby získalo tak ďaleko, pokiaľ ide o bodkočiarky
a zátvorky a zložené zátvorky,
začať užívať veci trochu na vyššej koncepčnej úrovni
tak, že problémy sa teraz začínajú riešenie v nasledujúcich niekoľkých týždňov
budú zahŕňať oveľa viac do vyšších problémov na úrovni koncepčných
a trochu menej v syntaktickej, ako vám vaše nohy mokré
a vaše špinavé ruky s niektorými z syntaxe z týchto posledných niekoľkých týždňov.
>> Takže pripomenúť, že minulý týždeň sme zaviedli tento pojem poľa.
A pole v angličtine môže byť opísaný ako čo? >> [Nepočuteľné Študent odpoveď]
Je nám ľúto?
Zbierka? >> [Nepočuteľné Študent odpoveď] >> Dobre, dobre.
Zbierka predmetov. Takže sme videli polia v Scratch.
Ak ste náhodou použiť pre PSet 0 jeden z zoznamy Scratch je, že môžete preťahovať veci
ako pomaranče a banány do, súpis druhov,
to je niečo ako to, čo je pole.
A potom technicky, v kontexte skutočného počítača,
pole je jednoducho súvislá kus pamäte.
Inými slovami, máte byte, potom ďalšie byte, potom ďalšie byte, potom ďalšie byte,
a ak ste k tomu tie bytov v obraze,
oni by boli chrbtom k sebe, aby sa chrbtom k sebe. To je to, čo máme na mysli súvislé.
>> Takže je to byte číslo 1, potom 2, potom 3.
To neznamená, že sa tu, tu, tu, tu.
Pole je súvislá kus 0 alebo viac bajtov.
Tak čo sú dobré?
Spomínam si, že sme mali tento druh chcené napríklad vedomostných ukladanie ľudí stupňov v programe
pre výpočet svojej kvíz priemer z nejakého predmetu,
a pripomínajú, že by sme mohli začať písať tento program tým, že deklaruje premenné quiz1.
Potom by sme mohli mať ďalšie premennú nazvanú quiz2.
Ale potom, keď tam boli 3 kvízov v tejto triede, quiz4.
Alebo keby tam bol týždenný kvíz, bolo by to quiz5, quiz6, quiz7.
Takže budete mať všetky tieto premenné deklarované vo vnútri z hlavných
alebo niekde inde v programe,
a problém s týmto prístupom, ľahký aj keď ich stačí skopírovať a vložiť,
je to len veľmi rýchlo stáva nepraktické.
Boh chráň, máte skutočne 30 kvízy alebo 50 kvízy.
Ak je to ako na strednej škole v štýle denného pop kvíz,
stačí len smiešne dlhý zoznam premenných vyhlásenia,
a to len veľmi rýchlo vymkne kontrole.
Je to škaredé, že je ťažké udržať, je to tak oveľa jednoduchšie, aby sa preklep
Ak získate 1 číslo preklep niekde vo vašom programe.
>> Takže sme zaviedli pojem poľa miesto.
A pripomenul, že sme zaviedli tento program tým, že robí niečo také.
Nechaj ma ísť do dnešnej Zdroj 3 adresári pondelok
a otvoriť pole, ktoré sme videli minule.
A aj keď tam bolo zopár nových trikov C tu,
medzi nimi pojem konštanta,
Pripomínam, že sme deklarovali viac plaváky v podstate pomocou tejto syntaxe:
plavák, potom názov premennej, potom sa používa hranatých zátvorkách naozaj prvýkrát,
a to, čo sme urobili vo vnútri týchto hranatých zátvorkách bol skutočne vložiť číslo.
Ale namiesto toho, aby číslo, dal som tento kapitalizovaných slovo, kvízy.
A čo bolo motiváciou pre uvedenie kapitalizovaných slovo, ako kvízy
a potom pomocou riadkovej 17 trik tu skutočne dať, že číslo?
Čo bolo motiváciou tam? Jo.
>> [Nepočuteľné Študent odpoveď] >> Presne tak.
Ak chceme zmeniť túto hodnotu 2, máme len zmeniť v 1 mieste
pretože považujú - ja si ani nepamätám, čo tento program spravil presne,
ale ak ste práve zbierať to vidíte kvízy, kvízy.
Vidíte kvízy, sa tu viac kvízy.
Takže ak by sme nemali túto konštantu, toto použitie ostré definovať,
by sme zadali 2, potom 2, potom 2, potom 2, ktorý je v poriadku. To by bolo rovnako správne.
Ale predpokladám, že budúci rok budeme mať 3 vypočúva v CS50.
Takže mám ísť a aktualizovať kód, musím prekompilovať to,
ale problém je, ak som niečo hlúpeho, ako by som prehliadnuť 1 zmienku o 2
a zabudnúť na konektor v 3, môže celý program veľmi dobre zlomiť.
Takže my sme len koleduje o malér.
>> Takže pojem konštanta je o factoring sa na niektoré časti dát,
či už je to reťazec alebo znak alebo float alebo čokoľvek,
a prehlasuje to 1 miesto tak, že môžete ľahšie zmeniť v budúcnosti.
A je to tiež, úprimne povedané, trochu ľahšie čítať, pretože ak si len myslieť na to teraz,
je to kvízy, alebo by sme mohli dokonca premenovať to niečo ako NUMBER_OF_QUIZZES
alebo niečo viac explicitný.
Kód stačí sa stáva trochu viac zrejmé, že to, čo robí,
a zaujíma vás, trochu menej, aké číslo 2 sa môže stať znamenať.
Takže konštanta nemá nič zásadne s poľami.
Poľa bola zavedená prostredníctvom týchto hranatých zátvorkách.
>> Takže si všimnúť, že v súlade 23 žiadame užívateľov, "Aké boli vaše kvíz výsledky?"
Potom sme len túto slučku, ktorá zrejme požiada užívateľa o svojich tried. Ako?
To opakuje 0-2. A ja hovorím, 2, pretože kvízy vo všetkých veľkých písmenách, je v súčasnej dobe 2.
Tak to opakuje od 0 do 2 a potom vytlačí Kvíz # niečo o niečom,
a potom sa použije GetFloat získať hodnotu od užívateľa.
Takže si toho všimnúť je len iný nový kus syntaxe od poslednej stredu.
Ak chcete uložiť niečo na určitom mieste v tomto poli,
môžete znovu použiť hranaté zátvorky.
>> Takže tam je to trochu dichotómie tu.
Pri prvom použití hranatých zátvoriek
ho použiť na určenie, akú veľkú chcete, polia byť.
Ale to ďalšie súvislosti tu, kde sme opäť použiť tieto hranaté zátvorky
znamená, kde sa v tomto poli chceš dať nejakú hodnotu?
A rozdiel tu možno odvodiť z kontextu.
Všimnite si, máme dátový typ, potom máme názov premennej,
potom máme hranatých zátvorkách s číslom vo vnútri, bodkočiarkou. To je všetko.
Takže to vyhlásenie.
Je to rovnako ako keď sme robili niečo podobné plaváku grade1; float grade2;
ale opäť, to veľmi rýchlo prejde do cesty príliš kopírovať, vkladať,
tak namiesto toho sme len zjednodušil ako také,
čo znamená, že naďalej máme triedy, ktoré môžu byť uložené na držiaku 0,
máme ďalšie triedy, ktorá môže byť uložený na držiaku 1,
ale čo keď som flákať a napríklad môj slučka ide tak ďaleko, -
Napríklad, I, aby to menej alebo rovné,
which recall bol zdrojom predchádzajúce chyby -
čo v praxi znamená, že na nejaké tretie náhodného opakovanie tohto cyklu
Používam držiak 2. Účinne, môže, čo sa stalo tu? Je nám ľúto?
[Študent] to bude nahradená. >> Je to bude nahradená?
Čo by sa vymeniť?
Tento doslova hovorí nahradiť to, čo je na mieste 2 s návratovú hodnotou GetFloat.
Ale problém je, aký veľký je pole v tomto bode v príbehu?
[Nepočuteľné Študent odpoveď] >> Pole je stále len o veľkosti 2
pretože pole, rovnako ako ľubovoľné premenné, bola vyhlásená prvá, pred používali sme ho,
a my sme tu uvedené, pretože to konštanta, ktorá mám 2 stupne, že som dám.
>> Ale pamätajte, že počítačoví odborníci začnite počítať od 0.
Takže prvé miesto v tomto poli je držiak 0.
Ďalšie miesto je 1. Táto vec je niekedy tak trochu príliš ďaleko na stranu.
Takže inými slovami, ak som sa vlastne musel toto pole -
a dovoľte mi, aby som zistil, ako to spolupracuje tu pre nás -
keď mám pole, ktoré som jednoducho vypracovaný takto
a ja som pridelený priestor pre 2 prvky, mohol by som nakresliť to takto v pamäti
ak to veľký biely plátno je.
Je to len RAM mám vo svojom počítači, koncert RAM, 2 giga RAM, čokoľvek,
ale tieto 2 boxy teraz jednotlivo predstavujú plavák, 32 bitov.
Takže keď som dal 1 číslo tu ako 1,0, potom som dal iné číslo tu ako 3,2
ale potom som si držiak 2, to je ako dávať niečo, čo tu.
A ako obraz naznačuje, tam nič nie je.
Je to niečo ako krajina nikoho, pretože som sa nepýtal na operačný systém
aby mi tento tretí kvíz.
Keby som to urobil, chcem ten tretí kvíz, mala som mal Forethought
požiadať operačný systém pre neho tým, že deklaruje kvízy byť nie 2
ale namiesto toho rovnať 3.
>> Takže inými slovami, obraz, ktorý sme efektívne mať po ruke vyzerá tu.
To je opäť krajiny nikoho. Mali by sme sa snažiť písať hodnoty tu.
Ale znova, pretože počítačoví odborníci počítať od 0,
keď hovoríme o tomto mieste v poli, to má byť miesto 0,
toto má byť miesto 1, a to ani neexistuje
pretože sme len požiadal operačný systém pre 2 týchto miestach.
Takže tí z vás s predchádzajúcim programovacím skúseností z iných jazykov
by mohol vedieť, že to nie je vždy prípad s poli alebo veci zvanej vektorov.
Skôr, môžete len držať pridanie a pridávanie a pridaním veci polí,
ktoré, úprimne povedané, mali sme túto možnosť v Scratch, a napriek tomu sa zdá, že dali to tu
pretože s C programovanie je oveľa jasnejšie.
Je to len ty a počítač práve teraz, a počítač je len robiť
čo poviete to urobiť.
Takže ak ste len povedať, že vám 2 plaváky prostredníctvom linky 22 tu,
to je všetko, čo budeš dostať späť z operačného systému: priestor pre 2.
>> Takže stále sú vaše programy bude občas byť buggy s ohľadom na pole.
To je tak nejako k povahe zvieraťa, kedy všetci sú omylní,
a na nejakom mieste, kde bude veľmi pravdepodobne index mimo hranice svojho poľa.
A to je len fantázia spôsob, ako povedať, že si šiel do držiaka niečo
a niečo jednoducho príliš veľké množstvo. Šiel si za hranicami vášho poľa.
Ale naopak teraz je to.
Zvyšok tohto programu naozaj nemá nič zásadne robiť s poľami.
Je to všetko len o nejaké jednoduché aritmetiky pre výpočet priemerov.
Takže máme tu v tomto pre sláčiky tú prvú premenná nazýva sumy, ktoré inicializuje na 0.
Potom sme určiť iteráciou od 0 do 2 znovu a pridáme k tomuto súčtu premennej
tého stupňa, takže držiak 0, potom držiak 1.
A potom, ako by ste to v základnej škole pre výpočet priemeru,
sme jednoducho vziať túto sumu, rozdeliť ju na celkovom počte kvízov,
a potom pre istotu zavoláme funkciu tu nazýva koleso.
>> Teraz, rovnako ako stranou, čo je vysporiadať sa s týmto zátvorkách int na linke 34?
To by mohlo prísť už v bode, sa naozaj hovoril o tom oficiálne tu,
ale čo je to int v parens pravdepodobne robiť? >> [Nepočuteľné Študent odpoveď]
Jo, to sa odkazuje na liatie alebo obsadiť,
čo znamená, že pri 1 dátový typ a prevod do iného.
Môžete to urobiť so všetkými dátovými typmi, pretože niekedy, že by bolo trochu divné.
Avšak v tomto prípade, ak je návrat hodnota kola je plavák
pretože, koniec koncov, beriem plavák a delením číslom ako 2,
Idem naspäť float.
Ale základnej škole ľudia nemajú naozaj rád vedel, že ich priemer bol 93,4
pretože si uvedomia, že sú niekedy tak blízko, že 95 zaokrúhlenie bodu.
>> Takže chceme namiesto toho používať int zaokrúhliť na najbližší každého int,
ktorý je v tomto prípade bude 94 žiadnom okamihu po ňom.
Takže je to len trochu matematický trik.
A vrátime sa na tento pojem odlievanie, pretože to bude mať dôsledky,
ak ste objavili už na problém nastaviť 2.
Takže pole potom môžete myslieť - to bude, aby som úsmev po celý deň.
Vyzerá to, že to, ak si nakresliť obrázok toho,
ale kľúčové je, že veľkosť je vybrať aj vy
keď si ich vyžiada od operačného systému.
Akékoľvek otázky, potom na poli? Jo.
[Nepočuteľné Študent otázka]
Ah, dobrá otázka.
Otázkou je, čo sa stane s nulovou 0 v poli? To neexistuje v tejto súvislosti.
To existuje len v rámci reťazca, ktoré sa chystáme prísť za chvíľu.
Ale pre pole, ako v tomto prípade, všetko, čo dostanete, je to, čo žiadate operačný systém pre.
>> A ako stranou, inak to byť jasné,
Stále hovoríte, požiadať operačný systém, opýtajte sa operačný systém.
Operačný systém, ako asi viete, je Mac OS, Windows, Linux.
Keď voláte funkcie, ako je GetFloat
alebo ste deklarovaní premenných, ako je stupňov,
na konci dňa ste skutočne žiadajú niekoho iného, ​​aby vám, že pamäť
pretože my ako ašpirujúci programátorov
nemám potuchy, ako sa vlastne dostať fyzický prístup k pamäti.
Ale niekto robí: operačný systém.
Takže okrem prezentácie nás s peknými ikonami a menu a zložiek a podobné
, Ktoré vidíte na ploche, či už Mac alebo PC,
operačné systémy tiež urobiť nízkoúrovňové svetské veci,
vysoko technické veci na starostlivosť o gigabyte
alebo 2 GB pamäte, že máte, riadenie CPU, ktoré máte, a tak ďalej.
Takže keď píšete kód,
ste naozaj hákovanie do svojho operačného systému v tomto zmysle.
Budem musieť minimalizovať že. Dobrá.
>> Ostatné otázky týkajúce sa polí?
Nie? Dobre.
Takže prechod prirodzene z polí je skutočne téma, ktorá je trochu povedomý.
A pozreli sme sa niekedy tak krátko v tejto poslednej dobe príliš.
To bol príklad reťazec od stredy.
Tento reťazec príklad bol veľmi jednoduchý program,
a ja som vlastne zjednodušený ju pár riadkov pre dnešné účely.
Všetko, čo to robí v súlade 19 je dostať reťazec od užívateľa, uloží ju do premennej volal s
Potom v riadku 22 dopredu, že je zrejme tlače, že reťazec 1 znak na riadku.
Ale ako sa to robí toto?
Sme deklarovať premennú i, nastavením rovná 0,
a to sa stáva starý zvyk teraz.
Sme nevideli to až v stredu, ale môžete trochu vyvodiť z jeho názvu
strlen len vráti, čo keď rovnako s? Dĺžka reťazca.
Takže keď som odovzdať reťazec, quote-koniec citátu DAVID,
to snáď vráti na mňa číslo 5 pretože DAVID.
Tak to je jeho cieľom v živote je, aby sa reťazec, či už pevný kódované vami
alebo v tomto prípade zapojený ako premenné, ako tvrdenie,
a to vyrieši aká je dĺžka tohto reťazca je.
>> Tak tu sme si požičiavať nejaký zápis z predchádzajúceho príkladu kvízu.
To nemá nič spoločné s plavákmi, nemá nič spoločné s kvízy,
ale ukazuje sa, že malá lož sme sa vám hovorím od týždňa 1
je to, že reťazec v skutočnosti neexistuje v C.
Reťazec na konci dňa je v skutočnosti len pole.
Je to pole bajtov, takže byte, byte, byte, byte, ktorý odvolanie je len 8 bitov,
takže kus pamäte, kus pamäte, kus pamäte, kus pamäte.
A prostriedky, ktoré je realizované reťazec
je tým, že prvý znak tu,
potom je tu, potom tu, potom tu, chrbtom k sebe, aby späť do pamäte počítača.
Takže ak by ste chceli, aby objasnila slovo ako HELLO, by ste dal 1 znak H,
potom E, potom L potom L, potom O - 5 znakov celkom - niekde v pamäti RAM počítača.
Ale kľúč detail tu je, že budeš chrbtom k sebe k sebe na chrbát,
priamo vedľa seba.
When keď hovorím, že s [i], čo sa v angličtine je to mi dáva?
Čo s [i] predstavujú v tomto prípade? Jo.
>> [Študent] i-tej znak v reťazci. Presne >>. Tého znaku v reťazci.
Teraz, aj sa chystá začať v 0 podľa môjho pre sláčiky tu,
ale to je dobre, pretože všetko začína počítať od 0.
Takže s [0] bude reprezentovať písmeno H v slove, ako HELLO,
s [1] bude reprezentovať list ako E v slove, ako HELLO, a tak ďalej.
A čo sa zdá, že sa robí na každej iterácii tohto cyklu
je dočasne ukladanie Ith znak do premennej s názvom c, čo je len char,
a potom sme vytlačení c
tak, že na konci dňa, čo tento program robí je nasledovné.
Ak pôjdem do zdrojového adresára a ja sa string1 a idem do toho a spustiť string1,
a potom som zadajte slovo ako HELLO, Enter, všetko, čo robí, je vytlačiť 1 znak v čase.
>> Takže je tu príležitosť pre upresnenie tu.
Som trochu robiť viac práce, aj keď je to viac jasné, možno to tak, ako je potrebné.
Which riadok kódu tu môžem asi zahodiť úplne? Jo.
Linka 24. V súlade 24 som deklarovaní premennej c
Ja ukladanie Ith charakter je v tom, ale potom som pomocou c tu.
Takže som pomocou c, tak mám pocit, že nemôže len tak hodiť linka 24 od.
[Nepočuteľné Študent komentár] >> Presne tak.
Takže keď príde na rozhovor o návrhu programov,
oznámenia tohto mierne zjednodušenie kódu, ktorý je rovnako čitateľné,
ale uvedomiť, že to je len premenná, jej dátový typ je pole,
tak s [i] je len tak, aby okamžite vrátiť k vám i-teho znaku v tomto reťazci.
A ak budete chcieť vytlačiť, je to v poriadku.
Musíte len použiť% c, pretože nie ste tlače reťazec,
tlačíte znak v reťazci, a to tiež má vplyv na tlač Ith charakter.
A pripomenúť jediný rozdiel naozaj z minulého týždňa s pomocou printf
je to, že zatiaľ čo v minulosti týždňov budeme robiť niečo super jednoduchý
ako% s zástupný potom názov reťazca tu,
Teraz sme potápanie v trochu hlbšie pod pokrievku a povedal,
netlačia reťazec, vytlačí jeden znak v ňom.
>> Takže, čo môžeme urobiť niečo trochu iného tu, pretože je tu ešte 1 - nie je chyba
pretože tento program je v poriadku, ale ja robím niečo hlúpeho
že som sa zmienil krátko v stredu.
Ale spomínal, ako by daný program design sa ešte ďalej vylepšený? Jo.
[Nepočuteľné Študent odpoveď] >> Oh, dobre.
Takže pripomenúť, že sme zaviedli druhý s názvom premennej n posledný čas,
ktorý sa zdá byť v rozpore sami, pretože môj cieľ pred sekundou
bolo len vyhodiť premenné ako zbytočné,
ale pripomínajú, že v stredu sme skutočne urobili.
Zmenil som pre sláčiky skutočne mať čiarku tu, potom n = strlen,
a potom sem som aj <n, potom som svoje krokoch.
Čo je základný zisk, že som dosiahnuť zmenou mojej inicializáciu tohto
a môj stav sa teraz? >> [Nepočuteľné Študent odpoveď] >> Presne tak.
Nie som pripomína strlen znova a znova a znova, pretože pripomenúť, ako pre slučky prác.
Aj keď sa začnú sa dostať zložitejšie vyzerajúce,
Pripomínam, že tá vec pred prvou bodkočiarkou je inicializácia, ktorý sa stane raz.
Podmienkou však je uprostred,
a to dostane skontrolovať zakaždým, keď idete cez slučku.
>> Takže je to trochu hlúpe sa pýtať, zapnite počítač rovnakú otázku znovu a znovu -
Aký je dĺžka HELLO? What to dĺžka HELLO? What to dĺžka HELLO? -
pretože, ako uvidíme dnes a v stredu, to je určite nejaký čas trvať,
a to nie je moc dobré využitie času, pretože prísť na dĺžku reťazca
vlastne trvá trochu úsilia.
To nie je okamžitý, ako je tomu v niektorých jazykoch.
Takže toto mení na n, cena platím, je to, čo?
Sme svedkami kompromis tu.
Aj môžete ušetriť čas tým, že žiada rovnakú zatratenou otázku znova a znova,
ale to bude stáť mi niečo, čo je to, čo?
>> [Študent] Stratíte určité množstvo pamäte. Presne >>. Bude to ma stálo nejaké pamäte.
Takže v tomto prípade to stojí ma, čo?
Ďalších 32 bitov, pretože n je len int, ako vyplýva z slovom int tu.
Ale je to v poriadku?
Úprimne povedané, to je asi v poriadku, pretože ak si myslíte, o tom,
čím dlhší je reťazec, tým viac času budem sa plytvaniu
pretože strlen bude zavolaný znovu a znovu a znovu
pre každé iteráciu slučky.
A v týchto dňoch, môj Mac má 2 giga RAM, v týchto dňoch 4 giga RAM niekedy.
Myslím, že môžem dovoliť 4 týchto bytov, aby skutočne veci urýchliť.
Ale to bude trade-off a témy skutočne v programovaní a vo vede o počítačoch
sa nikdy naozaj dostať nič zadarmo.
Ak chcete niečo zlepšiť tu, budete musieť zaplatiť za to v druhej ruke nejako.
Priestor v závislosti na čase je v tomto prípade.
>> Takže to bolo všetko vedie k niečomu kryptické ako je tento,
ktoré, ako ste si pravdepodobne prišiel teraz, vlastne hovorí?
[Nepočuteľné Študent odpoveď] >> Jo, tak to je, Uistite sa, že piť svoju Ovaltine,
vlastne pomocou algoritmu s názvom ROT13, ROT 1-3,
čo jednoducho znamená otočiť všetky písmená 13 miest,
čo znamená, že sa a pridajte 13 k nemu a ísť bodka, bodka, bodka
až do 13. listu preč, urobiť to isté pre B a C a pre D a tak ďalej.
A ak sme skutočne zmeniť toto sa tu pomocou posun 13 miest,
dostaneme späť na to málo, čo Ralphie mal, čo bolo, Uistite sa, že piť svoju Ovaltine.
Ale teraz k problému nastavenie 2, v štandardnej edícii najmenej,
Musíte druhu sa tento šifrovaním sami,
a musíme nejako prijať na vstupe, ako je tento, a to zašifrovať alebo dešifrovať ju.
>> Tak ktorý z týchto základov druhu vedie nás k tejto príležitosti?
Poďme sa pozrieť na túto tretiu príklad.
Po prvé, je to tzv ASCII. Čo ASCII odkazujú späť na?
Americký štandardný kód pre výmenu informácií,
čo je naozaj dlhá cesta, ako povedať, čo? Čo je to ASCII?
[Nepočuteľné Študent odpoveď] >> Čo je to? >> [Študent] znakov. >> Mapa znakov.
Je to len mapuje čísla listy, pretože svet má štandardizovaný
aká čísla budú predstavovať čo písmená tak, že každý z nás môže použiť počítača
a naše programy všade sú len kompatibilné, pokiaľ ide o vytlačenie veci na obrazovke.
Takže pripomenúť, že 65 sa stane zastupovať, 97 sa stane predstavujú malé písmená.
A tak tento jednoduchý program tu ASCII je využívanie tejto skutočnosti -
že svet vie, že kapitál je 65 - a je to práve tlač mapovanie.
>> Takže ako sme sa ponoriť do tohto kódu, dovoľte mi, aby som namiesto toho otvoriť okno terminálu.
Nechaj ma ísť ďalej a robiť ASCII, a potom si to len spustiť túto vec len pokaziť výstup.
A to jednoducho robí toto: naozaj veľký graf, ktorý práve mi hovorí, že všetky rôzne kódy
pre všetkých rôznych písmen.
Takže super jednoduchý program, ale nemal som na pevný kód týchto 52 riadkov výstupu:
26 veľká, 26 malá.
Namiesto toho som to urobil programovo s pár slučiek.
Všimnite si, čo som urobil tu.
Aj zopakoval z i je 65 až na 65 + 26, pretože som chcel vytlačiť 26 listov
v anglickej abecede, i + + na každej iterácii, a teraz nevšimol znovu.
Je to opakovanie nášho priateľa obsadiť
kedy si previesť 1 dátového typu na iný
pretože to, čo chcem robiť v tomto konkrétnom programe?
Chcem počítať numericky, pretože to je, ako som vyrástol počítanie - 65, 66, 67, a tak ďalej -
ale ja nechcem tlačiť iba čísla.
Chcem vytlačiť list nasledovaný číslom.
Chcem vytlačiť: číslo, B: číslo, ale ja si to s rovnakým presným premenné.
Tak som vytlačiť% c ako zástupný znak pre jeden znak,
% D ako zástupný znak pre číslicu alebo číslo.
Tak čo mám pripojiť na tie 2 zástupné symboly?
Prvýkrát som plug in charakteru ekvivalent i, a potom som vytlačiť aj sám.
>> Takže si toho všimnúť aj jednoducho funguje.
Rovnako ako som si cast z plaváku na int
aby šiel z reálne číslo na celé číslo,
tu môže ísť z int na char, ktorý je trochu divný -
nie je úplne mapovať na reálnom svete - ale v počítači
char je len číslo pod kapotou,
takže sme ich niekedy tak explicitné tu k počítaču, hovorí,
printf, vytlačiť nie aj ako 65, vytlačiť ju ako jej číselný ekvivalent.
A ukázalo sa, že som technicky ani potrebovať.
To, čo som robil pred chvíľou je výslovne odlievanie
zadaním, čo dátový typ chcem ísť od a do.
Ale si, že som už tento zástupný% c
a tento druhý% c symbol tu.
Aj keď to nie je int, počítač si uvedomuje, že char,
je to len int pod kapotou.
>> Takže keď som vlastne prekompilovať to a znova spustite ASCII programu,
všimnete, že stále len pracuje, pretože počítač si uvedomuje, že je táto korešpondencia.
Teraz je oveľa dôležitejšie robiť explicitné obsadenie vo svete pláva ints
pretože tam ste vlastne robiť vypočítané rozhodnutia:
vyhadzovať všetko za desatinnou čiarkou.
Tu neexistuje nič, čo vyhodiť, pretože postava je len číslo,
a reťazec je len pole znakov.
Takže keď príde čas na realizáciu nejaké šifrovanie alebo dešifrovanie,
Ako je možné, že skutočne môžeme preložiť niečo ako toto nezmysel,
Uistite sa, že piť svoju Ovaltine?
Čo keď vieme teraz - poďme vziať ako predpoklad - že kľúč,
číslo, ktoré sme rotujúce všetkých týchto písmenami, je číslo 13?
Tak sme išli od písmena B celú cestu do ø na začiatku vety,
Uistite sa, že piť svoju Ovaltine, pretože keď to urobím B
a potom idem C, D, E, F, G, H, I, J, K, L, M, N, O,
to je dôvod, prečo šifrovanie písmenom B sa O
pretože som práve pridali 13 k nemu.
>> Takže ak chcem dešifrovať to, som v podstate brať O a potom odpočítať 13 od nej.
Alebo, úprimne povedané, pretože tam je 26 písmen v abecede, je to úžasne symetrická,
môžeme tiež len pridať 13 a dostaneme späť do písmena B.
Ale ako sa vám ísť o vykonávaní niečo také v Caesar
alebo naozaj manipuláciu reťazca všeobecne?
Ak písmeno B je to, čo číslo?
Čo je to písmeno B? Takže je to 66, že jo?
Takže v prípade, že list je 65 a písmeno B je 66,
tak 66, všetko, čo musíte urobiť, je pridať 13 k nemu, a to mi dáva 79.
A keď ideme do našej malej ťahák, 79 naozaj mapy na O.
>> Ale je tu trochu rohového prípadu tu.
Čo je, povedzme, písmeno Z?
Ak sa nám to 66 + 25 dostať celú cestu až na koniec abecedy, sme na 91.
91 + 13 mi dáva 104, a hádajte čo?
104 nie je rovná veľké písmeno.
Vráťme sa do malého ťahák tu.
Keby som opakovanie tohto programu v spotrebiče, oznámenia, že 104, keď som sa vrátiť do okna terminálu,
104 je zrejme malá h
Takže potrebujeme niektoré kľúčové trik tu, aby sa ubezpečil, že keď začneme na Z
a pridáme 13 k nej nechceme len udržať zotrvával na väčšie a väčšie čísla.
Čo skutočne chceme robiť?
Ak chcete obal okolo.
>> Tak to dopadá, ako ste videli asi v sekcii teraz alebo v probléme nastavenej spec sám
si uvedomil, že je to iný operátor v C, ktorý je tiež znak percenta,
ale vzhľadom k tomu, sme použili% tu zadať zástupný symbol,
viem, že najmä pre problémové sady 2, tam je tiež niečo ako toto:
int x = y% z
Dovoľte mi, aby som prezentovať to ako veľmi všeobecnej podobe tohto.
Percento znamená to, čo v programovacom jazyku? >> [Študent] Modulo.
Modulo, ktorá je ozdobný spôsob, ako hovoriť zvyšok.
Aj keď je tam mierne rozdiel s definíciou tam,
to znamená rozdeliť y od z, ale nevracia výsledok tohto rozdelenia;
miesto, vráti zvyšok.
>> Takže ak y je vlastne 3 a z je vlastne 2, 3 deleno 2 je 1 s zvyškom 1,
takže to, čo robí x skutočne rovní v tomto scenári? 1.
To je taký jednoduchý, low-level nápad.
Chce to len trochu času, aby sa vaša myseľ omotal okolo neho
pretože je to asi dlho, čo ste ešte museli starať o zvyšky
a vlastne je použiť pre niečo zmysluplného,
ale v tomto prípade prostý fakt, že môžete ísť z veľkého počtu ako 3
na relatívne malom počte, ako je 2 a potom pretočiť účinne
pomocou zvyšok na menšiu hodnotu, ako je 1 bude neoceniteľným trik
že môžeme použiť ako pre niečo ako Caesar a tento ďalšia vec Vigenère
v problému nastavenie 2, ale to bude opakujúce trik v priebehu semestra.
Tento jednoduchý, jednoduchý nápad len s zvyšok všeobecne
bude nám umožní zabaliť okolo.
A ako sme začať hrať viac s poľami, ako sme začať hrať viac s pamäťou sám,
to sa stane viac a viac mocný trik.
>> Takže nejaké otázky, potom na ASCII alebo zastúpenie reťazcov ako pole?
A my si ju do 1 zárez ďalej. Jo.
[Nepočuteľné Študent otázka] >> Dobrá otázka.
Čo to znamená, keď má premenná hviezdičku pred ním?
Dovoľte mi, aby som odložiť odpoveď, že v každom detaile,
ale, že sa odvoláva na tému známej ako ukazovateľ.
Ukazovatele majú čo do činenia s pamäťou, a my sme vlastne dnes
pričom prvý krok smerom k tejto diskusii,
ale teraz mi dovoľte, aby som predstierať, že hviezda neexistuje
a budeme naďalej vyzývať reťazcov reťazca namiesto použitia char *,
ktoré ste pravdepodobne nevideli, a ja dám na obrazovke za chvíľu ako ukážku.
Takže sa vrátime k tomu v tak podrobnejšie ako mnohí z vás si možno rád.
Nakoniec, nie dnes. Jo.
>> [Nepočuteľné Študent otázka]
V akom kontexte sa budete musieť poskytnúť znamenie pre znak? >> [Študent] Jo.
Takže v predvolenom nastavení, keď nechcete dať +, sa predpokladá, že len kladné čísla.
Takže ak stačí napísať číslo 1, je to pozitívny 1.
Ak si naozaj chcete zadať negáciu hodnoty,
budete mať doslova urobiť -1 na klávesnici.
Ale to asi nie je vaša otázka. >> [Nepočuteľné Študent odpoveď]
>> Dobrá otázka. Dobre.
Tak to má čo robiť, som pochopil, s nejakou chybu spustili do
pretože ste boli prevod celé číslo na znak,
ale nejako negativity zapojili,
a tak postava práve vyšiel munged nejako.
Takže teraz, dovoľte mi, aby som zjednodušovať trochu ako sa tam vrátime sa k tomuto druhu téme.
Pre túto chvíľu, myslím, že veci týmto spôsobom - a to je zjednodušením.
Ale vo svete integer, máte, koľko bitov k dispozícii?
Máte 32 bitov.
A tak ďaleko, sme hovorili o celkovom počte celých čísel môžete teda predstavujú
je zhruba 4 miliardy celkom, pretože máte 32 bitov,
tak, že je 2 až na 32, tak, že je to zhruba 4000000000.
Ale videli sme týždeň alebo 2 pred ktoré nemáte naozaj majú rad čísel
z 0 až na 4 miliardy.
Rozsah miesto sa pohybuje od zhruba negatívne 2000000000 na pozitívne 2000000000.
Ale to potom vyvoláva otázku, ako si predstavujú pojem negatívny 2000000000
nieto negatívne 1?
Pre túto chvíľu môžeme zjednodušovať a len povedať, že budeme používať najľavejší bit
z týchto 32 bitov, a ak je to 1 to záporné číslo,
a ak je to 0 je kladné číslo.
Problém s týmto zjednodušeným reprezentácii záporných čísel
je, že ak ste boli zámerne je šikovný a snaží sa previesť z povahy na číslo
alebo naopak, tam žiadna taká vec ako záporná postava.
Vo svete ASCII, ktorý používa iba 8 bitov, všetky 8 z týchto bitov hmoty,
a vľavo bit nemá nič spoločného s negatívnymi.
A len preto, aby bolo jasno, keď poviem, najviac naľavo bitov,
pripomenúť, že keď sme robili trochu súvisiace s príkladmi v prvom týždni
Pripomínam, že sme vychádzali veci, ako je 1001101, niečo také.
Keď poviem, že najľavejší bit, som doslova na mysli 1, že napíšete celú cestu doľava.
Takže vo svete postáv nie je pojem negativity,
tak, aby vľavo bit vlastne má čo do činenia s ASCII, nič čo do činenia s negatívnymi.
>> Takže to vyzerá, ako - a z kontextu, že je ťažké odpovedať presne -
ale nejako, váš kód bol mätúci, že najľavejší bit predstavujúce záporné hodnoty
keď to naozaj bola súčasťou charakteru dotknutého.
A opäť, ja zjednodušujúce, pretože počítače skutočne robiť niečo trochu milovník
než len zmena, že najľavejší bit do 1 pre záporným znamienkom versus 0.
Oni namiesto toho, ak ste zvedaví na Google, používať niečo typicky tzv 2 v doplnkom,
ktorý je o niečo zložitejšie prístupu,
ale myšlienka je nakoniec rovnaký.
>> Takže v skratke, to má čo robiť s tým, že ste boli masírovanie číslo na znak
alebo naopak ale váš kód nebol vedomá skutočnosti
, Že 1 z týchto bitov mala význam v číselnom svete.
To nie je prípad charakteru svete.
Ale to znie, ako by ste pevné, v tomto prípade diskutabilné teraz. Ďalšie otázky.
Dobre.
Tak zatiaľ, všetky programy sme napísali vzali vstup možná od užívateľa
vo forme funkcií, ako je GetInt, GetString,
alebo ak ste čítali dopredu v rôznych knihách alebo on-line odkazy,
Vy sami mohli použiť funkcie, ako scanf, ktorá, úprimne povedané, my používame v CS50 knižnici.
Ale v týždni, alebo 2, tak sme vlastne ukáže, ako je implementovaná knižnica CS50
takže môžeme vziať tie vzdelávacie kolesá off dohromady.
>> Ale ukazuje sa, že je tu iný spôsob, ako získať vstup od užívateľa.
V skutočnosti, my sami sme používali argumenty príkazového riadku
na pár týždňov.
Zakaždým, keď sme spustenie zvonenie alebo sme spustite make,
sme nielen zadali rinčanie, Enter, sme sa napísali robiť, Enter.
Čo sme zvyčajne zapisujú sa za slovo kovový zvuk v našom termináli riadku systému Windows?
[Študent] názov súboru. >> Názov súboru, nie?
Hello.c alebo mario.c alebo čo príslušný názov súboru je.
A v tomto zmysle, čo ste naozaj urobil, je, že ste ovplyvnil správanie Clang
pretože určite ľudia, ktorí písali rinčať nemal tušenie, že niečo starého vám
chcel napísať program s názvom mario.c rokov neskôr.
Takže ste musela nejako ovplyvniť správanie tohto programu,
a že program, zvonenie musel byť napísaný takým spôsobom, že môže prijímať vstup z vás
pridaním slov na výzvu pred užívateľ stlačí kláves Enter.
>> Tak to dopadá, že nejakú dobu sme vyhlásil takmer všetkých našich programov
kto takhle - int main (void) - a potom sme šli napred
a začal písať náš kód.
A môžeme mať niektoré ostré zahŕňa v hornej časti súboru,
ale takmer všetky naše programy tak ďaleko začali s týmto
aj keď ste možno videli v kapitole, v knihách, on-line odkazy
, Že to nie je v skutočnosti byť neplatné.
Ďalšie legitímna forma pre to urobiť, je int argc a potom string ArGV [].
Takže teraz, čo je to naznačiť?
Ukazuje sa, že argc, čo je človek dohovor - by sa dalo nazvať toto foo,
ale to bude len oveľa menej jasné čitateľom -
argc jednoducho argument funkcie nazýva hlavná, ktorý predstavuje to, čo?
Čo argc stať pre tých, ktorí poznajú?
>> [Nepočuteľné Študent odpoveď] >> Jo, počet argumentov alebo počet argumentov.
Je to tak jednoduché, ako to.
Koľko argumenty boli odovzdané do tohto programu?
Čo to znamená?
Ak na príkazovom riadku som bežať niečo také - klap mario.c--
argc, keď som stlačte Enter bude trvať na hodnote, trochu mätúce, 2.
Tak to dopadá, že argc je počet argumentov,
ale z historických dôvodov, je názov samotného programu zahrnuté do tohto počtu.
Takže argc je 2, keď som písal rinčať mario.c.
Čo ArGV obsahuje?
Po prvé, ArGV vyzerá ako reťazec, ale nie úplne
pretože ako posledné stredu a to viac dnes,
Tieto hranaté zátvorky označujú, čo? To je pole.
Nie je číslo v poli, a ktorá by mala zmysel intuitívne
pretože ľudia, ktorí písali zvonenie pred rokmi určite netušil
Koľko slov ľudia ako my, by zadajte na príkazovom riadku pred stlačením klávesu Enter.
>> Takže v tomto prípade tu bolo vyhlásené funkcie hlavnej, ako že sa pole argumentov,
0 alebo viac argumentov.
Oni nevedia dopredu, koľko ich je,
takže je zámerne žiadne číslo vnútri týchto hranatých zátvoriek.
Ale skutočnosť, že hranaté zátvorky sú tam hovoria počítač,
očakávajú poľa.
ArGV je len skrátený zápis pre argumentu vektora.
Vektor je ozdobný spôsob, ako hovoriť pole,
a pole je ozdobný spôsob, ako hovoriť zoznamu alebo vyzdvihnutie.
Tak to jednoducho znamená, že ak nám napíšete hlavné takhle
miesto, ako, ako sme to robili to za posledných pár týždňov,
váš program má teraz právomoc prijať argumenty príkazového riadku
takže už sa budete musieť napísať Mario a stlačte Enter,
zadajte v rade, koľko blokov vysoko chcete pyramída byť,
a stlačte Enter znova.
My ani nemusíte používať GetString alebo už GetInt alebo GetFloat na to príde.
Môžeme len očakávať, že užívateľ zadať tieto slová na riadku sám
rovnako ako autori Clang rozhodol, že by bolo naozaj otravné programu
ak kompilovať kód najprv zadali rinčať, Enter,
potom sme si povedali k užívateľovi, zadajte prosím názov súboru, ktorý chcete preložiť,
potom sme zadajte mario.c a stlačte klávesu Enter.
Ale to je presne to, čo sme robili pre našich používateľov posledných pár týždňov.
Používame GetString a čakáme, až sa program spustí výzvu je pre vstup.
To už nie je potrebné, aby sa tento prípad.
>> Takže v tomto prípade tu máme teraz reťazec ArGV,
a toto je príliš zjednodušené,
školenie kolesa, ktorá sa veľmi skoro preč.
To je vhodnejší spôsob písania tohto alternatívneho vyhlásenie o hlavných
pretože sa ukázalo, že to, čo držíme volať reťazec skutočne má hviezdu,
hviezdička, v jeho skutočnom rozlíšení, ale to len vyzerá komplikovane,
je to mätúce na prvý, a tak sme zjednodušiť tým, že len vytvorením synonymum druhu
v CS50 knižnici, ktorá mapuje char * s týmto užívateľsky prívetivým slovom reťazca.
>> Takže poďme sa skutočne snaží to potom. Nechaj ma ísť napred a otvoriť gedit tu.
Nechaj ma ísť napred a otvorte ArGV z 1.
Tento program zrejme vytlačí argumenty, ale v anglických termínov,
pri pohľade na tento kód, čo to robiť konkrétne?
Ak zadám do príkazového a.out foo bar, čo sa vytlačí v mojom čiernej a bielej okne?
A.out foo bar, Enter.
Hovorte. Jo. >> [Nepočuteľné Študent odpoveď]
Dobré. Takže a.out, nový riadok, foo, nový riadok, bar, nový riadok.
Prečo to je? Môžeme určite potvrdí, za chvíľu.
To je druh našuchorený riadok kódu.
Je to len vytlačí novú linku, len aby sa veci krajšie na obrazovke.
To je slučka, ktorá je iterácia od 0 až na argc,
a to je zvyšovanie pri každom opakovaní + +.
Takže toto je teraz hovorí vytlačiť reťazec, ako vyplýva z tohto% s
ArGV [i] je v podstate rovnaká myšlienka z predchádzajúceho príkladu.
Hovorili sme premennú s; teraz sa to volá, ľubovoľne, ArGV.
To znamená, že vytlačiť Ith argument, ktorý je písaný na príkazovom riadku,
a potom po celá tá vec sa deje, len pre istotu vytlačiť ďalšiu novú linku.
>> Takže poďme sa pozrieť. Dovoľte mi, aby som otvoriť okno terminálu.
Dovoľte mi, aby som zostaviť ArGV z 1, a teraz mi dovoľte bežať ArGV z 1, Enter. Hmm. Dobre.
Spustite foo bar. Zaujímavé. Baz.
A ak ste sa niekedy nad tým, prečo som tento typ,
je to len tiež hlúpa počítačová veda konvencie.
Svet sa často potrebuje len slovné zástupné symboly pre slová.
Takže ak chcete hovoriť o nejakej všeobecnej reťazca,
počítačoví odborníci len majú tendenciu hovoriť, foo, keď potrebujú náhodné slovo,
potom povedia bar v prípade, že potrebujete druhý náhodný slovo,
potom povedia baz v prípade, že potrebujete tretie slovo, potom povedia qux v prípade, že potrebujete štvrtiny slovo,
a potom je tu obrovská náboženská debata on-line, ako na to, čo príde po qux,
takže si môžete Google, že prísť na to, čo ten druhý ľubovoľný slovo by malo byť.
Ale títo žiadny zmysel vôbec,
keď foo bar, ak ste Google, že, že má zmysel,
ktorý je súčasťou etymológiu tu.
>> Takže toto všetko robí a potom sa tlačí 1 z týchto reťazcov na riadok.
Takže keď som miesto, aj keď, chcel získať trochu milovník,
Predpokladám, že som nechcel tlačiť každý reťazec na riadku;
Chcel som tlačiť každý znak z každého reťazca na riadok.
Ako by som mohol namiesto toho, že?
Čo potrebujem zmeniť informácie o tomto programe, ak chcem vytlačiť nie každé slovo
ale ja chcem tlačiť každý slovo list listom listom,
potom nasledujúce slovo písmenko po písmenku listom?
Ako sme sa spojiť tieto myšlienky tak ďaleko? Jo.
[Študent]% c >> Dobre. Tak sme niekde potrebujeme% c
Dobre, pretože nechcem tlačiť celé reťazce, chcem tlačiť znaky. Čo ešte?
>> [Nepočuteľné Študent odpoveď] >> Zaujímavé.
Takže potrebujeme akúsi druhú dimenziu tu teraz
pretože myslieť ArGV ako pole, ale je to pole reťazcov.
Ale ako, ako, 15 minútami, čo je string? Je to pole znakov.
Takže naozaj, ArGV je pole z poľa znakov,
pole polí znakov.
Tak to dopadá, že môžeme použiť len viac hranatá zátvorka notácie. Takže ideme na to.
V hornej časti tejto slučky na linke 19, budem prechádzať z aj do argc,
ale potom budem robiť toto:
pre - nemôžem použiť aj teraz.
Potrebujem ďalšie premenné, pretože chcem, aby iterácii slová
ale potom aj cez listy v slovách
tak nejako som sa zvislej osi a horizontálne os, akúsi koncepčne.
Takže int j dostane 0, potom chcem urobiť j tak dlho, ako j je menšia ako - a ja upracem to až za chvíľu.
Ako môžem iteráciu písmená v reťazci? Urobili sme to pred chvíľou.
Strlen z ArGV [i]. Dobré.
A opäť, robím trochu neefektívnosť tu nevytvára n, alebo čokoľvek,
ale vrátime k tomu.
>> Takže teraz j + +. Teraz musím zarážky ďalej zaoberať.
Čo mám teraz chcete tlačiť na každej iterácii?
[Nepočuteľné Študent odpoveď] >> Tak [i] bude mi slovo.
[I] [j], niečo ako matice.
Tí z vás, s math-y pozadia,
sme trochu indexovanie ešte hlbšie do tejto matice alebo tohto poľa polí,
Tento 2-dimenzionální štruktúry.
Takže teraz sa pozrieme, čo sa deje tu. Dovoľte mi, aby som otvoria svoje väčšie okno terminálu.
Dovoľte mi, aby som znovu spustiť, aby z ArGV z 1.
A ja som to podelal tu, čo je dobrá lekcia, pretože som príliš zabudol urobiť.
Implicitne prehlasuje C knižničný funkcie "strlen" s typom 'unsigned -
Ja ani neviem, čo ostatní, to znamená, ale videl som to skôr,
implicitne vyhlásil.
Kedykoľvek vidíme túto chybu, čo to zvyčajne znamená?
>> [Nepočuteľné Študent odpoveď] >> Zabudol som knižnicu až hore. Ale počkajte.
Obvykle som podelal, pretože som zabudla na CS50 knižnicu, ale že je tam.
Obvykle som podelal, pretože som zabudol štandardné I / O.
A úprimne povedané, ja ani potrebovať. Nie sme pomocou GetString dnes.
Takže to, čo mi chýba?
Je tu ďalšie knižnice, ktoré teraz musíme použiť občas nazýva string.h,
a to je len ďalší knižnice, ktoré má viac funkcií, ktoré nie sú v štandardnom I / O.
>> Takže sa vráťme k môjmu veľkému terminálovom okne.
Dobre. Teraz, sakra, myslím, že som sa mýlil. Bol som pomocou CS50 knižnice.
Takže môžeme opraviť v jednej zo 2 spôsobmi.
Môžeme si vziať na školenie kolesá hneď teraz a práve to,
alebo poďme trochu držať sa, že zjednodušenie len pre teraz, vložte tento chrbát,
vyriešiť tento problém, a teraz späť do okna terminálu.
Takže byť jasné, v knižnici CS50 nie je len funkcia,
to je tiež kľúčové slovo reťazec, čo je dôvod, prečo táto chyba sa práve stalo.
>> Tak ideme na to. Opravil som obe knižnice otázok. Enter. Dobré.
ArGV z 1, foo bar, Enter. Vynikajúce.
Takže teraz máme každý písmeno každého slova tlačeného 1 na riadok,
ktoré neprispievajú k veľmi zaujímavým programom,
ale upozornenia teraz máme schopnosť nielen iterácie slov
ale aj nad jednotlivými písmenami v slovách, ktorý znie strašne povedomý
na vyrovnanie najjednoduchšie aplikácie, ako je zakódovanie písmen v reťazci, ako je tento.
Poďme ďalej a vziať naše 5-minút prestávku tu.
A keď sa vrátime, začneme hovoriť o účinnosti
s ktorými sa môžeme robiť tieto veci lepšie.
>> Dobrá. Sme späť.
Vďaka jednému z našich TFS, ktorý hrá veľa Bananagrams,
skutočnosti máme veľa znakov s nami tu dnes
fyzicky inkarnovali s týmito malými plastovými kúsky,
a dovoľte mi, aby som Navrhujem, aby tento prázdna biela slate tu predstavuje RAM v mojom počítači -
laptop, desktop, bez ohľadu na - a tam vyzerá ako veľa toho
pretože ak začneme sekanie do tejto RAM do malých byte veľkosti kusov,
Poďme ľubovoľne povedať, že niečo, čo veľkosť a že rozmazané predstavuje -
tam ideme, a poďme oddialiť trochu sem -
povedzme niečo, čo veľkosť predstavuje jeden bajt.
Takže môžeme skutočne zmestí veľa bajtov alebo znakov vnútri tejto pamäti,
ako navrhuje relatívnej veľkosti tu.
>> Takže predpokladám teraz, že cieľom je alokovať pamäť pre reťazec.
Ako to vlastne funguje?
V rámci programov sme písali, sme zvyčajne používali GetString,
ale teraz, jasne, že je to iný kanál, cez ktorý môžeme dostať užívateľského vstupu do ArGV
cez argumenty príkazového riadku.
Ale čo sa naozaj deje pod kapotou?
Ukázalo sa, že keď zavoláme - poďme prejdite späť na GetString - funkcie GetString
v knižnici CS50, je užívateľ vyzvaný na zadanie reťazca,
užívateľ zadá nejaké slovo - nazvime ju HELLO.
A my sme hovorili za posledných pár týždňov, že návratová hodnota GetString
je v skutočnosti reťazec, ako slovo HELLO.
>> Ale to, čo sa GetString naozaj robí?
Ako užívateľ zadá v HELLO, Enter, GetString sa prísť na to,,
v poriadku, koľko znakov je to? To je H-E-L-L-O.
Takže treba prideliť, je potrebné požiadať operačný systém - Linux v tomto prípade -
po dobu aspoň 5 bajtov na uloženie HELLO.
A čo sa potom pokračuje robiť, keď sa dostane späť tie 5 bytov z operačného systému
je vyložiť HELLO chrbtom k sebe k sebe dozadu.
A tak to, čo je naozaj vrátil z GetString je kus dát, ktorá vyzerá takto.
Ale to je trochu nepresné, pretože sa ukáže, že to nie je tak jednoduché
ako len ukladanie HELLO v pamäti počítača
pretože predpokladám, že môj program, ktorý píšem v C a potom zavolá GetString znova,
a ďalšie slovo, ktoré užívateľ zadá do je BYE, BYE.
No, musím sa zmestili, že slovo BYE niekde v pamäti.
Nemôžem handry HELLO.
Napríklad, ja nechcem, aby sa počítač len začať prepísanie takhle
pôvodné slovo, pretože by som mohol byť ešte používať slovo HELLO v premennej
niekde inde v mojom programe.
>> Takže B-Y-E má skončiť niekde inde v pamäti.
Ale konvencie zvyčajne je, že budúci Reťazec, ktorý pridelí
Pravdepodobne, ale nie vždy, sa chystá skončiť pri najbližšej vhodné miesto v pamäti.
A ak som požiadal operačný systém pre každú pamäť
pretože v poslednej dobe som volal GetString, štatistiky sú slovné BYE
bude skončiť hneď po slove HELLO v pamäti.
Ale v tomto okamihu môžete snáď vidieť, kde potenciálny problém vzniká.
Pretože ďalšie kusy pamäti, ďalších bytov, ktoré boli len zadarmo -
vyčistite biely štít - v pamäti počítača boli hneď vedľa HELLO,
to je ako prvý reťazec som požiadal, mohla náhle sa zmení
pretože som v podstate to zmenil na HELLOBYE
namiesto toho, aby nejako demarcing začatia zbohom a koniec HELLO.
>> Tak to dopadá, že to, čo sa naozaj deje pod kapotou,
ktoré ste si mohli zahliadnuť v on-line odkazy alebo sekcie alebo knihy
alebo vôbec nie len zatiaľ je to, že je v skutočnosti úmyselné vymedzenie
medzi slovami v pamäti počítača.
A v skutočnosti, v tomto prípade tu, skôr než len dať BYE hneď vedľa HELLO,
miesto, počítač kladie osobitný znak, špeciálny znak NULL, aby som tak povedal,
ktorý je reprezentovaný so značkou s lomítkom 0.
Tak dlhý príbeh krátky, pripomenúť, že znaky sú zastúpené v ASCII.
ASCII je len mapovanie medzi číslami a písmenami,
a väčšina z tých listov kto hrubo 65 pre kapitálové A,
ale to dopadá, môžete určite predstavovať číslo 0 ako celé číslo alebo v binárnej,
a ukázalo sa, svet sa rozhodol dávno, dávno, "Vieš čo?"
"Poďme rezerva číslo 0 až nepredstavujú žiadne znaky na klávesnici -
"Žiadne listy, žiadne čísla, bez interpunkcie. 0 je zvláštne."
"Bude to mať špeciálny znak NULL, a budeme písať ako \ 0".
Rozdiel je, ak sme práve napísal 0, 0 je znak.
Pripomeňme si, že tam sú ASCII kódy pre 0, pre 1, pre 2, pre 3
, Pretože tento znak 0 sa líši od čísla 0.
A je vidieť, že keď sa pozriete späť z týždňa 1, keď sme sa prvýkrát rozprávali o ASCII,
0 a 1 a 2 a 3 po celú cestu až do 9 mali svoje vlastné ASCII kódy.
Oni nie sú, zhodou okolností, 0 až 9. Sú veľmi odlišné.
Takže 0 jednoducho znamená "Ja som zvláštne," a \ 0 znamená, doslova, "ja nie som 0 znak."
"Som to osobitnú hodnotu, null znak."
Tak som skutočne potrebujú ďalší z nich, pretože nemôžem urobiť rovnakú chybu dvakrát.
>> Takže sa za slovo BYE sme tiež bude potrebovať ďalší jeden z týchto null znakov.
Dovoľte mi, aby som chytiť moje pero sem a dovoľte mi, aby som rýchlo nakresliť ďalšie \ 0
tak, že potom, čo som požiadal operačný systém pre 2 reťazca
cez GetString nasledovala ďalšie volanie GetString,
To je to, čo je vlastne v pamäti.
Takže keď sa vrátim reťazec, som naozaj dostať späť to,
a keď som sa na ďalší reťazec, som naozaj dostať späť, že.
Tak to vyvoláva otázku, strlen, predovšetkým, aké by to vrátiť?
Keď hovorím, strlen na reťazec s a s je slovo HELLO, že používateľ zadaný v,
Čo sme samozrejme povedať, že dĺžka Hello bola pred niekoľkými minútami?
Bolo to 5, nie? H-E-L-L-O. A to je naozaj, ako strlen funguje.
Vracia sa to, čo normálny človek by čakal dĺžku reťazca byť.
Ale v skutočnosti, ako veľká je pole znakov, ktoré je skladovanie ahoj?
Je to vlastne 6.
Takže strlen nezmieňuje túto skutočnosť vás.
Ale pod kapotou je počítač skutočne pomocou 6 bajtov na uloženie 5-list slovo,
a to platí bez ohľadu na to, ako dlho to slovo je.
Je tu vždy bude špeciálny nulový ukončovacie znak na konci reťazca
na DeMarco jeho celkovú dĺžku.
>> Takže ak ste sa osoba vykonáva strlen 20, pred 30 rokmi,
ako sa vám ísť o implementácii strlen sám?
Berieme ako samozrejmosť, že existuje, rovnako ako my považujeme za samozrejmé, že printf existuje,
ale ak HELLO je slovo v otázke
a to, čo mám v pamäti, je niečo, čo vyzerá ako to,
ak by ste mali reimplement strlen, pretože ste boli požiadaní, aby
alebo pretože, úprimne povedané, ste nevedeli, strlen existuje -
ste museli vrátiť túto na vlastnú päsť - ako by ste mohli realizovať strlen
pri podávaní niečo, čo vyzerá takto?
Teraz, keď vieme reťazec je pole, môžeme iterácii každý z jednotlivých znakov
používať niečo ako - Skúsme to urobiť za behu.
>> Nechaj ma ísť do prístroja. Dovoľte mi, aby som vytvoriť nový súbor, strlen.c.
Nechaj ma ísť napred teraz sa zahŕňajú stdio.h tak, že máme prístup k printf.
Dovoľte mi, aby som to int main (void). Oh. Budem jednoducho robiť to sám pre teraz a potom. [Smiech]
Ďakujem.
To je to, čo robím. Dobrá.
Takže predtým, než som sa obrátil na obrazovke, som napísal všetko.
A teraz, čo budem robiť, je nasledovné:
printf ("Daj mi reťazec:")
To je len našuchorený pokyny.
Teraz ma nechaj robiť struny s = GetString.
Už som potrebné vykonať zmenu teraz.
Ja používam CS50 knižnice naraz, tak nech mi do toho pustite a zadajte cs50.h.
A teraz ideme na to: printf ("Dĺžka je:% d, strlen [s] -
a ja som neskončil. Čo ešte musím pridať k tomuto programu?
>> [Študent] string.h. >> String.h.
Takže teraz, sme pomocou strlen, takže poďme sa uistite, že kompilátor vie, kde to je,
tak trochu rozumu kontrolu.
Začínam reťazec v súlade 8, a v súlade 9 som tlačiť svoju dĺžku s% d
Tak poďme do toho a otvorte túto hore.
Sme, aby strlen - zostavuje v poriadku -
strlen - nechaj ma priblížite - Enter, H-E-L-L-O, Enter. Dĺžka je 5.
>> Dobre, takže strlen zdá sa, pracuje, ale svet vedel, že.
Takže poďme teraz realizovať strlen sami podľa nasledujúcich pokynov.
Dovoľte mi, aby som túto knižnicu preč.
Máme už majú prístup k string.h, pretože som ani nevedel, že existuje.
Ale to je v poriadku, pretože som si zaviesť strlen sám
a majú trvať reťazec s názvom vstup,
a teraz musím prísť na to, dĺžku tohto reťazca.
Tak ako to mám urobiť?
Čo keď urobím - poďme pozrieť, ako to urobiť - Čo chceš robiť?
>> [Nepočuteľné Študent odpoveď] >> Dobre.
Takže môžeme urobiť si pár spôsobov. Skúsim sa tento prístup.
Dovoľte mi, aby som sám int premenné i, tak aj začína 0.
A dovoľte mi povedať toto: kým vstup [i] nerovná, čo? \ 0.
Tak to dopadá, rovnako ako u všetkých znakov pri písaní je doslova v programe,
budete musieť použiť apostrofy, nie úvodzoviek.
Takže ak by som písal list a, by som to robil, písmeno b, by som to robil.
To, naopak, bude reťazec, nie je individuálny charakter.
>> Takže chcem \ 0 doslova. Čo chcem robiť v tejto slučke?
Vlastne, potrebujem ďalšie premenné, takže int dĺžka je 0.
Aj keď si neboli istí, prečo sme začali tak, ako sme urobili,
Teraz, že ideme touto cestou, čo chcem robiť na linke 9?
Dĺžka + + a potom tu dole na riadku 10, návrat dĺžka.
Tak ako je strlen realizovaný?
Je to vlastne robí asi takto.
Možno osoba používa pre slučku, možno to while - kto vie?
Mali by sme naozaj musím pozrieť pod pokrievku na skutočné zdrojového kódu
v niektorých súbore nazvanom string.c pravdepodobne.
>> Ale tu poďme si o tom, čo robím.
Som deklarovaní premennej s názvom i, stanovuje sa v ňom rovná 0.
Ja som potom prehlasuje ďalšie premennú s názvom dĺžku, stanovuje sa v ňom rovná 0.
Potom som povedal, keď i-ty znak na vstupe nie je rovnajúcu sa osobitnému nulový znak, \ 0,
zvýšiť dĺžku.
Ale akonáhle tého znaku je to špeciálny znak, čo sa stane s slučky?
To skraty. To zastaví, čo znamená, že potom okamžite vrátiť dĺžku.
>> Takže keď som sa pokaziť, poďme ďalej a vrátiť sa k môjmu terminálovom okne.
Dovoľte mi, aby som znovu zkompilujte. A ja som mhouřit.
Nekompatibilné opakovaná deklarácia funkcie knižnice strlen.
Tak som sa snažil dostať príliš chytrý pre moje dobro tu.
Kompilátor vlastne vie, že tam je funkcia nazvaná strlen
aj keď sme nezahrnula knižnicu. To je v poriadku. Čokoľvek.
Sme len tak spolupracovať potom. Poďme premenovať túto dĺžku.
Dovoľte mi, aby som zmeniť využiť ju na dĺžku tu, a to povedie k tomu zvonenie šťastnejší.
Ako stranou, pretože niektoré z týchto funkcií sú tak sakramentsky časté -
strlen, prinf - v skutočnosti majú akýsi zvláštny štatút.
A tak zvonenie jednoducho vie, trochu niečo osobitného o nich.
To nie je vždy prípad väčšiny funkcií, takže to je dôvod, prečo sme sa kričal na.
>> Dovoľte mi, aby som skúste to znova. Našťastie, to fungovalo, že čas.
Takže teraz mi dovoľte spustiť svoj vlastný strlen programu.
Daj mi reťazec: H-E-L-L-O, Enter. A ja som to podelal.
Prečo? >> [Nepočuteľné Študent odpoveď] >> Presne tak.
Tak som si sám tu veľmi pekný nekonečnú slučku
pretože aj keď som zvyšovanie dĺžky na každej iterácii,
čo mám zjavne nie je robiť? Nie som zvyšovanie i Dobre. Easy fix. Áno?
Dobre. Nie teraz by sme dostala do konfliktu nejaké iné spoločné chybu, kde som potrebné zátvorky.
A úprimne povedané, tento kód sa začína vyzerať škaredo,
takže budeme mať bodnúť pri čistení to až za chvíľu.
Ale teraz som zvyšovaní ako dĺžku a ja.
Úprimne povedané, som už videl príležitosť pre zlepšenie, ale vrátime k tomu.
>> Takže teraz sa jednoducho uistiť, že sme aspoň pokrok.
To sa stalo pár z vás, a ja som zabudol spomenúť vopred.
Ak nemáte tú smolu, o scenári, ako je tento, ako to opraviť
krátke reštarte prístroja alebo počítač alebo zatvorenie okna?
Je to vlastne jednoduché.
Control C zašle túto malú mrkvu symbol C, a to len ukončí väčšinu programov.
Ak máte naozaj zlý nekonečnú slučku, ktorá sa tlačí na stiahnutie nekonečne veľakrát,
Niekedy budete musieť zasiahnuť ovládač C tisíckrát to, aby bola skutočne počuť.
Takže len uvedomiť teraz, pretože som sa netlačia nič, to bolo celkom jednoduché.
A technicky, raz stačí, ale ja som netrpezlivý a ja som zvyčajne trafil, že mnohokrát.
>> Tak strlen. Daj mi reťazec: HELLO. Bude to fungovať tentokrát?
Dobre. Ďalšou častou chybou. Musieť rekompilovat.
To bolo úmyselné, že jeden. Dobrá.
Takže strlen, H-E-L-L-O, Enter. Vynikajúce.
Takže teraz máme strlen na 5.
Takže sme doslova reimplemented, že koleso.
Tak teraz poďme čistenie tohto, pretože to zo mňa nerobí dojem
s návrhom môjho kódu.
Čo môžeme jednoznačne vylúčiť v tomto programe na čistenie tohto hore?
[Nepočuteľné Študent odpoveď] >> Jo. Doslova, sme liečbe i a dĺžku zhodne.
Tak prečo by sme sa len tak chytrí a hovoria, zatiaľ čo dĺžka?
Skôr, poďme nazývať to dĺžka začať, inicializovať na 0
pretože v predvolenom nastavení reťazec nemá dĺžku, kým nezistíme, čo to je.
>> Teraz sme to, a teraz je to celkom elegantný program.
Jedna premenná. Vyčistila som ho, dotiahnuť to.
Takže teraz sa vráťme k môjmu terminálovom okne. Poďme ďalej a spustiť tento.
Urobte strlen. Vyzerá to dobre. Spustiť strlen opäť Enter.
Daj mi reťazec: HELLO, Enter. A zdá sa, že bude pracovať ako 5.
Teraz, aby bolo jasno, keby som nenapísal, napríklad HELLO v 1 reťazci
a potom BYE v inom, môžeme určite mať viac slov.
Ak je výraz som vlastne chcel typ nebol HELLO, ale napríklad,
HELLO WORLD, všimnite si, že to, čo by sme nemali, je táto situácia, že jo?
To by znamenalo, že je to 2 reťazca.
Určite môžete mať znaky medzerníka, takže ak sme skutočne zadali v dlhšom frázu
ako Ahoj všetci, čo by sme naozaj v pamäti
vyzerá trochu niečo také existuje.
>> Dobrá. Akékoľvek otázky potom o zastúpenie tu reťazcov?
Nie? Dobrá.
Tak som povedal skôr, že volanie strlen znova a znova úmyselne takhle
asi nie je najlepší nápad, pretože ste bude robiť veľa práce
znovu a znovu a znovu.
Vskutku, aký druh práce je nutné pre zisťuje, dĺžku reťazca, zrejme?
Musíte začať od začiatku a potom sa pozrieť, pozri, pozri, pozri, pozri
kým sa konečne vidieť, že osobitný charakter, na ktorom mieste, ah, teraz už viem, dĺžku.
Takže skôr, keď sme strlen nazývaný znova a znova a znova,
dôvod, prečo som navrhol, aby bol druh hlúpe je, že opäť, že reťazec vyzerá.
Nebude to meniť zakaždým, keď určiť iteráciou nejaké slučke,
takže robíte zbytočnú prácu.
V rovnakej dobe mal by ste vedieť, ako zrušiť, aby prekladača ako Clang v týchto dňoch
boli vyvinuté v priebehu mnohých rokov,
a kompilátorové spisovatelia, programátori, sú celkom šikovné.
A tak sa ukazuje, že zvonenie a ďalšie kompilátory môžu skutočne prísť na to, že
v poriadku, áno, ste napísal strlen vo vašom stave,
čo technicky znamená, že by sme mohli nazvať ju znovu a znovu a znovu.
Ale inteligentný kompilátory môžu skutočne optimalizovať tieto druhy chudobných užívateľských rozhodnutia
z kódu na nápravu veci.
>> Takže si len uvedomiť, že niekedy kompilátor je múdrejší ako my
a druh skryť vlastné chyby.
Ale iste, pokiaľ ide o problémových súborov a podobne,
sa myslieť o tých zásadne chybných návrhu rozhodnutia
potenciálne z toho prostého dôvodu, že by sme sa robiť oveľa viac práce
ako v skutočnosti máme robiť. Ale koľko viac práce?
V prípade Hello World, začnime zovšeobecniť veľkosť tohto problému.
Čo je dĺžka problému alebo veľkosť problému
keď slovo používateľ zadali, je HELLO?
Je to vraj 5, možno 6. Plus alebo mínus 1. Čokoľvek.
Je to tak blízko, jednoducho budeme nazývať 5.
>> Takže to, čo je veľkosť problému tu, keď sa snažia prísť na to, dĺžku HELLO?
Je to 1, 2, 3, 4, 5, a možno 6 na mieste posledného znaku, ale poďme zovšeobecnenie že n
Takže n, len premenná n, je to, čo počítačoví odborníci by sa zvyčajne používa
popísať veľkosť problému, a problém po ruke, je, ako dlho je HELLO?
Koľko času strlen vziať?
Trvá na poradie krokov n, kde každý krok znamená pohľad na charakter,
pozrite sa na znak, pozrite sa na znak.
A my sme mali túto diskusiu, zatiaľ čo zadné, počet operácií niečo berie.
Hneď prvý deň v triede sme všetci rozpačito vstať,
a potom sa všetci začali párovanie preč so sebou
aby skutočne spočítať ideálne, koľko ľudí bolo v miestnosti.
A tiež sme urobili ďalšiu vec, pričom ak som to urobil miesto starej školy spôsobom
z práve začína 1, 2, 3, 4, 5, 6, a tak ďalej,
to taky, veľkosť tohto problému bol veľkosti n Tam bolo n ľudí v miestnosti.
Ale ja som mohol urýchliť, že, nie? Stupeň školy štýlu by som mohol začať počítať za 2s.
2, 4, 6, 8, 10, 12. A to je tak oveľa rýchlejší, a naozaj to je.
Je to doslova dvakrát tak rýchlo, ale zase, ak ďalšie 400 ľudia chodili do tejto miestnosti
naraz, by sa tieto algoritmy ďalšie 400 alebo možno 200 krokov.
>> Ale naopak, ak budeme naozaj chytrí a my namiesto toho vás všetkých spočítať sami,
pripomenúť, ako tento algoritmus pracuje.
Vy všetci vstal. Dovoľte mi, aby som rýchlo dopredu na to.
Vy všetci sa postavil, ste spárované off, potom polovica z vás posadil,
polovica z vás sa posadil, polovica z vás posadil,
a pri každom opakovaní tohto cyklu od týždňa 0, sme polovicu problému po ruke
a šiel do n / 2, potom n / 4, potom n / 8.
A dôsledkom toho je, že ak ďalšie 400 ľudí chodí do miestnosti, žiadny veľký problém,
to nám bude trvať 1 ďalšie kolo, nie 400 viac kôl, nie 200 viac kôl.
A tak príbeh sme si povedali chvíľu späť musel urobiť niečo s tým.
Táto červená čiara je tu lineárny, je to priamo, a to označené ako n
pretože ako veľkosť problému rastie,
ak váš algoritmus alebo program, s ktorým budete riešiť to trvá n krokov,
môžeme vykresľovať ako priamky, kde to vyžaduje viac času, tým väčšia je veľkosť problému.
A twosies prístup, počítanie 2, 4, 6, 8, stále priamka, len trochu lepší.
Trvá trochu menej času, takže žltá čiara je pod červenou linkou bod pre bod.
>> Ale ešte lepšie je to svätý grál, čo sme nazvali logaritmický čas
, Kde aj keď sme opäť zdvojnásobiť počet ľudí v miestnosti,
sme zdvojnásobiť veľkosť tohto telefónneho zoznamu od prvého dňa triedy,
O nič nejde, to trvá 1 ďalšia stránka slzu, trvá 1 ďalší sede
s cieľom vyriešiť problém, ktorý je dvakrát tak veľký.
A tak rozhovor sme teraz dostať začať s je
Ako sme vlastne riešiť problémy efektívne
ak uvážime, najjednoduchšie problémy, ako je tento?
Predpokladajme, že máme 8 dvere, za ktorými sú niektoré čísla,
a každý z týchto čísel nie je zoradená v žiadnom prípade,
sú to len náhodné celé čísla za týmito dverami,
a kladieme otázku, ako sa vám ísť o zistenie, že počet - kto vie -
7 za týmito dverami?
Čo by ste, človek, urobiť, aby sa mi nájsť číslo 7
ak opäť každý z nich sú dvere a vidieť hodnotu budete musieť otvoriť dvere?
Čo by vaše algoritmus byť možná?
>> [Nepočuteľné Študent odpoveď] >> Takže začať s doľava a otvorte dvere, otvorte dvere, otvorte dvere.
A v najhoršom prípade, ako dlho to bude trvať nám nájsť číslo 7?
A opäť, to nie sú zoradené, takže to nie je tak jednoduché, ako, no, ja idem otvoriť 7. dvere.
Mohlo by nás, maximálne, 8 krokov.
V najhoršom prípade, 7 je náhodne na samom konci riadku dverí,
takže možno budeme musieť vyskúšať všetky n dvere.
Takže znovu tu, zdá sa, že majú lineárny algoritmus.
V skutočnosti, sme to len pár rokov pred.
Jeden z vašich predchodcov bol napádaný sa práve táto
kde sme nemali digitálnej verzii, sa namiesto toho malo tabuľu
s niektorými kúskami papiera na ňom.
A to, čo som myslela, že by som urobiť, je rýchlo pozrieť späť na to, ako to šlo,
jeden z najlepších a možno najviac nevhodných príležitostiach na javisku
mať demonštrácii tu na Sandersa.
Mali sme 2 rady čísiel.
Sme len sa pozrieme na to, čo sa tu deje so Seanom pre veľmi Vrchol týchto riadkov.
Ak nie je nikto už nikdy dobrovoľníkov v CS50,
sme mali Sean požehnanie držať to na kameru,
takže vie, že stovky ľudí boli sledovaní to teraz celé roky.
Ale Sean odviedol úžasnú prácu - alebo robil on -? Na skutočne nájsť nám určitý počet.
>> Tak uvidíme, ako sa rieši tento algoritmus tak, že budeme pokračovať v tomto rozhovore onedlho
o tom, ako sme sa nájsť veci efektívne.
[Malan na videu] som skrytý za týmito dverami číslo 7,
ale zastrčený v niektorej z týchto dverí, ako aj iné non-záporné čísla,
a vaším cieľom je, že tejto hornom rade čísel len ako pole
alebo len sled kúskov papiera s číslami za nimi,
a vaším cieľom je, iba pomocou hornej poľa tu, tu mi číslo 7.
A my sa potom bude k posudku, ako ísť o to urobiť. >> Dobre.
[Malan] Hľadať nám číslo 7, prosím.
[Smiech]
[Malan] No [smiech]
5, 19, 13, [smiech]. Nie je to chyták.
1.
[Smiech]
V tomto okamihu je vaše skóre nie je moc dobré, takže si pokojne ďalej. [Smiech]
3.
Prejsť na. Úprimne povedané, nemôžem si pomôcť, ale zaujímalo, čo ste ešte premýšľať. [Smiech]
Iba horný riadok, takže máte 3 vľavo. Tak mi nájdi 7.
[Študenti reptania]
[Malan] 17.
[Študenti reptania]
[Malan] 7! [Potlesk]
>> Takže v stredu budeme ponoriť do tohto a ďalších sofistikovaných algoritmov pre hľadanie vecí.
Pre túto chvíľu sme vás nechám sa Seanom a uvidíme v stredu.
[CS50.TV]