InfoBook.ro ← Harta anului
Modul 06 · Matrice de caractere
Modul 06 · Conținut 1.4 (parțial) · esențial BAC

Vectorul de cuvinte

Un vector normal — doar că în loc de numere, fiecare poziție păstrează un cuvânt întreg. Fiecare cuvânt are indice, predecesor și succesor. Adică: o matrice de caractere.

🎯 Obiectiv 1Declari corect: char v[10][51] = maxim 10 cuvinte de câte maxim 50 de caractere.
🎯 Obiectiv 2Citești cuvintele cu getline + strcpy și le accesezi individual: v[i].
🎯 Obiectiv 3Sortezi cuvintele alfabetic combinând strcmp (comparație) cu strcpy (mutare).
1

Ce e un vector de cuvinte și cum îl declari

Pentru declarare trebuie să cunoști două valori: numărul maxim de cuvinte și lungimea maximă a unui cuvânt.

1char vectorCuv[10][51];
10 = stochează maxim 10 cuvinte — primul indice, ca la vectorii obișnuiți.
51 = cuvinte de maxim 50 de caractere — plus 1 pentru '\0' (regula de la șiruri!).
Citirea corectă (din lecție): fiecare rând se citește cu cin.getline(cuvant, 11) într-un șir temporar, apoi se plasează în matrice cu strcpy(vectorCuv[i], cuvant) — pentru că șirurile NU se atribuie cu „=".

🧱 Matricea vie — scrie 3–5 cuvinte și privește-le așezate în memorie

cuvinte =
i =
fiecare RÂND e un șir de caractere; fiecare rând are propriul '\0' 👆
2

Citirea și parcurgerea — codul complet din lecție

Exemplul clasic: citim 5 cuvinte de maxim 10 caractere și le afișăm cu pozițiile lor.

1char vectorCuv[5][11];
2char cuvant[11];
3for (int i = 0; i < 5; i++) {
4 cin.getline(cuvant, 11);
5 strcpy(vectorCuv[i], cuvant);
6}
7for (int i = 0; i < 5; i++)
8 cout << "Cuvantul de pe pozitia " << i
9 << " este: " << vectorCuv[i] << "\n";
Observația-cheie: vectorCuv[i] (UN singur indice!) înseamnă „cuvântul întreg de pe rândul i" — un șir pe care îl poți da oricărei funcții cstring. Cu doi indici, vectorCuv[i][j] = caracterul j din cuvântul i.

Prelucrări utile pe vectorul de cuvinte

cel mai lung cuvânt

1int imax = 0;
2for (int i = 1; i < n; i++)
3 if (strlen(v[i]) > strlen(v[imax]))
4 imax = i;
5cout << v[imax];

căutarea unui cuvânt

1bool gasit = false;
2for (int i = 0; i < n; i++)
3 if (strcmp(v[i], caut) == 0)
4 gasit = true;
5// == 0 înseamnă IDENTICE!
Șablonul min/max de la vectori funcționează identic — doar că compari cu strlen() (după lungime) sau strcmp() (alfabetic), nu cu < și >.
3

Sortarea alfabetică — strcmp decide, strcpy mută

Sortarea pe care o știi de la numere, tradusă pentru cuvinte: comparația devine strcmp, interschimbarea devine 3 × strcpy.

1char aux[51];
2for (int i = 0; i < n - 1; i++)
3 for (int j = i + 1; j < n; j++)
4 if (strcmp(v[i], v[j]) > 0) { // v[i] după v[j]?
5 strcpy(aux, v[i]); // aux = v[i]
6 strcpy(v[i], v[j]); // v[i] = v[j]
7 strcpy(v[j], aux); // v[j] = aux
8 }
Încearcă în laboratorul din secțiunea 1: butonul „sortează alfabetic (pas cu pas)" execută exact acest algoritm — la fiecare apăsare vezi o comparație strcmp și, dacă e nevoie, interschimbarea.
De ce nu v[i] = v[j]? Pentru că numele unui șir e o adresă fixă în memorie — nu poți „muta" adresa, poți doar să copiezi conținutul. De-asta orice atribuire de șiruri trece prin strcpy.
4

Generalizarea: matricea numerică (tabloul 2D)

Matricea de cuvinte e un caz particular: rânduri de caractere. Aceeași idee merge cu numere — modelul mixt „listă de liste" din programă (conținut 1.4).

🗺 Parcurge matricea — pe linii, pe coloane, pe diagonale

alege o parcurgere — celulele se aprind în ordinea vizitării 👆
1// parcurgere + suma pe linii
2for (int i = 0; i < nl; i++) {
3 int suma = 0;
4 for (int j = 0; j < nc; j++)
5 suma += M[i][j];
6 cout << "linia " << i << ": " << suma << endl;
7}
1# Python — suma pe linii
2for i in range(nl):
3 suma = sum(M[i])
4 print("linia", i, ":", suma)
Reperele matricei pătratice (n×n): diagonala principală = elementele M[i][i]; diagonala secundară = M[i][n-1-i]. Primul lucru pe care îl cauți în orice problemă cu matrice!
5

Problemele din lecție

Aplicațiile pe care le-ai primit la clasă — acum știi tot ce-ți trebuie pentru ele.

pbinfo

Cuvinte7

Prelucrarea unui vector de cuvinte citit de la tastatură. Caută „Cuvinte7" pe pbinfo.ro.

pbinfo

VocSortDesc

Sortare descrescătoare cu criteriu pe vocale — combină strcmp cu numărarea vocalelor (Modulul 05!).

pbinfo

decodificare

Decodificarea unui mesaj — lucru pe caractere individuale în cuvinte.

examen

BAC 2021, mate-info, S3

Subiect oficial cu șiruri de cuvinte — dovada că modulul acesta e bani în buzunar la examen.

Plus fișele de lucru Siruri 1–7 — exercițiile cu strtok și vectori de cuvinte din ele se rezolvă acum complet.
6

Fișa de sinteză

Vectorul de cuvinte, pe scurt.

char v[10][51] = maxim 10 cuvinte × maxim 50 caractere (+1 pentru '\0' pe fiecare rând).
v[i] (un indice) = cuvântul întreg de pe rândul i; v[i][j] = caracterul j din cuvântul i.
Citire: cin.getline(cuvant, L) în șir temporar → strcpy(v[i], cuvant) în matrice.
Atribuirea șirurilor se face DOAR cu strcpy — „=" nu funcționează pe șiruri C-style.
Comparația alfabetică: strcmp(v[i], v[j]) > 0 ⇔ v[i] vine după v[j] în dicționar.
Sortarea cuvintelor = sortarea de la numere + strcmp la comparație + 3×strcpy la interschimbare.
← anteriorModul 05 · Șiruri de caractere urmează →Modul 06a · Matrice numerică (tablou 2D)