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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful