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 vettore 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
Indice pagine linguaggio C: