Programma di Crittografia e Decrittografia

di il
1 risposte

Programma di Crittografia e Decrittografia

Stavolta mi sono cimentato in qualcosa di più interessante (almeno per me ), ho dovuto scrivere un programma che crittografasse un numero di 4 cifre con la seguente procedura (Dividere il numero in singole cifre ed applicare ad ogni cifra la seguente espressione (x + 7) % 10) e che stampasse in numero dopo la codifica. Poi creare un ulteriore programma per la decrittazione degli stessi numeri ottenuti con il precedente programma.

Ora, ho scritto entrambi i programmi, e funzionano, però volevo ampliarli per evitare di dover inserire soltanto numeri da 4 cifre, e cosi mi è venuto fuori questo:

PROGRAMMA DI CRITTOGRAFIA
#include <iostream>

using namespace std;

int main()
{
    cout << "Questo Programma riceve un numero intero e ne effettua una codifica." << endl;

    int intero;

    int cifra1, cifra2, cifra3, cifra4, cifra5, cifra6, cifra7 = 0;

    cout << "\nInerisci il numero: ";
    cin >> intero;

    if (intero <= 9)
    {
        cifra1 = intero % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << endl;
    }
    else if (intero <= 99)
    {
        cifra1 = (intero / 10) % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cifra2 = intero % 10;
        cifra2 += 7;
        cifra2 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << cifra2;
        cout << endl;
    }
    else if (intero <= 999)
    {
        cifra1 = (intero / 100) % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cifra2 = (intero / 10) % 10;
        cifra2 += 7;
        cifra2 %= 10;

        cifra3 = intero % 10;
        cifra3 += 7;
        cifra3 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << cifra2;
        cout << cifra3;
        cout << endl;
    }
    else if (intero <= 9999)
    {
        cifra1 = (intero / 1000) % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cifra2 = (intero / 100) % 10;
        cifra2 += 7;
        cifra2 %= 10;

        cifra3 = (intero / 10) % 10;
        cifra3 += 7;
        cifra3 %= 10;

        cifra4 = intero % 10;
        cifra4 += 7;
        cifra4 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << cifra2;
        cout << cifra3;
        cout << cifra4;
        cout << endl;
    }
    else if (intero <= 99999)
    {
        cifra1 = (intero / 10000) % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cifra2 = (intero / 1000) % 10;
        cifra2 += 7;
        cifra2 %= 10;

        cifra3 = (intero / 100) % 10;
        cifra3 += 7;
        cifra3 %= 10;

        cifra4 = (intero / 10) % 10;
        cifra4 += 7;
        cifra4 %= 10;

        cifra5 = intero % 10;
        cifra5 += 7;
        cifra5 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << cifra2;
        cout << cifra3;
        cout << cifra4;
        cout << cifra5;
        cout << endl;
    }
    else if (intero <= 999999)
    {
        cifra1 = (intero / 100000) % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cifra2 = (intero / 10000) % 10;
        cifra2 += 7;
        cifra2 %= 10;

        cifra3 = (intero / 1000) % 10;
        cifra3 += 7;
        cifra3 %= 10;

        cifra4 = (intero / 100) % 10;
        cifra4 += 7;
        cifra4 %= 10;

        cifra5 = (intero / 10) % 10;
        cifra5 += 7;
        cifra5 %= 10;

        cifra6 = intero % 10;
        cifra6 += 7;
        cifra6 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << cifra2;
        cout << cifra3;
        cout << cifra4;
        cout << cifra5;
        cout << cifra6;
        cout << endl;
    }
    else if (intero <= 9999999)
    {
        cifra1 = (intero / 1000000) % 10;
        cifra1 += 7;
        cifra1 %= 10;

        cifra2 = (intero / 100000) % 10;
        cifra2 += 7;
        cifra2 %= 10;

        cifra3 = (intero / 10000) % 10;
        cifra3 += 7;
        cifra3 %= 10;

        cifra4 = (intero / 1000) % 10;
        cifra4 += 7;
        cifra4 %= 10;

        cifra5 = (intero / 100) % 10;
        cifra5 += 7;
        cifra5 %= 10;

        cifra6 = (intero / 10) % 10;
        cifra6 += 7;
        cifra6 %= 10;

        cifra7 = intero % 10;
        cifra7 += 7;
        cifra7 %= 10;

        cout << endl;
        cout << "Il numero crittografato e': ";

        cout << cifra1;
        cout << cifra2;
        cout << cifra3;
        cout << cifra4;
        cout << cifra5;
        cout << cifra6;
        cout << cifra7;
        cout << endl;
    }
    else
    {
        cout << "\nInserito valore superiore alle 7 cifre. Riprovare con uno piu' piccolo." << endl;
    }

    return 0;
}

PROGRAMMA DI DECRITTOGRAFIA
#include <iostream>

using namespace std;

int main()
{
    cout << "Questo programma decodifica i numeri crittografati, restituendo il loro valore originario." << endl;

    int intero;

    int cifra1, cifra2, cifra3, cifra4, cifra5, cifra6, cifra7 = 0;

    cout << "\nInerisci il numero da decifrare: ";
    cin >> intero;

    if (intero <=9)
    {
        cifra1 = intero % 10;

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra1 << " ";
    }
    else if (intero <= 99)
    {
        cifra1 = (intero / 10) % 10;

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;


        cifra2 = intero % 10;

        if (cifra2 <= 6)
        {
            cifra2 += 10;
        }

        cifra2 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra1 << " ";
        cout << cifra2 << " ";
    }
    else if (intero <= 999)
    {
        cifra1 = (intero / 100);

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;


        cifra2 = (intero / 10) % 10;

        if (cifra2 <= 6)
        {
            cifra2 += 10;
        }

        cifra2 -= 7;


        cifra3 = intero % 10;

        if (cifra3 <= 6)
        {
            cifra3 += 10;
        }

        cifra3 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra1 << " ";
        cout << cifra2 << " ";
        cout << cifra3 << " ";
    }
    else if (intero <= 9999)
    {
        cifra1 = (intero / 1000);

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;


        cifra2 = (intero / 100) % 10;

        if (cifra2 <= 6)
        {
            cifra2 += 10;
        }

        cifra2 -= 7;


        cifra3 = (intero / 10) % 10;

        if (cifra3 <= 6)
        {
            cifra3 += 10;
        }

        cifra3 -= 7;


        cifra4 = intero % 10;

        if (cifra4 <= 6)
        {
            cifra4 += 10;
        }

        cifra4 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra3 << " ";
        cout << cifra4 << " ";
        cout << cifra1 << " ";
        cout << cifra2 << " ";
    }
    else if (intero <= 99999)
    {
        cifra1 = (intero / 10000);

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;


        cifra2 = (intero / 1000) % 10;

        if (cifra2 <= 6)
        {
            cifra2 += 10;
        }

        cifra2 -= 7;


        cifra3 = (intero / 100) % 10;

        if (cifra3 <= 6)
        {
            cifra3 += 10;
        }

        cifra3 -= 7;


        cifra4 = (intero / 10) % 10;

        if (cifra4 <= 6)
        {
            cifra4 += 10;
        }

        cifra4 -= 7;


        cifra5 = intero % 10;

        if (cifra5 <= 6)
        {
            cifra5 += 10;
        }

        cifra5 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra1 << " ";
        cout << cifra2 << " ";
        cout << cifra3 << " ";
        cout << cifra4 << " ";
        cout << cifra5 << " ";
    }
    else if (intero <= 999999)
    {
        cifra1 = (intero / 100000);

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;


        cifra2 = (intero / 10000) % 10;

        if (cifra2 <= 6)
        {
            cifra2 += 10;
        }

        cifra2 -= 7;


        cifra3 = (intero / 1000) % 10;

        if (cifra3 <= 6)
        {
            cifra3 += 10;
        }

        cifra3 -= 7;


        cifra4 = (intero / 100) % 10;

        if (cifra4 <= 6)
        {
            cifra4 += 10;
        }

        cifra4 -= 7;


        cifra5 = (intero / 10) % 10;

        if (cifra5 <= 6)
        {
            cifra5 += 10;
        }

        cifra5 -= 7;


        cifra6 = intero % 10;

        if (cifra6 <= 6)
        {
            cifra6 += 10;
        }

        cifra6 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra1 << " ";
        cout << cifra2 << " ";
        cout << cifra3 << " ";
        cout << cifra4 << " ";
        cout << cifra5 << " ";
        cout << cifra6 << " ";
    }
    else if (intero <= 9999999)
    {
        cifra1 = (intero / 1000000);

        if (cifra1 <= 6)
        {
            cifra1 += 10;
        }

        cifra1 -= 7;


        cifra2 = (intero / 100000) % 10;

        if (cifra2 <= 6)
        {
            cifra2 += 10;
        }

        cifra2 -= 7;


        cifra3 = (intero / 10000) % 10;

        if (cifra3 <= 6)
        {
            cifra3 += 10;
        }

        cifra3 -= 7;


        cifra4 = (intero / 1000) % 10;

        if (cifra4 <= 6)
        {
            cifra4 += 10;
        }

        cifra4 -= 7;


        cifra5 = (intero / 100) % 10;

        if (cifra5 <= 6)
        {
            cifra5 += 10;
        }

        cifra5 -= 7;


        cifra6 = (intero / 10) % 10;

        if (cifra6 <= 6)
        {
            cifra6 += 10;
        }

        cifra6 -= 7;


        cifra7 = intero % 10;

        if (cifra7 <= 6)
        {
            cifra7 += 10;
        }

        cifra7 -= 7;

        cout << endl;

        cout << "Il numero decodificato e': ";

        cout << cifra1 << " ";
        cout << cifra2 << " ";
        cout << cifra3 << " ";
        cout << cifra4 << " ";
        cout << cifra5 << " ";
        cout << cifra6 << " ";
        cout << cifra7 << " ";
    }
    else
    {
        cout << "\nInserito valore superiore alle 7 cifre. Riprovare con uno piu' piccolo." << endl;
    }

    return 0;
}

Pensate sia possibile ridurre il codice, visto che cosi per un paio di operazioni ho dovuto scrivere 300 e passa righe

1 Risposte

  • Re: Programma di Crittografia e Decrittografia

    Prima di ridurre il codice, sai che (la parte intera +1 ) del logaritmo in base 10 del numero indica il suo numero di cifre?

    Direi che la codifica potresti scriverla così
    
    	int cifre = log((double)intero)/log(10.0);
    	int pot = pow(10.0, cifre);
    
    	for(int c=0; c<=cifre; c++)
    	{
    		int cc = intero / pot;
    		cc += 7;
                    cc %= 10;
    		cout << cc;
    		intero -= cc * pot;
    		pot /= 10;
    	}
    	cout << endl;
    
    per la decodifica pensaci tu ...
Devi accedere o registrarti per scrivere nel forum
1 risposte