Algoritmi fundamentali I . Structura alternativă 1. Să se calculeze şi să se afişeze 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 citeşte 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. Stabiliţi relaţia 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 tipărească 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

1

6. Să se rezolve ecuaţia de gradul I pentru coeficienţii a,b reali daţi . 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 funcţiei 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 E A+B+c scrie E altfel daca C<1 atunci daca A+B≠ 0 atunci E C/ (A+B) scrie E altfel scrie ‘Imposbil’ sf.daca altfel E (A+B)/C scrie E sf.daca sf.daca stop 9. Se citeşte o zi , o lună şi un an calendaristic . Să se determine data zilei următoare. citeste zi,luna,an

daca stop . Pentru a sesiza nerespectarea unicităţii .y altfel scrie ‘nu exista solutii’ sf. vom folosi o variabilă iniţializată cu 1 . pentru a.10. Să se rezolve sistemul de ecuaţii cu coeficienţi reali : ax+by=c .B p A*A+B daca p<=0 atunci scrie ‘calcul imposibil’ altfel E A*A/p scrie E sf. citeste A. Folosim .cazuri daca zi<ultima atunci zi zi+1 altfel daca luna<12 atunci zi 1 luna luna+ altfel zi 1 luna 1 an an+1 sf.6.c. B numere reale date .c.daca sf. Să se evalueze expresia E=A2/(A2+B)1/2 . Într-o mulţime matematică elementele sunt distincte .b.c.f p a*e-b*d daca p≠ 0 atunci x (c*e-b*f)/p y (a*f-c*d)/p scrie x.daca daca sem=1 atunci scrie ‘este multime’ altfel scrie ‘nu este multime’ sf.d.b. pentru A.7.d.daca stop 12. citeste a. citeste a.d sem 1 daca a=b atunci sem 0 altfel daca a=c atunci sem 0 altfel daca a=d atunci sem 0 altfel daca b=c atunci sem 0 altfel daca b=d atunci sem 0 altfel daca c=d atunci 2 se m 0 daca sf. Să se analizeze dacă ele alcătuiesc o mulţime în sens matematic . unde puterea ½ înseamnă radical de ordin doi .f numere reale oarecare date .daca sf. 2 1 sf.3.daca sf. spre exemplu . metoda reducerii şi obţinem soluţiile: x=(ce-bf)/(ae-bd).e. nu se repetă .daca sf. y=(af-cd)/(ae-bd) evident .daca sf.8.luna.an stop 10. 11.12 : ultima 31 4.Algoritmi fundamentali cazuri luna 1.daca scrie zi. căreia îi vom schimba valoarea când vom găsi o pereche de valori egale . Ţinem cont de faptul că radicalul de ordin doi este definit numai dacă expresia de sub radical este pozitivă şi că nu este posibilă împărţirea la 0.e.5.b. Vom compara cele 4 valori două câte două . numai dacă expresia ae-bd≠0 .9 : ultima 30 : daca an%4=0 atunci ultima 29 altfel ultima 28 sf. Se citesc patru numere oarecare .daca stop.daca sf. dx+ey=f .

citeste n a 0 /* primul termen */ b 1 /* al doilea termen */ scrie a. Ţinem cont că divizorii proprii ai unui număr natural n se găsesc în mulţimea {2. pentru n=2 nu are sens să-I verificăm divizorii proprii . Să se realizeze înmulţirea a două numere naturale date a şi b . n=1 F(n-1)+F(n-2) . citeste a.+n .….[n/2] daca n%i=0 atunci scrie i sf. n impar Să se calculeze să să se afişeze valorile funcţiei pentru n=1.daca 3 scrie f sf. P 1 pentru i=1. 7.pentru scrie S. Fie funcţia f:NN .un număr impar nu are decăt divozori impari de forma 3..’ ‘. n=0 1 .pentru scrie S stop 4.pentru ma S/n scrie ma stop 3. citeste n S 0 . 1. dacă un număr nu are divizori proprii în mulţimea {2.3.b S 0 pentru i=1.…√n} atunci este număr prim citeste n daca n=2 atunci scrie ‘prim’ stop sf.n S S+i P P*i sf. [n/2]} . a /* a=restul */ stop 5. 13. Structura repetitivă 1. citeste n pentru i=2. pentru n=1. 3.10 daca n%2=0 atunci f n+1 altfel f n-1 sf.10..….cat timp scrie cat . Să se calculeze suma S=1+2+…. 5. pentru n natural nenul dat .daca daca n%2=0 atunci scrie ‘compus’ .pentru stop 8. Să se afişeze termenii şirului pentru n natural nenul dat . prin adunări repetate . Să se determine şi să se afişeze divizorii proprii ai unui număr natural nenul dat.Algoritmi fundamentali II. prin scăderi repetate.orice alt număr par diferit de 2 este compus fiind multiplu de 2 . 21.pentru stop 6...conform teoremei lui Euclid . 8. Să se calculeze câtul şi restul împărţirii a două numere naturale nenule .… . . f(x)= n+1 . respectiv produsul P=1*2*…….b pentru i=2. P stop 2. 1. 5. citeste a.n c a+b / următorul termen */ a b b c scrie c sf.n citeste x S S+x sf. n par n-1 . Să se calculeze media aritmetică a n valori reale citite pe rând de la tastatură .b cat 0 cat timp a>=b a a-b cat cat+1 sf.*n .2. citeste n S 0 pentru i=1. a şi b date . n>=2 adică termenii şirului sunt : 0 . 2. Se defineşte şirul lui Fibonacci (legea creşterilor organice) astfel : F(n)= 0 .b S S+a /* a*b=a+a+…+a de b ori */ sf. Facem următoarele observaţii : . Să se verifice dacă un număr natural n nenul dat .daca sf.pentru stop 7. este sau nu număr prim.singurul număr par şi prim este 2 .3.

pentru stop 12. p /* i este factorul prim .n citeste y /* urmatorul numar */ ma (x+y)/2 scrie ma x y sf. Se împarte numărul la 2 .daca sf. înainte de a trece la pasul următor . indiferent dacă în final şirul este ordonat sau nu . Numărul obţinut prin eliminarea ultimei cifre este de fapt câtul împărţirii întregi a numărului la 10 . Prima valoare din cele n se citeşte în variabila x . adică ak-1<=ak . deci vom lucra cu două variabile .daca daca i=2 atunci i 3 altfel i i+2 sf.. avem nevoie de valoarea citită la pasul precent şi valoarea citită la pasul curent . p este puterea lui */ sf. Se citesc pe rând n numere întregi . să se determine şi să se afişeze cifrele sale . pentru k=2.n citeste y /* urmatoarul numar */ daca y>x atunci sem 0 sf. trebuie să eliminăm această ultimă cifră din număr . Să se descompună un număr natural nenul dat în factori primi . Numărul împărţirilor efectuate reprezintă puterea lui 2 . citeste n /* cate numere */ citeste x /* primul numar */ pentru i=2. Pentru a calcula media aritmetică avem nevoie la fiecare pas de două valori : valoarea citită la pasul anterior şi valoarea citită la pasul curent . deci nu mai sunt cifre nedeterminate .cat timp daca p≠ 0 atunci scriei i. Se observă că şirul este ordonat dacă fiecare două valori consecutive sunt ordonate . afisând pentru fiecare factor prim şi puterea corespunzătoare . Vom memora cele două valori în două variabile : x şi . Testând la sfârşit valoarea acestei variabile putem lua o decizie corectă asupra naturii şirului . Să se afişeze media aritmetică a căte două numere citite succesiv.. vom transfera această valoare în x .daca pana cand n=1 stop 10. [√n]. Este suficient ca o singură pereche să nu respecte relaţia şi şirul nu mai este ordonat . respectiv y .n . citeste n i 2 repeta p 0 cat timp n%i=0 n n/i p p+1 sf. Se împarte apoi la 3 (dacă împărţirea se face exact) . prin împărţiri repetate numărul devine egal cu 1. Fiind dat un număr natural nenul cu maxim 8 cifre .pentru scrie ‘prim’ stop 9. Se citesc pe rând n numere reale nenule .pentru daca sem=1 atunci scrie ‘ordonat’ 4 . Algoritmul este cel din aritmetică . vom folosi o variabilă sem iniţializată cu 1 căreia îi vom da valoarea 0 dacă găsim o pereche neordonată . citeste n /* cate numere */ sem 1 citeste x /* primul numar */ pentru i=2. Ultima cifră a unui număr natural este restul împărţirii numărului la 10 . 2 daca n%I=0 atunci scrie ‘compus’ stop sf. citeste n repeta cifra n%10 scrie cifra n [n/10] pana cand n=0 stop 11. Pentru a avea valoarea y disponibilă pentru calculul următoarei medii . Repetăm procedeul până când numărul devine egal cu 0 .daca x y sf. în afara ciclului de calcul efectiv a mediilor . Ca şi în problema precedentă . Deoarece toate cele n numere trebuiesc citite .Algoritmi fundamentali stop sf. cât timp împărţirea se face exact .. până când . Să se verifice dacă apar sau nu în ordine crescătoare. la 5 etc . x şi y .daca pentru i=3. Pentru a determina următoarele cifre .

dacă n=2 . -1 citeste a /* coeficientul ak */ P P*x+a sf. Gradul maxim al lui x ( n în notaţia de mai sus ) se numeşte gradul polinomului .. 27%18=9 . să se determine cmmdc şi cmmmc al celor două numere Pentru a determina cmmmc vom folosi relaţia matematică : a*b=cmmdc(a. Pk(x)=Pk-1(x)+akxk Se observă că trebuie să calculăm puterile succesive ale lui x şi să le adăugăm la valoarea polinomului citeste n /* gradul polinomului */ citeste x /* punctul în care calculăm valoarea */ P 0 q 1 /* corespunzător lui x0 */ pentru k=0 . a1.pentru scrie P stop 15. atunci P1(x)=anx+an1=P0(x)*x+an-1 .an se numesc coeficienţii polinomului .…….generalizând . rest=1 23:2 => cat=11 . iar modul de calcul se numeşte “gruparea lui Horner” citeste n /* gradul polinomului */ citeste x /* punctul în care calculăm valoarea lui P(x) */ P 0 pentru k=n.b)*cmmmc(a. Exemplu : n=47 .…. Există două metode pentru calculul valorii polinomului în punctul x dat . adică în ordinea a0 . Pentru a înţelege modul de calcul vom considera un exemplu : a=72 .an reale date . atunci P0(x)=an - 5 dacă n=1 . câtul obţinut se împarte la p şi aşa mai departe până când se obţine câtul 0 .daca stop 13. n natural dat şi numerele a0 . rest=1 . p=2 47:2 => cat=23 . adică în ordinea an . Algoritmul de trecere din baza 10 într-o altă bază este cel din aritmetică : se împarte numărul la p obţinându-se un cât şi un rest .a0 Facem următoarele observaţii : . Să se treacă un număr natural nenul din baza 10 în baza p dată (2<=p<=9) . Expresia de mai sus se numeşte polinom . b=60 72%60=12 . 0.dacă n=0 .atunci P2(x)=anx2+an-1xn-1+an-2 =(anx+an-1)*x+an-2=P1(x)*x+an-2 .+a1x+a0 . a1 .Algoritmi fundamentali altfel scrie ‘neordonat’ sf. 60%12=0 => cmmdc=12 (ultimul rest nenul) a=45 ...b) . Problema se reduce la determinarea cmmdc a două numere naturale nenule . a1. Unul din cei mai cunoscuţi algoritmi pentru rezolvarea acestei probleme este algoritmul lui Euclid . b=27 45%27=18 . Fie P(x)=anxn+an-1xn-1+………….. …. an Facem următoarele observaţii : .pentru scrie P stop b) coeficienţii se citesc în ordinea crescătoare a puterilor .dacă n=1 .b p a*b /* a şi b îşi modifică valoarea deci produsul lor trebuie calculat înainte de a aplica alg. numărul rezultat fiind echivalentul în baza p. atunci P2(x)=a0+a1x+a2x2 =P1(x)+a2x2 . Pk(x)=Pk-1(x)*x+an-k . an-1 . …………. Fiind date două numere naturale nenule . n citeste a /* coeficientul ak */ P P+a*q q q*x /* calculăm xk+1 pentru următorul pas */ sf. Se scriu resturile obţinute în ordine inversă . x fiind argumentul polinomului .dacă n=2 . 18%9=0 => cmmdc=9 (ultimul rest nenul) citeste a. a) coeficienţii se citesc în ordinea descrescătoare a puterilor lui x . iar numerele a 0 . după cum coeficienţii polinomului se citesc în ordinea crescătoare sau descrescătoare a puterilor lui x . Lui Euclid */ repeta rest a%b a b b rest pana cand rest=0 cmmdc a /* ultimul rest nenul */ cmmmc p/cmmdc scrie cmmdc. atrunci P0(x)=a0 . cmmmc stop 14.dacă n=0 . Să se calculeze valoarea expresiei pentru x real dat .generalizând . atunci P1(x)=a0+a1x=P0(x) +a1x1 .

Folosim formula de calcul a echivalentului zecimal al unui număr dat într-o bază oarecare p : (Cncn-1……c1c0)p=c0*p0+c1*p1+……. rest=1 numarul obtinut este : 1011112 Problema care apare este afişarea numărului obţinut pentru că resturile se obţin în ordinea inversă a scrierii lor în număr . literele ‘a’. q /* bazele de lucru */ b10 0 /* echivalentul zecimal */ putere 1 /* p0 */ repeta cifra n%10 n [n/10] b10 b10+cifra*putere putere putere*p pana cand n=0 /* trecem numărul b10 în baza q */ m 0 /* numarul in baza q */ putere 1 /* 100 */ repeta cifra b10%q b10 [b10/q] m m+cifra*putere putere putere*10 pana cand b10=0 scrie m stop 18.’f’ sau ‘A’…’F’. În plus . unde ck 0<=k<=n . baza 0 /* echivalentul zecimal */ 6 . Citirea numărului se face cifră cu cifră de la stânga la dreapta până la citirea caracterului spaţiu. Se citeşte un număr scris în baza p dată (2<=p<=9). Se observă că trebuie să extragem pe rând cifrele numărului şi să le înmulţim cu puterile corespunzătoare ale bazei . vom trata numărul ca pe un şir de caractere. rest=0 1:2 => cat=0 . (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 */ putere 1 /* 100 */ repeta cifra n%p n [n/p] baza baza+cifra*putere putere putere*10 pana cand n=0 scrie baza stop 16. vom folosi prima metodă de calcul de la polinoame..9 . Scrierea numărului fiind practic o combinaţie de litere şi cifre . rest=1 2:2 => cat=1 . cifrele numărului constituind coeficienţii polinomului pentru x=16 . sunt cifrele numărului scris în baza p .. trebuie să calculăm numărul zecimal care trebuie afişat .+cn*pn . deoarece câturile reprezintă coeficienţii unui polinom pentru x=10 . Fiecare caracter citit va fi transformat în echivalent zecimal pe baza codurilor ASCII asociate . numărul afişat este văzut ca un număr zecimal obişnuit . Să se determine echivalentul zecimal al respectivului număr .Algoritmi fundamentali 11:2 => cat=5 . rest=1 5:2 => cat=2 . citeste n /* numărul în baza p */ citeste p. vom utiliza a doua metodă de calcul de la polinom . La scrierea unui număr în baza 16 se folosesc cifrele 0. apoi algoritmul de la problema 14 pentru a trece numărul zecimal obţinut în baza q . Citirea făcându-se caracter cu caracter de la stânga la dreapta .se combină algoritmul pentru determinarea cifrelor unui număr cu cel pentru calculul valorii unui polinom în punctul x=p (baza) prin a doua metodă . Să se treacă un număr din baza 16 în baza 10. citeste n /* numărul în baza p */ citeste p /*baza în care este scris*/ baza 0 /* echivalentul zecimal */ putere 1 /* p0 */ repeta cifra n%10 n [n/10] baza baza+cifra*putere putere putere*p pana cand n=0 scrie baza stop 17. pentru calculator . Să se treacă un număr scris în baza p dată (2<=p<=9) . pentru a calcula echivalentul zecimal . Practic . Folosim algoritmul de la problema 15 pentru a calcula echivalentul zecimal al numărului dat . în baza q dată (2<=q<=9 . Simultan cu determinarea resturilor . coeficienţi furnizaţi în ordinea crescătoare a puterilor lui 10 . Pentru aceasta .q≠p).

respectiv . obţinem cmmdc al celor n numere ..’9’ : baza baza*16+ cod(car)cod(‘0’) ‘a’.. citeste n /* câte numere */ citeste x /* primul număr */ max x . Pentru a rezolva problema . Să se verifice dacă un număr natural nenul dat este palindrom . numărul valorilor nule introduse .cazuri citeste car sf. Să se verifice dacă un număr natural nenul dat este “perfect” . citeste n /* câte numere */ citeste x /* primul număr */ pentru k=2.’F’ : baza baza*16+ cod(car)-cod(‘A’) +10 sf. din numar */ cat timp car≠ ’ ‘ /* ≠ de spatiu */ cazuri car ‘0’.pentru scrie x /* cmmdc */ stop 23. Exemplu : 6=1+2+3 Determinăm pe rând divizorii proprii ai numărului şi-i însumăm plecând de la 1 . Vom determina cmmdc dintre primul şi al doilea număr .cat timp scrie baza stop 19. citeste n /* numarul valorilor */ poz 0 /* numarul valorilor negative */ neg 0 /* numarul valorilor negative */ nul 0 /* numarul valorilor nule */ pentru k=1. Pentru a verifica proprietatea .daca sf. n citeste x /* o valoare */ daca x>0 atunci poz poz+1 altfel daca x<0 atunci neg neg+1 altfel nul nul+1 sf. [n/2] daca n%k=0 atunci S S+k sf. Să se determine numărul valorilor pozitive . neg. citeste n S 1 /* suma divizorilor */ pentru k=2.. Să se determine minimul (maximul ) dintre ele .pentru daca n=S 7 atunci scrie ‘este perfect” altfel scrie ‘nu este perfect’ sf. Se citesc pe rând n numere reale. Să se determine cmmdc al celor n numere . acesta este “perfect” .daca sf.daca stop 21. adică citit de la dreapta la stânga şi de la stânga la dreapta reprezintă acelaşi număr . citeste n inv 0 /* numărul invers */ t n /* lucrăm 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. numărul valoriloe negative şi .pentru scrie poz. inclusiv 1 . nul stop 22. n citeste y /* următorul număr */ repeta rest x%y x y y rest pana cand rest=0 /* x=cmmdc */ sf. apoi cmmdc dintre acest cmmdc şi al treilea număr etc . vom extrage pe rând cifrele numărului şi vom construi simultan numărul zecimal cu cifrele în ordine inversă .’f’ : baza baza*16+ cod(car)-cod(‘a’) +10 ‘A’. vom generaliza algoritmul de determinare a maximului (minimului) dintre 3 valori .daca stop 20. Dacă suma obţinută este egală cu numărul dat .daca sf. Dacă obţinem aceeaşi valoare . adică egal cu suma divizorilor săi proprii . Se citesc pe rând n numere . numărul iniţial dat este palindrom . Se citesc pe rând n numere naturale nenule . În final .Algoritmi fundamentali citeste car /* un carac.

pentru scrie max stop 24.pentru ma S/Nr scrie ma stop 8 . Se citesc pe rând n numere reale . n citeste x /* o valoare */ daca x>=0 atunci S S+x Nr Nr+1 sf.daca sf.Algoritmi fundamentali pentru k=2. Vom însuma şi număra numai valorile strict pozitive citite .daca sf. n citeste x /* următorul număr */ daca max<x atunci max x sf. Să se calculeze media aritmetică a valorilor strict pozitive . citeste n /* câte valori */ S 0 /* suma valorilor */ Nr 0 /* numărul valorilor */ pentru k=1.