Concetti Chiave
- La funzione matriceTriang crea e restituisce una matrice triangolare di interi allocata dinamicamente.
- Gli elementi della matrice sono riempiti con valori sequenziali a partire da 1 fino a completare la matrice.
- La matrice è strutturata in righe decrescenti, con la prima riga contenente il numero massimo di elementi.
- Ogni riga della matrice è allocata separatamente per ottimizzare l'uso della memoria.
- La funzione utilizza malloc per l'allocazione della memoria, garantendo che non venga utilizzata più memoria del necessario.
Scrivi una funzione C/C++ che crea e restituisce una matrice triangolare di interi i cui elementi hanno valori 1, 2, 3, ... . Naturalmente, la matrice deve essere allocata dinamicamente e non bisogna usare più memoria di quella strettamente necessaria.
Ad esempio se l’ordine (della matrice) è 5 la funzione deve creare la matrice:
1 2 3 4 5
6 7 8 9
10 11 12
13 14
15
Scrivi l’istruzione di chiamata e definisci tutte le variabili necessarie.
Definizione (codifica) della funzione:
Allocazione dinamica della matrice
int **matriceTriang(int ordine)
{
int **m = (int **) malloc(ordine*sizeof(int *)); //Alloca il vettore delle righe
int r, c, numCol = ordine, k = 1;
for (r = 0 ; r
{
m[r] = (int *) malloc(numCol*sizeof(int)); //Alloca la riga r-esima
for (c = 0 ; c
{
m[r][c] = k;
k++;
}
numCol--;
}
return m;
}
int ** matrix;
int ordine;
matrix = matriceTriang(ordine);
Domande da interrogazione
- Come viene allocata dinamicamente la matrice triangolare nella funzione matriceTriang?
- Qual è il ruolo della variabile 'k' nella funzione matriceTriang?
- Come viene gestito il numero di colonne per ciascuna riga nella matrice triangolare?
La funzione matriceTriang alloca dinamicamente la matrice triangolare utilizzando malloc per creare un array di puntatori per le righe e poi alloca memoria per ciascuna riga con un numero decrescente di colonne, partendo dall'ordine specificato.
La variabile 'k' viene utilizzata per assegnare valori incrementali agli elementi della matrice, iniziando da 1 e incrementando di 1 per ogni elemento successivo, garantendo che i numeri siano sequenziali.
Il numero di colonne per ciascuna riga viene gestito dalla variabile 'numCol', che inizia con il valore dell'ordine e viene decrementata di 1 dopo ogni riga, creando così la forma triangolare della matrice.