>> ZAMYLA Chan: Gratulojn sur fini vian
unua paro de C programoj.
Mi scias, ke via unua incursión C sintakso povas esti fortimiga.
Sed mi certigas vin, al la fino de la Kompreneble, vi povos rigardi la
unua paro de taskoj kaj kompletigi ilin en minutoj.
>> Nun ke vi fariĝas pli familiara kun sintakso, ni iru al Cezaro.
En Cezaro, la uzanto sendi al entjero klavo kiel komanda linio
argumento, tiam entajpi ebenaĵo teksto mesaĝon ĉe la prompto.
La programo estos tiam encipher la teksto kaj presita
iliaj ĉifrita teksto mesaĝo.
>> La enciphering por Cezaro estas sufiĉe simpla.
Shift ĉiu litero, en siaj plata teksto, por la ŝlosilo.
Kiel rezulto, estas ankaŭ bela necerta.
Sed apliki Cezaro enkondukos nin al ASCIIMath kaj tabelo datumoj
strukturoj.
Ni ricevos pli kompleksa ĉifroj poste.
Kun Cezaro ŝlosilo de 2, la litero A en plata teksto estus reprezentita de
la litero C en ĉifrita teksto ĉar C estas du literoj post A. B estus
reprezentita de D kaj C por E. Al la fino de la alfabeto, W estas
reprezentita de Y, kaj X per Z. Sed Y ĝi ne havas du literojn post ĝi, do
la ĉifroj kovras ĉirkaŭ la alfabeto.
Y en plata teksto estas tiel reprezentita de Al en ĉifrita teksto, kaj Z de B. Ĝi povas
helpi por vidi kiel la cezaro Cypher kiel kontinua alfabeto rado.
>> Por encipher liaj tekstoj, la uzanto eniros du argumentoj
en la komandlinio -
. / Cezaro sekvis per ŝlosilo.
Kiel ĉiam, ni ne povas fidi la uzanto tute eniri enigo kiuj faras
senson por nia programo.
Do ni devos validigi siajn komandlinio enigo.
>> Anstataŭ uzi int main malplenon, ni estas uzante int main, int argc, argv kordo.
La entjera variablo argc reprezentas la nombro de argumentoj pasis en
la komandlinio.
Kaj argv estas tabelo, aŭ pensi pri tio kiel listo, el la argumentoj pasis in
>> Do por Cezaro, kiel ni validigi la uzanto eniro?
Nu, ili nur devas eniri du komandlinio argumentoj -
. / Cezaro kaj ŝlosilo.
Do se argc ne 2, kiu signifas, ke ili ankaŭ forgesis ŝlosilon kaj justa
eniris. / Cezaro, aŭ ili eniris multnombraj klavoj.
>> Se ĉi tiu estas la kazo, tiam vi deziras presi instrukcioj
kaj forlasis la programon.
Ili bezonos reprovi de la komandlinio.
Sed eĉ se argc estas 2, vi instruos vin bezonas kontroli ĉu ili
doni al vi validan ŝlosilon.
Por Cezaro, vi bezonas entjero.
Sed argv estas tabelo de kordoj.
Kiel vi aliri al tiu klavo?
>> Rapida rigardi arrays -
datumstrukturoj kiuj entenas multnombrajn valoroj de la sama datumtipo.
Elementoj estas nulo-indeksitaj, signifante ke la unua elemento estas la indekso nulo
kaj la lasta elemento estas indekso grandeco minus 1, kie grandeco estas la nombro de
eroj en la tabelo.
>> Se mi deklaris novan ĉenon tabelo leterkesto de longo 3, vide, ĝi
aspektas kiel ĉi tio.
Tri ujoj por kordoj , Flanko ĉe flanko.
Por aliri al iu ero, vi tajpi la nomon de la tabelo kaj poste indiki
la indekso en kvadrataj krampoj.
Jen, mi atribui valoron al ĉiu elemento, kiel mi farus kun ajna
aliaj kordoj variablo.
>> Do por atingi nian komandlinio argumentoj, ĉiuj ni devas fari estas aliro
la dekstra elemento de la argv tabelo.
Se la uzanto eniris. / Blastoff Teamo Raketo en la fina stacio, argv 0 farus
esti. / blastoff.
argv estus Team, kaj arg2 estus raketo.
>> Nun ni povas aliri nian ŝlosilo, ni ankoraŭ bezonos fari
certas, ke ĝi estas ĝusta.
Ni devas konverti ĝin en entjero.
Sed ni ne povas simple jxeti kiel ni faris antaŭe.
Bonŝance, la A al Y funkcio prizorgas de ĉi tio por ni kaj eĉ revenas 0
se la kordo ne povas esti konvertita en entjero.
Ĝi dependas de vi, kvankam, por diri al la uzanto kial vi ne faros
lasu la programon procedi.
Stoki la rezulto de A al Y en entjero, kaj tie vi havas vian ŝlosilon.
La sekva parto estas simpla.
Instigas la uzanto por lia simpla teksto, kiu estos de datumtipo kordo.
Feliĉe por ni, ĉiuj uzanto inputted kordoj estas validaj.
>> Nun ke ni havas ĉiujn necesajn enigo de la uzanto, estas tempo por ni
encipher lian mesaĝon.
La koncepto de Cezaro estas simpla sufiĉe por kompreni.
Sed kiel via komputilo scias kion leteroj venas post unu al alia?
>> Tie estas kie la ASCII tablo venas in
Ĉiu karaktero havas entjero nombro asociita kun ĝi.
Ĉefurbo A estas 65.
Ĉefurbo B estas 66.
Minuskla a estas 97.
Minuskla b estas 98.
Sed karakteroj ne estas limigitaj al nur alfabeta nombroj.
Ekzemple, la @ simbolo estas ASCII numeron 64.
>> Antaŭ kontraktanta kun la tuta ĉeno, ni ŝajnigi ni nur devas ŝovi, ŝovo
unu signo.
Nu, ni nur volas ŝanĝi reala literoj en la simpla teksto, ne
karakteroj aŭ nombroj.
Do la unua aĵo kiun ni volas kontrolu estas ĉu la karaktero estas en
la alfabeto.
>> La funkcio isalpha faras tion por ni kaj resendas Bulea -
vera se la karakteroj estas litero, malvera se alie.
Du aliaj utilaj funkcioj estas isupper kaj islower, kun
mem-klarigan nomoj.
Ili revenas vera se la donita karaktero estas majuskla aŭ minuskla,
respektive.
Ĉar ili estas Booleans, ili estas utilaj por uzi kiel kondiĉoj.
>> Se isalpha revenas vera, vi bezonos movi ke karaktero de la ŝlosilo.
Do ni malfermu al ASCIIMath kaj faru iujn ASCII math.
La uzo estas tre simila al la uzado por Cezaro kaj prenas en ŝlosila en la
komandlinio.
>> Se mi kuras ASCIIMath 5, ŝajnas aldoni 5 al a, donante al mi la leteron f, kaj
montri la ASCII valoro.
Do ni rigardu la programo.
>> Vi povus demandi, ĝuste ĉi tie, kial litero estas entjero, kiam ĝi estas
klare, nu, leteron.
Ĝi rezultas ke karakteroj kaj entjeroj estas interŝanĝeblaj.
Por meti la literon A en sola citiloj, la entjero povas stoki
la ASCII valoro de kapitalo A. Atentu, tamen.
Vi bezonas la sola vestojn.
Sen la sola citiloj, la tradukilo serĉus variablo
nomata A, kaj ne la karakteron.
>> Tiam mi aldonas literon kaj ŝlosilo, stokante la sumo en la int variabloj rezulto.
Eĉ se rezulto estas de datumtipo entjera, mia printf deklaro uzas la
% C lokokupilo por gravuloj.
Do la programo presas la karaktero asociita kun la entjera rezulto.
Kaj ĉar ni presis la entjero formo tiel uzante% d, ni vidas
la nombro tiel.
Do nun vi povas vidi, ke ni trakti karakteroj kaj
entjeroj, kaj inverse.
>> Ni provo el ASCIIMath kelkaj pli fojoj uzante 25 kiel ŝlosilo.
Ni ricevas la literon z.
Nun ni provas 26.
Ni volas ricevi la literon a, sed anstataŭ ni enmetu maldekstran krampon.
Do evidente, nur aldonante la ŝlosilo al la letero ne faros.
Ni devas eltrovi formulon por enpaki ĉirkaŭ la alfabeto, kiel nia
Ekzemple en la komenco faris.
>> Al formulo por la cezara shift estas kiel sekvas.
c egalas p plus k module 26.
Memoru ke module estas utila operacion kiu donas al ni la reston
la dividadon de unu nombron por la alia.
Ni apliki tiun formulon al la ebenaĵo teksto litero kun Ŝlosilo de 2.
La ASCII valoro de y estas 89, kiuj donas al ni 91 module 26,
kiu egalas 13 -
certe ne la ASCII valoro de, kiu estas 67.
>> Humor min nun kaj malproksimigi de la ASCII valoroj al alfabeta indekso
kie A estas nulo kaj Z estas 25, signifante ke Y estas 24.
24 plus 2, module 6 donas al ni 26, module 26, 0, kio estas la
alfabeta indekso de.
Do tiu formulo ŝajnas apliki al la alfabeta indekso de la letero kaj
ne lia ASCII valoro.
>> Sed vi komencu per ASCII valoroj.
Kaj presi la ĉifrita teksto karaktero, vi bezonos lian ASCII valoro tiel.
Ĝi dependas de vi, do por eltrovi kiel ŝanĝi reen.
>> Unufoje vi diveni la rajton formulo por unu signo, ĉiuj vi bezonas fari
estas apliki la saman formulon por ĉiu letero en la simpla teksto -
nur se tiu letero estas alfabeta, kompreneble.
Kaj memoru, ke vi bezonas konservi la kazo, supra aŭ suba, tio estas kie
la isUpper kaj isLower funkcioj menciita pli frue venos en oportuna.
Vi povus havi du formulojn -
unu por majusklajn literojn kaj unu por minuskle.
Do isUpper an isLower helpos vin determini kiu formulo apliki.
>> Kiel vi aplikas vian formulon al ĉiu sola karaktero en ĉeno?
Nu, ĉeno estas nur tabelo de karakteroj.
Do vi povas aliri al ĉiu karaktero de kolektante super ĉiu signo en la
kordo en buklo for.
Koncerne al la kondiĉo de via por ciklo, la funkcio strlen, por kordoj
longitudo, venos en oportuna.
Ĝi portas en ĉeno kiel enigo kaj Revenas la longo de tiu linio.
Certiĝu por inkludi la dekstra biblioteko uzi la korda longeco funkcio.
>> Kaj jen vi havas vian ĉifrita teksto.
Mia nomo estas la Zamyla.
Kaj [parolante CODE].