Sunteți pe pagina 1din 7

# Universitatea Tehnic a Moldovei

## Catedra: Tehnologii Informaionale

Raport
Lucrare de laborator Nr.1
la Analiza i proiectarea algoritmelor

## Tema: Analiza algoritmilor

A efectuat:
st. gr. SI-151 Cucu Dumitru

## A verificat: Bagrin Veronica

Chiinu 2016
Sarcina lucrarea nr.1: Numerele lui Fibonacci
Scopul lucrrii:
1. Analiza empiric a algoritmilor.
2. Analiza teoretic a algoritmilor.
3. Determinarea complexitii temporale i asimptotice a algoritmilor

Listingul programului:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
long long int nr_i=0;
long long int fib1(int n) {
int i;

if (n<2){
nr_i++;
return n;
}

else{
nr_i++;
return fib1(n - 1) + fib1(n - 2);
}

## long long int fib2(int n) {

int k;
long long int i=1, j=0;

j=i+j;nr_i++;
i=j-i;nr_i++;

}
return j;
}

## long long int fib3(int n) {

long long int i = 1, j = 0, k = 0, h = 1, t;
while (n > 0) {

if (n%2== 1) {

t = j*h;nr_i++;
j = (i*h) + (j*k)+ t;nr_i++;
i = (i*k) + t;nr_i++;
}

t = h*h;nr_i++;
h = (2 * k*h) + t;nr_i++;
k = (k * k)+ t;nr_i++;
n = n / 2;nr_i++;
}
return j;
}

## long long int fib4(int n)

{
if(n == 1 || n == 2)
{
nr_i++; return n;
}

else {nr_i++;
return 1.618*fib4(n-1);
}
}

int main()
{
int n, nm;
long long int t,j;
float times;
clock_t t_start, t_stop;
printf("Introduceti numarul de termeni ai seriei Fibonacci pe care doriti:");
scanf("%d", &n);
while (1)
{
system("cls");

puts("\tMeniu\n");
puts("1.Fib1");
puts("2.Fib2");
puts("3.Fib3");
puts("4.Fib4");
puts("0.EXIT");
scanf("%d", &nm);
switch (nm)
{
case 1:
system("cls");
t_start = clock();
nr_i=0;
t = fib1(n);
t_stop = clock();
times = ((float)(t_stop - t_start))*1000 / CLOCKS_PER_SEC;
printf("Fib1=%lld", t);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;

case 2:
system("cls");
t_start = clock();
nr_i=0;
j=fib2(n);
t_stop = clock();
times = ((float)(t_stop - t_start))* 1000000LL / CLOCKS_PER_SEC;
printf("Fib2=%lld",j);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;

case 3:
system("cls");
t_start = clock();
nr_i=0;
j = fib3(n);
t_stop = clock();
times = ((float)(t_stop - t_start))* 1000 / CLOCKS_PER_SEC;
printf("Fib3=%lld", j);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;

case 4:
system("cls");
t_start = clock();
nr_i=0;
j = fib4(n);
t_stop = clock();
times = ((float)(t_stop - t_start))* 1000 / CLOCKS_PER_SEC;
printf("Fib4=%lld",j);
printf("\nTimp de executie: %f milisec.\n", times);
printf ("Numarul de iteratii =%lld \n",nr_i);
system("pause");
break;
case 0:
printf("Pentru a esi apasati Enter");
system("pause");
return 0;
default:
puts("Ati ales o varianta incorecta");
system("pause");
break;
}
}

}
Rezultatele obinute:
Dup timp:

T (s) 10 20 30 40 50
135,2
f1(n) fib1(recursia) 0 0,001 0,009 1,121 89
f2(n) fib2(for) 0 0 0 0 0
f3(n) fib3(while) 0 0 0 0 0
f4(n) fib4(rata de aur) 0 0 0 0 0
Graficul variatiei timpului pe intervalul [10;30]

0.01

0 0 0
10 20 30

## Graficul obinut n intervalul [30;50]:

135.29

0.01
0 1.12
0 0
30 40 50
fib2(for) fib3(while) fib1(recursia)

## Rezultatele obinute dup numrul de iteraii:

it 10 20 30 40 50
26925 3311602 125862690
f1(n) fib1(recursia) 177 21891 37 81 25
f2(n) fib2(for) 20 40 60 80 100
f3(n) fib3(while) 22 26 32 30 33
f4(n) fib4(rata de aur) 9 19 29 39 49
Graficul variatiei iteratiilor

12586269025

2692537 331160281
177
20
22
9 21891
40
26
19 60
32
29 80
30
39 100
33
49
10 20 30 40 50
fib1(recursia) fib2(for)
fib3(while) fib4(rata de aur)

## Compararea Fib2 cu Fib3 dupa nr de iteratii

100

80

60

40
32 30 33
26
22
20

10 20 30 40 50

Fib2(for) Fib3(while)
Concluzii:

## n urma efecturii acestei lucrari de laborator am fcut cunotin cu Numerele lui

Fibonacci. Pentru afiarea unui numr al acestui ir am folosit 4 metode:
1. recursia
2. for
3.while
4.rata de aur

Dup obinerea rezultatelor , am fcut comparaii ntre ele cu ajutorul unor grafice.
Dup rezultatele primului tabel care arat timpul msurat n clockuri, am facut grafi-
ce pe intervale [1;20] si [30;50] . In primul ca si in al doilea interval algoritmul
fib1(recursia) are nevoie de mai mult timp pentru a afisa rezultatul, iar fib2 si fib 3
sint mai eficiente deoarece afiseaza rezultatul imediat, acesta observam si in graficile
facute. Calcule facute dupa numarul de iteratii arata tot aceleasi rezultate .
Pentru fib1 (recursia) numarul de interatii creste foarte rapid , iar pentru fib2 si fib3
lent . In graficul 3 am comparat fib2(for) si fib3(while) si observam ca fib2 face mai
multe iteratii ca fib3, respectiv fib3 este mai eficient.

## Meniu subsol

### Obține aplicațiile noastre gratuite

Drepturi de autor © 2022 Scribd Inc.