da due vettori le medie in due nuovi vettori

Messaggioda leon80 » 14/05/2018, 12:23

Salve ,
il quesito e :
da una funzione che mi genera le medie di due vettori
devo produrre due nuovi vettori con i valori superiori alle medie reciproche.
Codice:
void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[],int&media1,int&media2)
{
//FUNZIONI VETTORE 1
   {
   int i=0;
   int sum1=0;
   float media1=0;
   for(int i=0;i<n;i++)
      {
      sum1+=Vet_1[i];   
      }   
       media1=(float) sum1/n;
   cout << "\nLa  SOMMA del vettore_1 e' = "<<sum1<<endl;   
    cout << "\nLa  MEDIA del vettore_1 e' = "<<media1<<endl;
   cout<<endl;
   cout<<"I valori del vettore_1 superiori alla Media sono : "<<endl;
      for(int i=0;i<n;i++)
         {
        if(Vet_1[i]>media1   )
             {
          VetMedia_1[i]=Vet_1[i];
       cout<<VetMedia_1[i] <<" , "<<endl;
              }
          }   
   }
//FUNZIONI VETTORE 2
   {
   int i=0;
   int sum2=0;
   float media2=0;
   for(int i=0;i<m;i++)
      {
      sum2+=Vet_2[i];   
      }   
       media2=(float) sum2/m;
   cout << "\nLa  SOMMA del vettore_2 e' = "<<sum2<<endl;   
    cout << "\nLa  MEDIA del vettore_2 e' = "<<media2<<endl;
    cout<<endl;
   cout<<"I valori del vettore_2 superiori alla Media sono : "<<endl;
      for(int i=0;i<m;i++)
         {
        if(Vet_2[i]>media2   )
             {
          VetMedia_2[i]=Vet_2[i];
   cout<<VetMedia_2[i] <<" , "<<endl;
              }
         }
    }

}

invece di
Codice:
if(Vet_1[i]>media1   )
e [code]if(Vet_2[i]>media2   )[/code]
mi serve [code]if(Vet_1[i]>media2   )[/code]
e [code]if(Vet_2[i]>media1   )

il vettore lo devo confrontare con la media dell'altro vettore, e carico il nuovo vettore con i valori superiori alla media .
spero di essere stato chiaro
grazie per la collaborazione
leon80
Starting Member
Starting Member
 
Messaggio: 1 di 24
Iscritto il: 14/05/2018, 12:09

Re: da due vettori le medie in due nuovi vettori

Messaggioda Super Squirrel » 14/05/2018, 21:25

Ci sono molte cose poco chiare sia nel codice che nella tua richiesta:
- la variabile n, che penso rappresenti la dimensione dell'array Vet_1, dove l'hai dichiarata?
- VetMedia è un array di dimensione pari a quella di Vet, giusto?
- VetMedia è stato inizializzato in qualche modo?
- all'uscita dalla funzione come fai a sapere quanti elementi di VetMedia sono stati modificati?
- ci sono poi vari errori dovuti al fatto che dichiari la stessa variabile più volte e magari anche con un tipo diverso (vedi media);
- lo scopo delle funzioni è quello di evitare di scrivere lo stesso codice più volte, perché quindi all'interno della funzione fai esattamente il contrario?
- se già sai come devi modificare il codice, qual è esattamente il problema per cui hai chiesto aiuto? hai provato a compilare il codice?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 203 di 1486
Iscritto il: 16/05/2013, 22:05

Re: da due vettori le medie in due nuovi vettori

Messaggioda leon80 » 17/05/2018, 17:16

Ciao, intanto grazie per l'attenzione
penso che sia meglio che ti posto l'intero codice
compila e risolve fino alle medie, ma invece di calcolare vet_1 con media_2 e vet_2 con media_1,
fa una copia dei valori di Vet_1[i] in VetMedia_1[i]
forse adesso è più chiaro
il codice :
Codice:

   #include <iostream>
    #include<stdlib.h>
    #include <cstdlib>
    using namespace std;
    const int n=5,m=4;
    // ----- PROTOTIPI ----- //
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m]);
void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[],int&media1,int&media2);
// ----- /PROTOTIPI ----- //

   
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m])
{
   {
   for(int i=0;i<n;i++){
        cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_1 "<<endl;
        cin>>Vet_1[i];   }
   }
   {
   for(int i=0;i<m;i++){
        cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_2 "<<endl;
        cin>>Vet_2[i];
                   }
   }
   {
   cout<<"I VALORI DEL VETTORE_1 SONO : ";
    int i;
    for(i=0;i<n;i++){
    cout<< Vet_1[i]<<" ; ";
                }   
   }
   cout<<endl;
   {
   cout<<"I VALORI DEL VETTORE_2 SONO : ";
    int i;
    for(i=0;i<m;i++){
    cout<< Vet_2[i]<<" ; " ;
                }
   }

}
//FUNZIONE MEDIA E CARICA VETTORE CON  (Vet_x[i]>media_x   )

void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[],int&media1,int&media2)
{
//FUNZIONI VETTORE 1
   {
   int i=0;
   int sum1=0;
   float media1=0;
   for(int i=0;i<n;i++)
      {
      sum1+=Vet_1[i];   
      }   
       media1=(float) sum1/n;
   cout << "\nLa  SOMMA del vettore_1 e' = "<<sum1<<endl;   
    cout << "\nLa  MEDIA del vettore_1 e' = "<<media1<<endl;
   cout<<endl;
   cout<<"I valori del vettore_1 superiori alla Media sono : "<<endl;
      for(int i=0;i<n;i++)
         {
        if(Vet_1[i]>media2   )
             {
          VetMedia_1[i]=Vet_1[i];
       cout<<VetMedia_1[i] <<" , ";
              }
                 else {
         VetMedia_1[i]==0;   
         }
          }   
   }
//FUNZIONI VETTORE 2
   {
   int i=0;
   int sum2=0;
   float media2=0;
   for(int i=0;i<m;i++)
      {
      sum2+=Vet_2[i];   
      }   
       media2=(float) sum2/m;
   cout << "\nLa  SOMMA del vettore_2 e' = "<<sum2<<endl;   
    cout << "\nLa  MEDIA del vettore_2 e' = "<<media2<<endl;
    cout<<endl;
   cout<<"I valori del vettore_2 superiori alla Media sono : "<<endl;
      for(int i=0;i<m;i++)
         {
        if(Vet_2[i]>media1   )
             {
          VetMedia_2[i]=Vet_2[i];
   cout<<VetMedia_2[i] <<" , ";
              }
         else {
         VetMedia_2[i]==0;   
         }
         }
         
    }

}
//inizio programma
int main()
{
int Vet_1[n];
int Vet_med_1[n];
int Vet_2[m];
int Vet_med_2[n];
int min_1;
int min_2;


CaricaVet_1_2(Vet_1,Vet_2);
   cout<<endl;

MediaVet_1_2(Vet_1,Vet_2,Vet_med_1,Vet_med_2,min_1,min_2);
   cout<<endl;
}//fine programma

leon80
Starting Member
Starting Member
 
Messaggio: 2 di 24
Iscritto il: 14/05/2018, 12:09

Re: da due vettori le medie in due nuovi vettori

Messaggioda Super Squirrel » 17/05/2018, 19:04

Ciao, intanto grazie per l'attenzione

Prego, ma vedo che non hai minimamente preso in considerazione quello che ho scritto nel post precedente... :roll:

In ogni caso:
- l'unica libreria necessaria è iostream, le altre sono superflue;
- nei prototipi non serve specificare il nome degli argomenti;
- come detto nel post precedente lo scopo delle funzioni è quello di evitare di scrivere lo stesso codice più volte, quindi invece di scrivere una funzione che faccia la stessa cosa su due vettori, scrivi una funzione che operi su un unico vettore e poi richiami quella funzione due volte (una volta per Vet_1 e una volta per Vet_2);
- crei degli ambiti che non hanno nessuna utilità. Per ambito si intende l'insieme di istruzioni comprese fra due parentesi graffe. Per esempio la funzione:
Codice:
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m])
{
    {
        for(int i=0;i<n;i++)
        {
            cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_1 "<<endl;
            cin>>Vet_1[i];
        }
    }
    {
        for(int i=0;i<m;i++)
        {
            cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_2 "<<endl;
            cin>>Vet_2[i];
        }
    }
}

può essere scritta semplicemente così:
Codice:
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m])
{
    for(int i=0;i<n;i++)
    {
        cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_1 "<<endl;
        cin>>Vet_1[i];
    }
    for(int i=0;i<m;i++)
    {
        cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_2 "<<endl;
        cin>>Vet_2[i];
    }
}

- nella funzione MediaVet dichiari la variabile media che ha lo stesso nome di uno degli argomenti della funzione;
- il motivo per cui la funzione MediaVet non fa quello che dovrebbe nell'ambito FUNZIONI VETTORE 1 è che media2 non è stata ancora calcolata e quindi i vari elementi di Vet_1 saranno confrontati con un valore casuale (in quanto media2 rappresenta la variabile min_2 dichiarata nel main, che non essendo stata inizializzata assumerà un valore indefinito);
- il motivo per cui la funzione MediaVet non fa quello che dovrebbe nell'ambito FUNZIONI VETTORE 2 è che media1 non è quella calcolata nell'ambito FUNZIONI VETTORE 1 (infatti le variabili dichiarate in un ambito cessano di esistere all'esterno di quell'ambito), ma è l'argomento della funzione e rappresenta quindi la variabile min_1 dichiarata nel main;
- nella funzione MediaVet scrivi VetMedia[i]==0 invece di VetMedia[i]=0. In ogni caso assegnare il valore zero nel caso in cui la condizione non venga rispettata non mi sembra vada d'accordo con la traccia dell'esercizio:
il vettore lo devo confrontare con la media dell'altro vettore, e carico il nuovo vettore con i valori superiori alla media .

Ti consiglio quindi di riscrivere il programma tenendo conto delle considerazioni appena fatte.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 205 di 1486
Iscritto il: 16/05/2013, 22:05

Re: da due vettori le medie in due nuovi vettori

Messaggioda leon80 » 17/05/2018, 20:55

Saraà stato ifatto che ho srcitto il quesito, e di colpo ho caoito gli errori,
usavo media_2 con vet_1 prima di calcolarla essendo inizializzata a 0 copiava pari pari ,
altri di minore entita e /o leggibilità.
Grazie Super Sqirrel
la tua risposta con le domanda a dato il via all'intuizione.
Visto che sono qua se posso ne avrei altro con simili problemi tipo calcola tutto tranne il valore max di un vettore o non calcola valori minori della media.
Come vede sono errrori da primi passi , ma tant'è.
leon80
Starting Member
Starting Member
 
Messaggio: 3 di 24
Iscritto il: 14/05/2018, 12:09

Re: da due vettori le medie in due nuovi vettori

Messaggioda Super Squirrel » 18/05/2018, 11:42

Saraà stato ifatto che ho srcitto il quesito, e di colpo ho caoito gli errori,
usavo media_2 con vet_1 prima di calcolarla essendo inizializzata a 0 copiava pari pari ,
altri di minore entita e /o leggibilità.
Grazie Super Sqirrel
la tua risposta con le domanda a dato il via all'intuizione.
Visto che sono qua se posso ne avrei altro con simili problemi tipo calcola tutto tranne il valore max di un vettore o non calcola valori minori della media.
Come vede sono errrori da primi passi , ma tant'è.

Sinceramente non ci ho capito molto, ma mi fa piacere esserti stato d'aiuto.

In ogni caso se hai aggiustato il codice perchè non lo posti?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 207 di 1486
Iscritto il: 16/05/2013, 22:05

Re: da due vettori le medie in due nuovi vettori

Messaggioda leon80 » 19/05/2018, 11:40

Giusto
di seguito il codice funzionante
Codice:
/*

Caricare due vettori con una funzione:Vet_1,Vet_2;
Mostrare a video:
Media di entrambi i vettori: media_1,media_2;
Dalle due medie caricare altri due vettori:Vet_1_A,Vet_2_B;
Vet_1_A con i valori del Vet_1 superiori della media_2;
Vet_2_B con i valori del Vet_2 superiori della media_1;
 */

   #include <iostream>
    #include<stdlib.h>
    #include <cstdlib>
    using namespace std;
    const int n=5,m=4;
    // ----- PROTOTIPI ----- //
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m]);
void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[],int&media1,int&media2);
// ----- /PROTOTIPI ----- //

   
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m])
{
   {
   for(int i=0;i<n;i++){
        cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_1 "<<endl;
        cin>>Vet_1[i];   }
   }
   {
   for(int i=0;i<m;i++){
        cout<<"Inserisci nella posizione ="<<i<<" il valore del vettore_2 "<<endl;
        cin>>Vet_2[i];
                   }
   }
   {
   cout<<"I VALORI DEL VETTORE_1 SONO : ";
    int i;
    for(i=0;i<n;i++){
    cout<< Vet_1[i]<<" ; ";
                }   
   }
   cout<<endl;
   {
   cout<<"I VALORI DEL VETTORE_2 SONO : ";
    int i;
    for(i=0;i<m;i++){
    cout<< Vet_2[i]<<" ; " ;
                }
   }

}
//FUNZIONE MEDIA E CARICA VETTORE CON  (Vet_x[i]>media_x   )

void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[],int&media1,int&media2)
{
//FUNZIONI VETTORE 1
   {
   int i=0;
   int sum1=0;
   float media1=0;
   for(int i=0;i<n;i++)
      {
      sum1+=Vet_1[i];   
      }   
       media1=(float) sum1/n;
   cout << "\nLa  SOMMA del vettore_1 e' = "<<sum1<<endl;   
    cout << "\nLa  MEDIA del vettore_1 e' = "<<media1<<endl;
   cout<<endl;
   cout<<"I valori del vettore_1 superiori alla Media sono : "<<endl;
      for(int i=0;i<n;i++)
         {
        if(Vet_1[i]>media1   )
             {
          VetMedia_1[i]=Vet_1[i];
       cout<<VetMedia_1[i] <<" , "<<endl;
              }
          }   
   }
//FUNZIONI VETTORE 2
   {
   int i=0;
   int sum2=0;
   float media2=0;
   for(int i=0;i<m;i++)
      {
      sum2+=Vet_2[i];   
      }   
       media2=(float) sum2/m;
   cout << "\nLa  SOMMA del vettore_2 e' = "<<sum2<<endl;   
    cout << "\nLa  MEDIA del vettore_2 e' = "<<media2<<endl;
    cout<<endl;
   cout<<"I valori del vettore_2 superiori alla Media sono : "<<endl;
      for(int i=0;i<m;i++)
         {
        if(Vet_2[i]>media2   )
             {
          VetMedia_2[i]=Vet_2[i];
   cout<<VetMedia_2[i] <<" , "<<endl;
              }
         }
    }

}
//inizio programma
int main()
{
int Vet_1[n];
int Vet_med_1[n];
int Vet_2[m];
int Vet_med_2[n];
int min_1;
int min_2;


CaricaVet_1_2(Vet_1,Vet_2);
   cout<<endl;

MediaVet_1_2(Vet_1,Vet_2,Vet_med_1,Vet_med_2,min_1,min_2);
   cout<<endl;
}//fine programma

leon80
Starting Member
Starting Member
 
Messaggio: 10 di 24
Iscritto il: 14/05/2018, 12:09

Re: da due vettori le medie in due nuovi vettori

Messaggioda Super Squirrel » 19/05/2018, 12:33

Praticamente è il codice precedente in cui hai sostituito la funzione MediaVet_1_2 con quella riportata nel post iniziale...

Non avevi detto che gli elementi di un vettore devono essere confrontati con la media dell'altro vettore?!
Quindi il codice sarà pure funzionante, ma non fa quello che dovrebbe...

Veniamo poi alla questione principale, perchè chiedi aiuto su un forum se poi non prendi minimamente in considerazione i suggerimenti che ti vengono dati?!
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 212 di 1486
Iscritto il: 16/05/2013, 22:05

Re: da due vettori le medie in due nuovi vettori

Messaggioda leon80 » 20/05/2018, 15:08

il codice è stao correto , prima ho copiato la versione non correta.
Comunque è grazie ai tuoi consigli che ho risolto
Ma ti chiedo come potrei usare il risultato
di una funzione void all'interno di un'altra funzione void,
magari senza l'uso dei puntatori
il codice correto è il seguente:
Codice:


   #include <iostream>
    #include<stdlib.h>
    #include <cstdlib>
    using namespace std;
    const int n=5,m=4;
    // ----- PROTOTIPI ----- //
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m]);
void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[]);
// ----- /PROTOTIPI ----- //
//FUNZIONE LEGGE E  CARICA VET_1 e VET_2 //   
void CaricaVet_1_2(int Vet_1[n],int Vet_2[m])
{
   for(int i=0;i<n;i++){
        cout<<"Inserisci il valore : "<<i<<" del VET_1 "<<" = ";
        cin>>Vet_1[i];
   }
   for(int i=0;i<m;i++){
        cout<<"Inserisci il valore : "<<i<<" del VET_2 "<<" = ";
        cin>>Vet_2[i];
   }
   cout<<endl;
   cout<<"I valori del VET_1 sono : ";
    int i;
    for(i=0;i<n;i++){
    cout<< Vet_1[i]<<" ; ";
   }
   cout<<endl;
   cout<<"I valori del VET_2 sono : ";
    for(i=0;i<m;i++){
    cout<< Vet_2[i]<<" ; " ;
   }
}
//FUNZIONE MEDIA_1 e MEDIA_2 e CARICA VET_1 con MEDIA_2 e VET_1 con MEDIA_1 //
void MediaVet_1_2(int Vet_1[],int Vet_2[],int VetMedia_1[],int VetMedia_2[])
{
   int i=0;
   int sum1=0,sum2=0;
   float media1=0;
   float media2=0;
//MEDIA_1 DEL VETTORE 1   
   for(int i=0;i<n;i++)
      {
      sum1+=Vet_1[i];   
      }   
      media1=(float) sum1/n;
   cout << "\nLa  Somma del VET_1 e' = "<<sum1<<"";   
    cout << "\nLa  Media del VET_1 e' = "<<media1<<endl;
//MEDIA_2 DEL VETTORE 2   
   for(int i=0;i<m;i++)
      {
      sum2+=Vet_2[i];   
      }   
      media2=(float) sum2/m;
   cout << "\nLa  Somma del VET_2 e' = "<<sum2;   
    cout << "\nLa  Media del VET_2 e' = "<<media2<<endl;
    cout <<endl;
//CARICO VET_MED_1 DA VET_1 CON   MEDIA_2
cout<<"I valori del VET_1 superiori alla Media_2 sono : "<<"";
   for(int i=0;i<n;i++)
      {
           if(Vet_1[i]>media2)
              {
       VetMedia_1[i]=Vet_1[i];
       cout<<VetMedia_1[i] <<" , ";
           }
       }   
//CARICO VET_MED_2 DA VET_2 CON   MEDIA_1
cout<<endl<<"I valori del VET_2 superiori alla Media_1 sono : ";
   for(int i=0;i<m;i++){
        if(Vet_2[i]>media1)
             {
          VetMedia_2[i]=Vet_2[i];
          cout<<VetMedia_2[i] <<" , ";
        }
   }
}
//inizio programma
int main()
{
cout<<"Caricati Vet_1,Vet_2 con una funzione, calcola :"<<endl;
cout<<"media_1,media_2"<<endl;
cout<<"Caricare Vet_med_1 con valori di Vet_1 superiori alla media_2"<<endl;
cout<<"Caricare Vet_med_1 con valori di Vet_1 superiori alla media_2"<<endl;

int Vet_1[n];
int Vet_med_1[n];
int Vet_2[m];
int Vet_med_2[n];

CaricaVet_1_2(Vet_1,Vet_2);
   cout<<endl;
MediaVet_1_2(Vet_1,Vet_2,Vet_med_1,Vet_med_2);
   cout<<endl;
}//fine programma
leon80
Starting Member
Starting Member
 
Messaggio: 11 di 24
Iscritto il: 14/05/2018, 12:09


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite