PDA

View Full Version : [C] problema esercizio semplice


nongio
11-10-2007, 10:43
Ciao a tutti, ho da fare un esercizio che prende in input un numero di 4 cifre, devo decriptarlo nel seguente modo:

Prendere ogni cifra e modificarla cosi : sommare la cifra a 7 e dividere per 10, utilizzare il resto della divisione come numero cifrato, e scambiare la 4a cifra con la seconda e la 3a con la prima...
io l'ho fatto cosi'


#include <stdio.h>

int main ()

{

int num;
int cif1;
int cif2;
int cif3;
int cif4;
int crit1;
int crit2;
int crit3;
int crit4;


printf ("Inserire un numero di 4 cifre:");
scanf ("%d", &num);

while (num != -1)

{

cif4 = num/1000;
cif3 = num/100 - cif4 * 10;
cif2 = num/10 - cif3 * 10 - cif4 * 100;
cif1 = num/1 - cif2 * 10 - cif3 * 100 - cif4 * 1000;

crit4 = (cif4 + 7) % 10;
crit3 = (cif3 + 7) % 10;
crit2 = (cif2 + 7) % 10;
crit1 = (cif1 + 7) % 10;
printf ("%d%d%d%d\n\n", crit2, crit1, crit4, crit3);

printf ("Inserire un numero di 4 cifre:");
scanf ("%d", &num);

}


return 0;
}

Questo funziona...
Ora devo fare il procedimento inverso...solo che ho dei problemi... non mi funziona come vorrei...
Io l'ho scritto cosi':

#include <stdio.h>

int main ()

{

int num;
int cif1;
int cif2;
int cif3;
int cif4;
int crit1;
int crit2;
int crit3;
int crit4;


printf ("Inserire un numero di 4 cifre:");
scanf ("%d", &num);

while (num != -1)

{

crit4 = num/1000;
crit3 = num/100 - cif4 * 10;
crit2 = num/10 - cif3 * 10 - cif4 * 100;
crit1 = num/1 - cif2 * 10 - cif3 * 100 - cif4 * 1000;

if (crit4 >= 7)
{
cif4 = crit4 -7;
}
else
{
cif4 = crit4 + 10 -7;
}
if ( crit3 >= 7)
{
cif3 = crit3 -7;
}
else
{
cif3 = crit3 +10 -7;
}
if (crit2 >= 7)
{
cif2 = crit2 -7;
}
else
{
cif2 = crit2 +10-7;
}
if (crit1 >=7)
{
cif1 = crit1 -7;
}
else
{
cif1 = crit1 +10 -7;
}

printf ("%d%d%d%d\n\n", cif2, cif1, cif4, cif3);

printf ("Inserire un numero di 4 cifre:");
scanf ("%d", &num);

}


return 0;
}


vi posto un esempio di quel che succede


$ ./crittog
Inserire un numero di 4 cifre:1234
0189

$ ./decripter
Inserire un numero di 4 cifre:0189
203905919711311530503-91076686


non torna 1234!!!!!!!!!!!!!!!!!!!!!
mi aiutate :help: :muro:

yorkeiser
11-10-2007, 11:14
Allora:

- In primo luogo, ti consiglio di studiare gli array; ti risparmieresti un sacco di codice da scrivere. Per scrivere un semplice programmino hai dovuto incollare una pagina di codice, non ti pare un po' troppo? :)

- L'errore è qui, ed è duplice:

crit4 = num/1000;
crit3 = num/100 - cif4 * 10;
crit2 = num/10 - cif3 * 10 - cif4 * 100;
crit1 = num/1 - cif2 * 10 - cif3 * 100 - cif4 * 1000;

1) Il primo è concettuale: hai dichiarato cif1,2,3,4 e li utilizzi nella parte destra di queste espressioni ma NON LI HAI INIZIALIZZATI; mai utilizzare una variabile in c/c++ senza prima averla inizializzata. Ad esempio:
cif1 = cif2 = cif3 = cif4 = 0 ;

2) crit3 deve essere = num/100 - crit3*10, non cif3
Lo stesso vale per crit2 e crit1: devi sempre usare critX, e non cifX nelle espressioni a destra dell'uguale

Impara ad usare gli array!
Ciao

nongio
11-10-2007, 15:56
A parte che sono un pirla e tu hai ragione :D 'errore era banalissimo e non lo trovavo...pensa te..
Non ho utilizzato gli array perche' l'esercizio non richiedeva l'utilizzo di array... cioe' dovevo farlo solo e soltanto con l'if e il while.. ;)

grazie mille!