back to top

Matrici C++: cosa sono e a che cosa servono

Spesso, nella realizzazione di un programma, risulta necessario o utile organizzare alcuni dati in forma di "tabella". Ciò consente infatti di raggruppare le informazioni in modo logico e facilmente interpretabile. Ma in che modo possiamo, attraverso le categorie messe a disposizione da un linguaggio di programmazione, rappresentare una tabella? I linguaggi più diffusi mettono a disposizione due famiglie di soluzioni. La prima (e più strutturata) è rappresentata dalle tabelle hash, utili in particolare quando i tipi di dato da memorizzare in ciascuna cella della tabella risultino numerosi, eterogenei e complessi. Nel presente articolo esamineremo invece casi più semplici, per i quali risulterà maggiormente adatta la seconda tipologia di soluzione, ovvero le matrici (o array multidimensionali). Il linguaggio di programmazione di riferimento sarà il C++.

Definizione di matrice

Per avere a disposizione una definizione efficace e operativa di matrice, partiamo dal concetto di array (di cui una matrice può essere considerata una sorta di estensione). Intendiamo con array un insieme ordinato di dati omogenei (cioè dello stesso tipo, ad esempio un insieme di numeri interi). Possiamo immaginare tali dati come ordinati in riga, o in colonna. A questo punto possiamo intuire come una tabella non sia altro che un array a due dimensioni (righe e colonne), ovvero un caso particolare di array multidimensionale.

Ci rendiamo conto quindi di come il concetto di array risulti dotato di ampia generalità: è possibile, anche se non comune nella pratica, costruire array a più di due dimensioni (una sorta di tabella cubica o "ipertabella"). Il grande potenziale di archiviazione e classificazione è purtroppo affievolito, in questi particolari casi, da una non trascurabile complessità nella gestione del dato. Nel seguito quindi, con l’obiettivo di fornire in questo contesto indicazioni di immediata rilevanza pratica, ci concentreremo sulle caratteristiche degli array bidimensionali, fornendo anche alcuni esempi di utilizzo.

Sintassi delle matrici in C++

Anche per quanto riguarda l’aspetto sintattico, esamineremo la dichiarazione di una matrice facendo riferimento a quella di un array. Per dichiarare un array di nome a costituito da 10 interi possiamo usare l’istruzione:

int a [10];

La keyword int indica il tipo di dati contenuti all’interno dell’array (numeri interi), mentre a è il nome della variabile array appena dichiarata. Il numero 10, compreso tra parentesi quadre, indica quanti dati di tipo intero l’array a è in grado di contenere. Una volta eseguita questa istruzione quindi, in memoria viene riservato uno spazio contiguo che consente di archiviare 10 numeri interi. Per assegnare un valore al primo elemento dell’array a possiamo usare l’istruzione:

a[0] = 1;

Per riferirci a un elemento specifico ci serviamo ancora una volta delle parentesi quadre: indicando al loro interno la posizione a cui si desidera accedere. Importante ricordare che la prima posizione non è indicata dall’indice "1", ma dall’indice "0". La dichiarazione di una matrice, intesa, come precedentemente illustrato, come un array bidimensionale, segue logicamente da quella di un array semplice:

int b [10][10];

La variabile b, così dichiarata, indica una matrice 10×10, ovvero una tabella di interi costituita da 10 righe e dieci colonne. Per accedere all’elemento memorizzato nella prima colonna della prima riga, memorizzando all’interno di tale cella il valore 2, potremo usare invece, sempre in analogia con quanto visto per gli array unidimensionali, l’istruzione:

b[0][0] = 2;

Cerchiamo a questo punto di servirci degli elementi concettuali e sintattici sin qui esaminati per costruire un esempio semplice ma completo di utilizzo delle matrici.

Utilizzare le matrici in C++

Ipotizzeremo, nell’esempio proposto, di confrontarci con una matrice di numeri reali (ci serviremo quindi di variabili di tipo double). Tali numeri saranno organizzati in una matrice. Come spesso accade, tale matrice sarà rappresentativa di un particolare sistema fisico, ovvero conterrà al proprio interno particolari coefficienti associati alle equazioni che caratterizzano il comportamento del sistema stesso, consentendo di prevederlo e, in qualche misura, di regolarlo.

Per semplicità, ipotizzeremo che tali coefficienti siano forniti in input dall’utente e che la matrice da essi costituita sia formata da 3 righe e 3 colonne. Compito del programma sarà calcolare la traccia della matrice, ovvero il prodotto dei termini sulla diagonale principale della tabella (da in alto, a sinistra fino in basso, a destra).

#include <iostream>

double prodotto(double m[3][3])
{
  double prodotto = 1.0;
  for (int i = 0; i < 3; i++) {
    prodotto *= m[i][i];
  }
  return prodotto;
}

int main ()
{
  double a[3][3];
  cout<< "Inserisci gli elementi della matrice, prima quelli della prima riga (da sinistra a destra), poi quelli della seconda, poi quelli della terza";
  for(int i=0;i<3;i++)
  {
    for(int j=0;j<3;j++)
    {
      cin>>a[i][j];
    }
  }  
  cout << "Il prodotto degli elementi sulla diagonale della matrice" << endl;
  for (int k = 0; k < 3; k++) {
    for (int l = 0; l < 3; l++)
      cout << " " << a[k][l];
    cout << endl;
  }
  cout << endl;
  cout << "e' " << prodotto(a) << endl;
  return 0;
}

Come possiamo vedere, dopo aver incluso la libreria di sistema iostream (#include <iostream>), impostiamo il programma principale (main) in modo tale che chieda all’utente di inserire i 9 coefficienti da inserire all’interno della matrice a, dichiarata con double a[3][3]. Una volta letti i coefficienti tramite il comando cin, stampiamo la matrice (sempre all’interno del programma principale) e la traccia, ovvero il prodotto dei termini sulla diagonale principale, servendoci invece della funzione prodotto.

Tale funzione non fa che moltiplicare tra loro tutti gli elementi di tipo a[i][i], con i che va da 0 a 2, ovvero a[0][0], a[1][1] e a[2][2]. Si tratta proprio dei termini presenti sulla diagonale principale, contraddistinti dall’avere uguale indice di riga e di colonna. Sarà sufficiente eseguire il programma per verificarne il corretto funzionamento.

Pubblicitร 

Leggi anche...

Radice quadrata in C: vediamo come calcolarla in diversi modi

La radice quadrata è un'operazione matematica piuttosto comune (in...

Sperimentare la sequenza di Collatz in C++

Vediamo come verificare la congettura di Collatz con C++....

Calcolare la radice quadrata con Python

In Python è possibile calcolare la radice quadrata usando...

12 film che ogni programmatore dovrebbe guardare (per trovare ispirazione e creatività)

Molti ragazzi hanno deciso di intraprendere una carriera da...

Cartonizzare una foto con Python e la libreria OpenCV

La cartoonization è una procedura grafica che consente di...

Creare flowchart (diagrammi di flusso) online: 5 strumenti gratuiti

Hai bisogno di realizzare una flow chart ma non...
Pubblicitร