Skip to content
Extraits de code Groupes Projets
run.c 2,79 Kio
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int is_div(int number, int 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
        if (is_div(number,i) != 0) { // si i peut diviser number
            return 0 ; //renvoi 0 => FAUX
        }
    }
    return 1 ; //sinon => VRAI
}

typedef struct node{
    int value;
    struct node *next;
}node_t;

typedef struct queue{
    struct node *tail;
    int size;
}queue_t;

queue_t* enqueue(queue_t* q, int val){

    struct node new_node;
    new_node.value = val;
    new_node.next = malloc(sizeof(node_t));

    struct node *ptr;
    ptr = malloc(sizeof(node_t));
    if (ptr == NULL){return NULL;}
    *ptr = new_node;

    if (q->size == 0)
    {
        *q->tail = *ptr;
        *ptr->next = *ptr;
    }
    else{
        *ptr->next = *q->tail->next;
        *q->tail->next = *ptr;
    }
    q->size++;
    return q;

}


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)){
            ptr = enqueue(ptr,i);
            if (ptr == NULL){return NULL;}

        }
   }
   //ptr = enqueue(ptr,-1);
   //if (ptr == NULL){return NULL;}

   return ptr;

}


int run (char *input,char *output){

    FILE *file1 = NULL;
    FILE *file2 = NULL;

    char chaine[50];

    file1 = fopen(input,"r");
    if (file1 == NULL){return -1;}

    file2 = fopen(output,"w+");
    if (file2 == NULL){
        fclose(file1);
        return -1;
    }

    while (fgets(chaine,50,file1) != NULL){

        struct queue *pr_divs;
        pr_divs = malloc(sizeof(queue_t));
        if (pr_divs == NULL){return -1;}
        pr_divs = prime_divs(atoi(chaine));

        char *ptr;
        ptr = malloc(50);
        ptr = strchr(chaine,'\n');
        *ptr = '\0';
        struct node *current;
        current = malloc(sizeof(node_t));
        *current = *pr_divs->tail;
        fprintf(file2,"%s ",chaine);
        for (int i = 0; i < pr_divs->size; i++)
        {
            fprintf(file2,"%d ",current->value);
            current = current->next;
        }
        fputc('\n',file2);

    }

    fclose(file1);
    fclose(file2);

    return 0;

}

/* int main(){
    int err = run("input.txt","actual_output.txt");

    return err;
} */