[Powered by Google Translate] [Walkthrough - Problemo Serio 2] [Zamyla Chan - Universitato Harvard] [Jen CS50. CS50.TV] Bone. Saluton, ĉiuj, kaj bonvenon al Walkthrough 2. Unue, mi volas gratuli vin pro finante pset 1. Mi scias, ke ĝi povus esti iom malfacila por iuj de vi, povus esti via unua komputila programo kiun vi skribis, sed gxuste memoras, ke je la fino de tio, kiam vi retrorigardas al la fino de la semestro, vi rigardas pset 1 kaj vi diros: "Hej, mi povus esti farita, ke en 5 minutoj." Do konas kaj fidas ke en la fino de ĉi vi certe trovos pset 1 sufiĉe simpla. Sed por nun estas grandega realigo, kaj gratuloj por getting farita. Nun, ankaŭ rapida noto antaŭ ol ni eniri la karnon de la walkthrough. Mi nur volas fari rapidan noto, kiun mi kelkfoje ne havas sufiĉe da tempo dum la walkthroughs iri tra ĉiu unuopa maniero fari la problemo aro kaj iom ĵus eble enfokusigi la 1 aŭ 2 speco de realigoj, manieroj, ke vi povus fari tion. Sed tio ne estas diri, ke vi malpermesis fari ĝin alian vojon. Estas ofte, kiel kun komputiko, multnombraj manieroj de fari aferojn, kaj tiel definitive bonvolu uzi malsaman tipon de solvo ol mi povus esti prezentita. [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] [Pset2 - 0. Al Sekcio de Demandoj - 1. Cezaro - 2. Vigenère] Bone. Do problemo starigis 2: Crypto estas amuza unu. Denove, kun ĉiu pset vi komencos kun sekcio de demandoj ke tuj oni kondutu en via sekcioj kun via atribuita instruado ulo. Ni ne tuj iros tra tiuj super la walkthrough, sed certe helpos vin kompletigi la pset. Do la unua parto de la problemo aro estas Cezaro. Kaj tiel en Cezaro iu preterpasos vin ŝlosilon kun entjero, kaj vi ĉifri ĉenon de teksto kiu havigas al vi kaj donu ilin ĉifrita afero. Se iu rigardis A Christmas Story, estas ekzemplo de tiu tie. Tiam la dua parto de la problemo aro estas Vigenère, kiu estas pli progresintaj ĉifrado tekniko. Kaj tial ni tuj encipher pecon de teksto, krom anstataŭ kun nur unu entjero, ni fakte tuj kodi ĝi kun ŝlosilvorto ke la uzanto havigos al ni. Konsentite, do la unua ilo en la skatolo hodiaŭ fakte tuj estos ĝisdatigi la aparaton. En la diskutejo oni vidus tion kiel, "Kial ne ĉi laboro?" "Kial ne Submetu 50 laboron?" kaj ofte la solvo estas fakte nur por ĝisdatigi vian aparaton. Kaj do se vi simple kuras en terminalo fenestro en via aparaton ŝvitas yum-y - tio estas flago dirante jes, ĝisdatigi ĉio - ĝisdatigo, tiam via aparaton ĝisdatigos se bezono esti. Kaj ne vundi se vi jam estas en la plej freŝa versio de la aparaton. Tiam estos ĝuste diri ne novajn ĝisdatigojn disponeblaj kaj vi povos daŭre labori kune. Sed ĉi tiu estas bona por ekzekuti eĉ ĉiufoje, ke vi malfermu la aparaton ĉar ni estas ankoraŭ tre multe - kelkfoje, se ni eniros en cimon - fiksi ĝin en la aparaton. Do certigi ke vi havas la plej freŝa versio de la aparaton kaj kuri ke ĝisdatigi tie. Bone. Do ekde ni pritraktas literoj kaj ŝanĝante, enciphering aferojn, ni iras al vere volas fariĝi pli bona amikino nia ASCII abako. Ekzistas multnombraj linio, se vi trovos. Eble eĉ vian propran. Esence, kun ĉiu litero kaj ĉiu nombro kaj ĉiu karaktero estas nombro asociita kun ili, kaj tiel ĝi estas bonaj por vidi lian ASCII valoroj apud la reala litero. Kiu definitive helpi vin en la problemo aro. Unu afero kiu vere helpis min en ĉi tiu problemo aro estis vere presi ĝin, kaj kiel mi trairis, mi vere desegni sur ĝi, skribi, "Se tiu devas iri al tie, tiam ..." Speco de utiligi ĝin kaj marki ĝin, fariĝis bonaj amikoj kun via ASCII tablo. Tiam ni havas kelkajn aliajn ilojn je nia dispono. Ĉi-foje anstataŭ reale instigante la uzanto por ĉiuj iliaj enigo ni tuj faros kombinaĵo. Ni tuj instigas ilin por iu eniro, sed ni ankaŭ tuj ĝuste uzi la komandlinio argumentoj. Do kiam ili kuras lia programo, kutime vi diras. / Saluton, ekzemple, se via programo estis hello.c. Sed ĉi tiun fojon anstataŭ nur diri, ke ili povas meti vortojn, argumentoj poste. Kaj tial ni tuj uzi ajn pasas en al ni kiel ilia eniro tiel, tiel movante tie apenaŭ instigante por entjero sed ankaŭ uzante komandlinio argumentoj. Kaj poste ni iros en tabeloj kaj ŝnuro, kiun ni estos uzi multon ankaŭ. Jen ĝuste ekzemplo de 1 mini ASCII abako. Kiel mi diris, ĉiu litero korespondas al nombro, kaj tiel familiarizar vin kun tio. Ĝi venos en oportuna. Kaj poste kiam ni komencos fari iujn ASCIIMath pritraktanta la nombroj - aldono, subtrahanta ilin - tiam definitive bona por raporti al ĉi grafikaĵo. Do jen unu ekzemplo de Cezaro kodita - iu kiu eble vi ludis kun. Ĝi estas nur rado. Esence, ekzistas ekstera alfabeto kaj tiam tie estas ena alfabeto. Do ĉi tie estas ekzemplo de Cezaro kodita sed kun ŝlosilo de 0. Esence, A estas vicigitaj kun A, B estas vicigita kun B, la tuta vojo ĝis Z. Sed tiam diras, ke ni volis ŝlosilon de 3, ekzemple. Tiam ni devus turni la internan rado tiel ke A nun vicigas kun D, ​​ktp Kaj tiel tio estas esence kion ni faros. Ni ne havas rado, sed tio, kion ni faros estas fari nian programon speco de ŝanĝi la alfabeton kune kun ni certa kvanto de ciferoj. Do kiel mi diris antaŭe, ni tuj estos pritraktas komandlinio argumentoj tiel kiel atingi entjero. Do la maniero ke uzanto kuros vian Cezaro programo estas dirante. / Cezaro kaj tiam eniri numeron post tio. Kaj tiu cifero reprezentas la ŝlosilon, la sxangxigxo, kiom da fojoj vi tuj estos turnanta la interna rado de via Cezaro ĉifro. Kaj tial vi vidas tie ekzemplo. Se ni eniris la literoj de A al L en nia Cezaro kodita, tiam estus enigo D tra O ĉar tio estas ĉiu litero moviĝis super 3 fojojn, same kiel la ekzemplo de la rado kiu mi montris al vi. Se do vi tajpis, ekzemple, tiu estas CS50! tiam estus ankaŭ movi ĉiujn de la literoj. Kaj tio estas grava afero en ambaŭ Cezaro kaj Vigenère estas, ke ni tuj salti super ajna ne-literoj. Do neniu spacoj, gravuloj, ktp, nombroj, ni iras por subteni ilin same. Ni nur tuj ŝanĝi la literojn en ĉi tiu kazo. Do kiel vi vidas en la rado, ni nur havas la literojn disponebla por ni, do ni nur volas ŝanĝi la literojn kaj kodi la literojn. Do la unua afero por fari, vi vidis, ke la uzado por Cezaro en problemo starigis 2 estas kuri Cezaro kaj tiam enmeti numeron kiam vi kuros en la terminalo. Do kion ni bezonas por fari estas iel atingi tiun ŝlosilon kaj konsenti ĝin. Kaj tial ni volas iel vidas tuj estos la dua komandlinio argumento. La unua estas tuj estos. / Cezaro, kaj la sekvan tiu tuj estos la ŝlosilo nombro. Do antaŭ ol ni havis int main (void) por komenci nian C programoj. Ni tuj senŝeligi reen mantelo iom kaj fakte vidas ke anstataŭ pasante en malplena al nia ĉefa funkcio ni vere kontraktanta kun 2 parametroj. Ni havas int nomata argc kaj poste arsenalo de kordoj nomis argv. Do argc estas entjero, kaj ĝi reprezentas la nombro de argumentoj pasis al via programo. Kaj tiam argv estas fakte la listo de la argumentoj pasis. Ĉiuj el la argumentoj estas ŝnuroj, kaj tiel argv reprezentas tabelo, listo, de kordoj. Ni parolos pri tabeloj iomete. Arrays estas esence nova datumstrukturo. Ni havas ints, ni duobligas, ni havas kordojn, kaj nun ni havas tabeloj. Arrays estas datumoj strukturoj kiuj povas teni multnombraj valoroj de la sama tipo, do esence, liston de kiom tipo vi volas. Esence, se vi volas listo de entjeroj ĉiuj en 1 variablo, tiam vi kreus novajn variablo kiu estis de tipo int tabelo. Do tabeloj estas nulo-indeksitaj, signifante ke la unua ero de la tabelo estas indekso 0. Se la tabelo estas de longo 4, kiel en ĉi tiu ekzemplo, tiam via lasta elemento estus en indekso 3, kio estas 4 - 1. Do por krei tabelo, vi farus ion kiel ĉi tio. Diru vi volis duoblan tabelo. Ĉi tio iras por ajna tipo de datumtipo, tamen. Do diru vi volas duoblan tabelo. Diru vi volas nomi ĝin leterkesto. Kiel vi devus pravalorizi ajna alia duobla, vi dirus duobla kaj tiam la nomo, sed ĉi-foje ni metas la rektaj krampoj, kaj tiam la nombro estos la longo de la tabelo. Notu ke en tabeloj ni ne povas eterne ŝanĝi la longecon, tial vi ĉiam devas difini kaj elekti kiom da skatoloj, kiom da valoroj vian tabelo tuj teni. Do meti malsamaj valoroj en via tabelo, vi tuj uzas tiun sekvan sintakson, kiel vi vidas sur la glito. Vi havas leterkesto indekso 0 estos metita al 1,2, leterkesto indekso 1 aro al 2,4, ktp Do nun ni jam reviziis arrays iom, ni reiru al argc kaj argv. Ni scias ke argv nun estas tabelo de kordoj. Do kiam uzanto pasas en - diras ili estas kurante programo - ili diras. / saluton David Malan, kion la programo faros por vi jam estas reale supreniru kun kio argc kaj argv estas. Do vi ne bezonas zorgi pri tio. Argc en ĉi tiu kazo estus 3 ĉar ĝi vidas 3 malsamaj vortoj disigitaj per spacoj. Kaj tiel tiam la tabelo en ĉi Ekzemple, la unua indico estus. / Saluton, la venonta unu Davido, la sekva Malan. Ĉu iu vidas tuj, kion la interrilato inter argv,  la tabelo, kaj argc estas? Yeah. Ni ricevos en tiun en ekzemplo en args.c. Ni vidu se ni povas utiligi la interrilato inter la 2. Ĉi tie vi povus trovi ke en la aparaton la defaŭlta apliko por malfermi. c dosieroj estas kelkfoje Emakso. Sed ni volas trakti gedit, do kion vi povas fari estas vi povos dekstre alklaki vian C dosiero, iru al Ecoj: Malfermu Kun, kaj tiam elektu gedit, Set as default, kaj nun via programo devus malfermi en gedit anstataŭ Emakso. Perfekta. Do jen mi havas programon kiu mi volas presi ĉiu komandlinio argumento. Do kion la uzanto enigas, mi volas esence redoni ĝin al ili sur nova linio. Do kio estas strukturo kiu ni povas uzi ankaŭ persisti super io - iu kiu vi verŝajne uzas en via pset 1? Se vi volas iri tra starigis nombro de aĵoj? >> [Studento] Por buklo. Por buklo. Ekzakte. Do ni komencu kun la por buklo. Ni havas por int i = 0. Ni komencu per norma inicialización variablo. Mi foriros la kondiĉo por aro kaj poste diri i + +, faros tion tie. Bone. Do pensante reen al argv, se argv estas la listo de argumentoj pasis en la programo kaj argc estas la nombro de argumentoj en la programo, tiam tio signifas ke argc estas esence la longo de argv, dekstra, ĉar ne tuj estos kiel multaj argumentoj kiel la valoro de argc. Do, se ni volas persisti super ĉiu elemento en argv, nin tuj volas ĉiufoje aliri la variablo en argv ĉe la donita indekso. Tio povas esti prezentita kun ĉi tio, ĉu ne? Tiu variablo tie reprezentas la aparta cxeno en ĉi tiu petskribo ĉar ĝi estas ĉeno tabelo - la aparta cxeno en tiu donita indekso. Kion ni volas fari, en ĉi tiu kazo ni volas presi ĝin, do ni diru printf. Kaj nun argv estas cxeno, do ni volas meti tiun lokokupilo tie. Ni volas novan linion ĝuste por fari ĝin rigardi bona. Do jen ni havas por buklo. Ni ne havas la kondiĉon ankoraŭ. Do mi komencas en 0, kaj tiam ĉiu tempo tuj presi la donita linio en tiu aparta indekso en la tabelo. Do kiam ni volas halti presi el elementoj en la tabelo? Kiam ni finis, ĉu ne? Kiam ni atingis la finon de la tabelo. Do ni ne volas superi preter la longo de la tabelo, kaj ni jam scias ke ni ne bezonas efektive aktive eltrovi la longo de argv estas ĉar ĝi estas donita al ni, kaj kio estas tio? Argc. Ekzakte. Do ni volas fari ĉi procezo argc plurfoje. Mi ne estas en la dekstra dosierujo. Bone. Nun ni faru argumentojn. Neniu eraroj, kiuj estas granda. Do ni ĵus kuras argumentojn. Kio estas ĉi tuj revenos al ni? Ĝi simple tuj presi ĝin. "Vi inputted argumentojn en la programo; Mi tuj donos ĝin al vi." Do ke ​​ni volas diri argumentojn tiam foo trinkejo. Tial do tio presas ĝin reen al ni. Bone? Do tie estas ekzemplo de kiel vi povas uzi argc kaj argv sciante, ke argc reprezentas la longo de argv. Certiĝu, ke vi ne iam kun tabeloj aliro unu preter la longo de la tabelo ĉar C definitive krii ĉe vi. Vi ricevos ion nomata segmentación kulpo, kiu estas neniam amuza, esence dirante vi provas atingi ion ke ne ekzistas, ne apartenas al vi. Do certigu, kaj precipe kun la nulo-indeksado, ni ne volas - Kiel ekzemple, se ni havas aron de longo 4, ke tabelo indekso 4 ne ekzistas ĉar ni starti je 0, je nulo indekso. Ĝi fariĝos dua naturo samkiel por maŝojn kiam ni komencos je 0. Do simple observu, ke en la menso. Vi ne volas iam aliri la indekso de tabelo tio preter via atingo. Do ni povas nun vidas, kiom ni povas ia aliro la komandlinio argumentoj kiuj pasis in Sed kiel vi vidis la cxeno, argv estas fakte string tabelo. Do fakte ne estas entjero ankoraŭ, sed en Cezaro ni volas trakti entjeroj. Bonŝance, estas funkcio kreis por ni kiu povas vere konverti ŝnuro al entjero. Ankaŭ en ĉi tie ni ne pritraktas uzanto enigo kie ni instigante ilin por enigo tie por la ŝlosilo, do ni ne povas vere reprompt kaj diru: "Ho, donu al mi alian entjero, diru, se ĝi ne estas valida." Sed ni ankoraŭ bezonas kontroli por ĝusta uzado. En Cezaro ili nur rajtas pasi en 1 numeron, kaj tial ili devas kuri. / Cezaro kaj tiam ili devas doni al vi kelkajn. Do argc devas esti certa nombro. Kio nombro devus esti ke se ili devas pasi vi la. / Cezaro kaj tiam ŝlosila? Kio estas argc? >> [Studento] 2. >> Du. Ekzakte. Do vi volas certigi ke argc estas 2. Alie vi esence rifuzas uzi la programon. En ĉefa ĝi estas funkcio kiu diras int main, tiel poste ni ĉiam en bona praktiko reveno 0 je la fino de sukcesa programo. Do, se, ekzemple, ili donos al vi 3 komandlinio argumentojn anstataŭ 2 aŭ doni al vi 1, ekzemple, do kion vi faras estas vi volas kontroli por ke kaj tiam revenu 1 dirante, ne, mi ne povas procedi kun ĉi tiu programo. [Studento] Ne povas spaco en via teksto. >> Pardonu min? [Studento] Ne povas spaco en la teksto kiun vi provas ĉifri. Ah! En terminoj de la teksto kiu ni provas ĉifri, ke reale venas poste kiam oni donas la tradukenda teksto. Do ĝuste nun ni estas nur akcepti kiel komando argumentoj la reala nombro, la efektiva ŝanĝo por Cezaro kodita. [Studento] Kial vi bezonas 2 kiel kontraŭ nur 1 argc? Estas definitive 1 numeron. Ĝuste. La kialo kial ni bezonas 2 por argc anstataŭ 1 estas ĉar, kiam vi kuris de programo kaj diru. / Cezaro aŭ. / saluton, ke fakte rakontas kiel komanda linio argumento. Tial ke jam okupas 1 kaj do tiam ni inputting 1 ekstra. Do vi inputting reale ĉenon en la komanda linio argumento. Kion vi volas fari, por Cezaro ni volas trakti entjero, tiel vi povas uzi tiun atoi funkcio. Kaj esence, vi pasas en ĉenon kaj poste revenos vin entjero se ĝi estas ebla al preni tiun ĉenon en entjero. Nun memoras kiam ni pritraktas printf aŭ GetString, aĵoj kiel tiu, ni inkluzivas la bibliotekoj kiuj estas specifaj al ni. Do komence ni starti kun hash etikedo normo I / O,. H, io simila. Nu, atoi ne ene de unu el tiuj bibliotekoj, do kion ni devas fari estas ni devas inkluzivi la dekstra biblioteko por tio. Do rememori reen al Walkthrough 1 kie mi diskutis la manlibro funkcio. Vi tajpas viro en via terminalo kaj poste sekvata de la nomo de funkcio. Kaj por ke ili alportu tuta listo de ĝia uzo, sed tiel ĝi alportu kio bibliotekon kiu apartenas al. Do mi lasos tion al vi uzi la manlibro funkcio kun atoi kaj eltrovi kiu biblioteko vi bezonas inkluzivi por povi uzi la atoi funkcio. Do ni havas la ŝlosilon kaj nun klopodas atingi la simpla teksto, kaj por ke fakte tuj estos uzanto enigo, kie vi instigas. Ni traktis GetInt kaj GetFloat, do en la sama stilo ni iras al pritraktas GetString. Sed en ĉi tiu kazo ni ne bezonas fari neniun do momento aŭ dum bukloj por kontroli. GetString definitive al ni kordoj, kaj ni tuj ĉifri ajn uzanto donas al ni. Do vi povas supozi, ke ĉiuj el tiuj uzanto inputted kordoj estas korekta. Granda. Tial iam vi havas la ŝlosilon kaj iam vi devas la teksto, nun kio restas estas vi devas encipher la kompletan tekston. Nur por rapide kovri super Lingo, la kompleta teksto estas kion la uzanto donas al vi, kaj la ĉifrita teksto estas kion vi revenos al ili. Do kordoj, por povi iri tra fakte letero de letero ĉar ni devas ŝanĝi ĉiun literon, ni komprenas ke kordoj, se ni ia ŝelo redonas la mantelo, ni vidas ke ili estas nur vere listo de signoj. Unu venas post la alia. Kaj tiel ni povas trakti ĉenojn kiel arrays ĉar ili estas tabeloj de signoj. Do diru ke vi havas ĉenon nomata teksto, kaj ene de tiu variablo teksto estas stokitaj Jen CS50. Tiam teksto ĉe indeksa 0 estus ĉefurbo T, indico 1 estus h, ktp Kaj tiam kun tabeloj, en la argc ekzemple en args.c, ni vidis, ke ni devis persisti super tabelo kaj tiel ni havis ankaŭ persisti de mi = 0 ĝis i estas malpli ol la longo. Do ni bezonas iun rimedon decidi kio la longo de nia linio estas se ni iras ankaŭ persisti super ĝi. Bonŝance denove, tie estas funkcio ekzistas por ni, kvankam poste en CS50 vi certe povos apliki kaj fari viajn proprajn funkcio kiu povas kalkuli la longecon de ĉeno. Sed por nun ni tuj uzos ĉenon longo, do strlen. Vi pasas en cxeno, kaj tiam ĝi revenos al vi int kiu reprezentas la longo de via ĉeno. Ni rigardu ekzemplon de kiel ni eble povus persisti super ĉiu signo en ĉeno kaj faru ion kun tio. Kion ni volas fari estas persisti super ĉiu karaktero de la kordo, kaj kion ni volas fari estas ni presi reen ĉiu karaktero 1 de 1 krom ni aldonu ion apud ĝi. Do ni komencu kun la por buklo. Int i = 0. Ni tuj lasi spacon por la kondiĉo. Ni volas persisti ĝis ni atingos la finon de la ŝnuro, ĉu ne? Tial kion funkcio donas al ni la longo de la kordo? [Inaudible studento respondon] Tio estas la longo de la komanda linio argumentoj. Sed por ĉeno ni volas uzi funkcio kiu donas al ni la longeco de la kordo. Do jen ĉeno longa. Kaj tiel do vi devas pasi en cxeno al ĝi. Ĝi bezonas scii kion string bezonas por kalkuli la longon de. Tial en tiu kazo ni pritraktas string s. Granda. Tial kion ni volas fari, ni printf. Nun, ni volas trakti signojn. Ni volas presi ĉiu individua karaktero. Kiam vi volas presi kaleŝego, vi uzus la lokokupilo kiel% f. Kun int vi uzus% d. Kaj tiel same, kun karaktero vi uzas% c diri Mi tuj iros presi gravulo ke tio stokita ene variablo. Do ni havas ĉi tio, kaj ni aldonas periodo kaj spaco al ĝi. Kiu karaktero estas ni uzas? Ni tuj estos uzante ajn karaktero ni ĉe de la kordo. Tial ni tuj uzos iun kun ĉeno, sed ni volas esti aliri la iu karaktero tie. Do se cxeno estas nur tabelo, do kiel ni aliro elementoj de tabeloj? Ni havas tiuj rektaj krampoj, kaj tiam ni metis la indekso en tie. Do ni havas rektaj krampoj. Nia indekso en ĉi tiu kazo ni povas simple uzi i. Ekzakte. Do jen ni dirante ni tuj estos presi karakteron sekvata de punkto kaj spaco, kaj ke karaktero tuj estos la th,-a litero en nia string s. Mi simple intencas savi. Okay. Nun mi iros kuri string longa. Do ni havis ĉenon nomita OMG, kaj nun ĝi estas emfazis eĉ pli. Simile, ni diras, ke ni vere volas ricevi ĉenon de la uzanto. Kiel povus ni faru tion? Antaŭe, kiamaniere ni ricevas int? Ni diris GetInt, ĉu ne? Sed ĉi tio ne estas int, do ni GetString. Ni faras string longa. Ĉi tie ni ne eniris specifa prompto. Do mi ne scias. Mi tuj metos mian nomon ĉi tie kaj tiel mi povas fari unu el tiuj aĵoj kie mi asigni vorto por ĉiu litero aŭ io kiel tio. Cool. Do jen ĉeno longa. Do ni estas al Cezaro. Ni havas kelkajn ilojn pri kiel ni persisti super ĉenon, kiel ni aliro ĉiu individuo elemento. Do nun ni povas reiri al la programo. Kiel mi menciis antaŭe, en la ASCII tablo, via plej bona amiko, vi tuj vidos la numeroj kiuj asocias kun ĉiu litero. Do jen diras nia teksto estas mi kapturna! Tiam ĉiu de tiuj gravuloj tuj havas numeron kaj ASCII valoro asociita kun ĝi, eĉ la apostrofo, eĉ la spaco, eĉ la ekkrio marko, tiel vi volas teni ke en menso. Do diru nia ŝlosilo kiu la uzanto inkludis en sia komandlinio argumento estas 6. Tio signifas por la unua litero, kiu estas mi, kiu estas prezentita per 73, vi volas reveni al ili kion ajn letero estas reprezentita de la ASCII valoro de 73 + 6. En ĉi tiu kazo, ke estus 79. Nun ni volas iri al la sekvanta signo. Do la proksimaj en indekso 1 de la teksto estus la apostrofo. Sed memoru ni nur volas encipher la literoj. Do ni volas certigi ke la apostrofo fakte restas la sama, ke ni ne ŝanĝas de 39 al kiom 45 estas. Ni volas konservi ĝin kiel apostrofo. Do ni volas memori nur encipher la literoj ĉar ni deziras, ke ĉiuj el la aliaj simboloj por resti senŝanĝe en nia programo. Alia afero kiun ni volas estas konservi majuskloj. Do kiam vi havas Cxeflitero, ĝi devus resti kiel majuskla. Lowercases devus resti kiel minuskla. Do iuj utilaj funkcioj por povi trakti nur enciphering literoj kaj observu konservi la majuskloj de aĵoj estas la isalpha, isupper, islower funkcioj. Kaj tiel ili estas funkcioj kiuj revenos al vi Bulea valoro. Esence, vera aŭ malvera. Is this an majuskla? Ĉu ĉi tiu alfanuméricos? Ĉu ĉi tiu letero, esence. Do jen estas 3 ekzemplojn de kiel vi uzas tiun funkcion. Esence, vi povus provi se la valoro revenis al vi per tiu funkcio estas vera aŭ malvera bazita en tiu enigo. Ĉu ne encipher iu aŭ kodita ĝin aŭ certigu ke ĝi estas majuskla, ktp [Studento] Ĉu vi povas simple klarigi tiujn iom pli kaj kiel vi uzas ilin? >> Jes, certe. Do, se ni retrorigardas, jen ni havas ĉefurbon mi, ĉu ne? Do ni scias, ke mi iras al ho ĉar mi + 6 estas O. Sed ni volas certigi, ke tiu O estas tuj estos ĉefurbo O. Do esence, ke estas ia tuj ŝanĝos nian eniron. Do ĉu ĝi estas majuskla aŭ ne volas specon de ŝanĝi la maniero ke ni trakti ĝin. Se do ni uzas la isupper funkcio sur tiu aparta indekso, tiel isupper ("mi"), kiu revenas por ni vera, do ni scias, ke ĝi estas supra. Tial bazita sur tio, ni poste iros en formulo ke vi estos uzanta ŝanĝi aĵojn en Cezaro, tiel do esence, ne tuj estos iomete malsaman formulon se estas majuskla kontraste al minuskla. Sencon? Yeah. No worries. Mi parolis iomete pri aldono 6 al letero, kiu ne sufiĉe sencon krom kiam ni ia kompreni, ke tiuj signoj estas ia interŝanĝeblaj kun entjeroj. Kion ni faras estas ni ia uzo implicita casting. Ni iru en jxetantajn iom poste kie vi prenas valoron kaj vi turnas ĝin en malsama tipo ol origine estis. Sed kun ĉi pset ni povos ia interŝanĝebla uzi signojn kaj lia responda entjero valoroj. Do, se vi simple encase karakteron kun nur la simpla citaĵoj, tiam vi povos labori kun ĝi kun entjeroj, traktante ĝin kiel entjero. Do la majuskla C rilatas al 67. Minuskla f rilatas al 102. Denove, se vi volas scii tiuj valoroj, rigardu vian ASCII tablo. Do ni iru en kelkaj ekzemploj de kiel vi eble povus subtrahi kaj aldoni, kiel vi povas fakte vere funkcias kun tiuj signoj, uzu ilin sendiference. Mi diras ke ASCIIMath tuj kalkuli la aldono de gravulo al entjero kaj poste montras la rezulta karakteron tiel kiel la rezulta ASCII valoro. Kaj tial mi tie estas diranta - we'll interkonsento kun tiu parto poste - sed esence, mi diras ke la uzanto devus diri kuri ASCIIMath kune kun ŝlosilo, kaj mi dirante ke tiu ŝlosilo tuj estos la nombro kun kiu ni tuj aldoni tiun karakteron. Do jen rimarki ke de mi postuli ŝlosilo, ekde mi postulante ke ili estas doni al mi 1 aferon, Mi nur volas akcepti. / Asciimath kaj ŝlosilo. Do mi tuj postulas ke argc estas egala al 2. Se ĝi ne estas, tiam mi tuj revenos 1 kaj la programo eliras. Do mi diras la ŝlosilo ne tuj estos la unua komandlinio argumento, ĝi tuj estos la dua, kaj kiel vi vidas tie, Mi iros por igi tiun en entjero. Tiam mi iros, por kontrauxmeti karaktero esti r. Rimarku ke la tipo de la variablo chr fakte entjero. La vojo, kiun mi plu povos uzi r kiel entjero estas per encasing ĝin per tiuj sola citaĵoj. Do apogi nian printf deklaro kie ni havas lokokupilo di karaktero kaj tiam lokokupilo por entjero, la karaktero estas reprezentita de la chr, kaj la entjero estas la ŝlosilo. Kaj tiel poste ni tuj en rezulto aldoni la 2 kune. Do ni tuj aldonu r + ajn la klavo estas, kaj poste ni iras al presi la rezulto de tio. Do ni faru asciimath. Ĝi dependas de dato, do ni ĵus kuras asciimath. Ho, sed vidi, tio ne faras nenion ĉar ni ne vere donas ŝlosilo. Do kiam ĵus revenis 1, nia ĉefa funkcio, ĝi ĵus revenis al ni. Tial ni pasas en ŝlosilon. Iu donu al mi numeron. >> [Studento] 4. 4. Okay. Do r pliigis 4 tuj donos al ni v, kiu korespondas al la ASCII valoro de 118. Tial do tio ia makes sense ke - Fakte, mi povas demandi vin, kion vi opinias la ASCII valoro de r estas se r + 4 estas 118? Tiam jes, r estas 114. Do, se vi rigardos la ASCII tablo tiam, efektive, vi vidos ke r estas reprezentita de 114. Do nun ni scias ke ni povas aldoni entjeroj al signoj, ĉi tio ŝajnas sufiĉe simpla. Ni nur tuj persisti super ĉenon kiel ni vidis en ekzemplo antaŭe. Ni kontrolu se ĝi estas letero. Se jes, tiam ni ŝanĝi ĝin per nenial la ŝlosilo estas. Bela simpla, krom kiam vi atingos like this, vi vidas, ke z, reprezentita de 122, tiam donus al vi malsaman karakteron. Ni vere volas resti ene de nia alfabeto, ĉu ne? Do ni bezonas eltrovi iun formon de ia envolviendo ĉirkaŭe. Kiam vi atingas Zed kaj vi volas pliigi per certa nombro, vi ne volas iri en preter la ASCII alfabeto sekcio; vi volas kovri reen tuta vojo al A. Sed memoru ke vi ankoraŭ konservante la kazo. Do sciante ke literoj ne povas iĝi simboloj nur kiel simboloj ne tuj esti ŝanĝante tiel. En la lastaj pset vi certe ne bezonas, sed eblo estis por apliki vian avidaj pset uzante la modulon funkcio. Sed nun ni efektive tuj bezonos uzi modulo, do ni ĵus transiru ĉi iom. Esence, kiam vi havas x module y, kiu donas al vi la reston de x dividita per y. Jen kelkaj ekzemploj. Ni havas 27% 15. Esence, kiam vi subtrahi 15 el 27 tiom da fojoj kiel eble sen alveni negativa tiam vi havos 12 maldekstra super. Do jen speco de kiel en la matematika kunteksto, sed kiel ni povas efektive uzi tiun? Ĝi tuj estos utila por nia wrapover. Por tio, ni simple diri, ke mi petis vin ĉiujn, ke ili disdonu en 3 grupoj. Kelkfoje vi faras tion en grupoj kaj io simila. Say mi diris, "Bone, mi volas ke vi cxiuj esti dividita en 3." Kiel povus vi faros tion? [Inaudible studento respondon] Jes, ĝuste. Grafo malproksime. Okay. Ni efektive fari tion. Ĉu vi volas komenci? [Studentoj rakonti for] 1, 2, 3, 4. Sed memoru ... >> [Studento] Ho, pardonu. Tio estas vere bona punkto. Vi diris 4, sed ni vere volas ke vi diru 1 ĉar ni nur volas 3 grupoj. Tial, kiel - Ne, tio estas vere bona ekzemplo ĉar tiam kiel eble vi diras 1? Kio estas la rilato inter 4 kaj 1? Nu, 4 mod 3 estas 1. Do se vi daŭrigos, vi estus 2. Do ni havas 1, 2, 3, 1, 2. Denove, vi estas vere la 5a persono. Kiel vi scias diri 2 anstataŭ 5? Vi diras 5 mod 3 estas 2. Mi volas vidi, kiel multaj grupoj de 3 restas super, tiam kiu celo mi ankaux Kaj tiel do, se ni daŭre kune la tutan ĉambron, tiam ni vidus ke ni ĉiam reale aplikanta la mod funkcio al mem al ia kalkulu al. Tio estas pli ia palpebla ekzemplo de kiel vi eble uzu module ĉar mi certas plimulto de ni probable iris tra tiu procezo kie ni devis havi malproksime. Demandojn sur module? Estos bela grava por kompreni la konceptojn de ĉi tio, do mi volas certigi vin infanoj komprenas. [Studento] Se ne ekzistas resto, tio donas al vi la reala nombro? Se unu el la unuaj 3 el ili jam faris tion, ĉu doni al ili kion ili efektive estis, aŭ ĉu ili donis ilin [inaudible] >> Tio estas bona demando. Kiam ne estas resta por la module - tiel diras, ke vi havas 6 mod 3 - ke efektive donas vin 0. Ni parolos pri tio iom poste. Ho jes, ekzemple, la 3a persono - 3 _mod_ 3 estas vere 0 sed ŝi diris 3. Do jen speco de kiel ena catch, ekzemple, kiel bone, se la mod estas 0 tiam mi tuj estos la 3-a persono. Sed ni ricevos en speco de kiel ni volus trakti kio 0 estas posta. Do nun ni iel havas formon de surĵeto la Zed dekstre letero. Do nun ni trapasis tiujn ekzemplojn, ni ia vidi kiel Cezaro povus funkcii. Vi vidas la 2 alfabetoj kaj tiam vi vidos ilin movo. Do ni provu kaj esprimi, ke en terminoj de formulo. Ĉi tiu formulo estas reale donita al vi en la specifo, sed estu la speco de rigardo tra ĉiu variablo signifas. Nia fina rezulto estas tuj estos la ĉifrita teksto. Do tiu diras ke la th,-a karaktero de la ĉifrita teksto tuj respondas al la th,-a karaktero de la kompleta teksto. Tio havas sencon ĉar ni volas ĉiam esti vicatendis tion supren. Do ĝi estas tuj estos la th,-a karaktero de la ĉifrita teksto plus k, kiu estas nia ŝlosilo - kiu faras senson - kaj tiam ni havas ĉi mod 26. Memoru reen kiam ni havis la Zed ni ne volas eniri la karaktero, do ni volis mod ĝin kaj tipon de wrap ĉirkaŭ la alfabeto. Post Zed vi irus al a, b, c, d, ĝis vi alvenis al la rajto nombro. Do ni scias, ke Zed, se + 6, donus al ni f ĉar post Zed venas a, b, c, d, e, f. Do ni memoros ni scias certe, ke Zed + 6 tuj donos al ni f. En ASCII valoroj, z estas 122 kaj f estas 102. Do ni devas trovi iun manieron de fari nian Cezaro formulon al ni 102 post preni en 122. Do, se ni simple apliki tiun formulon, la ('z' + 6)% 26, kiu fakte donas 24 ĉar 122 + 6 estas 128; 128% 26 donas 24 resto. Sed tio ne vere signifas f. Tio certe ne 102. Tio ankaŭ ne la 6a litero en la alfabeto. Do evidente, ni bezonas havi iun manieron de tweaking ĉi iom. En terminoj de la regula alfabeto, ni scias ke z estas la 26a letero kaj f estas la 6-a. Sed ni estas en komputiko, do ni tuj indekso je 0. Tial anstataŭ z estante la numero 26, oni tuj diras ke estas numero 25 ĉar estas 0. Do nun ni apliku tiun formulon. Ni havas z reprezentita de 25 + 6, kiu donas al vi 31. Kaj 31 mod 26 donas 5 kiel restaĵo. Tio estas perfekta ĉar ni scias ke f estas la 5a litero en la alfabeto. Sed ankoraŭ ne estas f, right? Ĝi ankoraŭ ne estas 102. Tial por tiu ĉi pset, defio estos provi eltrovi la rilato inter konverto inter tiuj ASCII valoroj kaj la alfabeta indekso. Esence, kion vi volas fari, vi volas komenci evi la ASCII valoroj, sed tiam vi volas iel traduki tiu enen alfabeta indekso tiam kalkuli kio letero devus esti - esence, kion lia alfabeta indekso estas de la kodita karaktero - tiam traduki ke reen al la ASCII valoroj. Do se vi skurĝi vian ASCII tablo, provu kaj trovi rilatojn inter, ekzemple, 102 kaj 5 aŭ la 122 kaj 25. Ni alvenas nia ŝlosilo de la komandlinio argumentoj, ni alvenas la kompleta teksto, ni enciphered ĝin. Kaj cxio ni forlasis fari estas presi ĝin. Ni povus fari ĉi paro de malsamaj manieroj. Kion ni povus fari estas vere presi kiel ni iru kune. Kiel ni persisti super la gravuloj de la kordoj, ni povus simple nur presi ĝuste tiam, kiam ni kalkuli ĝin. Alternative, vi povus ankaŭ konservas ĝin en tabelo kaj havas aron da karakteroj kaj fine persisti super tiu tuta tabelo kaj presi ĝin. Do vi havas kelkajn eblojn por tio. Kaj memoru ke% c tuj estos la lokokupilo por presi karakteron. Do ni havos Cezaro, kaj nun ni movi antaŭen al Vigenère, kio estas tre simila al Cezaro sed nur iomete pli kompleksa. Do esence kun Vigenère estas vi tuj estos pasante en ŝlosilvorto. Do anstataŭ numero, vi tuj havas ĉenon, kaj por ke tuj agi kiel via ŝlosilvorto. Tiam, kiel kutime, vi tuj ricevas prompto por kordoj de la uzanto kaj tiam encipher ĝin kaj tiam donu al ili la ĉifrita teksto dorso. Do kiel mi diris, estas tre simila al Cezaro, krom anstataŭ movo de iu numero, la nombro estas vere tuj ŝanĝos ĉiufoje el karaktero al karaktero. Por reprezenti ke reala nombro ŝanĝi, ĝi estas reprezentita de la klavaro literoj. Do, se vi eniros en ŝanĝo de, ekzemple, tiam tiu respondus al ŝanĝo de 0. Do ĝi estas denove reen al la alfabeta indekso. Kio povus esti utila se vi vidas ke ni vere pritraktas ASCII valoroj tiel kiel la literoj, tiel kiel la alfabeta indekso, eble trovi aŭ fari vian propran ASCII tablo kiu montras la alfabeta indekso de 0 per 25, oni tra z, kaj la ASCII valoroj tiel ke vi povas ia vidas la rilaton kaj skizi ekster kaj provi kaj trovi iun ŝablonoj. Simile, se vi movo en la certa ekzemple per f - kaj ĉi estas ĉu minuskla aŭ majuskla f - tiam tiu respondus al 5. Ĉu ni bone ĝis nun? La formulo por Vigenère estas iom malsama. Esence, vi vidos ke ĝi estas nur kiel Cezaro, krom anstataŭ simple k ni havas k indekso j. Rimarku ke ni ne uzas i ĉar esence, la longo de la ŝlosilvorto ne estas nepre la longo de nia ĉifrita teksto. Ĉi tiu estos iom pli klara kiam ni vidas ekzemplon ke mi havas iom poste. Esence, se vi kuros via programo per ŝlosilvorto de ohai, tiam tio signifas ke ĉiufoje, ohai tuj estos vian ŝanĝon. Do laŭ kio pozicio vi estas en via ŝlosilvorto, vi tuj ŝanĝi vian iuj ĉifrita teksto karaktero de tiu sumo. Denove, kiel Cezaro, ni volas certigi ke ni konservu la majusklojn de aĵoj kaj ni nur encipher literoj, ne karakteroj aŭ spacoj. Do retrorigardas al Cezaro sur la funkcioj ke vi uzis, la vojo, kiun vi decidis kiel ŝanĝi tion, kaj apliki ke via programo tie. Do ni mapaj ĉi eksteren. Ni havas tekston kiun ni alvenas al la uzanto de GetString dirante Tiu ... estas CS50! Tiam ni havas ŝlosilvorto de ohai. La unuaj 4 karakteroj estas bela simpla. Ni scias ke T tuj estos moviĝis per o, tiam h tuj estos moviĝis per h, i tuj estos moviĝis per. Ĉi tie vi vidas, ke oni reprezentas 0, tiel tiam la fino valoro estas fakte ĝuste la sama litero kiel antaŭe. Tiam s moviĝis per i. Sed tiam vi havas ĉi tiuj periodoj tie. Ni ne volas encipher ke, do tiam ni ne ŝanĝi ĝin por nenio kaj ĝuste presi la periodo neŝanĝita. [Studento] Mi ne komprenas kiel vi scias, ke ĉi tio ŝanĝis de - Kie vi faris - >> Ho, pardonu. Ĉe la supro tie vi vidas ke la komanda linio argumento ohai tie, ke tuj estos la ŝlosilvorto. Kaj tial esence, vi biciklas tra la gravuloj de la ŝlosilvorto. [Studento] So o tuj estos sxangxigxantaj la sama - Do o respondas al certa nombro en la alfabeto. [Studento] Ĝuste. Sed kie vi akiris la CS50 parto de? Oh. Tio estas en GetString kie vi estas kiel, "Donu al mi string kodi." [Studento] Ili tuj donos al vi, ke argumento ŝanĝi per kaj tiam vi petos vian unuan kordoj. >> Jes. Do kiam ili kuras la programo, ili tuj inkluzivi la ŝlosilvorto en lia komandlinio argumentojn kiam ruli ĝin. Tiam kiam vi kontrolis ke mi efektive donis al vi 1 kaj ne pli, ne malpli, tiam vi tuj instigas ilin por kordoj, diru, "Donu al mi linio." Do jen kie en ĉi tiu kazo mi donis al vi Ĉi ... estas CS50! Do tiam vi tuj uzas tiun kaj uzu ohai kaj persisti super. Rimarku, ke ĉi tie ni saltis super encrypting la periodoj, sed en terminoj de nia pozicio por ohai, la sekva ni uzis o. En ĉi tiu kazo ĝi estas iom pli malfacile vidi ĉar tio estas 4, do ni daŭre iom. Nur batos min tie. Tiam ni havas i kaj j, kiuj estas poste tradukita de o kaj h respektive. Tiam ni havas spacon, kaj tiel poste ni scias, ke ni ne tuj encipher la spacoj. Sed rimarkas ke anstataŭ iri al en ĉi lokon ĉi tie, ni encrypting per - Mi ne scias se vi povos vidi ke - right here. Do ĝi ne plaĉas al mi efektive antaŭdeterminita, diru, o iras tie, h iras tien, oni iras tie, i iras tien, o, h, a, i, o, h, a, i. Vi ne faras tion. Vi nur ŝanĝi vian pozicion en la ŝlosilvorto kiam vi scias, ke vi efektive tuj estos encrypting reala litero. Ĉu tian sencon? Okay. Do nur iuj recordatorios. Vi volas certigi ke vi nur antaŭeniri la sekvanta letero en via ŝlosilvorto se la karaktero en via teksto estas letero. Do diru ni ĉe la aŭ. Ni rimarkas, ke la venonta signo, la i indekso de la kompleta teksto, estas nombro, ekzemple. Tiam ni ne antaŭi j, la indekso por nia ŝlosilvorto, ĝis ni atingos alian leteron. Denove, vi ankaŭ volas certigi ke vi wraparound al la komenco de la ŝlosilvorto kiam vi estas je la fino de ĝi. Se vi vidas ĉi tie ni estas en mi, la venonta unu devas esti o. Do vi volas trovi metodon de povi wraparound al la komenco de via ŝlosilvorto ĉiufoje ke oni atingas la finon. Kaj tiel denove, kia operatoro estas utila en tiu kazo por envolviendo ĉirkaŭ? Kiel en la kalkula ekstere ekzemplo. [Studento] La procentoj signo. >> Jes, la procentoj signo, kiu estas module. Do module venos en oportuna tie kiam vi volas kovri super la indekso en via ohai. Kaj ĝuste rapida aludo: Provu pensi envolviendo super la ŝlosilvorto iom kiel la kalkula for, kie se ekzistas 3 grupoj, la 4-a persono, ilia nombro, ke ili diris estis 4 mod 3, kiu estis 1. Do provu kaj pensi pri tio, ke vojo. Kiel vi vidis en la formulo, kie ajn vi havas ci kaj poste pi sed tiam kj, vi volas certigi ke vi observu spuron de tiuj. Vi ne bezonas nomi ĝin mi, vi ne bezonas nomi ĝin j, sed vi volas certigi ke vi observu trako de la pozicio ke vi estas en en via teksto tiel kiel la pozicio ke vi estas en en via ŝlosilvorto ĉar tiuj ne nepre tuj estos la sama. Ne nur faras la ŝlosilvorto - ĝi povus esti tute malsama longo ol via teksto. Ankaŭ, viaj teksto, estas nombroj kaj signoj, do ĝi estas ne tuj perfekte kongruas supren kune. Jes. [Studento] Ĉu estas funkcio ŝanĝi kazo? Ĉu vi povas ŝanĝi al ĉefurbo A? >> Jes, tie certe estas. Vi povas kontroli - Mi kredas ke estas toupper, ĉiuj 1 vorto. Sed kiam vi provas kodita aĵoj kaj konservi la tekston, ĝi estas bona esence havi apartajn kazojn. Se estas majuskla, do vi volas ŝanĝi per ĉi ĉar en vian formulon, kiam vi retrorigardas kiel ni devas speco de iras interŝanĝebla inter la ASCII maniero reprezenti la numeroj kaj la vera alfabeta indekso, ni volas certigi tie tuj estos ia mastro, ke vi tuj uzos. Alia noto pri la ŝablono, fakte. Vi tuj definitive pritraktatos nombroj. Provu ne uzi magion nombroj, kiu estas ekzemplo de stilo. Do diru vi volas ĉiufoje movo iun por ŝati - Okay, do aludo, alia spoiler estas kiam vi iras al sxangxigxantaj ion per certa kvanto, provas ne reprezentas ke per reala nombro sed prefere provu kaj vidu se vi povas uzi la ASCII valoro, kiu estos speco de fari pli senco. Alia noto: Ĉar ni pritraktas formuloj, eĉ se viaj TF estos ia scias kion ŝablono vi povus uzi, plej bone en viaj komentoj ia klarigi la logikon, kiel, "Mi uzas ĉi ŝablono ĉar ..." kaj tipon de ekspliki la ŝablono koncize en via komentoj. [Tio walkthrough 2] Se tie ne estas neniu aliaj demandoj, tiam mi nur resti ĉi tie por iom. Bonŝancon kun via pset 2: Crypto kaj dankon pro veni. [Studento] Dankon. >> Dankon. [Media eksterrete intro]