Cum verifici codul pe hârtie la BAC informatică
Verifică o soluție fără compilator prin trasare, invariante și teste mici. Separă sintaxa, rezultatul afișat și starea finală a variabilelor.
În acest material
Când scrii o soluție pe hârtie, compilatorul nu îți semnalează un indice greșit sau o inițializare lipsă. Poți însă înlocui o parte din verificare cu o procedură scurtă și repetabilă: citești contractul, alegi un test mic și urmărești starea programului instrucțiune cu instrucțiune.
Prima lectură: ce trebuie să existe la ieșire
Subliniază exact ce se cere: o valoare, o poziție, un număr de apariții sau toate elementele unei secvențe. Notează indexarea și regula de departajare. „Primul maxim” și „ultimul maxim” se pot deosebi printr-un singur semn de comparație, dar produc răspunsuri diferite.
Pentru un maxim, verifică dacă enunțul permite numere negative. Inițializarea cu zero nu este justificată doar fiindcă zero este comod. Pentru o sumă, verifică dacă tipul ales poate păstra rezultatul, nu doar fiecare termen.
Pe -3,-1,-1,-4, maximul evoluează -3,-1,-1,-1 și numărul aparițiilor lui 1,1,2,2.Mărește schema ↗
A doua lectură: trasează un exemplu care separă cazurile
Pentru numărarea maximelor, folosește -3 -1 -1 -4. După prima valoare, maximul este -3 și numărul este 1. După -1, maximul se schimbă și numărul revine la 1. Al doilea -1 îl mărește la 2. Ultima valoare nu schimbă nimic. Rezultatul este maxim -1, cu două apariții.
Acest test verifică simultan inițializarea, resetarea contorului și egalitatea. Un șir strict crescător de valori pozitive ar ascunde două dintre aceste situații. Totuși, nu înghesui toate verificările într-un singur test greu de urmărit; păstrează și un caz minimal.
Scrie starea după instrucțiune, nu după intenție
Dacă două atribuiri depind una de cealaltă, a doua folosește valoarea deja modificată. La interschimbare, simpla succesiune „a primește b; b primește a” pierde valoarea inițială a lui a. Trasarea trebuie să respecte ordinea exactă, chiar dacă știi ce ai vrut să facă programul.
Pentru funcții recursive, notează separat coborârea apelurilor și revenirea lor. O afișare înaintea apelului produce altă ordine decât aceeași afișare după apel. Nu combina toate apelurile într-o singură valoare mentală.
A treia lectură: granițele
Verifică primul și ultimul indice accesat. Dacă apare a[i+1], urmărește ultima iterație. Dacă apare împărțire sau rest, verifică dacă divizorul poate deveni zero. Dacă ai o variabilă de răspuns, identifică prima instrucțiune care îi dă o valoare validă.
Alege apoi cazul cu un singur element, dacă este permis. Multe bucle peste vecini trebuie să execute zero pași în acel caz. Pentru un șir gol, verificarea are sens numai dacă enunțul îl admite.
Cum folosești baremul
Rezolvă întâi independent, apoi compară rezultatul și justificarea cu baremul exact al variantei și profilului. Nu atribui singur puncte după o regulă găsită într-o discuție online. La antrenament, păstrează greșeala identificată și un test care o reproduce; această pereche valorează mai mult decât simpla notare a scorului.
Continuă cu trasarea pseudocodului, stiva apelurilor recursive și subiectele și baremele din arhivă.
Întrebări frecvente
Cum verific un program C++ pe hârtie?
Alege o intrare mică, notează valorile inițiale și urmărește fiecare instrucțiune într-un tabel. Separă starea variabilelor de textul afișat și verifică exact condiția care oprește fiecare buclă.
Ce teste sunt utile când nu am compilator?
Folosește dimensiunea minimă permisă, o soluție la început, una la sfârșit și o egalitate între candidați. Aceste cazuri fac vizibile inițializările, indicii și regula de departajare.
Este suficient să urmăresc exemplul din enunț?
Nu. Exemplul verifică o singură execuție. Adaugă cazuri care exercită alte ramuri și justifică de ce regula algoritmului rămâne corectă pentru toate datele permise.