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)