[Powered by Google Translate] [Kiirtutvustus - Ülesanded 2]
[Zamyla Chan - Harvardi Ülikool]
[See on CS50. CS50.TV]
Hea küll. Tere kõigile ja tere tulemast kiirtutvustus 2.
Esiteks, ma tahan teid õnnitleda viimistlemiseks pset 1.
Ma tean, et see oleks võinud olla natuke raske mõnda teist,
oleks võinud oma esimese arvutiprogrammi, mis sa kirjutasid,
kuid pea meeles, et lõpus see, kui sa vaatad tagasi semestri lõpuks,
saate vaadata pset 1 ja saad öelda: "Hei, ma oleks võinud teha, et 5 minutiga."
Nii tunnete ja usaldate, et lõpus see saate kindlasti leida pset 1 üsna lihtne.
Aga nüüd see on tohutu saavutus ja õnnitlused eest saada teha.
Nüüd ka kiire märkuse enne kui me sattuda liha läbikäiguks.
Ma tahan teha kiire märkuse, et ma mõnikord ei ole piisavalt aega
ajal walkthroughs minna läbi iga viisiks probleemi komplekt
ja üsna lihtsalt võibolla keskenduda 1 või 2 tüüpi rakendusi,
võimalusi, et sa võiksid seda teha.
Aga see ei tähenda, et sa on keelatud seda teha muul viisil.
Sageli, nagu infotehnoloogia, palju viise asju,
ja nii kindlasti võite vabalt kasutada teistsugust lahendust kui ma võinud esitada.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. Osas Küsimused - 1. Caesar - 2. Vigenere]
Hea küll. Nii et probleem seatud 2: Crypto on lõbus.
Jällegi iga pset hakkate koos osa küsimused
et läheb läbi oma osad koos määratud õpetajate mehe.
Me ei lähe läbi need üle ülevaadet,
kuid nad kindlasti aitavad teil täita pset.
Nii et esimene osa probleemist komplekt on Caesar.
Ja nii Caesar keegi läheb teil võtit täisarv,
ja te krüptida tekstistringi et nad pakuvad teile
ja anda neile tagasi krüpteeritud asi.
Kui keegi vaatasin jõulujutt, seal on näide, et seal.
Siis teine ​​osa probleemist komplekt on Vigenere,
mis on rohkem Advanced Encryption tehnikat.
Ja nii me lähme encipher tekstilõiku
Kuid selle asemel vaid ühe täisarv, me tegelikult läheb kodeerida see
koos märksõna, et kasutaja annab meile.
Okei, nii et esimene töövahend täna on tegelikult saab olema ajakohastamine aparaat.
On vestlusgrupis näeksime asju nagu "Miks see toimib?"
"Miks ei esita 50 tööd?"
ja sageli lahendus on tegelikult lihtsalt värskendada oma seade.
Ja nii kui sa lihtsalt sõidetud terminaliakent oma seadme sudo yum-y -
see lipp öeldes jah, ajakohastada kõike - uuendus,
siis teie seade uuendab vajadusel muuta.
Ja see ei ole valus, kui sa juba oled kõige uuem versioon aparaat.
Siis lihtsalt öelda ühtegi uut uuendused saadaval ja saate jätkata tööd mööda.
Aga see on hea täita ka iga kord, kui avate seadme
sest me oleme ikka väga palju -
mõnikord, kui me tuleme viga - millega see aparaat.
Seega veenduge, et teil on kõige uuem versioon seadme
ja käivitage et uuendada seal.
Hea küll. Niisiis, kuna me tegeleme tähed ja muutuv, enciphering asju,
me läheme tõesti tahad saada parimad sõbrad meie ASCII diagramm.
On mitmeid neist online, kui sa leiad. Võib-olla isegi teha oma.
Põhimõtteliselt iga täht ja iga arv ja iga märk
seal on mitu nendega seotud
ja nii on hea näha oma ASCII väärtused kõrval tegelik kirja.
See kindlasti aitab teil probleemi komplekti.
Üks asi, mis tõesti aitas mind selle probleemi komplekt oli tegelikult välja trükkida,
ja kui ma läksin läbi, ma tegelikult teha seda,
kirjutada: "Kui see peab minema sinna, siis ..."
Kind of juhtida seda ja märkige see üles, saama parimad sõbrad oma ASCII tabelis.
Siis on meil veel mõned meie käsutuses olevaid vahendeid.
Seekord asemel tegelikult ajendades kasutajal kogu oma panus
me teeme koos.
Me läheme kallutada neid mingil sisend,
aga me oleme ka läheb lihtsalt kasutada käsurea argumente.
Nii et kui nad juhivad oma programmi, tavaliselt sa ütled. / Hello, näiteks
Kui teie programm oli hello.c.
Aga seekord mitte lihtsalt ütlen, et neid saab panna sõnad, argumendid hiljem.
Ja nii me ei kavatse kasutada mida iganes nad läbima meile oma sisend ka,
nii väljudes lihtsalt küsimine täisarv, vaid ka kasutades käsurea argumente.
Ja siis me astume massiivid ja stringid, mis me kasutame palju ka.
Siin on lihtsalt näide 1 mini ASCII diagramm.
Nagu ma ütlesin, iga täht vastab number,
ja nii end kurssi sellega. See tulevad mugav.
Ja hiljem, kui me alustada tehes mõned ASCIIMath tegelevad numbrid -
lisades, lahutades neist - siis kindlasti hea viidata seda tabelit.
Nii et siin on näide Caesar salakiri - midagi, mida te võib-olla mängitakse.
See on lihtsalt ratast. Sisuliselt on välimine tähestik ja siis on sisemine tähestikku.
Nii et siin on näide Caesar salakiri kuid oluline on 0.
Sisuliselt on joondatud, B on joondatud B, kõik viis kuni Z.
Aga siis öelda tahtsime võti 3, näiteks.
Siis võiks pöörata sisemine ratas, nii et nüüd joondub D jne
Ja nii see on sisuliselt mida me teeme.
Meil ei ole rool, vaid see, mida me kavatseme teha, on muuta meie programm
selline nihe tähestik koos meiega teatud numbrid.
Nii nagu ma enne ütlesin, me ei kavatse tegelema käsurea argumente
samuti saada täisarv.
Nii, et kasutaja käivitab oma Caesari programmi juurde. / Caesar
ja seejärel sisestades numbri pärast seda.
Ja see number näitab võti, nihe,
mitu korda sa lähed tuleb pöörleva sisemise ratta oma Caesari šiffer.
Ja nii sa näed siin näiteks.
Kui me sisenesime tähed A kuni L meie Caesar salakiri,
siis oleks sisend D läbi O, sest see on iga täht nihkunud üle 3 korra,
nagu näiteks ratta, mis ma näitasin sulle.
Nii et siis, kui olete sisestanud, näiteks See on CS50!
siis oleks ka liigutada kõik tähed.
Ja see on oluline asi nii Caesari ja Vigenere
on see, et me ei kavatse jätta vahele ühtegi mitte-kirju.
Nii et kõik ruumid, tegelased jne, numbrid, me hoida neid sama.
Me ainult hakkab nihkuma tähed käesolevas asjas.
Nii et nagu näete rool, meil on ainult tähed meile kättesaadavad,
nii et me ainult tahame nihutada tähed ja krüptida kirju.
Nii et esimene asi, mida teha, siis nägin, et kasutamine Caesar probleem komplekt 2
on joosta Caesar ja sisestage number, kui sa jooksed ta terminalis.
Mida me peame tegema, on kuidagi saada, et võti ja sellele juurde.
Ja nii me tahame kuidagi näha, et see saab olema teine ​​käsurea argument.
Esimene saab olema. / Caesar, ja järgmine saab olema võtme number.
Nii et enne oli meil int main (void), et alustada meie C programmid.
Me läheme koor tagasi kiht natuke
ja tegelikult näha, et lähitulede asemel sisse tühiseks, meie peamine ülesanne
me tegelikult tegeleme 2 parameetrit.
Meil on int nimega argc ja seejärel massiivi stringe nimetatakse argv.
Nii argc on täisarv,
ja see esindab mitmeid argumente möödunud aastal oma programmi.
Ja siis argv on tegelikult nimekirja argumente möödas.
Kõik argumendid on stringid, ja nii argv esindab massiivi, nimekiri, stringid.
Räägime massiivid natuke.
Massiivid on sisuliselt uus andmestruktuur.
Meil on ints oleme kahekordistab, meil on stringid, ja nüüd on meil massiivid.
Massiivid on andmestruktuurid, mis mahutab mitu väärtust sama tüüpi,
Nii et sisuliselt nimekirja tahes liiki soovite.
Sisuliselt kui sa tahad nimekirja täisarvud kõik 1 muutuja,
siis oleks luua uus muutuja, mis oli tüüpi int massiiv.
Nii massiivid on null indekseeritud, mis tähendab, et esimene element massiivi on indeks 0..
Kui massiiv on pikkus 4, nagu selles näites, siis oma viimase elemendi oleks kell indeks 3,
mis on 4-1.
Nii, et luua massiivi, siis oleks midagi sellist teha.
Ütle sa tahtsid double array.
See kehtib igat liiki andmete tüüp, kuigi.
Nii öelda tahad topelt massiivi. Ütle sa tahad seda kutsuda postkast.
Nii nagu te initsialiseerida muu topelt,
siis ütleksin topelt ja siis nimi, kuid seekord me paneme nurksulud,
ja seejärel number tekib pikkus array.
Pange tähele, et massiivid me ei saa kunagi muuta pikkus,
et sa alati määratleda ja valida mitu kasti,
mitu väärtust oma massiivi saab omada.
Nii määrata erinevaid väärtusi oma massiiv, sa lähed, et kasutada seda järgmine süntaks,
nagu näete slaidil.
Sul on postkast indeks 0 seatakse 1.2
postkast indeks 1 komplekt 2,4 jne
Nüüd, et oleme läbi vaadanud massiivid natuke, lähme tagasi argc ja argv.
Me teame, et argv on nüüd massiiv stringe.
Nii et kui kasutaja möödub - ütlevad nad töötavad programm -
nad ütlevad. / hello David Malan,
mida programm teeb sinu jaoks juba tegelikult tulla mida argc ja argv on.
Nii et sa ei pea muretsema, et.
Argc sel juhul oleks 3, sest ta näeb 3 eraldi sõnad eraldatud tühikutega.
Ja nii siis massiivi antud juhul esimene indeks oleks. / Hello,
kõrval üks David, järgmine Malan.
Kas keegi näeb kohe, mida suhet argv,
massiiv, ja argc on?
Jah. Me võtame arvesse, et näiteks args.c.
Vaatame, kas saame ära suhete 2.
Siin Te võite leida, et seade vaikimisi rakenduse
avada. c failid on mõnikord Emacs.
Aga me tahame tulla toime gedit, nii et mida saate teha, on saate paremklõps oma C faili
minna omadused, Open With ja siis vali gedit, Vaikimisi,
ja nüüd oma programmi peaks avanema gedit asemel Emacs.
Perfect.
Nii et siin on mul programmi, et ma tahan välja printida iga käsurea argument.
Mida iganes kasutaja sisendite, ma tahan sisuliselt tagastab selle tagasi neile uuele reale.
Mis siis struktuuri, et saame kasutada itereerime midagi -
midagi, mida sa ilmselt kasutada oma pset 1?
Kui soovite läbida kindel arv asju? >> [Üliõpilane] For loop.
Jaoks silmus. Täpselt. Nii alustame jaoks silmus.
Meil on int i = 0. Lihtsalt alustada standard initsialiseerimise muutuja.
Ma jätan tingimuseks seatud ja siis öelda, i + +, teeme asju seal.
Hea küll.
Nii mõtlesin tagasi argv, kui argv on argumentide loetelus möödunud aastal programmi
ja argc on mitmeid argumente programmi
siis see tähendab, et argc on sisuliselt pikkus argv, paremale,
sest seal saab olla nii palju argumente, sest nende väärtus argc.
Nii et kui me tahame kinnitada, üle iga elemendi argv,
me ei kavatse soovite iga kord pääseda muutuja argv juures antud indeksiga.
See võib olla esindaja, eks?
See muutuja näitab siin eriti stringi antud juhul
sest see on stringi massiivi - eriti stringis et antud indeksiga.
Mida me tahame teha, antud juhul me tahame seda välja printida, nii oletame printf.
Ja nüüd argv on string, nii et me tahame panna, et kohatäide seal.
Soovime uue liini lihtsalt oleks hea.
Nii et siin on meil jaoks silmus. Meil ei ole tingimus veel.
Nii et ma algab 0 ja seejärel iga kord see saab printida antud stringi
selle konkreetse indeksi massiiv.
Nii et kui me tahame, et peatada väljatrükk massiivi elementide?
Kui oleme valmis, eks? Kui me oleme jõudnud lõpuks massiiv.
Nii et me ei taha ületada mineviku pikkus array,
ja me juba teame, et me ei pea tegelikult aktiivselt teada, mis pikkus argv on
sest see on meile antud, ja mis see on? Argc. Täpselt.
Nii et me tahame teha seda protsessi argc arv kordi.
Ma ei ole õiges kataloogis.
Hea küll.
Nüüd teeme args. Vigu ei, mis on suurepärane.
Nii et olgem lihtsalt joosta args.
Mida see läheb tagasi meile? See on lihtsalt trükkimise tagasi.
"Te sisestanud args arvesse programmi; ma annan selle sulle tagasi."
Ütleme, me tahame öelda, args siis foo bar.
Nii siis prindib meile tagasi. Olgu?
Seega on näide sellest, kuidas saab kasutada argc ja argv
teades, et argc tähendab pikkus argv.
Veenduge, et te ei ole kunagi massiivid juurdepääsu abil ületada pikkus array
sest C kindlasti hüüavad teile.
Sa saad midagi, mida nimetatakse killustatust süü,
mis ei ole kunagi lõbus, põhimõtteliselt öelda üritad pääseda midagi
mida ei eksisteeri, ei kuulu teile.
Seega veenduge, ja eriti null-indekseerimine, me ei taha -
Nagu näiteks, kui meil on massiiv pikkusega 4,
et massiivi indeks 4 ei eksisteeri, sest hakkame 0, null indeks.
See saab teist laadi nagu jaoks silmuseid, kui hakkame 0.
Nii lihtsalt hoida seda silmas pidades.
Sa ei taha kunagi pääseda indeks array, mis on väljaspool sinu käeulatuses.
Nii näeme nüüd, kuidas me suudame sellist juurdepääsu
käsurea argumente, mis on möödunud sisse
Aga kui te nägite string, argv on tegelikult stringi massiivi.
Nii see tegelikult ei ole täisarv veel, kuid Caesari tahame tegeleda täisarvud.
Õnneks on funktsioon loodud meie jaoks, mida saab tegelikult teisendada stringi täisarvuks.
Ka siin me ei tegele kasutaja sisend, kuhu me sundides neid
sisendkäibemaksu siin võti, nii et me ei saa tegelikult reprompt ja öelda,
"Oh, anna mulle veel üks täisarv, ütleme, kui see ei kehti."
Aga me ei vaja veel kontrollida õiget kasutusviisi.
Aastal Caesar nad ainult lubatud edastada arv 1,
ja nii nad peavad töötama. / Caesar ja siis nad peavad sulle arvu.
Nii argc peab olema teatud arv.
Mis number see oleks, kui nad peavad läbima sa. / Caesar ja siis võti?
Mis on argc? >> [Üliõpilane] 2. >> Kaks. Täpselt.
Nii et sa tahad veenduda, et argc on 2.
Muidu sa põhimõtteliselt keelduda käivitada programmi.
Aasta peamised see on funktsioon, mis ütleb, int main,
nii siis me alati hea tava return 0 lõpus edukas programm.
Nii et kui, ütleme, nad annavad sulle 3 käsurea argumente 2 asemel
või sulle 1 näiteks siis mida sa saad teha on, mida sa tahad, et kontrollida, et
ja siis return 1 öeldes, ei, ma ei saa jätkata selle programmi.
[Üliõpilane] Ei saa olla ruumi oma teksti. >> Vabandust?
[Üliõpilane] Ei saa olla ruumi teksti üritad varjata.
Ah!
Seoses teksti, et me üritame varjata, et tegelikult tuleb hiljem
kui me anname seda teksti.
Nii et praegu me lihtsalt aktsepteerimist käsureaargumendid tegeliku arvu,
tegelik vahetustega Caesar krüpteerimist.
[Üliõpilane] Miks sa vajad 2 asemel vaid 1 argc? Seal on kindlasti 1 number.
Õigus. Põhjus, miks me peame 2 argc mitte 1.
sest kui te käivitate programmi ja öelda. / Caesar või. / hello,
et tegelikult loeb käsureal.
Nii siis, et juba kulub 1 ja nii siis me sisestanud 1 extra.
Nii et sa oled sisestanud tegelikult stringi käsurea argument.
Mida sa teha tahad, sest Caesar tahame tegeleda täisarv,
nii saad kasutada seda atoi funktsioon.
Ja põhimõtteliselt, te kaotate seda stringi ja siis teid tagasi täisarv
kui see on võimalik, et string täisarv.
Nüüd mäletan, kui me tegeleme printf või getString, asjad niimoodi,
me hulka raamatukogudes, mis on omased meile.
Nii et alguses hakkame koos räsi tag standard I / O,. H, midagi sellist.
Noh, atoi ei ole ühe nimetatud raamatukogud,
nii et mida me peame tegema, on meil hõlmavad õigust raamatukogu eest.
Nii meenutavad tagasi kiirtutvustus 1, kus vestlesin käsitsi funktsioon.
Kirjutad mees oma terminali ja siis järgneb nimi funktsiooni.
Ja nii, et avab terve nimekirja selle kasutamine,
kuid samuti see avab mille raamatukogu, mis kuulub.
Nii et ma jätan selle sulle kasutada käsitsi funktsiooni atoi
ja aru saada, mis raamatukogu teil lisada, et oleks võimalik kasutada atoi funktsioon.
Nii et meil on võti ja nüüd tegemist on saada lihttekstina
ja et tegelikult saab olema kasutaja sisend, kuhu kiire.
Käsil GetInt ja GetFloat, ja nii samas vaimus
me hakkame tegelema getString.
Aga sel juhul me ei pea tegema muud teha, kui või samas silmuseid, et kontrollida.
GetString kindlasti annavad meile stringi,
ja me ei kavatse varjata iganes kasutaja annab meile.
Nii saab eeldada, et kõik need kasutaja ümbritsevat stringid on õiged.
Suur.
Siis kui sul on võti ja kui sul on tekst,
nüüd Mis vasakul on teil encipher polegi.
Lihtsalt kiiresti katta üle Lingo, polegi mida kasutaja annab teile,
ja krüptotekstiga on see, mida sa jälle neid.
Nii stringid, et oleks võimalik läbida tegelikult on täht
sest me peame minema iga täht,
saame aru, et stringid, kui me sellist koor tagasi kiht,
me näeme, et nad on lihtsalt väga tähti.
Üks on teise järel.
Ja nii me ravib stringe nagu massiivid, sest nad on massiive tähemärki.
Nii et teil on string nimega teksti,
ja selles muutuv tekst on salvestatud See on CS50.
Siis teksti indeks 0. oleks suur T-punktidele 1 oleks h jne
Ja siis massiivid, mis argc näiteks args.c,
nägime, et meil oli itereerime massiivi
ja nii pidime itereerima alates i = 0 kuni i on väiksem kui pikkus.
Nii et me peame mingi võimalus figuring mida pikkusega meie string
kui me lähme itereerima üle.
Õnneks jällegi on funktsioon meie jaoks olemas, kuigi hiljem CS50
saate kindlasti suutma rakendada ja teha oma funktsioon
mida saab arvutada pikkuse stringi.
Aga nüüd me ei kavatse kasutada stringi pikkus, nii strlen.
Jätate on string, ja siis tagasi sa int, mis tähistab pikkuse oma nöör.
Vaatame näiteks, kuidas me võiksime olla võimeline itereerima üle tähtede jada
ja midagi sellega.
Mida me tahame teha, on itereerime iga märk string,
ja mida me tahame teha, on meil printida tagasi iga märk 1 x 1
välja arvatud lisame midagi selle kõrval.
Nii alustame jaoks silmus. Int i = 0.
Me läheme jäta ruumi seisukorras.
Me tahame kinnitada, kuni jõuame stringi lõpuni, eks?
Nii siis mida funktsioon annab meile stringi pikkusena?
[Kuuldamatu õpilase vastus]
See on pikkus käsurea argumente.
Aga string tahame kasutada funktsiooni, mis annab meile stringi pikkusena.
Nii et string pikkusega.
Ja nii siis sa pead läbima string ta.
See peab teadma, mida string on vaja arvutada pikkuse.
Nii siis sel juhul me tegeleme string s.
Suur.
Nii siis mida me tahame teha, olgem printf.
Nüüd tahame tegeleda tähemärki. Me tahame välja trükkida iga märk.
Kui sa tahad seda välja trükkida float, siis oleks kasutada kohatäide nagu% f.
Mis int kasutad% d.
Ja nii sarnaselt, kus tegelane te kasutate% c ütlema, ma lähen tuleb trükkimine iseloomu
mis on talletatud muutuv.
Nii et meil on see, ja lisame aja ja ruumi ta.
Mis märk on meil kasutada?
Me ei kavatse kasutada mis tahes laadi me oleme string.
Siis me ei kavatse olla kasutades midagi nööriga,
kuid me tahame olla juurdepääs teatud laadi seal.
Nii et kui string on lihtsalt massiivi, siis kuidas me juurdepääs elemendid massiivi?
Meil on need nurksulud, ja siis me paneme indeks seal.
Nii et meil on nurksulgudes. Meie indeks Antud juhul saame lihtsalt kasutada i. Täpselt.
Nii et siin me ütleme me ei kavatse olla prindite iseloomu järgneb dot ja ruumi,
ja et märk saab olema nda kirja meie string s.
Ma lihtsalt salvestada et. Okei.
Nüüd ma lähen jooksma string pikkusega.
Seega oli meil string nimega OMG, ja nüüd on see rõhutas veelgi.
Samamoodi oletame, et me tegelikult tahame saada stringi kasutaja.
Kuidas võiks me seda teeme?
Enne, kui me saime int?
Me ütlesime GetInt, eks? Kuid see ei ole int, niiet getString.
Teeme string pikkusega. Siin ei sisestanud konkreetse kiire.
Nii et ma ei tea.
Ma lähen panen nime siin ja nii siis ma saan üks nendest asjadest
kus ma anda sõna iga tähe või midagi sellist. Lahe.
Nii et string pikkusega.
Nii et oleme tagasi Caesar.
Meil on mõned vahendid, kuidas me itereerime stringi,
kuidas me juurdepääs iga element.
Nii et nüüd saame tagasi programmi.
Nagu ütlesin, on ASCII tabelis, teie parim sõber,
sa lähed, et näha numbrid, mis on seotud iga täht.
Nii et siin öelda meie polegi on mul uimane!
Siis kõik need tegelased läheb on number ja ASCII väärtus sellega seotud,
isegi ülakoma isegi ruumi, isegi hüüumärk,
et sa tahad, et hoida seda meeles.
Nii ütleme meie peamiste et kasutaja kuuluvad nende käsurea argument on 6.
See tähendab, et esimene täht, mis on I, mis on esindatud 73,
soovite naasta neid iganes kirjas on esindatud ASCII väärtus 73 + 6.
Sellisel juhul oleks 79.
Nüüd tahame minna järgmisele iseloomu.
Nii et järgmine aasta indeks 1 polegi oleks ülakoma.
Kuid pidage meeles, me tahame ainult encipher tähed.
Nii et me tahame veenduda, et ülakoma tegelikult jääb samaks,
et me ei muuda 39-lt iganes 45 on.
Me tahame hoida seda ülakoma.
Nii et me tahame meeles pidada, et ainult encipher tähed
sest me tahame kõik teised sümbolid jäävad samaks meie programmis.
Teine asi, mida me tahame on säilitada kapitaliseeritust.
Nii et kui teil on suurtähe, see peaks jääma suur.
Lowercases peaks jääma väiketähti.
Nii et mõned kasulikud funktsioonid, et oleks võimalik toime tulla ainult enciphering tähed
ja hoida säilitades kapitaliseeritus asjad
on isalpha, isupper, islower funktsioone.
Ja nii need funktsioonid, mis tagastavad teile tõeväärtuse.
Põhimõtteliselt õige või vale. Kas see suur? Kas see täht?
Kas see kirjas sisuliselt.
Nii et siin on 3 näiteid, kuidas te kasutate seda funktsiooni.
Põhimõtteliselt võid katsetada, kas väärtus tagastatakse teile, et funktsioon on õige või vale
põhineb sellel sisend.
Kas ei šifreerimine midagi või salakiri see või veenduge, et see on suur jne
[Üliõpilane] Kas sa lihtsalt selgitada neile veidi rohkem ja kuidas neid kasutada? >> Jah, kindlasti.
Nii et kui me vaatame tagasi, siin on meil kapitali ma, eks?
Nii et me teame, et ma läheb O sest ma + 6 on O.
Aga me tahame veenduda, et O saab olema kapitali O.
Nii et põhimõtteliselt, et on selline muutu meie panus.
Niisiis, kas see on suur või mitte, selline muuta nii, et me tegeleme sellega.
Siis kui me kasutame isupper funktsioon selle konkreetse indeksi
nii isupper ("mina"), mis tagastab meile tõsi, et me teame, et see on ülemine.
Siis põhines sellel, et hiljem me astume valem
et teid kasutades suunata asju Caesar,
nii siis põhimõtteliselt, seal saab olema veidi erinev kui see on suur
erinevalt väiketähtedeks. Mõtet?
Jah. Pole muret.
Ma rääkisin natuke lisades 6 kirja, mis ei ole päris mõtet
välja arvatud siis, kui me sellist aru, et need märgid
on selline vahetatavad täisarvud.
Mis me teeme, on meil selline kasutamine kaudsete valu.
Me läheme sisse casting veidi hiljem, kui te võtate raha ja sa muuta see eri tüüpi
kui see algselt oli.
Aga see pset me saaks sellist vaheldumisi kasutada sümbolit
ja vastavad täisarvu.
Nii et kui sa lihtsalt ümbritseda sümbol lihtsalt ülakoma,
siis sa pead olema võimeline töötama seda täisarvud, käsitledes seda kui täisarv.
Nii kapitali C puudutab 67. Väiketähed f puudutab 102.
Jällegi, kui sa tahad teada, need väärtused, vaata oma ASCII tabelis.
Nii et lähme sisse mõned näited sellest, kuidas sa võiksid lahutada ja liita,
kuidas tegelikult võite tõesti töötavad need märgid, kasutada neid vaheldumisi.
Ma ütlen, et ASCIIMath läheb arvutada, lisades märgi täisarv
ja kuvab saadud iseloomu, samuti sellest tulenev ASCII väärtus.
Ja siin ma räägin - we'll tegelevad selle osa hiljem -
Aga põhimõtteliselt ma väidan, et kasutaja peaks ütlema joosta ASCIIMath koos võtmega,
ja ma väidan, et see võti saab olema number
kellega me kavatseme lisada see märk.
Nii et siin märgata, et kuna ma olen nõudlik võti,
kuna ma olen nõudlik, et nad annavad mulle 1 asi,
Ma tahan ainult nõustuda. / Asciimath ja võti.
Ma lähen nõuda argc on võrdne 2.
Kui see ei ole, siis ma lähen tagasi 1 ja programm sulgub.
Nii et ma väidan, et võtit ei kavatse olla esimene käsurea argument,
see saab olema teine, ja nagu näete siin,
Ma lähen keerata, et täisarv.
Siis ma lähen seatud märk olema r.
Pange tähele, et tüüpi muutuja chr on tegelikult täisarv.
Nii, et ma olen võimeline kasutama r täisarvuna on poolt encasing see nende ülakoma.
Nii tagasi meie printf avaldusega, kus meil on kohatäide iseloomu
ja siis kohatäide täisarv,
märk on esindatud chr, ja täisarv on võti.
Ja nii siis me lähme ka tulemus lisada 2 kokku.
Nii et me ei kavatse lisada r + mis iganes võti on,
ja siis me läheme välja printida tulemus seda.
Nii et teeme asciimath. See on ajakohane, niiet lihtsalt joosta asciimath.
Oh, aga vaata, see ei tee midagi, sest me tegelikult ei anna see võti.
Nii et kui ta lihtsalt andis 1, meie peamine ülesanne, see lihtsalt tagasi meie juurde tagasi.
Siis olgem läbida võti. Keegi mulle number. >> [Üliõpilane] 4.
4. Okei.
Nii r kasvanud 4 läheb meile v, mis vastab ASCII väärtus 118.
Nii et siis selline loogiline, et -
Tegelikult ma saan küsida, mis sa arvad ASCII väärtus r on kui r + 4 on 118?
Siis jah, r on 114.
Nii et kui sa vaatad ASCII tabel siis, jumala eest, te näete, et r on esindatud 114.
Nüüd, et me teame, et me saame lisada täisarvude tähemärki, see tundub üsna lihtne.
Me lihtsalt läheb itereerime stringi nagu nägime näiteks enne.
Me kontrollime, kas see on kirjas.
Kui on, siis me minema seda iganes võti on.
Päris lihtne, välja arvatud, kui saad niimoodi,
näed, et z, keda esindab 122, siis annaks sulle teistsuguse iseloomuga.
Me tahame tegelikult jäävad meie tähestik, eks?
Nii et me peame välja mõtlema mingi viisi liiki ümbriste ümber.
Kui jõuad Teed ja soovite suurendada teatud arvu,
sa ei taha minna kaugemale ASCII tähestiku jagu;
soovite murrab tagasi kõik viis A.
Kuid pidage meeles, sa ikka säilitada puhul.
Nii et teades, et kirjad ei ole muutunud sümbolid
nagu Sümboleid ei kavatse muutuvad samuti.
Viimase pset sa kindlasti ei vaja,
kuid võimalus oli rakendada oma ahne pset abil moodul funktsioon.
Aga nüüd me oleme tegelikult läheb vaja kasutada moodul,
niiet minge üle selle natuke.
Sisuliselt kui sul on x modulo y, mis annab teile ülejäänud x jagatud y.
Siin on mõned näited siin. Meil on 27% 15.
Põhimõtteliselt, kui sa lahutama 15 alates 27 kui palju kordi kui võimalik ilma saada negatiivne
siis sa teenid 12 üle jäänud.
Nii et on selline nagu on matemaatika kontekstis, kuid kuidas me saame tegelikult seda kasutada?
See saab olla kasulik meie wrapover.
Selleks ütleme lihtsalt palusin kõik jagamiseks 3 gruppi.
Mõnikord sa seda rühmades ja midagi sellist.
Ütle Ma ütlesin: "Okei, ma tahan teid kõiki jagada 3."
Kuidas võiks sa seda tegid?
[Kuuldamatu õpilase vastus] Jah, täpselt. Krahv välja. Okei.
Olgem tegelikult teha. Kas sa tahad alustada?
[Õpilased lugedes väljas] 1, 2, 3, 4.
Kuid pidage meeles ... >> [Üliõpilane] Oh, vabandust.
See on tõesti hea punkt.
Sa ütlesid, 4, kuid me tegelikult tahame teile öelda 1, sest me tahame ainult 3 gruppi.
Niisiis, kuidas - Ei, see on tõesti hea näide, sest siis kuidas võib teile öelda 1?
Mis seos 4 ja 1?
Noh, 4 MOD 3 1.
Nii et kui te jätkate, siis oleks 2.
Nii et meil on 1, 2, 3, 1, 2.
Jällegi, sa oled tegelikult 5. isik. Kuidas sa tead, et öelda 2 5 asemel?
Te ütlete 5 mod 3 on 2.
Ma tahan näha, kuidas paljud rühmad on 3 on üle jäänud, siis mis järjekorras ma olen!
Ja nii siis kui me jätkame mööda kogu ruumi,
siis näeme, et me oleme alati tegelikult kohaldavad mod funktsiooni ise
et selline loota maha.
See on rohkem selline materiaalne näide sellest, kuidas sa võiksid kasutada mooduli
sest ma olen kindel, et enamik meist on ilmselt läbi käinud, et protsess
kus me oleme olnud loota maha.
Iga küsimustele mooduli?
See on päris oluline mõista, mis on see,
nii et ma tahan veenduda, te aru.
[Üliõpilane] Kui ei ole ülejäänud, see annab teile tegelik number?
Kui üks esimesi neist 3 olid seda teinud, oleks ta pidanud seda, mida nad tegelikult olid,
või oleks see andnud neile [kuuldamatu] >> See on hea küsimus.
Kui puudub ülejäänu moodul - nii et teil on 6 mod 3 -
et tegelikult annab teile tagasi 0.
Me räägime, et natuke hiljem.
Ah jaa, näiteks 3. isiku - 3 mod 3 on tegelikult 0, kuid ta ütles 3.
Nii et see on nagu sisemine saagi, näiteks
nagu okei, kui moderaator on 0, siis ma lähen 3. isikule.
Aga me võtame arvesse omamoodi kuidas me võiksime taha tegeleda sellega, mida 0 on hiljem.
Nii et nüüd me kuidagi on viis kaardistamine Teed paremale kirja.
Nüüd oleme läbi käinud neid näiteid,
me sellist näha, kuidas Caesar võiks töötada.
Näete 2 tähestikku ja seejärel näed neid nihutades.
Nii et proovime ja väljendada, et seoses valem.
See valem on tegelikult antud teile spec,
kuid olgem sellist vaadata läbi, mida iga muutuja tähendab.
Meie lõpptulemus saab olema krüptotekstiga.
Nii et see ütleb, et nda iseloomu krüptotekstiga
läheb vastavad nda iseloomu polegi.
See on loogiline, sest me tahame alati vooder neid asju.
Nii et see saab olema nda iseloomu krüptotekstiga pluss k, mis on meie peamine -
et mõistlik - ja siis meil on see mod 26.
Jäta tagasi, kui meil oli zed
me ei taha sattuda iseloomu, nii et me tahtsime mod see
ja sellist ümbritsev tähestikku.
Pärast Teed sa ei tahaks minna a, b, c, d, kuni sul õige number.
Nii et me teame, et Zed, kui + 6, annaks meile f sest pärast Teed on a, b, c, d, e, f.
Nii et pidagem meeles me teame kindlasti, et Zed + 6 läheb meile f.
ASCII väärtused on z 122 ja f on 102.
Nii et me peame leidma mingi viisi muutes meie Caesar valem annab meile 102
pärast pildistamist 122.
Nii et kui me lihtsalt kohaldada selle valemi ("z" + 6)% 26, mis tegelikult annab teile 24
sest 122 + 6 on 128 128% 26 annab sulle 24 ülejäänud.
Aga see tegelikult ei tähenda f. See pole kindlasti 102.
See on ka mitte 6. tähestiku tähe.
Nii et ilmselt peame olema mingi võimalus tutistamine see natuke.
Seoses regulaarsete tähestik, me teame, et z on 26. täht ja f on 6..
Aga me oleme infotehnoloogia, nii et me läheme indeks on 0.
Siis asemel z on number 26, me ei kavatse öelda, et see number 25.
sest on 0.
Nii et nüüd lähme kohaldatakse seda valemit.
Meil on z esindatud 25 + 6, mis annab sulle 31.
Ja 31 mod 26 annab teile 5, nagu ülejäänud.
See on täiuslik, sest me teame, et f on 5. tähestiku tähe.
Aga see ikka ei ole f, eks? See ikka ei ole 102.
Nii siis selle pset, väljakutse on püüdnud välja selgitada suhe
vahel vahetustoiminguteks need ASCII väärtused ja tähestikregister.
Sisuliselt, mida sa teha tahad, sa tahad hakata läbi ASCII väärtused,
aga siis sa tahad kuidagi tõlkida seda arvesse tähestikregister
Seejärel arvutab mida kirjas peaks olema - Põhimõtteliselt, mida tema tähestikregister
Euroopa salakiri iseloomu - siis tõlkida, et tagasi ASCII väärtused.
Nii et kui sa võtab välja oma ASCII tabelis, proovige ja leida seoseid, ütleme, 102 ja 5.
või 122 ja 25.
Oleme saanud meie võti käsurea argumente, oleme saanud polegi,
oleme šifreeritud ta.
Nüüd kõik oleme vasakule teha, on seda trükkida.
Me võiksime seda teha paari erinevalt.
Mida saaksime teha, on tegelikult printida kui me läheme mööda.
Nagu me itereerime märkide string,
me võiks lihtsalt lihtsalt printida küll siis, kui me seda arvutada.
Teise võimalusena võid ka seda säilitada massiivi ja on array tähemärki
ja lõpus itereerima üle, et kogu massiivi ja printida.
Nii et teil on paar võimalust selle eest.
Ja pidage meeles, et% c saab olema kohatäide trükkimine iseloomu.
Nii et meil on Caesari, ja nüüd me liigume edasi Vigenere,
mis on väga sarnane Caesar kuid lihtsalt veidi keerulisem.
Nii et sisuliselt koos Vigenere on sa lähed olema läbivad märksõna.
Nii et selle asemel number, sa lähed on string,
ja nii see läheb tegutseda märksõna.
Siis, nagu tavaliselt, sa lähed, et saada küsima string kasutaja
ja siis encipher ja siis anda neile krüptotekstiga tagasi.
Nii nagu ma ütlesin, see on väga sarnane Caesar, välja arvatud asemel nihkub teatav arv,
number on tegelikult muutu iga kord alates märgi iseloomu.
Esindada et tegelik arv nihutada, see esindab klaviatuuri tähed.
Nii et kui sisestate nihe, näiteks, siis oleks vastavad nihe 0.
Nii et see on jälle tagasi tähestikregister.
Mis võib olla kasulik, kui te näete, et me tegelikult tegelevad ASCII väärtused
samuti kirjad, samuti tähestikregistris,
võib-olla leida või teha oma ASCII tabel, mis näitab tähestikuline indeks 0 kuni 25,
kaudu z, ja ASCII väärtused, et saaksite liiki vaata suhe
ja visandada ja püüda leida mõned mustrid.
Samamoodi, kui sa olid suunamisest teatud näiteks f -
ja see on kas väikese või suure algustähega f - siis oleks vasta-5.
Kas me oleme hea nii palju?
Valem Vigenere on natuke erinev.
Põhimõtteliselt te näete, et see on nagu Caesar,
Kuid selle asemel, et lihtsalt k meil k indeks j.
Pange tähele, et me ei kasuta ma, sest sisuliselt, pikkus märksõna
ei pruugi pikkus meie krüptotekstiga.
See on natuke selgem, kui me näeme näiteks, et mul on natuke hiljem.
Põhimõtteliselt, kui sa jooksed oma programmi märksõnaks Ohai,
siis see tähendab, et iga kord, Ohai saab olema oma vahetuses.
Nii et olenevalt millisel positsioonil sa oled oma märksõna,
sa lähed minema oma teatud krüptotekstiga iseloomu selle summa võrra.
Jällegi, nagu Caesar, tahame veenduda, et me säilitame kapitaliseeritus asjad
ja me ainult šifreerimine tähti, mitte märke või tühikuid.
Nii vaatame tagasi Caesar funktsioonide kohta, mida olete kasutanud,
nii, et sa otsustada, kuidas suunata asju ja kohaldada seda oma programmi siin.
Nii et olgem map seda.
Meil on polegi, et oleme saanud, et kasutaja getString
ütlen seda ... on CS50!
Siis on meil märksõnaks Ohai.
Esimese 4 tähemärki on päris lihtne.
Me teame, et T läheb nihutatakse o,
siis h läheb nihutatakse h, i läheb nihutatakse.
Siin näed, et on 0,
nii siis lõpuks väärtus on tegelikult just sama kirja nagu enne.
Siis s nihutatakse i.
Aga siis on need perioodid siin.
Me ei taha encipher, et nii siis me ei muuda seda miski
ja lihtsalt välja printida jooksul muutumatuks.
[Üliõpilane] Ma ei saa aru, kuidas sa tead, et see nihutatakse - Kust sa - >> Oh, vabandust.
Ülaosas siin näed, et käsurea argument Ohai siin,
et see saab olema märksõna.
Ja nii põhimõtteliselt, sa jalgrattaga üle tähemärki märksõna.
[Üliõpilane] Nii o läheb käiguvahetus sama -
Nii o vastab teatud arv tähestikus.
[Üliõpilane] Õigus. Aga kust sa CS50 osaliselt?
Oh. See on getString kus sa oled nagu "Andke mulle string kodeerida."
[Üliõpilane] Nad annan sulle selle argumendi soovid vahetada
ja siis saate küsida oma esimese stringi. >> Jah.
Nii et kui nad käivitada programmi, nad ei kavatse ka märksõna
oma käsurea argumente kui need käivitada.
Siis kui olete kontrollinud, et nad on tegelikult andnud teile 1 ja mitte rohkem, mitte vähem
siis sa lähed küsima neid string, ütlevad: "Anna mulle string."
Nii et kui sellisel juhul nad olen andnud teile See ... on CS50!
Nii et siis sa lähed kasutada seda ja kasutavad Ohai ja itereerime.
Pange tähele, et siin me vahele üle krüptides perioodid,
kuid seoses meie positsiooni Ohai, kõrval üks me kasutasime o.
Sel juhul on see natuke raskem näha, sest see on 4
niiet jätkuvalt natuke. Lihtsalt jääda koos minuga siin.
Siis on meil i ja s, mis seejärel tõlkida o ja h võrra.
Siis on meil ruumi ja nii siis me teame, et me ei kavatse encipher ruumid.
Aga teate, et asemel läheb sel hetkel siin,
me krüptimist poolt - ma ei tea, kas te näete, et - siin.
Nii, et see ei meeldi mulle tegelikult ettemääratud, ütleme, o läheb siia, t läheb siia,
läheb siia, ma läheb siia, o, h, i, o, t,, i. Sa ei saa seda teha.
Sa ainult suunata oma positsiooni märksõna
kui sa tead, et sa oled tegelikult saab olema krüpteerimise tegelik kirja.
Kas sellist mõtet?
Okei.
Nii lihtsalt mõned meeldetuletused.
Sa tahad teha kindel, et te ainult edasi järgmisele kirjale oma märksõna
kui märk teie polegi on kirjas.
Nii ütleme me oleme o.
Näeme, et järgmine sümbol i indeks polegi, on mitmeid, näiteks.
Siis me ei kanna j, indeks meie märksõna, kuni jõuame veel ühe kirja.
Jällegi, sa ka tahad teha kindel, et sa Kietaisu algusega märksõna
kui oled lõpuks see.
Kui näed siin me oleme i, järgmise üks peab olema o.
Nii et sa tahad leida mingi võimalus, et suudetakse Kietaisu algusega märksõna
iga kord, kui jõuad lõppu.
Ja nii uuesti, millist operaator on kasulik sel juhul pakkimiseks ümber?
Nagu loendamise maha näiteks.
[Üliõpilane] protsendimärk. >> Jah, protsendimärk, mis on moodul.
Nii mooduli tulevad mugav siin, kui soovite murrab üle indeks oma Ohai.
Ja just kiire vihje: Püüdke mõelda pakkimine üle märksõna natuke nagu lugedes maha,
kus, kas seal on 3 rühma, 4. isik,
nende arv, et nad ütlesid oli 4 mod 3, mis oli 1.
Nii et proovida ja mõelda seda.
Nagu te nägite valem, kus teil on CI ja siis pi kuid siis kj,
soovite veenduda, et teil jälgida neid.
Sa ei pea seda kutsuda i, ei pea te seda kutsuda j,
aga sa tahad teha kindel, et teil jälgida seisukohta, et sa oled oma polegi
samuti seisukohta, et sa oled oma märksõna
sest need ei pruugi saab olema sama.
Mitte ainult ei võtmesõna - see võiks olla täiesti erineva pikkusega kui teie polegi.
Ka teie polegi, on numbrite ja tähtede,
nii see ei lähe sobiks ideaalselt koos üles. Jah.
[Üliõpilane] Kas funktsioon muuta juhul?
Kas te muudate kapitalile? >> Jah, kindlasti on.
Saate vaadata läbi - ma usun, et see toupper, kõik 1 sõna.
Aga kui sa üritad salakiri asju ja säilitada teksti,
see on parim põhimõtteliselt olema eraldi juhtudel.
Kui see on suur, siis sa tahad suunata käesoleva
sest oma valem, kui sa vaatad tagasi, kui meil selline minna
vaheldumisi vahel ASCII viis esindavad numbrid
ja tegelik tähestikregistris, tahame veenduda
seal saab olema mingi muster, mida ei kavatse kasutada.
Teine märkus muster, tegelikult.
Sa lähed kindlasti tegelevad numbrid.
Püüa mitte kasutada magic numbrid, mis on näide stiilis.
Nii oletame, et soovite iga kord vahetuses midagi, mida soovite -
Okei, nii et vihje, teine ​​spoiler on, kui sa lähed tuleb suunata midagi
teatava summa, püüdke mitte esindama, et tegelik arv
vaid pigem proovida ja vaata, kas saad kasutada ASCII väärtus, mis liiki mõttekam.
Teine märkus: et me tegeleme valemid,
kuigi oma TF liiki tea, mis muster võite olla kasutades,
parima, et teie kommentaare omamoodi seletada loogika, nagu,
"Ma kasutan seda mudelit, sest ..." ja selline selgitada muster lühidalt oma kommentaare.
[See oli läbikäiguks 2] Kui ei ole muid küsimusi, siis ma lihtsalt jääda siia natuke.
Õnn oma pset 2: Crypto ja tänu tulevad.
[Üliõpilane] Aitäh. >> Aitäh.
[Media Ära intro]