Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

di il
77 risposte

Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

Salve a tutti,
sto preparando l'esame di informatica ma ho grosse difficoltà.
ho il seguente problema da risolvere ma non riesco a completarlo. In particolare ho il problema nel calcolare la media del vettore 3.
Siano dati in ingresso, da tastiera, i riempimenti n1 ed n2 ed i valori di due vettori V1 e V2 di numeri reali. Si scriva un programma che copi in un nuovo vettore V3 i valori contenuti in V2 che risultano minori della media dei valori presenti in V1.
Si stampino quindi il vettore V3 cosi' ottenuto e le medie dei valori presenti in V1 ed in V3. Si preveda un apposito output nel caso V3 sia vuoto.
Si strutturi il programma in opportuni sottoprogrammi.
Esempio:
Ingresso
n1 = 4 n2 = 6
V1 = 7.2 15.5 19.3 12.8
V2 = 2.4 9.5 18.6 6.2 15.3 4.9
Uscita
V3 = 2.4 9.5 6.2 4.9
media_in_V1 = 13.7
media_in_V3 = 9.48333


Il programma in C++ da me svolto è il seguente:
#include <iostream>
using namespace std;
#include <stdlib.h>

//prototipi delle funzioni
void input ( int &n1,int &n2 , float vett1[],float vett2[]);
double vetmedia (int n1,int n2,float vett1[],float vett2[]);
//Si scriva un programma che copi in un nuovo vettore V3 i valori contenuti in V2
//che risultano minori della media dei valori presenti in V1
void vettore3 (int n1,int n2,float vett1[],float vett2[],float vett3[]);






void output (int n1,int n2, float vett1[],float vett2[]);

int main() {
int n1;
int n2;


float vett1[100];
float vett2[100];
float vett3[100];




//chiamate delle funzioni
input(n1,n2,vett1,vett2);
cout<<"i vettori sono: \n";
output(n1,n2,vett1,vett2);
vettore3 (n1,n2,vett1,vett2,vett3);
double media=vetmedia(n1,n2,vett1,vett2);
cout<<"la media del vettore V1 e'="<<media<<endl;

cout<<"la media del vettore V3 e': "<<media<<endl;





cout<<"\n\n";

system ("PAUSE");
return 0;

}
void input(int &n1,int &n2 ,float vett1[],float vett2[] ){

int i;

cout<<"Assegna un valore intero n1 al numero di elementi del vettore:";
cin>>n1;
cout<<"\n";
cout<<"Assegna "<<n1<<" elementi del vettore\n";
cout<<"V1=";
for (i=0;i<n1;i++) cin>>vett1;
cout<<"Assegna un valore intero n2 al numero di elementi del vettore:";
cin>>n2;
cout<<"\n";
cout<<"Assegna "<<n2<<" elementi del vettore\n";
cout<<"V2=";
for (i=0;i<n2;i++) cin>>vett2;
}
double vetmedia(int n1,int n2,float vett1[],float vett2[]) {
double media=0;
for (int i=0;i<n1;i++)
media+=vett1;

media=media/n1;


return media;

}

void vettore3 (int n1,int n2,float vett1[],float vett2[],float vett3[]) {
double media=vetmedia(n1,n2,vett1,vett2);

cout<<"Il V3 contenente i valori in V2 che risultano <della media dei valori in V1 e': V3=[";
for (int i=0;i<n2;i++)
if (vett2<media)

cout<<" "<<vett2;
cout<<" ]";
cout<<"\n";
}





void output (int n1,int n2,float vett1[],float vett2[])
{

cout<<"V1=[";
for (int i=0;i<n1;i++)
cout<<" "<<vett1;
cout<<" ]";
cout<<"\n";
cout<<"V2=[";
for (int i=0;i<n2;i++)
cout<<" "<<vett2;
cout<<" ]";
cout<<"\n";

}




Riuscite a risolvere il quesito? insomma come poter ugualgiare quel nuovo vettore 2 in vettore 3 e calcolare la media? Ve ne sarei grato....

77 Risposte

  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Passiamo per stadi. Scrivi una funzione che mi calcola la media di un vettore qualsiasi.
    
    float media(float vett[], int size)
    {
    ......
    }
    
    quando hai scritto questo passiamo oltre.
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Double vetmedia(int n,float vett[]){
    double media=0;
    for (int i=0;i<n;i++){
    media+=vett;
    }

    media=media/n;
    return media;
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Perfetto. Adesso scrivi un ciclo che controlla se gli elementi di un vettore sono minori di un certo numero.
    
    void minori(float vett[], int  size, float numero)
    {
    Se minore stampalo su schermo.
    }
    
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ho finito il programma e funziona...))mentre svolgevo i tuoi aiuti e ti ringrazio...
    però adesso devo realizzare un apposito output nel caso V3 sia vuoto....
    come mi conviene invece in questo caso?
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Mentre mettevi gli elementi in v3 incrementa una variabile che ti dice quanti elementi hai aggiunto. Se questa variabile riamne a zero (perche l'avrai inizializzata a zero vero?) vuol dire che V3 è vuoto e che non li puo calcolare la media.
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    #include <iostream>
    using namespace std;
    #include <stdlib.h>

    //prototipi delle funzioni
    void input ( int &n1,int &n2 , float vett1[],float vett2[]);
    double vetmedia(int n,float vett[]);
    //Si scriva un programma che copi in un nuovo vettore V3 i valori contenuti in V2
    //che risultano minori della media dei valori presenti in V1
    void vettore3 (int n1,int n2,float vett1[],float vett2[],float vett3[]);
    void output (int n1,int n2, float vett1[],float vett2[]);

    int main() {
    int n1;
    int n2;

    float vett1[100];
    float vett2[100];
    float vett3[100];




    //chiamate delle funzioni
    input(n1,n2,vett1,vett2);
    cout<<"i vettori sono: \n";
    output(n1,n2,vett1,vett2);
    vettore3 (n1,n2,vett1,vett2,vett3);

    cout<<"\n\n";
    system ("PAUSE");
    return 0;

    }
    void input(int &n1,int &n2 ,float vett1[],float vett2[] ){

    int i;

    cout<<"Assegna un valore intero n1 al numero di elementi del vettore:";
    cin>>n1;
    cout<<"\n";
    cout<<"Assegna "<<n1<<" elementi del vettore\n";
    cout<<"V1=";
    for (i=0;i<n1;i++) cin>>vett1;
    cout<<"Assegna un valore intero n2 al numero di elementi del vettore:";
    cin>>n2;
    cout<<"\n";
    cout<<"Assegna "<<n2<<" elementi del vettore\n";
    cout<<"V2=";
    for (i=0;i<n2;i++) cin>>vett2;
    }
    double vetmedia(int n,float vett[]){
    double media=0;
    for (int i=0;i<n;i++){
    media+=vett;
    }

    media=media/n;
    return media;
    }

    void vettore3 (int n1,int n2,float vett1[],float vett2[],float vett3[]){
    int j = 0;
    double media1=vetmedia(n1,vett1);
    for (int i=0;i<n2;i++){
    if (vett2<media1){
    vett3[j] = vett2;
    j++;
    }
    }
    cout<<"Il V3 contenente i valori in V2 che risultano <della media dei valori in V1 e': V3=[ ";
    for (int a = 0 ; a < j; a++){
    cout << vett3[a] << " ";
    }
    cout << "]\n";
    double media2=vetmedia(j,vett3);
    cout<<"la media del vettore V1 e' = "<<media1<<'\n';
    cout<<"la media del vettore V3 e' = "<<media2<<'\n';

    }



    void output (int n1,int n2,float vett1[],float vett2[])
    {

    cout<<"V1=[";
    for (int i=0;i<n1;i++)
    cout<<" "<<vett1;
    cout<<" ]";
    cout<<"\n";
    cout<<"V2=[";
    for (int i=0;i<n2;i++)
    cout<<" "<<vett2;
    cout<<" ]";
    cout<<"\n";

    }
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Quindi incremento la j?
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    La rpocedura è corretta secondo te? adesso mi sto un po' confondendo....mmm
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    J è già incrementato alla fine della funzione. Puoi fare questo
    
    if(j != 0)
    {
           double media2=vetmedia(j,vett3);
           cout<<"la media del vettore V3 e' = "<<media2<<'\n';
    }
    else
     cout << "la media non può essere calcolata, V3 vuoto";
    
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Ok ti ringrazio...sei stato molto gentile...
    il programma presumo che funzioni
    ora devo provare a crearmi un esempio dove V3 sia vuoto e vedere se verrà stampato ....
    grazie per la disponibilità.... ))
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Grande..funziona però ho semplicemente inserito alla fine :
    if(j != 0)
    cout << "la media non può essere calcolata, V3 vuoto";
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    If(j == 0) non può essere calcolata non != 0
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Io facendo cosi ho fatto la prova e funziona....mmm

    void vettore3 (int n1,int n2,float vett1[],float vett2[],float vett3[]){
    int j = 0;
    double media1=vetmedia(n1,vett1);
    for (int i=0;i<n2;i++){
    if (vett2<media1){
    vett3[j] = vett2;
    j++;
    }
    }
    cout<<"Il V3 contenente i valori in V2 che risultano <della media dei valori in V1 e': V3=[ ";
    for (int a = 0 ; a < j; a++){
    cout << vett3[a] << " ";
    }
    cout << "]\n";
    double media2=vetmedia(j,vett3);
    cout<<"la media del vettore V1 e' = "<<media1<<'\n';
    cout<<"la media del vettore V3 e' = "<<media2<<'\n';
    if(j != 0)
    cout << "la media non può essere calcolata, V3 vuoto";


    }
  • Re: Si stampino quindi il vettore V3 cosi' ottenuto e le medie d

    Un vettore è vuoto se non ha elementi quindi j == 0. La verifica di j lo devi fare prima di calcolare la media non dopo.
Devi accedere o registrarti per scrivere nel forum
77 risposte