Pe scurt
Minimul este cea mai mică valoare dintr-un șir, iar maximul cea mai mare. Dacă temperaturile din trei zile sunt 12, 8 și 15 grade, minimul este 8, iar maximul 15. Un algoritm le poate găsi parcurgând valorile pe rând, fără să le ordoneze.
Pornește cu prima valoare ca minim și maxim provizorii. Pentru șirul ambele sunt inițial 12. Apoi compari fiecare valoare nouă cu ele:
- Citești 12: minimul este 12 și maximul este 12.
- Citești 8: valoarea 8 este mai mică decât 12, deci minimul devine 8; maximul rămâne 12.
- Citești 15: valoarea 15 este mai mare decât 12, deci maximul devine 15; minimul rămâne 8.
La sfârșit ai verificat toate valorile, deci poți da răspunsul: minim 8, maxim 15. Scrie această urmărire într-un tabel dacă te încurci.
De ce nu pornești mereu cu minimul 0? Dacă toate temperaturile ar fi 5, 7 și 9, ai răspunde greșit „0”, deși 0 nu apare în șir. Prima valoare este un punct de pornire sigur când știi că șirul nu este gol. Dacă nu există nicio valoare, problema trebuie să spună ce răspuns se dorește; „minimul șirului gol” nu este o valoare obișnuită pe care o poți ghici.
Pentru fiecare valoare nouă, pui două întrebări: „Este mai mică decât minimul de până acum?” și „Este mai mare decât maximul de până acum?” O valoare repetată nu schimbă nimic. Metoda merge și pentru numere negative. De exemplu, în minimul este , iar maximul ; nu confunda „mai mic” cu „mai aproape de zero”.
Uneori nu te interesează valoarea, ci ziua în care a apărut. Ținând minte, pe lângă minim, numărul zilei, afli că în șirul cea mai rece zi este a doua, iar cea mai caldă a treia. Dacă o valoare extremă apare de mai multe ori, ai de ales dacă vrei prima sau ultima apariție; enunțul spune care.
În detaliu
Invarianta parcurgerii este: după primele elemente, mn și mx sunt minimul și maximul acelui prefix. Inițializarea din primul element o face adevărată pentru ; comparațiile o păstrează la fiecare pas. Algoritmul face comparații pentru minim și pentru maxim, deci timpul este proporțional cu , iar memoria auxiliară este constantă; șirul nu trebuie memorat, ci poate fi prelucrat pe măsură ce este citit.
Exemplul 1 — minimul și maximul unui șir citit. Se citește , apoi cele valori. Pentru intrarea 4 12 8 15 9 stările după fiecare valoare sunt , , și .
#include <iostream>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
int mn = x, mx = x;
for (int i = 1; i < n; ++i) {
cin >> x;
if (x < mn) mn = x;
if (x > mx) mx = x;
}
cout << mn << ' ' << mx;
return 0;
}
Programul afișează 8 15. Prima valoare este citită înainte de ciclu, de aceea ciclul pornește de la și face repetări. Pentru ciclul nu se execută și programul afișează aceeași valoare de două ori. Pentru valori negative nu apare nicio schimbare de metodă: cu intrarea 3 -4 -9 -2 rezultatul este -9 -2.
Exemplul 2 — poziția primului minim și numărul apariților. Pentru șirul se ține, pe lângă minim, poziția primei apariții (numerotare de la 1) și un contor. Când o valoare este mai mică decât minimul, se actualizează minimul, poziția și contorul devine 1. Când este egală cu minimul, contorul crește, dar poziția rămâne.
- : minim 7, poziție 1, contor 1.
- : minim 3, poziție 2, contor 1.
- : nu schimbă nimic.
- : contorul devine 2, poziția rămâne 2.
- : nu schimbă nimic.
v = [7, 3, 9, 3, 5]
mn = v[0]
poz = 1
cnt = 1
for i in range(1, len(v)):
if v[i] < mn:
mn = v[i]
poz = i + 1
cnt = 1
elif v[i] == mn:
cnt += 1
print(mn, poz, cnt)
Programul afișează 3 2 2: minimul 3 apare de două ori, prima dată pe poziția 2. Indicele din Python pornește de la 0, de aceea poziția de la 1 este i + 1.
Exemplul 3 — extremul valorilor care respectă o condiție. Pentru cel mai mic număr par dintr-un șir nu poți inițializa minimul cu primul element, fiindcă acesta poate fi impar. Folosești un indicator exista, la început fals: primul număr par găsit îl fixează ca minim, iar următoarele îl pot îmbunătăți. Pentru șirul rezultatul este 4. Dacă șirul este , indicatorul rămâne fals și programul afișează un mesaj, de exemplu „nu există”.
Exemplul 4 — amplitudinea unui șir. Amplitudinea este diferența dintre maxim și minim; de exemplu, ea arată cu câte grade a variat temperatura într-o zi. Se citesc și cele valori, iar programul determină ambele extreme într-o singură parcurgere și le scade abia la sfârșit:
#include <iostream>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
int mn = x, mx = x;
for (int i = 1; i < n; ++i) {
cin >> x;
if (x < mn) mn = x;
if (x > mx) mx = x;
}
cout << mx - mn;
}
Pentru intrarea 5 14 9 17 9 12 stările sunt , , , și . Se afișează . Caz-limită: pentru șirul minimul și maximul sunt egale, deci amplitudinea este 0, iar pentru rezultatul este tot 0. Diferența nu poate fi negativă, deoarece mx nu coboară sub mn.
Pentru admitere
Nu presupune că inițializarea cu zero este sigură. La șirul , dacă mx pornește de la 0, programul raportează 0, valoare care nu apare în șir; inițializarea din primul element dă . Pentru aceeași valoare este și minim, și maxim. Dacă șirul este citit până la un marcaj (de exemplu 0), marcajul nu face parte din șir și nu trebuie comparat. Tipul variabilelor mn și mx trebuie să fie cel al valorilor citite. Dacă secvența inițializează minimul cu o valoare „foarte mare” (de pildă 1000) și valorile pot depăși această limită, rezultatul este greșit; limita se alege din domeniul dat în enunț. Pentru a afla în aceeași parcurgere și minimul, și maximul, se folosesc două comparații independente, nu un else între ele: la primul element ambele condiții pot fi adevărate.
Exemplu în formatul examenului. Se citesc, în această ordine, numerele . Ce se afișează în urma executării secvenței de mai jos?
int x, mx = 0;
for (int i = 1; i <= 4; i++) {
cin >> x;
if (x > mx)
mx = x;
}
cout << mx;
- a)
-2 - b)
0 - c)
-9 - d)
-4
Răspunsul corect este b). Variabila mx pornește de la 0 și rămâne 0, pentru că nicio valoare citită nu este mai mare decât 0: , , și sunt false. Valoarea afișată, 0, nu apare în șir. Varianta a) ar fi răspunsul corect dacă mx ar fi fost inițializat cu prima valoare citită, iar varianta c) este minimul șirului.
Greșeli frecvente
- Greșit: minimul poate fi inițializat mereu cu zero.Corect: pornește de la prima valoare a unui șir nevid.
- Greșit: pentru maximul este .Corect: este mai mare decât celelalte două valori.
- Greșit: trebuie sortat întregul șir pentru a afla extremele.Corect: o singură parcurgere este suficientă.
Pentru părinți
Copilul exersează compararea succesivă.
- Scrieți trei temperaturi: 12, 8, 15.
- Încercuiți prima valoare ca minim și maxim provizorii.
- Actualizați-le după fiecare valoare.
- Încercați și trei numere negative.
Întrebați-l: „De ce nu putem porni mereu cu zero drept minim?”
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633 și 1653–1654; OMEC 4370/2026, anexa 8, p. 155–156; rocnee.eu
- OMEC 4370/2026, anexa 8, Informatică IX intensiv, p. 155–156
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1632–1633; rocnee.eu
- OMEC 6930/2025, anexa 66, Informatică IX CS militar, Monitorul Oficial nr. 4 bis/8.01.2026, pp. 2563–2578; cdn.edupedu.ro; centralizator oficial actualizat prin OMEC 3224/2026, legislatie.just.ro
- OMEC 6930/2025, MO 4 bis/2026, Informatică CS, p. 1653–1654; rocnee.eu
- OMEN 3393/2017, anexa 2, Informatică și TIC, pp. 13–14 (competențele 2.1–2.2 la p. 13); isj.tm.edu.ro
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- OMEN 3393/2017, anexa 2, Informatică și TIC, clasa a VIII-a, p. 14–15; UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
