Sunteți pe pagina 1din 6

Universitatea Tehnică a Moldovei

Catedra Automatică și Tehnologii Informaționale

RAPORT
despre lucrarea de laborator nr. 7

la Programarea Calculatoarelor
Tema: Analiza complexitatii si eficientei algoritmilor ale tehnicii programarii

A îndeplinit: studentul grupei TI-172, Parasii Alexandru


A controlat: Motpan Sergiu

CHIȘINĂU
2018
 Scopul lucrării:
Insusirea materialului teoretic pentru evidentierea esentialului tehnicilor programarii.
Analiza esentei metodelor tenicii de programare si specificul programarii.
Analiza complexitatii asimptotice.

 Sarcina lucrării:
De efectuat un program care sa simuleze miscarile a 2 roboti pe o platforma cu zone
interzise.
De cronometrat timpul de executie.

 Mersul lucrării:

 Textul programului:

#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "time.h"
#define M 5
#define N 5

int move_5(int n, int i3, int j3, int i5, int j5, char mode);

int P[M][N];

void buildTab()
{
srand(time(NULL));
for (int i=0;i<7;i++)
{
P[rand() % M][rand() % N] = 1;
}

P[0][0]=3; //Eliberam spatiu p/u robotul 3


P[1][1]=5; //Eliberam spatiu p/u robotul 5
}

bool isSafe(int i, int j)


{
if (i<M && j<N && P[i][j]==0)
if(i>=0 && j>=0) return true;
return false;
}

int move_3(int n, int i3, int j3, int i5, int j5, char mode)
{
if (n<=0) return n;

int a=i3;
int b=j3;
int d;
if (mode=='s') printf("\nRobot-3 STOP\n\n~%d steps remained~\n",n);
if (mode=='t')
{
printf("\n");
for (int i=0;i<M;i++)
{
for (int j=0;j<N;j++)
printf(" %d",P[i][j]);
printf("\n" );
}
printf("~%d steps remained~\n",n);
}

{
d = rand() % 5; //Generam directia de deplasare
if (d==0); //Stop
else if (d==1) i3++; //Nord
else if (d==2) i3--; //Sud
else if (d==3) j3--; //Vest
else if (d==4) j3++; //Est
}

if(isSafe(i3,j3))
{
P[a][b]=0;
P[i3][j3]=3;

move_5(n-1,i3,j3,i5,j5,'t');
} else {if (d==0) move_5(n-1,a,b,i5,j5,'s'); else move_5(n,a,b,i5,j5,'f');}
}

int move_5(int n, int i3, int j3, int i5, int j5, char mode)
{
if (n<=0) return n;

int a=i5;
int b=j5;
int d;
if (mode=='s') printf("\nRobot-5 STOP\n\n~%d steps remained~\n",n);
if (mode=='t')
{
printf("\n");
for (int i=0;i<M;i++)
{
for (int j=0;j<N;j++)
printf(" %d",P[i][j]);
printf("\n" );
}
printf("~%d steps remained~\n",n);
}{
d = rand() % 5; //Generam directia de deplasare
if (d==0); //Stop
else if (d==1) i5++; //Nord
else if (d==2) i5--; //Sud
else if (d==3) j5--; //Vest
else if (d==4) j5++; //Est
}
if(isSafe(i5,j5))
{
P[a][b]=0;
P[i5][j5]=5;

move_3(n-1,i3,j3,i5,j5,'t');
} else {if (d==0) move_3(n-1,i3,j3,a,b,'s'); else move_3(n,i3,j3,a,b,'f');}
}
void main()
{
time_t t1,t2,t3;
time(&t3);
printf("Dati numarul de miscari:\n" );
int nr;
scanf("%d",&nr);
time(&t1);
buildTab();
move_3(nr,0,0,1,1,'f');
printf("\nFINAL:\n" );
for (int i=0;i<M;i++)
{
for (int j=0;j<N;j++)
printf(" %d",P[i][j]);
printf("\n" );
}

time(&t2);
printf("\ntimpul de executie al programului : %.1f\n",difftime(t2,t3) );
printf("\ntimpul de executie al algoritmului: %.1f\n",difftime(t2,t1) );
}
 Schema-bloc:
Start

time_t t1,t2,t3;

time(&t3);

Dati numarul de miscari

int nr;

nr

time(&t1);

buildTab();

move_3(nr,0,0,1,1,’f’);

Afisarea finala a Platformei cu roboti

time(&t2);

timpul de executie al programului:

timpul de executie al algoritmului:

Sfarsit
 Screen-shots:

rezultate p/u 10 miscari

rezultate p/u 100 miscari

rezultate p/u 1000 miscari

 Concluzie:
In urma efectuarii lucrarii date, am facut cunostinta cu modul de cronometrare a
timpului de executie al programului. Experienta data ma va ajuta foarte mult la analiza
eficacitatii algoritmilor.
Pentru a executa sarcina propusa, am folosit metoda autoapelarii functiei, care se va
executa pana la obtinerea rezultatului final. Analiza algoritmului s-a dovedit a fi extrem de
eficienta, astfel am reusit sa-mi perfectionez programul pana la un nivel optimal.

S-ar putea să vă placă și