Testo dell'esercizio
La codifica crittografica di Cesare consiste nel sostituire ogni carattere con quello che si trova nella k-esima posizione successiva dell´alfabeto. Il numero k rappresenta la chiave (0 < k < 26).
Per esempio, con k = 2 : ´a´ --> ´c´, ´e´ --> ´g´, ´z´ --> ´b´.
Per decriptare, basta sostituire ogni carattere con quello che si trova nella k-esima posizione precedente dell´alfabeto.
Scrivere un programma che:
* Accetti in ingresso una stringa (composta da soli caratteri minuscoli e priva di spazi) e una chiave
* Scriva la versione crittografata della stringa
* Decripti il risultato e visualizzi la stringa originale
mostra soluzione
/*
CLAUDIO CARDINALE III AI
La codifica crittografica di Cesare consiste nel sostituire ogni carattere con quello che si trova nella k-esima posizione successiva dell´alfabeto. Il numero k rappresenta la chiave (0 < k < 26).
Per esempio, con k = 2 : ´a´ --> ´c´, ´e´ --> ´g´, ´z´ --> ´b´.
Per decriptare, basta sostituire ogni carattere con quello che si trova nella k-esima posizione precedente dell´alfabeto.
Scrivere un programma che:
* Accetti in ingresso una stringa (composta da soli caratteri minuscoli e priva di spazi) e una chiave
* Scriva la versione crittografata della stringa
* Decripti il risultato e visualizzi la stringa originale
*/
#include<stdio.h>
#define MAX 1000
int main(){
//dichiarazioni
int i,len,chiave,err=1;
char frase[MAX],frasec[MAX],frased[MAX];
//acquisizione dati
printf("inserire la frase (solo caratteri minuscoli e senza spazi) : ");
gets(frase);
do{
printf("inserire la chiave di criptazione : ");
scanf("%d",&chiave);
}while(chiave <0 || chiave >26);
//calcoli e visualizzazione risultati
//lunghezza
while(frase[len] != '\0')
len++;
//criptazione
for(i=0;i<len && err;i++)
if(frase[i]>='a' && frase[i]<='z')
if(chiave+frase[i]>'z')
frasec[i] = 'a'+chiave-('z'-frase[i])-1;
else
frasec[i] = frase[i] + chiave;
else
err = 0;
frasec[len] = '\0';
if(err){
printf("termine criptato : %s\n",frasec);
//decriptazione
for(i=0;i<len && err;i++)
if(frasec[i]-chiave<'a')
frased[i] = 'z'-(chiave-(frasec[i]-'a')-1);
else
frased[i] = frasec[i] - chiave;
frased[len] = '\0';
printf("termine decriptato : %s\n",frased);
}else
printf("non sono stati inseriti caratteri minuscoli o sono stati inseriti spazi\n");
}
Testi Consigliati:
Il linguaggio C. Principi di programmazione e manuale di riferimento. Ediz. MyLab. Con Contenuto digitale per download e accesso on line
C guida alla programmazione: Conoscere lo standard C11 dalle basi del linguaggio alle direttive del preprocessore (Programmare con C Vol. 1)
Programmazione in C
torna