[Powered by Google Translate] [Walkthrough - Problem Set 2] [Zamyla Chan - Harvard University] [To je CS50. CS50.TV] V redu. Pozdravljeni, vsi, in dobrodošli potopis 2. Prvič, rad bi vam čestital za dodelavo pset 1. Vem, da bi bilo malo težko za nekatere od vas, Lahko bi bil tvoj prvi računalniški program, ki ga je napisal, ampak ne pozabite, da je konec tega, ko pogledaš nazaj na koncu semestra, boste lahko ogledate na pset 1 in boste rekli: "Hej, sem lahko naredil, da v 5 minutah." Torej, vem in verjamem, da na koncu to boste zagotovo našli pset 1 zelo preprosta. Toda za zdaj je velik dosežek, in čestitke za pridobivanje storiti. No, tudi kratko opozorilo, preden smo prišli v mesa walkthrough. Želim samo, da bi hitro seznanil, da sem včasih ne bodo imeli dovolj časa med walkthroughs, da gredo skozi vsak posamezen način dela problema niz in ne samo morda osredotočiti na 1 ali 2 vrst izvedb, načinov, da bi lahko to naredili. Toda to ne pomeni, da ste prepovedano opravljati drugače. Pogosto so, tako kot pri računalništvu, številni načini počne stvari, in tako zagotovo vas prosimo, da uporabite drugačno vrsto rešitev, kot je bilo predstavljeno sem. [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] [Pset2 - 0. Oddelek vprašanja - 1. Cezar - 2. Vigenere] V redu. Torej, problem set 2: Crypto je smešna. Še enkrat, z vsakim pset boste začeli z delom vprašanj da se bo to potekalo v vaših delih s svojim namenskih sodelavec poučevanja. Mi ne bo šel skozi te čez walkthrough, vendar pa bo zagotovo pomagal izpolniti pset. Torej, prvi del problema niza je Cezar. In tako v Caesar bo nekdo mimo vas tipko z celo število, in boste šifriranje niz besedila, ki so vam in jih vrne šifrirano stvar. Če je kdo gledal A Christmas Story, tam je primer, da obstaja. Nato drugi del problema nizu je Vigenere, , ki je bolj napredna tehnika šifriranja. In tako bomo encipher del besedila, razen namesto s samo enim celo, da smo dejansko dogaja, da je kodiranje s ključno besedo, da bo uporabnik ki nam jih posredujete. Ok, prvo orodje v orodjarni danes se dejansko dogaja, da se posodabljanje aparata. Na tablo za razprave bi videli stvari, kot so: "Zakaj ne to delo?" "Zakaj ne 50 Pošlji delo?" in pogosto rešitev je dejansko samo za posodobitev naprave. In tako, če si teči v terminalsko okno v vašem aparata sudo yum-y - to je zastava rekel ja, posodobiti vse - posodabljanje, potem bo vaša naprava posodobiti če je to potrebno. In ne boli, če ste že na najnovejšo različico aparata. Potem bo samo, da ni na voljo nove posodobitve in lahko še naprej delajo skupaj. Ampak to je dobro, da tudi izvesti vsakič, ko odprete aparat zato, ker smo še vedno zelo veliko - Včasih, če pridemo v hrošča - to določitvi v napravi. Zato poskrbite, da imate najnovejšo različico naprave in zagon, da posodobitev tam. V redu. Zato, ker imamo opravka s črkami in spreminja, enciphering stvari, bomo resnično želimo, da postanejo najboljši prijatelji z našimi ASCII tabeli. Obstajajo številni tisti, na spletu, če boste našli. Mogoče celo sami. V bistvu, z vsako črko in vsako številko in vsak značaja je število, povezano z njimi, in zato je dobro, da vidijo svoje ASCII vrednosti ob dejanski pisma. To bo zagotovo vam pomagajo v problemski sklop. Ena stvar, ki me res pomagal v tem nizu je bil problem, da ga dejansko natisniti, in ko sem šel skozi, bi dejansko opirala na to, zapisali: "Če se to mora najprej priti do tja, potem ..." Nekako pripraviti nanj in ga označite, postanejo najboljši prijatelji s svojim ASCII tabeli. Potem imamo še nekaj drugih orodij, ki jih imamo na voljo. Tokrat namesto dejansko česar si za vse njihov prispevek bomo narediti kombinacijo. Mi jih bo prosil za nekaj vložek, vendar smo tudi dogaja, da samo uporabo argumente v ukazni vrstici. Torej, ko zaženete svoj program, ponavadi rečete. / Pozdravi, na primer, če je vaš program je bil hello.c. Ampak tokrat, namesto da samo pravim, da lahko preidemo od besed, argumentov kasneje. In tako bomo uporabljajo kakršne koli gredo, da bi nas kot njihov prispevek, kot tudi, tako premostili samo pozivanje za celo, ampak tudi z argumenti v ukazni vrstici. In potem bomo šli na poljih in godala, ki jih bomo uporabljali veliko, kot dobro. Tukaj je samo primer 1 mini ASCII tabeli. Kot sem rekel, vsak dopis v vrsto, in tako se seznanite s tem. To bo prišel prav. In kasneje, ko smo začeli delaš nekaj ASCIIMath ki se ukvarja s številkami - seštevanje, odštevanje jih - potem zagotovo dobra za sklicevanje na to tabelo. Torej, tukaj je primer šifra Caesar - nekaj, kar lahko ste igrali s. To je samo kolo. V bistvu je zunanji abeceda in potem je notranja abeceda. Torej, tukaj je primer šifra Caesar pač pa s ključi od 0. V bistvu je usklajena z A, B usklajena z B, vse tja do Z. Ampak potem rekli smo si želeli ključ 3, na primer. Potem bi se vrti notranje kolo, tako da zdaj usklajuje z D, itd In tako to je v bistvu tisto, kar smo naredili. Nimamo kolo, ampak kaj bomo narediti je, da naš program vrsta premik abecede z nami določenem številu. Torej, kot sem že dejal, bomo morali ukvarjati z argumenti ukazne vrstice kot tudi dobili celo število. Torej tako, da bo uporabnik zažene vaš program je Cezar z besedami. / Cesar in nato vnesete številko po tem. In ta številka predstavlja ključ, premik, kolikokrat jih boste lahko vrti notranje kolo vašega šifra Caesar. In tako si lahko ogledate tukaj primer. Če smo vnesli črke od A do L v naši šifra Caesar, potem bi bilo vnos D do O, saj to je vsak dopis premaknilo več kot 3-krat, tako kot na primer kolesa, ki sem ti pokazal. Torej, če ste navedli, na primer, to je CS50! potem bi tudi premakniti vse črke. In to je pomembna stvar, tako Cezarjem in Vigenere je, da bomo preskočiti vse non-pisem. Torej, vsi prostori, znaki, itd, številke, bomo obdržati isto. Mi smo le, da bo premik črke v tej zadevi. Torej, kot vidite na kolesu, imamo le črke, ki so na voljo za nas, Tako smo le želeli preusmeriti črke in šifriranje črk. Torej prva stvar, boste videli, da je uporaba za Cezarja pri reševanju iz 2 je teči Cezarja in nato vnesite številko, ko ga zaženete v terminalu. Torej, kaj moramo storiti, je, da bi nekako dobil to ključ in dostop do njega. In tako želimo, da bi nekako videli, da se bo v drugi vrstici ukaz argument. Prva je, da bo. / Caesar, naslednja pa se bo ključ številka. Torej, preden smo imeli int main (void), da začnemo C programe. Gremo nazaj plast lupine malo in dejansko videli, da namesto poteka v praznini na naš glavni funkciji imamo dejansko opraviti s 2 parametri. Imamo int argc imenom, nato pa niz nizov imenuje argv. Torej argc je celo, in predstavlja številne argumente prenesejo v svoj program. In potem argv je pravzaprav seznam opravili argumentov. Vse trditve so strune in tako argv predstavlja matriko, seznam, nizov. Spregovorimo o matrikah malo. Polja so v bistvu nova struktura podatkov. Imamo ints, ki smo jih podvoji, imamo strune, in zdaj imamo nize. Polja so podatkovne strukture, ki jih lahko imajo več vrednosti istega tipa, tako da v bistvu seznam kakršno koli želite. V bistvu, če si hotel seznam celih vse v 1 spremenljivke, potem bi ustvarili novo spremenljivko, ki je bil tipa int array. Torej, nizi so nič na indeks, kar pomeni, da je prvi element matrike je na indeksu 0. Če je matrika dolžine 4, kot v tem primeru, potem bi bil vaš zadnji del znaša indeks 3, kar je za 4 - 1. Torej, da bi ustvarili niz, bi naredil kaj takega. Povejte, da ste želeli dvojno matriko. To velja za vse vrste vrste podatkov, čeprav. Torej hočeš reči, dvojno matriko. Recimo, da želite, da ga pokličete predal. Tako kot bi morali inicializirati vsako drugo dvojno, lahko bi rekli, dvoposteljne in nato ime, a tokrat smo se oglatih oklepajev, , nato pa se bo število pa je dolžina niza. Upoštevajte, da v polji ne moremo nikoli spremeniti dolžino, tako da boste vedno imeli za opredelitev in izberete, koliko škatel, koliko vrednosti vašega niz se bo držati. Torej, da določijo različne vrednosti v vaši niz, ki ste ga boste uporabljali sintakso, kot vidite na diapozitivu. Imate predal indeks 0 bo nastavljena na 1,2, predal indeks 1 nastavljen na 2,4, itd Torej, zdaj, ko smo pregledali nizi malo, gremo nazaj na argc in argv. Vemo, da je zdaj argv nabor nizov. Torej, ko uporabnik preide v - pravijo, da teče program - pravijo. / zdravo David Malan, Kaj bo program naredil za vas je dejansko že prišli do kar argc in argv so. Torej vam ni treba skrbeti za to. Argc v tem primeru bi bila 3, ker vidi 3 različne besede, ločene s presledki. In tako je matrika v tem primeru, bi bil prvi indeks. / Zdravo, naslednjič David, naslednji Malan. Ali kdo takoj videti, kakšen je odnos med argv,  matrika, in argc je? Ja. Dobili bomo v to na primer v args.c. Poglejmo, če lahko izkoristimo razmerja med 2. Tukaj boste morda ugotovili, da v stroju privzeta aplikacija za odpiranje datotek. C je včasih Emacs. Vendar želimo, da se ukvarjajo z gedit, kaj lahko naredite, je, da lahko z desnim klikom na datoteko C, pojdite na Lastnosti, Odpri z in nato gedit, nastavljena kot privzeta, in zdaj naj program odpre v gedit namesto Emacs. Popolno. Torej, tukaj imam program, ki ga želim natisniti vsak argument v ukazni vrstici. Torej, ne glede uporabnik vložki, želim, da v bistvu vrniti nazaj k njim v novo vrstico. Torej, kaj je objekt, ki ga lahko uporabimo za ponovitev čez nekaj - nekaj, kar boste verjetno uporabljali v svoji pset 1? Če želite, da gredo skozi določeno število stvari? >> [Študent] Za zanke. Za zanke. Točno tako. Torej začnimo z za zanko. Imamo za int i = 0. Reciva začeli s standardno spremenljivko inicializacijo. Bom zapustiti pogoj za nabor in nato rekel, da sem + +, bo naredil stvari tam. V redu. Tako razmišljanje nazaj argv, če argv je seznam argumentov, izrečenih v programu in argc je število argumentov v programu, potem to pomeni, da je v bistvu argc dolžina argv, desno, ker se bo čim več argumentov kot vrednost argc. Torej, če želimo, da izbirate čez vsak element v argv, bomo želeli, da vsakič, ko dostopate do spremenljivke v argv na določen indeks. To lahko predstavimo s tem, kajne? Ta spremenljivka tukaj predstavlja poseben niz v tem primeru ker je nizov - zlasti niz v tej določenega indeksa. Kaj želimo narediti v tem primeru želimo, da ga natisnete, tako da recimo printf. In zdaj argv je niz, zato smo želeli dati to ogrado tam. Želimo novo linijo tako da bi bilo videti dobro. Torej, tukaj imamo za zanko. Nimamo stanje še ni. Torej, jaz se začne pri 0 in nato vsakič, ko se bo tiskanje določen niz v tistem indeks v matriki. Torej, če želimo ustaviti tiskanje elementov v matriki? Ko smo končali, kajne? Ko smo prišli do konca niza. Torej si ne želimo, da presega mimo dolžino niza, in smo že vemo, da ni treba, da dejansko aktivno kakšna dolžina je argv zato, ker je glede na nas, kaj je to? Argc. Točno tako. Zato želimo narediti to številko procesa argc krat. Nisem v pravi mapi. V redu. Zdaj pa ti argumenti. Ni napak, kar je super. Torej, kaj je šele teči argumentov. Kaj se to dogaja, da se vrnete k nam? To je le, da bo natisniti nazaj. "Ti vnesene argumentov v program, bom dal nazaj." Torej, recimo, želimo povedati argumentov potem foo bar. Torej jo natisne nazaj k nam. Vse v redu? Torej je primer, kako lahko uporabite argc in argv vedoč, da argc predstavlja dolžino argv. Poskrbite, da ne boste nikoli z dostopom do polja vrat 1 presega dolžino niza ker bo zagotovo C vpiti na vas. Dobili boste nekaj, kar ti segmentacije krivda, ki ni nikoli zabavno, v bistvu rekel, da si poskušate dostopiti do nekaj da ne obstaja, ne pripada tebi. Zato poskrbite, predvsem pa z nič-kazala, da ne želimo, da - Kot na primer, če imamo niz dolžine 4, da je matrika indeks 4 ne obstaja, ker smo začeli na 0, nič kazalo. To bo postal drugi narave, tako kot za zanke, ko začnemo na 0. Torej, samo da se vodijo v mislih. Vi ne želite, da vedno dostop do indeksa matrike, ki je izven vašega dosega. Tako lahko sedaj vidimo, kako smo lahko način dostopa V ukazni vrstici argumenti, ki so opravili noter Ampak kot ste videli niz je argv je dejansko nizov. Torej je dejansko ne celo še, vendar v Cezarja želimo ukvarjati s števil. Na srečo, obstaja funkcija ustvarili za nas, da lahko dejansko pretvorbo niza v celo število. Tudi tu smo se ne ukvarjajo s prispevki uporabnikov, kjer smo jih bo prisililo, za vnos tukaj za ključu, zato ne moremo dejansko reprompt in reči, "Oh, daj mi še eno celo število, recimo, če ni veljaven." Ampak mi še vedno potreba, da preveri pravilno uporabo. V Cezarja so dovoljena le prenesti v 1 številu, in tako so morali zagnati. / Cezar in potem imajo ti dati številko. Torej argc mora biti določeno število. Kaj več bi bilo, če bi morala opraviti vam. / Cezar in nato s tipko? Kaj je argc? >> [Študent] 2. >> Dva. Točno tako. Torej hočeš prepričati, da argc je 2. V nasprotnem primeru si v bistvu nočejo zagnati program. V glavnem je to funkcija, ki pravi, int main, Tako pa smo vedno v dobrem 0 prakse vračanja na koncu uspešnega programa. Torej, če, recimo, da vam 3 argumente v ukazni vrstici, namesto 2 ali vam 1, na primer, potem kaj boste storiti, je, da boste želeli preveriti, da in se nato vrnite 1 rekel, ne, ne morem nadaljevati s tem programom. [Študent], ne more biti prostora v vašem besedilu. >> Kako prosim? [Študent], ne more biti prostor, v besedilu, ki ga poskušate šifriranje. Ah! V zvezi z besedilom, ki ga poskušate šifriranje, da dejansko pride kasneje ko damo to besedilo. Torej, zdaj smo šele sprejema kot ukazne argumente dejansko število, dejanski premik za šifriranje Caesar. [Študent] Zakaj rabiš 2 v primerjavi s samo 1 argc? Tam je zagotovo številka 1. Prav. Razlog, zakaj potrebujemo 2 za argc namesto 1 Kajti, ko zaženete program in povedati. / Caesar ali. / zdravo, ki dejansko šteje kot argument ukazne vrstice. Torej, da že zavzema 1 in tako smo potem vnesla 1 dodatno. Torej ste dejansko vnesla niz v argument ukazne vrstice. Kaj želite narediti za Cezarja želimo ukvarjati s celo število, tako da lahko uporabite to funkcijo atoi. In v bistvu si ga prenese v nizu, nato pa vas bo vrnil nazaj celo število če je možno, da bi ta niz v celo število. Sedaj se spomniš, ko imamo opravka z printf ali GetString, stvari, kot je ta, vključimo knjižnice, ki so značilne za nas. Torej na začetku začnemo z znakom standardni tag nekaj I / O, h. Podobnega. No, atoi ni v enem od teh knjižnic, kaj moramo storiti, je, da moramo tudi pravo knjižnico za to. Torej priklicati nazaj v Walkthrough 1, kjer sem obravnaval ročno funkcijo. Vnesete človeka v vašem terminalu, nato pa sledi ime funkcije. In tako bo, da bi se celoten seznam njeno uporabo, vendar pa bo bruhati ki knjižnica, ki pripada. Torej bom pustil, da za vas, da uporabite ročni funkcije z atoi in ugotoviti, katera knjižnica morate vključiti, da bi lahko uporabite atoi funkcijo. Torej imamo ključ in zdaj gre za pridobivanje golo besedilo, in da dejansko gre za vnos uporabnika, kjer ste poziv. Obravnavali smo GetInt in GetFloat, zato v tem smislu bomo morali ukvarjati z GetString. Toda v tem primeru ni potrebno storiti vse storiti, medtem ko zanke ali preveriti. GetString bo zagotovo nam niz, in bomo za šifriranje, kar si nam daje. Torej lahko domnevamo, da so vse te uporabnike vnesenih nizov pravilna. Čudovito. Potem ko imaš ključ in ko imaš besedilo, Zdaj, kaj je ostalo se morate encipher the čistim. Tako hitro pokrijte žargona, je čistopis je tisto, kar vam daje uporabniku, in Zakrivena je tisto, kar se vrniti na njih. Torej strune, da bi lahko šel skozi dejansko dopisom z dopisom ker se moramo premakniti vsako pismo, Zavedamo se, da niti, če bi nekako Odlepite plasti, vidimo, da so samo res seznam znakov. Eden pride po drugi strani. In tako lahko ravnamo strune so nizi, ker so nizi znakov. Torej, da imate niz z imenom besedilo, in je v tem spremenljivo besedilo shranjeno To je CS50. Potem bi besedilo na indeksom 0 je kapital T, bi se indeks 1 h, itd In potem z nizi v argc primer v args.c, smo videli, da smo morali ponoviti čez niz in tako smo morali ponoviti od i = 0 do i je manj od dolžine. Zato moramo na nek način poskušal ugotoviti, kaj je dolžina niza je naš če hočemo, da izbirate nad njim. Na srečo še enkrat, da je funkcija ni za nas, čeprav je kasneje v CS50 boste zagotovo lahko izvajajo in da svoje funkcije da lahko izračunamo dolžino niza. Ampak za zdaj se bomo uporabljati dolžina niza, tako strlen. Podaš v nizu, nato pa se bo vrnil vam int, ki predstavlja dolžino vašega niza. Oglejmo si primer, kako bi morali biti sposobni ponoviti čez vsak znak v nizu in narediti nekaj s tem. Kaj želite storiti, je ponovitev čez vsak znak niza, in kaj želimo storiti, je, da smo natisni nazaj vsak znak 1 do 1 razen dodamo nekaj zraven nje. Torej začnimo z za zanko. Int i = 0. Bomo pustite prostor za stanje. Želimo, da izbirate, dokler ne pridete do konca niza, kajne? Torej, kaj potem funkcija nam daje dolžino niza? [Neslišno študentski odziv] To je dolžina argumentov ukazne vrstice. Toda za niz želimo uporabiti funkcijo, ki nam daje dolžino niza. Torej, to je dolžina niza. In tako potem moraš opraviti v nizu z njim. To mora vedeti, kaj je niz mora izračunati dolžino. Torej v tem primeru imamo opravka z niz-i. Čudovito. Torej, kaj želimo narediti, gremo printf. Zdaj želimo, da se ukvarjajo z znaki. Želimo, da natisnete vsak posamezen znak. Če želite, da se natisne plovec, bi lahko uporabite ogrado, kot f%. Z notr bi lahko uporabite% d. In tako podobno, z znakom uporabite% C reči, da bom lahko natisnete značaja , ki je shranjen v spremenljivko. Torej imamo to in kaj je dodati obdobje in prostor do nje. Kateri lik smo uporabljate? Bomo uporabljali ne glede na lik, da smo na niza. Torej bomo uporabljali nekaj z vrvico, vendar želimo, da se dostop do nekaterih znak tam. Torej, če je samo niz niz, potem kako dostopati do elementov polja? Imamo tiste oglate oklepaje, nato pa smo se indeks tam. Torej imamo oglate oklepaje. Naš indeks v tem primeru smo lahko samo jaz raba. Točno tako. Torej, tukaj smo govoriš bomo tiskate znak, ki mu sledi pika in prostor, in da je lik se bo i-črka v naši niza s. Grem rešiti da. Ok. Zdaj bom teči niz dolžine. Tako smo imeli niz imenovano OMG, in zdaj je še poudaril. Prav, recimo, da smo dejansko želijo, da bi dobili niz od uporabnika. Kako lahko to storimo? Pred tem, kako smo prišli int? Rekli smo GetInt, kajne? Vendar to ni int, tako da je GetString. Naj bo dolžina niza. Tukaj nismo vnese poseben poziv. Torej, ne vem. Bom dal moje ime tu in potem sem lahko naredite eno od teh stvari kjer sem dodeliti besedo za vsako črko ali kaj podobnega. Kul. Torej, to je dolžina niza. Torej smo spet na cesarja. Imamo nekaj orodij, o tem, kako smo Ponovil v nizu, kako dostopati do vsakega posameznega elementa. Sedaj lahko vrnemo k programu. Kot sem že omenil, v ASCII tabeli, vaš najboljši prijatelj, boste videli številke, ki so povezane z vsako črko. Torej, tukaj pravijo naši čistopis je, da sem vrti! Nato vsak od teh znakov se dogaja, da imajo številne in ASCII vrednost, povezano z njim, tudi opuščaj, tudi prostor, tudi klicaj, tako da boste želeli obdržati to v mislih. Tako pravijo naši ključ, da si z njihovo trditev ukazni vrstici je 6. To pomeni, da v prvem pismu, ki sem jaz, ki predstavlja 73, želite vrniti na njih ne glede na pismo predstavlja ASCII vrednost 73 + 6. V tem primeru bi bilo 79. Zdaj želimo, da se premaknete na naslednji znak. Torej bo naslednja v indeksu 1 čistim je opuščaj. Ampak ne pozabite, smo le želeli encipher črke. Zato želimo zagotoviti, da Opuščaj dejansko ostane enak, da ne bomo spremenili od 39 do 45, je karkoli. Želimo, da ostane kot opuščaj. Zato želimo, da se spomnimo samo encipher črke ker želimo, da vse ostale simbole, da ostajajo nespremenjene v našem programu. Še ena stvar, ki jo želim je, da ohrani črk. Torej, če imate veliko črko, bi morala ostati kot velikimi črkami. Lowercases mora ostati kot male. Torej je nekaj uporabnih funkcij, da bi lahko obravnaval le enciphering črk in da ohranjanje kapitalizacijo stvari Je isalpha, isupper, islower funkcije. In tako so funkcije, ki vrnejo vam Boolova vrednost. V bistvu, resnična ali neresnična. Je to velika črka? Je to alfanumerično? Je to pismo, v bistvu. Torej, tukaj so 3 primeri, kako bi lahko uporabite to funkcijo. V bistvu, bi lahko preizkusijo, ali vrnjeno vrednost, ki vam jih ta funkcija drži ali ne temelji na tem vhodu. Ali ne encipher kaj ali je šifra ali pa se prepričajte, da je to velika črka, itd [Študent] moreš razložite malo več, in kako jih uporabiti? >> Ja, zagotovo. Torej, če se ozremo nazaj, tukaj imamo kapital I, kajne? Tako smo vedeli, da sem gre O, saj sem + 6 je O. Vendar želimo zagotoviti, da O se bo kapital O. Torej v bistvu, da je nekako bo spremenilo naš način. Torej, ali je velike ali ne bo nekako spremeniti tako, da imamo opravka z njim. Torej, če bomo uporabili isupper funkcijo na posameznem indeksu, Tako isupper ("I"), ki vrne za nas pravi, da vemo, da je to zgornji del. Torej temelji na tem, kasneje pa bomo šli v formulo da boste uporabljali za premik stvari v cesarja, Torej v bistvu, da se bo nekoliko drugačna formula, če je velika črka za razliko od male črke. Smiselno? Ja. Brez skrbi. Govoril sem nekaj o dodajanju 6 k dopisu, ki pa ni povsem smiselna razen, ko smo nekako razumemo, da ti znaki so nekako zamenjati z števil. Kaj moramo storiti, je, da smo nekako uporaba implicitne litje. Šli bomo v vlivanje malce kasneje, če vzameš vrednost in jo spremeniti v drugo vrsto kot je prvotno bil. Ampak s tem pset bomo lahko nekako izmenično uporabo znakov in njihove ustrezne vrednosti celoštevilskih. Torej, če ste le Obložite znak le z enojnih narekovajih, potem boste lahko delali pri njem cela števila, ki se ukvarjajo z njim kot celo število. Torej kapital C se nanaša na 67 let. Male črke f nanaša na 102. Še enkrat, če želite izvedeti, te vrednote, pogled na vašo ASCII tabeli. Torej, pojdimo na nekaj primerov, kako bi lahko za odštevanje in seštevanje, kako lahko dejansko res deluje s temi znaki, ki jih uporabljajo izmenično. Jaz pravim, da ASCIIMath se bo za izračun dodatka znak na celo in nato prikaže posledičnega učinka, kakor tudi nastalega ASCII vrednost. In tako sem jaz pravim - Bomo se ukvarjajo s tem delom kasneje - ampak v bistvu, mislim, da bi si rekel teči ASCIIMath skupaj s ključem, in jaz pravim, da je ta ključ se bo število s katerimi bomo dodali ta znak. Torej, tukaj opazil, da odkar sem zahtevna ključ, ker sem zahtevala, da oni bi mi 1 stvar, Želim samo, da sprejme. / Asciimath in ključ. Torej bom zahteval, da je argc enaka 2. Če ni, potem se bom vrnil 1 in program se bo zaprl. Zato pravim, da je ključ ne bo v prvi vrstici ukaz argument, da bo v drugo, in kot vidite tukaj, Grem bi se to spremenilo v celo število. Nato bom določil znak, da je r. Obvestilo, da je tip spremenljivke chr je dejansko število. Tako, da sem lahko uporabila r kot celo število, je, da jo obdaja s temi enojnih narekovajih. Torej nazaj na našo printf izjavo, kjer imamo ogrado za znak in potem ogrado za celo število, znak je predstavljen z chr, in celo ključnega pomena. In tako potem bomo v rezultat dodamo 2 skupaj. Torej bomo dodali r +, kar je ključnega pomena, in potem bomo natisnete rezultat tega. Torej bi asciimath. To je odvisno od dneva, tako da je šele teči asciimath. Oh, ampak glej, da ne storiti ničesar, saj nismo dejansko izročiti to tipko. Torej, ko je pravkar vrnil 1, naša glavna funkcija je pravkar vrnil nazaj k nam. Torej, potem pa preide na ključ. Nekdo mi številko. >> [Študent] 4. 4. Ok. Torej r povečala za 4 se dogaja, da nam v, ki ustreza ASCII vrednosti 118. Torej je nekako smiselno, da se - Pravzaprav, lahko vas vprašam, kaj misliš ASCII vrednost r je, če r + 4 je 118? Potem ja, r 114. Torej, če pogledaš na ASCII tabele pa, seveda dovolj, boste videli, da r predstavlja 114. Torej sedaj, ko vemo, da lahko dodamo, da cela znakov, se to zdi precej preprost. Mi smo le, da bo ponovitev čez niz, kot smo videli na primeru prej. Preverili bomo, če je to pismo. Če je tako, potem ga bomo preusmeriti na kateri koli ključ. Precej preprosto, razen če vam je všeč to, da, boste videli, da z, ki jo zastopa 122, potem bi vam drugačen značaj. Dejansko smo želeli, da ostanejo v naši abecedi, kajne? Zato moramo ugotoviti, na nek način nekakšno ovije okoli. Ko prispete Zed in želite povečati določeno število, ne želite iti v preko ASCII abecedi delu; želite zaviti nazaj vse do A. Toda ne pozabite, da ste še vedno ohranja zadevo. Torej vedo, da pisma ne more postati simboli tako kot simboli ne bodo spreminjali, kot dobro. V zadnjem pset vam zagotovo ne bi bilo treba, ampak možnost je bila, da izvajajo svoje pohlepno pset s pomočjo modula funkcijo. Ampak zdaj smo dejansko dogaja, da je treba uporabiti modul, tako da pojdiva nad tem malo. V bistvu, če imate x, y po modulu, ki vam preostanek x, deljena z y. Tukaj je nekaj primerov tukaj. Imamo 27% 15. V bistvu, če odštejemo 15 od 27 tolikokrat, kot je mogoče, ne da bi negativno potem dobiš 12 levo čez. Torej, to je nekako kot v matematičnem smislu, ampak kako lahko dejansko uporablja? To bo koristno za naše wrapover. Za to, recimo, da sem prosil, da vsi delimo v 3 skupine. Včasih to naredite v skupinah in česa podobnega. Povejte mi rekel: "V redu, želim vam vsem, da se razdeli na 3". Kako bi to naredil? [Neslišno študentski odziv] Ja, točno. Štetje off. Ok. Kaj je dejansko naredil. Ali želite začeti? [Študenti štetje off] 1, 2, 3, 4. Vendar ne pozabite ... >> [Študent] Oh, oprostite. To je res dobra točka. Rekel si, 4, vendar smo dejansko želijo, da rečeš 1, saj smo le želeli 3 skupine. Torej, kako - Ne, to je res dober primer, saj je potem, kako bi lahko rekli 1? Kakšna je povezava med 4 in 1? No, 4 mod 3 je 1. Torej, če boste še naprej, bi si 2. Torej imamo 1, 2, 3, 1, 2. Še enkrat, ti si dejansko 5. oseba. Kako veste, da pravijo, 2 namesto 5? Pravite, 5 mod 3 je 2. Rad bi videl, koliko skupine 3 so ostala, potem kar bi jaz In tako je, če bomo nadaljevali po celotnem prostoru, potem bomo videli, da smo vedno dejansko uporabo mod funkcijo za sebe do vrste računa off. To je bolj neke vrste oprijemljiv primer, kako lahko uporabite modulo ker sem prepričan, večina od nas verjetno šli skozi ta proces kjer smo imeli za štetje dol. Vsa vprašanja v zvezi modulu? To bo zelo pomembno, da razumemo koncepte to, zato želim, da poskrbite, da boste vi razumeli. [Študent] Če ni ostalo, ne da bi vam dejansko število? Če bi ena od prvih 3 od njih to storil, bi jih dal, kar dejansko so, ali bi jo jim dal [neslišno] >> To je dobro vprašanje. Če ni ostalo za modulo - tako da imate 6 mod 3 - ki dejansko vam daje nazaj 0. O tem bomo govorili, da je malce kasneje. Oh ja, na primer, 3. oseba - 3 mod 3 je dejansko 0, vendar je rekla 3. Torej, to je nekako kot notranje ulova, na primer, kot je v redu, če je mod 0 potem bom, da je 3. oseba. Ampak bomo dobili v naravi, kako bi radi, da se ukvarjajo s tem, kaj je 0 kasneje. Torej, zdaj smo nekako imajo način kartiranja Zed na pravem pismu. Torej, zdaj smo šli preko teh primerov, smo nekako vidim, kako bi lahko delo Cezar. Vidiš 2 abeced in potem videli, da premikajo. Torej, kaj je poskusil izraziti, da v smislu formule. Ta formula je dejansko dal v spec, Ampak kaj je nekako spregleda, kaj pomeni vsaka spremenljivka. Naš končni rezultat bo Zakrivena. Torej, to pravi, da je i-narava Zakrivena bo ustrezala i značaja čistim. To je smiselno, saj želimo vedno podloga te stvari. Torej bo v i-lik Zakrivena plus k, ki je naš ključ - da ima smisel - in potem imamo to mod 26. Spomni se, ko smo imeli Zed nismo želeli priti v naravo, zato smo želeli, da ga mod in nekako zaviti okoli abecede. Po Zed bi šel za, b, c, d, dokler imaš na pravo številko. Torej vemo, da je Zed, če bi + 6, ker nam f po Zed prihaja, b, c, d, e, f. Torej ne pozabite, da se prepričam, da je Zed + 6 se dogaja, da nam f. V ASCII vrednosti z je 122 in 102 f. Zato moramo najti način, da postane naš Cezar formule nam 102 po zaužitju na 122. Torej, če smo le uporablja to formulo, je ('z' + 6) 26%, ki dejansko vam daje 24 ker 122 + 6 je 128, 128% 26 vam 24 ostanek. Ampak to v resnici ne pomeni f. To je definitivno ni 102. To tudi ni 6. črka v abecedi. Torej je očitno, da moramo imeti nek način poteg to malo. V okviru rednega abecede, vemo, da je z 26. pismo in f 6. mesto. Vendar pa smo v računalništvu, tako da bomo indeksa na 0. Torej, namesto da se je število z 26, bomo rekli, da je število 25 ker je 0. Torej, zdaj pa uporabljajo to formulo. Imamo z zastopniki 25 + 6, ki vam daje 31. In 31 mod 26 vam ponuja 5 kot preostali. To je odlično, saj vemo, da je f 5. črka v abecedi. Ampak to še ni f, kajne? Še vedno ni 102. Torej za to pset bo izziv poskuša ugotoviti povezave med pretvorbo med temi ASCII vrednosti in abecedni indeks. V bistvu, kaj boste želeli storiti, da želite začeti z ASCII vrednostmi, potem pa želite, da nekako prenesti v indeksu abecednem nato pa izračunati, koliko dopis mora biti - v bistvu, kakšna je njegova abecedni indeks z šifra učinka - da se nato prevedejo nazaj v ASCII vrednosti. Torej, če ste potegniti svoj ASCII tabelo, nato pa poskusite najti odnosov med, recimo, 102 in 5 ali 122 in 25. Smo gotten naš ključ od argumentov v ukazni vrstici, smo gotten čistim, smo ga šifrirane. Zdaj je vse, kar nam je ostalo storiti je, da ga natisnete. Mi lahko storite nekaj različnih načinov. Kaj lahko storimo je dejansko tiskanje sproti. Kot smo Ponovil nad znake v nizu, Lahko bi preprosto samo tiskanje prav takrat, ko smo ga izračunali. Lahko pa si jo tudi shranite v matriko in imajo niz znakov in na koncu Ponovil v tej celotni niz in ga natisnite. Torej imate nekaj možnosti za to. In ne pozabite, da je% d se bo ograda za tiskanje znak. Torej imamo Cezar, zdaj pa gremo na Vigenere, , ki je zelo podoben cesarju, vendar le nekoliko bolj zapleteno. Torej v bistvu z Vigenere se boste mimo ključno besedo. Torej, namesto s številkami, boste imeli niz, in tako, da se dogaja, da deluje kot ključno besedo. Potem pa, kot ponavadi, boste dobili poziv za vrvico od uporabnika in ga encipher in potem jim hrbet Zakrivena. Torej, kot sem rekel, da je zelo podoben cesarju, razen namesto premika po določenem številu, število se dejansko dogaja, da spremeni vsakič od značaja značaja. Ki bi predstavljal dejanskega števila premik, to je zastopnik tipkovnice črkami. Torej, če boste vnesli v premik, na primer, potem bi to ustreza premiku 0. Torej je spet vrnil v abecedni indeks. Kaj bi lahko bilo koristno, če ste videli, da smo dejansko ukvarjajo z ASCII vrednostmi kot tudi črke, kot tudi indeks po abecednem, Mogoče je bil ali bi svoj ASCII tabelo, ki prikazuje abecedni indeks od 0 do 25, A do Z, in ASCII vrednosti, tako da boste lahko videli nekakšen odnos in skico, in poskusite najti nekaj vzorcev. Podobno, če ste bili premika na primer z določeno f - in to je bodisi male ali velike črke f - potem bi to ustreza 5. Ali smo dobro, tako daleč? Formula za Vigenere je malo drugačen. V bistvu, boste videli, da je tako kot Cezar, razen namesto samo k imamo k, indeks j. Obvestilo, da mi ne uporabljam, ker v bistvu dolžino ključno besedo ni nujno, koliko našega Zakrivena. To bo malo bolj jasno, ko vidimo primer, da imam malo kasneje. V bistvu, če zaženete program s ključno besedo ohai, potem to pomeni, da vsakič, ohai se bo tvoja izmena. Torej glede na kakšnem položaju ste v vašo ključno besedo, boste premakniti vaš značaj nekaterih Zakrivena za ta znesek. Še enkrat, tako kot Cezar, želimo zagotoviti, da bomo ohranili kapitalizacijo stvari in smo samo encipher črke, ne znakov ali presledkov. Torej, pogled nazaj na cesarja o nalogah, ki ste jih uporabili, način, da ste se odločili, kako se premika stvari in se uporablja, da je vaš program tukaj. Torej map tole. Imamo čistim, da smo gotten od uporabnika iz GetString Ta pravi ... je CS50! Potem smo imeli ključno besedo za ohai. Prve 4 znaki so zelo preprosta. Vemo, da je T se bo premaknilo zo, potem h se bo preusmerila s H, I, se bo preusmerila s. Tukaj lahko vidite, da predstavlja 0, tako da potem končno vrednost je pravzaprav ravno isto črko kot prej. Nato se je premaknilo z i. Ampak potem imate te dobe tukaj. Ne želimo, da encipher, da je tako, potem ne bomo spremenili z nobenim in samo izpisal obdobje nespremenjeno. [Študent] Ne razumem, kako veš, da je ta zamakne - Kje si - >> Oh, oprostite. Na vrhu tukaj vidite, da je argument v ukazni vrstici ohai tukaj da se dogaja, da je ključna beseda. In tako v bistvu, ste kolesarjenje skozi znakov ključne besede. [Študent] Torej o se bo prestavljanje enako - Torej, o ustreza določenemu številu v abecedi. [Študent] desno. Ampak kje si dobil del od CS50? Oh. To je v GetString, kjer ste kot: »Daj mi niz za kodiranje." [Študent] Ti boš dal ta argument za premik z in potem boš prosil za svoj prvi niz. >> Ja. Torej, ko zaženete program, se bomo, da vključuje ključne besede v svojih trditvah v ukazni vrstici, ko ga zaženete. Potem, ko ste preverili, da ste dejansko dal 1 in ne več, ne manj, potem boš jih spodbudili za niz, rekel: "Daj mi niz." Torej, to je, če je v tem primeru oni dal to ... je CS50! Torej boste uporabili in uporabljajo ohai in izbirate več. Obvestilo, da je tu preskočijo šifriranje dobe, ampak glede na naš položaj za ohai, naslednji smo o. V tem primeru je to malo težje videti, ker to je 4, tako da je še vedno malo. Samo držijo z mano. Potem imamo i in S, ki se jih nato prevedli zo in h oz. Potem imamo prostor, zato pa vemo, da ne bomo encipher prostore. Ampak obvestilo, da namesto da bi šel na tem mestu prav tu, smo šifriranje jih - ne vem, če lahko vidite, da je - prav tukaj. Torej to ni všeč, ga lahko dejansko vnaprej, recimo, o gre tukaj, h gre tukaj, gre tukaj, i gre tukaj, o, h, i, o, h, i. Saj ne delaj tega. Vi samo premik svoj položaj na ključne besede če veste, da ste dejansko dogaja, da se dejansko šifriranje pismo. Ali to nekako smiselno? Ok. Torej je le nekaj opozoril. Hočeš, da poskrbite, da boste le napreduje v naslednjo črko v vaše ključne besede Če lik v vašem čistim je pismo. Tako pravijo, da smo na o. Opažamo, da je naslednji znak, indeks i od čistim, je številka, na primer. Potem ne bomo vnaprej zj, indeks za našo ključno besedo, dokler ne bomo dosegli še eno pismo. Še enkrat, boste prav tako želeli, da poskrbite, da boste blatnikov do začetka ključne besede ko si na koncu. Če vidite tukaj smo na i, naslednji pa mora biti o. Torej hočeš najti način, da lahko wraparound na začetek vaše ključne besede Vsakič, ko pridete do konca. In tako spet, kakšen subjekt je koristno, v tem primeru za ovije okoli? Tako kot pri štetju off primer. [Študent] znak za odstotek. >> Ja, znak za odstotek, kar je modula. Tako bo modulo prišel prav tukaj, če želite zaviti v indeks v vašem ohai. In ravno hiter namig: Misli na zavijanje po ključnih besedah ​​nekoliko podoben štetje off, če, če obstaja 3 skupine, 4. oseba, Njihovo število se je, da so rekli, da je 4 mod 3, ki je bil 1. Torej, poskusite in si o njej mislijo tako. Kot ste videli v formuli, kjer imate ci, nato pa pi potem pa kJ, hočeš prepričati, da si beležite teh. Ni vam treba poklicati, da sem se, da vam ni treba, da ga pokličete j, vendar želite, da poskrbite, da boste spremljali položaj, da ste v vašem hotelu čistim kot tudi stališča, da si na na vašo ključno besedo ker tisti, ki niso nujno, bo isto. Ne le, da je ključno - da bi se lahko popolnoma drugačen od vašega dolžina čistim. Tudi vaš čistopis, so številke in črke, tako da ne bo popolnoma ujemajo skupaj. Da. [Študent] Ali obstaja funkcija, da spremenite zadevo? Lahko spremenite v prestolnici? >> Ja, prav gotovo. Si lahko ogledate - Verjamem, da je vse, toupper 1 besedo. Toda, ko ste poskušali šifra stvari in ohraniti besedilo, v bistvu je najbolje, da imajo ločene primere. Če je velika črka, nato pa želite preusmeriti s tem ker je v svoji formuli, ko pogledam nazaj, kako moramo nekako poti izmenično med ASCII način predstavlja število in dejansko abecedni indeks, želimo zagotoviti tam bo še kakšen vzorec, da boste za uporabo. Še ena opomba na vzorcu, pravzaprav. Ti boš gotovo se ukvarjajo s številkami. Poskusi, da ne uporabljajo magične številke, ki je primer slog. Torej, da želite vsak nekaj časovnega zamika po všeč - V redu, torej namig, še spojler, ko boš lahko premika nekaj do določenega zneska, poskusite ne predstavlja, da z dejanskim številom ampak poskusiti in videli, če lahko uporabite ASCII vrednost, ki bo nekako bolj smiselno. Še ena opomba: Zaradi imamo opravka s formulami, čeprav bo vaš TF nekako vem, kaj bi si lahko vzorec uporabe, najbolje, da v svoje vrste pripombah pojasnjuje logiko, kot so, "Jaz sem z uporabo tega vzorca, ker ..." in nekako razložiti vzorec jedrnato v vaših komentarjih. [To je potopis 2] Če ni katera koli druga vprašanja, bom samo ostati tukaj malo. Veliko sreče z vašo pset 2: kripto in hvala za prihod. [Študent] Hvala. >> Hvala. [Media trenutno intro]