[Powered by Google Translate] [Návod - Problém Set 2]
[Zamyla Chan - Harvard University]
[To je CS50. CS50.TV]
Dobrá. Ahoj, všetci, a vitajte na Walkthrough 2.
Po prvé, chcem ti pogratulovať pre dokončovacie PSet 1.
Viem, že by to mohlo byť trochu ťažké pre niektoré z vás,
mohla byť vaša prvý počítačový program, ktorý si napísal,
ale len na pamäti, že na konci tohto, keď sa pozriete späť na konci semestra,
budete vyzerať na PSet 1 a povieš: "Hej, som mohol urobiť, že za 5 minút."
Takže viem, a verím, že na konci tohto, budete určite nájdete PSet 1 celkom jednoduché.
Ale teraz je to obrovský úspech, a gratulujem k získaniu práce.
Teraz, aj krátka poznámka, ako sa dostaneme do mäsa návodu.
Ja len chcem, aby sa rýchlo na vedomie, že som niekedy nebude mať dostatok času
počas návody prejsť každý spôsob, ako robiť problému sadu
a skôr len možno sústrediť na 1 alebo 2 druhov implementácií,
spôsobmi, ktoré by ste mohli urobiť.
Ale to neznamená, že ste zakázané robiť to inak.
Tam sú často, ako u počítačovej vedy, početné spôsoby, ako robiť veci,
a tak rozhodne neváhajte použiť iný typ riešenia, ako som mohla prezentovať.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. Oddiel otázok - 1. Caesar - 2. Vigenere]
Dobrá. Takže problém nastaviť 2: Crypto je legrace jeden.
Opäť, s každým PSet začnete s časťou otázok
že sa to robí vo svojich oddieloch s účelovo výučby kolegami.
Nebudeme chodiť cez tieto cez návodu,
ale určite vám pomôžu dokončiť PSet.
Takže prvá časť problému súboru je Caesar.
A tak sa v Caesar niekto prejde vám kľúč s integer,
a budete šifrovať reťazec textu, ktoré poskytujú vám
a dať ich späť šifrované vec.
Ak niekto sledoval, A Christmas Story, je tu príklad, že.
Potom druhá časť problému sady je Vigenere,
ktorý je viac pokročilý šifrovací techniky.
A tak budeme zašifrovať nejaký text,
s výnimkou namiesto toho sa len jedným celé číslo, my vlastne bude enkódovat
s kľúčovým slovom, že užívateľ bude poskytovať nás.
Dobre, takže prvý nástroj v paneli nástrojov je dnes skutočne bude aktualizácia zariadenia.
Na diskusné panely by sme vidieť veci ako, "Prečo nie túto prácu?"
"Prečo nie Pošlite 50 prácu?"
a často riešenie je v skutočnosti len aktualizovať svoj prístroj.
A tak ak ste práve beží v okne terminálu vo vašom spotrebiče sudo yum-y -
to vlajka hovorí áno, aktualizujte všetko - aktualizácia,
potom sa váš spotrebič bude aktualizovať, pokiaľ nebolo treba.
A to nie je na škodu, keď ste už na najnovšiu verziu spotrebiča.
Potom to bude len povedať, žiadne nové aktualizácie k dispozícii a môžete pokračovať v práci ďalej.
Ale to je dobré urobiť ešte pri každom otvorení spotrebiča
pretože sme stále veľa -
niekedy, keď sme prišli do chrobáka - upevňovacie ju do prístroja.
Takže sa uistite, že máte najnovšiu verziu spotrebiče
a spustiť, že aktualizáciu tam.
Dobrá. Takže od tej doby máme čo do činenia s písmenami a mení, šifrovaním veci,
budeme naozaj chcieť, aby sa stal najlepší priatelia s našou ASCII tabuľky.
Tam sú početné tie on-line, ak zistíte, že. Možno dokonca vytvoriť svoj vlastný.
V podstate, s každým listom a každé číslo a každý charakter
je číslo s nimi,
, A tak je dobré, aby ich hodnoty ASCII vedľa skutočného listu.
To bude určite pomôže v problému sade.
Jedna vec, ktorá mi naozaj pomohlo v tomto probléme súboru bol skutočne vytlačiť,
a ako som sa prechádzal, by som skutočne kresliť na to,
písať, "Ak to má ísť do tam, a potom ..."
Druh čerpať na neho a označiť ju, stanú najlepšími priateľmi s Vašou ASCII tabuľky.
Potom máme ešte niekoľko ďalších nástrojov, ktoré máme k dispozícii.
Tentoraz miesto skutočne by užívateľovi zobrazil výzvu pre všetky ich vstupu
budeme robiť kombináciu.
Budeme výzvu je pre nejaký vstup,
ale my sme tiež bude používať len argumenty príkazového riadku.
Takže keď beží svoj program, zvyčajne hovoríte. / Hello, napríklad,
ak váš program bol hello.c.
Ale tentoraz nie len hovoriť, že môžu dať slová, argumenty potom.
A tak budeme používať, čo sa im odovzdať k nám ako ich vstup tiež,
tak dojemné, ako len výzvou pre celé číslo, ale aj pomocou argumentov príkazového riadku.
A potom pôjdeme do polí a reťazcov, ktoré budeme používať veľa tiež.
Tu je len príklad 1 mini ASCII tabuľky.
Ako som už povedal, každý list zodpovedá počtu,
a tak sa zoznámiť s tým. To sa bude hodiť.
A neskôr, keď sme začať robiť nejaké ASCIIMath zaoberajúce sa číslami -
sčítanie, odčítanie je - potom určite dobré odkazovať sa na tento graf.
Takže tu je príklad kódu Caesar - niečo, čo ste možno hrali s
Je to len kolesá. V podstate je vonkajšie abeceda, a potom je vnútorná abeceda.
Takže tu je príklad kódu Caesar, ale s kľúčom od 0.
V podstate, je zarovnaný s, B je zladená s B, celú cestu až do Z.
Ale potom, že sme chceli kľúč 3, napríklad.
Potom by sme otočiť vnútorné koleso tak, aby sa vyrovnáva s D, atď
A tak je to v podstate to, čo budeme robiť.
Nemáme kolesá, ale to, čo budeme robiť, je, aby náš program
druh posunúť abecedu spolu s nami určitú čísel.
Tak ako som povedal predtým, budeme sa zaoberať argumentmi príkazového riadku
, Ako aj získanie celé číslo.
Takže tak, že užívateľ bude spustite Caesar programu je samozrejmosťou. / Caesar
a zadaním čísla za to.
A toto číslo predstavuje kľúč, radenie,
koľkokrát budete sa otáčaním vnútorné koleso vášho kódu Caesar.
A tak vidíte tu príklad.
Ak sme vstúpili do písmen od A do L na našom šifrou Caesar,
potom by vstup D bodom O, pretože to je každý list posunula 3 krát,
rovnako ako na príklad kolesá, ktoré som vám ukázal.
Takže, ak ste zadali, napríklad, to je CS50!
potom by tiež presunúť všetky písmená.
A to je dôležitá vec, ako Caesar a Vigenère
je to, že budeme preskočiť nejaké non-listy.
Takže žiadne medzery, znaky, atď, čísla, budeme držať je rovnaký.
Sme ešte len vo chvíli, posunúť písmená v tomto prípade.
Takže ako vidíte na kolesá, máme iba písmená máme k dispozícii,
takže sme len chcete posunúť písmená a šifrovanie listy.
Takže prvá vec robiť, ste videli, že využitie pre Caesara v problému nastavenia 2
je spustiť Caesara a zadajte číslo, ak ho spustíte v termináli.
Takže to, čo potrebujete urobiť, je nejako dostať, že kľúč a prístup.
A tak chceme nejako vidieť, že to bude druhý argument príkazového riadku.
Prvý z nich bude. / Caesar, a ten budúci bude kľúčom číslo.
Takže ako sme mali int main (void) a vykonajte naše C programy.
Budeme Zlúpnite vrstvu trochu
a skutočne vidieť, že namiesto toho, aby odovzdávanie v prázdne na našu hlavnou funkciou
sme vlastne zaoberajú 2 parametre.
Máme int argc názvom a potom pole reťazcov nazýva ArGV.
Takže argc je celé číslo,
a predstavuje počet argumentov zaslaných do svojho programu.
A potom ArGV je vlastne zoznam odovzdaných argumentov.
Všetky argumenty sú reťazce, a tak ArGV predstavuje pole, zoznam, reťazcov.
Poďme sa baviť o matice trochu.
Pole sú v podstate nová dátová štruktúra.
Máme ints, sme sa zdvojnásobí, máme reťazca, a teraz máme pole.
Polia sú dátové štruktúry, ktoré môžu obsahovať viac hodnôt rovnakého typu,
Takže v podstate, zoznam, čo typ chcete.
V podstate, ak ste chceli zoznam celých čísel všetko v 1 premennej,
potom by ste vytvoriť novú premennú, ktorá bola z poľa typu int.
Takže polia sú nulové indexované, čo znamená, že prvý prvok poľa je na indexe 0.
Ak je pole dĺžky 4, ako v tomto príklade, potom sa vaše posledný prvok bude na indexe 3,
ktorý je 4-1.
Takže ak chcete vytvoriť pole, by ste niečo také.
Povedzme, že ste chceli dvojaký poľa.
To platí pre všetky typy dátového typu, hoci.
Takže povedať, chcete dvojaký poľa. Povedzme, že chcete nazývať schránky.
Rovnako ako by ste inicializovať iný dvojníka,
by ste povedal double a potom meno, ale tentoraz sme dali hranaté zátvorky,
a potom číslo bude dĺžka poľa.
Všimnite si, že v poliach nemôžeme nikdy zmeniť dĺžku,
takže vždy budete mať k definovaniu a zvoliť, koľko políčok,
koľko hodnôt vaše pole bude držať.
Takže nastaviť rôzne hodnoty vo vašom poli, budete používať tento nasledujúci syntax,
ako vidíte na snímke.
Máte schránka index 0 bude nastavená na 1,2,
schránky index 1 sada na 2,4, atď
Takže teraz, že sme preskúmať pole trochu, poďme späť k argc a ArGV.
Vieme, že ArGV je teraz pole reťazcov.
Takže keď používateľ prechádza - hovoria, že používate program -
hovoria. / hello David Malan,
čo program bude robiť pre vás už skutočne prísť s tým, čo argc a ArGV je.
Takže si nemusíte robiť starosti, že.
Argc v tomto prípade by bola 3, pretože to vidí 3 rôzne slov oddelených medzerami.
A potom sa pole v tomto prípade, by prvý index je. / Hello,
budúci David, budúci Malan.
Má niekto vidieť hneď, aký je vzťah medzi ArGV,
poľa, a argc je?
Jo. Dostaneme sa do toho v príklade v args.c.
Poďme sa pozrieť, či sa nám podarí využiť vzťahu medzi 2.
Tu môžete zistiť, že v prístroji predvolené aplikácie
otvoriť. C súbory je niekedy Emacs.
Ale chceme rokovať s gedit, takže to, čo môžete urobiť, je môžete kliknúť pravým tlačidlom na súbor C,
prejsť na Vlastnosti, Otvoriť, a potom zvoľte gedit, Nastaviť ako predvolený,
a teraz váš program by mal otvoriť v gedit miesto Emacs.
Perfect.
Tak tu mám program, ktorý chcem vytlačiť každý argument príkazového riadku.
Takže bez ohľadu na užívateľské vstupy, chcem hlavne vrátiť späť k nim na nový riadok.
Takže to, čo je štruktúra, ktorá môžeme použiť k iterácii niečo -
niečo, čo ste pravdepodobne zvyknutí vo svojej PSet 1?
Ak chcete prejsť nastavenom počte vecí? >> [Študent] Pre slučky.
Pre slučky. Presne tak. Takže začnime s tým, pre sláčiky.
Máme pre int i = 0. Poďme začať s štandardné inicializácia premennej.
Chystám sa opustiť podmienku pre súbor a potom povedať, že som + +, bude robiť veci tam.
Dobrá.
Tak spomínal na ArGV, ak ArGV je zoznam argumentov zaslaných do programu
a argc je počet argumentov v programe,
potom to znamená, že je v podstate argc dĺžka ArGV, doprava,
pretože sa bude čo najviac argumentov ako hodnotu argc.
Takže ak chceme iteráciu každý element v ArGV,
budeme chcieť zakaždým prístup k premennej v ArGV v danom indexe.
To môže byť reprezentovaný s tým, že jo?
Táto premenná tu predstavuje určitý reťazec v tomto prípade
pretože je to string array - konkrétne reťazec v danú indexu.
Čo chceme robiť, v tomto prípade chceme vytlačiť, takže povedzme printf.
A teraz ArGV je reťazec, tak chceme, aby to symbol tam.
Chceme nový riadok len, aby to vyzeralo dobre.
Takže tu máme pre slučku. Nemáme stav ešte.
Tak som začína na 0, a potom zakaždým, keď to bude tlačiť daný reťazec
V tomto konkrétnom indexu v poli.
Takže keď chceme prestať tlačiť z prvkov v poli?
Keď sme hotoví, nie? Keď sme došli na koniec poľa.
Takže nechceme prekročiť okolo dĺžka poľa,
a my už vieme, že to nie je potrebné, aby skutočne aktívne zistiť, čo dĺžka ArGV je
pretože je to rovnako na nás, a čo je to? Argc. Presne tak.
Takže chceme robiť tento proces argc niekoľkokrát.
Nie som v pravom adresári.
Dobrá.
Teraz poďme urobiť args. Žiadne chyby, čo je skvelé.
Takže poďme stačí spustiť ARGUMENTY.
Čo sa to bude vracať k nám? Je to len tak vytlačiť ju späť.
"Tie vložené ARGUMENTY do programu, ja dám ju späť k vám."
Takže povedzme, že chceme povedať ARGUMENTY potom foo bar.
Takže potom sa vytlačí ju späť k nám. Všetko v poriadku?
Takže tam je príkladom toho, ako možno použiť argc a ArGV
vedomie, že argc predstavuje dĺžku ArGV.
Uistite sa, že ste to nikdy s polí prístupom jedna za dĺžku poľa
pretože C určite kričať na vás.
Získate niečo ako Segmentation fault,
ktorý nie je nikdy legrace, v podstate hovorí, že sa snažíte o prístup niečo
že neexistuje, nepatrí vám.
Takže sa uistite, a to najmä s nulovou indexovanie, nechceme, aby -
Ako napríklad, keď sa majú rad dĺžky 4,
že index poľa 4 neexistuje, pretože začíname na 0, v nulového indexu.
To sa stane druhou prirodzenosťou, rovnako ako pre vedenie, keď začneme na 0.
Takže len na to myslieť.
Nechcete, aby niekedy prístup index poľa, ktorá je mimo váš dosah.
Takže môžeme vidieť teraz, ako môžeme druh prístupu
argumenty príkazového riadku, ktoré sú odovzdané palcov
Ale ako si videl reťazec, ArGV je vlastne reťazec poľa.
Takže to vlastne nie je číslo ešte, ale Caesar chceme zaoberať s celými číslami.
Našťastie, tam je funkcia vytvorená pre nás, že môže skutočne previesť reťazec na celé číslo.
Tiež tu sa nejedná o užívateľského vstupu, kde sme vyzvať ich,
pre vstup tu pre kľúč, takže nemôžeme vlastne reprompt a povedať,
"Ach, daj mi ďalšie celé číslo, teda ak to nie je platné."
Ale my stále potrebujeme skontrolovať správne použitie.
Caesar sú povolené iba prejsť v 1 rade,
a preto majú spustiť. / Caesar a potom vám dať číslo.
Takže argc musia byť určité množstvo.
Aké číslo by to malo byť, ak majú prejsť Vám. / Caesar a potom kľúč?
Čo je argc? >> [Študent] 2. Dva >>. Presne tak.
Takže chcete, aby sa ubezpečil, že argc je 2.
Inak ste v podstate odmietajú spustiť program.
V hlavnej, že je to funkcia, ktorá hovorí, že int main,
takže potom sme vždy v dobrom 0 praxi návrate na konci úspešného programu.
Takže ak, povedzme, že vám 3 argumenty príkazového riadku miesto 2
alebo vám 1, napríklad, potom to, čo budete robiť, je budete chcieť skontrolovať, že
a potom sa vrátiť 1 hovorí, nie, nemôžem pokračovať s týmto programom.
[Študent] Nemôže byť miesta v texte. >> Prepáčte?
[Študent] Nemôže byť priestor v texte, ktorý sa snažíte šifrovanie.
Ah!
Pokiaľ ide o text, ktorý sa snažíme pre šifrovanie, ktoré skutočne príde neskôr
keď nám tento text.
Takže teraz sme len prijímať ako riadiace argumenty skutočný počet,
Skutočný posun pre šifrovanie Caesar.
[Študent] Prečo potrebujete 2 na rozdiel od púhych 1 argc? Tam je určite 1 číslo.
Právo. Dôvodom, prečo potrebujeme 2 pre argc namiesto 1
je, že pri spustení programu a hovoriť. / caesar alebo. / hello,
skutočne počíta ako argument príkazového riadku.
Takže, že už zaberá 1, a tak potom sme zadaním 1 prístelka.
Takže ste vlastne zadanie reťazec v argumente príkazového riadku.
Čo chcete urobiť, pre Caesara chceme zaoberať celé číslo,
takže môžete použiť túto funkciu atoi.
A v podstate, odovzdáte ho v reťazci, a potom sa vráti späť celé číslo
ak je to možné, aby sa tento reťazec na celé číslo.
Teraz si spomenúť, kedy máme čo do činenia s printf alebo GetString, podobné veci,
zahrnieme knižnice, ktoré sú špecifické pre nás.
Takže na začiatku sme začať s hash tagom štandardné I / O,. H, niečo také.
No, atoi nie je v jednom z týchto knižníc,
takže to, čo musíme urobiť, je, že sme o právo knižnicu za to.
Takže pripomenúť späť na Walkthrough 1, kde som sa jednalo o ručné funkciu.
Zadáte muža vo vašom terminálu a potom nasleduje názov funkcie.
A tak, aby prinesie až celý zoznam jeho použitie,
ale rovnako to bude vychovávať, ktoré knižnica, ktorá patrí.
Tak som nechám na vás použiť manuálne funkciu atoi
a zistiť, v ktorej knižnici je potrebné zahrnúť, aby mohli používať atoi funkciu.
Takže máme kľúč a teraz to príde k získaniu obyčajný text,
a tak, aby skutočne bude vstup užívateľa, kde sa výzva.
Sme sa zaoberali GetInt a GetFloat, a tak v rovnakom duchu
budeme rokovať s GetString.
Ale v tomto prípade nepotrebujeme robiť žiadne robiť, kým alebo while pre kontrolu.
GetString určite nám reťazec,
a budeme šifrovať, čo používateľ zadá nás.
Takže si môžete predpokladať, že všetky z týchto reťazcov užívateľských zadaných sú správne.
Great.
Takže akonáhle máte kľúč, a akonáhle máte text,
Teraz to, čo zostalo, je potrebné zašifrovať holý text.
Len rýchlo pokryť viac než žargón, holý text je to, čo používateľ zadá vám,
a ciphertext je to, čo sa k nim vracať.
Takže reťazca, aby mohli prejsť skutočne listu listom
pretože musíme posunúť každý list,
Chápeme, že reťazce, ak sme trochu kôry zadnej vrstvy,
vidíme, že sú naozaj len zoznam znakov.
Jeden prichádza po druhej.
A tak môžeme liečiť reťazce ako polia, pretože sú pole znakov.
Takže povedať, že máte reťazec s názvom text,
av rámci tejto premennej text je uložený To je CS50.
Potom textu na indexe 0 by byť veľké T, by index 1 je h, atď
A potom s poľom, v argc napríklad v args.c,
sme videli, že sme museli iterácii poľa
a tak sme museli prechádzať od i = 0 až do i je menšia než dĺžka.
Takže potrebujeme nejaký spôsob, ako prísť na to, aká je dĺžka nášho reťazca je
ak budeme určiť iteráciou cez to.
Našťastie znova, tam je funkcia tam pre nás, aj keď neskôr v CS50
budete určite schopní realizovať a vyrobiť si vlastnú funkciu
ktoré môžu vypočítať dĺžku reťazca.
Ale pre teraz budeme používať dĺžku reťazca, takže strlen.
Odovzdáte v reťazci, a potom sa vráti vám int predstavujúce dĺžku vášho reťazca.
Poďme sa pozrieť na príklad, ako by sme mohli byť schopní iteráciu každý znak v reťazci
a urobiť niečo s tým.
To, čo chcem urobiť, je iterácii každý znak reťazca,
a to, čo chceme urobiť, je, že sme tlač späť každý znak 1 od 1
okrem pridáme niečo vedľa nej.
Takže začnime s tým, pre sláčiky. Int i = 0.
Budeme ponechať priestor pre stav.
Chceme opakovať, ako sa dostaneme na koniec reťazca, nie?
Tak čo funkcia nám dáva dĺžku reťazca?
[Nepočuteľné Študent odpoveď]
To je dĺžka argumentov príkazového riadku.
Ale pre reťazec chceme používať funkcie, ktoré nám dáva dĺžku reťazca.
Tak to je dĺžka reťazca.
A potom sa budete musieť prejsť v reťazci k nej.
Je potrebné, aby čo reťazec je potrebné k výpočtu dĺžky.
Takže v tomto prípade máme do činenia s string s
Great.
Takže to, čo chceme robiť, poďme printf.
Teraz, chceme rokovať s postavami. Chceme vytlačiť každý individuálny charakter.
Ak chcete, aby vytlačiť float, mali by ste použiť zástupný symbol ako% f
S int, mali by ste použiť% d
A tak podobne, s charakterom použiť% c povedať, že som bude tlač znaku
, Ktorý je uložený vo vnútri premenné.
Takže máme toto, a dodajme obdobie a priestor k nemu.
Znak, ktorý sme používate?
Budeme používať bez ohľadu na charakter sme na reťazce.
Takže budeme používať niečo s reťazcami,
ale chceme, aby sa prístup k určitej znak tam.
Takže ak reťazec je len pole, tak ako máme pristupovať prvky polí?
Máme tie hranaté zátvorky, a potom sme dali index tam.
Takže máme hranatých zátvoriek. Naša index v tomto prípade stačí používať i Presne tak.
Takže tu hovoríme my bude tlačiť znak nasledovaný bodkou a medzerou,
a tento znak bude i-ty list v našom reťazca s
Ja som jednoducho ísť tou výnimkou, že. Dobre.
Teraz budem bežať dĺžku reťazca.
Takže sme mali reťazec s názvom OMG, a teraz je to ešte viac zdôraznil.
Podobne, povedzme, že skutočne chcú dostať reťazec od užívateľa.
Ako môžeme urobiť?
Pred, ako sa dostaneme int?
Povedali sme, že GetInt, že jo? Ale to nie je int, tak sa poďme GetString.
Poďme urobiť dĺžku reťazca. Tu sme nezadali konkrétne výzvy.
Tak ja neviem.
Chystám sa dať svoje meno sem, a tak potom to môžem robiť jednu z tých vecí
kde som priradiť slovo pre každé písmeno alebo niečo také. Cool.
Tak to je dĺžka reťazca.
Takže sme späť k Caesarovi.
Máme niekoľko nástrojov, ako by sme iterácii reťazec,
ako sme prístup každého jednotlivého prvku.
Takže teraz sa môžeme dostať späť do programu.
Ako som už spomenul predtým, v ASCII tabuľke, váš najlepší priateľ,
budete vidieť čísla, ktoré sú spojené s každým písmenom.
Tak tu že naše holý je, že som závrat!
Potom každý z týchto znakov bude mať číslo a ASCII hodnotu s ním spojené,
aj apostrof, dokonca aj priestor, a to aj výkričník,
takže budete chcieť mať na pamäti.
Takže povedať, náš kľúč, ktorý užívateľ zahrnuté do ich argument príkazového riadku je 6.
To znamená, že na prvé písmeno, ktoré je I, ktorá je reprezentovaná 73,
Ak sa chcete vrátiť k nim bez ohľadu na písmeno je reprezentované ASCII hodnotou 73 + 6.
V tomto prípade, že by bolo 79.
Teraz chceme ísť na ďalší znak.
Takže ďalší v indexe 1 holého textu bude apostrof.
Ale pamätajte si chceme len, aby zašifrovať listy.
Takže chceme, aby sa ubezpečil, že apostrof skutočne zostáva rovnaká,
že sa nemení od 39 do čohokoľvek 45 je.
Chceme, aby to ako apostrof.
Takže chceme pamätať iba zašifrovať písmená
preto, že chceme všetky ostatné symboly sa nezmení v našom programe.
Ďalšia vec, ktorá chceme, je zachovať písmen.
Takže keď máte veľké písmeno, malo by zostať ako veľká.
Lowercasuje by mala zostať ako malé písmená.
Takže niektoré užitočné funkcie, ktoré boli schopné sa vyrovnať len s šifrovaním listy
a udržať zachovanie kapitalizácii vecí
je isalpha, isupper, islower funkcie.
A tak to sú funkcie, ktoré vracajú vám boolovská.
V podstate, true alebo false. Je to veľká? Je to alfanumerický?
Je to list, v podstate.
Takže tu sú 3 príklady, ako by ste použiť túto funkciu.
V podstate, môžete otestovať, či hodnota vrátená pre Vás túto funkciu je pravdivé alebo nepravdivé
na základe tohto vstupu.
Buď nemajú zašifrovať niečo alebo šifrovaných, alebo sa uistite, že je to veľká, atď
[Študent] Mohol by si vysvetliť, tie trochu viac a ako ich používať? Jo >>, pre istotu.
Takže keď sa pozrieme späť, tu máme kapitál I, P?
Takže vieme, že som dostal O, pretože som + 6 je O.
Ale my chceme, aby sa ubezpečil, že O bude kapitál O.
Takže v podstate, že je tak trochu zmení naše vstup.
Takže nech už je to veľká, alebo nie vôľa druh zmeniť tak, že sme jej zaoberať.
Takže ak budeme používať isupper funkcie na danom indexe,
tak isupper ("I"), ktorá vráti pre nás skutočné, takže vieme, že je to horná.
Takže na základe toho, neskôr pôjdeme do vzorca
že budete používať k posunu veci Caesar,
takže potom v podstate, že to bude mierne líšiť vzorec, ak je to veľká
ako protichodný na malé písmená. Zmysel?
Jo. Žiadne starosti.
Hovoril som trochu o pridanie 6 na list, ktorý nie je úplne zmysel
okrem prípadov, keď sme trochu pochopili, že tieto znaky
sú trochu zameniteľné s celými číslami.
Čo robíme je, že sme spôsob použitia implicitné odliatku.
Pôjdeme do odlievacie trochu neskôr, kde budete mať hodnotu a dáte ho do iného typu
ako bol pôvodne.
Ale s týmto PSet budeme môcť trochu zameniteľne používajú znaky
a ich zodpovedajúce celočíselné hodnoty.
Takže ak si jednoducho obaliť postavu len s apostrofy,
potom budete môcť pracovať s ním s celými číslami, vyrovnať sa s ňou ako celé číslo.
Takže kapitál C sa vzťahuje k 67. Malá f sa týka 102.
Opäť platí, že ak chcete poznať tieto hodnoty, pozrite sa na ASCII tabuľky.
Tak poďme do niektorých príkladov, ako by ste mohli byť schopní odčítať a pridať,
ako môžete vlastne naozaj pracovať s týmito znakmi, používať zameniteľne.
Ja hovorím, že ASCIIMath bude výpočet pridanie znaku na celé číslo
a potom zobrazí výsledný charakter, rovnako ako výsledné ASCII hodnotu.
A tak tu hovorím - Dáme sa zaoberajú touto časťou neskôr -
ale v podstate, ja som povedal, že užívateľ by mal povedať, bežať ASCIIMath spolu s kľúčom,
a ja hovorím, že ten kľúč bude číslo
s ktorými budeme pridávať tento znak.
Tak tu si všimnúť, že od tej doby som náročný kľúč,
pretože som žiadal, aby Dávaš mi 1 vec,
Chcem len prijať. / Asciimath a kľúč.
Takže budem požadovať, aby argc je rovný 2.
Ak tomu tak nie je, potom budem vracať 1 a program sa ukončí.
Takže hovorím, nie je kľúč bude prvý argument na príkazovom riadku,
to bude druhý, a ako vidíte tu,
Budem sa to malo zmeniť na celé číslo.
Potom idem nastaviť znak byť r
Všimnite si, že typ premennej CHR je vlastne číslo.
Spôsob, akým som mohol použiť r ako celé číslo je ohraničením s týmito jednoduchými úvodzovkami.
Takže späť k nášmu printf vyhlásenie, kde máme vyhradené miesto pre znak
a potom zástupný symbol pre celé číslo,
charakter je reprezentovaný chr, a celé číslo je kľúč.
A potom sa budeme vo výsledku pridať 2 spolu.
Takže budeme pridávať r + bez ohľadu na kľúč,
a potom budeme tlačiť výsledok, ktorý.
Takže poďme sa asciimath. Je to aktuálne, tak sa poďme stačí spustiť asciimath.
Oh, ale vidieť, že nerobí nič, pretože sme nemali vlastne dať kľúč.
Takže keď som sa práve vrátil 1, naším hlavným funkcie, to sa práve vrátil späť k nám.
Takže poďme prejsť v kľúči. Niekto mi číslo. >> [Študent] 4.
4. Dobre.
Takže r zvýšil o 4 bude nám v, ktorá zodpovedá ASCII hodnotu 118.
Takže potom to trochu dáva zmysel, že -
Vlastne, môžem sa vás spýtať, čo si myslíte, že ASCII hodnota r, ak je r + 4 je 118?
Tak jo, r je 114.
Takže, keď sa pozriete na ASCII tabuľky a potom je nepochybné, že uvidíte, že r je zastúpená 114.
Takže teraz vieme, že môžeme pridať celé čísla znakov, sa to zdá celkom jednoduché.
Sme len tak pre iteráciu reťazec, ako sme videli na príklade pred.
Pozrieme sa, či je to list.
Ak je, potom budeme posúvať ju bez ohľadu na kľúč.
Docela jednoduché, okrem prípadov, keď sa dostanete do takhle,
zistíte, že z zastúpené 122, by potom vám iný charakter.
My vlastne chceme, aby ostali v našej abecedy, nie?
Takže musíme prísť na to, nejaký spôsob, ako druhu obalu okolo.
Keď sa dostanete múr a chcete zvýšiť o určitý počet,
nechcete ísť do za ASCII abecedy časti;
Chcete zabaliť späť celú cestu do A.
Ale majte na pamäti, že stále zachovať vec.
Tak s vedomím, že listy sa nemôže stať symbolmi
rovnako ako symboly sa nebude meniť tiež.
V poslednom PSet určite nemusel,
ale voľba bola pre implementáciu chamtivý PSet pomocou modul funkcie.
Ale teraz sme vlastne bude musieť použiť modul,
takže poďme na to trochu.
V podstate, keď máte x modulo y, ktorý vám dáva zvyšok x delené y.
Tu sú niektoré príklady tu. Máme 27% 15.
V podstate, keď si odpočítať 15 z 27 toľkokrát, koľkokrát je to možné, bez toho by sa negatívne
potom dostanete 12 ostali.
Takže to je niečo ako v matematickom kontexte, ale ako môžeme vlastne použiť?
Bude to byť užitočné pre našu wrapover.
Pre tento, povedzme, že som vás požiadal, aby ste všetci rozdeliť do 3 skupín.
Niekedy sa to v skupinách a niečo podobné.
Povedzme, že som povedal: "Dobre, chcem vám všetkým byť rozdelená do 3."
Ako by ste mohli urobiť, že?
[Nepočuteľné Študent odpoveď] Jo, presne tak. Odpočítať. Dobre.
Poďme vlastne robiť, že. Chcete začať?
[Študenti počítanie mimo] 1, 2, 3, 4.
Ale pamätajte si ... >> [Študent] Oh, prepáč.
To je naozaj dobrá pripomienka.
Hovoril ste, že 4, ale vlastne chceme vám povedať, 1, pretože chceme len 3 skupiny.
Takže, ako - Nie, to je naozaj dobrý príklad, pretože potom, ako môžete povedať, 1?
Aký je vzťah medzi 4 a 1?
No, 4 mod 3 je 1.
Takže ak budete pokračovať, mali by ste byť 2.
Takže máme 1, 2, 3, 1, 2.
Opäť, ty si vlastne 5. osoba. Ako viete, povedať 2 miesto 5?
Hovoríte, že 5 mod 3 je 2.
Chcem vidieť, koľko skupiny 3 ar zostalo, potom akom poradí am I.
A potom sa, ak sme pokračovali pozdĺž celej miestnosti,
potom by sme videli, že sme vždy skutočne používaných mod funkciu pre seba
na druh odpočítať.
To je viac druhov hmotného príkladom toho, ako môžete použiť modulo
pretože som si istý, že väčšina z nás pravdepodobne prešiel týmto procesom
kde sme museli odpočítať.
Akékoľvek otázky týkajúce sa modulo?
To bude dosť dôležité pochopiť koncepty tohto,
tak chcem, aby sa ubezpečil ste pochopili.
[Študent] Ak nie je zvyšok, to vám aktuálne číslo?
Ak jeden z prvých 3 z nich to urobil, bolo by to rovnako im, čo vlastne bol,
alebo by to byť rovnako im [nepočuteľné] >> To je dobrá otázka.
Ak nie je zvyšok na modulo - tak, že máte 6 mod 3 -
že vlastne dáva staré 0.
Budeme hovoriť o tom, že o niečo neskôr.
Ach jo, napríklad, 3. osoba - 3 mod 3 je vlastne 0, ale povedala 3.
Takže je to niečo ako vnútorný úlovok, napríklad,
ako v poriadku, ak je mod je 0 potom budem ako 3. osoba.
Ale dostaneme do druhu, ako by sme mohli chcieť rokovať s tými, 0 je neskôr.
Takže teraz sme si nejako mať spôsob mapovania múr na správnom listu.
Takže teraz sme prešli týchto príkladoch,
sme trochu vidieť, ako Caesar by mohlo fungovať.
Vidíte 2 abecedy a potom si na ne pozrieť radenie.
Tak poďme skúsiť a vyjadriť, že pokiaľ ide o vzorce.
Tento vzorec je vlastne podáva do spec,
ale poďme trochu pozrieť skrz to, čo každá premenná znamená.
Naša konečný výsledok bude ciphertext.
Tak to hovorí, že i-ty znak ciphertext
bude zodpovedať tej charakteru textu.
To dáva zmysel, pretože chceme, aby vždy čakajú tieto veci.
Tak to bude i-teho charakter šifrového plus K, ktorá je naším hlavným -
to dáva zmysel - a potom sme tento mod 26.
Spomínam si, keď sme mali múr
Nechceli sme sa dostať do charakteru, tak sme chceli, aby to mod
a druh obalu okolo abecedy.
Po múr by ste ísť, b, c, d, kým ste sa dostali na správne číslo.
Takže vieme, že zet, ak + 6, by nám f, pretože po zet prichádza, b, c, d, e, f
Tak spomeňme vieme určite, že múr + 6 sa bude dať nám f
V ASCII hodnôt, z je 122 a f je 102.
Takže musíme nájsť nejaký spôsob, ako robiť svoju Caesar vzorec nám 102
potom, čo vzal v 122.
Takže keď sme stačí použiť tento vzorec, je ('z' + 6)% 26, ktoré vlastne dáva vám 24
pretože 122 + 6 je 128, 128% 26 vám dáva 24 zvyšok.
Ale to nie je naozaj neznamená f To rozhodne nie je 102.
To tiež nie je 6. písmeno v abecede.
Tak samozrejme, musíme mať nejaký spôsob, ako štiepať to trochu.
Pokiaľ ide o pravidelné abecedy, vieme, že z je 26. písmeno a f je 6..
Ale my sme v informatike, takže budeme indexom 0.
Takže namiesto toho, aby z ich počet 26, budeme hovoriť, že je to číslo 25
pretože je 0.
Tak teraz poďme použiť tento vzorec.
Máme z zastúpená 25 + 6, ktorá vám dáva 31.
A 31 mod 26 vám dáva 5 ako zvyšok.
To je ideálne, pretože vieme, že f je 5. písmeno v abecede.
Ale to ešte nie je f, P? To ešte nie je 102.
Takže pre túto PSet, bude úlohou sa snaží zistiť vzťah
medzi konverzie medzi týmito ASCII hodnotami a abecedný register.
V podstate to, čo budete chcieť robiť, chcete začať s ASCII hodnotami,
ale potom chcete nejako preložiť do indexu abecedy
potom vypočítať, aké písmeno by malo byť - v podstate, čo jeho abecedný index je
z šifry charakteru - a potom prekladať, že späť do ASCII hodnoty.
Takže ak ste vytasiť svoj ASCII tabuľku, skúste a nájsť vzťahy medzi, povedzme, 102 a 5
alebo 122 a 25.
Dostali sme náš kľúč od argumentov príkazového riadku, sme dostali holý text,
sme zašifrovaný to.
Teraz všetko, čo zostáva urobiť, je vytlačiť.
Mohli by sme to niekoľko rôznych spôsobov.
To, čo sme mohli urobiť, je skutočne vytlačiť, ako sme ísť ďalej.
Ako sme iteráciu znaky v reťazci,
by sme mohli jednoducho len vytlačiť vpravo potom, keď sme spočítať.
Prípadne môže tiež uložiť do poľa a majú rad znakov
a na konci iterácii tejto celé pole a vytlačiť.
Takže máte niekoľko možností pre to.
A nezabudnite, že% c bude zástupný symbol pre tlač charakter.
Tak tu to máme Caesara, a teraz prejdeme k Vigenère,
ktorý je veľmi podobný Caesar, ale len o niečo zložitejšie.
Takže v podstate sa Vigenere ich budete sa prechádzať v kľúčové slovo.
Takže namiesto čísla, budete mať reťazec,
a tak, že sa to pôsobiť ako kľúčové slovo.
Potom, ako obvykle, budete si výzva pre reťazec od užívateľa
a potom zašifrovať a potom im chrbát ciphertext.
Tak, ako som povedal, je to veľmi podobné Caesara, s výnimkou miesto posúvanie určitého počtu,
číslo je vlastne zmení zakaždým, keď z charakteru k charakteru.
Predstavujú, že skutočný počet sa posunúť, je to zastúpené na klávesnici písmená.
Takže ak zadáte v posune, napríklad, potom to by zodpovedalo posunu 0.
Takže je to zase späť do abecedného indexu.
Čo by mohlo byť užitočné, ak ste videl, že sme skutočne zaoberajú ASCII hodnotami
ako aj písmená, rovnako ako index abecedne,
Možno vás alebo si vytvorte vlastný ASCII tabuľku, ktorá ukazuje v abecednom indexe 0 až 25,
až z, a ASCII hodnoty, takže môžete trochu vidieť vzťah
a načrtnúť a pokúsiť sa nájsť nejaké vzory.
Podobne, ak ste boli radenia na niektorých stupni f -
a to je buď malá alebo veľká f - potom by zodpovedali 5.
Sme dobrý tak ďaleko?
Vzorec pre Vigenere je trochu iný.
V podstate, zistíte, že je to len ako Caesar,
okrem nie len k máme k index j
Všimnite si, že sme nepoužívajú aj preto, že v podstate, dĺžku kľúčového slova
nie je nutne dĺžku nášho ciphertext.
To bude trochu jasnejší, keď vidíme príklad, že mám trochu neskôr.
V podstate, ak spustíte váš program s kľúčovým slovom na ohai,
potom to znamená, že zakaždým, ohai bude vaša smena.
Takže v závislosti na akú pozíciu ste vo vašom kľúčové slovo,
budete zmeniť svoj určitý šifrový znak tejto sumy.
Opäť, rovnako ako Caesar, chceme sa uistiť, že sme zachovať kapitalizácii vecí
a my sme iba zašifrovať písmená, nie znaky alebo medzery.
Pozrite sa teda späť k cisárovi o funkciách, ktoré môžete použili,
tak, že ste sa rozhodli, ako sa posunúť veci, a platí, že do svojho programu tu.
Takže poďme zmapovať toto.
Máme holý, ktoré sme dostali od užívateľa od GetString
hovorí to ... je CS50!
Potom máme kľúčové slovo ohai.
Prvé 4 znaky sú pomerne jednoduchá.
Vieme, že T sa bude posunutý o,
potom h sa bude posunutý h, aj sa bude posunutý.
Tu môžete vidieť, že predstavuje 0,
takže potom konečná hodnota je v skutočnosti len rovnaké písmeno ako predtým.
Potom s je posunutý i
Ale potom budete mať tieto doby tu.
My nechceme zašifrovať, takže potom nemusíte meniť ničím
a len vytlačiť období bez zmeny.
[Študent] Nechápem, ako viete, že to je posunutý - Kde vás - >> Oh, prepáč.
Na vrchole tu môžete vidieť, že argument príkazového riadku ohai tu,
že to bude kľúčové slovo.
A tak v podstate, ste na bicykli cez znaky v kľúčové slovo.
[Študent] Tak o sa bude radenie rovnaké -
Takže o zodpovedá určitému počtu v abecede.
[Študent] Právo. Ale kde si vzal CS50 časť z?
Oh. To je v GetString, kde ste ako: "Daj mi reťazec kódovania."
[Študent] Chystajú sa vám tento argument k posunu od
a potom sa spýtam na prvý reťazec. Jo >>.
Takže pri ďalšom spustení programu, idú zahrnúť kľúčové slovo
vo svojich argumentov príkazového riadku pri spustení to.
Potom, akonáhle ste čítal, že som vlastne dal 1 a nie viac, nie menej,
potom budete prinútili je pre reťazec, hovorí: "Daj mi reťazec."
Tak to je, kde v tomto prípade, že ste rovnako si to ... je CS50!
Takže potom budete používať, že a používať ohai a iteráciu.
Všimnite si, že sme tu preskočil šifrovanie obdobie,
ale z hľadiska nášho postavenia na ohai, budúci sme použili o
V tomto prípade je to trochu ťažšie vidieť, pretože to je 4,
takže poďme pokračovať trochu. Len držať so mnou.
Potom máme I a S, ktoré sú potom preložený do O a H, resp.
Potom máme priestor, a tak vieme, že sme sa nebude zašifrovať medzery.
Ale všimnite si, že namiesto toho, aby na tomto mieste práve tu,
sme šifrovanie by - ja neviem, či je vidieť, že - tu.
Takže to nie je ako ste vlastne vopred, povedzme, o ide tu, h ide tu,
ide tu, aj tu ide, o, h, i, o, h,, i Nemusíte robiť.
Stačí iba zmeniť svoj postoj na kľúčové slovo
keď viete, že ste v skutočnosti bude šifrovanie skutočný list.
Znamená to, že druh zmysel?
Dobre.
Takže len niekoľko upomienok.
Chcete, aby sa ubezpečil, že si len postúpiť na ďalšie písmeno v kľúčovom slove
ak postava v otvorenom texte, je list.
Takže povedať, že sme na o.
Sme zistili, že ďalší znak, index i holého textu, je číslo, napríklad.
Potom sme nepostúpi j, index pre naše kľúčové slovo, až sa dostaneme ďalší list.
Opäť, budete tiež chcieť, aby sa ubezpečil, že ste wraparound na začiatok kľúčového slova
keď ste na konci.
Ak vidíte tu sme u i, vedľa nich má byť o
Takže chcete nájsť nejaký spôsob, ako byť schopný wraparound na začiatku svojho kľúčového slova
zakaždým, keď sa dostanete na koniec.
A tak znova, aký druh subjektu je užitočné v tomto prípade pre obal okolo?
Rovnako ako v počítaní off príklade.
[Študent] znak percenta. >> Jo, znak percent, čo je modulo.
Takže modulo príde vhod tu, ak chcete zabaliť cez index v ohai.
A práve rýchla nápoveda: Skúste myslieť na balenie nad kľúčového slova trochu ako počítanie off,
kde v prípade, že je 3 skupiny, 4. osoba,
ich počet, že oni hovorili bol 4 mod 3, ktorý bol 1.
Tak skúste a myslím, že to takto.
Ako ste videli vo vzorci, kde máte CI a potom PI, ale potom kJ,
chcete, aby sa ubezpečil, že budete mať prehľad o nich.
Nemusíte volať to nie som ja, nemusíte volať, že j,
ale chcete, aby sa ubezpečil, že ste sledovať pozície, že ste na v otvorenom texte
, Ako aj na pozíciu, ktorú sme u v kľúčovej
pretože tieto nie sú nevyhnutne bude rovnaký.
Nielen, že na základe kľúčového slova - by to mohlo byť úplne iné dĺžky než váš obyčajný text.
Tiež váš holý, tam sú čísla a znaky,
takže to nebude dokonale ladí dohromady. Áno.
[Študent] Je tu funkcia pre zmenu prípad?
Môžete zmeniť na základnom imaní A? >> Jo, tam určite je.
Môžete sa pozrieť na - Verím, že je to toupper, všetko 1 slovo.
Ale keď sa snažíte šifra veci a zachovať text,
je najlepší v podstate mať oddelené prípady.
Ak je to veľká, potom sa budete chcieť posunúť o tejto
pretože vo vašom vzorci, keď sa pozriete späť, ako sme sa trochu cestách
zameniteľne medzi ASCII spôsobom reprezentovať čísla
a skutočné abecedný register, chceme sa uistiť,
tam to bude nejaká vzoru, ktorý budete používať.
Ďalšie poznámka o vzore, skutočne.
Budeš určite prácu s číslami.
Snažte sa používať magické čísla, ktorá je príkladom štýlu.
Takže povedať, že chcete každý niečo časového posunu rád -
Dobre, tak náznak, ďalší spojler je, keď idete k posunutiu niečo
o určitú čiastku, snažte sa predstavovať, že skutočné číslo
ale skúste a uvidíte, či môžete použiť ASCII hodnotu, ktorá bude trochu väčší zmysel.
Ďalšia poznámka: Vzhľadom k tomu, máme čo do činenia s formulou,
aj keď vaše TF bude trochu vedieť, čo vzor môžete používať,
najlepšie vo svojej komentáre druhu vysvetliť logiku, ako,
"Ja používam tento vzor, ​​pretože ..." a druh vysvetliť vzor stručne vo svojich komentároch.
[To návod 2] Ak tam nie sú nejaké ďalšie otázky, potom som si len zostať tu trochu.
Veľa šťastia s vaším PSet 2: Crypto a vďaka za príchod.
[Študent] Ďakujem. Vďaka >>.
[Media Offline intro]