IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

écriture dans un fichier


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 25
    Points
    25
    Par défaut écriture dans un fichier
    Bonjour,

    Je suis entrain d'écrire un programme qui permet de lister toutes les combinaisons possibles de 4.
    J'ai un petit souci. En fait, je voudrais écrire les résultats dans un fichier texte "CombinationsFile.txt". Chaque combinaison est sur une ligne.
    J'ai essayé de créer une fonction sauvegarderResultat qui a comme parametre nom du fichier mais ça ne marche pas
    ci-dessous mon programme.
    Quelqu'un pourrait-il m'aider?
    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    FILE * CombinationsFile;
    void combinaisons(int *ens, int *combinaison, int n, int p, int i, int t, void (*func)(int*,int) ) {
        if (i<p) {
            int k;
            for (k=t; k<n; k++) {
                combinaison[i] = ens[k];
                combinaisons(ens,combinaison,n,p,i+1,k+1,func);
            }
        }
        else {
            func(combinaison,p);
     
     
        }
    }
     
    void afficher( int *p, int n) {
      int i;
      for (i = 0; i < n; i++) printf("%d ", p[i]);
      printf("\n");
    }
    void sauvegarderResultat( FILE* Combinaisons, int *p, int n) {
      int i;
      CombinationsFile=fopen("Combinations.txt","w");
         if(CombinationsFile==NULL)
         {
              printf("Failed to open  Combinations file, quitting!\n");
              exit(1);
         }
     
    p= malloc(n*sizeof(int));
      for (i = 0; i < n; i++)
      fprintf(CombinationsFile,"%d\n", p[i]);
      fclose(CombinationsFile);
    }
    int main() {
      int ens[] = {1,2,3,4,5,6};
      int combi[4];
      combinaisons(ens,combi,6,4,0,0,afficher);
       sauvegarderResultat(CombinationsFile,6,combi);
    }

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    mais ça ne marche pas
    Tu ne trouves pas que c'est un peu trop vague?
    Donne nous le message d'erreur, le code de retour lors de l’exécution, tout ce qui te fait dire que ton programme ne marche pas.

    Tu gagnera du temps et nous aussi.

    De plus, on a vraiment l'impression que ton programme ne marche pas et que tu n'as même pas cherché à trouver la cause.
    Si ton programme plante tu devrais être capable au minimum de nous donner la ligne où ça plante.
    S'il ne fonctionne pas correctement, tu devrais être capable de nous dire quelle portion du code ne produit pas le résultat attendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    combinaisons(ens,combi,6,4,0,0,&afficher);
    tu dois transmettre en paramètre un pointeur de fonction.

    Sinon, essaye d'utiliser des noms de variables plus explicites.
    Ce n'est pas très agréable de lire un code où on a des variables n, p, i, k etc...

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    En fait, le programme permet de trouver toutes les combinaisons possibles en utilisant un algorithmes récursifs.
    Je souhaite sauvegarder les résultats dans un fichier. Je suis coincée.J'ai essayé de passer en paramêtre de la fonction combinaison la fonction savegarder qui a elle le FILE*. Mais ile ne m'affiche que le dernier résultat
    Des idées?
    ci-joint le programme
    Merci de vos aides.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #include <stdio.h>
    #include <string.h>
    #define MAX 1024
    // on cherche à trouver toutes les combinaisons 4 objets parmi 3!
    //n l'ensemble d'éléments et p le sous ensembles
    FILE * fichier;
    int NB;
     
    void afficher(int *t, int l) {
        int i,j;
        for (i = 0; i < l; ++i) printf("%d ",t[i]);
     
        for (i = 0; i < l; ++i) {
            for (j = 0; j < t[i]; ++j) {
     
            }
        }
        printf("\n");
        ++NB;
    }
    int sauvegarder(FILE*fichier, int *t, int l) {
        int i,j;
     
        for (i = 0; i < l; ++i) fprintf(fichier,"%d ",t[i]);
     
        for (i = 0; i < l; ++i) {
            for (j = 0; j < t[i]; ++j) {
     
            }
        }
        fprintf(fichier,"\n");
        ++NB;
     return 1;
     
    }
    void kcombinaison(int *t, int n, int p, void (*func)(int*,int), int(*savegarder)(FILE*,int*,int)) {
        int tmp,i;
        t[0] = p;
        memset(t+1,0, sizeof *t * (n - 1));
        while(t[n-1] != p) {
            func(t,n);
     
            tmp = t[n-1];
            t[n-1] = 0;
            i = n-1;
            while(t[i] == 0) --i;
     
            --t[i];
            t[i+1] = tmp + 1;
        }
        func(t,n);
        sauvegarder(fichier, t, n) ;
     
     
    }
     
    int main() {
        int tab[MAX];
        int n = 3, p = 4; // 4 objets pris parmi 3
        NB = 0;
        fichier=fopen("Combinations.txt","w");
    	if(fichier==NULL)
    	{
    		printf("Failed to open  Combinations file, quitting!\n");
    		exit(1);
    	}
        kcombinaison(tab,n,p,afficher,sauvegarder(fichier, tab,p));
     
        	fclose(fichier);
        return 0;
    }

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    ligne 67 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sauvegarder(fichier, tab,p)
    ligne 36 et 52 : nom de fonction différente

    Je suis étonné que ça compile.
    A la ligne 67, tu exécute la fonction sauvegarder qui retourne un int
    Tu as donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int(*savegarder)(FILE*,int*,int) = 1;
    il faut utiliser :

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    J'ai ré-écris le programme.
    J'ai fais passé FILE* dans ma fonction kcombinaison (je voudrais afficher les résultats de cette fonction) mais il n'écris nulle part .
    Pourrais-tu STP l'exécuter et me dire qu'est ce que tu en penses?
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <stdio.h>
    #include <string.h>
    #define MAX 1024
    // on cherche à tro4 objets pris parmi 3
    FILE * fichier;
    int NB;
     
    void afficher(int *t, int l) {
        int i,j;
        for (i = 0; i < l; ++i)
         printf("%d ",t[i]);
     
        for (i = 0; i < l; ++i) {
            for (j = 0; j < t[i]; ++j) {
     
            }
        }
        printf("\n");
        ++NB;
    }
     
    void kcombinaison(int *t, int n, int p, void (*afficher)(int*,int), FILE*fichier) {
        int tmp,i;
        t[0] = p;
        memset(t+1,0, sizeof *t * (n - 1));
        while(t[n-1] != p) {
            afficher(t,n);
            tmp = t[n-1];
            t[n-1] = 0;
            i = n-1;
            while(t[i] == 0) --i;
     
            --t[i];
            t[i+1] = tmp + 1;
     
        }
        afficher(t,n);
        fprintf(fichier,"%d",t[i]);
     
     
     
    }
     
    int main() {
        int tab[MAX];
        int n = 3, p = 4; // 4 objets pris parmi 3
        NB = 0;
        fichier=fopen("Combinations.txt","w");
    	if(fichier==NULL)
    	{
    		printf("Failed to open  Combinations file, quitting!\n");
    		exit(1);
    	}
        kcombinaison(tab,n,p,afficher,fichier);
     
        	fclose(fichier);
        return 0;
    }

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdio.h>
    #include <string.h>
    #define MAX 1024
    // on cherche à tro4 objets pris parmi 3
    int NB;
     
    void ecrire(int *t, int l,FILE*fichier) {
        int i,j;
        for (i = 0; i < l; ++i)
         fprintf(fichier,"%d ",t[i]);
     
        for (i = 0; i < l; ++i) {
            for (j = 0; j < t[i]; ++j) {
     
            }
        }
        fprintf(fichier,"\n");
        ++NB;
    }
     
     
    void afficher(int *t, int l,FILE*fichier) {
        int i,j;
        for (i = 0; i < l; ++i)
         printf("%d ",t[i]);
     
        for (i = 0; i < l; ++i) {
            for (j = 0; j < t[i]; ++j) {
     
            }
        }
        printf("\n");
        ++NB;
    }
     
    void kcombinaison(int *t, int n, int p, void (*afficher)(int*,int,FILE*fichier), FILE*fichier) {
        int tmp,i;
        t[0] = p;
        memset(t+1,0, sizeof *t * (n - 1));
        while(t[n-1] != p) {
            afficher(t,n, fichier);
            tmp = t[n-1];
            t[n-1] = 0;
            i = n-1;
            while(t[i] == 0) --i;
     
            --t[i];
            t[i+1] = tmp + 1;
     
        }
        afficher(t,n, fichier);
        //fprintf(fichier,"%d",t[i]);
     
     
     
    }
     
    int main() {
        int tab[MAX];
        int n = 3, p = 4; // 4 objets pris parmi 3
        NB = 0;
        FILE *fichier=fopen("Combinations.txt","w");
    	if(fichier==NULL)
    	{
    		printf("Failed to open  Combinations file, quitting!\n");
    		return 1;
    	}
        //kcombinaison(tab,n,p,&afficher,fichier);
     	kcombinaison(tab,n,p,&ecrire,fichier);
        	fclose(fichier);
        return 0;
    }

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2005, 11h57
  2. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  3. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28
  4. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 19h25
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo