Ultima modifica:
Oh giusto, come si vede dal commento ho unito K e L invece di K e Q. Ovviamente l'array corretto è@St3ve forse mi sono perso qualcosa, ma non mi sembra sia corretto dall'array.
C:
int square[] = {
11, 12, 13, 14, 15, // a b c d e
21, 22, 23, 24, 25, // f g h i j
31, 32, 33, 34, 35, // k l m n o
41, 31, 42, 43, 44, 45, // p q r s t u
51, 52, 53, 54, 55 // v w x y z
};
Hai studiato gli array e non hai studiato gli array bidimensionali, oppure non hai proprio mai fatto gli array e volevi una soluzione che non li usasse? Se ti disturba il fatto che non ho specificato nessuna dimensione, puoi tranquillamente scrivereNon riesco a capire la funzione dell [] dopo int square d il meccanismo che porta encode_char a controllare miuscole e maiuscole..
int square[26] = { /* contenuto */ };
.Quando si indicizzano gli array (e in generale quando si parla di informatica) si inizia a contare da zero: A=0, B=1, C=2, D=3, ..., Z=25. Il primo indice è zero e il ventiseiesimo indice è 25.es C-A=2 ?? Se guardo la teblla ascii a=65, tu intendo la terza lettera dell'alfabeto?
Guardando la tabella ASCII la a (minuscola) corrisponde al numero 97 e la z (minuscola) è 122. Le lettere sono disposte in ordine, quindi i valori da 97 a 122 sono tutte e 26 le lettere minuscole. Allo stesso modo, guardando la tabella ASCII, la A (maiuscola) corrisponde a 65 e la Z (maiuscola) è 90 e tutti i valori da 65 a 90 sono tutte e 26 le lettere maiuscole. Avrei potuto scrivereif ('a' <= c && c <= 'z')
if (97 <= c && c <= 122)
, ma ho preferito usare direttamente i char 'a' e 'z' per rendere più chiaro il significato della condizione.Quando faccio
c - 'a'
oppure c - 'A'
per calcolare l'indice, è come se stessi facendo c - 97
oppure c - 65
. Sto semplicemente convertendo la sequenza da 97 a 122 e la sequenza da 65 a 90 nella sequenza da 0 a 25.È Polibio che, essendo un cifrario vecchio e usato "a mano" sceglie di codificare due lettere con lo stesso simbolo. Qualcosa di simile avviene anche con Playfair: è bello avere un quadrato, ma purtroppo le lettere dell'alfabeto sono 26. Generalmente si dice K=Q, I=J oppure C=K almeno leggendo la frase capisci comunque il significato (si pronunciano in modo simile).Comunque mi sfugge perchè in tabella abbiano codificato con il 31 sia k che q. In caso di decodifica, come torni indietro? "kuadro" == "quadro"...