next up previous contents index
Next: Operazioni base sulle matrici Up: Array, enumerati, stringhe Previous: Funzioni di ricerca   Indice   Indice analitico

Matrici

Un array è un contenitore lineare di oggetti tutti dello stesso tipo; abbiamo visto array di interi, di reali, di caratteri e di stringhe; è facile immaginare come si possano avere anche array di puntatori o di riferimenti. Cosa succede se invece creiamo un array di array: abbiamo una sequenza lineare di sequenze lineari, ovvero una tabella (o matrice):

int m[N][M];
Tra i due indici, quello che varia più rapidamente è quello esterno 6.4, per cui la matrice seguente viene memorizzata per righe, da sinistra a destra:
[0][0] [0][1] ... [0][M]
[1][0]     [1][M]
       
[N][0] [N][1] ... [N][M]

Le matrici trovano applicazioni in molti programmi, soprattutto in quelli di grafica bidimensionale e tridimensionale, ma anche per tutte le strutture dati che sono intrinsecamente definite in tabella; alcuni esempi possono essere scacchiere o diagrammi tabulari. Vediamo un esempio che permette di stampare una matrice 3 $\times$ 4:


// ex6_7_1
#include <iostream.h>
void main() {
  const int R = 3; // numero di righe
  const int C = 4; // numero di colonne
  int m[R][C] = { 0, 1, 2,  3,
                  4, 5, 6,  7,
                  8, 9, 10, 11};
  for (int i = 0; i < R; i++) {
    for (int j = 0; j < C; j++)
      cout << m[i][j] << "\t";
    cout << "\n";
  }
}

output:
 0 1 2 3
 4 5 6 7
 8 9 10 11

Come avevamo già accennato, per scorrere gli elementi di una matrice è sufficiente utilizzare due indici, per righe e colonne. Il seguente esempio calcola la somma degli elementi di una matrice 3 $\times$ 3 immessa dall'utente:


// ex6_7_2
#include <iostream.h>

void ingresso (int m[3][3]) {
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++) {
      cout << "(" << i << " , " << j << ")? ";
      cin >> m[i][j];
    }
}

void stampa (int m[3][3]) {
  for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++)
      cout << m[i][j] << "\t";
    cout << "\n";
  }
}

int somma (int m[3][3]) {
  int somma = 0;
  for (int i = 0; i < 3 ; i++)
    for (int j = 0; j < 3; j++)
      somma += m[i][j];
  return somma;
}

void main() {
  int m[3][3];
  ingresso (m);
  stampa (m);
  cout << "somma: " <<  somma (m);
}

esempio di output:
(0 , 0)? 0
(0 , 1)? 2
(0 , 2)? 5
(1 , 0)? 3
(1 , 1)? 0
(1 , 2)? -5
(2 , 0)? -1
(2 , 1)? 2
(2 , 2)? 7
 0 2 5    
 3 0 -5    
 -1 2 7    

ex-2
si scriva un programma che chieda all'utente di immettere una matrice di numeri reali, e la stampi;
ex-3
si scriva un programma che costruisca una matrice 5 $\times$ 10, immetta in essa numeri pseudocasuali interi compresi tra 1 e 90, e la stampi;
ex-4
si scriva un programma che, dopo avere ricevuto in ingresso una matrice reale 3 $\times$ 3, calcoli il seno di ogni elemento e la stampi



Subsections
next up previous contents index
Next: Operazioni base sulle matrici Up: Array, enumerati, stringhe Previous: Funzioni di ricerca   Indice   Indice analitico
Claudio Cicconetti
2000-09-06