Skip to content
Extraits de code Groupes Projets
run.c 2,58 ko
Newer Older
  • Learn to ignore specific revisions
  • Laurent Paucot's avatar
    Laurent Paucot a validé
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/stat.h>
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    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
    }
    
    int* prime_divs(int number){
    
        int *ptr;
        ptr = malloc(sizeof(int)*number);
        ptr[0] = 0;
        ptr[1] = 0;
    
        int i;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int len = 0;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
        for (i = 2; i < number; i++){
            if (is_prime(i) == 1 && is_div(number, i)){
    			ptr[i] = i;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
                len++;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
            }
            else
            {
                ptr[i] = 0;
            }
    
        }
        ptr[i] = -1;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        int *result;
        result = malloc(sizeof(int)*len +sizeof(int));
        int j =0;
        for (int i = 0; ptr[i] != -1; i++)
        {
            if(ptr[i] != 0){
                result[j] = ptr[i];
                j++;
            }
            
        }
        result[j] = -1;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        //free(ptr);
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        return result;
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
    }
    
    void afficherListe(int* tab) { // afficher la liste
    
        for (int i = 0; tab[i] != -1; i++)
        {
            if (tab[i] != 0){
            printf("%d\n",tab[i]);
    
            }
        }
    
    
    }
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    int run (char *input,char *output){
    
        FILE *file1 = NULL;
        FILE *file2 = NULL;
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        char chaine[50];
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
        file1 = fopen(input,"r");
        if (file1 == NULL){return -1;}
    
        file2 = fopen(output,"w+");
        if (file2 == NULL){
            fclose(file1);
            return -1;
        }
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
        while (fgets(chaine,50,file1) != NULL){
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    
            int *pr_divs = prime_divs(atoi(chaine));
            fprintf(file2,"%s ",chaine);
            for (int i = 0; pr_divs[i] != -1; i++)
            {
                fprintf(file2,"%d ",pr_divs[i]);
            }
            fputc('\n',file2);
            
        }
    
        fclose(file1);
        fclose(file2);
    
        return 0;
    
    }
    
    
    Laurent Paucot's avatar
    Laurent Paucot a validé
    /* int main() {
        // test pour is_div(int number, int i)
        int number = 10 ;
        int number1 = 11 ;
        int i = 3 ;
        printf("%d\n",is_div(number,i)) ; // 1
        printf("%d\n",is_div(number1,i)) ; // 0
        // test pour is_prime(int number)
        int number2 = 1498498411 ;
        int number3 = 5 ;
        int number4 = 14545144 ;
        printf("%d\n",is_prime(number2)) ; // 0
        printf("%d\n",is_prime(number3)) ; // 1
        printf("%d\n",is_prime(number4)) ; // 0
        //prime divis
        afficherListe(prime_divs(number));
        return 0;
    } */