Ce este pseudocodul?
Pseudocodul este un limbaj prin care sunt explicati diferiti algoritmi. Fiecare instructiune din limbajele normale de programare (precum C++, Java, etc) poate fi descris pas cu pas in limbaj pseudocod. Rolul principal al pseudocodului este sa usureze citirea si intelegerea de catre oameni, deoarece pseudocodul propriu-zis nu poate fi rulat pe calculator.
Echivalarea din pseudocod in C++
In tabelul de mai sus aveti echivalarea fiecarei instructiuni din pseudocod in C++. De asemenea, in unele probleme vi se mai cere sa inlocuiti structurile repetitive. Trebuie sa retineti urmatoarele:
- Structura repetitiva cu test initial: for, while
- Structura repetitiva cu test final: do while
Probleme Bacalaureat rezolvate
Iar acum vom rezolva doua probleme de pseudocod pentru a intelege mai bine acest capitol. De fiecare data in subiectele de Bacalaureat se vor intalnii 4 subpuncte
- pentru primul subpunct pentru sa construim un tabel in care primul rand este reprezentat de variabilele intalnite in problema. Vom urmarii pe rand fiecare instructiune si modificam valorile din tabel pe masura ce executam instructiunile din pseudocod
- pentru al doilea subpunct trebuie sa gasim valori pentru care sa obtinem o anumita valoare. Pentru a rezolva acest subpunct trebuie sa fim atenti ce face algoritmul pentru a gasi raspunsul potrivit.
- in cel de-al treilea subpunct trebuie sa inloucuim o secventa repetitiva cu alta. Daca urmarim tabelele de mai sus nu ar trebuii sa prezinte o dificultate acest subpunct
- in ultimul subpunct folosim inlocuirile prezentate mai sus pentru a scrie algoritmul echivalent in C++. Atentie: trebuie incluse librariile si functia principala (main)
1. Se consideră algoritmul alăturat descris în pseudocod.
a) Scrieti numărul afişat în urma executării algoritmului dacă pentru n se citeşte valoarea 6.
b) Scrieti o valoare care poate fi citită pentru n astfel încât să se afişeze valoarea 55.
c) Scrieti în pseudocod un algoritm, echivalent cu cel dat, care să contină o singură structură repetitivă.
d) Scrieti programul C/C++ corespunzător algoritmului dat.
citeste n (numar natural nenul) s <- 0 pentru i <- i, n executa --- a <- 0 --- b <- 1 --- j <- 1 --- cat timp j < i executa ------ r <- 2 * b - a ------ a <- b ------ b <- r ------ j <- j + 1 --- s <- s + b scrie s
a) Tabelul de valori este urmatorul:
b) Observam faptul ca algoritmul nostru calculeaza suma lui Gauss pentru o anumita valoare introdusa. De exemplu pentru n = 6 obtinem s = n * (n + 1) / 2 adica s = 21. Asadar pentru a obtine s = 55 este nevoie sa avem n = 10.
c) Pseudocodul este urmatorul:
citeste n (numar natural nenul) s <- 0 pentru i <- i, n executa --- s <- s + i scrie s
d) Programul C/C++ este urmatorul:
#include <iostream> using namespace std; int main() { unsigned int n, s, a, b, j, r; cin >> n; s = 0; for(int i = 1; i <= n; i++) { a = 0; b = 1; j = 1; while(j < i) { r = 2 * b - a; a = b; b = r; j = j + 1; } s = s + b; } cout << s; }
2. Se consideră algoritmul alăturat descris în pseudocod: S-a notat cu x % y restul împărtirii numărului natural x la numărul natural nenul y şi cu [z] partea întreagă a numărului real z.
a) Scrieti numărul afişat dacă pentru variabila n se citeşte valoarea 64598.
b) Scrieti toate numerele de exact trei cifre care pot fi citite pentru variabila n astfel încât, pentru fiecare dintre acestea, numărul afişat în urma executării algoritmului să fie 24.
c) Scrieti în pseudocod un algoritm, echivalent cu cel dat, în care să se înlocuiască structura repetă…până când cu o structură repetitivă de alt tip.
d) Scrieti programul C/C++ corespunzător algoritmului dat.
citeste n (numar natural nenul) m <- 0 repeta --- c <- n % 10 --- n <- [n / 10] --- daca c > 5 atunci ------ c <- [c / 2] --- m <- m * 10 + c pana cand n = 0 scrie m
a) Tabelul de valori este urmatorul:
b) Stiind ca avem un numar de trei cifre n, il vom nota cu xyz unde x reprezinta cifra sutelor, y cifra zecilor si z cifra unitatilor. Pentru a obtine 24 inseamna ca z = 0, asadar xy se va obtine din numarul 24. O posibila solutie este n = 420. Deoarece avem instructiunea c = c / 2 pentru fiecare c > 5 ajungem la concluzia ca restul numerelor sunt 820 si 920.
c) Pseudocodul este urmatorul:
citeste n (numar natural nenul) m <- 0 cat timp n != 0 executa --- c <- n % 10 --- n <- [n / 10] --- daca c > 5 atunci ------ c <- [c / 2] --- m <- m * 10 + c scrie m
d) Programul C/C++ este urmatorul:
#include <iostream> using namespace std; int main() { unsigned int n, m, c; cin >> n; m = 0; do { c = n % 10; n = n / 10; if (c > 5) c = c / 2; m = m * 10 + c; } while(n != 0); cout << m; }