Massimo Vettore

Massimo Vettore

Il problema del calcolo del valore massimo ( massimo vettore) contenuto in una struttura vettoriale è definito nel seguente modo: dato in input un vettore, calcolare il valore massimo presente nelle caselle e stamparlo all’utente. Per poter risolvere questo problema abbiamo la necessità di “visitare” le caselle del vettore accedendo al loro contenuto e aggiornare il valore massimo individuato.

Consideriamo il seguente caso concreto:

int main()
{
   int vet[4] = {1,4,5,6};
}

Ci aspettiamo che l’algoritmo restituisca il valore 6 cioè il il valore più grande contenuto nella struttura dati.

Per calcolare il massimo fra i valori, usiamo una variabile (che chiameremo max)nella quale ci proponiamo di salvare il numero più grande trovato fino ad un momento preciso. In altre parole supponiamo che il massimo sia il valore contenuto nella prima casella e iniziamo a scorrere tutte le altre caselle controllando sempre se il valore della casella considerata è maggiore del max. Se lo è modifichiamo max e affermiamo che è uguale al valore della cella altrimenti procediamo nella scansione del vettore. Con questa stretegia abbiamo la garanzia che dopo aver visitato tutte le celle il valore contenuto in max è il maggiore.

Vediamo quindi come procedere:

//suppongo che il massimo sia il contenuto della prima caselle //in questo caso 1
int max = vet[0];

for(int i=0;i<4;i++)
{
   //se il valore contenuto nella casella attuale è maggiore    //rispetto al massimo che sto considerando aggiorna il massimo
   
   if(vet[i]>max)
     max= vet[i];
}

cout<<"Il valore massimo è "<<max;

Il seguente ciclo risolve il problema della visita delle celle e del calcolo del massimo vettore. Per comprenderne il funzionamento analizziamo lo stack trace che la macchina esegue quando esegue il programma stesso.

max = vet[0] = 1

i=0   , 0<4? SI

vet[0] > max NO

i=1   , 1<4 SI

vet[1] (4) > max (1) SI

  max = 4;

i=2   , 2<4 SI

vet[2] (5) > max (4) SI

  max = 5;

i=3   , 3<4 SI

vet[3] (6) > max (5) SI

  max = 6;

i=4 , 4<4 NO

Esce dal ciclo e stampa il valore del massimo vettore cioè 6.

Per avere maggiormente chiaro cosa implementa questo algoritmo vediamo le seguenti slides:

Torna a vettori

Testa su ideone.com