[Risolto]C++ media elementi in posizione pari

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

[Risolto]C++ media elementi in posizione pari

Messaggio 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.
Ultima modifica di vfabrisv94 il venerdì 22 maggio 2015, 14:56, modificato 1 volta in totale.
1001001
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1506
Iscrizione: mercoledì 22 dicembre 2010, 18:09
Desktop: Unity
Distribuzione: Ubuntu 14.04.1 LTS 64bit
Località: Verona

Re: C++ media elementi in posizione pari

Messaggio 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
"I find your lack of faith disturbing."
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: C++ media elementi in posizione pari

Messaggio da vfabrisv94 »

Grazie della risposta.

Quindi quando calcolo la media dovrei dividere per il numero di elementi in posizione pari ?
minomic
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 304
Iscrizione: giovedì 26 maggio 2011, 14:19
Desktop: cinnamon
Distribuzione: Linux Mint 17.2 Rafaela x86_64

Re: C++ media elementi in posizione pari

Messaggio 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.
Avatar utente
M_A_W_ 1968
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 856
Iscrizione: venerdì 15 febbraio 2013, 3:57
Desktop: KDE
Distribuzione: SuSE
Sesso: Maschile
Località: Un luogo geometrico
Contatti:

Re: C++ media elementi in posizione pari

Messaggio 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.
Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

"...in una società che sembra sempre più spaventata dai problemi troppo articolati e che rigetta come un corpo estraneo ogni elemento di complessità, sapremo ancora come utilizzare il parere degli esperti?"
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: C++ media elementi in posizione pari

Messaggio da vfabrisv94 »

Come faccio a dividere per gli indici pari che ho sommato ?
minomic
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 304
Iscrizione: giovedì 26 maggio 2011, 14:19
Desktop: cinnamon
Distribuzione: Linux Mint 17.2 Rafaela x86_64

Re: C++ media elementi in posizione pari

Messaggio 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.
vfabrisv94
Prode Principiante
Messaggi: 45
Iscrizione: sabato 7 marzo 2015, 15:42
Sesso: Maschile

Re: C++ media elementi in posizione pari

Messaggio da vfabrisv94 »

Grazie mille :)
Avatar utente
cortinico
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 477
Iscrizione: venerdì 15 maggio 2015, 16:49
Desktop: Unity
Distribuzione: Ubuntu 15.04 amd64
Sesso: Maschile
Località: Pisa
Contatti:

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

Messaggio 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;
"Look wide, and even when you think you are looking wide – look wider still!"
http://ncorti.com
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti