Sunteți pe pagina 1din 10

3.

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.

Structurile de control folosite în scrierea algoritmilor sunt:


- Structura liniară (secvențială)
- Structura alternativă (decizională)
- Structura repetitivă (iterativă)
Pentru a delimita secvența de descriere a datelor de secvența de descriere a pașilor
algoritmului, pașii algoritmului sunt încadrați de cuvinte cheie început... sfârșit (begin...end)

Schema logică este un mijloc de descriere a algoritmilor prin reprezentare grafică.


Fiecărui tip de operație îi este consacrată o figură geometrică (un bloc tip) în interiorul
căreia se va înscrie operația din pasul respectiv, iar succesiunea operațiilor este indicată prin
săgeți.
Blocuri utilizate în realizarea schemelor logice:
Marchează începutul / sfârșitul unui algoritm
START
reprezentat în schema logică
STOP

Se utilizează pentru implementarea operațiilor


intrare / ieșire

Se utilizează pentru scrierea condițiilor în


structurilor alternativă sau repetitivă

Se utilizează pentru scrierea operațiilor de


atribuire (atunci când o variabilă primește o
valoare)

Se utilizează pentru conectarea liniilor care leagă


diferitele figuri geometrice și marchează un de
intersecție.

Legăturile dintre blocurile schemei logice se


realizează numai prin intermediul săgeților, pentru
a stabili sensul de parcurgere al algoritmului.

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ă.

Din cadrul structurii liniare fac parte următoarele instrucțiuni:


a. de citire;
b. de afișare;
c. de calcul
d. de atribuire;
e. orice combinație liniară de cele 4.
Problema. Se citesc trei numere întregi a, b, c. Să se calculeze media aritmetică
Pseudocod Schema logică
start
întreg a, b, c;
real m; citește a, b, c
început
citește a, b, c;
m(a+b+c)/3 m(a+b+c)/3
scrie m;
sfârșit scrie m;

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.

- Structura alternativă simplă

dacă condiție atunci


instrucțiuni p

dacă condiție atunci


instrucțiuni p
alfel
instrucțiuni q

2
Problema. Se citesc două numere întregi a, b. Să se determine pentru ax + b = 0 rădăcina ecuației x.

Pseudocod Schema logică


întreg a, b; Temă
real x;
început
citește a, b;
dacă (a == 0) atunci
dacă (b == 0 ) atunci
scrie “infinitate de soluții”
altfel
scrie “0 soluții”

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.

Pseudocod Schema logică


întreg m; Temă
început start
citește m;
dacă (m >= 1 si m < 5 ) atunci Citeste m
scrie “corigent”
DA NU
altfel m>=1 &&m <5
dacă (m >= 5 si m <= 10) atunci

scrie “promovat” Scrie corigent DA NU


m>= 5 &&
m<=10

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.

Pseudocod Schema logică

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 maxb maxa
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;

Problema. Se citesc de la tastatură numerele întregi n, a, b, c. Să se calculeze valoarea expresiei e definită


astfel:
Pseudocod
întreg n, a, b, c; (𝑎 + 𝑏)
real e; 𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 = 1
𝑐
început 𝑏+𝑐
citeste n, a, b, c; 𝑒= 𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 = 2
𝑎
în cazul că n 𝑐+𝑎
caz 1: e(a+b)/c { 𝑏 𝑝𝑒𝑛𝑡𝑟𝑢 𝑛 = 3
caz 2: e(b +c)/a
caz 3: e(c+a)/b
sfârșit în caz că
scrie e;
sfârșit.

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

- În funcție de punctajul p, citit de la tastatură, obținut la proba de competențe digitale se va


afișa pentru p între: 0-19 puncte - nu se acordă nivel de competență, 20-30 puncte -
utilizator ÎNCEPĂTOR, 31-55 puncte - utilizator de nivel MEDIU, 56-74 puncte - utilizator
de nivel AVANSAT, 75-100 puncte - utilizator EXPERIMENTAT
- Find date două numere x și y citite de la tastatură să se verifice dacă x este divizibil cu y
afișându-se un mesaj corespunzător (c p4 f 3.1.1)
- Să se verifice dacă un an calendaristic este bisect sau nu. Un an este bisect dacă: este divizibil
cu 4 și nu este divizibul cu 100 sau este divizibil cu 400. (c p6 f.4.1)
- Se citesc trei numere a, b, c. Să se numere câte sunt pare.
- Se citesc trei numere a, b, c. Să se afle dacă pot fi laturile unui triunghi. În caz afirmativ
calculați aria și afișați ce tip de tringhi este: ioscel, echilateral, dreptunghic, oarecare,
dreptunghic isoscel).
- Se citește de la tastatură un număr n să se afișeze dacă numărul este pozitiv, negativ sau egal
cu zero.
switch (a) { case 1: cout << "…"; break; case 2: cout << "…";}

Temă – implementați în C++ o problemă.

3. Structura reptitivă

- Structura repetitivă cu număr cunoscuți de pași


Sunt necesare două variabile: una contor (i) care numără de câte ori s-a repetat corpul ciclului și un
număr de repetări (n) care determină de câte ori trebuie să se excute repetat corpul ciclului. Condiția de
executare repetată a corpului ciclului este ca valoarea i <= n.

Pseudocod Schema logică


pentru contor vi, vf, [pas v] execută
acțiune
sfârșit _pentru

for contor vi, vf, [by v] do


acțiune
end_for

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

Pseudocod Schema logică


întreg n, s; start
început
citeste n;
s = 0; citește n
pentru i1, n execută
s = s + i; s = 0, i =1
sfarsit_pentru
scrie s;
sfarsit. 0
1
i< =n

s = s+i
scrie s;

i =i+1
stop

Problema Se citește de la tastatură n. Să se calculeze suma numerelor pare (sau impare) de la 1


la n. (par)
pentru i1, n, [pas 1] întreg n, s; Ex.
execută început n i s
dacă i%2 == 0 atunci citește n; 4 1 0
s = s + i; s = 0; 2 2
sfârșit dacă pentru i2, n, pas 2 execută 3 2
s = s + i; 4 6
sfârșit_pentru sfârșit_pentru 5

scrie “suma numerelor pare”, s;


sfârșit.
- Se citește de la tastatură n. citește n;
Să se calculeze media nr = 0; s = 0;
aritmetică a numerelor pare pentru i1, n, [pas 1] execută
cuprinse în intervalul [1, n] dacă i % 2 == 0 atunci
s = s + i;
nr = nr + 1;
sfârșit dacă

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 i1, 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 i1, n, [pas 1] execută
citește de la tastatură un pentru j1, 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 j1, 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 i1, 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

- Calculați suma s = 0; p =1;


S = 1+1*2+1*2*3+... 1*2*3...*n citește n;
pentru i1, n, [pas 1] execută
pentru j1, i, [pas 1] execută
p=p*j
sfârșit pentru

s = s + p;
sfârșit_pentru
afișează s;

- Să se afișeze primele n pentru i1, n, [pas 1] execută


numere naturale divizibile dacă i % 3==0 sau i % 5==0
cu 3 sau cu 5. atunci afișează i
sfârșit_pentru
- Realizați un program care s = 0;
citește de la tastură un pentru i1, n, [pas 1] execută
număr natural n și s = s + i;
calculează suma primelor sfârșit_pentru
numere naturale n. afișează s;
S=1+2+...+n (c p11 e 18)
s = 1; p =1;
- Calculați suma citește n, a;
S = 1 – a + a2 ..... + (-1)n * an pentru i1, n, [pas 1] execută
pentru j1, i, [pas 1] execută
p = p * a * (-1);
sfârșit pentru

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

- Structura repetitivă cu număr necunoscuți de pași condiționată anterior


Testează condiția de terminare a ciclului înainte de executarea corpului ciclului.
Pseudocod Schema logică
Cât_timp condiție execută
Acțiune;
sfârșit_cât_timp;

while condiție do
acțiune
endwhile;

- Structura repetitivă cu număr necunoscuți de pași condiționată posterior


Testează condiția de terminare a ciclului după executarea corpului ciclului.

Pseudocod Schema logică


repetă
acțiune;
până_când condiție;

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
s0; s0; s0;
citește a; citește a; citește a;
cât_timp a!=0 execută repetă execută
ss+a; ss+a; ss+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.

Structură repetitivă condiționată anterior Structură repetitivă condiționată posterior


acțiune inițializare; acțiune inițializare;
cât_timp condiție execută repetă
acțiune_prelucrare; acțiune_prelucrare;
acțiune_modificare; acțiune_modificare;
sfârșit_cât_timp; până_când not condiție;

 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ă.

Structură repetitivă cu număr cunoscuți de pași Structură repetitivă cu număr necunoscuți de


pași condiționată posterior
pentru contor vi, vf, [pas v] execută contor  vi;
acțiune cât_timp contor <= vf
sfarsit _pentru acțiune_prelucrare;
acțiune_modificare;
sfârșit_cât_timp;

Probleme

1. Se citesc mai multe numere până când ultimul număr p = 0; n = 0;


citit este zero. Să se afle câte numere sunt pozitive și citește a;
câte negative. cât_timp a != 0
if (a>0)
p = p +1;
else
n = n +1;

citeste x;

scrie p,” ” n ;

2. Se citește un număr natural n. Să se afișeze toate Temă


numerele naturale mai mici decât n care sunt citește n;
divizibile cu 3. pentru i1, n, [pas 1] execută
dacă ( i % 3 == 0)
scrie i ;
sfârșit_dacă

sfârșit_pentru

3. Sa se afișeze cifra maximă a unui număr natural citește a;


nenul n. Ex. Pentru n=2875, cifra maximă este 8 max0;
cât_timp (a!=0)
if (max < a%10)
max a % 10;
a = a/10;

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 s0;
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
sa
ab Î. Perechile de valori pentru care se afișează:
bs 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)
di;
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

S-ar putea să vă placă și