Algoritmi elementari

1)Algoritmi pentru interschimbare
Varianta 1. Interschimbarea valorilor a doua variabile(a si b) prin folosirea unei variabile intermediare (x).Variabila intermediara se foloseste pentru salvarea valorii care se distruge prin prima operatie de atribuire.Pasii algoritmului sunt: Pasul 1. Se salveaza valoarea primei variabile (a) in variabila x, prin x =a Pasul 2. Se atribuie primei variabile,a carei valoare a fost salvata (a), valoarea celei de a doua variable (b), prin a=b. Pasul 3. Se atribuie celei de a doua variabile (b) valoarea primei variabile care a fost salvata (x), prin b=x Varianta2. Interschimbarea valorilor a doua variabile (a si b) fara folosirea unei variabile intermediare.Se folosesc identitatile matematice a=(a-b)+b si b=((a-b)+b)-(a-b). Pentru interschimbarea valorilor se foloseste valoarea a-b, care va fi atribuita initial variabilei a. Varianta 1 float a,b,x; cin>>a>>b; x=a; a=b; b=x; cout<<a<<b; Varianta 2 float a,b; cin>>a>>b; a=a-b; b=a+b; a=b-a; cout<<a<<b;

2)Algoritm pentru determinarea maximului (minimului)
Algoritmul determina valoarea maxima (minima)dintr-un sir de numere introduse de la tastatura. Algoritmul consta in atribuirea valorii primului element maximului (minimului) si compararea acestei valori cu elementele din sir. Pasii care se executa sunt : Pasul 1. Se citeste primul numar a. Pasul 2. Se atribuie maximului valoarea lui a, prin max=a Pasul 3. Se citeste urmatorul numar a. Pasul 4. Daca a>max, atunci se atribuie maximului valoarea lui a, prin max=a. Pasul 5. Daca mai sunt date de citit, se revine la Pasul 3. Varianta 1. Se introduce un sir de n numere de la tastatura. Sa se afiseze maximul dintre aceste numere.

1

•Algoritmul pentru determinarea inversului unui numar (inversarea cifrelor unui numar) Algoritmul pentru extragerea cifrelor unui numar Algoritmul determina cifrele unui numar n. max=a. cin>>n>>a . } 2 . Pasul 4.c.i++) { cin>>a. while(a!=0) { if (a>max) max=a. cu operatia c=n%10. •Algoritmul pentru compunerea unui numar din cifrele sale . Pasul 2. max. Aceste operatii se executa cat timp mai exista cifre de extras din n (n! =0). Variana 1 int a. cin>>a. cout<<c. cu operatia n %10. Varianta 2 int a. atunci se revine la Pasul 1. Se elimina din numar cifra extrasa. max=a. prin extragerea pe rand a fiecarei cifre c (incepand cu cifra unitatilor). Pasul 3. Se extrage cifra cea mai nesemnificativa. for(i=2. } cout<<max. cin>>a.Varianta 2. n=n/10. cu operatia n /10. n. int n. si eliminarea din numar a cifrei extrase. cin>>n. Se introduce un sir de numere de la tastatura pana la intalnirea valorii 0. Daca n !=0. cu operatia n=n/10 .i<=n. 3)Algoritmi pentru prelucrarea cifrelor unui numar Pentru prelucrarea cifrelor unui numar se pot folosi urmatorii algoritmi : •Algoritmul pentru extragerea cifrelor unui numar . Pasii care se executa sunt : Pasul 1. Se afiseaza (se prelucreaza) cifra.Sa se afiseze maximul dintre aceste numere. while(n!=0) { c=n%10. if (a>max) max=a. } cout<<max. i . max.

Daca n!=0. prin extragerea pe rand a fiecarei cifre (incepand cu cifra unitatilor) din numarul n si compunerea unui nou numar cu aceste cifre. de la tastatura. cin>>c . daca numarul este 123. Se elimina din numarul n cifra extrasa. Sa se afiseze numarul nr obtinut din aceste cifre Pasii algoritmului sunt : Pasul 1. Pasul 4. } cout<<nr. } cout<<inv . Pasii algoritmului sunt : Pasul 1. Se aduna la numarul nr inmultit cu 10 cifra citita. prin operatia inv=0 . int c. Se citeste cifra c. 3 . prin nr=nr*10+c . Pasul 2. inversul numarului n. Pasul 3. Pasul 3. while (n!=0) { inv=inv*10+n%10 . int n. cin>>c. Se afiseaza numarul nr. pana cand se introduce un numar care nu mai poate fi cifra. atunci se revine la Pasul 3. Pasul 2. nr=0 . n=n/10 . Pasul 5. Se initializeaza numarul invers inv cu valoarea 0. Se initializeaza numarul nr cu valoarea 0. Se citeste numarul n. mai multe numere care reprezinta cifrele unui numar. atunci se revine la Pasul 3.Se citeste cifra c. Pasul 5. prin operatia inv=inv*10+n%10. cu operatia n=n/10. Pasul 4. cin>>n . while((c>=0)&&(c<=9)) { nr=nr*10+c. nr . Pasul 6. inversul va fi 321. De exemplu. Algoritmul pentru compunerea unui numar din cifrele sale Se introduc pe rand. inv=0 . inv .Algoritm pentru determinarea inversului unui numar Algoritmul determina inv. Daca c este o cifra ((c>=0) && (c<=9)). Se extrage cifra cea mai nesemnificativa din numarul n si se aduna cifra la numarul inv inmultit cu 10. prin operatia nr=0.

Foloseste algoritmul lui Euclid.d++) if(n%d==0) sw=0.m. atunci se revine la pasul1. Varianta 2. cin>>a>>b.sw=1. atunci se revine la Pasul 1 . Daca a !=b. din numarul mai mare. int a. if(sw==1) cout<<"nr este prim". b=b-a. for(d=2.r . b=r.d. while(b !=0) { r=a%b. Pasii algoritmului sunt : Pasul 1. altfel cmmdc=a . a=b. Pasul 2. se executa operatiab=b-a . Se imparte a la b si se obtine restul r (r=a%b) Pasul 2.b. Varianta 1 int a. } cout<<”cmmdc=”<<a. Pasii algoritmului sunt : Pasul 1. else cout<<"nr nu este prim".b=r. Se executa operatiile de atribuire a=b . else d++. } 4 . cout<<"nr:".h> void main() {int n.h> #include<math.altfel. while(a!=b) { if (a>b) else } a=a-b. altfel.4)Algoritmi pentru calcularea c. Varianta 2 cout<<”cmmdc=”<<a. Rezolvarea problemei se bazeaza pe conditia b!=0.b. Varianta 1.m. celalat numar :daca a>b. care atribuie lui b restul impartirii lui a la b. Foloseste algoritmul de scadere repetata a valorii celei mai mici din valoarea cea mai mare.c. cin>a>>b . 5)Algoritmi pentru testarea unui numar prim #include<iostream. se executa operatia a=a-b . cmmdc=a .cin>>n. Pasul 3.d<=sqrt(n).d. Se scade. Daca b !=0. Rezolvare problemei se bazeza pe conditia a !=b . iar lui a vechea valoare a lui b.

se termina algoritmul. altfel. prin i=i+1. Pasii algoritmului sunt : Pasul 1. cout<<"nr:". #include<iostream. Pasul 3. atunci i este divizor al lui n. atuci se afiseaza i si. Se trece la urmatorul divizor posibil. Daca i<=[n/2]. prin operatia i=2 . Pasul 5. cout<<1<<" "<<n<<" ".h> void main() { int n. Se initializeaza sirul de numere cu care se va imparti n. for(i=2.cin>>n. Se initializaeza sirul de numere cu care se va imparti n. Pasul 4. altfel. atunci se revine la Pasul 3 . se imparte n la i pentru a elemina toate puterile lui i din numarul n. prin operatia i=2 . i=2.Se incrementeaza cu 1 numarul la care se imparte n.i++) if(n%i==0) cout<<i<<" ". atunci se revine la Pasul 2 .i. cu i=i+1. atat timp cat n se imparte la i.i<=n/2. Afiseaza divizorii 1 si n. algoritmul anterior se modifica prin eleminarea tuturor divizorilor i gasiti la un moment dat. Daca i il divide pe n.6)Algoritmi pentru prelucrarea divizorilor unui numar Algoritmul pentru generarea divzorilor proprii ai unui numar Algoritmul de generare a divizorilor proprii ai unui numar n consta in impartirea numarului la un sir de numere i. Pasul 2. cu primul divizor posibil. Daca n !=1. } Algoritmul pentru generarea divizorilor primi ai unui numar Pentru afisarea numai a divizorilor primi ai unui numar n. atunci afiseaza i.i. se termina algoritmul. cu primul divizor posibil. 5 . Pasul 4. Pasul 3. operatia repetandu-se pana cand se elimina toti divizorii din numarul n (n are valoarea 1). prin incrementarea lui i. Daca i il divide pe n. #include<iostream. Pasul 2. Pasii algoritmului sunt: Pasul 1.h> void main() {int n. Daca numarul n se imparte la numarul generat.

p=1. Se creste putera lui 10. while(n10!=0) { nq=nq+p*(n10%q). Daca n10 !=0. se afiseaza nq. Se initializeaza p-puterea lui 10. Se actualizeaza formatul de afisare a reprezentarii numarului in baza q. p=p*10. n10=n10/q. Pasul 2. Pasul 5. Pasul 3.while(n!=1) { if(n%i==0) cout<<i<<" ". si catul n10(n10=n10 /q). prin operatia n10=n10*q+c. Se citeste cifra c.cin>>n10. la numarul n10 inmultit cu q. Pasul 4. 6 . prin operatia nq=0 .q. Pasul 2. cout<<"nr:".cin>>q. prin operatia p=p*10. #include<iostream. i=i+1. Se initializeaza numarul n10 cu 0. cifra citita. prin operatia p=1 . Pasul 4. care va fi una dintre cifrele reprezentarii (c=n10%q). Se citeste cifra c.p. prin operatia n10=0 .cu 1. atunci se revine la Pasul 3 . } } 7)Algoritmi pentru conversii intre sisteme de numeratie Algoritmul pentru conversia din baza 10 in baza q Pasii algoritmului : Pasul 1. nq=0. Se initializeaza numarul nq cu 0.h> void main() {int n10. } cout<<nq. altfel.nq. } Algoritmul pentru conversia din baza q in baza 10 Pasii algoritmului Pasul 1. while(n%i==0) n=n/i. Se imparte n10 la q si se obtine restul c. Pasul 6. cout<<"baza:". prin operatia nq=nq+c*p . Se aduna. Pasul 3.

cin>>q. cout<<"baza:".q. Daca c este o cifra (c>=0 si c<q). altfel. } cout<<"nr in baza 10:"<<n10. while((c>=0)&&(c<q)) {n10=n10*q+c. atunci se revine la Pasul 3 . } 7 .n10. se afiseaza numarul n10. #include<iostream.cin>>c.cin>>c.h> void main() {int c. cout<<"cifra:".Pasul 5. n10=0. cout<<"cifra:".

Sign up to vote on this title
UsefulNot useful