diff --git a/alloc_mem.c b/alloc_mem.c index a48ed6f6d15dd1ec9d712c4a9a24a4b205071cb3..6944b0d30d2c05308f14309b8f4676acc82b1474 100644 --- a/alloc_mem.c +++ b/alloc_mem.c @@ -9,38 +9,84 @@ int main(){ + for (int i = 0; i != 100; i++) { - srand(time(NULL)); + srand(time(NULL)); - int size = 0; - printf("Saisire la taille du tableau souhaitée ?\n"); - scanf("%d", &size); - printf("-----------------------------\n"); - - int *tab = malloc(size * sizeof(int)); + int size = nb_alea(20); + //printf("Saisire la taille du tableau souhaitée ?\n"); + //scanf("%d", &size); + printf("-----------------------------\n"); + + //malloc + int *tab = malloc(size * sizeof(int)); + int *tab_two = malloc(size * sizeof(int)); + int *tab_three = malloc(size * sizeof(int)); + int *tab_four = malloc(size * sizeof(int)); + double *tab_five = malloc(size * sizeof(int)); - //int count = 0; - - //Etape 2 : remplis tab - fill_tab(tab, size); + //int count = 0; + + //Etape 2 : remplis tab + fill_tab(tab, size); - //Etape 3 : Print tab - print_tab(tab, size); - printf("-----------------------------\n"); + //Etape 3 : Print tab + print_tab(tab, size); + printf("-----------------------------\n"); - //Etapes 4 : Permu aleatoire - permu_alea(tab, size); - printf("-----------------------------\n"); + //Etapes 4 : Permu aleatoire + permu_alea(tab, size); + printf("-----------------------------\n"); - //Etapes 5 : Permu Cyclique - int deca = 0; - printf("Entre le decalage souhaité\n"); - scanf("%d", &deca); - printf("-----------------------------\n"); + //Etapes 5 : Permu Cyclique + int deca = nb_alea(20); + //printf("Entre le decalage souhaité\n"); + //scanf("%d", &deca); + printf("-----------------------------\n"); - permu_cyclique(tab, size, deca); - printf("-----------------------------\n"); + permu_cyclique(tab, size, deca); + printf("-----------------------------\n"); + //Etape 6 : minimum to last position + min_to_last(tab, size); + printf("-----------------------------\n"); - free(tab); + //Etape 7 : max to min with insertion + max_to_min(tab, size); + printf("-----------------------------\n"); + + //Etape 8 : count nb user input + int nb_counter = nb_alea(20); + //printf("Entrez nombre pour chercher compter plus petit."); + //scanf("%d", &nb_counter); + nb_count(tab, size, nb_counter); + printf("-----------------------------\n"); + + //Etape 9 : second malloc -> tab + tab 2 = tab 3 + fill_tab(tab_two, size); // remplir tab 2 comme tab1 + //print_tab(tab_two, size); poru check + sum(tab, tab_two, tab_three, size); + printf("-----------------------------\n"); + + //Etape 10 : tab four fill multi with n + int n = nb_alea(20); + //printf("Saisir le nombre multiplicateur.\n"); + //scanf("%d", &n); + multi_element(tab_three, tab_four, size, n); + printf("-----------------------------\n"); + + //Etape 11 : tab to double + + tab_double(tab_four, tab_five, size); + printf("-----------------------------\n"); + + //liberation tableau + free(tab); + free(tab_two); + free(tab_three); + free(tab_four); + free(tab_five); + } + + return EXIT_SUCCESS; } \ No newline at end of file diff --git a/lib_alloc.c b/lib_alloc.c index 589f3f2182a408a8ef4efb38fea87d2a89c44c8a..41be5f9acaa0e36970fc37dcb35b5f129a760d9a 100644 --- a/lib_alloc.c +++ b/lib_alloc.c @@ -3,9 +3,17 @@ #include <math.h> #include <stdint.h> #include <string.h> +#include <time.h> #include "lib_alloc.h" +int nb_alea(int max){ + + int nb = rand() % max+1; + + return nb; +} + void fill_tab(int *tab, int size){ for (int i = 0; i < size; i++) @@ -45,18 +53,117 @@ void permu_alea(int *tab, int size){ void permu_cyclique(int *tab, int size, int deca){ - for(int i = 0; i < deca; i++){ + int32_t *tmp = malloc(size * sizeof(int32_t)); - int tmp = tab[size-1]; + for (int32_t i = 0; i < size; i++) + { + tmp[(i+deca)%size] = tab[i]; + } + for (int32_t i = 0; i < size; i++) + { + tab[i] = tmp[i]; + } + free(tmp); - for(int j = size-1; j != 0; j++){ + print_tab(tab, size); +} - tab[j] = tab[j-1]; +void min_to_last(int *tab, int size){ + + int i_min = 0; + int min = tab[0]; + for(int i = 0; i < size; i++){ + + if(tab[i]<min){ + + tab[i] = min; + i_min = i; } - tab[0] = tmp; + } + + int i_end = size-1; + int val_end = tab[i_end]; + tab[i_end] = min; + tab[i_min] = val_end; + + print_tab(tab, size); +} + +void max_to_min(int *tab, int size){ + + int tmp; + + for(int i = 1; i < size; i++){ + int j = i; + while(j > 0 && tab[j-1] < tab[j]){ + tmp = tab[j]; + tab[j] = tab[j-1]; + tab[j-1] = tmp; + + j--; + + } } print_tab(tab, size); } + +void nb_count(int *tab, int size, int nb_counter){ + + int count = 0; + + //on trie d'abord + max_to_min(tab, size); + + for(int i = 0; i< size; i++){ + + if(tab[i]<nb_counter){ + count += 1; + } + } + + printf("Il y a %d plus petit que %d", count, nb_counter); + +} + +void sum(int *tab, int *tab_two, int *tab_three, int size){ + + for(int i = 0; i<size; i++){ + + tab_three[i] = tab[i] + tab_two[i]; + } + + print_tab(tab_three, size); +} + +void multi_element(int *tab_three, int *tab_four, int size, int n){ + + for(int i = 0; i<size; i++){ + + tab_four[i] = tab_three[i] * n ; + + } + print_tab(tab_four, size); +} + +void tab_double(int *tab_four, double *tab_five, int size){ + + for(int i = 0; i< size; i++){ + + tab_five[i] = (double)tab_four[i]; + + } + print_tab_double(tab_five, size); +} + +void print_tab_double(double *tab, int size){ + + for (int i = 0; i < size; i++) + { + double tmp = tab[i]; + + printf("%d -- %lf\n", i, tmp); + } +} \ No newline at end of file diff --git a/lib_alloc.h b/lib_alloc.h index 27a4d08d56a13c5dc7c4c85e5ae152966857f1b4..e091539734e3e5f16d07dadfea8e73d897190e5a 100644 --- a/lib_alloc.h +++ b/lib_alloc.h @@ -7,5 +7,13 @@ void print_tab(int *tab, int size); void change(int *a, int *b); void permu_alea(int *tab, int size); void permu_cyclique(int *tab, int size, int deca); +void min_to_last(int *tab, int size); +void max_to_min(int *tab, int size); +void nb_count(int *tab, int size, int nb_counter); +void sum(int *tab, int *tab_two, int *tab_three, int size); +void multi_element(int *tab_three, int *tab_four, int size, int n); +void tab_double(int *tab_four, double *tab_five, int size); +void print_tab_double(double *tab, int size); +int nb_alea(int max); #endif \ No newline at end of file