You are on page 1of 6

6.

Algoritmi elementari
6.1. Probleme care operează asupra cifrelor unui număr
Calculati suma cifrelor Calculati produsul cifrelor Numarati cifrele numarului Determinati "oglinditul" verificati daca n e
numarului nєN. numarului nєN. natural n. numarului nєN. palindrom

ex. x =123 inv=321 ex. x =121 inv=121

#include<iostream.h> #include<iostream.h> #include<iostream.h> #include<iostream.h> #include<iostream.h>

int main(){ int main(){ int main(){unsigned int n, int main(){ int main(){
k=0;
unsigned int n, s=0; unsigned int n, p=1; unsigned int n, inv=0; unsigned int n,cn, inv=0;
cin>>n;
cin>>n; cin>>n; cin>>n; cin>>n; cn=n
while(n!=0){k++;
while(n!=0){ while(n!=0){ while(n!=0){ while(cn!=0){
n=n/10;}
s=s+n%10; p=p*(n%10); inv=inv*10+n%10; inv=inv*10+cn%10;
cout<<"nr_cifre= "<<k;
n=n/10;} n=n/10;} n=n/10;} cn=cn/10;}
return 0;}
cout<<"suma= "<<s; cout<<"produs= "<<p; cout<<"oglindit= "<<inv; if (n==inv)
cout<<"palindrom";
return 0;} return 0;} return 0;}
return 0;}
6.2. Divizibilitate. Numere prime. Algoritmul lui Euclid
Suma divizorilor Produsul divizorilor Numarul divizorilor Verificati daca n
numarului n numarului n numarului n eperfect(6=1+2+3)

#include<iostream.h> #include<iostream.h> #include<iostream.h> #include<iostream.h>

unsigned int main(){ int main(){ int main(){ int main(){

int i,n,s=0; unsigned int i,n,p=1; unsigned int i,n,k=0; unsigned int i,n,s=0;

cin>>n; cin>>n; cin>>n; cin>>n;

for(i=1; i<=n; i++) for(i=1; i<=n; i++) for(i=1; i<=n; i++) for(i=1; i<=n/2; i++)

if (n%i==0) if (n%i==0) if (n%i==0) k++; if (n%i==0)


s=s+i; p=p*i; s=s+i;
cout<<k
cout<<s; cout<<p; if(s==n) cout<<"perfect";
return 0;}
return 0;} return 0;} return 0;}

Calculati cmmdc(a,b). Calculati cmmmc(a,b). Verificati daca n este prim.


a,b naturale a,b naturale

#include<iostream.h> #include<iostream.h> #include<iostream.h>

int main(){ int main(){ int main(){unsigned int i,n,prim=1;

unsigned int a,b; unsigned int a,b,p; cin>>n; if (n<2) prim=0;

cin>>a>>b; cin>>a>>b; p=a*b; for(i=2; i<=n/2 && prim =1; i++)

while(a!=b) if(a>b) while(a!=b) if(a>b) if (n%i==0) prim=0;


a=a-b; a=a-b;
if (prim==1) cout<<n<<”este prim”;
else b=b-a; else b=b-a;
else cout<<n<<”nu este prim”;
cout<<"cmmdc= "<<a; cout<<"cmmmc= "<<p/a;
return 0;}
return 0;} return 0;}

6.3. Şirul lui Fibonacci. Calculul unor sume cu termenul general dat
Fie sirul Fibonacci 1, 1, 2, 3, 5, 8, 13, 21, 34, …..

Se observa ca primii doi termeni sunt egali cu 1, iar fiecare termen urmator este egal cu suma
celor doi termeni care il preced (f1=1;f2=1; f3=f1+f2, f4=f2+f3………..fn=fn-2+fn-1).
Fie n un numar citit de la tastatura. Sa se Afisati primii n termeni din sirul Fibonacci
scrie un program care sa afiseze cel de-al
n-lea termen al sirului Fibonacci.

#include<iostream.h> #include<iostream.h>

void main(){ void main(){

int n,i,f1=1,f2=1,f3; int n,i,f1=1,f2=1,f3;

cin>>n; cin>>n;

for(i=3;i<=n;i++){ cout<<f1<<” “f2<<” “;

f3=f1+f2; for(i=3;i<=n;i++){

f1=f2; f3=f1+f2;

f2=f3;} cout<< f3<<” “;

cout<<”termenul n=” f3; f1=f2; f2=f3;}

} }

Calculati S=1+2+...+n Calculati n!=1*2*...*n

void main(){ void main(){

int n,i,s=0 int n,i,p=1

cin>>n; cin>>n;

for(i=1;i<=n;i++) s=s+i; for(i=1;i<=n;i++) p=p*i;

cout<< ”suma= “<<s; cout<< ”n!= “<<p;

} }

6.4. Determinare minim/maxim


determinati maximul dintre determinati cifra maxima din determinati primul si ultimul
trei numere intregi numarul n divizor propriu al numarului
n
#include<iostream.h> #include<iostream.h> #include<iostream.h>

int main(){ int main(){ unsigned int n,i,prim,ultim;

int a,b,c,max; unsigned int n,max=0; void main ()

cin>>a>>b>>c; cin>>n; {cout<<"n=";cin>>n;


max=a;
while(n!=0){
if(b>max) max=b; prim=0;
if(n%10>max)max=n%10;
if(c>max) max=c;
n=n/10;} for (i=2;i<=n/2;i++)
cout<<"max="<<max;
if(n%i==0){
return 0;
} cout<<"ciframaxima= "<<max; if(prim==0) prim=i;
ultim=i;}
return 0;} cout<<prim<<" "<<ultim;}
6.5. Metode de ordonare (metoda bulelor, inserţiei, selecţiei, numărării)
#include<iostream.h>

int a[20],aux,gasit;

unsigned int n,i;

void main ()

{cout<<"n=";cin>>n;

for (i=0;i<n;i++){ cout<<"a["<<i+1<<"]="; cin>>a[i];}

do{gasit=1;

for(i=0;i<n-1;i++)

if (a[i]>a[i+1]){aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;

gasit=0;}

}while(!gasit);

cout<<"sirul sortat este"<<endl;

for (i=0;i<n;i++)

cout<<a[i]<<" ";}

6.6. Interclasare
Se citesc m numere sortate crescator (descrescator).
Se citesc n numere sortate crescator (descrescator).
Sa se afiseze cele m+n numere sortate crescator (descrescator).

Ex m=4 a ={3, 5, 6, 12} n=3 b ={1, 4, 8}  c ={1, 3,4, 5, 6, 8, 12}

include<iostream.h>

void main()

{int a[50],b[50],c[100]j,n,m,i,k;

cout<<“m=“;cin>>m ;

for (i=0;i<m;i++)cin>>a[i];

cout<<“n=“;cin>>n ;

for (i=0;i<n;i++)cin>>b[i];

i=j=k=0 ;

while(i<m && j<n)

if(a[i]<b[j]) c[k++]=a[i++] ;
else c[k++]=b[j++] ;

if(i<m) for (j=i;j<m;j++)c[k++]=a[j];

else for (i=j;i<n;i++)c[k++]=b[i];

for (i=0;i<k;i++)

cout<<c[i]<< '' '';

6.7. Metode de căutare (secvenţială, binară)


Fie un vector cu n elemente numere intregi. n<100. Sa se caute primul element par din vector

#include <iostream.h>

int main(){

int i,n,a[100],ok=0;

cout<<"n=";cin>>n;

for(i=0;i<n;i++){cout<<"a["<<i<<"]=";

cin>>a[i];}

for(i=0;i<n && ok==0;i++)

if(a[i]%2==0) ok++;

if (ok==0) cout<<"un exista nr pare in vector";

else cout<< a[i-1];

return 0;}

CAUTARE BINARA

Se citesc n numere sortate crescator (descrescator). Se citeste un numar intreg nr.

Sa se decida daca nr se gaseste in sirul celor n numere

Ex. Daca n=5 a={12, 3, 6, 7, 8}

Daca nr =11 va afisa “negasit”. Daca nr=7 va afisa “gasit pe pozitia’’ 4.

include<iostream.h>

void main()

{int a[50],n,i,li,ls,k,nr,gasit ;

cout<<“nr=“;cin>>nr ;

cout<<“n=“;cin>>n ;

for (i=0;i<n;i++)cin>>a[i];
li=0 ;ls=n-1 ;gasit=0 ;

do{ k=(li+ls)/2 ;

if(a[k]= =nr){cout<< “gasit pe pozitia “<<k+1 ;

gasit=1 ;}

else

if(a[k]>nr)li=k+1 ;

else ls=k-1 ;

}while(li<=ls && !gasit) ;

if(li>ls) cout<< “negasit“;}

6.8. Analiza complexităţii unui algoritm (considerând criteriile de eficienţă durata de


executare şi spaţiu de memorie utilizat)
- Complexitatea tine cont de numarul de date de intrare

- se alege o operatie de baza si se determina de cate ori se executa (se presupune ca restul operatiilor se executa de
un numar de ori proportional cu nr.executarii operatiei de baza)

- exista algoritmi cu complexitate polinomiala O(nk), exponentiala O(an), logaritmica O(log(n)) - cautarea binara.

ex.

- pentru a calcula valoarea maxima a unui sir de n numere reale se efectueaza n-1 comparatii

→ are complexitatea O(n) -algoritm liniar

- pentru a determina daca n numere reale sunt distincte se efectueaza (n-1)+(n-2)+...+1 =n(n-1)/2 comparatii → are
complexitatea O(n2)

!!!!!!!!!! este o metoda eficienta din punct de vedere:

- a memoriei utilizate [algoritmul foloseste un numar minim de variabile simple (nestructurate)],

-a timpului de executare [se face o singura parcurgere a fisierului (parcurgere obligatorie)- algoritm liniar ].

You might also like