[C]Contare elementi di un array di int

frab1
ciao,
sto risolvendo il seguente quesito...

"Progettare un algoritmo che effettui la lettura da tastiera di una serie di valori numerici. Il
programma termina quando il dato immesso è pari a zero. Calcolare e stampare la media dei valori
inseriri. Inoltre, stampare la sequenza di valori in ordine inverso rispetto a quello di inserimento. Un
valore dovrà essere stampato soltanto se maggiore della media calcolata."

Io ho cominciato con questa prima parte nella quale dopo aver scritto un vettore contenente i valori letti, vado a calcolare la dimensione di tale vettore; ma ecco i problemi!! :cry:
Fossero char potrei usare l'apposita funzione "strlen", ma con gli int la sizeof non mi restituisce il numero di elem del vettore.. :cry: ho fatto cosi..
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int i=0;
	int vettore[1000];
	int n_elementi;
	do {
		printf("Inserire valori(0 termina l'acquisizione):\n");
		scanf("%d",&vettore[i]);
		i++;
	} while(vettore[i-1]!=0);
	n_elementi=sizeof(vettore)/sizeof(int);
	printf("\nIl numero di elementi del vettore è: %d\n",n_elementi);
	return 0;	
}

Risposte
vict85
Usa un contatore che incrementi ogni volta che inserisci un nuovo elemento. Comunque dovresti usare l'allocazione dinamica oppure controllare che il contatore non raggiunga 1000.

frab1
ok, pensavo esistesse qualhe contatore comodo...semplicemente allora ..
n_elementi=i-1;
	printf("\nIl numero di elementi del vettore è: %d\n",n_elementi);


grazie

vict85
Ripensandoci il numero di elementi lo sai già, dato che stai già usando un contatore: i. Quindi n_elementi = i; fa quello che cerchi. Nota che anche strlen non è un contatore comodo (ha complessità n) e quindi andrebbe usato con parsimonia.

frab1
Sistemato il conteggio, ho finito il programma che pero' non stampa :shock: a me sembra giusto...

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
	int i=0;
	int vettore[1000];
	int n_elementi;
	int count=0;
	float sum=0;
	float media;
	do {
		printf("Inserire valori(0 termina l'acquisizione):\n");
		scanf("%d",&vettore[i]);
		i++;
	} while(vettore[i-1]!=0);
	n_elementi=i-1;
	printf("\nIl numero di elementi del vettore è: %d\n",n_elementi);
	for (i=0;i<=n_elementi;i++) {
		sum=vettore[i]+sum;
	}
	media=sum/n_elementi;
	printf("\nLa media dei valori inseriti vale: %f\n",media);
	return 0;
	i=0;	
	for (i=n_elementi-1;i>=0;i--) {
		if(vettore[i]>media)
			printf("%d\n",vettore[i]);
	}
}


vict85
Ci sono vari errori.

sum e n_elementi sono numeri interi, media è un float ma stai calcolando la divisione senza fare un cast. Il risultato verrà quindi sbagliato.

Seppur non crea problemi sommi a sum anche vector[n_elementi] che è uguale a 0. Di per se non sarebbe neanche necessario imporre quella condizione. Infatti potevi anche fare qualcosa del tipo
for(i = 0, sum = 0; vettore[i] != 0; sum += a[i++]);
o una sua versione meno compatta.

Hai messo un return 0 e poi altre righe di codice che verranno ignorate.

frab1
grazie!!gia' solo levando il return 0 (SVISTA :-( ) funziona.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.