Aplicatii - Timpul de executie a programelor
procedure inmultire_matrici(n:integer); {inmulteste doua matrici patratice a si b} var i,j,k:integer; begin for i:=1 to n do for j:=1 to n do begin c[i,j]:=0; for k:=1 to n do c[i,j]:=c[i,j]+a[i,k]*b[k,j] end end;
B.
procedure numere_impare(n:integer;var x,y:integer); var i,j:integer; begin for i:=1 to n do if odd(i) then begin for j:=i to n do x:=x+1; for j:=1 to i do y:=y+1 end end;
C.
function recursiva(n:integer):integer; begin if n<=1 then recursiva:=1 else recursiva:=recursiva(n-1)+recursiva(n-2) end;
D. Functia max(i,n) returneaza cel mai mare element dintre cele n aflate intre pozitiile i si i+n-1 ale vectorului a.
function max(i,n:integer):integer; var m1,m2:integer; begin if n=1 then max:=a[i] else begin m1:=max(i,n div 2); m2:=max(i+n div 2,n div 2+ n mod 2); if m1 < m2 then max:=m2 else max:=m1 end end;
E.
int CautareBinara(int A[], int X, int N) { int Jos=0, Sus=N-1; int Mijl; while (Jos<=Sus) { Mijl=(Jos+Sus)/2; if (A[Mijl]X) Sus=Mijl-1; else return Mijl; } return Inexistent; }
F.
int CMMDC(int M, int N) { int R; while (N>0) { R= M % N; M=N; N=R; } return M; }
G.
longint Putere(longint X, int N) { if (N==0) return 1; if (N==1) return X; if (! odd(N)) return Putere(X*X, N/2); else return X * Putere(X*X, N/2); }
H. Se considera secventa care implementeaza algoritmul "ciurul lui Eratostene" pentru determinarea tuturor numerelor prime mai mici ca N:
for i:=1 to n do a[i]:=true; i:=2; while i < sqrt(N) do begin for j:=2 to N div i do a[j*i]:=false; i:=i+1; while not a[i] do i:=i+1; end;
I.
void QuickSort(int v[], int stanga, int dreapta) { int i, ultim; if (stanga>=dreapta) return; schimba(v[stanga], v[(stanga+dreapta)/2]); ultim=stanga; for (i=stanga+1; i<=dreapta; i++) if (v[i] < v[stanga]) schimba(v[++ultim], v[i]); schimba(v[stanga], v[ultim]); QuickSort(v, stanga, ultim-1); QuickSort(v, ultim+1, dreapta); } ...... se apeleaza: QuickSort(v, 1, N)