AD

Trovare il massimo e il minimo di un'array in C

In questo esercizio cerchiamo di trovare il valore massimo e minimo di un dato array contenente 10 valori.

Per poter determinare il valore massimo e minimo dobbiamo avere due variabili max e min che contengono rispettivamente il valore più grande e più piccolo attualmente trovati. Per fare ciò, dobbiamo scorrere tutto l’array e confrontare i singoli valori contenuti con i valori delle variabili max e min, e se necessario aggiornarli.

La domanda che si pone è: che valore iniziale assegnamo alle variabili max e min?

Ad esempio, se definiamo inizialmente max=0 e il vettore contiene solamente valori negativi (es. -2, -5, -3, -7), allora il valore del massimo sarebbe sbagliato, perché per noi sarebbe ancora il numero 0, ma in realtà il massimo del vettore è -2.

Il miglior modo per gestire questa situazione è quello di assegnare un valore già contenuto nel vettore, in questo modo si evitano possibili errori.

Nel nostro caso assegniamo alle variabili max e min il valore contenuto nella prima posizione del vettore.

#include <stdio.h> #define N 10 int main(){ int lista[N] = {2, -3, 4, -1, 0, 5, 9, 1, 7, 4}; int max, min; max = lista[0]; min = lista[0]; for(int i = 0; i < N;i++){ if(lista[i] > max){ max = lista[i]; } if(lista[i] < min){ min = lista[i]; } } printf("Il valore massimo dell'array è: %d\n", max); printf("Il valore minimo dell'array è: %d\n", min); return 0; } /* Output: Il valore massimo dell'array è: 9 Il valore minimo dell'array è: -3 */

Oltre che a cercare il valore del massimo e del minimo possiamo cercare anche la loro posizione all’interno dell’array. In questo caso teniamo l’indice della posizione del minimo e del massimo, e confrontiamo i valori che scorrono nell’array con il valore del vettore nella posizione dell’indice iMax e iMin, e se necessario aggiorniamo gli indici. 

Dato che stiamo considerando degli indici, iMax e iMin possono avere inizialmente un valore di default, basta che sia compreso tra 0 e la dimensione dell’array-1, nel nostro caso tra 0 e N-1.

#include <stdio.h> #define N 10 int main(){ int lista[N] = {2, -3, 4, -1, 0, 5, 9, 1, 7, 4}; int iMax, iMin; iMax = 0; iMin = 0; for(int i = 0; i < N;i++){ if(lista[i] > lista[iMax]){ iMax=i; } if(lista[i] < lista[iMin]){ iMin=i; } } printf("Il valore massimo dell'array è: %d e si trova nella posizione: %d\n", lista[iMax], iMax); printf("Il valore minimo dell'array è: %d e si trova nella posizione: %d\n", lista[iMin], iMin); return 0; } /* Output: Il valore massimo dell'array è: 9 e si trova nella posizione: 6 Il valore minimo dell'array è: -3 e si trova nella posizione: 1 */