Noțiunea de matrice — un tabel cu linii și coloane

Mediu~15 min13 pași

De ce contează?

Te uiți la tabla de șah, la o agendă cu ore pe zile, sau la harta unui oraș cu străzi și bulevarde. Toate au același tipar: ca să arăți un loc, spui rândul și coloana. „Linia 3, coloana 5”. O matrice e exact acest tabel de numere.

Ce este o matrice

O matrice e un tablou bidimensional: un tabel de valori organizate pe linii și coloane. Spre deosebire de vector (care are un singur index), un element de matrice are nevoie de doi indici:

a[i][j] = elementul de pe linia i, coloana j.

O matrice cu n linii și m coloane are n × m elemente.

Observația-cheie

Reține ordinea: primul index e linia, al doilea e coloana. a[2][5] înseamnă linia 2, coloana 5 — nu invers. Confuzia aici e sursa multor erori.

Cum arată

Matricea a cu 3 linii și 4 coloane (n = 3, m = 4):

L0
7
2
9
4
0
1
2
3
Linia 0
L1
1
5
3
8
0
1
2
3
Linia 1
L2
6
0
2
7
0
1
2
3
Linia 2 — coloanele sunt 0..3

Aici a[1][2] = 3 (linia 1, coloana 2), iar a[2][0] = 6.

Citire și afișare

Citești o matrice cu două bucle imbricate: una pentru linii, una pentru coloane.

#include <iostream>
using namespace std;

int a[100][100]; // matrice globala, initializata cu 0

int main() {
    int n, m;
    cin >> n >> m;
    // citire: pentru fiecare linie, fiecare coloana
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            cin >> a[i][j];

    // afisare ca tabel
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            cout << a[i][j] << " ";
        cout << "\n"; // trecem la linia urmatoare
    }
    return 0;
}

Bucla exterioară fixează linia, cea interioară parcurge coloanele acelei linii. cout << "\n" după bucla interioară mută afișarea pe rândul următor.

Declararea matricei

int a[100][100]; // pana la 100 de linii si 100 de coloane

Dimensiunile din declarație sunt maximele posibile, nu cele efective. Folosești doar primele n × m celule. Declarată global, matricea e inițializată automat cu 0.

Complexitate

OperațieTimpSpațiu
Citire / afișare / parcurgereO(n·m)O(n·m)

Orice parcurgere completă atinge toate cele n × m elemente — de aceea costul de bază al lucrului cu matrice e O(n·m).

Vizualizare

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

Greșeli frecvente

Greșeli frecvente de concurs:

  • Inversezi linia cu coloana. a[i][j] = linia i, coloana j. Dacă scrii a[j][i] din greșeală, citești cu totul alt element (sau ieși din matrice dacă n ≠ m).
  • Bucle cu limite greșite. Liniile merg 0..n-1, coloanele 0..m-1. Folosirea lui n pentru coloane când n ≠ m accesează în afara matricei.
  • Matrice prea mare pe stivă. int a[1000][1000] declarată local în main poate depăși stiva. Declar-o global ca să stea în memoria statică.
  • Uiți "\n" la afișare. Fără trecerea la rând nou după fiecare linie, toată matricea apare pe un singur rând.

Recapitulare

  • O matrice e un tabel cu linii și coloane; un element are doi indici: a[i][j] = linia i, coloana j.
  • O matrice n × m are n·m elemente; o parcurgi cu două bucle imbricate (linii × coloane).
  • Declar-o global (memorie + inițializare cu 0) și nu inversa niciodată linia cu coloana.

Întrebarea 1 / 3

Cum identifici un element într-o matrice?