>> [Prehrávanie hudby]
DAVID Malan: Dobre.
To je CS50, a to je koniec týždňa 2.
Je mi to tak ľúto, že som nemohol byť tam s vami všetko dnes,
ale vy ste vo veľmi dobrých rukách.
Dovoľte mi predstaviť CS50 vlastné Rob Bowden.
ROB BOWDEN: A samozrejme, potom musíme robiť si žarty z faktu
že nám poslal vertikálne video a ukázať to.
>> [Videoprehrávanie]
>> [Prehrávanie hudby]
>> [Stopách]
>> -Tento Video nie sa pozerať takto.
To by bolo možné predísť.
Povedz nie na vertikálne videá.
>> -Vertikální Videá stane, keď vás držať váš fotoaparát na zlú cestu.
Vaše video skončí vyzerať ako hovno.
>> - [GRUNT]
>> -Existuje Viac a viac ľudia závislí k tomu, že zvislé videá každý deň.
Nie je to bezva, alebo nič, ale je to stále naozaj zlé.
Existujú dva rôzne druhy ľudia, ktorí sú postihnutí VVS.
Prvá skupina lieči Videa sa strieľať ako obrazy.
Oni neznamenajú žiadnu škodu.
Oni jednoducho nechápu, že zatiaľ čo vy môžete otočiť obrázok,
môžete naozaj otočiť video.
>> [CRASH]
>> - [MONKEY SOUNDS]
>> -the Iná skupina sú ľudia, ktorí nedávajú [pípnutie].
>> -Vertikální Video syndróm je nebezpečné.
Filmy majú vždy vo vodorovnej polohe.
Televízory sú vo vodorovnej polohe.
Počítačové obrazovky sú vo vodorovnej polohe.
Ľudské oči sú vo vodorovnej polohe.
Nie sme postavená tak, aby sledovať vertikálne videá.
>> -I Láska vertikálne videa.
>> -Nobody Sa stará o vás.
>> -Ak Tento problém je neriešenie, aj vy
sa začne ukazovať štyri videá zrazu len preto, aby uložiť šírku pásma.
>> -Letterboxed Vertikálne videá by byť veľkosť poštovej známky.
>> -A To bude šíriť všade.
Filmové obrazovky majú vždy vo vodorovnej polohe.
Ak vertikálna videá stanú prijatá, kiná
budú musieť byť vysoký a chudý.
>> -A Všetky kín by musieť dostať zbúraný a prestavaný.
A v čase, keď boli prestavané, Mila Kunis by bola stará a škaredá.
>> -Birds Sa zrúti do nich a zomrieť.
>> -We'll Všetci si tuhý krky od vzhliadol.
>> -A Nikto sedieť v predné rade niekedy znova.
>> -George Lucas bude re-release hviezda Wars again-- chudý vydanie.
>> -Bol Som nikdy schopný povedať príbeh, ktorý som chcel povedať.
To bol veľký šancu pre mňa experimentovať s novou technológiou.
>> -Si Trhnúť.
>> -Every Time mobilné zariadenia sa používa na nahrávať video, pokušenie je tam.
Stačí povedať nie.
Povedz nie na George Lucasa.
Povedz nie na staré Mila Kunis.
Povedz nie na vertikálne videá.
>> -A Keď vidíte to niekto robí, povedzme, "nie ste natáčanie tú správnu figuríny!"
>> [Prehrávanie hudby]
>> [END Prehrávanie]
>> [APPLAUSE]
>> [AUDIO OUT]
ROB BOWDEN: --simple Forma kryptografia,
ktorý je v podstate šifrovanie a dešifrovanie tajných správ.
Takže tu máme veľmi jednoduchú hračku.
A táto myšlienka je vonkajší krúžok sa otáča okolo vnútorného krúžku.
A môžete vidieť, možno keby som zoom in, that-- je ťažké vidieť.
Avšak, rovnako ako počet 1-- dobre, že sa sťahoval.
>> Číslo 1 mapuje na list X, číslo 2 mapy do písmena
J. veľmi zložité nie pre preskok vpred.
List 2 mapuje J. Číslo 3 mapuje D. So
s týmto krúžkom môžete dať niekto správu 1, 2, 3.
Z nejakého dôvodu chcem im povedať XJD.
Ale môžete dať niektoré správy z čísel,
a tak dlho, ako majú tento krúžok sa môže dešifrovať, čo sa snažíte povedať.
>> Takže ste mohli vidieť to Konkrétnym príkladom kryptografie
Než-li okolo Vianoc ste sledovali Vianočný príbeh.
Ak ste nikdy nevideli to skôr, potom len
zapnúť TBS na doslovne kedykoľvek na Štedrý deň,
pretože oni len ukázať ho chrbtom k sebe sa chrbtom k sebe k sebe celý deň.
A príslušná video je to.
[Videoprehrávanie]
-BE Je známe, že všetky a rôzne že Ralph Parker je týmto
menovaný za člena Little Orphan Annie Secret Circle
a má právo na všetky vyznamenania a výhody dochádza k nemu.
Podpísané Malý sirota Annie.
Spolupodpísaný Pierre André atramentom!
Vyznamenaní a výhody Už vo veku deviatich!
>> [Kričí od rádia]
-No ták.
Poďme sa do toho.
Nepotrebujem všetok ten jazz o pašerákov a pirátov.
Počúvaj zajtra večer s záverečná dobrodružstvo
Čierne pirátskej lodi.
Teraz je čas na Annie tajnú správu
pre Vás členovia Tajomstvo kruhu.
Pamätajte si, deti len členovia Annie Secret Circle
vie dekódovať Annie tajnú správu.
Pamätajte si, že Annie závisí na vás.
Nastavte si kolíky do B2.
Tu je správa.
12.
11.
2.
-I Som vo svojom prvom tajnej schôdzke.
>> -25.
14.
11.
18.
16.
>> Oh, Pierre je vo veľkom hlasové večer.
Mohol by som povedať, že dnes večer sa Správa bola naozaj dôležité.
-3.
25.
To je správa od Annie sama.
Pamätajte si, že nikomu to nehovorte.
>> -Five Sekúnd neskôr, ja som v jediný miestnosť v dome, kde chlapec deviatich
mohli sedieť v súkromí a dekódovať.
Aha!
B!
Išiel som na ďalšie.
E. Prvé slovo je "byť."
S. Prichádzalo to teraz ľahšie.
U. 25.
To je R.
No tak, Ralphie!
Musím ísť!
-Budem Hneď dole, Ma!
Gee svišťanie.
T. O. "Uistite sa, že" - uistite sa, že to, čo?
Čo bolo Malý sirota Annie snaží povedať?
Uistite sa, k čomu?
>> -Randy Má ísť!
By ste prosím vyjsť?
>> -Dobre, Mami!
Hneď som vonku!
Bol som stále bližšie.
Napätie bolo hrozné.
Čo to bolo?
Osud planéty môže visieť na vlásku!
>> -Ralphie, Randy musím ísť!
>> -Budem Mať pravdu von, preboha!
Skoro tam!
Prsty letel.
Moja myseľ bola oceľová pasca.
Každý pórov vibroval.
Bolo skoro jasno!
Áno.
Uistite sa, že piť Ovaltine.
Ovaltine?
Mizerná reklama?
Ten hajzel.
>> [END Prehrávanie]
>> ROB BOWDEN: Tak to je, ako Ovaltine sa vzťahuje na kryptografiu.
V podstate CS50 len inzeroval Ovaltine, takže sme mohli
Mizerná byť reklama pre Ovaltine.
Dobre.
Takže teraz skutočná počítačová veda.
Pamätajte si, v pondelok sme prestali potápanie hlbšie do reťazcov.
Takže sme sa zaoberali reťazec "Zamyla."
A my sme sa rozpoznávať skutočnosť, že môžeme liečiť
"Zamyla" ako rad znakov.
A pamätajte, že sme sa dozvedeli, držiak notácie.
Takže ak to boli uložené v reťazci "s", potom
ak by sme povedali s konzola 0, by to uveďte list kapitálu Z.
A ak by sme povedali s držiak 1, že naznačujú prvé malými písmenami A,
a tak ďalej až do s držiakom 5, čo by naznačovalo LAST.
>> Teraz si uvedomiť, že Dĺžka tohto reťazca je 6,
ale indexy do reťazca sú 0 až 5, Z cez to trvať.
Tak to teraz zmestí do väčší obrázok pamäti počítača, pamäte RAM.
Takže niekde program, ktorý vediete svoj počítač
je potrebné mať na pamäti, Zamyla niekde v pamäti.
Takže môžem mať dobrovoľníka?
Áno, prosím.
A aké je vaše meno?
>> Dean: Dean.
>> ROB BOWDEN: Dean?
Teší ma, Deane.
Tak poď sem, a budeme musieť kreslenie
na našom peknom šikovný usporiadanie pamäte.
Teraz by som si myslel, pamäte ako jeden dlhý pruh bajtov,
ale len na účely zobrazenie my budeme Len si zľava doprava, zhora nadol.
OK?
>> Takže som sa ukázať program-- Getstrings.c.
A tak všetko je tento program robí požaduje štyri reťazce
od užívateľa s GetString a potom tlač
čo to ako prvý reťazec vstúpil bol.
Sme ignorovať dva cez štyri.
OK.
Tak tu, keď now-- Aj prvá žiadosť S1.
Tak vy ste počítač.
A ste sa vykonáva getString.
Takže budete požadovať reťazec z ma, a ja hovorím, v poriadku, Deane.
Dajte reťazec "Dean."
>> Takže niekde v pamäti budete mať na pamäti, "Dean."
Tak napíšte ho do pamäte niekam.
Perfektné.
OK.
Takže teraz sme sa S2.
A s2 bude žiadosť o getString.
Takže budem zadať reťazec.
Chystám sa vstúpiť do "Hannah."
Tak zadajte "Hannah" niekam do pamäte.
Jo.
A-H.
>> OK, tak teraz s3.
A to bude ďalší požiadať getString.
A tak teraz zadať "Máriu."
Dobre.
A potom je tu ešte jedna posledná Žiadosť o getString, S4.
Takže, ja neviem.
Čo tak ideme s antidisestablishmentarianism.
Vstúpte preto, že do pamäte.
Jo.
Takže proste "Rob."
>> OK.
Takže teraz explain-- prečo necháte tieto priestory?
Prečo máte toto prázdne priestor tu, tu a tu?
Áno.
Takže si všimnúť, keď idem tlačiť s1-- takže ak
Mal beh "Hannah" hneď sa vedľa "Dean"
ako vieme, kedy reťazec "dekan" končí?
Takže tlač reťazec s1, môže mať Len tlačený "DeanHannahMariaRob"
ak to nemá žiadne poňatie kedy "Dean" skutočne končí.
>> Dobre.
Takže v pamäti tak, ako sme vlastne predstavujú Tento koniec reťazca
je s spätné lomítko nula.
Takže tento priestor je presne to, čo sme chceli.
To by malo byť spätné lomítko nula.
To bude spätné lomítko nula, a to bude spätné lomítko nula.
A môžete mať vynikajúcu cenu za to, že perfektné dobrovoľník.
Potom sa stres loptičku!
>> OK.
Takže tento znak spätné lomítko nula Ako sme sa označujú koniec reťazca.
Je to, ako pri akomkoľvek programe chce vytlačiť reťazec,
Pamätám si, že je to how-- sme sa dozvedeli, Funkcia strlen minulý týždeň?
Dĺžka reťazca?
Je to, ako dĺžka reťazca je schopné určiť, ako dlho je reťazec.
Je to jednoducho stále iterácie cez znaky
až sa nájde spätné lomítka nulovú charakter.
Takže dôležité si uvedomiť o spätné lomítko znak nula
Je to zastúpená všetkých núl v bitoch.
Tak si všimnúť, že toto je odlišná od nulového charakteru.
Takže znak nula, ak si spomeniete V príklade, ktorý dal na konci
prednášky, kde na mape charaktery to-- ako sú mapy kapitálu do 65 rokov.
Malé písmená a mapy 97.
Malé písmená b by bola 98.
Takže číslo 0 mapy to-- vôbec sa mi nepáči poznať z vrcholu mojej hlavy.
44 alebo 45.
Niekde v tomto regióne.
>> Takže znak 0 je skutočný počet.
Ale spätné lomítko nula mapy do všetkých nulových bitov.
Takže tam je rozdiel medzi spätné lomítko nula,
ktorý zavoláme null zakončenie.
Tam je rozdiel medzi spätné lomítko nula a znak nula.
>> Dobre.
Tak hovorí o niečo viac o reťazcoch.
Takže vidíme, tu je to, ako to by byť uložené v pamäti.
Takže táto myšlienka reťazcov ako sekvencie z characters-- takže oficiálnej počítač
Science termín pre postupnosť je pole.
Takže by sme nazvali reťazec rad znakov.
A tam sú vlastne ďalšie dáta typy, ktoré môžeme robiť poľa von.
>> Takže motivovať to, pozrite sa na príklad.
Budeme hovoriť ages0.c budem skopírujte a vložte naše šablóny.
OK.
Takže v tomto programe to, čo sme chcete urobiť, je chytiť veku
zo v priebehu troch študentov.
Takže vieme, že int age-- a teraz som chcel povedať 0.
Takže budete chcieť povedať age1, ale na účely uvidíme veľmi skoro,
Poviem int age0 rovná GetInt.
Takže rovnaké volanie GetInt že sme boli pomocou I
nestane sa dotazovanie hovoriť, "daj mi vek."
Ale len o to požiada.
>> A age1 rovná GetInt.
A int age2 rovná GetInt.
Takže, opäť traja študenti, ale nakoniec variabilný indexy
sú age0 cez age2.
OK.
Takže tento program bude robiť, čo chceme s age0, age1 a age2,
ale tento program nakoniec pracuje pre tri študentov.
>> OK.
Takže čo teraz, keď chcem štyria študenti?
No, budem musieť ísť späť do môjho kódu, zmeňte komentár,
a teraz máme int age3 rovná GetInt.
OK.
Takže, kto vidí tu problém?
Aký je problém s týmto druhom nastavenia?
Jo.
Takže sme vytvárate premenná pre každého študenta.
Teraz, že funguje, ale nakoniec čo keby som teraz
hovoriť, "ja chcem chytiť veku osem študenti alebo 16 študentov
alebo sa však mnoho študentov stovky študentov v CS50
alebo tisíce študentov na akademickej pôde alebo miliardy ľudí na svete?
Takže nakoniec to nie je udržateľný.
Kedykoľvek vidíte sami kopírovanie a vkladanie kódu takto,
mali by ste cítiť celkovo že existuje lepší spôsob.
>> Takže toto je miesto, kde sme zaviedli deklarácia poľa.
Takže keď deklarujete poľa, To je to, čo všeobecný formát
bude vyzerať.
Chystáme sa povedať typu.
a potom budeme uveďte meno tejto rady,
rovnako ako my definovať ľubovoľné danej premennej.
A potom konečne sme pomocou opäť držiak zápis
ale v inom kontexte z ako sme používali skôr.
>> Tak tu to vyzerá ako normálny deklarácie premenných, ktoré sme videli.
Takže sme nevideli int x bodkočiarku.
No teraz by sme mohli niečo vidieť ako int x zátvorkách 5.
A túto myšlienku uvedenie do GetInt program, ktorý sme have--
takže môžeme realizovať to rovnakým spôsobom.
>> Povedzme, že v CS máme tendenciu používať n ako počet niečo.
Tak tu budeme uložiť štyri študentov.
A teraz môžeme povedať, int vek držiak n- nie tak celkom si to yet--
deklarovať rad štyroch študentov.
Tak, ako to bude vyzerať v Pamäť bude podobná tejto.
Zrušte to.
A budeme musieť niekam v memory-- Dám to tam.
>> Takže niekde v pamäti.
Jeden, dva, tri, štyri.
Máme štyri celé čísla v rade pre toto pole štyroch celých čísel.
Takže, v súčasnej dobe, čo je veľkosť jedného z týchto polí?
Jo.
To je štyri bajty.
Je to 32 bitov.
Takže teraz toto je niečo iné z poľa, ktoré sme
videli skôr, pole znakov.
V reťazci každý box bol iba jeden bajt, preto, že znak je iba jeden bajt.
Ale s pole celých čísel, z ktorých každý box musí byť štyri byty za účelom
aby sa zmestili celé číslo.
Takže toto je to, čo rad Štyri ints bude vyzerať.
>> A potom späť do kódu.
Teraz chceme skutočne obchod celé čísla do tohto poľa.
Takže teraz je to veľmi, veľmi, veľmi spoločný vzor, ​​ktorý bude v určitom okamihu
stať sa svalová pamäť.
Takže int i = 0.
aj menšie než n.
i a a.
Vekovej kategórii i rovná GetInt.
>> Takže to pre sláčiky, tento formát, mali by ste si veľmi zvyknutí.
Tak to je všeobecne, ako budeme iteráciu cez takmer všetky polia.
Teraz si všimnúť tento druh vysvetľuje, prečo od začiatku
sme nemali pre slučky ísť na int i sa rovná 1, aj menšie než alebo rovný 10.
Dôvodom je, že sa vychádza z nula robí túto prácu dobre s poľami.
Takže polia sú nulové indexované.
Ak je táto pole je s dĺžkou 4, indexy sú 0 až 3.
>> Takže cez prvé iterácie tohto cyklu for
budeme sa nastavenie vek držiak 0 rovná volanie GetInt.
Tak čo som sa stalo pre vstup na klávesnici.
V druhom priechodu, my sme nastavenie age1 rovná GetInt.
Po tretie priechod, age2.
Finálna prihrávka age3.
Takže ak sa v prvom prechode slučky Aj zadajte číslo 4 na klávesnici,
potom budeme vložte 4 tu.
Ak sa na druhom prechode I vstúpi 50, budeme dať 50 sem.
Na treťom priechodu by som mohol zadajte negatívny 1 negatívny 1,
a nakoniec, keď som sa vstúpiť 0-- a Teraz si uvedomiť, že to bol index tri.
>> Potom, čo sme slučky chrbát, aj je bude zvýšený na 4.
i už nie je menšia ako n, čo je 4.
A my sme sa vymanili zo slučky.
Takže čo by bolo zlé?
[Nepočuteľných]?
Divákov: [Nepočuteľné]
>> Áno.
Takže pole má iba štyri miesta, čo znamená, že ako indexy 0 až 3.
Takže ak to tak bolo, tak by som vziať na hodnote 4 v určitom okamihu.
veková skupina 4 bude nastavenie nech sa stane čokoľvek, aby sem
na to, čo musím povedať, zadajte 6.
To bude možné toto nastavenie zmeniť na 6.
>> Ale my nevieme, čo je to tu.
To nie je pamäť že sme mali prístup k.
Takže ak si pamätáte z predchádzajúca prednáška,
bol vytlačiť hodnoty Zamyla a v určitom okamihu narazil túto segmentáciu
porucha. Takže budete pravdepodobne vidieť Mnoho segmentácia chyby, ako si
implementovať niektoré z problémových sád.
Ale to je jeden zo spôsobov, ktorými môžete stretnúť s segmentácie
chyba, keď začnete prístupu pamäť spôsobom, ktorý by ste nemali byť.
Takže sme nemali prístup k toto umiestnenie, a to je chyba.
>> Tak to je lepšie.
Teraz tam je ešte malý Problém s týmto kódom.
A to je v podstate, že sme zamrzla na štyri študentov.
Teraz, keď chcem použiť osem študentov, OK.
Nie je to tak veľký obchod.
Môžem ísť dovnútra, zmeňte komentovať, a zmeňte n.
Teraz to bude fungovať s ôsmimi študentmi.
Ak by som to kompilácie a spustiť to, bude to show me--
to bude požadovať celé čísla pre osem študenti a to bude jednoducho fungovať.
Ale je to menej ako ideálne musieť překompilovat programu, zakaždým
Chcem zmeniť počet študentov že chcem vstúpiť veky pre.
>> Takže konečný zlepšenie na to, ako uvidíme here-- sme
chystá požiadať o počte ľudí.
Tu máme rad ľudí v izbách
alebo akékoľvek vekové kategórie ľudí v miestnosti.
Ale budeme požadovať číslo ľudí v miestnosti od užívateľa.
Tak to je presne rovnaký do-while slučky, že sme nevideli.
Je to ten istý do-while, ktorý ste
môže byť vykonávanie na problém sade.
Tak dlho, ako sú Zadanie n menšie ako 1,
takže to musí byť na Najmenej jedna osoba v miestnosti.
Tak dlho, ako sú Zadanie n menšie ako 1,
potom budeme mať znova pýtať.
Prosím, zadajte číslo ľudí v miestnosti.
Teraz, akonáhle budeme mať číslo ľudí v room--
takže som mohol dostať, že existuje sú 200 ľudí v tejto miestnosti.
Potom tu budeme prísť a deklarovať poľa veľkosti 200.
Sme deklarovanie pole, ktoré je dosť veľká držať 200 vekové kategórie.
Coming dole, je to pre sláčiky že sa dostanete veľmi zvyknutí.
Takže iterácie nad týmto poľom, priradenie ku každému umiestnenie
sa tým, že pole celé číslo, a potom nakoniec tu sme
len na to príklad iterácie počas tohto poľa, nie priradiť hodnoty,
ale aby prístup k hodnotám.
>> Takže tu vidíme, že hovoria, o rok neskôr,
osoba% budem% i rokov, kde i je aj plus 1 prvej%.
Tak som sa na tento index variabilný.
A druhá% i bude, že je hodnota uložená v vekov poli plus 1.
Tak toto plus 1 je len preto, že sme saying-- tento plus 1, veku Aj s 1.
Toto plus 1 je len preto, že sme povediac: Oddnes za rok na osobu
bude tento starý.
>> Tak prečo je to aj plus 1?
Prečo máme plus 1 tam?
Jo.
Áno.
Takže pamätajte polia sú indexované nula.
Takže ak budeme tlače toto von pre niekto len čítať výstup,
potom zrejme chcú vidieť niečo ako je človek jeden, osoba číslo jedna,
bude 20 rokov.
Osoba číslo dva bude 15 rokov.
Radšej nie vidieť osobu číslo nula je 15 rokov.
>> Takže kompilácie toto a vidí to, čo práve to vyzerá jako-- vytvoriť nejaký priestor.
Vykonajte veku od kompiluje.
Beh vekové kategórie.
Vidíme, počet ľudí v miestnosti.
Tak som si povedal, že sú traja ľudia v miestnosti.
Age of osoba číslo jedna, povedzme, 15, 20, 25.
A teraz budem hovoriť za rok od Teraz budú 16, 21, 26.
Pozrime sa, že to funguje s n, ktorý nie je rovné 3.
Takže keď poviem, že počet ľudí, ktorí ich 5, jedným, dva, tri, dva, jedna, o rok neskôr
oni budú dve, tri, štyri, tri, dva rokov.
Takže som mohol, rovnako ako ľahko n byť 10,000.
Teraz budem sedieť tu celkom chvíľu vstupu do staroby, ale to funguje.
>> Takže teraz sme niekde v pamäti majú celý rad veľkosti 10,000,
tak nakoniec 40.000 bajtov, pretože tam sú
štyri byty pre každú z týchto celých čísel.
Takže je tu rad veľkosť 10,000 kde môžeme
uložiť vek tých 10.000 ľudí.
Dobre.
Otázky týkajúce sa niečo z toho?
Jo.
Čo keď ste dal záporné číslo?
Pozrime sa, čo sa stane.
Takže v tomto konkrétnom číslom case-- ľudí v miestnosti, negatívneho.
Odmietol, že, pretože tu žijeme
k manipulácii s tým, že ak n je menšie ako jedna, že budeme znova pýtať.
Ak sa pokúsite vyhlásiť poľa negatívne veľkosti,
to všeobecne nefunguje.
>> Takže poďme skúsiť.
Poďme ignorovať hocičo hodnota sa vstup pre n
a len povedať, int veku od negatívnej jeden.
Uvidíme, či to vôbec zostavuje.
Nie som si istý.
Nie.
Takže veku je deklarovaný ako pole s negatívnym veľkosti.
Takže vopred uznáva poľa nemôže mať negatívny veľkosti a odmieta ju.
Teraz, keď sme nemali zachádzať Tento Do-while správne,
ak sme neboli kontrolu ak n je menšie ako 1--
Povedzme, že práve ani to mať vôbec
a namiesto toho sme sa len chytiť celé číslo.
Bez ohľadu na to, čo to je celé číslo, prehlasujeme pole tejto veľkosti.
>> Takže kompilátor nemôže možno teraz sťažujú.
Ak by som zostaviť tohle-- takže nemôže sťažovať,
pretože to nemôže vedieť, že som chystá vstúpiť záporné číslo,
ktoré by mohli byť neplatné.
Pre všetkých to vie, možno zadajte kladné číslo,
čo je úplne v poriadku.
Tak som si predstaviť, keď som zadať záporné 1 ľudia v miestnosti, segmentácia chybu.
>> Tak ok.
Takže poďme sa pridať tento späť len aby to, čo to pôvodne bolo.
Tak, aby vekové kategórie.
A teraz, keď chcem skúsiť Negatívny age-- Takže poďme
hovoria, že päť ľudí v miestnosti.
Age of osoba číslo jedna je negatívny 4, človek troch
je nula, človek three-- OK.
Takže tu, o rok neskôr, osoba číslo z nich bude negatívne, 3 rokov.
Takže asi nemá zmysel.
Ale to je len preto, že hľadáte na kód všetko robíme
žiada GetInt.
>> Teraz, keď sme sa mal Funkcie GetPositiveInt
alebo sme proste len urobil druh rovnakého cyklu while tam dole,
potom by to fungovať úplne v poriadku.
Ale v tomto konkrétnom prípad, my jednoducho nemajú
stalo, že sa manipulácia záporné hodnoty.
Akékoľvek ďalšie otázky týkajúce sa polí?
OK.
>> Takže sme teraz videli polia.
A budeme musieť použiť to pre argumenty príkazového riadku.
Takže problém nastaviť two-- Viem, že mnohí z vás
by mohlo byť stále pracuje na probléme set človek, ale problém nastaviť dve sa blíži.
V problém nastaviť dve, budete je potrebné zaoberať s reťazcami, poľami,
a argumenty príkazového riadku.
>> Takže aké sú argumenty príkazového riadku?
Teraz môžete vidieť tu dole malý teaser presne to, čo je
bude deje.
Vidíme int main, INC argc, string argv zátvorkách.
Takže najprv poďme sa snaží interpretovať čo to sa snaží povedať.
A teraz, OK.
>> Takže na príkazovom riadku, mali by ste byť zvyknúť si na niektoré z týchto príkazov
teraz, a pravdepodobne ste spustenie CD v termináli pred.
Takže keď povieme cd pset1, viete, že by
sa mení do adresára pset1.
>> Teraz si všimnite, že ste nikdy napísal program, ako je tento predtým.
Každý program, ktorý ste napísali, by ste spustiť, povedzme, bodka lomítko Mario,
dot lomítko chamtivý, a potom ju Možno výzvu pre vstup.
No, to nie je to, čo Zmeňte adresár robí.
Pri spustení cd, nie je potom hovorí, ktoré adresáre chcete cd do?
Namiesto toho, stačí povedať, cd pset1, a to len ide do adresára pset1.
>> Takže podobne máme ďalšie príklady.
aby ahoj.
Pri spustení vykonať, nie je potom hovorí, program, ktorý by ste chceli robiť?
Stačí povedať, u príkazový riadok, aby ahoj.
>> Move je ďalším príkladom.
Ten sme sa pohybom mario.c súboru o jednu úroveň.
Takže teraz vieme, že s týmto príkladom Sme naozaj okolo dva argumenty.
Tam je mario.c ako prvý argument, a dot dot je druhý argument.
A potom, keď spustiť, aby vás, vidieť, že naozaj dlhú príkaz line--
že naozaj dlho povel tlačený na príkazovom riadku.
Tak dlho command-- tento je len kúsok časť,
ale teraz máme tri argumenty príkazového riadku.
Dot pomlčka nula, ahoj, a hello.c.
>> Tak to sú príkazového riadku argumenty, argumenty
že ste okolo u príkazového riadku, takže to
nemusí byť výzva pri spustení programu.
Bolo by to frustrujúce, keď pri ste spustili zvoniť to povedal: "OK,
ktorý program-- ktorý Súbor ste kompiláciu?
Hello.c.
Čo by ste vlajky chceli vstúpiť? pomlčka o.
Čo by si rád súbor byť nazývaný?
ahoj.
Nie, stačí spustiť rinčanie pomlčka o ahoj hello.c.
>> Takže sa obzrel na to.
Teraz argc-- argc je argument počíta.
Je to počet príkazového riadku Argumenty vstúpil na príkazovom riadku.
No, technicky argv-- tlačidlá v znamená vektor,
čo v podstate znamená, že pole.
Ale môžete ignorovať.
Argv-- máme reťazec argv, takže reťazec argv zátvorkách.
Takže to je ďalšia forma brackets ste ešte nevideli.
Takže sme videli držiak notácie, keď sme povedali,
ako, string s rovná Zamyla.
s konzola 0 pristupuje znak Z.
>> Tiež sme videli, keď držiaky sme si povedali, int veku bracketing 5.
Ten deklaroval poľa veľkosti 5.
Takže tu je verzia z konzoly sme ešte nevideli.
Takže tento druh reťazca argv, ktorý by bolo úplne oboznámení
že by to jednoducho byť reťazec.
Teraz zátvorkách že sa jedná o pole.
Takže string argv držiaky prostriedky že argv je pole reťazcov.
Teraz technicky reťazec je pole znakov.
Takže toto je teraz pole z poľa znakov.
Ale je to oveľa jednoduchšie premýšľať o tom, to len ako pole reťazcov.
>> Tak prečo by mohlo byť prázdne zátvorky?
Rovnako ako, prečo nemôžeme povedať, držiak 5, držiak n?
Jo.
Nevieme, koľko vstupy tam sú bude.
Takže ak sa pozrieme na zvonenie príklad, hovoríme zvoniť pomlčku o ahoj hello.c.
V tomto konkrétnom prípade, že sa stalo byť tri argumenty príkazového riadku.
A tak brackets-- uvidíme v druhej nebolo by to tri.
Technicky by to štyri.
Ale konzoly, že by sme povedzme, sú tri.
Ale teraz, keď sme sa pozreli na cestách mario.c dot dot, zátvorky
by sme chceli dať dva v nich.
>> A existuje veľa príkazov, ktoré majú rôzny počet príkazového riadku
argumenty.
Takže to, čo táto verzia držiak notácie označuje
je to, že argv je pole reťazcov.
Ale my nevieme, koľko reťazce sú v tomto poli.
A ako potom viete, ako mnoho reťazcov sú v poli?
To je celý zmysel argc.
argc nám hovorí, ako dlho argv je.
>> Takže posledná vec, ktorú by ste mali mať na myseľ je to, technicky,
príkaz sám sa počíta ako jeden o argumenty príkazového riadka.
Takže cd pset1, sú tam dva argumenty príkazového riadku.
Program sám o sebe, CD, a potom skutočný argument, časť, pset1.
Akýkoľvek program, ktorý ste napísali tak ďaleko bolo jednou z príkazového riadku argument-- bodku
lomítko Mario.
To je jediný argument príkazového riadka.
>> Takže teraz pozrieme na zazvonením pomlčka o ahoj hello.c.
Takže to, čo je argc?
4.
Takže argc je 4.
Clang, takže argv držiak 0 rinčanie.
argv držiak 1 je pomlčka 0.
argv držiak 2 je ahoj, a argv konzola 3 je hello.c.
Ok, tak otázky týkajúce sa to, a potom sa pozrite sa na niektoré programové príklady.
>> OK.
Takže sa budeme sa pozrieť na hello3.c.
Tak to by malo byť známy z jeden z prvých príkladov c
sme mali kde by sme len povedať, ahoj svet, ale teraz je to všeobecnejší.
Tak tu hovoríme ahoj % S spätné lomítko n argv držiak 1.
Notice-- tak až do tohto bodu, to je aký súbor má šablóna vyzerá.
Mal som int main (void), a potom by som niečo v hlavnej funkcie.
Teraz miesto, hneď začneme zaoberať s argumentmi príkazového riadku,
musíme štátu A rôzna forma main.
>> Takže pri pohľade na hello3 Opäť platí, že hlavné deje
aby sa dva argumenty now-- int argc, počet argumenty príkazového riadku,
a string argv zátvorke, skutočná reťazca zadaný na príkazovom riadku.
Takže som to nezmení šablóna, aby odrážal túto skutočnosť.
Teraz, kedykoľvek budete písať programu, ak nemáte
treba žiadneho osobitného príkazového riadku argumenty, potom stačí použiť int main (void).
Ale teraz, keď píšete Argument programy príkazového riadka, ktoré
budete robiť o probléme nastaviť two-- takže teraz, že ste beží
programy, ktoré potrebujú, aby sa argumenty príkazového riadku,
musíte mať hlavný tohto formulára.
>> Takže here-- to je veľká použitie o argument príkazového riadku.
Takže tlače argv 1.
OK, takže poďme kompilovať a spustiť tento program.
Urobiť hello3.
Zostavuje.
Dot lomítko hello3.
A povedzme, "Rob."
Dobrý deň, Rob.
Keď poviem, "ahoj Mária:" Ahoj Maria.
Dobrý deň, Maria.
Hannah stále hovorí, "ahoj Maria, "pretože ja nie som
robiť niečo s naším argv 2.
Argv 2 teraz bude "Hannah."
Argc by byť 3.
Čo keď som to urobil?
Tak ahoj null.
>> On stručne dotkol na skutočnosti, že technicky, GetString
môže vrátiť null, ale budeme dostať oveľa viac do toho, čo null v skutočnosti je.
Ale vezmite si ju ako vec Skutočnosť, že nie je všeobecne zlá.
Urobili sme niečo zlé, ak je to tlač "ahoj null."
A dôvod, prečo sme to urobili niečo zle je-- dobre,
keď som bežal dot lomka hello3, argc bol 1.
Tak, že znamená, že dĺžka argv bola 1.
Ak je pole je o dĺžke 1, jedinou platnou index je nulová.
A tak tu argv 1 je vonku rozsah tohto poľa.
Bolo to podobné ako predtým, keď som sa snažil pre uloženie 6 mimo konca poľa.
Takže sa snažím pristupovať niečo mimo argv počíta,
a my sme stále null.
>> Takže lepšia verzia to, zlepšenie,
je výslovne kontrola argc.
Takže ak argc rovná 2, to znamená, že sme bežali niečo ako bodka lomítko hello3 Rob.
A to bude tlačiť "ahoj Rob."
Ak argc nerovná 2, potom je to len bude
ignorovať, čo ste dal Na argument príkazového riadku
ako argumenty príkazového riadku.
Alebo ak ste si ho nedali vôbec žiadne, je to len tak ignorovať to a len povedať,
"Ahoj."
>> Takže zostavovanie toto.
Urobiť hello4.
A beh hello4.
Running to takto, čo by malo byť vytlačené?
"Ahoj."
Ahoj.
Čo hello4 Rob?
"Dobrý deň, Rob."
A konečne, ahoj Rob Maria je len "ahoj Ty" znovu,
preto, že ste sa naozaj vstúpiť niečo, čo sa očakáva.
Zadali ste viac mien , Než to mohol zvládnuť,
tak to proste prevezme ahoj ste správanie.
Takže otázky o toto?
Alebo argumenty príkazového riadku?
>> OK, takže pri pohľade na pár ďalších príkladov použitia
príkazového riadku arguments-- najprv sme argv pomlčka 1 bod c.
Takže komentáre dať preč, čo tento program by mal robiť.
Nevšimnúť now-- to pre sláčiky, to presne zodpovedá vzoru
Som hovoril predtým.
Práve sme sa stalo, že sa za použitia argc miesto n.
Teraz argc je naozaj n.
Je to dĺžka argv pole.
Takže sú iterácie cez argv array printf-ing každú argv hodnotu.
>> Takže keď som sa, aby to.
Vykonajte argv 1.
To kompiluje.
Dot lomítko argv 1.
Práve beží to, ho postery dot lomítko argv 1
pretože to bol jediný príkazového riadku argument-- názov programu.
Tam bude vždy na least-- argc nesmie byť menší ako jedna,
pretože tam bude vždy aspoň je názov programu spustiť.
Takže argv 1 Rob bude tlačiť argv 1 a potom sa na novom riadku "Rob."
>> Takže v prvom iteráciu tejto slučky, i je 0.
Argv 0 je názov programu.
Dot lomítko argv 1.
A potom argv 1 je môj prvý argument príkazového riadku, ktorý je Rob.
V tomto bode, sme sa rovnajú argc.
Lámeme zo slučky a budeme hotoví.
Takže to bude fungovať pre ľubovoľný Počet argumenty príkazového riadku.
Všimnite si, že vytlačí argv 0, argv 1, argv 2, argv 3, argv 4.
A nie je argv 5.
argc je rovné 5 ,.
Takže na argc-- na i rovná 5, lámeme zo slučky.
OK.
Takže otázky, týkajúce že predtým, než sme pozrite sa na viac komplexné príklad?
>> Takže argv 2.
Dobre.
Takže sme stále tlač príkazového riadku argumenty.
Ale teraz musíme všimnúť vnorené pre slučku.
Takže to, čo sa to robí?
Takže prvý slučka robí presne to, čo robil predtým.
Sme stále viac ako cyklovanie každý argument príkazového riadku,
ale teraz tento druhý loop-- máme Tiež videl niečo také predtým.
Keď bol iterácie nad Zamyla vytlačiť Z-A-M-Y-L-A.
Takže to druhá slučka pre int j rovná 0, n sa rovná strlen z argv držiaka i.
>> Takže poďme sa najprv, že pre the-- poďme prejsť.
Poďme si, že to, čo by počítač robiť, keď som bežal tento program ako práve dot
lomka argv pomlčka 2.
Takže keď som bežal tento kód, a potom argc bude rovný 1.
A string argv-- existuje iba bude jedným index v argv,
a že to bude rovnať dot lomítko argv 2-- názov programu.
>> OK, tak teraz som sa rovná 0, aj menej ako 1, i a plus pre int j = 0,
n sa rovná strlen z argv držiaka 0, tak v Prvá iterácia tejto slučky. argv
Držiak 0 bodka lomka argv 2.
Takže to, čo je dĺžka tohto reťazca?
No, dot lomítko a-R-G-V pomlčka 2.
Tak strlen toho bude 8.
Tak j rovná 0, n sa rovná 8.
Tak dlho, ako j je menší ako 8, j ++.
A s tým budeme mať tlač jeden znak, ktorý
je argv držiak aj bracketing j.
>> Takže jediný i je nula.
Stále len mať jeden argument príkazového riadka.
V tejto prvej iterácii z cyklu for, my sme
Bude tlač argv držiak 0 držiak 0.
A potom j sa chystá zvýšiť.
A ideme do tlače argv držiak 0 držiak 1.
A potom argv držiak 0 držiak 2.
>> Tak toto je naša prvá stretnutie multi-rozmerné pole.
Pamätajte si, že som povedal predtým, že argv je technicky
rad pole znakov.
Tak tu, keď som povedal niečo ako string s rovná argv držiak i,
a potom som povedal, s držiak j, to by bolo dosiahnutie to isté.
Teraz, keď ste videl s držiak j.
To je len prístup k j-teho charakter tohto reťazca.
Takže s tým, sme sa dostať to j-tý charakter i-teho argv.
>> Takže to, čo by mal tento nakoniec výstup?
Urobte argv 2.
To kompiluje.
Dot lomítko argv 2.
"Rob Maria Hannah," a daj nám nejaký priestor.
Takže vidíme, že je to výstupu bodka na samostatnom riadku a lomka
na vlastné čiarou a na vlastnom riadku.
Je vytlačenie každý individuálny charakter
každý argument príkazového riadka.
A potom sa medzi nimi, vďaka tejto novej linky
sme tlač tu dole, v medzi nimi to bude tlačiť nový riadok.
>> Takže je to podobné predchádzajúca argv pomlčka 1,
ktorý tlačený každý argument príkazového riadku,
ale teraz sme tlač príkazového riadku argumenty
a potom iteráciu každý charakter každého argument príkazového riadku
aby si tento výstup.
OK?
Takže otázky o toto?
>> Jedna vec k poznámke je, že príkazového riadku arguments--
tak oni sú oddelené medzerami, ako Vás by prirodzene očakávať, že budú.
Takže reťazec môže mať medzery v ňom.
Nie je to výborný dôležité, ale ak ja Chcel tretí argument príkazového riadku
mať miesto v ňom, potom som Dalo by sa povedať niečo také.
OK?
Tak to teraz ešte má len tri príkazového riadku arguments-- dobre 4.
Dot lomka argv pomlčka 2, Rob, Maria, a Hannah Bloomberg.
OK.
Otázky na to?
>> Na tom nie je nič zvláštne o kozmickom charakteru.
Proste sa to stane, že je, že príkazového riadku zaobchádza znak medzery
ako ste oddeliť jednotlivé argument.
Dobre.
Takže Problém set two-- budete mať
pri pohľade na tajomstvo-kľúč kryptografie.
Tak, podobne ako v tomto príklade sme videli od A Christmas Story,
budete sa vykonávajú niektoré algoritmy, že vzhľadom správu,
budete mať možnosť zašifrovať tú správu
že len niekto s týmto tajomstvom kľúč, s tým dekodéra krúžkom,
by mal byť schopný dešifrovať.
>> Takže to je štandardné vydanie.
Budeš sa vykonávacie dve rôzne verzie.
Ak ste náhodou sa pozrieť u hacker Edition teraz,
ideme dať Ste reťazec takto,
čo predstavuje šifrované heslo.
Takže vaším cieľom je zistiť, čo je dešifrovať heslo.
Teraz je to vlastne Ako hesla sú uložené v mnohých počítačov,
a to len ukladá toto náhodný reťazec znakov.
Musíte prísť na to, ako sa dostať z tejto náhodné reťazec znakov
s tým, čo bolo pôvodné heslo.
>> A nakoniec, po tomto Problém set, mali by ste
byť schopný pochopiť, čo to znamená.
Tak sa dozviete, ako dešifrovať tento druh náhodný reťazec.
Rovnako tak, ak si pamätáte z týždňa 0, možno ste videli túto adresu URL.
A vy by ste mali byť schopní dešifrovať to nakoniec.
Tie nemusia byť šťastný, keď vás dešifrovať ju a kliknite na odkaz.
Dobre.
To je pre dnešok všetko.
Tak vidíte budúci týždeň!
>> [ELECTRONIC prehrávanie hudby]