Documente Academic
Documente Profesional
Documente Cultură
citeste n
pregatesc prelucrarea( depinde de problema)
cat timp n>0 executa
ucn%10 (adica am extras cifra unitatilor/ultima cifra)
prelucrez uc (depinde de problema)
n[n/10] (scap de ultima cifra, fara instructiunea asta as cicla la infinit)
sfarsit_cattimp
Observatii:
1) cazul n=0 trebuie tratat separat(de exemplu, daca ar trebui sa numaram cate cifre are n. Pentru n=0,
conform algoritmului ar reiesi ca are 0 cifre, ceea ce este fals!!!!!!)
2) prelucrarile pot fi: -calcule de sume (atunci variabila care calculeaza suma, va fi initial 0)
-calcule de produse(atunci variabila care calculeaza produsul va fi initial 1)
-contorizari, adica textul ne zice:” cate cifre are…” sau “numarati cate cife sunt
….” atunci variabila in care se face numararea va fi 0
- pentru media aritmetica avem nevoie si de suma(s) si de contor(k), iar la sfarsit
se testeaza daca, contorul(k) este diferit de 0 si atunci mas/k, iar in C++ va fi
ma=(float)s/k ( convertesc la numar real s, ca sa iasa corect calculul mediei
aritmetice)
-----determinarea oglinditului
citeste n
ogl0
cat timp n>0 executa
ucn%10
oglogl*10+uc
n[n/10]
sfarsit_cattimp
tipareste ogl
Nu e obligatoriu sa scrieti explicit ucn%10, puteti sa folositi valoarea n%10, direct in calculul oglinditului, adica
oglogl*10+n%10
1
Algoritmi fundamentali- dedicație: pentru clasa a IX-a B
Prof. Daniela Cameniță
citeste n
ogl0
auxn (numarul initial trebuie salvat ca se pierde, ajungand la 0)
cat timp n>0 executa
oglogl*10+uc
n[n/10]
sfarsit_cattimp
daca ogl=aux atunci
tipareste” este palindrom”
altfel
sfarsit daca
b) cu structura repetă…… până când (structura repetitivă cu număr necunoscut de pași condiționata
posterior/ cu test final
citeste n
pregatesc prelucrarea( depinde de problema)
repetă
ucn%10
prelucrez uc (depinde de problema)
n[n/10]
până când n=0
Observatii:
De exemplu: modificarea fiecarei cifre pare, crescand-o cu o unitate(daca n=1234, va rezulta 1335)
citeste n
nr0 (nr este numarul care vreau sa-l construiesc)
P1 (P ordinal unitatilor care este 100
cat timp n<>0
ucn%10
daca uc%2=0 atunci
nrnr+P*(uc+1) (aici au loc modificarile cerute de problema)
PP*10 (creste P, ca va fi pe pozitia zecilor, apoi a sutelor, etc deci trebuie inmultit cu 10)
sfarsitdaca
nn/10
sfarsitcattimp
scrie nr
P3. Se citeste un numar natural. Precizati daca are toate cifrele pare
P4. Se citeste un numar natural si o cifra c. Determinati de cate ori apare c in numar
Exemplu: pentru n=49186. Se calculeaza intai 6+8+1+9+4=>28, apoi la 28, pentru ca nu este inca o cifra se
calculeaza 8+2=10, pentru ca nu este inca o cifra calculez 0+1=> 1
3
Algoritmi fundamentali- dedicație: pentru clasa a IX-a B
Prof. Daniela Cameniță
2. ALGORITMI PENTRU GENUL DE PROBLEMA GEN “ SE CITESC PE RAND NUMERE PANA LA INTALNIREA
NUMARULUI X( X DAT). DETERMINATI…..”
Citeste n
Pregatesc prelucrarea (depinde de problema)
Cat timp n<>X
Prelucrez (depinde de problema)
Citeste n (ft important, altfel cicleaza la infinit!!!!!!)
Sfarsit cattimp
Exemplu: se citesc pe rand numere pana la intalnirea numarului 0. Determinati daca s-au citit mai
multe numere pozitive, mai multe negative, sau in mod egal. Dati un mesaj corespunzator.
Citeste n
Kn0 (Kn este contorul care va numara cate numere sunt negative)
Kp0 (Kp este contorul care va numara cate numere sunt positive)
Cat timp n<>0
daca n>0 atunci
KpKp+1
altfel
KnKn+1
Sfrasit daca
Citeste n
Sfarsit cattimp
daca Kp<Kn atunci
scrie “S-au citit mai multe negative”
altfel
daca Kp>Kn atunci
scrie “S-au citit mai multe pozitive”
altfel
scrie “Numar egal de numere negative si pozitive”
sfarsit daca
sfarsitdaca
4
Algoritmi fundamentali- dedicație: pentru clasa a IX-a B
Prof. Daniela Cameniță
3. ALGORITMI DE DETERMINARE A CMMDC(cel mai mare divizor comun) A DOUA NUMERE DATE
EX: a=24, b=30 => cmmdc=6
a) PRIN SCADERI REPETATE
citeste a, b
cat timp a<>b executa
daca a>b atunci
aa-b
altfel
bb-a
sfarsit daca
sfarsit cattimp
cmmdca
scrie cmmdc
Observatie:Daca unul dintre numere este 0, atunci cmmdc=numarul nenul(se trateaza ca si caz particular, in
algorimii de mai sus nu am prevazut cazul)
P2. Determinarea daca doua numere sunt prime intre ele(adica cmmdc=1)
P3: Aducerea unei fractii data prin numarator si numitor la o fractie ireductibila(fractia se simplifica cu
cmmdc. Atentie! Trebuie salvate valorile initiale ale numaratorului si numitorului)
Cit. n
f2 //f reprezinta factorul prim
cat timp n>1 executa
p0 //p reprezinta puterea la care va apare factorul f in descompunere
cat timp n%f=0 executa
nn/f
pp+1
sfarsit cattimp
daca p>0 atunci
scrie f, “la puterea “, p
sfarsit daca
daca f=2 atunci f3
altfel
ff+2
sfarsit daca //se modifica factorul, si deoarece doar 2 este factor par, de la 2 il transform in 3,
//altfel modific factorul din 2 in 2
sfarsit cat timp
Aplicatie:
-Numarul de divizori ai unui numar natural este
(p1+1)*(p2+1)*…*(pk+1), unde n=f1p1*f2p2*…*fkpk
P1. Precizati unde se face modificarea pentru a afisa descompunerea in factori primi(ca la matematica)
P2.Aflati cel mai mare exponent care apare in descompunerea in factori primi
P3. Folosind descompunerea in factori primi determinati daca un numar este prim sau nu-
6
Algoritmi fundamentali- dedicație: pentru clasa a IX-a B
Prof. Daniela Cameniță
Observăm că: cel mai mic divizor propriu poate fi 2 și cel mai mare jumatatea numarului
Citeste n
pentru d2, [n/2] executa
Daca n %d=0 atunci
prelucrez d (depinde de problema, poate se scrie, sau se aduna, sau se contorizeaza, etc)
sfarsit daca
sfarsit pentru
Alte imbunatatiri ale algoritmului pentru probleme de finete vom vedea la clasa!!!
Aplicatie: Determinati daca un numar este perfect (adica este egal cu suma divizorilor sai, fara el insusi)
Exemple de numere perfecte: 6 (6=1+2+3). 28(28=1+2+4+7+14)
Cit n
sw1 (adica presupun ca este prim)
pentru d2, [n/2] executa
daca n %d=0 atunci
sw0 (daca am gasit divizor, se schimba starea variabilei sw in 0)
sfarsit daca
sfarsit pentru
daca sw=1 si n>1 atunci
scrie “Numar prim”
altfel
scrie “NU este prim”
sfarsit daca
O imbunatatire a algoritmului din punct de vedere a timpului de executie ar fi sa luam intervalul de presupusi
divizori doar [2, sqrt(n)] ( se modifica la structura
pentru d2, [sqrt(n)] executa
daca n %d=0 atunci
sw0 (daca am gasit divizor, se schimba starea variabilei sw in 0)
sfarsit daca
7
Algoritmi fundamentali- dedicație: pentru clasa a IX-a B
Prof. Daniela Cameniță
sfarsit pentru
daca sw=1 si n>1 atunci
scrie “Numar prim”
altfel
scrie “NU este prim”
sfarsit daca
Alte imbunatatiri ale algoritmului pentru probleme de finete vom vedea la clasa!!!