Sunteți pe pagina 1din 8

Algoritmi fundamentali I . Structura alternativ 1. S se calculeze i s se afieze media aritmetic a dou numere reale pozitive.

citeste a,b ma (a+b)/2 scrie ma stop 2. S se interschimbe valorile a dou variabile numerice . citeste a,b aux a a b b aux scrie a,b stop 3. Se citete o cifr zecimal , s se scrie denumirea ei n litere. citeste cifra cazuri cifra 0 : scrie zero 1 : scrie unu 2 : scrie doi 3 : scrie trei 4 : scrie patru 5 : scrie cinci 6 : scrie sase 7 : scrie sapte 8 : scrie opt 9 : scrie noua altfel scrie eroare sf.cazuri stop 4. Stabilii relaia de ordine dintre dou numere reale oarecare , citite de la tastatur . citeste a,b daca a>b atunci scrie a>b altfel daca a=b atunci scrie a=b altfel scrie a<b sf.daca sf.daca stop 5. Se citesc trei numere a,b,c. S se tipreasc maximul dintre ele . citeste a,b,c max a daca max<b atunci max b sf.daca daca max<c atunci max c sf.daca scrie max stop

6. S se rezolve ecuaia de gradul I pentru coeficienii a,b reali dai . citeste a,b daca a 0 atunci x (-b/a) scrie x altfel daca b 0 atunci scrie nu exista s olutii altfel scrie o infinitate de solutii sf.daca sf.daca stop 7. S se calculeze valoarea funciei f(x)= x2 , daca x<0 2x+1 , daca x>=0 pentru un x real dat. citeste x daca x<0 atunci f x*x altfel f 2*x+1 sf.daca scrie f stop 8. S se calculeze valoarea expresiei : E= A+B+C , C<=-1 C/(A+B) , -1<C<1 (A+B)/C , C>=1 pentru A,B,C numere ntregi date . citeste A,B,C daca C<=-1 atunci EA+B+c scrie E altfel daca C<1 atunci daca A+B 0 atunci EC/ (A+B) scrie E altfel scrie Imposbil sf.daca altfel E(A+B)/C scrie E sf.daca sf.daca stop 9. Se citete o zi , o lun i un an calendaristic . S se determine data zilei urmtoare. citeste zi,luna,an

Algoritmi fundamentali cazuri luna 1,3,5,7,8,10,12 : ultima31 4,6,9 : ultima30 : daca an%4=0 atunci ultima29 altfel ultima28 sf.daca sf.cazuri daca zi<ultima atunci zizi+1 altfel daca luna<12 atunci zi1 luna luna+ altfel zi1 luna1 anan+1 sf.daca sf.daca scrie zi,luna,an stop 10. Se citesc patru numere oarecare . S se analizeze dac ele alctuiesc o mulime n sens matematic . ntr-o mulime matematic elementele sunt distincte , nu se repet . Vom compara cele 4 valori dou cte dou . Pentru a sesiza nerespectarea unicitii , vom folosi o variabil iniializat cu 1 , creia i vom schimba valoarea cnd vom gsi o pereche de valori egale . citeste a,b,c,d sem 1 daca a=b atunci sem0 altfel daca a=c atunci sem0 altfel daca a=d atunci sem0 altfel daca b=c atunci sem0 altfel daca b=d atunci sem0 altfel daca c=d atunci 2 se m0 daca sf.daca sf.daca sf.daca sf.daca sf.

sf.daca daca sem=1 atunci scrie este multime altfel scrie nu este multime sf.daca stop. 11. S se evalueze expresia E=A2/(A2+B)1/2 , unde puterea nseamn radical de ordin doi , pentru A, B numere reale date . inem cont de faptul c radicalul de ordin doi este definit numai dac expresia de sub radical este pozitiv i c nu este posibil mprirea la 0. citeste A,B pA*A+B daca p<=0 atunci scrie calcul imposibil altfel EA*A/p scrie E sf.daca stop 12. S se rezolve sistemul de ecuaii cu coeficieni reali : ax+by=c , dx+ey=f , pentru a,b,c,d,e,f numere reale oarecare date . Folosim , spre exemplu , metoda reducerii i obinem soluiile: x=(ce-bf)/(ae-bd), y=(af-cd)/(ae-bd) evident , numai dac expresia ae-bd 0 . citeste a,b,c,d,e,f p a*e-b*d daca p 0 atunci x (c*e-b*f)/p y (a*f-c*d)/p scrie x,y altfel scrie nu exista solutii sf.daca stop

Algoritmi fundamentali II. Structura repetitiv 1. S se calculeze suma S=1+2+..+n , respectiv produsul P=1*2*.*n , pentru n natural nenul dat . citeste n S0 ; P1 pentru i=1,n SS+i PP*i sf.pentru scrie S, P stop 2. S se calculeze media aritmetic a n valori reale citite pe rnd de la tastatur . citeste n S0 pentru i=1,n citeste x SS+x sf.pentru maS/n scrie ma stop 3. S se realizeze nmulirea a dou numere naturale date a i b , prin adunri repetate . citeste a,b S0 pentru i=1,b SS+a /* a*b=a+a++a de b ori */ sf.pentru scrie S stop 4. S se calculeze ctul i restul mpririi a dou numere naturale nenule , a i b date , prin scderi repetate. citeste a,b cat0 cat timp a>=b aa-b catcat+1 sf.cat timp scrie cat , a /* a=restul */ stop 5. Fie funcia f:NN , f(x)= n+1 , n par n-1 , n impar S se calculeze s s se afieze valorile funciei pentru n=1,2,..,10. pentru n=1,10 daca n%2=0 atunci f n+1 altfel f n-1 sf.daca

scrie f sf.pentru stop 6. S se determine i s se afieze divizorii proprii ai unui numr natural nenul dat. inem cont c divizorii proprii ai unui numr natural n se gsesc n mulimea {2,3, , [n/2]} . citeste n pentru i=2,[n/2] daca n%i=0 atunci scrie i sf.daca sf.pentru stop 7. Se definete irul lui Fibonacci (legea creterilor organice) astfel : F(n)= 0 , n=0 1 , n=1 F(n-1)+F(n-2) , n>=2 adic termenii irului sunt : 0 , 1, 1, 2, 3, 5, 8, 13, 21,.. S se afieze termenii irului pentru n natural nenul dat . citeste n a0 /* primul termen */ b1 /* al doilea termen */ scrie a, ,b pentru i=2,n ca+b / urmtorul termen */ ab bc scrie c sf.pentru stop 8. S se verifice dac un numr natural n nenul dat , este sau nu numr prim. Facem urmtoarele observaii : - singurul numr par i prim este 2 ; pentru n=2 nu are sens s-I verificm divizorii proprii - orice alt numr par diferit de 2 este compus fiind multiplu de 2 - un numr impar nu are dect divozori impari de forma 3, 5, 7, - conform teoremei lui Euclid , dac un numr nu are divizori proprii n mulimea {2,3,n} atunci este numr prim citeste n daca n=2 atunci scrie prim stop sf.daca daca n%2=0 atunci scrie compus

Algoritmi fundamentali stop sf.daca pentru i=3, [n], 2 daca n%I=0 atunci scrie compus stop sf.daca sf.pentru scrie prim stop 9. S se descompun un numr natural nenul dat n factori primi , afisnd pentru fiecare factor prim i puterea corespunztoare . Algoritmul este cel din aritmetic . Se mparte numrul la 2 , ct timp mprirea se face exact . Numrul mpririlor efectuate reprezint puterea lui 2 . Se mparte apoi la 3 (dac mprirea se face exact) , la 5 etc , pn cnd , prin mpriri repetate numrul devine egal cu 1. citeste n i2 repeta p0 cat timp n%i=0 nn/i pp+1 sf.cat timp daca p 0 atunci scriei i, p /* i este factorul prim , p este puterea lui */ sf.daca daca i=2 atunci i3 altfel ii+2 sf.daca pana cand n=1 stop 10. Fiind dat un numr natural nenul cu maxim 8 cifre , s se determine i s se afieze cifrele sale . Ultima cifr a unui numr natural este restul mpririi numrului la 10 . Pentru a determina urmtoarele cifre , trebuie s eliminm aceast ultim cifr din numr . Numrul obinut prin eliminarea ultimei cifre este de fapt ctul mpririi ntregi a numrului la 10 . Repetm procedeul pn cnd numrul devine egal cu 0 , deci nu mai sunt cifre nedeterminate . citeste n repeta cifra n%10 scrie cifra n [n/10] pana cand n=0 stop 11. Se citesc pe rnd n numere reale nenule . S se afieze media aritmetic a cte dou numere citite succesiv. Pentru a calcula media aritmetic avem nevoie la fiecare pas de dou valori : valoarea citit la pasul anterior i valoarea citit la pasul curent . Vom memora cele dou valori n dou variabile : x i , respectiv y . Pentru a avea valoarea y disponibil pentru calculul urmtoarei medii , nainte de a trece la pasul urmtor , vom transfera aceast valoare n x . Prima valoare din cele n se citete n variabila x , n afara ciclului de calcul efectiv a mediilor . citeste n /* cate numere */ citeste x /* primul numar */ pentru i=2,n citeste y /* urmatorul numar */ ma(x+y)/2 scrie ma xy sf.pentru stop 12. Se citesc pe rnd n numere ntregi . S se verifice dac apar sau nu n ordine cresctoare. Se observ c irul este ordonat dac fiecare dou valori consecutive sunt ordonate , adic ak-1<=ak , pentru k=2,..,n . Este suficient ca o singur pereche s nu respecte relaia i irul nu mai este ordonat . Ca i n problema precedent , avem nevoie de valoarea citit la pasul precent i valoarea citit la pasul curent , deci vom lucra cu dou variabile , x i y . Deoarece toate cele n numere trebuiesc citite , indiferent dac n final irul este ordonat sau nu , vom folosi o variabil sem iniializat cu 1 creia i vom da valoarea 0 dac gsim o pereche neordonat . Testnd la sfrit valoarea acestei variabile putem lua o decizie corect asupra naturii irului . citeste n /* cate numere */ sem1 citeste x /* primul numar */ pentru i=2,n citeste y /* urmatoarul numar */ daca y>x atunci sem0 sf.daca xy sf.pentru daca sem=1 atunci scrie ordonat

Algoritmi fundamentali altfel scrie neordonat sf.daca stop 13. Fiind date dou numere naturale nenule , s se determine cmmdc i cmmmc al celor dou numere Pentru a determina cmmmc vom folosi relaia matematic : a*b=cmmdc(a,b)*cmmmc(a,b) . Problema se reduce la determinarea cmmdc a dou numere naturale nenule . Unul din cei mai cunoscui algoritmi pentru rezolvarea acestei probleme este algoritmul lui Euclid . Pentru a nelege modul de calcul vom considera un exemplu : a=72 , b=60 72%60=12 ; 60%12=0 => cmmdc=12 (ultimul rest nenul) a=45 , b=27 45%27=18 ; 27%18=9 ; 18%9=0 => cmmdc=9 (ultimul rest nenul) citeste a,b pa*b /* a i b i modific valoarea deci produsul lor trebuie calculat nainte de a aplica alg. Lui Euclid */ repeta resta%b ab brest pana cand rest=0 cmmdc a /* ultimul rest nenul */ cmmmc p/cmmdc scrie cmmdc, cmmmc stop 14. Fie P(x)=anxn+an-1xn-1+..+a1x+a0 . S se calculeze valoarea expresiei pentru x real dat , n natural dat i numerele a0 , a1,.,an reale date . Expresia de mai sus se numete polinom , x fiind argumentul polinomului . Gradul maxim al lui x ( n n notaia de mai sus ) se numete gradul polinomului , iar numerele a0 , a1, .,an se numesc coeficienii polinomului . Exist dou metode pentru calculul valorii polinomului n punctul x dat , dup cum coeficienii polinomului se citesc n ordinea cresctoare sau descresctoare a puterilor lui x . a) coeficienii se citesc n ordinea descresctoare a puterilor lui x , adic n ordinea an , an-1 ,.,a0 Facem urmtoarele observaii : - dac n=0 , atunci P0(x)=an -

dac n=1 , atunci P1(x)=anx+an1=P0(x)*x+an-1 - dac n=2 ,atunci P2(x)=anx2+an-1xn-1+an-2 =(anx+an-1)*x+an-2=P1(x)*x+an-2 - generaliznd , Pk(x)=Pk-1(x)*x+an-k , iar modul de calcul se numete gruparea lui Horner citeste n /* gradul polinomului */ citeste x /* punctul n care calculm valoarea lui P(x) */ P0 pentru k=n, 0, -1 citeste a /* coeficientul ak */ P P*x+a sf.pentru scrie P stop b) coeficienii se citesc n ordinea cresctoare a puterilor , adic n ordinea a0 , a1 , , an Facem urmtoarele observaii : - dac n=0 , atrunci P0(x)=a0 - dac n=1 , atunci P1(x)=a0+a1x=P0(x) +a1x1 - dac n=2 , atunci P2(x)=a0+a1x+a2x2 =P1(x)+a2x2 - generaliznd , Pk(x)=Pk-1(x)+akxk Se observ c trebuie s calculm puterile succesive ale lui x i s le adugm la valoarea polinomului citeste n /* gradul polinomului */ citeste x /* punctul n care calculm valoarea */ P 0 q 1 /* corespunztor lui x0 */ pentru k=0 , n citeste a /* coeficientul ak */ P P+a*q qq*x /* calculm xk+1 pentru urmtorul pas */ sf.pentru scrie P stop 15. S se treac un numr natural nenul din baza 10 n baza p dat (2<=p<=9) . Algoritmul de trecere din baza 10 ntr-o alt baz este cel din aritmetic : se mparte numrul la p obinndu-se un ct i un rest ; ctul obinut se mparte la p i aa mai departe pn cnd se obine ctul 0 . Se scriu resturile obinute n ordine invers , numrul rezultat fiind echivalentul n baza p. Exemplu : n=47 , p=2 47:2 => cat=23 , rest=1 23:2 => cat=11 , rest=1

Algoritmi fundamentali 11:2 => cat=5 , rest=1 5:2 => cat=2 , rest=1 2:2 => cat=1 , rest=0 1:2 => cat=0 , rest=1 numarul obtinut este : 1011112 Problema care apare este afiarea numrului obinut pentru c resturile se obin n ordinea invers a scrierii lor n numr . n plus , pentru calculator , numrul afiat este vzut ca un numr zecimal obinuit . Simultan cu determinarea resturilor , trebuie s calculm numrul zecimal care trebuie afiat . Pentru aceasta , vom utiliza a doua metod de calcul de la polinom , deoarece cturile reprezint coeficienii unui polinom pentru x=10 , coeficieni furnizai n ordinea cresctoare a puterilor lui 10 . (101111=1*100+1*101+1*102+ 1*103 +0*104+1*105) citeste n /* numarul in baza 10 */ citeste p /* baza in care trecem n */ baza 0 /* numarul in baza p */ putere1 /* 100 */ repeta cifra n%p n [n/p] bazabaza+cifra*putere putere putere*10 pana cand n=0 scrie baza stop 16. Se citete un numr scris n baza p dat (2<=p<=9). S se determine echivalentul zecimal al respectivului numr . Folosim formula de calcul a echivalentului zecimal al unui numr dat ntr-o baz oarecare p : (Cncn-1c1c0)p=c0*p0+c1*p1+.+cn*pn , unde ck 0<=k<=n , sunt cifrele numrului scris n baza p . Se observ c trebuie s extragem pe rnd cifrele numrului i s le nmulim cu puterile corespunztoare ale bazei . Practic ,se combin algoritmul pentru determinarea cifrelor unui numr cu cel pentru calculul valorii unui polinom n punctul x=p (baza) prin a doua metod . citeste n /* numrul n baza p */ citeste p /*baza n care este scris*/ baza0 /* echivalentul zecimal */ putere1 /* p0 */ repeta cifra n%10

n [n/10] baza baza+cifra*putere putere putere*p pana cand n=0 scrie baza stop 17. S se treac un numr scris n baza p dat (2<=p<=9) , n baza q dat (2<=q<=9 ,q p). Folosim algoritmul de la problema 15 pentru a calcula echivalentul zecimal al numrului dat , apoi algoritmul de la problema 14 pentru a trece numrul zecimal obinut n baza q . citeste n /* numrul n baza p */ citeste p, q /* bazele de lucru */ b10 0 /* echivalentul zecimal */ putere1 /* p0 */ repeta cifra n%10 n [n/10] b10 b10+cifra*putere putere putere*p pana cand n=0 /* trecem numrul b10 n baza q */ m 0 /* numarul in baza q */ putere1 /* 100 */ repeta cifra b10%q b10 [b10/q] mm+cifra*putere putere putere*10 pana cand b10=0 scrie m stop 18. S se treac un numr din baza 16 n baza 10. Citirea numrului se face cifr cu cifr de la stnga la dreapta pn la citirea caracterului spaiu. La scrierea unui numr n baza 16 se folosesc cifrele 0..9 , literele a..f sau AF. Scrierea numrului fiind practic o combinaie de litere i cifre , vom trata numrul ca pe un ir de caractere. Fiecare caracter citit va fi transformat n echivalent zecimal pe baza codurilor ASCII asociate . Citirea fcndu-se caracter cu caracter de la stnga la dreapta , pentru a calcula echivalentul zecimal , vom folosi prima metod de calcul de la polinoame, cifrele numrului constituind coeficienii polinomului pentru x=16 . baza 0 /* echivalentul zecimal */

Algoritmi fundamentali citeste car /* un carac. din numar */ cat timp car /* de spatiu */ cazuri car 0..9 : bazabaza*16+ cod(car)cod(0) a..f : bazabaza*16+ cod(car)-cod(a) +10 A..F : bazabaza*16+ cod(car)-cod(A) +10 sf.cazuri citeste car sf.cat timp scrie baza stop 19. S se verifice dac un numr natural nenul dat este palindrom , adic citit de la dreapta la stnga i de la stnga la dreapta reprezint acelai numr . Pentru a verifica proprietatea , vom extrage pe rnd cifrele numrului i vom construi simultan numrul zecimal cu cifrele n ordine invers . Dac obinem aceeai valoare , numrul iniial dat este palindrom . citeste n inv 0 /* numrul invers */ t n /* lucrm cu copia lui n */ repeta cifra t%10 t [t/10] inv inv*10+cifra pana cand t=0 daca n=inv atunci scrie este palindrom altfel scrie nu este palindrom sf.daca stop 20. S se verifice dac un numr natural nenul dat este perfect , adic egal cu suma divizorilor si proprii , inclusiv 1 . Exemplu : 6=1+2+3 Determinm pe rnd divizorii proprii ai numrului i-i nsumm plecnd de la 1 . Dac suma obinut este egal cu numrul dat , acesta este perfect . citeste n S 1 /* suma divizorilor */ pentru k=2, [n/2] daca n%k=0 atunci S S+k sf.daca sf.pentru daca n=S

atunci scrie este perfect altfel scrie nu este perfect sf.daca stop 21. Se citesc pe rnd n numere reale. S se determine numrul valorilor pozitive , numrul valoriloe negative i , respectiv , numrul valorilor nule introduse . citeste n /* numarul valorilor */ poz0 /* numarul valorilor negative */ neg0 /* numarul valorilor negative */ nul0 /* numarul valorilor nule */ pentru k=1, n citeste x /* o valoare */ daca x>0 atunci pozpoz+1 altfel daca x<0 atunci negneg+1 altfel nulnul+1 sf.daca sf.daca sf.pentru scrie poz, neg, nul stop 22. Se citesc pe rnd n numere naturale nenule . S se determine cmmdc al celor n numere . Vom determina cmmdc dintre primul i al doilea numr , apoi cmmdc dintre acest cmmdc i al treilea numr etc . n final , obinem cmmdc al celor n numere . citeste n /* cte numere */ citeste x /* primul numr */ pentru k=2, n citeste y /* urmtorul numr */ repeta restx%y x y y rest pana cand rest=0 /* x=cmmdc */ sf.pentru scrie x /* cmmdc */ stop 23. Se citesc pe rnd n numere . S se determine minimul (maximul ) dintre ele . Pentru a rezolva problema , vom generaliza algoritmul de determinare a maximului (minimului) dintre 3 valori . citeste n /* cte numere */ citeste x /* primul numr */ max x

Algoritmi fundamentali pentru k=2, n citeste x /* urmtorul numr */ daca max<x atunci max x sf.daca sf.pentru scrie max stop 24. Se citesc pe rnd n numere reale . S se calculeze media aritmetic a valorilor strict pozitive . Vom nsuma i numra numai valorile strict pozitive citite . citeste n /* cte valori */ S0 /* suma valorilor */ Nr0 /* numrul valorilor */ pentru k=1, n citeste x /* o valoare */ daca x>=0 atunci SS+x NrNr+1 sf.daca sf.pentru maS/Nr scrie ma stop

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