De ce contează?
Nu primești matricea gata făcută — primești o regulă: „pune în fiecare căsuță produsul rândului cu coloana”. Trebuie s-o completezi tu, căsuță cu căsuță. Asta e generarea unei matrice: o construiești dintr-o formulă, nu o citești.
Ce înseamnă generarea
A genera o matrice înseamnă să completezi fiecare element a[i][j] după o regulă care depinde de poziție — de indicii i și j — fără să citești valori de la intrare.
Tiparul e mereu același: două bucle imbricate și o formulă în interior.
Întrebarea cheie la orice generare: „ce funcție de i și j dă valoarea din căsuță?”. Odată ce ai formula, codul e o simplă dublă buclă.
Exemple uzuale
Tabla înmulțirii (a[i][j] = (i+1)·(j+1)), pentru n = m = 4:
| L0 | 1 | 2 | 3 | 4 |
| L1 | 2 | 4 | 6 | 8 |
| L2 | 3 | 6 | 9 | 12 |
| L3 | 4 | 8 | 12 | 16 |
Matricea identitate (1 pe diagonala principală, 0 în rest):
| L0 | 1 | 0 | 0 | 0 |
| L1 | 0 | 1 | 0 | 0 |
| L2 | 0 | 0 | 1 | 0 |
| L3 | 0 | 0 | 0 | 1 |
Implementare C++
#include <iostream>
using namespace std;
int a[100][100];
int main() {
int n = 4, m = 4;
// tabla inmultirii
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
a[i][j] = (i + 1) * (j + 1); // numerotam de la 0, valorile de la 1
// matricea identitate (in alta matrice)
int id[100][100];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
id[i][j] = (i == j) ? 1 : 0; // 1 pe diagonala principala
// afisare tabla inmultirii
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) cout << a[i][j] << " ";
cout << "\n";
}
return 0;
}Altă regulă des întâlnită: „șah”
a[i][j] = (i + j) % 2 dă tipar de tablă de șah (alternanță 0/1), pentru că i + j schimbă paritatea la fiecare pas vecin. Multe generări se reduc la o astfel de expresie pe i și j.
Complexitate
| Operație | Timp | Spațiu |
|---|---|---|
| Generare | O(n·m) | O(n·m) |
Vizualizare
Explorează parcurgerile matricei (comută între linii, coloane, diagonale, spirală):
Greșeli frecvente de concurs:
- Numerotare amestecată. La tabla înmulțirii, dacă numerotezi de la 0 trebuie
(i+1)·(j+1). Dacă uiți+1, prima linie și coloană ies pline de zerouri. - Formulă pe valoare, nu pe poziție. Generarea folosește
ișij, nu valori citite. Dacă încerci să citești matricea înainte, ai înțeles greșit cerința. - Confunzi diagonalele.
i == je principala;i + j == n-1e secundara. Pentru identitate foloseștii == j. - Suprascrii dimensiunile. Generează doar în zona
n × mfolosită; restul matricei globale rămâne 0 și nu trebuie afișat.
Recapitulare
- A genera o matrice = a completa
a[i][j]dintr-o formulă pe poziție (i,j), fără citire. - Tiparul e mereu două bucle + o expresie; întrebarea e „ce funcție de
ișij?”. - Exemple: tabla înmulțirii
(i+1)(j+1), identitateai==j, șah(i+j)%2.