Sunteți pe pagina 1din 11

Fia de documentare 2.5.

Algoritmi elementari ce folosesc structuri fundamentale


n continuare vom prezenta civa algoritmi utili care prelucreaz numere ntregi i naturale.

1. Divizibilitate
Se citesc dou numere ntregi a i b. S se realizeze un algoritm care s verifice dac
cele dou numere sunt divizibile (a divizibil cu b sau b divizibil cu a).
De exemplu dac se citesc numerele a = 25 i b = 5 atunci algoritmul va afia DA, iar n cazul
n care se citesc a = 25 i b = 10 se va afia NU.
n pseudocod algoritmul de rezolvare este:
a, b ntregi
citete a, b
dac (a % b = 0 sau b % a = 0) atunci
|
scrie DA
| altfel
|
scrie NU
|
Explicarea algoritmului: Se folosete o structur alternativ, n care se verific a este
divizibil cu b (dac restul mparirii lui a la b = 0) sau invers.

2. Paritate
Se citete un numr ntreg a. S se realizeze un algoritm care s verifice dac numrul a
este par, afiandu-se un mesaj corespunzator.
De exemplu dac se citete pentru a valoarea 88 atunci algoritmul va afia PAR, iar n cazul n
care se citete a = 15 se va afia IMPAR.
n pseudocod algoritmul de rezolvare este:
a ntreg
citete a
dac (a % 2 = 0) atunci
|
scrie PAR
| altfel
|
scrie IMPAR
|

Explicarea algoritmului: Se foloseste o structur alternativa, n care se verific dac a


este divizibil cu 2 (daca restul mpririi lui a la 2 = 0).

3. Divizorii unui numr a


Se citete un numr ntreg a. S se realizeze un algoritm care s afiseze toti divizorii
numrului a.
De exemplu dac se citete pentru a valoarea 12 atunci algoritmul va afia 1 2 3 4 6 12, iar n
cazul n care se citete a = 13 se va afia 1 13.
n pseudocod algoritmul de rezolvare este:
a,i ntreg
citete a
pentru i 1, a execut
| dac (a % i = 0) atunci
| | scrie i
| |
|
Explicarea algoritmului: Se foloseste o structur repetitiv cu numr cunoscut de
repetiii, n care se verific dac a este divizibil cu i (dac restul mpririi lui a la i = 0), unde i ia
toate valorile de la 1 la a.

4. Divizorii proprii ai unui numr a


Se citete un numr ntreg a. S se realizeze un algoritm care s afieze toti divizorii
proprii ai numrului a.
De exemplu dac se citete pentru a valoarea 12 atunci algoritmul va afia 2 3 4 6, iar n cazul
n care se citete a = 13 se va afia mesajul nu exist divizori proprii.
n pseudocod algoritmul de rezolvare este:
a, i, sem ntreg
sem 0 //folosit pentru a reine dac am gsit divizori
citete a
pentru i 2, [a/2] execut
| dac (a % i = 0) atunci
| | scrie i
| | sem 1 //marchez faptul ca am gsit divizori
| |
|
daca sem = 0 atunci
| scrie nu exist divizori proprii
|
Explicarea algoritmului: Se cunoate faptul c divizorii proprii ai unui numr se afl n
intervalul nchis [2, [a/2] ], unde [a/2] este partea ntreag a lui a/2. Se folosete o structur
repetitiv cu numr cunoscut de repetiii, n care se verific dac a este divizibil cu i (dac restul
mpririi lui a la i = 0), unde i ia toate valorile de la 2 la [a/2].

5. Primalitatea unui numr a


Se citete un numr ntreg a. S se realizeze un algoritm care s verifice dac numrul a
este prim.
De exemplu dac se citete pentru a valoarea 12 atunci algoritmul va afia numar NEPRIM,
iar n cazul n care se citete a = 13 se va afia mesajul numar PRIM.
n pseudocod algoritmul de rezolvare este:
a, i, prim ntreg
citete a
dac a <= 1 atunci
|
scrie numar NEPRIM
| altfel
| | prim 1 //presupunem ca numrul este prim
| | pentru i 2, [a/2] execut
| | | dac (a % i = 0) atunci
| | | | prim 0 //am gsit divizori deci nr nu e prim
| | | |
| | |
| | dac prim = 1 atunci
| | | scrie numar PRIM
| | |altfel
| | |scrie numar NEPRIM
| | |
| |
|
Explicarea algoritmului: Se cunoate faptul c un numr este prim dac NU are divizori
proprii. De asemenea se tie c numrul 1 NU este prim, de aceea vom trata separat cazul a=1.
Algoritmul folosete o structur repetitiv cu numr cunoscut de repetiii, n care se caut
divizori proprii. n caz c se gasesc divizori, numrul nu este prim altfel numrul este prim. Se
foloseste o variabil semafor numit prim care iniial are valoarea 1 i se modific n 0 doar
dac se gsesc divizori.

6. Descompunerea n factori primi ai unui numr a


Se citete un numr ntreg a. S se realizeze un algoritm care s afieze factorii primi i
puterile lor pentru numrul citit.
De exemplu dac se citete pentru a valoarea 36 atunci algoritmul va afia 2^2, 3^2.
n pseudocod algoritmul de rezolvare este:
a, d, p ntreg

citete a
d 2 //primul factor prim este 2
ct timp a > 1 execut
| p 0 //puterea factorului d este 0
| ct timp (a % d = 0) execut
| | p p + 1
| | a a / d
| |
| dac p 0 atunci
| | scrie d, ^, p, ,
| |
| d d + 1
|

36
18
9
3
1

2
2
3
3

Explicarea algoritmului: Algoritmul urmrete pas cu pas procedeul matematic de


descompunere n factori primi.
Se folosesc dou structuri repetitive cu test iniial, imbricate.
Prima structur asigur repetarea instruciunilor ct timp numrul nu a ajuns la 1.
A doua structur numr n variabila p (care se iniializeaz cu 0 pentru fiecare nou valoare a
lui d) de cte ori se poate face mparirea numrului la divizorul d. n cazul n care s-a putut
mpari a la d (deci p este diferit de 0), se afieaz divizorul i puterea lui.
Apoi se crete d i se repet instruciunile pentru a se verifica dac acest nou numr este
divizor i a afla puterea.

7. Cel mai mare divizor comun intre 2 numere ntregi a i b


Se citesc dou numere ntregi a i b. S se realizeze un algoritm care s afieze
cmmdc(a,b).
De exemplu dac se citete pentru a valoarea 36 i pentru b valoarea 24 atunci algoritmul va
afia 12.
n pseudocod algoritmul de rezolvare este:
a, b, r ntreg
citete a, b
r a % b //r reine restul mpririi lui a la b
ct timp r 0 execut
| a b
| b r
| r a % b
|
scrie cmmdc este , b

Explicarea algoritmului: Algoritmul folosit este algoritmul lui EUCLID. Exista i algoritmul
care afla cmmdc prin scadere nsa nu este eficient (despre eficiena algoritmilor vom vorbi tema
urmtoare).
Algoritmul lui Euclid folosete o structur repetitiv cu test iniial. Mai nti aflm restul mpririi
lui a la b i ct timp acest rest este diferit de 0, vom nlocui pe a cu b i pe b cu restul obinut,
dup care recalculm restul mpririi noului a la noul b.
Euclid a demonstrat c oricare ar fi numerele a i b iniiale, repetnd operaiile descrise mai
sus, gsim restul = 0. n acel moment putem afirma c cmmdc(a,b) este ultimul rest nenul.
Deoarece variabila b ia mereu valoarea restului, afiam pe b ca fiind cmmdc.

8. Numere perfecte
Se citete un numr ntreg n. S se realizeze un algoritm care s afiseze toate numerele
perfecte mai mici sau egale cu n. Spunem c un numr este perfect dac este egal cu
suma divizorilor si, far el nsui.
De exemplu dac se citete pentru n valoarea 30 atunci algoritmul va afia 6 28, deoarece
aceste dou numere sunt singurele pentru care putem scrie:
6 = 1 + 2 + 3 i
28 = 1 + 2 + 4 + 7 + 14.
n pseudocod algoritmul de rezolvare este:
n, i, d, s ntreg
citete n
pentru i 1, n execut

| s 0 // verificm fiecare i dac este perfect


| pentru d 1, i/2 execut
|
dac i % d = 0 atunci // dac d este divizor
|
| s s + d // l adaug la sum
| |
| dac s = i atunci //dac suma = i atunci i este perfect
| | scrie i
| |
|

Explicarea algoritmului: Algoritmul verific fiecare numr cuprins ntre 1 i n dac este
numr perfect.
Aceast verificre se face iniializnd suma cu 0 pentru fiecare numr i cutnd divizorii de la
1 la jumatatea numrului. Divizorii se adaug la sum iar la final aceasta este comparat cu
numrul testat.

9. Numere prietene
Se citesc dou numere ntregi a i b. S se realizeze un algoritm care s verifice dac
cele doau numere sunt prietene. Spunem ca dou numere sunt prietene dac suma
divizorilor proprii ai unui numr este egal cu celalalt i invers.
De exemplu dac se citete pentru a valoarea 284 i pentru b valoarea 220 atunci algoritmul va
afia mesajul numere prietene.
n pseudocod algoritmul de rezolvare este:
a, b, sa, sb ntreg
citete a, b
sa 0
sb 0
pentru i 2, [a/2] execut
| dac (a % i = 0) atunci
| | s s + i //suma divizorilor proprii numrului a
| |
|
pentru i 2, [b/2] execut
| dac (b % i = 0) atunci
| | sb sb + i // suma divizorilor proprii numrului b
| |
|
daca sa = b i sb = a atunci
| scrie numere prietene
| altfel
|
scrie NU sunt numere prietene
|

Explicarea algoritmului: Algoritmul calculeaz suma divizorilor lui a n sa i suma


divizorilor lui b n sb.
Apoi verific dac sa = b i sb = a. Dac condiia este adevarat se afieaz numere prietene
altfel se afieaz Nu sunt numere prietene.

10. Factorial
Se citete un numr ntreg a. S se realizeze un algoritm care s afiseze n! Factorial de n
(notat n!) este produsul numerelor de la 1 la n.
De exemplu dac se citete pentru a valoarea 4 atunci algoritmul va afia 24, deoarece 4! = 1 *
2 * 3 * 4 = 24.
n pseudocod algoritmul de rezolvare este:
a, i, p ntreg
citete a
p 1
pentru i 1, a execut
| p p * i //calculm produsul
|
scrie p

Explicarea algoritmului: Algoritmul calculeaz produsul numerelor de la 1 la a n


variabila p.
Iniial variabila p = 1 deoarece produsul se iniializeaz cu elementul neutru de la nmultire,
adic 1.

11. Sirul lui Fibonacci


Se citete un numr ntreg n (2< n <= 20). S se realizeze un algoritm care s afieze al nlea termen din irul lui Fibonacci.
De exemplu dac se citete pentru n valoarea 8 atunci algoritmul va afia 21, deoarece al 8-lea
termen din irul lui Fibonacci este 21.
n pseudocod algoritmul de rezolvare este:
n, f1, f2, f3, i ntreg
citete n
f1 1
f2 2 // iniializarea primilor termeni din ir
pentru i 3, n execut
| f3 f2 + f1 //calculul termenului curent din ir
| f1 f2
| f2 f3
|
scrie f3

Explicarea algoritmului:
irul lui Fibonacci se formeaz dup urmatoarea formul:
1

dac

n = 1 sau n = 2

Fibo(n) =
Fibo (n-1) + Fibo (n-2) dac n > 2
Algoritmul calculeaz fiecare termen i cnd ajunge la al n-lea se oprete i l afieaz.
Se folosete o structur repetitiv cu numr cunoscut de repetiii, unde variabila contor i ia
valori de la 3 la n, deoarece primii doi termeni sunt deja calculai, iar noi trebuie s calculm
termenii ncepand cu al 3-lea.

12. Numrul invers


Se citete un numr ntreg a. S se realizeze un algoritm care s afiseze numrul invers.
Numim numr invers (sau oglindit) numrul format cu cifrele citite de la dreapta la
stanga.
De exemplu dac se citete pentru a valoarea 327 atunci algoritmul va afia numrul invers
723.
n pseudocod algoritmul de rezolvare este:
a, inv ntreg

citete a
inv 0 //initial inv este nul
ct timp a 0 execut
| inv inv * 10 + a % 10
| a a / 10
|
scrie inv
Explicarea algoritmului: Algoritmul descompune n cifre numrul a i adaug fiecare
cifr la numrul invers.

13. Numrul palindrom


Se citete un numr ntreg a. S se realizeze un algoritm care s verifice dac numrul
citit este sau nu palindrom. Numim palindrom un numr care este egal cu oglinditul su.
De exemplu dac se citete pentru a valoarea 323 atunci algoritmul va afia PALINDROM, iar
dac va citi 123 va afia NU.
n pseudocod algoritmul de rezolvare este:
a, inv, aux ntreg
citete a
aux a //salvez valoarea iniial a lui a n aux
inv 0 //iniial inv este nul
ct timp aux 0 execut
| inv inv * 10 + aux % 10
| aux aux / 10
|
Dac inv = a atunci
| scrie PALINDROM
|altfel
| scrie NU
|

Explicarea algoritmului: Algoritmul se bazeaz pe problema anterioar, de calcul al


numrului invers. Un numr este palindrom dac numrul iniial citit este egal cu inversul sau.
De aceea algoritmul descompune n cifre numrul a i formeaz numrul invers, dupa care
compar acest numr invers cu numrul iniial citit.
Am descompus n cifre o copie a numrului a deoarece n structura repetitiv se modific
valoarea numrului introdus, iar noi avem nevoie de valoarea iniiala pentru verificare.

14. Maximul ntr-un ir de numere

Se citete un numr n ntreg i apoi n numere ntregi. S se realizeze un algoritm care s


afiseze cel mai mare numr citit.
De exemplu dac se citete pentru n valoarea 5 i apoi valorile 12, 220, 23, 89, 146 atunci
algoritmul va afia mesajul 220, deoarece 220 este valoarea maxim citit.
n pseudocod algoritmul de rezolvare este:
n, i, x, max ntreg
citete n
citete x//citesc primul numr din ir separat de celelalte
max x //iniial max = primul numr citit din ir
pentru i 2, n execut
| //de la 2 pentru c am citit deja un numr din ir
| citete x
| dac (x > max) atunci
| | max x //max = noua valoare a lui x
| |
|
scrie max

Explicarea algoritmului: Algoritmul citete pe rnd n numere de la tastatur i afieaz


n final cel mai mare numr dintre ele.
Se citete primul numr din ir n afara structurii repetitive iar max se iniializeaz cu acea
valoare. Variabila max se poate iniializa cu orice valoare din ir, ns pentru comoditate
iniializm cu prima valoare.
Apoi, n structura repetitiv, pe masur ce cititm n x alte valori, le comparm cu variabila max.
Dac gsim un numr mai mare dect max, atunci nlocuim valoarea lui cu numrul x.

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