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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful