>> ZAMYLA Chan: Felicitări pe de finisare dvs.
Primul cuplu de programe C.
Știu că prima incursiune în Sintaxa C poate fi descurajantă.
Dar eu vă asigur, la sfârșitul Desigur, veți avea posibilitatea să se uite la
Primul cuplu de misiuni și le finaliza în câteva minute.
>> Acum, că sunteți obtinerea mult mai familiar cu sintaxa, să trecem la Cezar.
În Cezar, utilizatorul va prezenta o Cheia întreg ca o linie de comandă
argument, apoi introduceți un simplu mesaj text la prompt.
Programul va codifica apoi textul și de imprimare
lor mesaj cifrat.
>> Cifrare pentru Cezar este destul de simplu.
Shift fiecare literă, în lor text simplu, cu cheia.
Ca urmare, este de asemenea destul de nesigur.
Dar de punere în aplicare Cezar va introduce ne la datele ASCIIMath și matrice
structuri.
Vom ajunge la mai complexe cifruri mai târziu.
Cu o cheie Cezar de 2, litera A din text simplu va fi reprezentată de
litera C în cifrat, deoarece C este de două scrisori de la A. B ar fi
reprezentată de D și C, de E. Spre sfârșitul alfabetului, W este
reprezentată de Y, X și Y de Z. Dar nu are două litere după aceasta, așa
de cifruri infasoara in jurul alfabetul.
Y în text simplu este astfel reprezentată de A în cifrat, și Z de B. Se poate
ajuta pentru a vedea Cezar Cypher ca o roată alfabet continuu.
>> Pentru a codifica textul lor, utilizatorul va introduce două argumente
în linia de comandă -
. / Cezar, urmat de o cheie.
Ca întotdeauna, nu putem avea încredere în utilizatorului complet pentru a intra intrare, care face
sens pentru programul nostru.
Așa că va trebui să valideze lor linie de intrare de comandă.
>> În loc de a folosi main Int, suntem folosind int main, argc Int, string argv.
Întreg argc variabilă reprezintă numărul de argumente trecute în
linia de comandă.
Și argv este o matrice, sau cred ca e o listă, a argumentelor a trecut inch
>> Deci, pentru Cezar, cum putem valida de intrare a utilizatorului?
Ei bine, acestea ar trebui să fie intra numai două argumente în linia de comandă -
. / Cezar și o cheie.
Deci, dacă argc nu este 2, ceea ce înseamnă că ei fie uitat o cheie și doar
a intrat. / Cezar, sau se a intrat mai multe chei.
>> Dacă acesta este cazul, atunci veți doriți să imprimați instrucțiuni
și închide programul.
Ei au nevoie pentru a încerca din nou de la linia de comandă.
Dar, chiar dacă argc este 2, veți nevoie pentru a verifica dacă acestea
vă dau o cheie valabilă.
Pentru Cezar, ai nevoie de un întreg.
Dar argv este o matrice de siruri de caractere.
Cum accesezi că cheia?
>> O scurtă privire la tablouri -
structuri de date care dețin mai multe Valorile de același tip de date.
Intrările sunt zero indexate, ceea ce înseamnă că Primul element este zero, indicele
iar ultimul element este la dimensiunea indexului minus 1, în cazul în care dimensiunea este numărul de
elemente din matrice.
>> În cazul în care am declarat-o căsuță poștală nouă gamă de coarde de lungime 3, vizual, acesta
arata ca aceasta.
Trei containere pentru siruri de caractere , Cot la cot.
Pentru a accesa orice element, tastați numele de matrice și apoi indică
indicele în paranteze pătrate.
Aici, eu atribuirea o valoare la fiecare Element, la fel cum mi-ar face cu orice
altă variabilă șir.
>> Deci, pentru a accesa argumentele de linie de comandă, tot ce trebuie să faceți este să accesați
elementul dreptul de matrice argv.
În cazul în care utilizatorul a introdus. / Explozie Echipa Rachetă în terminal, argv 0 ar fi
fie. / blastoff.
argv ar fi echipa, și arg2 ar fi rachete.
>> Acum, că ne putem accesa cheia noastră, avem încă nevoie pentru a face
sigur că e corect.
Trebuie să-l transforme într-un întreg.
Dar nu putem pur și simplu arunca ca am făcut anterior.
Din fericire, de la A la funcția Y are grijă de acest lucru pentru noi și chiar se întoarce 0
dacă șirul nu poate fi convertit într-un număr întreg.
Este până la tine, totuși, să-i spuneți utilizatorul de ce nu va
să permiteți ca programul continua.
Stoca rezultatul A la Y într-un întreg, și nu aveți cheia.
Următoarea parte este simplu.
Solicita utilizatorului pentru textul lor simplu, care va fi de tip șir de date.
Din fericire pentru noi, toți utilizatorii introduse siruri de caractere sunt valide.
>> Acum, că avem toate datele necesare de utilizator, e timpul pentru noi să
codifica mesajul lor.
Conceptul de Cezar este simplu suficientă pentru a înțelege.
Dar cum știe computer care scrisori de vin unul după altul?
>> Iată unde tabelul ASCII vine inch
Fiecare personaj are un întreg numărul asociat cu ea.
Capital A este de 65.
Capital B este 66.
Minuscule un este 97.
Mici b este 98.
Dar personajele nu sunt limitate la doar numere alfabetice.
De exemplu, simbolul @ este numărul ASCII 64.
>> Înainte de a face cu întregul șir, Sa ne prefacem ca doar trebuie să schimbe
un caracter.
Ei bine, noi vrem doar să schimbe actuala literele din text simplu, nu
caractere sau numere.
Deci, primul lucru pe care vom dori să verificați dacă personajul este în
alfabetul.
>> Funcția isalpha face acest lucru pentru ne-a și returnează o booleană -
valabil în cazul în care personajele este o scrisoare, false în caz contrar.
Două alte funcții utile sunt isupper și islower, cu
numele de auto-explicative.
Ei se întorc true dacă caracterul dat Este mari sau mici,
respectiv.
Din moment ce acestea sunt Booleans, sunt util să se folosească ca și condiții.
>> Dacă isalpha întoarce adevărat, veți avea nevoie de pentru a schimba caracterul de cheie.
Deci, haideți să deschidem la ASCIIMath și de a face unele matematica ASCII.
Utilizarea este foarte similară cu utilizarea pentru Cezar și ia într-o cheie de la
linie de comandă.
>> Dacă aș alerga ASCIIMath 5, se pare pentru a adăuga 5 la o, oferindu-mi litera F, și
afișează valoarea ASCII.
Deci, haideți să aruncăm o privire la program.
>> S-ar putea întreba, chiar aici, de ce scrisoare este un întreg, atunci când este
în mod clar, bine, o scrisoare.
Se pare că personajele și întregi sunt interschimbabile.
Prin punerea litera A din singur ghilimele, întreg poate stoca
valoarea ASCII a capitalului A. Fii atent, totuși.
Aveți nevoie de haine unice.
Fără semne apostrof, compilator ar uita pentru o variabilă
numit A, și nu caracterul.
>> Apoi am adăuga scrisoare și o cheie, stocarea suma în rezultatul variabilele Int.
Chiar dacă rezultatul este de tipul de date întreg, declarația mea printf folosește
% C substituent pentru caractere.
Astfel încât programul imprimă caracterul asociată rezultatului număr întreg.
Și din moment ce am tipărit întreg Formularul precum și utilizarea% d, vom vedea
numărul de asemenea.
Deci, acum puteți vedea că am trata caractere și
numere întregi, și vice-versa.
>> Să testul de ASCIIMath câteva mai multe ori, utilizând 25 ca o cheie.
Am primit scrisoarea z.
Acum vom încerca 26.
Vrem să ajungem litera a, dar în schimb avem un suport stânga.
Deci, evident, doar adăugând cheie la scrisoarea nu va face.
Trebuie să găsim o formulă să-și încheie în jurul alfabetul, ca nostru
exemplu, la început a făcut.
>> O formulă pentru a Caesar schimbare este după cum urmează.
c este egal cu p, plus k modulo 26.
Amintiți-vă că modulo este un util operațiune care ne dă restul
de împărțirea numărului unul de celălalt.
Să aplicăm această formulă la campie scrisoare text cu o cheie de 2.
Valoarea ASCII a lui y este 89, care ne dă 91 modulo 26,
care este egal cu 13 -
cu siguranta nu valoarea ASCII de un, care este 67.
>> Mi pe plac acum și pentru a muta departe de Valorile ASCII de un indice alfabetic
unde A este zero, iar Z este de 25, ceea ce înseamnă că Y este 24.
24 plus 2, modulo 6, ne dă 26, modulo 26, 0, care este
index alfabetic de o.
Deci această formulă pare să se aplice index alfabetic al litera și
Nu sa valoare ASCII.
>> Dar începe cu valorile ASCII.
Și pentru a imprima caracterul cifrat, veți avea nevoie de valoarea ASCII, de asemenea.
Este până la tine, apoi, să dau afară cum pentru a comuta înainte și înapoi.
>> Odată ce îți dai seama formula de dreapta pentru un caracter, tot ce trebuie sa faci
Se aplică aceeași formulă pentru fiecare scrisoare în text simplu -
numai în cazul în care scrisoarea este alfabetică, Desigur.
Și amintiți-vă că aveți nevoie pentru a păstra caz, superioară sau inferioară, care este în cazul în care
Funcțiile islower isupper și menționat mai devreme va veni la îndemână.
S-ar putea avea două formule -
una pentru litere mari și unul pentru litere mici.
Deci, isupper un islower te va ajuta determina care formula de aplicat.
>> Cum se aplică formula pentru fiecare singur caracter într-un șir?
Ei bine, un șir este doar o matrice de caractere.
Astfel încât să puteți accesa fiecare caracter de gruparea peste fiecare caracter în
șir într-o buclă.
În ceea ce privește starea de dumneavoastră pentru buclă, funcția strlen, pentru șirul
lungime, va veni la îndemână.
Este nevoie într-un șir ca intrare și returnează lungimea acel șir.
Asigurați-vă că pentru a include biblioteca dreapta pentru a utiliza funcția lungimea șirului.
>> Și nu ai cifrat ta.
Numele meu este Zamyla.
Și [CODE vorbind].