Bifurcation depuis
Laurent Paucot / lepl1503-2020-groupe-M2
122 validations de retard le dépôt en amont.
-
Laurent Paucot a rédigéLaurent Paucot a rédigé
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;
} */