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

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

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

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

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

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

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