Pseudocodul, citit și scris
Notația în care sunt date subiectele I și II: cele trei structuri și cum urmărești pe hârtie ce afișează un algoritm.
De ce nu se dă examenul direct în C++
Pseudocodul este o notație făcută pentru a descrie algoritmi fără să te lege de un limbaj anume. Nu are compilator și nici reguli de punctuație la care să greșești. Ca să spui ce face algoritmul, nu trebuie să știi cum se declară un vector în C++.
De aceea se folosește la examen: se verifică dacă înțelegi algoritmul, nu dacă ai memorat sintaxa.
Notația exactă din subiecte (săgeata de atribuire, chenarele, simbolurile) este descrisă în ghidul de pseudocod. Aici ne ocupăm de cum îl citești și cum îl gândești.
Cele trei structuri, și atât
Orice algoritm se poate scrie folosind doar trei structuri. Nu e o simplificare pentru școală. Este o teoremă.
Secvența
Instrucțiuni una după alta, în ordine.
citește a, b
s ← a + b
scrie sDecizia
Un test și două drumuri.
┌dacă s % 2 = 0 atunci
│ scrie "par"
│altfel
│ scrie "impar"
└■Ramura altfel poate lipsi dacă în celălalt caz nu ai nimic de făcut.
Repetiția
Ceva se face de mai multe ori. Există trei forme. Pe care o alegi depinde de ce știi înainte să începi, nu de gust.
pentru, când știi de câte ori:
┌pentru i ← 1,n execută
│ scrie i
└■cât timp, când nu știi de câte ori și s-ar putea să nu fie nevoie deloc:
┌cât timp n > 0 execută
│ scrie n % 10
│ n ← [n/10]
└■repetă, când nu știi de câte ori, dar sigur se face măcar o dată:
┌repetă
│ citește x
└până când x = 0Diferența dintre ultimele două este unde stă testul. La cât timp se testează înainte, deci corpul poate să nu se execute niciodată. La repetă se testează după, deci corpul se execută cel puțin o dată. Dacă n este 0 de la început, prima buclă nu scrie nimic, iar a doua tot citește un x.
Cum urmărești un algoritm pe hârtie
De asta depind punctele de la Subiectul I. Lucrezi cu un tabel, nu din cap.
Să luăm algoritmul:
citește n
s ← 0
┌cât timp n > 1 execută
│ s ← s + n % 10
│ n ← [n/10]
└■
scrie scu n = 1234. Faci un tabel cu o coloană pentru fiecare variabilă și o linie pentru fiecare trecere prin buclă:
| pas | n la intrare | n % 10 | s |
|---|---|---|---|
| start | 1234 | — | 0 |
| 1 | 1234 | 4 | 4 |
| 2 | 123 | 3 | 7 |
| 3 | 12 | 2 | 9 |
| ieșire | 1 | — | 9 |
Se afișează 9, nu 10.
Capcana e pusă intenționat: condiția este n > 1, nu n > 0. Când n ajunge la 1, bucla se oprește, deci prima cifră nu mai este adunată. Cu n > 0 ar mai fi fost o trecere, iar rezultatul ar fi fost 10.
Verifică întotdeauna ultima trecere, cea în care condiția devine falsă. Acolo sunt de obicei capcanele. În exemplul nostru, n > 1 și n > 0 se comportă diferit numai la numerele care încep cu cifra 1. Pentru n = 3405, de pildă, ambele condiții dau același rezultat. Așa că nu trage concluzii dintr-un singur exemplu.
Regula practică: nu presupune niciodată ce scrie în condiție. Citește-o de două ori, exact așa cum e scrisă. La Subiectul I, cele mai multe greșeli vin din citit, nu din calcul.
Cum scrii tu pseudocod
La Subiectul II trebuie să scrii tu. La corectare contează trei lucruri:
Declară ce citești. Dacă enunțul spune că se citește n și apoi n numere, prima linie este citește n, iar restul intră într-o buclă pentru.
Inițializează înainte de buclă. Un contor pornește de la 0, un produs de la 1, un maxim de la prima valoare sau de la ceva sigur mai mic decât orice valoare posibilă. Cele mai multe puncte pierdute pe un algoritm altfel corect vin dintr-o inițializare uitată.
Nu inventa notație. ← pentru atribuire, = pentru comparație (un singur semn, nu ==). [x] este partea întreagă. Dacă scrii altceva, corectorul nu poate ghici ce ai vrut.
Un exemplu întreg
Se citește un număr natural n, apoi n numere întregi. Să se afișeze câte dintre ele sunt pare.
citește n
c ← 0
┌pentru i ← 1,n execută
│ citește x
│ ┌dacă x % 2 = 0 atunci
│ │ c ← c + 1
│ └■
└■
scrie cObservă că x se citește în interiorul buclei. Fiecare trecere aduce un număr nou, îl testează și apoi îl uită. Ca să le numărăm pe cele pare, nu trebuie să reținem toate cele n numere. Tiparul acesta revine mereu: dacă îți trebuie doar un total, o numărătoare sau un maxim, nu ai nevoie de vector.
De reținut
- Trei structuri: secvență, decizie, repetiție. Nu există a patra.
cât timptestează înainte,repetătestează după. De aici vine diferența la cazurile limită.- La Subiectul I fă tabel cu variabilele. Nu urmări algoritmul din cap.
- Citește condiția exact cum e scrisă. Acolo sunt puse capcanele.
- Inițializează contoarele și acumulatorii înainte de buclă.