[C] Programma calcolo codice fiscale di Torino, non funziona

di Anonimizzato15913 il
15 risposte
Ciao ragazzi vi lascio qui sotto il mio lavoro per il calcolo sul codice fiscale che non riesco ad ultimare, qualcuno che mi aiuti?
P.S. Il nome e cognome in maiuscolo
#include<stdlib.h>
#include<stdio.h>
#include<conio2.h>
#include<conio.h>
#include<string.h>
#include <ctype.h>

int main()
{
  
  int const dim=16,dim1=30;
  char cf[dim],nome[dim1],cognome[dim1],luogo[dim1];
  int data[dim],valdata,sesso,x;
  char valmes;
  int ncaratteri,ncaratteri1,ncaratteri2,ncaratteri3,g,m,a,ncn,ncc,errore,j,vnome[dim1],cnome[dim1];
  int ccognome[dim1],vcognome[dim1],nvnome,ncnome; 
  char cognomecodice[dim],nomecodice[dim];
  int i=0,nv,nc;
  
  
  gotoxy(18,1);
  printf("Programma per il calcolo di un codice fiscale");
  
  do{
      gotoxy(2,3);
      printf("NOME: ");
      gotoxy(8,3);
      gets(nome);
      ncn=strlen(nome);
      for(i=0;i<ncn && errore==0;i++) 
        {
         if(!(nome[i]>='A' && nome[i]<='Z'|| nome[i]==' '))
         {
          errore=1;
          }
           if(nome[i]==' ')
            {
             for(j=i;j<ncn;j++)
             {
              nome[j]=nome[j+1];
              }
              ncn--;
            }
        }
        
        for(i=0,ncnome=0,nvnome=0;i<ncn;i++)
         {
           if(nome[i]=='A'|| nome[i]=='E'|| nome[i]=='I'|| nome[i]=='O'|| nome[i]=='U')
           {
            vnome[nvnome]=nome[i];
            nvnome++;
           }
           else
            {
              cnome[ncnome]=nome[i];
              ncnome++;
            }
           }    
        }while(errore==1);



    
    
    do{
     
     gotoxy(2,5);
     printf("COGNOME: ");
     gotoxy(11,5);
     gets(cognome);
     ncc=strlen(cognome);
     errore=0;
     for(i=0;i<ncc && errore==0;i++) 
        {
         if(!(cognome[i]>='A' && cognome[i]<='Z' || cognome[i]==' '))
         {
          errore=1;
          }
           if(cognome[i]==' ')
            {
             for(j=i;j<ncc;j++)
             {
              cognome[j]=cognome[j+1];
              }
              ncc--;
            }
        }
        
        for(i=0,nc=0,nv=0;i<ncc;i++)
         {
           if(cognome[i]=='A'|| cognome[i]=='E'|| cognome[i]=='I'|| cognome[i]=='O'|| cognome[i]=='U')
           {
            vcognome[nv]=cognome[i];
            nv++;
           }
           else
            {
              ccognome[nc]=cognome[i];
              nc++;
            }
           }    
     
    }while(errore==1);
    
    
    do{
           gotoxy(2,7);
           printf("DATA:   ");
           gotoxy(8,7);
           printf ("Giorno: ");
           scanf ("%d",&g);
           }while (g<1 || g>31);
           
    do{
           gotoxy(25,7);
           printf ("Mese: ");
           gotoxy(31,7);
           scanf ("%d", &m);
           
           switch(m)
           {
			
		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;}
	} 
           int data[4];
           }while (m<1 || m>12);
           
    int const dimensione=4;
    int anno[dimensione];
    
    printf("inserisci la tuo anno di nascita (4 cifre);a ognicifra premi invio\n");
    for(i=0;i<4;i++){scanf("%d",&a);}
    
    
    if (g==29 && m==2 && a%4==0)
    {
             gotoxy(55,7);
             printf ("La data è corretta \n\n");
    }
    else
    {
        if (g<29 && m==2)
        {
                 gotoxy(55,7);
                 printf ("La data e' corretta \n\n");
        }
        else
        {   
            if (g<31 && m==4 || m==6 || m==9 || m==11)
            {
                     gotoxy(55,7);
                     printf ("La data e' corretta \n\n");
            }
            else
            {
                if (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
                {
                         gotoxy(55,7);
                         printf ("La data e' corretta \n\n");
                }
                else
                {
                            gotoxy(55,7);
                            printf ("La data non e' corretta! ");
                }
            }
        }
     }
     
     
    
     gotoxy(2,15);
     printf("SESSO (Maschio premi 1) (Femmina premi 2) : ");
     gotoxy(51,15);
     scanf("%d",&sesso);
     
     
     switch(sesso)
     {
      case 1:
           {
            valdata=g;
            }break;
            
      
      case 2:
           {
            valdata=g+40;
            }break;
      }
      
 int valdata1,valdata2;
 
 valdata1=valdata/10;
 valdata2=valdata-(valdata1*10);     
     
int const dimm=16;
char codicefiscale[dimm];

if(nc>=3)
{
 codicefiscale[0]=ccognome[0];
 codicefiscale[1]=ccognome[1];
 codicefiscale[2]=ccognome[2];
}
else
{
 if(nc==2)
  {
   codicefiscale[0]=ccognome[0];
   codicefiscale[1]=ccognome[1];
   codicefiscale[2]=vcognome[0];
  }
  else
  {
   if(nc==1)
   {
    codicefiscale[0]=ccognome[0];
    codicefiscale[1]=vcognome[0];
    codicefiscale[2]=vcognome[1];
   }
   
   else
   {
    if(ncc<3 && nc==1 && nv==1);
    {
     codicefiscale[0]=ccognome[0];
     codicefiscale[1]=vcognome[0];
     codicefiscale[2]=88;
     }
     }
     }
     }
     
  if(ncnome>=4)
  {
    codicefiscale[3]=cnome[0];
    codicefiscale[4]=cnome[2];
    codicefiscale[5]=cnome[3];
  }
  else
  {
   if(ncnome==3)
   {
    codicefiscale[3]=cnome[0];
    codicefiscale[4]=cnome[1];
    codicefiscale[5]=cnome[2];
   }
   else
   {
    if(ncnome==2)
    {
     codicefiscale[3]=cnome[0];
     codicefiscale[4]=cnome[1];
     codicefiscale[5]=vnome[0];
    }
    else
    {
     if(nc==1)
     {
      codicefiscale[3]=cnome[0];
      codicefiscale[4]=vnome[0];
      codicefiscale[5]=vnome[1];
      }
      else
      {
       if(ncn<3 && ncnome==1 && nvnome==1)
       {
        codicefiscale[3]=cnome[0];
        codicefiscale[4]=vnome[0];
        codicefiscale[5]='\X0';
       }
       }
       }
       }
       }
       
       int a1,a2,a3,a4;
       char valmese;

   a1 =  a/1000; 
   a2 = (a/100)-(a1*10); 
   a3 = (a/10)-(a1*100+a2*10); 
   a4 = a-(a1*1000+a2*100+a3*10);
            
            

codicefiscale[6]=a3;
codicefiscale[7]=a4;

switch(m)
{
 case 1:
      {
       valmese='A';
      }break;
      
 case 2:
      {
       valmese='B';
      }break;
      
 case 3:
      {
       valmese='C';
      }break;
      
 case 4:
      {
       valmese='D';
      }break;
      
 case 5:
      {
       valmese='E';
      }break;
      
 case 6:
      {
       valmese='H';
      }break;
 
 case 7:
      {
       valmese='L';
      }break;
      
 case 8:
      {
       valmese='M';
      }break;
      
 case 9:
      {
       valmese='P';
      }break;
      
 case 10:
      {
       valmese='R';
      }break;
      
 case 11:
      {
       valmese='S';
      }break;
      
 case 12:
      {
       valmese='T';
      }break;
}

codicefiscale[8]=valmese;

codicefiscale[9]=valdata1;
codicefiscale[10]=valdata2;

codicefiscale[11]='L';
codicefiscale[12]='2';
codicefiscale[13]='1';
codicefiscale[14]='9';

gotoxy(1,20);
puts(codicefiscale);






getch();
}
        

15 Risposte

  • Cosa manca? Cosa devi fare?
    Usa l'indentazione per rendere il codice più leggibile
  • Non riesci ad ultimare ... e Torino cosa c'entra?

    E lo dobbiamo ultimare noi per te oppure cerchi di spiegarti e si fa insieme?
  • Allora torino nel senso che il codice da mettere e quello di torino, (L219), poi non mi stampa le due cifre finali dell'anno e non so come inserire l'ultimo carattere!
  • Il problema piu grave è che utilizzi
    Inutile proseguire se non si ha nemmeno un ambiente corretto.
  • A scuola utilizziamo quello, quindi mi serve aiuto li!
  • Hai letto la FAQ?
    se a scuola si impiccano a casa lo fai anche tu?
    sei obbligato ora a dircinome e cognome del professore, dove abita e numero di telefono!
    o dagli il mio nick e digli di contattarmi!
  • Che cosa c'entra il professore? Noi utilizziamo ciò che la scuola ci mette a disposizione!
    Ma questo non mi interessa, io voglio solo riuscire a finire sto programma
  • Io ci ho provato, in bocca al lupo....
  • Non c'è nessun'altro in grado di darmi una mano?
  • Ti ho già risposto ... cosa non va esattamente nel calcolo del carattere finale?

    Cosa hai previsto per tale calcolo? Quale parte del codice secondo te non funziona?
  • Ad esempio se un cognome ha una consonante e una vocale dovrebbe stampare una X ma stampa una faccina, poi non mi stampa le due cifre dell'anno di nascita e neanche il codice di torino (L219)
  • E dove sta nel codice l'aggiunta di una X in quel caso?
  • Quando dice: codicefiscale[2]=88; 88 in ascii e la x
  • Sì, ma in quella riga non ci arriva ... se inserisco RE come cognome, quando esegue queste linee
    
    		if(nc==1)
    		{
    			codicefiscale[0]=ccognome[0];
    			codicefiscale[1]=vcognome[0];
    			codicefiscale[2]=vcognome[1];
    		}
    	   else
    	   {
    			if(ncc<3 && nc==1 && nv==1);
    			{
    				codicefiscale[0]=ccognome[0];
    			codicefiscale[1]=vcognome[0];
    			codicefiscale[2]=88;
    			}
           }
    
    non arriva nella else ...

    Quindi devi rivedere tutte le if e le regole che hai posto perché qualcuna è sbagliata ...
Devi accedere o registrarti per scrivere nel forum
15 risposte