/*matrice1.cpp*/

// Allocazione dinamica di una matrice
// Primo metodo

#include <iostream>
using namespace std;

int main (void)
{
// Dichiarazione della matrice come puntatore a un vettore
double *M;
int R, C;
int i, j;
double v;

// Inserimento del numero di righe e colonne della matrice
cout << "Righe e colonne: ";
cin >> R >> C;

// Creazione del vettore in grado di contenere R*C elementi
M = new double [R*C];

// Ciclo infinito: uscita con break
while ( 1 ) {
// Lettura degli indici dell'elemento da inserire o leggere
cout << "Riga e colonna della matrice: ";
cin >> i >> j;

// L'utente viene invitato a inserire un valore alla riga i, colonna j
// oppure a scrivere 0 se desidera leggere quanto è contenuto in quella posizione
cout << "Valore (0 se si desidera leggerlo, negativo per uscire)";
cin >> v;
if ( v < 0 )
break;
if ( v != 0 )
// inserimento del valore alla posizione corretta del vettore.
// Notare la traduzione esplicita dai due indici matriciali all'unico indice per il vettore
M[i*C+j] = v;
else
// Scrittura del contenuto del vettore alla posizione richiesta
cout << M[i*C+j] << endl;
}

// Liberazione dello spazio allocato per la matrice
delete[] M;

return 0;
}