Académique Documents
Professionnel Documents
Culture Documents
Algoritmi
1.1 Etapele rezolvării unei probleme
Ex. Presupunem ca fiecare elev dintr-o clasă are 4 note la informatică si o a cincea notă in teză. Determinaţi un
algoritm pentru calculul mediei fiecărui elev.
Pentru rezolvarea unei probleme cu ajutorul calculatorului trebuie parcurse următoarele etape: analiza
problemei
1. găsirea unei metode de rezolvare a problemei
2. implementarea metodei de rezolvare intr-un limbaj de programare
3. testarea programului si corectarea erorilor
1.3 Date
Orice algoritm lucrează cu date. Data este un modul de reprezentare a informaţiei accesibil calculatorului cu
care se poate opera pentru a obţine noi informaţii.
Data = ( identificator, valoare, tip)
1. -de intrare
-intermediare
-de ieşire
2. - constante (date a căror valoare rămâne constantă ori de câte ori rulăm programul/algoritmul
- variabile
1. Înainte de a folosi o variabilă in algoritm ea trebuie declarată, adică precizat tipul ei.
2. O variabilă poate fi referită printr-un nume si are asociată o valoare. Numele variabilei nu se schimbă pe
parcursul algoritmului dar valoarea acesteia se poate modifica.
3. O variabilă poate reţine numai valori de tipul declarat.
tipul numeric
1.4 Expresia
a ← a + 3 expresie
operanzi operatori
Operatorii sunt caractere speciale (+, -, /, etc.) sau cuvinte cheie (mod, end, etc.) prin intermediul cărora se
reprezintă operaţiile ce se efectuează in cadrul unui algoritm.
Cuvintele cheie sunt cuvinte rezervate ce nu mai pot fi folosite ca identificatori pentru date deoarece au un
înţeles bine stabilit în cadrul reprezentării unui algoritm.
A. Operatori de atribuire: nume ←expresie
întreg n
n←100 //n=100
n←n+100 //n=200
B. Operatori matematici: sunt operatori binari (acţionează asupra doi operanzi) şi se aplica pe date de tip numeric si
furnizează un rezultat de tip numeric.
+, -, *, / (împărţire reala)
real a;
a←0;
a←a+4;
a←5-8;
a←a*6
a←a/2 //a=-9
C. Operatori raţionali (de comparaţie): <, >, <=, >=, <> diferit, = (egalitate)
a←1 a←2
a=1 →true a=1 →false
- sunt operatori binari ce se aplică pe operanzi de tip numeric şi logic
D. Operatori logici
- se aplica pe operanzi de tip logic şi furnizează un rezultat de tip logic (F/T sau 0,1)
not – negaţie logica
and – „şi” logic or – „sau” logic
a b a and b a b a or b
T T T T T T
T F F T F T
F T F F T T
F F F F F F
Probleme:
1. Sa se evalueze expresiile:
a) 5*7*4 + 4 div 2 – 8 mod 2 div 4= 140 + 2 – 0 div 4 = 142
b) 32735 mod 10 + 32735 div 10 mod 10 + 32735 div 100 mod 10= 5 + 3 + 7= 15
c) (3<=5) and not (7>8)= T and T= T
d) (4<3) or (7>9 mod sqrt(4)) = F or T = T
2. Scrieţi condiţia prin care testaţi dacǎ valoarea unui număr întreg n este:
a) Un număr impar;
n mod 2 = 1
n mod 2 <> 0
b) Un număr divizibil cu 3 sau cu 5;
(n mod 3 = 0) or (n mod 5 = 0)
c) Un număr divizibil cu 3 şi cu 5;
(n mod 3 = 0) and (n mod 5 = 0)
d ) Un număr divizibil cu 3 dar nu şi cu 5.
n mod 3= 0 and not(n mod 5 = 0)
3. Scrieţi condiţiile în care se pot efectua următoarele calcule:
a) a) a/b b) (x+y) mod z c) sqrt (a+1) d) sqrt (a*a +b*b)
b<>0 y<>0 si (x+z), z întregi a+1>=0 nici o condiţie
4. Precizaţi condiţia pe care trebuie sa o îndeplinească trei date ca sa reprezinte lungimile laturilor unui triunghi.
(a+b>c) and (b+c>a) and (a+c>b)
5. Dacǎ a, b, c reprezintă laturile unui triunghi precizaţi condiţia pe care trebuie sa o îndeplinească aceste date pentru ca
triunghiul să fie:
a) echilateral b) isoscel
(a=b) and (b=c) (a=b) and (b<>c) or )b=c) and (c<>a) or (a=c) and (b<>c)
c) dreptunghic
(a*a+b*b=c*c and a<c and b<c) or (b*b+c*c=a*a and b<a and c<a) or (a*a+c*c=b*b and a<b and c<b)
d) dreptunghic isoscel
(a*a+b*b=c*c and a<c and b<c and a=b) or (b*b+c*c=a*a and b<a and c<a and b=c) or (a*a+c*c=b*b and a<b and c<b and
a=c)
6. Pentru a testa ultima cifra a unui număr întreg n, aceasta se extrage cu expresia cifra n mod 10. Scrieţi condiţia prin care
testaţi dacǎ ultima cifra a unui număr n este:
a) egala cu 2 c) diferită de 3 sau 5 d)para
n mod 10=2 n mod 10<>3 or n mod 10 <>5 n←n mod 10;
n mod 2 <> 1 or n mod 2=0
8. Ce valori poate lua expresia e pentru a ∈ {−5 ,−10 ,−20} şi b ∈ {4 ,16 } cu e b+4>1 or a+b <0 ?
T
13. Fie a, b,c trei numere reale ce reprezintă lungimile laturilor unui triunghi. Sa se scrie un algoritm care sa calculeze şi sa
afişeze perimetrul şi aria triunghiului.
real a, b, c, P, A;
citeşte a, b, c;
P←a+b+c
A←sqrt(P/2(P/2-a)*(P/2+b)*(P/2+c))
scrie P, A;
14. Fie A şi B doua puncte în plan, specificate prin coordonatele lor carteziene. Sa se scrie un algoritm prin care sa calculeze si
sa afişeze lungimea segmentului AB.
y
real AB, x1, x2, y1, y2;
citeste x1, x2, y1, y2;
AB←sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
A scrie AB;
y2
B
y1
x1 x2 x
15. Se citeşte de la tastatura un număr natural x cu exact 5 cifre. Scrieţi un algoritm ce afişează:
a) produsul cifrelor de rang impar. b) media aritmetica a cifrelor de rang par.
întreg a, b, c, d, e, x; întreg a, b, c, d, e, x;
citeşte x; citeşte x;
real P; real M;
e← x mod 10; e← x mod 10;
x← x div 10; x ←x div 10;
d← x mod 10; d← x mod 10;
x← x div 10; x←x div 10;
c ←x mod 10; c← x mod 10;
x← x div 10; x← x div 10;
b ←x mod 10; b ←x mod 10
x← x div 10; x← x div 10
a ← x mod 10; a← x mod 10
P←a*c*e; M←(b*2)/2
scrie P; scrie M;
16. Se citesc de la tastatura doua numere naturale a şi b. Scrieţi un algoritm care, fără a efectua înmulţirea numerelor afişează
ultima cifra a produsului a*b.
întreg a, b, x, y, P;
citeşte a, b;
a mod 10←x
b mod 10←y
P←x*y mod 10
scrie P;
17. Scrieţi un algoritm ce citeşte un număr natural x cu exact patru cifre, apoi afişează media aritmetica a cifrelor sale.
întreg x, a, b, c, d;
citeşte x;
real M;
d← x mod 10;
x← x div 10;
c← x mod 10;
x← x div 10;
b← x mod 10;
x← x div 10;
a ←x mod 10;
M←(a+b+c+d)/4
scrie M;
18. Se citeşte de la tastatura un număr natural x de 4 cifre. Sa se afişeze numerele obţinute prin aplicarea următoarelor operaţii:
a) schimbarea primei cifre cu ultima; b) schimbarea cifrelor din mijloc intre ele.
întreg a, b, c, d, x; întreg a, b, c, d, x;
citeşte x; citeşte x;
d← x mod 10; d← x mod 10;
x← x div 10; x← x div 10;
c← x mod 10; c ←x mod 10;
x← x div 10; x ←x div 10;
b← x mod 10; b← x mod 10;
x← x div 10; x ←x div 10;
a← x mod 10 a← x mod 10;
x←d*1000+b*100+c*10+a; x←a*1000+c*100+b*10+d;
scrie x; scrie x;
19. Calculați:
a) 2*8*50 + 6 div 4 – 13 mod 7 div 4= 800+1-1=800 b) (6<=6) and (7<=8 or 11 mod 3 =1)= T and T=T
20. Scrieți o expresie (condiție) ce are valoarea adevărat (True) dacǎ și numai dacǎ:
a) Valorile variabilelor a, b și c sunt în ordine strict descrescătoare.
(a>b) and (b>c)
b) Valoarea memorata în variabila reala x este în intervalul [a, b] U [c, d] cu a, b, c și d variabile reale.
(x>=a and x<=b) or (x>=c and x<=d)
22. Scrieți un algoritm ce afișează aria și perimetrul unui dreptunghi dacǎ se citesc de la tastatura lungimea și lățimea.
întreg a, b;
real A, P;
citeşte a, b;
P←2*(a+b)
A←a*b
scrie A, P;
23. Scrieți un algoritm ce calculează și afișează cifra de control a unui număr n de cel mult 4 cifre citit de la tastatura. Cifra de
control a unui număr întreg se obține efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. pana se obține o suma
formata dintr-o singura cifra. Exemplu: Cifra de control a numărului n= 1971 este 9. (1+9+7+1=18; 1+8=9)
întreg a, b, c, d, s, x, cifra;
citeşte x;
d←x mod 10
x←x div 10
c←x mod 10
x←x div 10
b←x mod 10
x←x div 10
a←x mod 10
s←a+b+c+d
cifra←(s mod 10)+(s div 10)
scrie cifra;
TEST nr.1
1) Calculaţi:
a) 20-3*13div7+26mod9div3 b)not(9=6) and(7>=7 or 13 mod 5=0)
raspuns: a) 17 b)A
a−b
6a
2) Cum scriem corect (la informatica)? y=x- 2
si z = x - y * x
b c−
y
raspuns y←x*x-6*a/b z←x-y*(a-b)/(c-x/y)
3)Scrieti o expresie logica (conditie) ce are valoarea adevarat (true) daca si numai daca:
a)Numarul întreg n are minimum 2 cifre
b) Numărul n nu aparţine intervalului [a, b) unde a<b
c) Numărul întreg n este par dar nu este diviyibil cu 3.
raspuns a) n>=10
b)n<a or n>=b
c)n mod 2 =0 and n mod 3<>0
5) Se citesc doua numere naturale a şi b, fiecare având cel mult 2 cifre( adică a<100 si b<100). Scrieţi un algoritm ce:
a) Calculează şi afişează suma cifrelor celor doua numere.
b) Formează şi afişează un nou numar alcătuit din ultima cifră a lui a şi ultima cifră a lui b, in această ordine.
raspuns întreg a, b, c, d, e, f
citeşte a, b;
d←a mod 10
c←a div 10
f←b mod 10
e←b div 10
scrie c+d+e+f;
scrie d*10+f
efect:se evaluează condiţia dacă valoarea condiţiei este adevărat şi atunci se execută instrucţiune 1. Dacă valoarea este fals, se
execută instrucţiune 2.
Obs. 1."Dacă" marchează începutul structurii, iar "sfârşit dacă" sfârşitul ei.
2. Pe fiecare ramură pot exista mai multe instrucţiuni
3. Dacă pe ramura altfel nu este necesară efectuarea niciunei operaţii atunci ea poate lipsi.
Exerciţii 1. Se citește de la tastatura un număr întreg x. Scrieți un algoritm ce calculează și afișează modulul lui x.
întreg x;
citeşte x;
dacă (x>=0)
atunci scrie x;
altfel scrie –x;
sfârşit dacă
2. Scrieți un algoritm pentru rezolvarea ecuației de gradul II de forma ax2+bx+c=0, unde coeficienții a,b și c se citesc de la
tastatura. Se vor trata toate cazurile posibile (delta negativ, a=0 etc.)
real a, b, c, x, delta;
citeşte a, b, c, xş
daca (x=0)
atunci daca (b=0)
atunci daca(c=0)
atunci scire,,Ecuaţia are o infinitate de soluţii"
altfel scrie ,,Ecuaţia nu are soluţii"
sf.daca
altfel x←-c/b
scrie x
sf.daca
altfel delta←b*b-4*a*c
atunci scire "ecuaţia nu are soluţii reale"
altfel scrie(-b+sqrt(delta))/(2*a), (-b-sqrt(delta))/(2*a);
sf.daca
3.Se citesc 3 numere întregi a, b și c. Scrieți un algoritm ce afișează suma nr. pare și cate dintre ele sunt impare.
întreg a, b, c, suma, nr;
citeşte a, b, c;
suma←0
nr←0
daca (a mod 2 =0)
atunci suma←suma+a
altfel nr←nr+1
sf.daca
daca (b mod 2=0)
atunci suma←suma+b
altfel nr←nr+1
sf.dacă
dacă (c mod 2=0)
atunci suma←suma+c
altfel nr←nr+1
sf.dacă
scrie suma, nr
TEST nr. 2
2)Să se afişeze cel mai mare număr par dintre 2 numere introduse de la tastatură. Dacă numerele citite sunt ambele impare,
atunci să se afişeze suma lor.
raspuns
întreg a, b
citeşte a, b;
dacă (a mod 2 =1)
atunci dacă (b mod 2 =1)
atunci scrie a+b
altfel scrie b
sf.dacă
altfel dacă (b mod 2=1)
atunci scrie a
altfel dacă (a>b)
atunci scrie a
altfel scrie b
sf.dacă
sf.dacă
sf.dacă
3) Se consideră 2 mulţimi A şi B, fiecare fiind formată din elemente consecutive crescatoare. Cunoscându-se primul element din
fiecare mulţime şi nr. de elmente al mulţimii, determinaţi intersecţia lor. Dacă intersecţia este vidă se va afişa un mesaj.
Verificaţi ca nr. de elemente citite să fie pozitiv. Ex.: Intrare: 2(primul element al mulţimii A), 4(nr. de elemente al mulţimii),
5(primul element al mulţimii B), 3(nr. de elemente al celei de+a doua mulţimi).(A={2,3,4,5}, B={5,6,7}) Iesire: 5 1.
raspuns
întreg a, b, x, y, c, d, max, min
citeşte a, b, x, y
c←a+x
d←b+y
dacă(x>0 and y>0)
atunci dacă(a>b)
atunci max←a
altfel max←b
sf.dacă
dacă (c>d)
atunci min←d
altfel min←0
sf.dacă
dacă (max<=min)
atunci scrie max, min
altfel scrie "mţ. vidă"
sf.dacă
altfel scrie "nr. incorecte"
sf.dacă
2.3)Structuri repetitive
EFECTUL
I se evaluează condiţie
II dacă valoarea condiţiei este F, se iese din instrucţiunea cât timp
III dacă valoarea condiţiei este A se execută instrucţiuni apoi se revine la pasI
OBS
-instrucţiunile se execută repetat cât timp valoarea condiţiei este adevărată. Pentru ca ciclul să nu fie infinit este obligatoriu ca
instrucţiunile ce se execută să modifice cel puţin una din variabilele ce intervin în condiţie astfel încât aceasta să poată lua
valoarea F
Exerciţii
1. Se citesc numere întregi de la tastatura pana la întâlnirea lui 0. Scrieți un algoritm ce determina minimul/maximul dintre
numerele citite.
întreg n, min, max;
citeşte n;
min←n
cât timp (n<>=) execută
dacă (n<min) atunci min←n
sf.dacă
dacă (n>max) atunci max←n
sf.dacă
citeşte n
sf. cât timp
scrie min, max
2. Se citește de la tastatura un număr natural d, apoi se citesc succesiv numere naturale atâta timp cat suma nume-relor citite nu
depaseste valoarea d. Sa se afișeze suma numerelor ce se divid cu 5 dintre cele citite.
întreg d, n, ST, S5
citeşte d
citeşte n
ST←n
S5←0
cât timp (ST<d) execută
dacă ( n mod 5=0)
atunci S5←S5+n
sf.dacă
citeşte n
ST←ST+n
sf. cat timp
scrie S5
3. Sa se afișeze inversul lui n și sa se determine dacǎ n este palindrom (citit de la st->dr și de la dr->st este același).
Se citesc numere întregi de la tastatura pana la întâlnirea lui 0.
întreg n, inv, cifra, oldN
citeşte n
inv←0
oldN←n
cat timp (n<>0) execută
cifra←n mod 10
inv←inv*10+cifra
n←n div 10
sf. cat timp
daca (oldN=inv) atunci scrie "palindrom"
sf.daca
2.3.1.2)condiţionate posterior (cu test final)
repetă execută
instrucţiuni instrucţiuni
pana cand (<condiţie>) cât timp (<condiţie>)
EFECT EFECT
repetă grupul de instrucţiuni până când condiţia devine execută repetat grupul de instrucţiuni atâta timp cât condiţia
adevărată este adevărată
OBS
diferenţa dintre structurile repetitivă cu număr necunoscut de paşi condiţionate posterior si cele anterior este ca: grupul de
instrucţiuni se executa cel puţin o dată la structurile condiţionate posterior.
Exerciţiu
Să se citească n numere de la tastatură.
întreg n, a; întreg n, a;
citeşte n citeşte n
repetă execută
citeşte a citeşte a
n←n-1 n←n-1
până când (n=0) cat timp (n>0)
1. variabila contor(trebuie declarată) se foloseşte pentru a număra de câte ori s-a executat/repetat grupul de instrucţiuni
2. dacă incrementarea contorului se face cu 1, atunci pasv poate să lipsească.
3. EFECTUL
pasI – se atribuie variabilei contor valoarea lui vi. vi poate sa fie variabila sau constanta numaerica întreagă
pas II – dacă contorul este mai mare decât vf, unde vf-valoare finală(constantă sau variabilă), atunci se iese din structura
repetitivă. Dacă contorul este ≤ decât vf atunci se execută grupul de instrucţiuni şi apoi se incrementează (creşte) val. variabilei
contor cu v sau cu 1(dacă pasv liăseşte), după care se reia pasII
OBS: contor←5,4,-1√
contor de obicei i, j..
Exerciţii
1. Sa se afișeze primele n numere naturale divizibile cu 5.
întreg n; întreg n;
citeşte n; citeşte n;
pentru i←1,n execută i←1
scrie i*5 cât timp (i<=n) execută
sf.pentru scrie i*5
i←i+1
sf.cat timp
3.Scrieți un algoritm ce determina suma tuturor resturilor impartirilor numerelor de 4 cifre la o valoare v citita.
întreg v, S, i
citeşte v;
S←0;
pentru i←1000,9999 execută
S←S+(i mod v)
sf.pentru