-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.c
122 lines (96 loc) · 3.29 KB
/
functions.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include "functions.h"
// Fonction qui prend en parametre une fonction est un tebleau d'entier n et qui retourne le temps d'execution de chaque n dans un autre tableau
StoreTime * tab_execution(int * (* function)(long*, long), long * tab, int taille){
long *ordered_tab, *inverse_tab, *random_tab;
StoreTime *results = malloc(taille * sizeof(StoreTime));
for(int i=0; i<taille; i++){
results[i].num = tab[i];
printf("nombre %d\n\n", results[i].num);
ordered_tab = generer_bon_ordre(tab[i]);
results[i].time_ordered = execution_time(function, ordered_tab, tab[i]);
free(ordered_tab);
inverse_tab = generer_ordre_inverse(tab[i]);
results[i].time_inverse = execution_time(function, inverse_tab, tab[i]);
free(inverse_tab);
random_tab = generer_random(tab[i]);
results[i].time_random = execution_time(function, random_tab, tab[i]);
free(random_tab);
}
return results;
}
// Fonction qui retourne le temps d’execution de la fonction donner en parametre
double execution_time(int * (* function)(long*, long), long * tab, long n){
clock_t t1 , t2;
t1 = clock ();
function(tab, n);
t2 = clock ();
double temps_exe = (double) (t2 -t1)/CLOCKS_PER_SEC;
return temps_exe;
}
// fonction qui genere un tableau d'entiers de taille n deja trier en ordre croissant
long * generer_bon_ordre(long n){
long *tab = malloc(n * sizeof(long));
for(int i=0; i<n; i++){
tab[i] = i+1;
}
return tab;
}
// fonction qui genere un tableau d'entiers de taille n trier en ordre inverse (decroissant)
long * generer_ordre_inverse(long n){
long *tab = malloc(n * sizeof(long));
for(int i=0; i<n; i++){
tab[i] = n-i;
}
return tab;
}
// fonction qui genere un tableau d'entiers de taille n aleatoire
long * generer_random(long n){
long random_number;
long *tab = malloc(n * sizeof(long));
for(int i=0; i<n; i++){
random_number = rand() % n;
tab[i] = random_number;
}
return tab;
}
// fonction qui ecris dans un fichier csv les resultats des mesures de temps
int writeCSV(char * algorithm ,StoreTime * results, int taille){
FILE* fp = NULL;
char * file_name = malloc((15 + strlen(algorithm)) * sizeof(char));
sprintf(file_name, "results/%s.csv", algorithm);
fp= fopen(file_name,"w+");
if (fp == NULL){
printf("Fichier inexistant\n");
return 0;
}
// this was a tp 2 part I'll change it to mach with our project
fprintf(fp,"num,time_ordered,time_inverse,time_random");
for(int i=0; i<taille; i++){
fprintf(fp,"\n%d,%.10lf,%.10lf,%.10lf", results[i].num, results[i].time_ordered, results[i].time_inverse, results[i].time_random);
}
fclose(fp);
return 1;
}
long * generer_tailles_tableaux(long debut, long fin, int *taille){
*taille = (int) (log((fin / debut)) / log(2) + 1) ;
long *tab = malloc((*taille) * sizeof(long));
long value = debut;
int i = 0;
while(value<=fin){
tab[i] = value;
value*=2;
i++;
}
return tab;
}
void print_tab(long * tab, long n){
for(int i=0; i<n; i++){
printf("%d ", tab[i]);
}
printf("\n\n\n");
}