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 aia !D"#$ iar n cazul
n care se citesc a = 25 i b = %& se va aia !'(#.
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
|
*xplicarea algoritmului) +e olosete o structur alternativ$ n care se veriic a este
divizibil cu b ,dac restul mparirii lui a la b = &- sau invers.
2. !aritate
Se citete un numr ntreg a. S se realizeze un algoritm care s verifice dac numrul a
este "ar# afiandu$se un mesa% cores"unzator.
De exemplu dac se citete pentru a valoarea .. atunci algoritmul va aia !/"0#$ iar n cazul
n care se citete a = %5 se va aia !12/"0#.
n pseudocod algoritmul de rezolvare este)
a ntreg
citete a
dac (a % 2 = 0) atunci
| scrie PAR
| altfel
| scrie IMPAR
|
&'"licarea algoritmului( +e oloseste o structur alternativa$ n care se veriic dac a
este divizibil cu 2 ,daca restul mpririi lui a la 2 = &-.
). 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 %2 atunci algoritmul va aia !% 2 3 4 5 %2#$ iar n
cazul n care se citete a = %3 se va aia !% %3#.
n pseudocod algoritmul de rezolvare este)
a,i ntreg
citete a
pentru i , a e!e"ut#
| dac (a % i = 0) atunci
| | scrie i
| |$
|$
&'"licarea algoritmului( +e oloseste o structur repetitiv cu numr cunoscut de
repetiii$ n care se veriic dac a este divizibil cu i ,dac restul mpririi lui a la i = &-$ unde i ia
toate valorile de la % la a.
*. Divizorii "ro"rii ai unui numr a
Se citete un numr ntreg a. S se realizeze un algoritm care s afieze toti divizorii
"ro"rii ai numrului a.
De exemplu dac se citete pentru a valoarea %2 atunci algoritmul va aia !2 3 4 5#$ iar n cazul
n care se citete a = %3 se va aia mesa6ul !nu exist divizori proprii#.
n pseudocod algoritmul de rezolvare este)
a, i, se% ntreg
sem 0 &&'()(sit# *entru a re+ine ,a"# a% g#sit ,i-i.(ri
citete a
pentru i 2, /a&20 e!e"ut#
| dac (a % i = 0) atunci
| | scrie i
| | se% &&%ar"1e. 'a*tu) "a a% g#sit ,i-i.(ri
| |$
|$
,a"a se% = 0 atun"i
| s"rie nu e!ist# ,i-i.(ri *r(*rii
|$
&'"licarea algoritmului( +e cunoate aptul c divizorii proprii ai unui numr se al n
intervalul nc7is 82$ 8a92: :$ unde 8a92: este partea ntreag a lui !a92#. +e olosete o structur
repetitiv cu numr cunoscut de repetiii$ n care se veriic dac a este divizibil cu i ,dac restul
mpririi lui a la i = &-$ unde i ia toate valorile de la 2 la 8a92:.
5. !rimalitatea unui numr a
Se citete un numr ntreg a. S se realizeze un algoritm care s verifice dac numrul a
este "rim.
De exemplu dac se citete pentru a valoarea %2 atunci algoritmul va aia !numar '*/012#$
iar n cazul n care se citete a = %3 se va aia mesa6ul !numar /012#.
n pseudocod algoritmul de rezolvare este)
a, i, *ri% ntreg
citete a
,a"# a 2= atun"i
| s"rie nu%ar N3PRIM
| a)t'e)
| | prim &&*resu*une% "a nu%#ru) este *ri%
| | pentru i 2, /a&20 e!e"ut#
| | | dac (a % i = 0) atunci
| | | | *ri% 0 &&a% g#sit ,i-i.(ri ,e"i nr nu e *ri%
| | | |$
| | |$
| | ,a"# *ri% = atun"i
| | | s"rie nu%ar PRIM
| | |a)t'e)
| | |s"rie nu%ar N3PRIM
| | |$
| |$
|$
&'"licarea algoritmului( +e cunoate aptul c un numr este prim dac '( are divizori
proprii. De asemenea se tie c numrul % '( este prim$ de aceea vom trata separat cazul a=%.
"lgoritmul olosete o structur repetitiv cu numr cunoscut de repetiii$ n care se caut
divizori proprii. n caz c se gasesc divizori$ numrul nu este prim altel numrul este prim. +e
oloseste o variabil semaor numit !prim# care iniial are valoarea !%# i se modiic n !&# doar
dac se gsesc divizori.
+. Descom"unerea n factori "rimi ai unui numr a
Se citete un numr ntreg a. S se realizeze un algoritm care s afieze factorii "rimi i
"uterile lor "entru numrul citit.
De exemplu dac se citete pentru a valoarea 35 atunci algoritmul va aia !2;2$ 3;2#.
n pseudocod algoritmul de rezolvare este)
a, ,, * ntreg
citete a 45 2
d 2 &&*ri%u) 'a"t(r *ri% este 2 6 2
ct timp a > 1 e!e"ut# 7 4
| p 0 &&*uterea 'a"t(ru)ui , este 0 4 4
| "8t ti%* (a % , = 0) e!e"ut#
| | p * 9
| | a a & ,
| |$
| ,a"# * < 0 atun"i
| | s"rie ,, :, *, ,
| |$
| , , 9
|$
&'"licarea algoritmului( "lgoritmul urmrete pas cu pas procedeul matematic de
descompunere n actori primi.
+e olosesc dou structuri repetitive cu test iniial$ imbricate.
/rima structur asigur repetarea instruciunilor ct timp numrul nu a a6uns la %.
" doua structur numr n variabila p ,care se iniializeaz cu & pentru iecare nou valoare a
lui d- de cte ori se poate ace mparirea numrului la divizorul d. n cazul n care s=a putut
mpari a la d ,deci p este dierit de &-$ se aieaz divizorul i puterea lui.
"poi se crete d i se repet instruciunile pentru a se veriica dac acest nou numr este
divizor i a ala puterea.
,. -el 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 35 i pentru b valoarea 24 atunci algoritmul va
aia %2.
n pseudocod algoritmul de rezolvare este)
a, b, r ntreg
citete a, b
r a % b &&r re+ine restu) %*#r+irii )ui a )a b
ct timp r < 0 e!e"ut#
| a b
| b r
| r a % b
|$
s"rie "%%," este , b
&'"licarea algoritmului( "lgoritmul olosit este algoritmul lui *(>?1D. *xista i algoritmul
care ala cmmdc prin scadere nsa nu este eicient ,despre eiciena algoritmilor vom vorbi tema
urmtoare-.
"lgoritmul lui *uclid olosete o structur repetitiv cu test iniial. 2ai nti alm restul mpririi
lui a la b i ct timp acest rest este dierit de &$ vom nlocui pe a cu b i pe b cu restul obinut$
dup care recalculm restul mpririi noului a la noul b.
*uclid a demonstrat c oricare ar i numerele a i b iniiale$ repetnd operaiile descrise mai
sus$ gsim restul = &. n acel moment putem airma c cmmdc,a$b- este ultimul rest nenul.
Deoarece variabila b ia mereu valoarea restului$ aiam pe b ca iind cmmdc.
.. /umere "erfecte
Se citete un numr ntreg n. S se realizeze un algoritm care s afiseze toate numerele
"erfecte mai mici sau egale cu n. S"unem c un numr este "erfect dac este egal cu
suma divizorilor si# far el nsui.
De exemplu dac se citete pentru n valoarea 3& atunci algoritmul va aia + 2.# deoarece
aceste dou numere sunt singurele pentru care putem scrie)
5 = % @ 2 @ 3 i
2. = % @ 2 @ 4 @ A @ %4.
n pseudocod algoritmul de rezolvare este)
n, i, ,, s ntreg
citete n
pentru i , n e!e"ut#
| s 0 && -eri'i"#% 'ie"are i ,a"# este *er'e"t
| *entru , , i&2 e!e"ut#
| dac i % d = 0 atunci && ,a"# , este ,i-i.(r
| | s s 9 , && ) a,aug )a su%#
| |$
| ,a"# s = i atun"i &&,a"# su%a = i atun"i i este *er'e"t
| | s"rie i
| |$
|$
&'"licarea algoritmului( "lgoritmul veriic iecare numr cuprins ntre % i n dac este
numr perect.
"ceast veriicre se ace iniializnd suma cu & pentru iecare numr i cutnd divizorii de la
% la 6umatatea numrului. Divizorii se adaug la sum iar la inal aceasta este comparat cu
numrul testat.
0. /umere "rietene
Se citesc dou numere ntregi a i b. S se realizeze un algoritm care s verifice dac
cele doau numere sunt "rietene. S"unem ca dou numere sunt "rietene dac suma
divizorilor "ro"rii ai unui numr este egal cu celalalt i invers.
De exemplu dac se citete pentru a valoarea 2.4 i pentru b valoarea 22& atunci algoritmul va
aia mesa6ul !numere "rietene1.
n pseudocod algoritmul de rezolvare este)
a, b, sa, sb ntreg
citete a, b
sa 0
sb 0
pentru i 2, /a&20 e!e"ut#
| dac (a % i = 0) atunci
| | s# s# 9 i &&su%a ,i-i.(ri)(r *r(*rii nu%#ru)ui a
| |$
|$
pentru i 2, /b&20 e!e"ut#
| dac (b % i = 0) atunci
| | sb sb 9 i && su%a ,i-i.(ri)(r *r(*rii nu%#ru)ui b
| |$
|$
daca sa = b i sb = a atunci
| s"rie numere prietene
| altfel
| scrie NU sunt numere prietene
|$
&'"licarea algoritmului( "lgoritmul calculeaz suma divizorilor lui a n sa i suma
divizorilor lui b n sb.
"poi veriic dac sa 2 b i sb 2 a. Dac condiia este adevarat se aieaz !numere prietene#
altel se aieaz !'u sunt numere prietene#.
13. Factorial
Se citete un numr ntreg a. S se realizeze un algoritm care s afiseze n4 Factorial de n
(notat n4 este "rodusul numerelor de la 1 la n.
De exemplu dac se citete pentru a valoarea 4 atunci algoritmul va aia 24$ deoarece 4B = % C
2 C 3 C 4 = 24.
n pseudocod algoritmul de rezolvare este)
a, i, * ntreg
citete a
*
pentru i , a e!e"ut#
| * * ; i &&"a)"u)#% *r(,usu)
|$
s"rie *
&'"licarea algoritmului( "lgoritmul calculeaz produsul numerelor de la % la a n
variabila p.
1niial variabila " 2 1 deoarece produsul se iniializeaz cu elementul neutru de la nmultire$
adic %.
11. Sirul lui Fibonacci
Se citete un numr ntreg n (25 n 52 23. S se realizeze un algoritm care s afieze al n$
lea termen din irul lui Fibonacci.
De exemplu dac se citete pentru n valoarea . atunci algoritmul va aia 2%$ deoarece al .=lea
termen din irul lui Dibonacci este 2%.
n pseudocod algoritmul de rezolvare este)
n, ', '2, '4, i ntreg
citete n
'
'2 2 && ini+ia)i.area *ri%i)(r ter%eni ,in <ir
pentru i 4, n e!e"ut#
| '4 '2 9 ' &&"a)"u)u) ter%enu)ui "urent ,in <ir
| ' '2
| '2 '4
|$
s"rie '4
*xplicarea algoritmului)
Eirul lui Dibonacci se ormeaz dup urmatoarea ormul)
% dac n = % sau n = 2
Dibo,n- =
Dibo ,n=%- @ Dibo ,n=2- dac n F 2
"lgoritmul calculeaz iecare termen i cnd a6unge la al n=lea se oprete i l aieaz.
+e olosete o structur repetitiv cu numr cunoscut de repetiii$ unde variabila contor i ia
valori de la ) la n$ deoarece primii doi termeni sunt de6a calculai$ iar noi trebuie s calculm
termenii ncepand cu al 3=lea.
12. /umrul invers
Se citete un numr ntreg a. S se realizeze un algoritm care s afiseze numrul invers.
/umim numr invers (sau oglindit numrul format cu cifrele citite de la drea"ta la
stanga.
De exemplu dac se citete pentru a valoarea 32A atunci algoritmul va aia numrul invers
A23.
n pseudocod algoritmul de rezolvare este)
a, in- ntreg
citete a
inv 0 &&initia) in- este nu)
ct timp a < 0 e!e"ut#
| inv inv 10 ! a % 10
| a a & 0
|$
s"rie in-
&'"licarea algoritmului) "lgoritmul descompune n cire numrul a i adaug iecare
cir la numrul invers.
1). /umrul "alindrom
Se citete un numr ntreg a. S se realizeze un algoritm care s verifice dac numrul
citit este sau nu "alindrom. /umim "alindrom un numr care este egal cu oglinditul su.
De exemplu dac se citete pentru a valoarea 323 atunci algoritmul va aia !/"?1'D0G2#$ iar
dac va citi %23 va aia !'(#.
n pseudocod algoritmul de rezolvare este)
a, in-, au! ntreg
citete a
au! a &&sa)-e. -a)(area ini+ia)# a )ui a n au!
inv 0 &&ini+ia) in- este nu)
ct timp au! < 0 e!e"ut#
| inv inv 10 ! au" % 10
| au! au! & 0
|$
#ac in- = a atunci
| scrie PA=INDR>M
|altfel
| scrie NU
|$
&'"licarea algoritmului) "lgoritmul se bazeaz pe problema anterioar$ de calcul al
numrului invers. (n numr este palindrom dac numrul iniial citit este egal cu inversul sau.
De aceea algoritmul descompune n cire numrul a i ormeaz numrul invers$ dupa care
compar acest numr invers cu numrul iniial citit.
"m descompus n cire o copie a numrului !a# deoarece n structura repetitiv se modiic
valoarea numrului introdus$ iar noi avem nevoie de valoarea iniiala pentru veriicare.
1*. 6a'imul ntr$un ir de numere
Se citete un numr n ntreg i a"oi 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# 223# 2)# .0# 1*+ atunci
algoritmul va aia mesa6ul 223# deoarece 22& este valoarea maxim citit.
7n "seudocod algoritmul de rezolvare este(
n, i, !, %a! ntreg
citete n
citete !&&"ites" *ri%u) nu%#r ,in <ir se*arat ,e "e)e)a)te
%a! ! &&ini+ia) %a! = *ri%u) nu%#r "itit ,in <ir
pentru i 2, n e!e"ut#
| $$de la % pentru c am citit de&a un numr din ir
| citete "
| dac (! ? %a!) atunci
| | %a! ! &&%a! = n(ua -a)(are a )ui !
| |$
|$
scrie %a!
&'"licarea algoritmului( "lgoritmul citete pe rnd n numere de la tastatur i aieaz
n inal cel mai mare numr dintre ele.
+e citete primul numr din ir n aara structurii repetitive iar max se iniializeaz cu acea
valoare. Hariabila max se poate iniializa cu orice valoare din ir$ ns pentru comoditate
iniializm cu prima valoare.
"poi$ n structura repetitiv$ pe masur ce cititm n ' alte valori$ le comparm cu variabila ma'.
Dac gsim un numr mai mare dect max$ atunci nlocuim valoarea lui cu numrul x.

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