[C] Calcolo massimo, minimo, media di un vettori in C.

morfiero95
Ciao ragazzi, non ho ben capito come si fa a calcolare il massimo, il minimo e la media di un vettore di n numeri (interi) usando il linguaggio base C. Se è possibile mi servirebbe una spiegazione dettagliata. Grazie per il sostegno!

Risposte
Sherlock.h
Cominciamo dalla media. Cos'è la media? La somma tra tutti i singoli elementi divisa per il numero di elementi.
Mi pare di capire che hai già il numero n di elementi che formano l'array (se non fosse così ti prego di dirmelo), quindi devi semplicemente calcolare la somma e dividere quest'ultima per il suddetto n.

Per calcolare la somma avrai bisogno di una variabile nella quale immagazzinarla. Dovrai scorrere l'intero vettore aggiornando passo per passo, per ogni singolo elemento considerato, il valore della variabile destinata a contenere la somma. Arrivati in fondo all'array avrai il valore finale della somma, e potrai dividere questa quantità per n, ottenendo così la media (prestando attenzione al tipo delle variabili se non vuoi limitarti alla parte decimale della media, ma vuoi anche, probabilmente, la parte decimale).

Per scorrere il vettore immagino che tu sappia come fare, ovvero attraverso un ciclo. Nell'ipotesi che tu sappia quanti sono i valori che compongono il tuo array potresti prendere in considerazione l'uso del ciclo for, ad esempio.

Per quanto riguarda massimo e minimo, il concetto è ancora più semplice. Anche in questo caso avrai bisogno di due variabili, e dovrai scorrere l'intero vettore e fare un confronto tra il valore delle variabili che contengono massimo e minimo, e il singolo elemento i-esimo dell'array. È banale capire al verificarsi di quali condizioni è opportuno modificare il valore delle variabili per il minimo e per il massimo.

Detto ciò ti invito a postare il codice con il quale stai cercando di arrivare alla soluzione di questo tuo problema.

Summerwind78
Ciao

Immagino che questo vettore tu ce l'abbia già riempito con i valori, altrimenti bisogna per prima cosa considerare come far immettere i valori dall'utente.

per quanto riguarda trovare il massimo io farei in questo modo:

Creo un variabile che chiamo per esempio 'max'
in max metto il primo elemento dell'array
poi con un ciclo for controllo se i vari elementi dell'array sono maggiori di max, se lo sono prendo l'elemento che e maggiore e lo memorizzo in max.
Al termine del ciclo avrò quindi in max, il l'elemento maggiore di tutto l'array

con lo stesso ragionamento trovo anche l'elemento minore

per quanto riguarda la media dire che anche qui uso una variabile che chiamo 'media' alla quale inizialmente assegno il valore 0
con un ciclo for leggo tutti i valori dell'array e li sommo a media
al termine del ciclo divido il contenuto di media per il numero di elementi dell'array e così la media è calcolata correttamente

con un po' di pratica puoi fare tutte e tre le cose con un singolo ciclo for

Saluti

morfiero95
si scusate ma la traccia dell'esercizio è la seguente:
Il comandante del porto di Bari vuole effettuare una statistica sulle N navi presenti nel porto in termini di stazza (tonnellaggio). Il numero N di navi è fornito dallo stesso comandante del porto. In seguito all'acquisizione delle stazze delle navi, elencare i tonnellaggi delle navi maggiori di 5 ton, calcolando la percentuale di queste navi sul totale delle navi. Inoltre visualizzare la media delle stazze e il valore di tonnellaggio della nave più piccola e della nave più grande.
Realizzare il seguente programma in linguaggio C.

vict85
Sai fare la somma di N elementi contenuti in un array? Se lo sai fare, fare la media non è un problema molto più complesso (ricordati però che la media deve esser un float o double anche se gli elementi sono degli interi).

Detto questo, a me sembra che tu ti stia auto-sabotando: prima di pensare di non saperlo fare forse dovresti provarci. E non farti intimorire dal testo, devi solo leggere N, i valori delle navi, sommare i valori e fare i cicli forma per le varie operazioni.

apatriarca
Che parte di questo esercizio ti mette in difficoltà? Che cosa non riesci a fare/capire? Riesci ad esempio a scrivere il codice per la lettura delle stazze delle navi? Hai idea di come stampare le stazze oltre le 5 ton? Riesci a calcolare il numero di queste navi e a calcolare la percentuale di queste rispetto al totale? Hai idea di come calcolare una media? Hai idea di come trovare il massimo e il minimo di un array? Hai compreso i suggerimenti che ti sono stati dati?

Facci vedere un tuo tentativo e dacci maggiori informazioni e forse riusciamo ad essere più utili.

morfiero95
Non riesco a capire l'ordine del flowchart (algoritmo), ho provato a fare un flowchart ma non esce e poi è troppo incasinato.

apatriarca
Ad un certo punto della crescita personale come programmatore è necessario separarsi dall'uso di flowchart per rappresentare la struttura del programma e iniziare a scrivere direttamente il codice. Anche perché non è necessariamente vero che disegnare un flowchart sia più semplice di scrivere il programma. Ma immagino che in questo caso sia una specifica richiesta del tuo professore.

Il metodo più semplice per scrivere programmi complessi consiste nel separare il programma in parti e analizzare separatamente ogni parte. Nel tuo caso il programma deve fare le seguenti cose:
1. Leggere il numero di navi e in seguito le stazze di queste navi.
2. Stampare le stazze delle navi con stazza maggiore di 5 tonnellate.
3. Stampare la percentuale tra il numero di navi con stazza maggiore di 5 tonnellate rispetto al totale.
4. Calcolare la media delle stazze e stamparla.
5. Stampare la stazza della nave più piccola.
6. Stampare la stazza della nave più grande.

Molte di queste operazioni possono essere fatte insieme, ma puoi iniziare a vedere ogni parte separatamente e metterle in sequenza. Una volta fatto questo si può iniziare a vedere come migliorare il codice e la sua struttura.

morfiero95
ora è già tutto chiaro, provo a implementarlo in C, l'unico problema è come si fa a calcolare la percentuale...
Comunque grazie per la pazienza

apatriarca
La percentuale non è altro che il rapporto tra il numero di navi con stazza superiore alle 5 tonnellate diviso per il numero di navi totali e moltiplicato per 100. Dovrai insomma scrivere qualcosa come il seguente:
double percentuale = 100.0 * ( numero_navi_grandi / numero_navi_totale );

vict85
C'è un piccolo errore nel codice di apatriarca: il numero delle navi è intero e quindi il risultato dell'operazione diventava quasi sempre 0. Questa piccola modifica risolve il problema.
double percentuale = (100.0 * numero_navi_grandi) / numero_navi_totale;

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