Vai al contenuto

[C] calcolo codice fiscale


stevemb

Messaggi raccomandati

#include <stdio.h>
#include <stdlib.h>
#define dim 20

char nome[dim],cognome[dim],valmes,nomecodice[dim],cognomecodice[dim];
int i,j,x,a,data[4],mese,sesso,giorno,valdata;
int main()
{
   printf("\tBENVENUTO NEL PROGRAMMA PER CALCOLARE IL TUO CODICE FISCALE\n"); 
   printf("inserisci il tuo nome(in maiuscolo)\n");
scanf("%s",&nome);
for(i=0;i<dim;i++)
   {
	if(nome[i]!='\0')
		j++;
	else
		j=j;
}
printf("inserisci il tuo cognome(in maiuscolo)\n");
scanf("%s",&cognome);
for(i=0;i<dim;i++)
   {    if(cognome[i]!='\0')
	x++;
else
	x=x;
}
printf("inserisci il tuo giorno di nascita\n");
scanf("%d",&giorno);
printf("sei maschio(premi 1) o femmina(premi 2)?\n");
   scanf("%d",&sesso);
switch(sesso){

	case 1:
	{    valdata=giorno;

		break;} 
	case 2:
	{    valdata=giorno+40;
		break;}
}                      
printf("inserisci la tuo anno di nascita (4 cifre);a ognicifra premi invio\n");
   for(i=0;i<4;i++){scanf("%d",&data[i]);}
printf("inserisci il tuo mese di nascita(2 cifre)\n");
scanf("%d",&mese);
switch(mese){

	case 1:
	{    valmes='A';
		break;} 
	case 2:
	{    valmes='B';
		break;} 
	case 3:
	{    valmes='C';
		break;} 
	case 4:
	{    valmes='D';
		break;} 
	case 5:
	{    valmes='E';
		break;} 
	case 6:
	{    valmes='H';
		break;} 
	case 7:
	{    valmes='L';
		break;} 
	case 8:
	{    valmes='M';
		break;} 
	case 9:
	{    valmes='P';
		break;} 
	case 10:
	{    valmes='R';
		break;} 
	case 11:
	{    valmes='S';
		break;} 
	case 12:
	{    valmes='T';
		break;}
}              
   printf("nome");       
for(i=0;i<=j;i++)
   { if(nome[i]!=65&&nome[i]!=69&&nome[i]!=73&&nome[i]!=79&&nome[i]!=85)
{printf("%c",nome[i]);
nomecodice[i]=nome[i];
}
if(nome[i]==65&&nome[i]==69&&nome[i]==73&&nome[i]==79&&nome[i]==85)
{}

}



printf("\ncognome\t");
for (i=0;i<=x;i++)
{ if(cognome[i]!=65&&cognome[i]!=69&&cognome[i]!=73&&cognome[i]!=79&&cognome[i]!=85)
{printf("%c",cognome[i]);
cognomecodice[i]=cognome[i];}
   if(nome[i]==65&&cognome[i]==69&&cognome[i]==73&&cognome[i]==79&&cognome[i]==85)
   {printf("");}}
printf ("\n\nnomecodice\t\t");
for(i=0;i<j;i++){printf("%c",nomecodice[i]);}
printf("\nfine programma\n\nIL TUO CODICE FISCALE:\t");

//inizio stampa codice fiscale
//cognome
for (i=0; i<3; i++) 
{
printf("%c",cognomecodice[i]);
}

//nome
for(i=0;i<3;i++)
{printf("%c",nomecodice[i]);}
//data    
for(i=2;i<4;i++)
printf("%d",data[i]); 
//mese
printf("%c",valmes);   
//giorno
printf("%d",valdata);
}       

il problema è che nella stampa finale mi prende sempre una lettera in meno uff

Link al commento
Condividi su altri siti

Puoi farmi un esempio di caso d'uso? Il codice è poco leggibile quindi non riesco a capire che problema hai...

dimmi un esempio dei vari input, e l'output che ti dà / che vorresti avere

Link al commento
Condividi su altri siti

ok

io gli do nome,cognome,data di nascita(anno-giorno-mese),sesso.(tutti con input separati)

poi io devo dirgli di prendere solo le consonanti(quindi levare le vocali) e poi stampare solo le prime 3,solo che a me,se ne servono 3 ne stampa 2,se ce n'è 2,ne stampa 1,non capisco il perchè.(l'errore dev'essere nelle ultime 10-20 righe,sopra è tutto giusto)

Link al commento
Condividi su altri siti

Ok vedi che nei cicli for in cui tu vorresti "saltare" le vocali hai sbagliato la condizione booleana... volevi scrivere la negata di quella in cui cerchi le consonanti ma per la legge di De Morgan :

! (X!=a && X!=b ...) (ovvero la negata della condizione)

=

(X==a || X==b ...)

In pratica devi mettere || (OR) e non && (AND)

Link al commento
Condividi su altri siti

che poi non sono sicuro che comunque si possa sempre calcolare così... ci sono nomi che hanno due consonanti, come Agata, Fabio, Ugo, ecc.. lì come fai?

Agata = GTA

ecc.

Oppure viceversa, io mi chiamo Vittorio (VTT?)

Ma il mio codice fiscale è VTR

insomma bisogna un attimino rivedere l'algoritmo (a meno che non è solo per esercizio e non ti importa che funzioni)

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...