3 Algoritmi 1
3 Algoritmi 1
3 Algoritmi 1
Algoritmi
3.1. Reprezentarea algoritmilor
Algoritmul = concept abstract.
Reprezentarea algoritmului = implementarea fizică a algoritmului.
Pseudocod (cod fals) = limbaj artificial folosit pentru descrierea unui algoritm, este
apropiat de limbajul de programare. În propoziții se folosesc cuvinte cheie pentru descrierea
structurilor de control.
Pseudocodul permite descrierea datelor, folosindu-se cuvinte cheie: întreg, real, logic,
caracter, șir.
În cazul pasului de comunicare se folosește citește (read) pentru operația de intrare și
scrie (write) pentru operația de ișire.
1
3.2. Principiile programării structurate
1. Structura liniară
Structura liniară este cea mai simplă structura de control din algoritmică. Structura liniară sau
secvențială execută instrucțiunile în ordinea în care apar, de la prima la ultima, fără salturi peste instrucțiuni și
fiecare instrucțiune se execută doar o singură dată.
stop
Probleme:
Manual pg. 38 exemplu și pg. 39 p. 2
Într-o clasă sunt e elevi, știind că numărul băieților este cu b mai mare decât al fetelor, afișați câte fete și
câți băieți sunt în clasă. (c p9 e1)
Realizați un program care citește un număr de ani calendaristic i, apoi tipărește numărul de luni, zile și ore
cuprinse în acești ani. Se consideră un an are 365 zile. (c p9 e4).
Un melc se deplasează cu viteza v km/săptămână, realizați un program care calculează timpul necesar
melcului (în ore) pentru a străbate distanța d dată în m. Ex. v=3km/săptămână și d=5m (c p9 e11).
2. Structura alternativă
Prin această structură se face selectarea între două sau mai multe acțiuni în funcție de îndeplinirea sau
neîndeplinirea unei condiții.
2
Problema. Se citesc două numere întregi a, b. Să se determine pentru ax + b = 0 rădăcina ecuației x.
altfel
x = - b / a;
scrie x;
sfarsit
Problema. Citesc media la o disciplină m, dacă este mai mare sau egală cu 5 elevul este promovat altfel este
corigent.
altfel
scrie „eroare”; Scrie promovat Scrie eroare
sfârșit
stop
Exemplu: . Se citeste de la tastatură un număr n să se afișeze dacă numărul este par sau impar
3
Problema. Se citesc două numere întregi a, b. Calculați maximul dintre cele două numere.
start
întreg a, b;
întreg max; citește a, b
început
citește a, b; DA
NU
dacă (a > b) atunci
a>b
max = a
altfel maxb maxa
max = b;
scrie max;
sfarsit scrie max;
stop
- Structura alternativă generalizată la această structură se face selectarea între mai multe acțiuni în
funcție de o variabilă de memorie numită selector, care poate lua mai multe valori, dintr-o mulțime ordonată
de același tip cu selectorul (in case... case1...).
în cazul că selector
cazul v1: acțiune 1;
cazul v2: acțiune 2;
.......................
cazul vn: acțiune n;
alfel
acțiune n + 1;
Exemplu: Se citește de la tastatură un număr n să se afișeze dacă numărul este par sau impar.
4
Probleme pg. 41-43 1
𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 ≠ 0
- Se introduce de la tastatură un număr 𝑖𝑛𝑣 = { 𝑛
0 𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 = 0
n. Să se calculeză inversul acestui
dacă n ≠ 0 inversul are valoarea 1/n, alfel are
număr, inv
voaloarea 0
- Se introduce de la tastatură un număr n. Să se 𝑛 𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 ≥ 0
mod(n) = {
înlocuiască n cu modulul său, definit astfel. −𝑛 𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 < 0
3. Structura reptitivă
i = contor
vi = valoarea inițială
vf = valoarea finală
pas = valoarea cu care se incrementează /
decrementează contorul
5
Problema. Se citește de la tastatură n. Să se calculeze suma numerelor naturale până la n.
S = 1 + 2 + 3 + ...+ n
s = s+i
scrie s;
i =i+1
stop
sfârșit_pentru
ma = s / nr;
scrie ma;
- Se citește de la tastatură n. citește n;
Scrieți pseudcodul care e = 0;
calculează valoarea pentru i1, n, [pas 1] execută
expresiei e = e + i * (2 * i + 1)
e=1*3+2*5+....+n*(2n+1) sfârșit_pentru
scrie e;
6
- Scrieți un algoritm care pentru i1, n, [pas 1] execută
citește de la tastatură un pentru j1, i, [pas 1] execută
număr n apoi generează și afișează j
afișează primii n termeni ai sfârșit pentru
șirului 1, 1, 2, 1, 2, 3, 1, 2, 3,
4, 1, 2, 3, 4, 5, ....... (c p28 sfârșit_pentru
e1)
- Se citesc două numere a și p = 1;
b. Calculați ab. pentru j1, b, [pas 1] execută
p = p * a;
sfârșit pentru
afișează p;
- Se citește de la tastatură n. s = 0; p =1;
Să se calculeze suma celor pentru i1, n, [pas 1] execută
de rang par și produsul celor dacă i%2==0 atunci
de rang impar. s = s + i;
altfel
p = p * i;
sfârșit_pentru
s = s + p;
sfârșit_pentru
afișează s;
s = s + p;
7
sfârșit_pentru
afișează s;
Probleme pg. 46-47
Rezolvați probleme pe pbinfo Tema 1 06-12.10.2023: 498 549 509 805 798 797 914 524 8 922 351
while condiție do
acțiune
endwhile;
repeat
acțiune;
until condiție;
execută
acțiune;
cât_timp condiție;
do
acțiune;
while condiție;
Problemă Să se facă suma numerelor citite de la tastatură până la citirea numărului 0.
Structură repetitivă Structură repetitivă condiționată posterior
condiționată anterior
real a, s; real a, s; real a, s;
început început început
s0; s0; s0;
citește a; citește a; citește a;
cât_timp a!=0 execută repetă execută
ss+a; ss+a; ss+a;
citeste a; citeste a; citeste a;
sfârșit_cât_timp; până_când a=0; cât_timp a != 0;
scrie s; scrie s; scrie s;
sfărșit. sfârșit sfârșit
8
Atenție
Orice structură repetitivă condiționată anterior poate fi transformată într-o structură repetitivă
condiționată posterior. Și invers.
Orice structură repetitivă cu număr cunoscuți de pași poate fi transformată într-o structură repetitivă
cu număr necunoscuți de pași. Reciproca nu este valabilă.
Probleme
citeste x;
scrie p,” ” n ;
sfârșit_pentru
9
scrie max;
4. Pentru un număr natural n>1, să se afișeze factorii cout<<d<<”^”<<p<
primi și puterile factorilor primi ai lui n.
5. Se citește un număr natural să se calculeze suma
cifrelor sale. citește a;
a c s s0;
123 0 0 cât_timp (a!=0)
12 3 3 c = a % 10;
1 2 5 s = s+ c;
0 1 6 a = a/10;
scrie s;
Exerciții
Se consideră pseudocodul:
citește a, b; Î. Ce se afișează pentru a= 3 b =11 ?
daca a < b atunci R. Afișează 10, 8, 6, 4
sa
ab Î. Perechile de valori pentru care se afișează:
bs 0, -2, -4
R.
pentru i a, b, -1 execută 0, -4 -4, 0
dacă a % 2 = 0 atunci 0, -5 -5, 0
scrie a; 1, -4 -4, 1
1, -5 -4, 1
citește n, nr. întreg pozitiv n = 45 ce se afișează (15)
d 1;
pentru i 2, [n/2] execută scrieți valorile de două cifre pentru cre se
dacă n % i = 0; afișează 5 (10, 15, 25)
di;
primele cinci numere (2, 3, 5, 7, 11)
scrie d;
Î. Ce se afișează pentru 17 22 13 101 2 7 5 0
x y
17 22 2
22 13 2
13 101 1
101 7 1
7 5 7
5 0 5
0
10