Programmazione

  • Materia: Programmazione
  • Visto: 5640
  • Data: 07/05/2008
  • Di: Redazione StudentVille.it

Linguaggio C: un semplice programma di crittografia

esercizio svolto o teoria

A cura di: Administrator

/*
 * Una azienda vuole trasmettere dei dati sulla linea telefonica,
 * ma i suoi responsabili sono preoccupati dal fatto che i propri
 * telefoni potrebbero essere spiati. Tutti i loro dati sono
 * trasmessi come interi di quattro cifre.
 * Vi hanno chiesto di scrivere un programma che crittografi
 * i loro dati in modo che possano essere trasmessi con maggior
 * sicurezza.
 * Il vostro programma dovrà leggere un intero di quattro cifre
 * e crittografarlo nel modo seguente: sostituite ogni cifra
 * con (la somma di quella cifra + 7) modulo 10. In seguito,
 * scambiate la prima cifra con la terza, e scambiate la seconda
 * cifra con la quarta. Visualizzate quindi l'intero crittografato.
 */
/*
 * SVILUPPO PROGRAMMA
 * (mediante processo top-down per raffinamenti successivi)
 *
 * TOP: prendere un intero in ingresso, crittografarlo, stamparlo
 *      in output.
 *
 * RA1: finché intero maggiore 9999 o minore -9999
 *          stampare messaggio "L'intero deve essere di 4 cifre"
 *          prendere un intero in ingresso
 *      cifra_1 = numero / 1000; cifra_1 = (cifra_1 + 7) % 10;
 *      numero = numero % 1000;
 *      cifra_2 = numero / 100; cifra_2 = (cifra_2 + 7) % 10;
 *      numero = numero % 100;
 *      cifra_3 = numero / 10; cifra_3 = (cifra_3 + 7) % 10;
 *      numero = numero % 10;
 *      cifra_4 = numero; cifra_4 = (cifra_4 + 7) % 10;
 *      cifra_tmp = cifra_1;
 *      cifra_1 = cifra_3; cifra_3 = cifra_tmp;
 *      cifra_tmp = cifra_2;
 *      cifra_2 = cifra_4; cifra_4 = cifra_tmp;
 *      numero = cifra_4 + cifra_3 * 10 + cifra_2 * 100 + cifra_1 * 1000;
 *      visualizza numero;
 */
/*
 * IMPLEMENTAZIONE
 */
#include <stdio.h>
int
main(void)
{
	int cifra_1, cifra_2, cifra_3, cifra_4, cifra_tmp;
	int numero = 10000;
	while (numero < 0 || numero > 9999) {
		printf("\nInserire numero da crittografare: (0000 to 9999): ");
		scanf("%d", &numero);
	}
	cifra_1 = numero / 1000; cifra_1 = (cifra_1 + 7) % 10;
	numero %= 1000;
	cifra_2 = numero / 100; cifra_2 = (cifra_2 + 7) % 10;
	numero %= 100;
	cifra_3 = numero / 10; cifra_3 = (cifra_3 + 7) % 10;
	numero %= 10;
	cifra_4 = numero; cifra_4 = (cifra_4 + 7) % 10;
	cifra_tmp = cifra_1;
	cifra_1 = cifra_3; cifra_3 = cifra_tmp;
	cifra_tmp = cifra_2;
	cifra_2 = cifra_4; cifra_4 = cifra_tmp;
	printf("Numero crittografato: %d%d%d%d\n",
	    cifra_1, cifra_2, cifra_3, cifra_4);
	return (0);
}
/*
 * Scrivete un programma a parte che prenda in input un intero
 * crittografato di quattro cifre e lo decifri, in modo da formare
 * il numero originale.
 */
#include <stdio.h>
int
main(void)
{
	int cifra_1, cifra_2, cifra_3, cifra_4, cifra_tmp;
	int numero = 10000;
	while (numero < 0 || numero > 9999) {
		printf("\nInserire numero da decrittografare: (0000 to 9999): ");
		scanf("%d", &numero);
	}
	/* individua ogni cifra */
	cifra_1 = numero / 1000;
	numero %= 1000;
	cifra_2 = numero / 100;
	numero %= 100;
	cifra_3 = numero / 10;
	numero %= 10;
	cifra_4 = numero;
	/* scambia la prima con la terza, la seconda con la quarta */
	cifra_tmp = cifra_1;
	cifra_1 = cifra_3; cifra_3 = cifra_tmp;
	cifra_tmp = cifra_2;
	cifra_2 = cifra_4; cifra_4 = cifra_tmp;
	/* trova cifra originale */
	cifra_1 = (cifra_1 - 7); if (cifra_1 < 0) cifra_1 += 10;
	cifra_2 = (cifra_2 - 7); if (cifra_2 < 0) cifra_2 += 10;
	cifra_3 = (cifra_3 - 7); if (cifra_3 < 0) cifra_3 += 10;
	cifra_4 = (cifra_4 - 7); if (cifra_4 < 0) cifra_4 += 10;
	printf("Numero decrittografato: %d%d%d%d\n",
	    cifra_1, cifra_2, cifra_3, cifra_4);
	return (0);
}