Documente Academic
Documente Profesional
Documente Cultură
RAPORT
despre lucrarea de laborator nr. 7
la Programarea Calculatoarelor
Tema: Analiza complexitatii si eficientei algoritmilor ale tehnicii programarii
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;
}
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);
int nr;
nr
time(&t1);
buildTab();
move_3(nr,0,0,1,1,’f’);
time(&t2);
Sfarsit
Screen-shots:
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.