Biblioteca
Tutora
BibliotecaInformatică și TIC › clasa a IX-a

Algoritmi și date

Introducere în conceptul de algoritm, proprietăți și modalități de reprezentare, alături de tipuri de date utilizate în programare.

Bacalaureat

Ce este un algoritm și ce proprietăți trebuie să aibă

Un algoritm este o succesiune finită de pași, descriși fără ambiguitate, care pornește de la niște date de intrare și produce, într-un timp finit, date de ieșire — adică rezultatul problemei. Nu orice listă de instrucțiuni este algoritm: ea trebuie să respecte trei proprietăți care se cer explicit la examen.

Confuzia clasică: elevii cred că un program care merge pe exemplul din enunț este corect. Corectitudinea se judecă pe toate datele de intrare posibile — inclusiv cazurile-limită: zero, numere negative, șirul cu un singur element.

Reprezentarea algoritmilor: pseudocod și schemă logică

Același algoritm poate fi descris în mai multe moduri. La BAC se folosește pseudocodul — un limbaj intermediar între limbajul natural și limbajul de programare, cu cuvinte-cheie românești standardizate:

Schema logică exprimă același lucru grafic: oval pentru start/stop, paralelogram pentru citire/scriere, dreptunghi pentru atribuiri (prelucrări) și romb pentru decizii, cu două ieșiri (da/nu). Săgețile arată ordinea de execuție.

De reținut din convențiile de subiect: [x] înseamnă partea întreagă a lui x, iar x % y (sau „restul împărțirii”) este restul împărțirii întregi. De exemplu [7/2] = 3, iar 7 % 2 = 1. Aceste notații apar în aproape orice subiect de bacalaureat.

Tipuri de date, variabile și constante

Orice dată prelucrată de calculator are un tip, care stabilește ce valori poate lua și ce operații are voie să suporte:

O variabilă este o zonă de memorie cu un nume, un tip și o valoare care se poate schimba în timpul execuției. O constantă are valoare fixată o singură dată (de exemplu numărul zilelor unei săptămâni).

Capcana cea mai frecventă: împărțirea între întregi este întreagă. În C++, expresia 7/2 dă 3, nu 3.5 — partea zecimală se pierde, nu se rotunjește. Ca să obții 3.5 trebuie ca măcar un operand să fie real. Tot aici: cifra „7” ca caracter și numărul 7 ca întreg sunt date diferite, cu tipuri diferite.

Operatori și expresii

O expresie combină valori, variabile și operatori și produce un rezultat de un anumit tip.

Prioritatea operatorilor decide ordinea de calcul: întâi not, apoi operatorii aritmetici (*, /, % înaintea lui + și -), apoi relaționalii, apoi && și la final ||. Parantezele bat orice prioritate.

Două greșeli care costă puncte: confuzia dintre = (atribuire) și == (comparație) — în pseudocod atribuirea e săgeata ←, dar în C++ scrierea „dacă (x = 5)” atribuie în loc să compare; și negarea condițiilor compuse — negația lui „x > 0 și y > 0” este „x <= 0 sau y <= 0” (legile lui De Morgan schimbă „și” în „sau”), nu „x <= 0 și y <= 0”.

Structurile de bază: secvențială, alternativă, repetitivă

Teorema de structură (Böhm–Jacopini) spune că orice algoritm se poate construi doar din trei structuri:

Atenție la sensul condițiilor: la cât timp se continuă cât condiția e adevărată, la până când se continuă cât condiția e falsă. Transformarea dintr-o formă în alta — cerință frecventă la BAC — presupune negarea condiției, nu copierea ei.

Urmărirea execuției pas cu pas — instrumentul de bază la examen

Cea mai sigură metodă de a răspunde la întrebarea „ce afișează algoritmul?” este urmărirea execuției (trasarea): construiești un tabel cu câte o coloană pentru fiecare variabilă și execuți pașii pe hârtie, rând cu rând, exact ca un calculator — fără să „ghicești” ce ar vrea algoritmul să facă.

Regulile de aur ale trasării:

Un algoritm-model care apare constant la examen: prelucrarea cifrelor unui număr. Cât timp n este diferit de 0, ultima cifră se extrage cu n % 10, apoi numărul se scurtează cu n ← [n/10]. Cu acest tipar se calculează suma cifrelor, numărul de cifre, oglinditul (inversul) unui număr. Merită exersat până devine reflex, pentru că e cărămida multor subiecte de la bacalaureat.

De reținut

algoritm
succesiune finită de pași precis descriși care, pornind de la datele de intrare, produce în timp finit datele de ieșire
finitudine
proprietatea unui algoritm de a se încheia după un număr finit de pași pentru orice date de intrare valide
generalitate
proprietatea unui algoritm de a rezolva o întreagă clasă de probleme, nu un singur caz particular
pseudocod
limbaj de descriere a algoritmilor, intermediar între limbajul natural și limbajul de programare, cu cuvinte-cheie precum citește, scrie, dacă, cât timp
atribuire
operația prin care valoarea unei expresii se memorează într-o variabilă, notată în pseudocod cu săgeata ←; vechea valoare a variabilei se pierde
variabilă
zonă de memorie identificată printr-un nume, care are un tip și o valoare ce se poate modifica în timpul execuției programului
tip de date logic
tip de date cu exact două valori, adevărat și fals; este tipul rezultatului oricărei condiții
împărțire întreagă
operația care păstrează doar câtul împărțirii a două numere întregi, fără partea zecimală: 7/2 = 3; în pseudocod partea întreagă se notează [x]
operatorul rest (%)
operatorul care dă restul împărțirii a două numere întregi: 17 % 5 = 2; se folosește la extragerea ultimei cifre a unui număr prin n % 10
structură repetitivă cu test final
structura repetă ... până când, în care corpul se execută cel puțin o dată, iar repetarea se oprește când condiția devine adevărată

Greșeli frecvente

Greșit: 7/2 ar fi 3.5 atunci când ambii operanzi sunt întregi
Corect: Între întregi împărțirea este întreagă: 7/2 = 3 (se pierde partea zecimală, nu se rotunjește); rezultatul 3.5 se obține doar dacă măcar un operand este real
Greșit: La transformarea unei structuri cât timp în repetă ... până când se copiază condiția neschimbată
Corect: Cele două structuri continuă în situații opuse: cât timp repetă pe condiție adevărată, până când se oprește pe condiție adevărată — deci condiția trebuie negată
Greșit: Negarea condiției x > 0 și y > 0 ar fi x <= 0 și y <= 0
Corect: După legile lui De Morgan, negarea schimbă și în sau: negația este x <= 0 sau y <= 0; păstrarea lui și duce la răspunsuri greșite la itemii cu expresii logice
Greșit: O structură cât timp cu condiția falsă de la început și-ar executa corpul o dată
Corect: Cât timp are testul la început: dacă prima evaluare a condiției dă fals, corpul se execută de zero ori; cea care garantează minimum o execuție este repetă ... până când
Greșit: Se verifică algoritmul doar pe exemplul din enunț și se declară corect
Corect: Corectitudinea se judecă pe toate datele valide, inclusiv cazuri-limită: n = 0, numere negative, o singură cifră; multe subiecte cer exact o valoare pentru care algoritmul se comportă diferit

Test — 6 întrebări ca la examen

1. Care dintre următoarele este o proprietate obligatorie a unui algoritm?
  1. să fie scris într-un limbaj de programare
  2. să se termine după un număr finit de pași
  3. să folosească cel puțin o structură repetitivă
  4. să afișeze cel puțin două rezultate
Vezi răspunsul
să se termine după un număr finit de pași. Finitudinea este una dintre proprietățile fundamentale: algoritmul trebuie să se încheie în timp finit. Prima variantă e tentantă, dar algoritmul poate fi descris și în pseudocod sau schemă logică — limbajul de programare e doar una dintre formele de reprezentare.
2. Ce valoare are expresia 23 % 4 + 23 / 4, dacă toate valorile sunt întregi?
  1. 8
  2. 9.75
  3. 3
  4. 10
Vezi răspunsul
8. 23 % 4 = 3 (restul) și 23 / 4 = 5 (câtul împărțirii întregi), deci 3 + 5 = 8. Varianta 9.75 e capcana clasică: presupune că 23/4 dă 5.75, dar între întregi partea zecimală se pierde.
3. În pseudocod, [x] reprezintă partea întreagă a lui x. Ce valoare are [15/2] - [13/2]?
  1. 0.5
  2. 0
  3. 1
  4. 2
Vezi răspunsul
1. [15/2] = [7.5] = 7, iar [13/2] = [6.5] = 6, deci diferența este 7 - 6 = 1. Varianta 0 e capcana: presupune că partea întreagă se rotunjește (7.5 → 8 sau ambele la 7), dar [x] doar taie zecimalele, nu rotunjește.
4. O secvență repetă ... până când n = 0 primește de la început n = 0. De câte ori se execută corpul ei?
  1. de zero ori
  2. exact o dată
  3. la nesfârșit
  4. de două ori
Vezi răspunsul
exact o dată. Structura cu test final își execută corpul înainte de prima verificare a condiției, deci minimum o dată; abia apoi găsește n = 0 (condiție adevărată) și se oprește. Varianta de zero ori descrie comportamentul lui cât timp, care testează înainte.
5. Care expresie este echivalentă cu negarea condiției (a < 5 sau b < 5)?
  1. a >= 5 sau b >= 5
  2. a > 5 și b > 5
  3. a >= 5 și b >= 5
  4. a < 5 și b < 5
Vezi răspunsul
a >= 5 și b >= 5. De Morgan: negarea unui sau devine și, iar fiecare condiție se neagă individual; negația lui a < 5 este a >= 5 (nu a > 5, pentru că egalitatea trece de partea cealaltă). Varianta cu a > 5 pierde exact cazul a = 5 — capcana standard.
6. Se citește n = 2708 și se execută: cât timp n ≠ 0 execută s ← s + n % 10; n ← [n/10] (inițial s = 0). Ce valoare are s la final?
  1. 17
  2. 8
  3. 2708
  4. 4
Vezi răspunsul
17. Algoritmul adună cifrele: 8 + 0 + 7 + 2 = 17. Varianta 4 numără cifrele (ar corespunde lui s ← s + 1), iar 8 e doar prima cifră extrasă — greșeala celor care nu trasează execuția până la capăt, când n devine 0.
Deschide varianta interactivă — cu AI care îți explică
← Proiect de informaticăStructuri de date →
BiologieChimieEconomieFilosofieFizicăGeografieInformatică și TICIstorieLogică și argumentareMatematicăPsihologieLimba și literatura română