[Powered by Google Translate] [Walkthrough - Ongelma Set 2] [Zamyla Chan - Harvardin yliopisto] [Tämä on CS50. CS50.TV] Selvä. Hei, kaikki, ja tervetuloa läpikäynti 2. Ensinnäkin haluan onnitella teitä viimeistelyyn PSET 1. Tiedän, että se olisi voinut hieman kova joillekin teistä, voinut ensimmäinen tietokoneohjelma, kirjoitit, mutta vain muistaa, että lopussa, kun katsotte taaksepäin lopussa lukukauden, voit tarkastella PSET 1 ja sanot: "Hei, olen voinut tehdä sen 5 minuutissa." Niin tietää ja luottaa, että lopussa tämän sinun ehdottomasti löytää PSET 1 melko yksinkertainen. Mutta nyt se on valtava saavutus, ja onnittelut saada tehdä. Nyt myös nopeasti huomata ennen kuin pääsemme lihaa läpikäynti. Haluan vain tehdä nopeasti huomata, että joskus ei ole tarpeeksi aikaa aikana walkthroughs käydä läpi jokaisen tapa ongelman sarja ja mieluummin vain ehkä keskittyä 1 tai 2 sellaista toteutuksia, tapoja, että voisit tehdä tämän. Mutta se ei tarkoita sitä, että sinun on kielletty tekemästä sitä toisella tavalla. On usein, kuten tietotekniikassa, lukuisia tapoja tehdä asioita, ja niin varmasti vapaasti käyttää eri tyyppinen ratkaisu kuin olen voinut esittää. [PSET 2: Crypto - Zamyla Chan - zamyla@cs50.net] [Pset2 - 0. § kysymyksiä - 1. Caesar - 2. Vigenere] Selvä. Joten ongelma asettaa 2: Crypto on hauska yksi. Jälleen jokaisen PSET voit aloittaa osa kysymyksistä että menee toteutetaan Osioidesi teidän määritetty opetuksen stipendiaatti. Emme mene läpi nämä yli walkthrough, mutta he varmasti auttavat sinua täyttämään PSET. Joten ensimmäinen osa ongelmaa joukko on Caesar. Ja niin Caesar joku välittää sinulle avaimen kokonaisluku, ja voit salata merkkijonoa, he tarjoavat sinulle ja antaa heille takaisin salattu asia. Jos joku katseli Christmas Story, siellä esimerkki, että. Sitten toinen osa ongelmaa joukko on Vigenere, joka on kehittyneempi salaustekniikka. Ja niin me aiomme salakoodaus palan tekstiä, paitsi sen sijaan vain yksi kokonaisluku, olemme todella menossa koodaamaan sitä kanssa avainsanan, että käyttäjä antaa meille. Okei, joten ensimmäinen työkalupaletissa tänään todella aiotaan päivittää laitteen. On keskustelualueen näkisimme asioita, kuten "Miksi ei tätä työtä?" "Miksi ei toimita 50 työtä?" ja usein ratkaisu on oikeastaan ​​vain päivittää laitteen. Ja niin jos vain ajaa terminaalin ikkunan laitteesi sudo yum-y - se lippu sanoa kyllä, päivittää kaiken - update, sitten laitteesi päivittää jos tarvetta on. Ja se ei satu, jos olet jo viimeisimmässä versiossa laitteen. Sitten se vain sanoa ei uusia päivityksiä saatavilla ja voit jatkaa työskentelyä pitkin. Mutta tämä on hyvä toteuttaa edes joka kerta, kun avaat laitteen koska olemme vielä hyvin paljon - joskus jos tulemme bug - kiinnittämällä se laitteeseen. Joten varmista, että sinulla on uusin versio laitteen ja ajaa se päivittää siellä. Selvä. Joten koska olemme tekemisissä kirjeitä ja muuttuvat, salakoodausohjelmia asioita, aiomme todella haluat tulla parhaita ystäviä meidän ASCII kaavio. On olemassa lukuisia niitä verkossa, jos löydät. Ehkä jopa tehdä omia. Periaatteessa jokaisen kirjaimen ja jokainen numero ja jokainen merkki on olemassa useita niihin liittyviä, ja niin se on hyvä nähdä niiden ASCII arvot rinnalla varsinainen kirjain. Se varmasti auttaa sinua ongelman asetettu. Yksi asia, joka todella auttoi minua tämän ongelman setti oli todella tulostaa sen, ja kun olin menossa läpi, haluaisin todella tehdä sitä, kirjoittaa, "Jos tämä on mennä sinne, niin ..." Kind of piirtää sitä ja merkitse se ylös, tulee parhaat ystävät teidän ASCII taulukon. Sitten meillä on muutamia muita välineitä käytettävissämme. Tällä kertaa sen sijaan todella kysymättä käyttäjältä kaikkien niiden panos aiomme tehdä yhdistelmä. Menemme kysymään niitä joitakin tulon, mutta olemme myös menossa vain käyttää komentoriviargumentteja. Joten kun he hoitavat ohjelma, yleensä sanot. / Hei, esimerkiksi Jos ohjelma oli hello.c. Mutta tällä kertaa, eikä vain sanoa, että ne voi laittaa sanoja, perusteluja jälkikäteen. Ja niin me aiomme käyttää mitä he kulkevat sisään meidät heidän kannanottonsa samoin, joten siirtymässä vain kehotukset kokonaisluku myös komentorivin argumentteja. Ja sitten me mennä taulukot ja merkkijonot, jotka Käytämme paljon samoin. Tässä on vain esimerkki 1 mini ASCII kaavio. Kuten sanoin, jokainen kirjain vastaa numero, ja niin tutustu siihen. Se on kätevää. Ja myöhemmin, kun alkaa tehdä joitakin ASCIIMath tekemisissä numerot - lisäämällä, vähentämällä niistä - niin varmasti hyvä viitata tähän kaavioon. Joten tässä on esimerkki Caesar cipher - jotain, olet ehkä pelataan. Se on vain pyörän. Pohjimmiltaan on ulompi aakkoset ja sitten on sisäinen aakkoset. Joten täällä on esimerkki Caesar cipher mutta avaimen 0. Pohjimmiltaan on linjassa A, B on linjassa B, aina jopa Z. Mutta sitten sanoa halusimme avain 3, esimerkiksi. Silloin olisimme pyörittää sisemmän pyörän niin että nyt osuu D jne. Ja niin tämä on lähinnä mitä aiomme tehdä. Meillä ei ole pyörää, mutta mitä me aiomme tehdä, on tehdä meidän ohjelma Tällainen siirtää aakkoset mukaamme tietty määrä numeroita. Niin kuin sanoin, aiomme olla tekemisissä komentoriviargumentteja sekä saada kokonaisluku. Niin siten, että käyttäjä ajaa Caesar ohjelma sanomalla. / Caesar ja sitten syöttämällä numero jälkeen. Ja että numero on avainasemassa, muutos, kuinka monta kertaa aiot pyöriä sisemmän pyörän oman Caesarin salakirjoitus. Ja niin näet tästä esimerkki. Jos me tulleet kirjeet ja L meidän Caesar cipher, Sitten se syöttää D kautta O koska se on jokaisen kirjaimen siirtynyt 3 kertaa, kuten esimerkiksi pyörä näytin sinulle. Joten jos tuli esimerkiksi tämä on CS50! sitten se myös siirtää kaikki kirjaimet. Ja se on tärkeä asia sekä Caesar ja Vigenere on, että me aiomme ohittaa ei-kirjaimia. Joten välilyöntejä, merkkejä, jne., numerot, aiomme pitää ne samat. Olemme vain menossa siirtää kirjaimet tässä tapauksessa. Joten kuten näette pyörän, meillä on vain kirjaimia käytettävissämme, joten me vain haluamme siirtää kirjaimia ja salaa kirjeitä. Joten ensimmäinen asia tehdä, näit että käyttö Caesar Harjoitus 2 on ajaa keisarille ja kirjoita numero, kun ajaa sen pääte. Joten mitä meidän täytyy tehdä on jotenkin saada että avain ja käyttää sitä. Ja niin me haluamme jotenkin nähdä se tulee olemaan toinen komentorivillä. Ensimmäinen tulee olemaan. / Caesar, ja seuraava tulee olemaan keskeinen numero. Joten ennen meillä oli int main (void) aloittaa meidän C-ohjelmia. Aiomme Taitat kerros hieman ja todella nähdä, että sen sijaan kulkevat mitätön meidän päätehtävä olemme todella tekemisissä 2 parametrit. Olemme int nimeltä argc ja sitten joukko merkkijonoja kutsutaan argv. Joten argc on kokonaisluku, ja se edustaa useita väitteitä välitetään sisään ohjelmaan. Ja sitten argv on itse asiassa luettelo argumenttien. Kaikki argumentit ovat merkkijonoja, joten argv edustaa joukko, lista, merkkijonojen. Puhutaanpa ryhmät hieman. Paneelit ovat pohjimmiltaan uusi tietorakenne. Olemme ints, olemme kaksinkertaistuu, meillä on jouset, ja nyt meillä on taulukot. Paneelit ovat tietorakenteita, jotka voivat olla useita arvoja samaa tyyppiä, niin olennaisesti, lista mitä tyyppiä haluat. Pohjimmiltaan, jos halusi kokonaislukujen lista kaikki 1 muuttuja, niin voisitte luoda uusi muuttuja, joka oli tyyppiä int array. Joten paneelit ovat nolla-indeksoitu, eli ensimmäinen alkiota on indeksi 0. Jos matriisi on pituudeltaan 4, kuten tässä esimerkissä, sitten viimeinen elementti olisivat indeksi 3, joka on 4-1. Joten luoda array, voisitte tehdä jotain tällaista. Sano halusitte kaksinkertainen array. Tämä pätee tahansa tietotyyppi, tosin. Sano haluat double array. Sano haluat soittaa sitä postilaatikkoon. Aivan kuten te alustaa muita kaksinkertainen, sanoisit kaksinkertainen ja sitten nimi, mutta tällä kertaa laitoimme hakasulkeissa ja sitten numero tulee olemaan pituus jono. Huomaa, että ryhmät emme voi koskaan muuttaa pituutta, joten sinulla on aina määritellä ja valita kuinka monta laatikkoa, kuinka moni arvostaa array aikoo järjestää. Joten asettaa erilaisia ​​arvoja matriisin, aiot käyttää seuraavaa syntaksia, kuten näet dian. Sinulla on postilaatikko indeksi 0 arvoksi tulee 1,2, postilaatikko indeksi 1 sarja 2,4, jne. Joten nyt olemme tarkastaneet taulukot vähän, mennään takaisin argc ja argv. Tiedämme, että argv on nyt joukko merkkijonoja. Joten kun käyttäjä kulkee - sanovat he käynnissä ohjelma - he sanovat. / Hei David Malan, mitä ohjelma tekee sinulle jo todella keksiä mitä argc ja argv ovat. Joten sinun ei tarvitse huolehtia siitä. Argc tässä tapauksessa olisi 3 koska se näkee 3 erillistä sanat erotetaan toisistaan ​​välilyönnillä. Ja niin sitten array tässä tapauksessa ensimmäinen indeksi olisi. / Hei, seuraava David, seuraava Malan. Onko kukaan katso heti mitä suhde argv,  array, ja argc on? Joo. Pääsemme että esimerkiksi args.c. Katsotaan jos voimme hyödyntää suhde 2. Täältä saatat löytää, että laite oletussovelluksessa avata. c tiedostot on joskus Emacs. Mutta haluamme käsitellä gedit, niin mitä voit tehdä on, voit oikealla klikkaa C-tiedosto, Siirry Ominaisuudet, Avaa sovelluksessa ja valitse sitten gedit, Aseta oletukseksi, ja nyt ohjelma pitäisi avautua gedit sijaan Emacs. Perfect. Joten tässä olen ohjelma, haluan tulostaa jokaisen komentorivillä. Joten mitä käyttäjä syöttää, haluan lähinnä palauttaa sen takaisin heille uuden rivin. Joten mitä rakennetta että voimme käyttää toistaa yli jotain - jotain, että luultavasti käytetty oman PSET 1? Jos haluat mennä läpi asettaa monia asioita? >> [Opiskelija] For silmukka. Varten silmukka. Aivan. Joten aloitetaan varten silmukka. Meillä on int i = 0. Toivotaan vain aloittaa standardi alustus muuttuja. Aion lähteä edellytys asettaa ja sitten sanoa i + +, aiomme tehdä asioita siellä. Selvä. Joten ajattelu takaisin argv, jos argv on luettelo argumenttien sisään ohjelmaan ja argc on useita väitteitä ohjelmassa, niin se tarkoittaa, että argc on olennaisesti pituus argv, oikealle, koska aiotaan niin monia argumentteja kuin arvo argc. Joten jos haluamme toistaa yli jokaisen elementin argv, aiomme halua aina käyttää muuttujan argv on tietyn indeksin. Tämä voidaan esittää tämän, eikö? Tämä muuttuja tässä on tietty merkkijono tässä tapauksessa koska se on string array - erityisesti string tuohon tietyn indeksin. Mitä me haluamme tehdä, tässä tapauksessa haluamme tulostaa sen, niin sanotaanko printf. Ja nyt argv on merkkijono, joten haluamme laittaa että paikkamerkkiin siellä. Haluamme uuden linjan vain tehdä se näyttää hyvältä. Joten tässä meillä on silmukka. Meillä ei ole kunnossa vielä. Joten minä alkaa 0, ja sitten joka kerta se tulee tulostaa annetun merkkijonon , että erityisesti indeksi jono. Joten kun haluamme lopettaa tulostamisen elementtejä array? Kun olet valmis, eikö? Kun olemme päässeet loppuun array. Joten emme halua ylittää ohi pituus array, ja tiedämme jo meidän ei tarvitse itse aktiivisesti selvittää, mitä pituus argv on koska se on antanut meille, ja mitä se on? Argc. Aivan. Joten me haluamme tehdä tämän prosessin argc monta kertaa. En ole oikeassa hakemistossa. Selvä. Nyt tekee args. Ei virheitä, mikä on hienoa. Joten vain ajaa args. Mitä tämä aikoo palata meille? Se vain tulee tulostaa sen takaisin. "Sinä syötetty args ohjelmaan, aion antaa sen sinulle takaisin." Joten sanokaamme haluamme sanoa args sitten foo bar. Joten sitten se tulostaa sen takaisin meille. Kaikki hyvin? Joten on esimerkki siitä, miten voit käyttää argc ja argv tietäen, että argc edustaa pituutta argv. Varmista, että et koskaan paneelit pääsy rajojen tuolle puolen pituus array koska C varmasti huutaa sinulle. Saat jotain kutsutaan segmentointi vika, joka ei ole koskaan hauskaa, pohjimmiltaan sanomalla yrität käyttää jotain että ei ole olemassa, ei kuulu sinulle. Joten varmista, ja erityisesti nolla-indeksointi, emme halua - Kuten esimerkiksi, jos meillä on joukko pituus 4, että taulukkoindeksin 4 ei ole olemassa, koska aloitamme klo 0, nolla indeksi. Se tulee toinen luonto aivan kuten silmukoita, kun aloitamme klo 0. Joten pitää tämä mielessä. Et halua koskaan käyttää indeksi taulukon, joka on kuin oman ulottumattomissa. Jotta voimme nähdä nyt miten voimme sellainen yhteys komentoriviargumentit että välitetään sisään Mutta näit merkkijono, argv on todella string array. Joten se on oikeastaan ​​ole kokonaisluku vielä, mutta Caesar haluamme käsitellä kokonaislukuja. Onneksi on olemassa funktio luotu meille todella voi muuntaa merkkijonon kokonaisluvuksi. Myös täällä emme ole tekemisissä käyttäjä syöttää missä olemme kehottaa heitä syötteen täällä avaimen, joten emme voi oikeastaan ​​reprompt ja sanoa, "Oi, anna minulle toinen kokonaisluku, sanotaan, jos se ei kelpaa." Mutta emme vielä tarkistaa oikean käytön. Vuonna Caesar ne vain voivat siirtää 1 numero, ja niin heidän täytyy juosta. / Caesar ja sitten ne on antaa sinulle numero. Niin argc on oltava tietty määrä. Mikä numero se olisi, jos ne on läpäistävä sinulle. / Caesar ja sitten avain? Mikä on argc? >> [Opiskelija] 2. >> Kaksi. Aivan. Joten haluat varmistaa, että argc on 2. Muuten periaatteessa kieltäytyä suorita ohjelma. Tärkeimpien se toiminto, joka sanoo int main, niin sitten olemme aina hyviä käytäntöjä return 0 lopussa onnistuneen ohjelman. Eli jos vaikkapa he antavat sinulle 3 komentoriviargumentteja sijasta 2 tai antaa sinulle 1, esimerkiksi niin mitä voit tehdä on sinun kannattaa tarkistaa, että ja palata sitten 1 sanoen, ei, en voi jatkaa tätä ohjelmaa. [Opiskelija] ei voi olla tilaa tekstin. >> Anteeksi? [Opiskelija] ei voi olla tilaa tekstin yrität salata. Ah! Kannalta tekstin yritämme salata, että todella tulee myöhemmin kun annamme tämän tekstin. Joten nyt me vain hyväksyä kuin komennon argumentteja todellinen määrä, todellinen siirtymä Caesar salausta. [Opiskelija] Miksi tarvitset 2 eikä vain 1 argc? Ei varmasti 1 numero. Oikea. Syy miksi tarvitsemme 2 argc sijasta 1 johtuu siitä, kun käynnistät ohjelman ja sanoa. / Caesar tai. / hello, että todella laskee kuin komentorivillä. Niin sitten se jo vie 1 ja niin sitten olemme syöttämällä 1 ylimääräinen. Joten olet syöttänyt itse merkkijono komentorivillä. Mitä haluat tehdä, Caesar haluamme käsitellä kokonaisluku, joten voit käyttää tätä atoi toimintoa. Ja pohjimmiltaan, ohitat sen merkkijonon ja sitten se palaa takaisin kokonaisluku jos se on mahdollista tehdä, että merkkijono kokonaisluku. Nyt muistan, kun olemme tekemisissä printf tai GetString, tuollaista, me kuuluvat kirjastot, jotka ovat ominaisia ​​meille. Joten alussa aloitamme hash tag vakio I / O,. H, jotain sellaista. No, atoi ei kuulu yksi niistä kirjastojen, niin mitä meidän täytyy tehdä, on meidän tarvitse olla oikea kirjasto siitä. Joten muistaa takaisin Walkthrough 1 missä keskustelin manuaalinen toiminto. Kirjoitat mies puhelimesi ja sitten seuraa nimi funktion. Ja niin se tuo esiin koko lista sen käyttö, mutta yhtä hyvin se tuo esille jonka kirjasto, joka kuuluu. Joten Jätän että voit käyttää manuaalinen toiminto atoi ja selvittää, mikä kirjasto sinun täytyy sisällyttää pystyä käyttämään atoi toimintoa. Joten meillä avain ja nyt se tulee saamaan pelkkää tekstiä, ja niin, että todellisuudessa tulee olemaan käyttäjä syöttää missä pyytää. Käsittelimme GetInt ja GetFloat, joten samansuuntaisesti aiomme olla tekemisissä GetString. Mutta tässä tapauksessa emme tarvitse tehdä mitään tehdä, kun tai kun silmukoita tarkistaa. GetString varmasti antaa meille merkkijono, ja aiomme salata mitä käyttäjä antaa meille. Voit siis olettaa, että kaikki nämä käyttäjien syötetyn jouset ovat oikeat. Suuri. Joten sitten kun olet saanut avaimen ja kun olet saanut tekstin, nyt mitä on jäljellä on sinun salakoodaus selväkielisenä. Vain nopeasti kattaa yli mongerrus, selväteksti on mitä käyttäjä antaa, ja salateksti on mitä palata niihin. Joten jouset, jotta voi mennä läpi todella kirjain koska meillä on siirtää jokaiseen kirjeeseen, ymmärrämme, että jouset, jos sellainen kuori takaisin kerros, näemme, että he vain todella luettelon merkkejä. Yksi tulee toisensa jälkeen. Ja jotta voimme käsitellä merkkijonoja paneelit, koska ne ovat ryhmät merkkiä. Sano sinulla merkkijono nimeltä tekstiä, ja sisällä, että muuttuja teksti on tallennettu Tämä on CS50. Sitten tekstiä indeksi 0 olisi pääomaa T, indeksi 1 olisi h jne. Ja sitten paneelit, vuonna argc esimerkki args.c, näimme, että meillä oli toistaa yli array ja meidän oli iteroida alkaen i = 0, kunnes i on pienempi kuin pituus. Tarvitsemme siis jotenkin mietitään mitä pituus meidän merkkijono on jos aiomme toistaa sen yli. Onneksi taas on funktio siellä meitä, vaikka myöhemmin CS50 sinun ehdottomasti pystyä toteuttamaan ja tehdä oman toiminnan , joka voi laskea pituus merkkijono. Mutta nyt me aiomme käyttää merkkijonon pituus, joten strlen. Voit kulkea merkkijono, ja sitten se palaa teille int joka edustaa pituus merkkijono. Katsotaanpa esimerkki siitä, miten ehkä toistaa yli kunkin merkin merkkijono ja tehdä jotain sen kanssa. Mitä me haluamme tehdä, on toistaa yli jokaisen merkin merkkijonon, ja mitä haluamme tehdä, on me painamme takaisin jokaisen merkin 1 1 paitsi lisäämme jotain sen vieressä. Joten aloitetaan varten silmukka. Int i = 0. Aiomme jättää tilaa kunnossa. Haluamme toistaa kunnes pääsemme loppuun merkkijonon, eikö? Joten mitä sitten toiminto antaa meille merkkijonon pituus? [Äänetön opiskelija vastausta] Se pituus komentoriviargumentteja. Mutta merkkijono haluamme käyttää toimintoa, joka antaa meille pituus merkkijono. Joten se merkkijonon pituus. Ja niin sitten sinun täytyy kulkea merkkijono sitä. On tiedettävä, mitä merkkijono se tarvitsee laskea pituuden. Joten tässä tapauksessa olemme tekemisissä merkkijono s. Suuri. Joten mitä me haluamme tehdä, katsotaanpa printf. Nyt haluamme käsitellä merkkiä. Haluamme tulostaa kunkin merkin. Kun haluat tulostaa float, voit käyttää paikkamerkkiä kuin% f. Kanssa int käyttäisit% d. Ja niin Vastaavasti, merkki käytät% c sanoa aion olla tulostaa merkki joka tallennetaan sisällä muuttuja. Joten meillä on tämä, ja mennään lisätä ajan ja tilaa se. Mikä merkki käytämme? Aiomme käyttää mitä tahansa merkin me olemme merkkijonon. Joten aiomme käyttää jotain merkkijono, mutta haluamme olla pääsy tiettyihin merkki siellä. Joten jos merkkijono on vain joukko, niin miten voimme käyttää elementtejä matriiseja? Meillä on nuo hakasulkeissa ja sitten laitamme indeksin siellä. Joten meillä on hakasulkeissa. Meidän index tässä tapauksessa voimme vain käyttää i. Aivan. Joten tässä me sanomme me tullaan tulostaa merkin jälkeen piste ja välilyönti, ja että luonne tulee olemaan i kirjain meidän merkkijonon s. Aion pelastaa se. Okei. Nyt aion juosta merkkijonon pituus. Joten meillä oli merkkijono nimeltään OMG, ja nyt se korostuu entisestään. Samoin sanokaamme me todella haluamme saada merkkijono käyttäjältä. Miten voisi teemme tämän? Ennen kuinka saamme int? Sanoimme GetInt, eikö? Mutta tämä ei ole int, joten katsotaanpa GetString. Tehdään merkkijonon pituus. Täällä ei anna erityistä nopeasti. Joten en tiedä. Aion laittaa nimeni täällä ja niin sitten voin tehdä yksi niistä asioista jossa olen antaa sanan jokaisen kirjaimen tai jotain. Cool. Joten se merkkijonon pituus. Joten olemme takaisin keisarille. Meillä on muutamia työkaluja, miten voimme toistaa yli merkkijono, miten käyttää kunkin elementin. Joten nyt voimme palata ohjelmaan. Kuten aiemmin mainitsin, on ASCII taulukon, paras ystävä, olet menossa nähdä numeroita, jotka liittyvät jokaisen kirjaimen. Joten tässä sanoa meidän selkokielisen on olen huimaa! Sitten kukin näistä merkeistä on menossa on useita ja ASCII-arvo liittyy siihen, jopa heittomerkki, vaikka tila, vaikka huutomerkki, joten sinun kannattaa pitää tämä mielessä. Sano keskeisiä että käyttäjä sisältyvät niiden Komentoriviargumentti 6. Tämä tarkoittaa sitä, että ensimmäinen kirjain, joka on I, joka edustaa 73, haluat palata niihin mitä kirjain edustaa ASCII-arvon 73 + 6. Tässä tapauksessa se olisi 79. Nyt haluamme mennä seuraavaan merkkiin. Joten seuraavaksi indeksi 1 selkokielisen olisi heittomerkki. Mutta muistakaa me vain haluamme salakoodaus kirjaimia. Joten haluamme varmistaa, että heittomerkki todella pysyy samana, että emme vaihtaa 39 mihin tahansa 45 on. Haluamme pitää se heittomerkki. Niinpä haluamme muistaa vain salakoodaus kirjaimet sillä haluamme kaikki muut symbolit pysyvän ennallaan vuonna ohjelmaamme. Toinen asia, että haluamme säilyttää arvo. Joten kun sinulla on iso kirjain, sen pitäisi pysyä niin isoja. Lowercases pitäisi pysyä niin pieniä. Joten muutamia hyödyllisiä toimintoja pystyä käsittelemään vain salakoodausohjelmia kirjaimia ja pitää säilyttää arvo asioita on isalpha, isupper, islower toimintoja. Ja niin nämä ovat funktioita, jotka palauttavat sinut totuusarvon. Periaatteessa totta vai tarua. Onko tämä iso? Onko tämä aakkosnumeerinen? Onko tämä kirjeen lähinnä. Joten tässä on 3 esimerkkejä siitä, miten voisitte käyttää kyseistä toimintoa. Periaatteessa voit testata, onko arvo palautetaan sinulle, että toiminto on tosi tai epätosi perustuu siihen, että panos. Joko eivät salakoodaus jotain tai Cipher sitä tai varmista, että se on iso, jne. [Opiskelija] Voisitko selittää nuo hieman enemmän ja miten käytät niitä? >> Joo, varmasti. Joten jos katsomme taaksepäin, täällä meillä on pääomaa minä, eikö? Joten me tiedämme, että minun menee O koska en + 6 on O. Mutta haluamme varmistaa, että O tulee olemaan pääoman O. Joten periaatteessa, että on tavallaan menossa muuttamaan tuloon. Joten onko se iso vai ei tahtoa sellaista muuttaa siten, että käsittelemme sitä. Joten jos käytämme isupper toimintoa kyseisen indeksin, joten isupper ("I"), joka palauttaa meille totta, joten me tiedämme, että se on ylempi. Joten sitten perustuu, että myöhemmin me mennä kaava että aiot käyttää siirtämään asioita Caesar, niin silloin periaatteessa, siellä tulee olemaan hieman erilainen kaava, jos se on iso toisin pieniksi. Järkeä? Joo. Ei hätää. Puhuin vähän siitä lisäämällä 6 kirjeeseen, joka ei ole aivan järkevää paitsi kun sellaista ymmärtää, että nämä merkit ovat sellaisia ​​vaihdettavissa kokonaislukuja. Mitä teemme me tavallaan käytön implisiittinen valu. Me mennä valu hieman myöhemmin, jos otat arvon ja otat sen eri tyyppiä kuin se alun perin oli. Mutta tämä PSET me voi sellaista vaihtoehtoisesti käyttää merkkejä ja niiden vastaavat kokonaisluku arvoja. Joten jos vain koteloida merkki vain heittomerkkejä, Sitten voit työskennellä sen kanssa kokonaislukuja, käsittelee se kokonaisluku. Joten pääoma C koskee 67. Pienet f liittyy 102. Jälleen, jos haluat tietää näitä arvoja, katso sinun ASCII pöydän. Joten mennä joitakin esimerkkejä siitä, miten te ehkä vähentää ja lisätä, miten voit itse todella työskennellä näiden merkkien, käyttää niitä synonyymeinä. Sanon, että ASCIIMath on menossa laskea lisäämällä merkin kokonaisluku ja näyttää sitten tuloksena luonnetta samoin kuin tuloksena ASCII-arvon. Ja joten tässä yritän sanoa - we'll käsitellä tämän osan myöhemmin - mutta pohjimmiltaan, sanon, että käyttäjän pitäisi sanoa ajaa ASCIIMath yhdessä avaimen, ja minä sanon, että avain tulee olemaan numero jonka aiomme lisätä tämän merkin. Joten tässä huomannut, että koska olen vaativa avain, koska olen vaativa, että he antavat minulle 1 asia, Haluan vain hyväksyä. / Asciimath ja avain. Joten aion vaatia argc on 2. Jos se ei ole, niin aion palata 1 ja ohjelma päättyy. Joten sanon avain ei tule olemaan ensimmäinen komentorivillä, Se tulee olemaan toinen, ja kuten näette täällä, Aion tehdä tästä tulee kokonaisluku. Sitten aion asettaa merkin olevan r. Huomaa, että tyypin muuttujan chr on todella kokonaisluku. Siten, että olen pystynyt käyttämään r kokonaisluku tapahtuu encasing se näiden puolilainausmerkkejä. Joten takaisin meidän printf julkilausuman, jossa meillä on paikkamerkki merkin ja sitten paikkamerkin kokonaisluku, merkki edustaa ihmisoikeustoimikunnassa ja kokonaisluku on avain. Ja niin sitten tulemme vuonna tulokseen lisätään 2 yhdessä. Joten aiomme lisätä r + mikä avain on, ja sitten aiomme tulostaa tuloksen että. Joten tehkäämme asciimath. Se on ajan tasalla, joten haluan vain juosta asciimath. Voi, mutta katso, se ei tee mitään, koska emme oikeastaan ​​anna se avain. Joten kun se vain palautti 1, tärkein tehtävä, se vain palasi takaisin meille. Joten niin nyt kulkea avain. Joku antaa minulle numero. >> [Opiskelija] 4. 4. Okei. Joten r kasvoi 4 on antaa meille vastaan, joka vastaa ASCII-arvon 118. Joten se sellainen järkevää, että - Oikeastaan, voinko kysyä teiltä, ​​mitä mieltä olette ASCII arvo r jos r + 4 118? Sitten joo, r on 114. Joten jos näytät ASCII taulukon sitten tosiaan, näet, että r edustaa 114. Joten nyt me tiedämme, että voimme lisätä kokonaislukuja ja merkkejä, tämä tuntuu melko yksinkertainen. Olemme juuri menossa toistaa yli merkkijono kuten näimme esimerkin ennen. Me tarkista onko se kirjain. Jos se on, niin me siirtää sen millä tahansa avain on. Melko yksinkertaista, paitsi kun saat like this, näet että z, edustajanaan 122, niin se antaa sinulle erilaisia ​​luonteeltaan. Me todella haluamme pysyä meidän aakkoset, eikö? Joten meidän täytyy selvittää jotenkin tavallaan kiertyy. Kun tulet Zedin ja haluat lisätä tietyn määrän, et halua mennä pidemmälle ASCII aakkoset osassa; haluat kääri takaisin aina A. Mutta pitää mielessä olet vielä säilyttää asian. Tietäen, että kirjeitä ei voi tulla symboleja kuten symboleja ei aiota muuttumassa. Viimeisessä PSET sinun ehdottomasti ei tarvitse, mutta vaihtoehto oli toteuttaa oman ahne PSET käyttämällä moduuli toimintoa. Mutta nyt olemme todella menossa tarvitse käyttää moduuli, niin mennään vain yli tämän hieman. Pohjimmiltaan kun on x modulo y, joka antaa sinulle loput x jaettuna y. Tässä muutamia esimerkkejä tästä. Meillä on 27% 15. Periaatteessa, kun vähennetään 15 päässä 27 niin monta kertaa kuin mahdollista ilman saada negatiivisia niin saat 12 jäljellä. Niin, että sellainen kuten matematiikka yhteydessä, mutta miten voimme todella käyttää tätä? Se tulee olemaan hyötyä meidän wrapover. Tätä varten Sanotaan vain pyysin teitä kaikkia jakaa 3 ryhmään. Joskus voit tehdä tämän ryhmissä ja jotain. Say I sanoi, "Okei, haluan teidän kaikkien jaetaan 3." Miten voisit tehdä? [Äänetön opiskelija vastausta] Joo, aivan. Laske pois. Okei. Mennään todella tehdä se. Haluatko aloittaa? [Opiskelijat laskenta off] 1, 2, 3, 4. Mutta muistakaa ... >> [Opiskelija] Anteeksi. Se on todella hyvä pointti. Sanoit 4, mutta me todella haluamme sinun sanoa 1 koska me vain haluamme 3 ryhmään. Joten sitten, miten - Ei, se on todella hyvä esimerkki, sillä miten sitten voisit sanoa 1? Mikä on suhde 4 ja 1? No, 4 mod 3 on 1. Joten jos jatkat, sinun olisi 2. Joten meillä on 1, 2, 3, 1, 2. Jälleen olet todella 5. henkilö. Mistä tiedät sanoa 2 eikä 5? Sanot 5 mod 3 on 2. Haluan nähdä, kuinka monta ryhmää 3 jää yli, niin missä järjestyksessä minäkin Ja niin sitten jos me jatkanut koko huoneen, silloin näkisimme, että olemme aina soveltaen tosiasiassa mod toiminnon itsellemme ikään kuin laskea pois. Se on enemmän eräänlainen konkreettinen esimerkki siitä, miten voit käyttää modulo koska olen varma, että useimmat meistä ovat varmaan käyneet läpi tämän prosessin jossa meillä on ollut laskea pois. Kysyttävää modulo? On aika tärkeää ymmärtää käsitteet tätä, joten haluan varmistaa että teillä ymmärrät. [Opiskelija] Jos ei ole jäljellä, se antaa sinulle todellinen määrä? Jos yksi ensimmäisistä 3 heistä oli tehnyt sen, se olisi antanut heille, mitä he todellisuudessa olivat, tai se olisi antanut heille [kuulumattomissa] >> Tuo on hyvä kysymys. Kun ei ole loput modulo - niin että sinulla on 6 mod 3 - joka todella antaa sinulle takaisin 0. Puhumme siitä hieman myöhemmin. Ai joo, esimerkiksi kolmas henkilö - 3 mod 3 on oikeastaan ​​0 mutta hän sanoi 3. Niin, että on tavallaan kuin sisemmän saalis, esimerkiksi, kuten okei, jos mod on 0 niin aion olla kolmas henkilö. Mutta me päästä sellaista miten kannattaa käsitellä mitä 0 on myöhemmin. Joten nyt meillä jotenkin on tapa kartoittaa zed oikealle kirjeen. Joten nyt olemme käyneet läpi näitä esimerkkejä, me tavallaan nähdä miten Caesarin voisi toimia. Näet 2 aakkosia ja sitten näet ne siirretään. Joten yrittää ilmaista, että mitä kaavassa. Tämä kaava on itse asiassa annetaan sinulle spec, mutta katsotaanpa sellaista näyttää läpi mitä kukin muuttuja tarkoittaa. Meidän lopputulos tulee olemaan salatekstin. Joten tämä kertoo, että i: nnen luonne salatekstin on menossa vastaamaan i luonnetta selväkielisenä. Tämä on järkevää, koska haluamme aina tasata näitä asioita. Joten se tulee olemaan i luonnetta salakieli plus k, mikä on tärkein - että järkevää - ja sitten meillä on tämä mod 26. Muistan kun meillä oli Zed emme halunneet päästä hahmo, joten halusimme mod se ja millaisia ​​Ulottumamitan aakkoset. Kun Zed menisit, b, c, d, kunnes sinulla on oikea numero. Joten me tiedämme, että Zed, jos + 6, antaisi meille f koska sen jälkeen Zedistä tulee, b, c, d, e, f. Joten muistakaamme tiedämme varmasti, että Zed + 6 aikoo antaa meille f.. ASCII-arvot, z on 122, ja f on 102. Joten meidän täytyy löytää tapa tehdä meidän Caesar kaava antaa meille 102 jälkeen ottaen 122. Eli jos me vain soveltaa tätä kaavaa, ('Z' + 6)% 26, joka todella antaa sinulle 24 koska 122 + 6 128; 128% 26 saat 24 jäljellä. Mutta se ei oikeastaan ​​tarkoita f.. Se ei todellakaan ole 102. Se ei myöskään 6. kirjain aakkosissa. Niinpä tietysti tarvitsemme jotenkin säätämistä tätä hieman. Kannalta säännöllisen aakkoset, me tiedämme, että Z on 26. kirjain ja f on 6.. Mutta olemme tietotekniikassa, joten aiomme indeksi 0. Joten sen sijaan, z on numero 26, aiomme sanoa se numero 25 koska on 0. Joten nyt mennään soveltaa tätä kaavaa. Olemme z edustaa 25 + 6, joka antaa sinulle 31. Ja 31 mod 26 saat 5 kuin muilta. Se on täydellinen, koska me tiedämme, että f on 5. kirjain aakkosissa. Mutta silti se ei ole F, eikö? Silti se ei ole 102. Joten sitten tähän PSET, haasteena on yrittää selvittää suhdetta välillä muuntaa näiden ASCII arvojen ja aakkosellinen hakemisto. Pohjimmiltaan, mitä sinun kannattaa tehdä, haluatko aloittaa kanssa ASCII arvoja, mutta sitten haluat jotenkin siirtääkseen aakkosellinen hakemisto sitten laskea mitä kirjeessä pitäisi olla - periaatteessa, mitä sen aakkosellinen hakemisto on ja cipher merkki - sitten kääntää se takaisin ASCII arvoja. Joten jos kiskaista ulos ASCII taulukon, sitten yrittää löytää suhteita, vaikkapa 102 ja 5 tai 122 ja 25. Olemme saaneet myös avain komentoriviargumentit, olemme saaneet selväteksti, olemme Yksityisen sitä. Nyt kaikki olemme jäljellä vain tulostaa sen. Voisimme tehdä tämän usealla eri tavalla. Mitä voisimme tehdä, on itse tulostaa matkan varrella. Kuten me toistaa yli merkit merkkijonon, voisimme yksinkertaisesti vain tulostaa juuri silloin kun laskemme sen. Vaihtoehtoisesti voit myös tallentaa sen array ja on joukko merkkejä ja lopussa iteroida yli että koko joukko, ja tulostaa sen. Joten sinulla on pari vaihtoehtoa siitä. Ja muista, että% c tulee olemaan paikkamerkki tulostaa merkki. Joten siellä olemme Caesar, ja nyt siirrymme Vigenere, joka on hyvin samankaltainen kuin Caesar, mutta vain hieman monimutkaisempi. Joten olennaisesti Vigenere on aiot olla ohimennen avainsanan. Joten sen sijaan useita, olet menossa on merkkijono, ja niin että menee toimia avainsanan. Sitten, kuten tavallista, olet menossa saada kehotteen merkkijonon käyttäjä ja sitten salakoodaus se ja sitten antaa ne salakieli takaisin. Niin kuin sanoin, se on hyvin samanlainen kuin Caesar, paitsi sen sijaan siirtää tietyn määrän, numero on todellisuudessa muuttuu joka kerta siitä merkin luonnetta. Edustaa tätä todellinen määrä siirtää, se edustaa näppäimistön kirjaimia. Joten jos syöttää siirtymän, esimerkiksi niin, että vastaisi siirtäminen 0. Joten se on taas takaisin aakkoselliseen. Mikä voisi olla hyödyllistä, jos näet, että olemme todellakin tekemisissä ASCII-arvot sekä kirjaimia, samoin kuin aakkosellinen indeksi, ehkä löytää tai tehdä oman ASCII taulukon, joka osoittaa aakkosellinen hakemisto 0 kautta 25, Z, ja ASCII-arvot, jotta voit sellaista nähdä suhteesta ja hahmotella ja yrittää löytää joitakin malleja. Samoin jos olisit siirtymässä klo tietyt esimerkiksi F - ja tämä on joko pieniä tai isoja f - niin, että se vastaa 5. Olemmeko hyviä tähän asti? Kaava Vigenere on vähän erilainen. Periaatteessa, näet että se on aivan kuin Caesar, paitsi sijasta k olemme k indeksi j. Huomaa, että emme käytä i koska lähinnä pituus avainsanan ei välttämättä pituus meidän salateksti. Tämä on hieman selkeämpi, kun näemme esimerkiksi, että minulla on hieman myöhemmin. Periaatteessa, jos ajaa ohjelman avainsanan ohai, niin se tarkoittaa, että joka kerta, ohai tulee olla muutos. Joten riippuen siitä, mitä asemaa olet avainsanan, aiot siirtää oman tiettyjä salakieli merkki vastaavalla määrällä. Jälleen aivan kuten Caesar, haluamme varmistaa, että meillä säilyttää arvo asioita ja me vain salakoodaus kirjaimia, ei merkkejä tai välilyöntejä. Joten muistelen Caesar toimintoja, joita olet saattanut käyttää, siten, että olet päättänyt miten siirtää asioita, ja soveltaa tätä teidän ohjelma täältä. Joten kartoittaa tämän. Meillä selkokielisen että olemme mennyt käyttäjän GetString tätä mieltä ... on CS50! Sitten meillä avainsanan ohai. 4 ensimmäistä merkkiä ovat melko yksinkertaisia. Tiedämme, että T aiotaan siirretään o, Sitten h aiotaan siirretään h, i aiotaan siirretään. Täällä näet että on 0, niin sitten loppuarvon on oikeastaan ​​aivan sama kirjain kuin ennen. Sitten s siirretään i. Mutta sitten on näitä aikoja täällä. Emme halua salakoodaus että, niin sitten emme muuta sitä mistään ja vain tulostaa ajan muuttumattomina. [Opiskelija] En ymmärrä miten te tiedätte, että tämä on siirretty - Mistä sinä - >> Anteeksi. Ylimpänä täällä näet että komentorivillä ohai täällä, että tulee olemaan avainsana. Ja niin periaatteessa, olet polkupyörä merkkiä avainsanan. [Opiskelija] niin o aiotaan siirtää saman - Niin o vastaa tietty numero aakkoset. [Opiskelija] Oikea. Mutta mistä sait CS50 osittain? Oh. Se on GetString jossa olet kuin "Anna minulle merkkijono koodata." [Opiskelija] He antavat teille tämän väitteen siirtyvän ja sitten voit kysyä ensimmäinen merkkijono. >> Joo. Joten kun ne ajaa ohjelmaa, he aikovat sisällyttää avainsanan niiden komentoriviargumentteja kun ne ajaa sitä. Sitten kun olet tarkistanut, että he ovat todella antanut sinulle 1 eikä enemmän, ei vähemmän, sitten olet menossa kysymään niitä merkkijonon, sano, "Anna minulle merkkijono." Niin, että jos tässä asiassa he ovat antaneet sinulle tämä ... on CS50! Joten aiot käyttää sitä ja käyttää ohai ja iteroida yli. Huomaa, että täällä me ohitetaan salaa aikana, mutta suhteen kantamme varten ohai, seuraava käytimme o. Tässä tapauksessa se on vähän vaikeampi nähdä, koska se on 4, joten jatkakaamme hieman. Pysy kanssani täällä. Sitten meillä on i ja s, jotka sitten käännetty o ja h vastaavasti. Sitten meillä on tilaa, ja niin sitten tiedämme, että emme aio salakoodaus tiloihin. Mutta huomaa, että sen sijaan menee tällä paikalla täällä, olemme salataan by - En tiedä, jos näet, että - täällä. Joten se ei ole kuin sinä itse ennalta vaikkapa O menee täällä, h menee täällä, menee täällä, menee täällä, o, h,, i, o, h,, minä. Et tee sitä. Sinä vain siirrä asemaa avainsana kun tiedät, että olet todella aiotaan salata todellisen kirjeen. Onko sellaista järkeä? Okei. Joten vain muutamia muistutuksia. Haluat varmistaa, että olet vain etukäteen seuraavalle kirje avainsanan jos merkki teidän selväkielisenä on kirjain. Sano me olemme o. Huomaamme, että seuraavan merkin, minä indeksi selvätekstin, on numero, esimerkiksi. Silloin emme etukäteen j, indeksi avainsanojen, kunnes pääsemme uuden kirjeen. Jälleen haluat myös varmistaa, että olet ympäröity alkuun avainsanan kun olet lopussa se. Jos näet täällä me olemme minä, seuraavaksi täytyy olla o. Joten haluat löytää jonkin keinon pysty ympäröivä alkuun avainsanan aina, kun päähän. Ja niin edelleen, millainen toimija on hyödyllistä, että tapauksessa kiertyy? Kuten laskentaa pois esimerkki. [Opiskelija] prosenttimerkki. >> Joo, prosenttimerkki, mikä on modulo. Joten modulo tulee kätevä täällä, kun haluat kääri yli indeksin oman ohai. Ja vain nopea vihje: Yritä ajatella kääre yli avainsanan vähän kuin laskenta pois, jos jos on 3 ryhmää, 4. henkilö, niiden määrä että he sanoivat oli 4 mod 3, joka oli 1. Joten yrittää ajatella niin. Kuten näitte kaavassa, missä olet ci ja pi mutta sitten kJ, haluat varmistaa, että voit seurata niitä. Sinun ei tarvitse kutsua sitä minä, sinun ei tarvitse kutsua j, mutta haluat varmistaa, että voit seurata kannan, että olet oman selväkielisenä sekä kannan, että olet in avainsanan koska nämä eivät välttämättä tule olemaan sama. Ei ainoastaan ​​avainsana - se voisi olla täysin erilainen pituus kuin selväkielisenä. Myös teidän selväteksti, on numeroita ja kirjaimia, joten se ei tule vastaamaan täydellisesti yhdessä. Kyllä. [Opiskelija] Onko funktio muuttaa tapauksessa? Voitko vaihtaa pääoman? >> Joo, siellä varmasti on. Voit tarkistaa - Uskon sen toupper, kaikki 1 sana. Mutta kun yrität salakirjoitus asioita ja säilyttää teksti, se on parasta pohjimmiltaan olla erillisiä tapauksia. Jos se on iso, niin haluat siirtää tämän koska kaavassa, kun muistelen, miten meidän on eräänlainen go vaihdellen välillä ASCII tapa edustaa numeroita ja varsinainen aakkosellinen hakemisto, haluamme varmistaa siellä tulee olemaan jonkinlainen kuvio, että aiot käyttää. Toinen huomautus kuvio, todella. Tulette varmasti käsitellä numeroita. Yritä käyttää Magic Numbers, joka on esimerkki tyyliin. Sano haluat aina ajansiirto jotain haluat - Okei, joten vihje, toinen spoileri on, kun olet menossa on siirtymässä jotain tietyllä määrällä, yritä edustamaan että todellinen määrä vaan kokeilla ja nähdä, jos voit käyttää ASCII-arvo, joka tavallaan järkevämpää. Toinen huomautus: Koska olemme tekemisissä kaavoja, vaikka teidän TF sellaista mitä kuvio saatat käyttää, parasta teidän kommentteja eräänlainen selittää logiikka, niinku, "Käytän tätä mallia, koska ..." ja millaisia ​​selittää kuvion ytimekkäästi teidän kommentteja. [Tämä oli walkthrough 2] Jos ei ole muita kysymyksiä, niin minä vain jäädä tänne vähän. Onnea PSET 2: Crypto ja kiitos kun tulitte. [Opiskelija] Kiitos. >> Kiitos. [Media Offline intro]