Documente Academic
Documente Profesional
Documente Cultură
Capitolul
Cum scriem programe?
Variabile şi constante
Componentele schemelor logice
Limbajul pseudocod
Probleme propuse
Soluţiile problemelor propuse
2
2.1. Variabile şi constante
Concepem algoritmi cu scopul de a prelucra anumite date, a le transforma în alte date
(date de intrare în date de ieşire).
Din punct de vedere al modului în care este manevrată în cadrul algoritmului o
anumită dată, distingem două mari categorii de date:
• constante – a căror valoare nu poate fi modificată pe parcursul prelucrărilor;
• variabile – a căror valoare poate fi supusă oricărei modificări permise de natu-
ra valorii reţinute de către acestea.
Această instrucţiune se execută astfel: mai întâi se evaluează expresie, apoi se me-
morează rezultatul evaluat în variabila variabilă.
Atunci când am analizat instrucţiunile de care avem neapărată nevoie pentru a de-
scrie algoritmi utili, am enumerat şi instrucţiunea de decizie. Iată cum precizăm într-
un algoritm că instrucţiunea de efectuat este o instrucţiune de decizie:
Pentru a vedea mai bine efectul diferitelor instrucţiuni, vom încerca să rezolvăm
probleme concrete, încercând să identificăm şi să descriem algoritmul pe care trebuie
să îl utilizăm în rezolvare. Apoi, vom vedea cum scriem, pe baza acestei descrieri,
textul sursă al programului Pascal.
Pentru fiecare problemă pe care ne vom propune să o rezolvăm vom avea un enunţ,
specificarea mai exactă a datelor de intrare şi a datelor de ieşire, câteva precizări su-
plimentare referitoare la problemă, precum şi eventuale restricţii pe care trebuie să le
impunem asupra rezolvării. În final, vom avea unul sau mai multe exemple de date de
intrare şi rezultate concrete, care trebuie să fie obţinute pe baza acestora într-o rezolva-
re corectă.
Exemplele date pentru fiecare problemă le vom utiliza atât pentru a înţelege mai
exact cerinţa problemei, cât şi pentru a testa corectitudinea programului pe care l-am
realizat.
În enunţurile problemelor de concurs, timpul de execuţie solicitat vă dă indicii des-
pre eficienţa minimă, exprimată ca viteză de lucru pe care trebuie să o aibă algoritmul
de rezolvare a problemei.
Date de intrare
Se dau două valori a şi b, ambele numere întregi care se introduc de la tastatură.
Date de ieşire
Se vor afişa 5 valori, reprezentând rezultatele celor cinci operaţii, în ordinea enumeră-
rii în enunţul problemei.
Restricţii şi precizări
• –100 ≤ a, b ≤ 100
• Datele de intrare sunt întotdeauna corecte
26 2. Cum descriem algoritmii? Cum scriem programe?
Exemple
Intrare Ieşire Explicaţie
a=7 10 21 4 2 1 Suma celor două valori este 10, produsul este 21,
b=3 diferenţa este 4, câtul împărţirii primei valori la cea
de a doua este 2, iar restul este 1.
2.3.2. Interschimbarea
Se dau două valori întregi reţinute în două variabile a şi b. Scrieţi un program care in-
terschimbă conţinuturile celor două variabile, apoi afişează rezultatul operaţiei de in-
terschimbare.
Date de intrare
Se dau două valori întregi, a şi b.
Date de ieşire
Se vor afişa valorile celor două variabile după interschimbare.
Restricţii şi precizări
• –100 ≤ a, b ≤ 100
Exemple
Intrare Ieşire Explicaţie
a=2 5 2 După interschimbare, variabila a va conţine
b=5 valoarea 5, iar variabila b valoarea 2.
Date de intrare
De la tastatură se vor citi a şi b, două valori reale.
Date de ieşire
• Dacă ecuaţia are soluţie, se va afişa valoarea necunoscutei x.
• Dacă ecuaţia admite o infinitate de soluţii, se va afişa mesajul 'Nedeterminare'.
• Dacă ecuaţia nu are nici o soluţie se va afişa mesajul 'Incompatibilitate'.
2. Cum descriem algoritmii? Cum scriem programe? 27
Restricţii şi precizări
• –100 ≤ a, b ≤ 100
Exemple
Intrare Ieşire Explicaţie
a=1 -1 Ecuaţia 1*x + 1 = 0 are soluţia x = –1.
b=1
Ecuaţia 0*x + 0 = 0 are o infinitate de
a=0 Nedeterminare
b=0 soluţii.
2.4.1. Calculator
Ştiind că datele de intrare sunt corecte, programul va prelua aceste date, apoi va calcu-
la pe baza lor rezultatele celor cinci operaţii şi, în final, va afişa rezultatele solicitate.
Algoritm Socotitoare:
citeşte a,b
suma ← a + b { calculăm rezultatelor celor cinci operaţii }
produs ← a * b
diferenţa ← a – b
cât ← [a\b] { câtul împărţirii întregi }
rest ← rest[a\b] { restul împărţirii întregi }
{ afişăm rezultatelor solicitate in enunţ }
scrie suma,produs,diferenţa,cât,rest
sfârşit algoritm
Program Socotitoare;
var a,b:Integer; { cele două valori de intrare }
suma:Integer; { suma celor două valori }
produs:Integer; { produsul celor două valori }
diferenta:Integer; { diferenţa dintre cele două valori }
cat:Integer; { câtul împărţirii întregi a celor două valori }
rest:Integer; { restul împărţirii întregi }
Begin
Write('Prima valoare: '); ReadLn(a); { citim datele de intrare }
Write('A doua valoare: '); ReadLn(b);
suma:=a+b; { calculăm rezultatele operaţiilor }
produs:=a*b;
diferenta:=a-b;
cat:=a div b;
rest:=a mod b;
{ afişăm rezultatele }
Write(suma,' ',produs,' ',diferenta,' ',cat,' ',rest)
End.
2.4.2. Interschimbarea
În contextul acestei probleme este potrivit să discutăm despre modul de funcţionare a
instrucţiunii de atribuire: atunci când în partea dreaptă a operatorului de atribuire apare
o variabilă (şi nu o expresie), rolul atribuirii este de a realiza o copiere a conţinutului
variabilei din membrul drept în variabila din membrul stâng. Vechiul conţinut al
variabilei din membrul stâng se va suprascrie („se pierde”). Deci, nu putem utiliza
secvenţa de instrucţiuni a ← b; b ← a deoarece astfel am pierde conţinutul variabilei a
la prima atribuire. A doua atribuire va suprascrie conţinutul variabilei b cu cel reţinut
2. Cum descriem algoritmii? Cum scriem programe? 29
în variabila a (care este tot conţinutul lui b). Deci, procedând astfel vom obţine două
valori identice.
Soluţia este de a utiliza o variabilă auxiliară aux şi de a interschimba conţinuturile
celor două variabile prin intermediul ei.
Apare însă o problemă: nu avem voie să executăm o împărţire la zero şi s-ar putea
ca valoarea variabilei a să fie 0. În programare, dacă intenţionăm o împărţire cu 0,
mediul de programare ne avertizează cu un mesaj de eroare: Division by zero
care trebuie evitată, deoarece este considerată o eroare fatală în execuţia programului
şi programul se închide de la sine.
Să „desenăm” şi acest algoritm pentru o mai bună vizualizare a ordinii în care se
execută instrucţiunile.
30 2. Cum descriem algoritmii? Cum scriem programe?
Algoritm Ecuaţia_de_gradul_întâi;
citeşte a,b { citim datele de intrare }
dacă a = 0 atunci { dacă nu avem soluţie unică }
{ determinăm dacă avem o infinitate de soluţii sau nu avem deloc soluţie }
dacă b ≠ 0 atunci
scrie 'Nedeterminare'
altfel
scrie 'Incompatibilitate'
sfârşit dacă
altfel { dacă avem o soluţie unică }
x ← -b/a
scrie 'Solutia este ',x
sfârşit dacă
sfârşit algoritm