diff --git a/Makefile b/Makefile index 021a54b0f64f3ac985a57f0a36b9b3154801077c..4d99fd57e00b8d81f41c8418d08e692d4a3bfa8e 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,10 @@ test.o : test.c run.h clean : - rm -rf *.o + rm -rf *.o mrproper: clean rm -rf run + +prog : run + ./run \ No newline at end of file diff --git a/README.md b/README.md index f83bbedbff9ce010eaa4272a90a7d3fdb83283f5..f92c83c96540130c742e5e39e74515e7924c8f50 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # lepl1503-2020-groupe-M2 +Pour compiler et exécuter (tester) le programme : make prog mrproper diff --git a/run.c b/run.c index 3f8fa053e2edc6e4c32f64cdd7b062c89a95c97b..6a73e604287ca0232ad156d36173c20c483a7a0b 100644 --- a/run.c +++ b/run.c @@ -18,64 +18,72 @@ int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1 return 1 ; //sinon => VRAI } -int* prime_divs(int number){ +typedef struct node{ + int value; + struct node *next; +}node_t; - int *ptr; - ptr = malloc(sizeof(int)*number); - ptr[0] = 0; - ptr[1] = 0; +typedef struct queue{ + struct node *tail; + int size; +}queue_t; - int i; - int len = 0; +int enqueue(queue_t* q, int val){ - for (i = 2; i < number; i++){ - if (is_prime(i) == 1 && is_div(number, i)){ - ptr[i] = i; - len++; - } - else - { - ptr[i] = 0; - } + struct node new_node; + new_node.value = val; - } - ptr[i] = -1; - int *result; - result = malloc(sizeof(int)*len +sizeof(int)); - int j =0; - for (int i = 0; ptr[i] != -1; i++) + struct node *ptr; + ptr = malloc(sizeof(node_t)); + if (ptr == NULL){return -1;} + *ptr = new_node; + + if (q->size == 0) { - if(ptr[i] != 0){ - result[j] = ptr[i]; - j++; - } - + *q->tail = *ptr; + *ptr->next = *ptr; } - result[j] = -1; - //free(ptr); - return result; - + else{ + *ptr->next = *q->tail->next; + *q->tail->next = *ptr; + } + q->size++; + return 0; + } -void afficherListe(int* tab) { // afficher la liste - for (int i = 0; tab[i] != -1; i++) - { - if (tab[i] != 0){ - printf("%d\n",tab[i]); +queue_t* prime_divs(int number){ - } - } + struct queue new_queue; + new_queue.size = 0; + + struct queue *ptr; + ptr = malloc(sizeof(queue_t)); + if (ptr == NULL){return NULL;} + *ptr = new_queue; + for (int i = 2; i < number; i++){ + if (is_prime(i) == 1 && is_div(number, i)){ + int err = enqueue(ptr,i); + if (err == -1){return NULL;} + + } + } + int err1 = enqueue(ptr,-1); + if (err1 == -1){return NULL;} + + return ptr; } + int run (char *input,char *output){ FILE *file1 = NULL; FILE *file2 = NULL; - char chaine[50]; + //char chaine[50]; file1 = fopen(input,"r"); if (file1 == NULL){return -1;} @@ -86,9 +94,9 @@ int run (char *input,char *output){ return -1; } - while (fgets(chaine,50,file1) != NULL){ + /* while (fgets(chaine,50,file1) != NULL){ - int *pr_divs = prime_divs(atoi(chaine)); + queue_t *pr_divs = prime_divs(atoi(chaine)); fprintf(file2,"%s ",chaine); for (int i = 0; pr_divs[i] != -1; i++) { @@ -96,7 +104,7 @@ int run (char *input,char *output){ } fputc('\n',file2); - } + } */ fclose(file1); fclose(file2); diff --git a/run.h b/run.h index 7cd407e4356ea7398c37349e4871c152bd3383c9..f3159ba04c2aafdc33e186f590acb8511d6b3caa 100644 --- a/run.h +++ b/run.h @@ -3,8 +3,17 @@ int is_div(int number, int i); int is_prime(int number); -int* prime_divs(int number); -void afficherListe(int* tab); +typedef struct node{ + int value; + struct node *next; +}node_t; +typedef struct queue{ + struct node *tail; + int size; +}queue_t; +int enqueue(queue_t* q, int val); +queue_t* prime_divs(int number); + int run (char *input,char *output); #endif \ No newline at end of file