Cum funcționează
Aceasta e problema de pornire pentru toată categoria „matrici citite din fișier". Tiparul de citire
se repetă identic la toate:
ifstream f("mat.in");
f >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
f >> a[i][j];
f.close();
ifstream e „ruda" lui cin pentru fișiere — se folosește exact la fel, cu >>. Singura diferență
e că trebuie deschis cu numele fişierului și, la final, închis. Fișierul se citește în aceeași
ordine în care e scris: mai întâi n, apoi valorile, linie cu linie.
Cele două bucle imbricate sunt scheletul oricărei parcurgeri de matrice:
i merge pe linii (de sus în jos)
j merge pe coloane (de la stânga la dreapta)
a[i][j] e elementul de pe linia i, coloana j — întotdeauna în ordinea asta
Pentru problema propriu-zisă: enunțul cere un rezultat per linie, deci calculul stă în bucla
exterioară, iar bucla interioară caută maximul acelei linii.
Inițializarea contează, la fel ca la vectori: maxim = a[i][0], adică primul element al liniei
curente — nu 0, care ar da rezultate greșite pentru linii cu numere negative. Bucla interioară
pornește apoi de la j = 1, pentru că elementul 0 e deja luat în calcul.
maxim se redeclară la fiecare linie, deci pornește curat de fiecare dată.
Greșeli frecvente
int maxim = 0; — pentru o linie cu toate elementele negative, rezultatul rămâne 0.
- Declararea lui
maxim în afara buclei exterioare — maximul se „târăște" de pe o linie pe alta
și se afișează același număr peste tot.
- Inversarea indicilor (
a[j][i]) — se parcurg coloanele în loc de linii.
- Uitarea lui
f.close() — nu strică rezultatul aici, dar e cerut de barem la lucrul cu fișiere.
- Citirea cu
cin în loc de f — programul așteaptă date de la tastatură și pare că s-a blocat.