Generarea matricelor — completezi după o regulă

Mediu~16 min13 pași

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.

Observația-cheie

Î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
a[i][j] = (i+1)·(j+1)

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
a[i][j] = 1 dacă i == j, altfel 0

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țieTimpSpațiu
GenerareO(n·m)O(n·m)

Vizualizare

Explorează parcurgerile matricei (comută între linii, coloane, diagonale, spirală):

Greșeli frecvente

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 și j, nu valori citite. Dacă încerci să citești matricea înainte, ai înțeles greșit cerința.
  • Confunzi diagonalele. i == j e principala; i + j == n-1 e secundara. Pentru identitate folosești i == j.
  • Suprascrii dimensiunile. Generează doar în zona n × m folosită; 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 și j?”.
  • Exemple: tabla înmulțirii (i+1)(j+1), identitatea i==j, șah (i+j)%2.

Întrebarea 1 / 3

Pentru tabla înmulțirii, ce valoare pui în a[i][j]?