Pagina 1 di 1

[Risolto]C++ media elementi in posizione pari

Inviato: giovedì 21 maggio 2015, 12:26
da vfabrisv94
Salve ragazzi, dovrei fare questo programma:

Dato un vettore di N elementi determinare la media matematica degli elementi in posizione pari;

Ecco come ho fatto:

Codice: Seleziona tutto

#include<iostream>
using namespace std;
const int dim=100;
int v1[dim];
int v2[dim];

void carica_vettore(int v1[dim], int *punt_n)
{
    do{
        cout << "Quanti elementi vuoi inserire nel vettore ?"<<endl;
        cin>>*punt_n;

        if(*punt_n<0 || *punt_n>dim)
        {
                cout << "Devi inserire un numero compreso tra 1-"<<dim<<endl;
        }
    }while(*punt_n<0 || *punt_n>dim);

    for(int i=0; i<*punt_n; i++)
    {
        cout << "Inserisci il "<<i+1<<"°"<<" numero : ";
        cin>>v1[i];
    }

}

int main(){

int n;
int media;
int somma;

carica_vettore(v1, &n);

somma=0;
for(int i=0; i<n; i++)
{
    if(i%2==0)
    {
        somma=somma+v1[i];
        media=soomma/n;

    }
}



cout << "La media della somma degli indici pari e': "<<media;




}

Potete dirmi dove sbaglio ? Perchè il risultato è sempre 0.

Re: C++ media elementi in posizione pari

Inviato: giovedì 21 maggio 2015, 15:14
da 1001001
Non direi

Codice: Seleziona tutto

mattia@alien:tmp$ g++ -Wall main.cpp 
mattia@alien:tmp$ ./a.out 
Quanti elementi vuoi inserire nel vettore ?
5
Inserisci il 1° numero : 1
Inserisci il 2° numero : 2
Inserisci il 3° numero : 3
Inserisci il 4° numero : 4
Inserisci il 5° numero : 5
La media della somma degli indici pari e': 1
mattia@alien:tmp$
I problemi del codice comunque sono due, più una cosa che non è sbagliata ma non ha senso:
1) hai dichiarato media e somma come interi. Se pur è vero che somma sarà sempre intero perché il vettore contiene interi, la media a priori no (e anzi, nella maggior parte dei casi non lo sarà). La divisione fra interi (somma e n) però non fa l'approssimazione intera del risultato della divisione, ma la divisione intera, che sono due cose diverse
2) quando calcoli la media dividi per n (la dimensione del vettore), invece che per il numero di elementi in posizione pari
3) perché calcoli la media ogni volta? Basta farla alla fine, dopo che il ciclo ha sommato tutto quanto

Re: C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 10:53
da vfabrisv94
Grazie della risposta.

Quindi quando calcolo la media dovrei dividere per il numero di elementi in posizione pari ?

Re: C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 11:02
da minomic
vfabrisv94 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4760548#p4760548][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: Quindi quando calcolo la media dovrei dividere per il numero di elementi in posizione pari ?
Certo! Devi dividere per il numero di campioni che hai sommato, che in questo caso è proprio il numero di elementi in posizione pari.

Re: C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 13:43
da M_A_W_ 1968
minomic [url=http://forum.ubuntu-it.org/viewtopic.php?p=4760552#p4760552][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Certo! Devi dividere per il numero di campioni che hai sommato, che in questo caso è proprio il numero di elementi in posizione pari.
Inoltre non c'è assolutamente bisogno di quella if() nel loop principale. Meglio imparare subito a pensare da programmatori: per raggiungere tutti e soli gli elementi con indice pari, si conta di due in due. Notate anche che, a prescindere da cosa vi sia stato insegnato a scuola (in particolare nei gradi inferiori), lo zero è il primo numero pari computazionalmente parlando (e non solo).

Codice: Seleziona tutto

    for(int i = 0; i < n; i += 2)
    {
        somma += v1[i];
    }
Come già implicitamente suggerito conviene inoltre, ai fini didattici, usare un totalizzatore inizialmente nullo per contare gli elementi di v1 che partecipano alla somma all'interno del loop principale, in modo da ricavare direttamente il divisore per il calcolo della media aritmetica.

Re: C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 14:25
da vfabrisv94
Come faccio a dividere per gli indici pari che ho sommato ?

Re: C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 14:53
da minomic
Non devi dividere per "gli indici", ma solo per il numero di elementi che si trovavano in posizione pari. Quindi ti tieni un contatore che incrementi ogni volta che trovi un indirizzo in posizione pari: alla fine dividi per quel contatore e sei a posto.

Re: C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 14:56
da vfabrisv94
Grazie mille :)

Re: [Risolto]C++ media elementi in posizione pari

Inviato: venerdì 22 maggio 2015, 21:47
da cortinico
Io farei una cosa del genere:

Codice: Seleziona tutto

	float media;
	int contatore = 0;
	for(int i = 0; i < n; i += 2){
	    somma += v1[i];
	    contatore++;
	}
	media = (float)somma/(float)contatore;