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 a ia !D"#$ iar n cazul n care se citesc a = 25 i b = %& se va a ia !'(#. 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 veri ic 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 a ia !/"0#$ iar n cazul n care se citete a = %5 se va a ia !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 veri ic 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 a ia !% 2 3 4 5 %2#$ iar n cazul n care se citete a = %3 se va a ia !% %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 veri ic 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 a ia !2 3 4 5#$ iar n cazul n care se citete a = %3 se va a ia 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 a l 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 veri ic 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 a ia !numar '*/012#$ iar n cazul n care se citete a = %3 se va a ia 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 alt el numrul este prim. +e oloseste o variabil sema or numit !prim# care iniial are valoarea !%# i se modi ic 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 a ia !2;2$ 3;2#. n pseudocod algoritmul de rezolvare este) a, ,, * ntreg

citete a d 2 &&*ri%u) 'a"t(r *ri% este 2 ct timp a > 1 e!e"ut# | p 0 &&*uterea 'a"t(ru)ui , este 0 | "8t ti%* (a % , = 0) e!e"ut# | | p * 9 | | a a & , | |$ | ,a"# * < 0 atun"i | | s"rie ,, :, *, , | |$ | , , 9 |$

45 6 7 4

2 2 4 4

&'"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 di erit de &-$ se a ieaz divizorul i puterea lui. "poi se crete d i se repet instruciunile pentru a se veri ica dac acest nou numr este divizor i a a la 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 a ia %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 a la cmmdc prin scadere nsa nu este e icient ,despre e iciena algoritmilor vom vorbi tema urmtoare-. "lgoritmul lui *uclid olosete o structur repetitiv cu test iniial. 2ai nti a lm restul mpririi lui a la b i ct timp acest rest este di erit 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 a irma c cmmdc,a$b- este ultimul rest nenul. Deoarece variabila b ia mereu valoarea restului$ a iam 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 a ia + 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 veri ic iecare numr cuprins ntre % i n dac este numr per ect. "ceast veri icre 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 a ia 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 veri ic dac sa 2 b i sb 2 a. Dac condiia este adevarat se a ieaz !numere prietene# alt el se a ieaz !'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 a ia 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 a ia 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) % 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 a ieaz. +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. dac n = % sau n = 2

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 a ia 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 ci re numrul a i adaug iecare ci r 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 a ia !/"?1'D0G2#$ iar dac va citi %23 va a ia !'(#. 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 ci re numrul a i ormeaz numrul invers$ dupa care compar acest numr invers cu numrul iniial citit. "m descompus n ci re o copie a numrului !a# deoarece n structura repetitiv se modi ic valoarea numrului introdus$ iar noi avem nevoie de valoarea iniiala pentru veri icare.

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 a ia 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 a ieaz n inal cel mai mare numr dintre ele. +e citete primul numr din ir n a ara 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