diff --git a/Makefile b/Makefile index 50868ee053224e3f5a8f909f56e98beca4c09df1..e79082fddcced135bb5e7a2a7004a2a94a551de4 100644 --- a/Makefile +++ b/Makefile @@ -19,4 +19,10 @@ mrproper: clean rm -rf run prog : run - ./run \ No newline at end of file + ./run + +val : run + valgrind ./run + +cpp : run.c + cppcheck run.c \ No newline at end of file diff --git a/README.md b/README.md index f92c83c96540130c742e5e39e74515e7924c8f50..5395b1b88ad99889fdde221c161efde2ca4645bd 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ # lepl1503-2020-groupe-M2 Pour compiler et exécuter (tester) le programme : make prog mrproper + +Pour compiler et effectuer une analyse avec "Valgrind" : make val mrproper + +Pour compiler et effctuer une analyse avec "cppcheck" : make cpp diff --git a/expected_output.txt b/expected_output.txt index 4da4b67f399ced41f448ac9e547897f633418e27..f87b24f4501806131f532c3a56cdfc5cf2d02924 100644 --- a/expected_output.txt +++ b/expected_output.txt @@ -1,3 +1,6 @@ -14 2 7 +14 7 2 13 -100 2 5 +100 5 2 +1225 7 5 +5946 991 3 2 +198354 2543 13 3 2 diff --git a/input.txt b/input.txt index d2ffa8644ea795a2b9a0f1c9363a2e97e52e183c..89bd67736f59fc9a3509322ac38ba92fe3c54285 100644 --- a/input.txt +++ b/input.txt @@ -1,3 +1,6 @@ 14 13 100 +1225 +5946 +198354 diff --git a/run.c b/run.c index 0f3f34b4a3bf615fd871519c2818f64fd3afebce..7094303587d9d887dcd7def737396c3027abc7aa 100644 --- a/run.c +++ b/run.c @@ -10,12 +10,12 @@ #include <string.h> -int is_div(int number, int i) { // Vérifie si i est un diviseur de number. +int is_div(long number, long i) { // Vérifie si i est un diviseur de number. return (number % i == 0) ; // revoi 0 si le nombre n'est pas divisible par i et 1 si il est divisible } -int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon - for (int i = 2 ; i < number ; i++) { //regarde les differents nombres pouvant etre diviser number +int is_prime(long number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon + for (long i = 2 ; i <= (number/2); i++) { //regarde les differents nombres pouvant etre diviser number if (is_div(number,i) != 0) { // si i peut diviser number return 0 ; //renvoi 0 => FAUX } @@ -24,7 +24,7 @@ int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1 } typedef struct node{ - int value; + long value; struct node *next; }node_t; @@ -33,7 +33,7 @@ typedef struct queue{ int size; }queue_t; -queue_t* enqueue(queue_t* q, int val){ +queue_t* enqueue(queue_t* q, long val){ struct node new_node; new_node.value = val; @@ -59,7 +59,7 @@ queue_t* enqueue(queue_t* q, int val){ } -queue_t* prime_divs(int number){ +queue_t* prime_divs(long number){ struct queue new_queue; new_queue.size = 0; @@ -71,17 +71,17 @@ queue_t* prime_divs(int number){ if (ptr == NULL){return NULL;} *ptr = new_queue; - for (int i = 2; i < number; i++){ + for (long i = 2; i < number; i++){ if (is_prime(i) == 1 && is_div(number, i)){ ptr = enqueue(ptr,i); if (ptr == NULL){return NULL;} } - } - //ptr = enqueue(ptr,-1); - //if (ptr == NULL){return NULL;} + } + //ptr = enqueue(ptr,-1); + //if (ptr == NULL){return NULL;} - return ptr; + return ptr; } @@ -107,7 +107,8 @@ int run (char *input,char *output){ struct queue *pr_divs; pr_divs = malloc(sizeof(queue_t)); if (pr_divs == NULL){return -1;} - pr_divs = prime_divs(atoi(chaine)); + char *c; + pr_divs = prime_divs(strtol(chaine,&c,10)); char *ptr; ptr = malloc(50); @@ -115,11 +116,13 @@ int run (char *input,char *output){ *ptr = '\0'; struct node *current; current = malloc(sizeof(node_t)); + if (current == NULL){return -1;} *current = *pr_divs->tail; + current = current->next; fprintf(file2,"%s",chaine); for (int i = 0; i < pr_divs->size; i++) { - fprintf(file2," %d",current->value); + fprintf(file2," %ld",current->value); current = current->next; } fputc('\n',file2); @@ -133,9 +136,9 @@ int run (char *input,char *output){ } -/* int main(){ - int err = run("input.txt","actual_output.txt"); + /* int main() { + int err = run("input.txt", "actual_output.txt"); - return err; -} */ + return err; + } */ diff --git a/run.h b/run.h index f3159ba04c2aafdc33e186f590acb8511d6b3caa..090f7541df3a9a6844e23d63dc9da924854860fe 100644 --- a/run.h +++ b/run.h @@ -1,18 +1,18 @@ #ifndef RUN #define RUN -int is_div(int number, int i); -int is_prime(int number); +int is_div(long number, long i); +int is_prime(long number); typedef struct node{ - int value; + long 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 enqueue(queue_t* q, long val); +queue_t* prime_divs(long number); int run (char *input,char *output); diff --git a/test.c b/test.c index c3840f30166e72f30e2e69dbbafac4e58f9193e6..bdef2584b6c6f8bbc5e5036e663e2e8de81ccfcb 100644 --- a/test.c +++ b/test.c @@ -44,8 +44,8 @@ void file_test(void){ while (fgets(chaine1,50,file1) != NULL && fgets(chaine2,50,file2) != NULL) { - printf("%d\n",chaine1[2]); - printf("%d\n",chaine2[2]); + /* printf("%d\n",chaine1[2]); + printf("%d\n",chaine2[2]); */ CU_ASSERT_STRING_EQUAL(chaine1,chaine2); }