Problema nuovo tipo a funzione

di il
6 risposte

Problema nuovo tipo a funzione

Ho un problema con questo programma, in pratica la funzione "bilancio2" risulta essere "dichiarata male" ma non capisco l'errore.Ho usato il passaggio per riferimento ma anche li nella stessa funzione risulta esserci un errore, secondo me sbaglio qualcosa che riguarda il nuovo tipo da me dichiarato. Potreste darmi una mano, magari anche spiegandomi dove sbaglio? Grazie in anticipo.
#include<iostream>
#define l 20
using namespace std;
void Campionato(struct Soc_Sportiva ar[l],int n,int max,int min);
int bilancio1 (struct Soc_Sportiva ar[l],int &p);
struct Soc_Sportiva bilancio2 (struct Soc_Sportiva ar[l],int n,int j,struct Soc_Sportiva &ab[l]);
struct Soc_Sportiva{
       char Nome_Squadra;
       int punteggio;
       long Capitale_Sociale;
       };
    int main(){
    struct Soc_Sportiva *ab;
    ab=new Soc_Sportiva[l];
    
    struct Soc_Sportiva *ar;
    ar=new Soc_Sportiva[l];
    int n=0,max=0,min=0,j=0,p=0;
    cout<<"Inserisci il numero delle societa' sportive"<<endl;
    cin>>n;
    for(int i=0;i<n;i++){
            cout<<"Inserisci il carattere della squadra, il punteggio e il capitale"<<endl;
            cin>>ar[i].Nome_Squadra;
            cin>>ar[i].punteggio;
            cin>>ar[i].Capitale_Sociale;
            }
    //Campionato(ar,n,max,min);
   bilancio1 (ar,p);
   bilancio2 (ar,n,j,ab);
    system("pause");
    return 0;
    }
//E' Ricorsiva ma dovrebbe essere fatta in modo iterativo.
void Campionato(struct Soc_Sportiva ar[l],int n,int max,int min){
     if(n==0){
              cout<<"La squadra con il punteggio massimo e': "<<ar[max].Nome_Squadra<<endl;
              cout<<"La squadra con il punteggio minore e': "<<ar[min].Nome_Squadra<<endl;
              return;
              }
     if (ar[n-1].Capitale_Sociale<0){
                                   cout<<"La squadra "<<ar[n-1].Nome_Squadra<<" E' in negativo"<<endl;
                                   }
     if (ar[n-1].punteggio>ar[max].punteggio){
                                            max=n;
                                            }
     if(ar[n-1].punteggio<ar[min].punteggio){
                                           min=n;
                                           }
     if(ar[n-1].Capitale_Sociale>5000000){
                                        cout<<"La squadra "<<ar[n-1].Nome_Squadra<<" Ha un bilancio > di 5000000 di euro"<<endl;
                                        }  
     return Campionato(ar,n-1,max,min);
     }

int bilancio1 (struct Soc_Sportiva ar[l],int &p,int n){
    for (int i=0;i<n;i++){
        if(ar[i].Capitale_Sociale<0){
                                     p+=1;
                                     }
    }
    return(p);
    
}




struct Soc_Sportiva bilancio2 (struct Soc_Sportiva ar[l],int n,int j,struct Soc_Sportiva &ab[l]){
for(int i=0;i<n;i++){
                     if(ar[i].Capitale_Sociale>5000000){
                                                        ab[j].Nome_Squadra=ar[i].Nome_Squadra;
                                                        ab[j].Capitale_Sociale=ar[i].Capitale_Sociale;
                                                        ab[j].punteggio=ar[i].punteggio;
                                                        j=j+1;
                                                        }
                     }
                     return(ab);
}

6 Risposte

  • Re: Problema nuovo tipo a funzione

    Questa sintassi non ha senso:

    struct Soc_Sportiva ar[l]

    La devi convertire in:

    struct Soc_Sportiva *ar
  • Re: Problema nuovo tipo a funzione

    Il programma continua a dare gli stessi errori che dava prima :S
  • Re: Problema nuovo tipo a funzione

    Prova a chiamarla così:
    bilancio1 (ar,p,n);
  • Re: Problema nuovo tipo a funzione

    Ho modificato il codice in questo modo:
    #include<iostream>
    #define l 20
    using namespace std;
    void Campionato(struct Soc_Sportiva ar[l],int n,int max,int min);
    int bilancio1 (struct Soc_Sportiva ar[l],int &p,int n);
    struct Soc_Sportiva bilancio2 (struct Soc_Sportiva ar,int n,int j,struct Soc_Sportiva &ab[l]);
    struct Soc_Sportiva{
           char Nome_Squadra;
           int punteggio;
           long Capitale_Sociale;
           };
        int main(){
        struct Soc_Sportiva *ab;
        ab=new Soc_Sportiva[l];
        
        struct Soc_Sportiva *ar;
        ar=new Soc_Sportiva[l];
        int n=0,max=0,min=0,j=0,p=0;
        cout<<"Inserisci il numero delle societa' sportive"<<endl;
        cin>>n;
        for(int i=0;i<n;i++){
                cout<<"Inserisci il carattere della squadra, il punteggio e il capitale"<<endl;
                cin>>ar[i].Nome_Squadra;
                cin>>ar[i].punteggio;
                cin>>ar[i].Capitale_Sociale;
                }
        //Campionato(ar,n,max,min);
       bilancio1 (ar,p,n);
       bilancio2 (ar,n,j,ab);
        system("pause");
        return 0;
        }
    //E' Ricorsiva ma dovrebbe essere fatta in modo iterativo.
    void Campionato(struct Soc_Sportiva ar[l],int n,int max,int min){
         if(n==0){
                  cout<<"La squadra con il punteggio massimo e': "<<ar[max].Nome_Squadra<<endl;
                  cout<<"La squadra con il punteggio minore e': "<<ar[min].Nome_Squadra<<endl;
                  return;
                  }
         if (ar[n-1].Capitale_Sociale<0){
                                       cout<<"La squadra "<<ar[n-1].Nome_Squadra<<" E' in negativo"<<endl;
                                       }
         if (ar[n-1].punteggio>ar[max].punteggio){
                                                max=n;
                                                }
         if(ar[n-1].punteggio<ar[min].punteggio){
                                               min=n;
                                               }
         if(ar[n-1].Capitale_Sociale>5000000){
                                            cout<<"La squadra "<<ar[n-1].Nome_Squadra<<" Ha un bilancio > di 5000000 di euro"<<endl;
                                            }  
         return Campionato(ar,n-1,max,min);
         }
    
    int bilancio1 (struct Soc_Sportiva ar[l],int &p,int n){
        for (int i=0;i<n;i++){
            if(ar[i].Capitale_Sociale<0){
                                         p+=1;
                                         }
        }
        return(p);
        
    }
    
    
    
    
    struct Soc_Sportiva bilancio2 (struct Soc_Sportiva *ar,int n,int j,struct Soc_Sportiva &ab[l]){
    for(int i=0;i<n;i++){
                         if(ar[i].Capitale_Sociale>5000000){
                                                            ab[j].Nome_Squadra=ar[i].Nome_Squadra;
                                                            ab[j].Capitale_Sociale=ar[i].Capitale_Sociale;
                                                            ab[j].punteggio=ar[i].punteggio;
                                                            j=j+1;
                                                            }
                         }
                         return(ab);
    }
            
                                         
         
                
        
    
    Risultato della compilazione:
    6 C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp declaration of `ab' as array of references C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp In function `int main()':  
    29 C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp conversion from `Soc_Sportiva*' to non-scalar type `Soc_Sportiva' requested 
    29 C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp At global scope: 
    68 C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp declaration of `ab' as array of references 
    C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp In function `Soc_Sportiva bilancio2(Soc_Sportiva*, int, int)': 
    71 C:\Users\\Desktop\Eserc P.Intercorso\Esame_Prova.cpp `ab' undeclared (first use this function)
      (Each undeclared identifier is reported only once for each function it appears in.)  
    Il problema continua ad essere la funzione bilancio2 :S
  • Re: Problema nuovo tipo a funzione

    Allora quando la chiami tu passi alla funzione bilancio2 un puntatore a Soc_Sportiva mentre nel prototipo come parametro formale hai messo una semplice variabiledi tipo Soc_Sportiva.
    poi credo che l'erroe stia nel fatto che hai scritto nell'ultimo parametro &ab[l] modifica in ab[l]
  • Re: Problema nuovo tipo a funzione

    La soluzione era molto più semplice di quanto pensassi nel return mi è bastato mettere il puntatore di ab (*ab) e togliere la parola struct dalla funzione bilancio2
Devi accedere o registrarti per scrivere nel forum
6 risposte