PDA

View Full Version : [C++] Aiuto con un programma per il calcolo del codice fiscale?


Alessio Orsini
07-01-2018, 21:29
Buonasera a tutti..
La prof. ci ha chiesto di creare un programma che calcoli il codice fiscale, sono riuscito a fare tutto, tranne calcolare l'ultimo carattere, che viene calcolato in base a tutti gli altri.
Su questa pagina di wikipedia ( https://it.wikipedia.org/wiki/Codice_fiscale#Generazione_del_codice_fiscale) potrete vedere nel dettaglio come viene calcolato, e nell'allegato c'è il codice incriminato, la funzione è cinCalc
Non è che potreste dirmi dove sbaglio?

PS scusate se non commento.. :D

Mursey
07-01-2018, 23:40
poi magari qualcuno che ti aiuta lo trovi.

Qualcuno che vuol fare il primo della classe c'è sempre ;)

sottovento
08-01-2018, 14:30
Per quanto ne so il codice fiscale si ottiene prendendo le prime 3 consonanti del cognome + la prima, terza e quarta consonante del nome (ovviamente se presenti, altrimenti si rimpiazzano con le vocali).

Non mi sembra che questo sia stato fatto, il tuo codice prende solo le prime 3 consonanti di nome e cognome. Sbaglio?

Un'altra cosa: il tuo codice funziona solo se i dati di ingresso sono MAIUSCOLI. A questo punto, ti conviene convertire subito l'input in maiuscolo prima di proseguire, cosi' eviti degli errori.

Riguardo il codice per il calcolo del controllo:

char cinCalc(string cod){
string disp="", par="";
bool parBool = false, dispBool = false;
int PAR = 0, DISP = 0;
int lettParInt[36] = {0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
int lettDispInt[36] = {1,0,5,7,9,13,15,17,19,21,1,0,5,7,9,13,15,17,19,21,2,4,18,20,11,3,6,8,12,14,16,10,22,25,24,23};

// Sottovento - questa parte deve solo creare due stringhe: la prima
// contenente le lettere in posizione pari, la seconda con le lettere in
// posizione dispari.
// E' un lavoro che puo' essere fatto in altro modo, decisamente piu'
// semplice!!
for (int i=0;i<15;i++) {
if ((i+1)%2==0) {
if (!parBool) {
par = cod[i];
parBool = !parBool;
} else {
par += cod[i];
}

PAR++;
} else {
if (!dispBool) {
disp = cod[i];
dispBool = !dispBool;
} else {
disp += cod[i];
}

DISP++;
}
}

int x = 0;

for (int i=0;i<PAR;i++) {
x += search(lettParInt, par[i]);
}
for (int i=0;i<DISP;i++) {
x += search(lettDispInt, par[i]);
}

return x%26+65;
}


L'errore e' (dovrebbe, non l'ho fatto girare) nella parte che ho marcato con il mio nome. Devi solo creare due strighe, ma per farlo hai fatto il giro lungo :D . Il codice che hai scritto non computa le due stringhe richieste, e' da rivedere (e semplificare, si puo' fare con molto meno sforzo!)

@Mursey: un aiuto verrà sempre dato a Hogwarts… a chi se lo merita

Alessio Orsini
10-01-2018, 14:31
Grazie a tutti!
Mi scuso se non ho più risposto, ma è riniziata la scuola e ho preso 2 alla verifica di matematica il primo giorno..
Comunque ho risolto con l'aiuto di un mio amico a scuola
Il programma l'avevo scritto in qualche ora perchè pensavo si dovesse consegnare lunedì ed ero cosciente fosse pieno di errori relativi alle regole di generazione, ma ciò che importa alla prof penso sia più la capacità di fare qualcosa che funzioni, quindi mi sono soffermato su ciò che proprio non andava:D

Grazie lo stesso a tutti!!

Mursey
10-01-2018, 18:33
@Mursey: un aiuto verrà sempre dato a Hogwarts… a chi se lo merita

Ma certo, è lo spirito di un forum :)