Data una matrice M di interi di dimensione n x m, implementare una funzione in linguaggio C++ che permetta di trovare il massimo della matrice.

matrice di interi

Se ad esempio la matrice in input fosse quella in figura, la funzione dovrebbe restituire 13 perchè è il valore più grande (massimo) contenuto in essa.

Analisi del problema

Per prima cosa pensiamo alla funzione come ad una scatola nera che prende in input dei valori e ritorna un intero che è il massimo della matrice.

Parametri in input:

  • matrice: indica la struttura dati
  • r: numero di righe
  • c: numero di colonne

Parametri in output:

  • un valore intero che rappresenta il massimo della matrice

Funzione

Definiamo ora la funzione partendo dalla sua intestazione che possiamo costruire leggendo bene quali sono i parametri in input e il tipo di dato che viene dato in output:

int massimo (int** matrice, int n, int m)

La funzione massimo prende questi valori e restituisce un intero. Vediamo ora come implementare l’algoritmo di calcolo del massimo.

La strategia che utilizziamo è la seguente: fissiamo all’inizio come massimo (variabile max) il valore della prima casella. In seguito visitiamo ogni casella della matrice e se questa contiene un valore maggiore del massimo aggiorniamo il massimo stesso.

Alla fine della visita delle caselle possiamo restituire la variabile max che contiene certamente il valore più grande presente nella matrice.

Per visitare ogni cella della matrice impostiamo i due for con gli indici per le righe e per le colonne:

    for(int i=0; i<n; i++)
    {
      for(int j=0; j<m; j++)
      {
           //CODICE PER EFFETTUARE IL CONTROLLO
      }
    }

Ricordiamo per indicare la generica casella nel ciclo for possiamo scrivere matrice[i][j]. Il controllo da fare è: “se la casella attuale contiene un valore maggiore del massimo allora aggiorna il massimo col valore della casella”: (Massimo di una matrice)

if(matrice[i][j]>max)
{
   max = matrice[i][j];
}

La funzione completa è la seguente:

int massimo(int** matrice, int n, int m)
{
    //Il massimo viene fissato al primo elemento
    int max = matrice[0][0];

    for(int i=0; i<n; i++)
    {
      for(int j=0; j<m; j++)
      {
          //Se il valore della casella attuale supera quello di max
          if(matrice[i][j]>max)
          { 
                //metti in max il valore della casella attuale
                max = matrice[i][j];
          }
      }
    }
   return max;
}

Implementa su ideone.com

Torna a matrici

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.