PDA

Visualizza la versione completa : [C++] calcolare la media dei numeri positivi di un vettore


milu
27-12-2012, 10:48
ciao a tutti..
non riesco a capire perch quando vado a compilare, una parte delle mie istruzioni non viene presa in considerazione..devo calcolare la media dei numeri positivi di un vettore.
io faccio cos


#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;

#define N 30
typedef float array[N];
array a;

void inserimento(int&, array, int&);



void inserimento (int& num_elem, array a, int&positivi){
cout<<"\n quanti elementi vuoi inserire? ";
cin>>num_elem;

int i;
for(i=0;i<num_elem;i++){
cout<<"\n l'elemento numero"<< i+1 << " e' ";
cin>>a[i];
}

if(a[i]>0) {
positivi++;
cout<<"\n gli elementi positivi sono: "<<positivi;
}
float somma=0;
somma=somma+a[i];
float media;
media=somma/positivi;
cout<< "\n la media dei numeri positivi e'= "<<media; }

cout<<endl;
}



int main(){
int num_elem;
int positivi;
float media;
inserimento(num_elem, a,positivi);

system("pause");

}



in pratica quando vado a compilare tutta la parte dall'if in poi non me la considera..forse sbaglio la condizione dell'if..qualcuno mi pu aiutare?grazie mille

oregon
27-12-2012, 11:15
La tua if non dentro la for.

Il ciclo for inizia con la { e termina con la }

milu
27-12-2012, 11:22
se metto la if nella for fa comunque cose anomale..

milu
27-12-2012, 11:30
quanti elementi vuoi inserire? 4

l'elemento numero1 e' -3


l'elemento numero2 e' -4


l'elemento numero3 e' 5


l'elemento numero4 e' 6


gli elementi positivi sono: 74
la media dei numeri positivi e'= 3.30595e-039Premere un tasto per continuare .
. .

succede una cosa del genere quando compilo

franzauker2.0
27-12-2012, 11:34
Ahem... mi "intrufolo" per far presente che questo

a[i]>0 un evidente errore grave (ammesso che il docente se ne accorga).
Qualsiasi strategia utilizzi per definire un numero positivo ti servir una metrica che definisca l'intorno dello zero.
Anche un brutalissimo modulo < eps (non il massimo della vita, non continuo), meglio ancora la classica metrica quadrata (sempre meglio di niente)
:bh:

milu
27-12-2012, 12:40
vab..basta anche un maggiore uguale a zero..
il problema nn quello per..

franzauker2.0
27-12-2012, 13:47
Originariamente inviato da milu
vab..basta anche un maggiore uguale a zero..
il problema nn quello per.. il problema non quello, ma non basta di certo >=0 :nonono:

milu
27-12-2012, 15:08
magari dopo vedo di capire come risolvere la cosa..
adesso il programma riesce a riconoscere gli elementi positivi in che posizione sono e quali sono..ma non riesco a farne la media..



#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;

#define N 30
typedef float array[N];
array a;

void inserimento(int&, array, int&);
void media_positivi(array,int&,int&);


void inserimento (int& num_elem, array a, int&positivi){
cout<<"\n quanti elementi vuoi inserire? ";
cin>>num_elem;

int i;
for(i=0;i<num_elem;i++){
cout<<"\n l'elemento numero"<< i+1 << " e' ";
cin>>a[i];
}

float somma=0;
for(i=0;i<num_elem;i++){
if(a[i]>0) {

positivi++;
cout<< "\n l'elemento numero " <<i+1<< " e' positivo ed e'= ";
cout<<a[i];



somma=somma+a[i];
float media;
media=somma/positivi;
}
}
cout<<endl;

}


int main(){
int num_elem;
int positivi;
float media;
inserimento(num_elem, a,positivi);
cout<< "\n la media dei numeri positivi e'= "<<media;
system("pause");

}

oregon
27-12-2012, 15:14
Il problema grave del tuo codice che la variabile media che usi nel main non quella che utilizzi all'interno della funzione. E quindi il suo valore casuale.

milu
27-12-2012, 15:31
effettivamente posso mettere la variabile media come parametro della funzione void inserimento,nel main la dichiaro e chiamo la funzione inserimento che avr come parametri oltre a num_elem,a,positivi anche media..ma continuo ad avere il problema..quindi che significa che la variabile media della funzione diversa da quella del main?

Loading