Algoritmi Elementari 6.1. Probleme Care Operează Asupra Cifrelor Unui Număr
Algoritmi Elementari 6.1. Probleme Care Operează Asupra Cifrelor Unui Număr
for(i=2; i<=n/2 && prim =1; i++) if (n%i==0) prim=0; if (prim==1) cout<<n<<este prim; else cout<<n<<nu este prim; 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 scrie un program care sa afiseze cel de-al n-lea termen al sirului Fibonacci.
#include<iostream.h>
#include<iostream.h>
void main(){ int n,i,f1=1,f2=1,f3; cin>>n; for(i=3;i<=n;i++){ f3=f1+f2; f1=f2; f2=f3;} cout<<termenul n= f3; }
void main(){ int n,i,f1=1,f2=1,f3; cin>>n; cout<<f1<< f2<< ; for(i=3;i<=n;i++){ f3=f1+f2; cout<< f3<< ; f1=f2; f2=f3;} }
Calculati S=1+2+...+n
void main(){ int n,i,s=0 cin>>n; for(i=1;i<=n;i++) s=s+i; cout<< suma= <<s; }
Calculati n!=1*2*...*n
void main(){ int n,i,p=1 cin>>n; for(i=1;i<=n;i++) p=p*i; cout<< n!= <<p; }
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]<< '' '';
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 ;
6.8. Analiza complexitii unui algoritm (considernd criteriile de eficien durata de executare i spaiu 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)
!!!!!!!!!!
- 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 ].