Sunteți pe pagina 1din 7

Programarea algoritmilor

Ganea Lucian
Clasa PL 2A

Exerciiul nr.1
S se calculeze factorialul unui numar n n!=1*2*3*...*n
Rezolvare
Varainta a) folosind structura repetitiva conditionata anterior
start
citeste n
produs=1
i=1
cat timp i<=n
{p=p*i
i=i+1}
scrie produs
sfarsit

Varainta b) folosind structura repetitiva conditionata posterior


start
citeste n
produs=1
i=1
repeta
{p=p*i
i=i+1}
cat timp i<=n
scrie produs
sfarsit

Varainta c) folosind structura repetitiva cu numar cunoscut de pasi


start
citeste n
produs=1
pentru i=1,n executa
p=p*i
scrie produs
sfarsit

Varainta d) folosind recursivitatea

fact(n)
{
daca n=0 atunci
returneaza 1
altfel
returneaza n*fact(n-1)
}
functia este apelata intr-un program principal
start
citeste n
scrie fact(n)
stop

Exerciiul nr. 2
Media aritmetica a n numere ma=(n1+n2+...nn)/n
start
citeste n
ma=0
pentru i=1,n
{
citeste x
ma=ma+x
}
ma=ma/n
scrie ma
stop

Exerciiul nr. 3
Sa se verifice daca un numar n diferit de 0 sau 1 este prim sau nu.
Un numar este prim daca nu are divizori decat pe 1 si pe el insusi.Un numar d
este divizor pentru n daca restul impartirii lui n la d este 0.Pentru a afla restul
impartirii vom folosi operatorul mod(%)
start
citeste n
prim=1
pentru d=2,n/2 executa
daca n mod d =0 atunci
3

prim=0
daca prim=1 atunci
scrie "este prim"
altfel
scrie"nu este prim"
sfarsit

varianta optimizata
start
citeste n
prim=1
d=2
cat timp d<=n/2 si prim=1
daca n mod d = 0 atunci
prim=0
altfel d=d+1
daca prim=1 atunci
scrie "este prim:
altfel
scrie"nu este prim"
sfarsit

Exerciiul nr. 4
Varainta a)
Sa se calculeze cmmdc pentru doua numere prin impartiri repetate (algoritmul
lui Euclid): ultimul rest diferit de 0 reprezinta cmmdc
start
citeste a,b
deimp=a
imp=b
cat timp imp != 0 executa
{
r=deimp mod imp
deimp=imp
imp=r
}
scrie "cmmdc este",deimp
stop

Varainta b)
Sa se calculeze cmmdc pentru doua numere prin scaderi repetate (algoritmul
lui Nicomachus): din numarul mai mare se scade numarul mai mic cat timp cele
doua numere sunt diferite
start
citeste a,b
cat timp a != b executa
daca a>b atunci
a=a-b
altfel
b=b-a
scrie "cmmdc este",a
stop

Exerciiul nr. 5
Sa se afiseze suma cifrelor unui numar n.
Ultima cifra este data de restul impartirii numarului la 10 (n mod 10).Catul
impartirii il aflam folosid operatorul div
start
citeste n
s=0
cat timp n>0
{
c=n mod 10
s=s+c
n=n div 10
}
scrie s
sfarsit

Exerciiul nr. 6
Sa se afle daca un numar este perfect
Un numar este perfect daca este egal cu suma divizorilor sai, inclusiv 1, dar fara
el insusi.Exemplu: 6=1+2+3 este numar perfect
start
citeste n
5

s=0
pentru d=1,n/2
daca n mod d = 0 atunci
s=s+d
daca s=n atunci
scrie "este numar perfect"
sfarsit

Exerciiul nr. 7
Sa se afle cifra maxima a unui numar (cea mai mare cifra a unui numar).
start
citeste n
max=-1
cat timp n>0
{
c=n mod 10
daca max<c atunci
max=c
n=n div 10
}
scrie max
sfarsit

Exerciiul nr. 8
S se rezolve ecuaia de gradul doi unde a,b i c sunt coeficienti.
real a, b, c, d, x1, x2, x
citete a, b, c
dac a=0 atunci
| scrie "Este o ecuaie de gradul I"
| dac b=0 atunci
| | dac c=0 atunci
| | | scrie "Ecuaia are o infinitate de soluii"
| | |altfel
| | | scrie "Ecuaia nu are soluii reale"
| |
| |altfel
| | dac c=0 atunci
| | | scrie "soluia este 0"
| | |altfel
| | | x<- -c/b
| | | scrie x
| |
|
|altfel
| dac b=0 atunci
| | dac c=0 atunci
| | | scrie "soluia este 0"
| | |altfel
| | | x<-sqrt(c/b)
| |
| |altfel
| | dac c=0 atunci
| | | x1<-0
| | | x2<- -b/a
| | | scrie x1, x2
| | |altfel
| | | d<-b*b-4*a*c
| | | dac d>0 atunci
| | | | x1 <- (-b-sqrt(d)) / (2*a)
| | | | x2 <- (-b+sqrt(d)) / (2*a)
| | | | scrie x1, x2
| | |
| | | dac d=0 atunci
| | | | x <- -b/(2*a)
| | | | scrie x
| | |
| | | dac d<0 atunci
| | | | scrie "Ecuaia nu are soluii reale"
| | |
| |
|