logo Thecsea.it
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License
scolastica » esercizi » terza superiore » linguaggio c

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");
}

torna

Copyright © 2004-2018 thecsea.it (Claudio Cardinale - [email protected])! Tutti i diritti riservati. - contattaci