Oppure

Loading
10/10/08 16:45
totipianurese
Ciao raga sapete dirmi perche quando compilo questo programma e dopodiche lo volgio chiudere, mi segnala un errore dicendomi ke l'istruzione ha fatto riferimento alla memoria.
#include <iostream> 
#include <string.h> 
int z,N,I,num,conta,k;
int vet[8],numeri[8];
void Unita(void); 
void Decine(void);
using namespace std;
string car[9];
string car1[9];
string AA[9];
string meta[8];

int main()
{
   car[0]="uno";
   car[1]="due";
   car[2]="tre";
   car[3]="quattro";
   car[4]="cinque";
   car[5]="sei";
   car[6]="sette";
   car[7]="otto";
   car[8]="nove";
   car1[0]="undici";
   car1[1]="dodici";
   car1[2]="tredici";
   car1[3]="quattordici";
   car1[4]="quindici";
   car1[5]="sedici";
   car1[6]="diciasette";
   car1[7]="diciotto";
   car1[8]="diciannove";
   numeri[0]=1;
   numeri[1]=2;
   numeri[2]=3;
   numeri[3]=4;
   numeri[4]=5;
   numeri[5]=6;
   numeri[6]=7;
   numeri[7]=8;
   numeri[8]=9;
   meta[0]="vent";
   meta[1]="trent";
   meta[2]="quarant";
   meta[3]="cinquant";
   meta[4]="sessant";
   meta[5]="settant";
   meta[6]="ottant";
   meta[7]="novant";
   AA[0]="dieci";
   AA[1]="venti";
   AA[2]="trenta";
   AA[3]="quaranta";
   AA[4]="cinquanta";
   AA[5]="sessanta";
   AA[6]="settanta";
   AA[7]="ottanta";
   AA[8]="novanta";
   cout<<"Inserisci il numero di numeri da inserire = ";
   cin>>num;
   for (I=0;I<num;I++)
                        {
                        cout<<"Inserisci "<<I+1<<" numero = ";
                        cin>>vet[I];
                        conta++;
                        }                        
   if (conta==1)
               {
                I=0;                                              
                Unita();
               }
   if (conta==2)
               {
               I=0;
               Decine();         
               }
   getchar();
   getchar();
   
}
 void Unita(void)
 { 
   switch (vet[I])
                  {
                   case 1:     
                   cout<<car[0];
                   break;
                   case 2:     
                   cout<<car[1];
                   break;
                   case 3:     
                   cout<<car[2];
                   break;
                   case 4:     
                   cout<<car[3];
                   break;
                   case 5:     
                   cout<<car[4];
                   break;
                   case 6:     
                   cout<<car[5];
                   break;
                   case 7:     
                   cout<<car[6];
                   break;
                   case 8:     
                   cout<<car[7];
                   break;
                   case 9:     
                   cout<<car[8];
                   break;
                  }
 }                 
  void Decine(void)
  {
   if (vet[I]==1)
                {
                 switch (vet[I+1])
                                     {
                                      case 1:
                                      cout<<car1[0];
                                      break;
                                      case 2:
                                      cout<<car1[1];
                                      break;
                                      case 3:
                                      cout<<car1[2];
                                      break;
                                      case 4:
                                      cout<<car1[3];
                                      break;
                                      case 5:
                                      cout<<car1[4];
                                      break;
                                      case 6:
                                      cout<<car1[5];
                                      break;
                                      case 7:
                                      cout<<car1[6];
                                      break;
                                      case 8:
                                      cout<<car1[7];
                                      break; 
                                      case 9:
                                      cout<<car1[8];
                                      break;                                 
                                     }                             
                }
                else
                 {                  
                  do
                   {             
                   if (vet[I]==numeri[I+1])
                                           {
                                            if (vet[I+1]==1||8)
                                                               {
                                                                cout<<meta[I+1];
                                                                I=1;
                                                                Unita();
                                                                I=10;          
                                                               }
                                                               else
                                                               {
                                                                cout<<AA[I+1];
                                                                I=1;
                                                                Unita();
                                                                I=10;    
                                                               }                  
                                           }
                                          else
                                           I++;
                   }                        
                  while(I=10);                        
                                          
                 }
  }            
aaa
10/10/08 17:23
gioser
devi dichiarare numeri[] come un array di 9 elementi e non di 8.

Inoltre sarebbe igienico inizializzare conta ;)

aaa
10/10/08 17:32
totipianurese
si ho risolto, pero adesso non so perche il programma funziona a convertire solo numeri fino a 29, inserendo da 30 in poi non mi stampa niente.

#include <iostream> 
#include <string.h> 
int z,N,I,num,conta,k;
int vet[8],numeri[8];
void Unita(void); 
void Decine(void);
using namespace std;
string car[9];
string car1[9];
string primi[8];
string meta[8];

int main()
{
   conta=0;  
   car[0]="uno";
   car[1]="due";
   car[2]="tre";
   car[3]="quattro";
   car[4]="cinque";
   car[5]="sei";
   car[6]="sette";
   car[7]="otto";
   car[8]="nove";
   car1[0]="undici";
   car1[1]="dodici";
   car1[2]="tredici";
   car1[3]="quattordici";
   car1[4]="quindici";
   car1[5]="sedici";
   car1[6]="diciasette";
   car1[7]="diciotto";
   car1[8]="diciannove";
   numeri[0]=2;
   numeri[1]=3;
   numeri[2]=4;
   numeri[3]=5;
   numeri[4]=6;
   numeri[5]=7;
   numeri[6]=8;
   numeri[7]=9;
   meta[0]="vent";
   meta[1]="trent";
   meta[2]="quarant";
   meta[3]="cinquant";
   meta[4]="sessant";
   meta[5]="settant";
   meta[6]="ottant";
   meta[7]="novant";
   primi[0]="venti";
   primi[1]="trenta";
   primi[2]="quaranta";
   primi[3]="cinquanta";
   primi[4]="sessanta";
   primi[5]="settanta";
   primi[6]="ottanta";
   primi[7]="novanta";
   cout<<"Inserisci il numero di numeri da inserire = ";
   cin>>num;
   for (I=0;I<num;I++)
                        {
                        cout<<"Inserisci "<<I+1<<" numero = ";
                        cin>>vet[I];
                        conta++;
                        }                        
   if (conta==1)
               {
                I=0;                                              
                Unita();
               }
   if (conta==2)
               {
               I=0;
               Decine();         
               }
   getchar();
   getchar();
   
}

 void Unita(void)
 { 
   switch (vet[I])
                  {
                   case 1:     
                   cout<<car[0];
                   break;
                   case 2:     
                   cout<<car[1];
                   break;
                   case 3:     
                   cout<<car[2];
                   break;
                   case 4:     
                   cout<<car[3];
                   break;
                   case 5:     
                   cout<<car[4];
                   break;
                   case 6:     
                   cout<<car[5];
                   break;
                   case 7:     
                   cout<<car[6];
                   break;
                   case 8:     
                   cout<<car[7];
                   break;
                   case 9:     
                   cout<<car[8];
                   break;
                  }
 }                 
  void Decine(void)
  {
   k=0;    
   if (vet[I]==1)
                {
                 if (vet[I+1]==0)
                                {
                                cout<<"dieci";
                                }
                 else
                 {                        
                 switch (vet[I+1])
                                     {
                                      case 1:
                                      cout<<car1[0];
                                      break;
                                      case 2:
                                      cout<<car1[1];
                                      break;
                                      case 3:
                                      cout<<car1[2];
                                      break;
                                      case 4:
                                      cout<<car1[3];
                                      break;
                                      case 5:
                                      cout<<car1[4];
                                      break;
                                      case 6:
                                      cout<<car1[5];
                                      break;
                                      case 7:
                                      cout<<car1[6];
                                      break;
                                      case 8:
                                      cout<<car1[7];
                                      break; 
                                      case 9:
                                      cout<<car1[8];
                                      break;                                 
                                     }   
                 }                                              
                }
                else
                 {                  
                  do
                   {             
                   if (vet[I]==numeri[k])
                                         {
                                          if ((vet[I+1]==1)||(vet[I+1]==8))
                                                             {
                                                              cout<<meta[k];
                                                              I=1;
                                                              Unita();
                                                              k=10;          
                                                             }
                                                             else
                                                             {
                                                              cout<<primi[k];
                                                              I=1;
                                                              Unita();
                                                              k=10;    
                                                             }                  
                                         }
                                         else
                                         k++;
                   }                        
                  while(k==10);                        
                 } 
  }     
aaa
13/10/08 6:59
gioser
Postato originariamente da totipianurese:

si ho risolto, pero adesso non so perche il programma funziona a convertire solo numeri fino a 29, inserendo da 30 in poi non mi stampa niente.



questo non è più un problema di sintassi del C++ ma di logica dell'algoritmo che hai implementato ;)
aaa
14/10/08 10:31
munkaka
ho trovato il problema
nel ciclo do-while della funzione decine hai messo come condizione k==10
il programma esegue il ciclo la prima volta, quindi funziona per i numeri fino a venti che sono quelli controllati nella prima iterazione, poi esce perchè k!=10
invece di k==10 devi mettere k!=10 o k<10 e poi funziona
Ultima modifica effettuata da munkaka 14/10/08 10:32
aaa