In matematica, in particolare in algebra lineare, una matrice è una tabella ordinata di elementi.

Esempio

la matrice 3x3 cioè di tre righe e tre colonne è:

4      5    7

1      2    9

3     4    5

In informatica le matrice sono ancora degli elementi ordinati omogeneo cioè tutti gli elementi devono essere tutti dello stesso tipo. Posso dichiarare matrici con elementi tutti di tipo int, oppure tutti di tipo float, oppure tutti di tipo char in questo modo:

int matrice[2][3] ;   // matrice che ha due righe e tre colonne con elementi di tipo intero

char caratteri[4][5];  //matrice con 4 righe e 5 colonne con elementi di tipo char

float valori[4][5];   // matrice con  4 righe 3 5 colonne con elementi di tipo float.

Posso asssegnare ad ogni celletta un valore predefinito dall'interno in questo modo:

matrice[2][1]=1;    //in questo modo ho rirmpinto la cella di posizione [2][1] cioè seconda riga e prima colonna con il valore intero 1;

oppure

carattere[2][3]='A';   //in questo modo ho riempito la cella nella seconda riga e nella terza colonna con la lettera 'A'

 

Inserimento dei valori dall'esterno o dall'interno in una matrice

ESEMPIO:

#include
#include
int main()
{
     int matrice[3][5];
     int matrice2[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
           //dichiarazione 10 elementi di una matrice dall'interno
    
    int i,j;
    for(i=0;i<3;i++)
    {   for(j=0;j<5;j++){
      printf("\tInserire elemento [%d][%d]= ",i,j);
      scanf("%d",&matrice[i][j]);
    }

    }
   
    printf("\n\tMatrice 2x5 con valori inseriti dall'esterno\n");
    for(i=0;i<3;i++)
    {   for(j=0;j<5;j++){
      printf("%4d",matrice[i][j]);
    }
    printf("\n");
    }
    printf("\n\n\tMatrice 2x5 con valori inseriti dall'interno\n");
    for(i=0;i<3;i++)
    {   for(j=0;j<5;j++){
      printf("%4d",matrice2[i][j]);
    }
    printf("\n");
    }
    getch();
    }

Proviamo adesso con un esempio ad utilizzare un array monodimensionale e un array bidimensionale nello stesso programma.

Esercizio:

Programma schedina con Array monodimensionale e bidimensionali

Supponiamo di voler generare una schedina con l'inserimento dei gol fatti nelle partite delle due squadre  e di voler stampare il simbolo corrispondente

'1', '2','X'.

Per far ciò abbiamo bisogno di riempire attraverso un ciclo for  le tredici partite e per ogni partita i gol della prima squadra e i gol della seconda squadra.

il ciclo for dovrà essere così strutturato:

...............

for(i=1;i<=13;i++)   //le partite sono 13

{

for(j=1;j<=2;j++)    //le opzioni sono 2 perché devo controllare l’esito delle due

                               //squadre che stanno giocando

{

Istruzioni;

}

}

........

 

Per stampare i risultati bisogna inserire nel programma un confronto tra i gol fatti dalle due squadre che giocano la partita.

Abbiamo bisogno quindi di inserire l'istruzione if...else e di far stampare il risultato attraverso un array monodimensionale, dichiarato di tipo char;

 

.........................................................

printf("\nPROGRAMMA SCHEDINA\n");
for(i=1;i<=13;i++)
{

printf("\n %d partita\n",i);
      for(j=1;j<=2;j++)
      {           printf("Inserisci gol %d squadra\n",j);
            scanf("%d",&schedina[i][j]);
       }
}

 for(i=1;i<=13;i++)

{
     for(j=1;j<=2;j++)
     {
          if(schedina[i][1]==schedina[i][2])
                       risultati[i]= 'X';                                //stampa X
               else
                     
                       if (schedina[i][1]< schedina[i][2])                       

                             risultati[i]='2';                           //stampa 2
                     
                       else
                             risultati[i]='1';                          //stampa 1                     
         }                   
}

..........................................

Il programma completo darà, ad esempio, il seguente output sullo schermo.

Se vogliamo, possiamo anche  inserire una scelta con l’istruzione switch…case (cioè , ad esempio, per inserire i gol digita 1, per stampare la schedina digita 2) e all'inizio del programma possiamo inserire il ciclo for per sempre. Per uscire dal ciclo for per sempre ricordarsi di inserire la libreria stdlib.h e il comando exit 0; per uscire dal programma.

 

MATRICI CON CARATTERI

 

Per realizzare e visualizzare una matrice 4X4 di carattere bisogna dichiarare la matrice di tipo char; ad esempio

char matrice[5][5];

inserire l'acquisizione in un ciclo for concatenato 

.........

for(i=1;i<=4;i++)

{

 for(j=1;j<=4;j++)

{ printf("\tInserisci carattere %d %d\t",i,j);

            scanf("%s",&matrice[i][j]);

            }

}

------------------

dopo inserire un'altro ciclo for concatenato delle variabili i e j per la stampa sia della griglia che dei caratteri.

//stampa della griglia e della matrice di caratteri

printf("\n\n\n\n    Matrice incorniciata\n");
printf("\n");

printf("    +---------------+\n");
printf("    |  %1c|  %1c|  %1c|  %1c|\n",matrice[1][1],matrice[1][2],
                                     matrice[1][3],matrice[1][4]);

printf("    +---------------+\n");
printf("    |  %1c|  %1c|  %1c|  %1c|\n",matrice[2][1],matrice[2][2],
                                     matrice[2][3],matrice[2][4]);

printf("    +---------------+\n");
printf("    |  %1c|  %1c|  %1c|  %1c|\n",matrice[3][1],matrice[3][2],
                                     matrice[3][3],matrice[3][4]);

printf("    +---------------+\n");
printf("    |  %1c|  %1c|  %1c|  %1c|\n",matrice[4][1],matrice[4][2],
                                     matrice[4][3],matrice[4][4]);
printf("    +---------------+\n");
printf("\n");
getch();

} //chiude il main

 

L’output di questo programma sarà il seguente

Esercizio:

Realizza dei programmi con le matrici che abbiano il seguente output.

Matrice a spirale: versione 1

Realizziamo una matrice bidimensionale, inserendo i numeri a spirale, e visualiziamola sullo schermo. Per dare un tocco più elegante ho inserito anche il colore dello sfondo giallo e il testo rosso. Per inserire il colore ho utilizzato l'istruzione 

system("color EC");

dove la

E=giallo

C=rosso

Matrice a spirale: versione 2

Realizzare la matrice a spirale con l'istruzione seguente:

int matrice[righe][colonne]={1,2,3,4,5,6,20,21,22,23,24,7,19,32,34,25,8,18,31,36,26,9,17,30,29,28,27,10,16,15,14,13,12,11};

e poi con due cicli for concatenati stamparla con il comando printf.

Matrice incorniciata con caratteri

Un altro esercizio con le matrici è quello di scrivere dei caratteri all'interno della matrice ed incorniciarla come nella figura seguente.