Documente Academic
Documente Profesional
Documente Cultură
Ce este pseudocodul?
Limbajul pseudocod este o reprezentare de tip text a algoritmului. Putem spune că
limbajul pseudocod este un fel de intermediar între algoritmul pe care l-am gândit pentru
rezolvarea unei probleme și transpunerea sa în limbaj de programare. Limbajul
pseudocod poate fi scris sub orice formă, de aceea noi vom folosi pentru limbajul
pseudocod cuvintele și expresiile din limba română.
Să rezolvăm problemele din pagina cu schema logică:
Problema 1:
Se citesc de la tastatură două numere întregi. Să se determine suma lor.
Analiza problemei: citim două numere întregi, a și b, de la tastatură, calculăm S, suma lor,
și afișăm pe ecran S.
Acum să transformăm aceste idei în limbaj pseudocod. Vom începe cu cuvântul START
pentru a marca începutul algoritmului. Vom marca sfârșitul algoritmului cu ajutorul
cuvântului STOP.
START
a, b, S – întregi;
citește a și b;
S = a + b;
afișează S;
STOP
Voi exemplifica acum și transpunerea limbajului pseudocod în limbajul de programare
C++. Nu trebuie să ne facem griji, vom înțelege puțin mai târziu ce înseamnă liniile de mai
jos.
#include
using namespace std;
int a, b, S;
int main()
{
cin >> a >> b;
S = a + b;
cout << S;
return 0;
}
Aceasta a fost doar o demonstrație, mai multe despre transpunerea algoritmilor în C++
vom discuta în lecțiile viitoare.
Problema 2:
Să se afișeze maximul a două numere întregi.
Analiza problemei: Se citesc două numere întregi, x și y, de la tastatură, dacă a >= b,
atunci maxim = a, altfel maxim = b, afișează maxim pe ecran.
Pseudocod:
START
x, y, maxim – întregi;
citește x și y;
Dacă a >= b atunci
maxim = a;
Altfel
maxim = b;
afișează maxim;
STOP
Problema 3:
Să se rezolve ecuația de gradul I (a*x+b=0).
Analiza problemei: Se citesc două numere întregi, a și b, de la tastatură. Dacă a <>
(diferit) 0, atunci x = -b/a, afișează x, altfel datele nu corespund problemei și afișează
„Eroare!”.
Pseudocod:
START
a, b – întregi;
x – real;
citește a și b;
Dacă a <> 0 atunci
x = -b / a;
afișează x;
Altfel
afișează „Eroare!”
STOP
Introducere în C++ >>
<< Probleme rezolvate
Introducere în C++
Ce este C++?
C++ este un limbaj de programare. C++ este limbajul de programare în care vom transcrie
algoritmii de rezolvare a problemelor pe care le vom studia în continuare. Trebuie să știm
că C++, la fel ca și alte limbaje de programare, are o sintaxă specifică prin care putem să
transmitem instrucțiunile pe are dorim să le execute calculatorul. Limbajul C++ are o serie
de cuvinte rezervate, cuvinte pe care nu le putem folosi în alt sens decât cel reglementat
de C++. Unul dintre aceste cuvinte este main. Cuvântul main este rezervat pentru funcția
principală a unui program C++, fără de care programul nu poate funcționa.
Să luăm un exemplu de program scris în limbajul C++:
#include
using namespace std;
int main()
{
cout << „Bună ziua!”;
return 0;
}
Pentru ca acest program să poată fi executat este necesar în primul rând să avem instalat
pe calculator un compilator. Vă recomand să instalați Code::Blocks (instrucțiuni pentru
instalare găsiți aici). După ce am reușit să creăm un proiect vom vedea în partea stângă
un panou. Căutăm tab-ul Projects unde vom găsi proiectul pe care tocmai l-am creat. În
proiectul nostru, în folder-ul Sources găsim un fișier care se numește main.cpp. Dăm
dublu-click pe acesta și vom vedea conținutul lui în fereastra din dreapta (spațiul de
lucru). Înlocuim codul cu cel pe care l-am scris mai sus și dăm click pe Build and Run (sau
apăsăm F9 de la tastatură). Rezultatul codului va apărea într-o fereastră neagră și… da, ați
ghicit! Scrie pe ecran textul „Bună ziua!”.
Acum, hai să înțelegem câteva dintre liniile de cod ale programului:
este numele fișierului pe care vrem să îl includem în proiectul nostru. Acest fișier este,
de fapt, o bibliotecă unde putem să găsim scrierea explicită a unor funcții de care avem
nevoie în cadrul proiectului. include, printre altele, definiția lui cout și cin.
funcția main va conține un set mai mult sau mai puțin amplu de instrucțiuni, iar orice
set de instrucțiuni trebuie inclus între acolade. Așadar, după () vom deschide o acoladă
(„{„), iar la sfârșit, după ce am scris ultima instrucțiune din funcția main vom închide
acolada („}”)
cout este operația pe care o vom folosi pentru afișarea datelor pe ecran. cout se
folosește întotdeauna împreună cu semnul <<.
cin este operația pe care o vom folosi pentru citirea datelor de la tastatură. cin se
folosește întotdeauna împreună cu semnul >>.
return 0 este obligatoriu să fie scrisă ca ultimă instrucțiune din funcția main, vom
învăța mai târziu ce face acesta.
Observați că unele dintre rânduri se termină cu semnul punct și virgulă ( ; ). Vom folosi
acest semn la sfârșitul oricărui rând. Totuși, sunt câteva excepții, astfel că nu vom folosi
semnul ; în următoarele cazuri:
o short (sau short int) – reprezintă un număr întreg cuprins între –32,768 și 32,767
o long (sau long int) – odată cu crearea arhitecturilor de procesoare pe 32 biți int a
ajuns la aceleași valori cu long int
Boolean – este un tip de date care conține doar două valori: true (adevărat) sau false
(fals).
Vom folosi pentru început tipurile de date de tip întreg (în special int și long long). De
asemenea, trebuie să amintesc aici și tipurile de date de tip real: float și double, dar despre
acestea vom vorbi după ce vom ajunge și la matematică la nivelul acesta de cunoștințe.
Variabile
Ca să putem să înțelegem ce este o variabilă, să luăm următorul exemplu de la matematică:
x + 3 = 0.
Vom face calculul și vom ajunge la concluzia că x = -3. Așadar necunoscuta x va avea
valoarea -3. În cazul de față, necunoscuta x este o variabilă. Să mergem mai departe și să
scriem forma generală a unei ecuații de gradul 1: a * x + b = 0.
În acest caz, atât x, cât și a și b sunt variabile, deoarece fiecare dintre ele pot lua alte valori
la un exercițiu diferit.
O variabilă poate să aibă orice nume dacă respectă următoarele reguli:
numele va conține doar litere, cifre și semnul _
Operatori în C++
Cu cât înaintăm în elaborarea algoritmilor pentru rezolvarea unor probleme observăm că
avem nevoie să folosim anumiți operatori pentru evaluarea unor expresii. De exemplu, în
rezolvarea Problemei 1 de aici am folosit expresia S = a + b; Putem observa că în această
expresie găsim doi operatori:
= este operatorul de atribuire.
+ este operatorul aritmetic de adunare.
Prin urmare, expresia S = a + b se traduce astfel: Variabilei S i se atribuie rezultatul
adunării a + b.
Pe lângă operatorul de atribuire ( = ) avem și următorii operatori în C++:
Operatori aritmetici
o + (adunare)
o – (scădere)
o * (înmulțire)
o / (împărțire)
o == (egal)
o != (diferit)
Operatori logici
ȘI true false
Explicație: Două propoziții legate prin ȘI logic ( && ) vor da o valoare adevărat dacă și
numai dacă ambele propoziții sunt adevărate.
SAU true false
Explicație: Două propoziții legate prin SAU logic ( || )vor da o valoare adevărat dacă cel
puțin una din cele două propoziții este adevărată.
Valoare true false
NOT false true
Exemple:
Fie a = 4, b = 5, c = 6.
(a < b) && (b < c) = TRUE (a < b = TRUE, b < c = TRUE, TRUE && TRUE = TRUE)
(b < a) || (b < c) = TRUE (b < a = FALSE, b < c = TRUE, FALSE || TRUE = TRUE)
!(b < c) = FALSE (b < c = TRUE, !TRUE = FALSE)
La fel ca și la matematică, și în programare trebuie să ținem cont de ordinea efectuării
operațiilor. Pentru aceasta voi scrie mai jos operațiile în ordinea descrescătoare a
priorității:
1. Negația logică ( ! )
4. Operatori relaționali
5. ȘI logic ( && )
6. SAU logic ( || )
IMPORTANT: În programare parantezele pătrate și acoladele au un rol specific, astfel că
acestea nu pot fi folosite în expresii matematice. Voi scrie o expresie matematică în două
moduri:
matematic: {5x[4×3+2x(7+9)]}
informatic: (5*(4*3+2*(7+9)))
Așadar, atenție la închiderea parantezelor!
Structura alternativă
În programare există trei tipuri de structuri de control cu ajutorul cărora putem construi
orice algoritm:
structura repetitivă
Structura secvențială este compusă dintr-un set de instrucțiuni care se execută în
ordinea scrierii lor.
Exemplu:
Se citesc două numere întregi de la tastatură. Să se scrie un program care afișează pe ecran
suma lor.
D.I.: a, b – întregi
D.O.: S – întreg
Algoritm:
START
citește a, b;
S <- a + b;
scrie S;
STOP
Program:
1
2 #include <iostream>
using namespace std;
3 int a, b, S;
4 int main()
5 {
6 cin >> a >> b;
7 S = a + b;
cout << S;
8 return 0;
9 }
10
Algoritm:
START
citește a;
Dacă (a mod 2 = 0) atunci
scrie „par”;
Altfel
scrie „impar”;
STOP
Explicație: Dacă restul împărțirii numărului la 2 este 0, atunci numărul este par, altfel este
impar.
Program:
1 #include <iostream>
using namespace std;
2 int a;
3 int main()
4 {
5 cin >> a;
6 if (a % 2 == 0)
cout << "par";
7 else
8 cout << "impar";
9 return 0;
10 }
11
12
Problema 2. Să se scrie un program care determină maximul a două numere întregi citite
de la tastatură.
D.I.: a, b – întregi
D.O.: maxim – întreg
Algoritm:
START
citește a, b;
Dacă (a > b) atunci
maxim = a;
Altfel
maxim = b;
scrie maxim;
STOP
Program:
1
2 #include <iostream>
3 using namespace std;
4 int a, b, maxim;
int main()
5 {
6 cin >> a >> b;
7 if (a > b)
8 maxim = a;
else
9 maxim = b;
10 cout << maxim;
11 return 0;
12 }
13
Problema 3. Determinați câte sticle de x litri cu apă trebuie deschise pentru a umple un
vas de y litri.
Raționament: Dacă y se împarte exact la x, atunci avem nevoie de y/x sticle, altfel avem
nevoie de y/x+1 sticle.
D.I.: x, y – întregi
D.O.: nrsticle – întreg
Algoritm:
START
citește x, y;
Dacă (x mod y = 0) atunci
nrsticle = y / x;
Altfel
nrsticle = y / x + 1;
scrie nrsticle;
STOP
Program:
1
2 #include <iostream>
3 using namespace std;
int x, y, nrsticle;
4 int main()
5 {
6 cin >> x >> y;
7 if(y % x == 0)
8 nrsticle = y / x;
else
9 nrsticle = y / x + 1;
10 return 0;
11 }
12
Algoritm:
START
citește a, b, x;
Dacă (a <= x ȘI x <= b) atunci
scrie „DA”;
Altfel
scrie „NU”;
STOP
Program:
1
#include <iostream>
2 using namespace std;
3 int a, b, x;
4 int main()
5 {
6 cin >> a >> b >> x;
7 if(a <= x && x <= b)
8 cout << "DA";
9 else
cout << "NU";
10
return 0;
11 }
12
Este foarte important să ținem cont de ordinea efectuării operațiilor (detalii aici), iar dacă
anumite operații nu se efectuează în ordinea în care dorim să folosim parantezele (doar
paranteze rotunde).
Problema 2. Se citesc de la tastatură două numere întregi, a și b. Să se afișeze pe ecran
semnul produsului celor două numere.
Raționament: Dacă a < 0 sau b < 0 atunci afișează -, altfel afișează +.
D.I.: a, b – întregi
Algoritm:
START
citește a, b;
Dacă (a < 0 SAU b < 0) atunci
scrie „-„;
Altfel
scrie „+”;
STOP
Program:
1
#include <iostream>
2 using namespace std;
3 int a, b;
4 int main()
5 {
6 cin >> a >> b;
7 if(a < 0 || b < 0)
8 cout << "-";
9 else
cout << "+";
10
return 0;
11 }
12
Problemă. Se citesc de la tastatură 3 numere naturale (x, y, z). Să se afișeze pe ecran cel
mai mare dintre acestea.
Raționament: Comparăm pe x cu y. Apoi pe cel mai mare dintre x și y îl comparăm cu z.
D.I. : x, y, z – întregi
Algoritm:
START
citește x, y, z;
Dacă (x > y) atunci
Dacă (x > z) atunci
maxim = x;
Altfel
maxim = z;
Altfel
Dacă (y > z) atunci
maxim = y;
Altfel
maxim = z;
scrie maxim;
STOP
1
2
#include <iostream>
3 using namespace std;
4 int x, y, z, maxim;
5 int main()
6 {
7 cin >> x >> y >> z;
8 if(x > y) // dacă x este mai mare decât y
9 {
10 if(x > z) // dacă x este mai mare și decât z
{
11
maxim = x;
12 }
13 else // dacă z este mai mare decât x
14 // (care este mai mare decât y)
15 {
16 maxim = z;
17 }
18 }
else if(y > z) // dacă y este mai mare decât x și
19
// dacă y este mai mare și decât z
20
{
21 maxim = y;
22 }
23 else // dacă z este mai mare decât y
24 // (care este mai mare decât x)
25 {
26 maxim = z;
27 }
cout << maxim;
28
return 0;
29 }
30
31
Structura repetitivă >>
<< Structura alternativă
Structura repetitivă
Structura repetitivă este un set de instrucțiuni care se repetă până când o condiție nu
mai este îndeplinită. Structura repetitivă poate fi:
D.O. : P – întreg;
Algoritm:
START
citește a, b;
i = 1;
P = 1;
câttimp (i <= b)
P = P * a;
i = i + 1;
scrie P;
STOP
Program:
1
2 #include
3 using namespace std;
4 int a, b, P;
5 int main()
{
6 cin >> a >> b;
7 int i = 1;
8 P = 1;
9 while(i <= b)
10 {
P = P * a;
11 i = i + 1;
12 }
13 cout << P;
14 return 0;
}
15
16
Structura repetitivă cu test final execută o dată setul de instrucțiuni din cadrul
structurii, apoi verifică validitatea condiției. Putem să spunem că structura repetitivă cu
test final este invers decât structura repetitivă cu test inițial.
Forma generală a structurii cu test final:
execută …
câttimp (condiție)
În C++ structura repetitivă cu test final este structura do… while:
do
{
…
} while (condiție)
Să rezolvăm problema anterioară și cu această structură.
Algoritm:
START
citește a, b;
i = 1;
P = 1;
execută
P = P * a;
i = i + 1;
câttimp (i <= b)
scrie P;
STOP
Program:
1
2 #include
3 using namespace std;
4 int a, b, P;
5 int main()
{
6 cin >> a >> b;
7 int i = 1;
8 P = 1;
9 do
10 {
P = P * a;
11 i = i + 1;
12 } while(i <= b);
13 cout << P;
14 return 0;
}
15
16
pentru i <- a, n, x
execută …
a – valoarea inițială a variabilei contor i
n – valoarea finală a variabilei contor i
x – pasul de incrementare al variabilei i
În C++ structura cu număr cunoscut de pași este structura for:
for(int i = a; i <= n; i++)
{
…
}
Problemă. Se citește de la tastatură un număr natural n. Să se afișeze pe ecran suma
primelor n numere naturale.
Raționament: Pentru fiecare i <= n se adaugă la sumă al i-lea număr natural.
D.I. : n – întreg;
D.O. : S – întreg;
Algoritm:
START
citește n;
S = 0;
pentru i<-1, n, 1
S = S + i;
scrie S;
STOP
Program:
1
2 #include
3 using namespace std;
4 int n, S;
int main()
5 {
6 cin >> n;
7 S = 0;
8 for(int i = 1; i <= n; i++)
9 {
S = S + i;
10 }
11 cout << S;
12 return 0;
13 }
14
D.O. : P – întreg;
Algoritm:
START
citește a, b;
i = 1;
P = 1;
câttimp (i <= b)
P = P * a;
i = i + 1;
scrie P;
STOP
Program:
1 #include
using namespace std;
2 int a, b, P;
3 int main()
4 {
5 cin >> a >> b;
6 int i = 1;
P = 1;
7 while(i <= b)
8 {
9 P = P * a;
10 i = i + 1;
}
11 cout << P;
12 return 0;
13 }
14
15
16
Structura repetitivă cu test final execută o dată setul de instrucțiuni din cadrul
structurii, apoi verifică validitatea condiției. Putem să spunem că structura repetitivă cu
test final este invers decât structura repetitivă cu test inițial.
Forma generală a structurii cu test final:
execută …
câttimp (condiție)
În C++ structura repetitivă cu test final este structura do… while:
do
{
…
} while (condiție)
Să rezolvăm problema anterioară și cu această structură.
Algoritm:
START
citește a, b;
i = 1;
P = 1;
execută
P = P * a;
i = i + 1;
câttimp (i <= b)
scrie P;
STOP
Program:
1
2 #include
3 using namespace std;
4 int a, b, P;
5 int main()
{
6 cin >> a >> b;
7 int i = 1;
8 P = 1;
9 do
10 {
P = P * a;
11 i = i + 1;
12 } while(i <= b);
13 cout << P;
14 return 0;
}
15
16
pentru i <- a, n, x
execută …
a – valoarea inițială a variabilei contor i
n – valoarea finală a variabilei contor i
x – pasul de incrementare al variabilei i
În C++ structura cu număr cunoscut de pași este structura for:
for(int i = a; i <= n; i++)
{
…
}
Problemă. Se citește de la tastatură un număr natural n. Să se afișeze pe ecran suma
primelor n numere naturale.
Raționament: Pentru fiecare i <= n se adaugă la sumă al i-lea număr natural.
D.I. : n – întreg;
D.O. : S – întreg;
Algoritm:
START
citește n;
S = 0;
pentru i<-1, n, 1
S = S + i;
scrie S;
STOP
Program:
1
2 #include
3 using namespace std;
4 int n, S;
int main()
5 {
6 cin >> n;
7 S = 0;
8 for(int i = 1; i <= n; i++)
9 {
S = S + i;
10 }
11 cout << S;
12 return 0;
13 }
14
• Apelul unei functii se face scriind intr-o expresie numele functiei urmat de
lista parametrilor actuali.
(ex: m ← minim(2, 3))