Langage C: génération de données
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 53

Langage C: génération de données



  1. #1
    invite8b421ec7

    Langage C: génération de données


    ------

    Bonjour,

    Je voudrais créer 10 fichiers de données contenant les coordonées de clients (100 clients).
    Les coordonées de clients sont générés aléatoirement dans l'intervalle [-500, 500].

    Code:
    struct Clients donnees[100]// on a 100 clients
    {
        int x; // Abscisses
        int y; // Ordonnées
        
    };
    Pourriez-vous m'aider?
    Merci.

    -----

  2. #2
    doul11

    Re : Langage C: génération de données

    bonjour,

    Citation Envoyé par celine2 Voir le message
    Pourriez-vous m'aider?
    oui ! ...

    ... mais pour faire quoi ?

    est-ce que tu sait créer un fichier ? écrire dans un fichier ? bref qu'est-ce que tu sais faire et pas faire ?

    dans un premiers temps il faut définir les étapes principales pour réaliser ce que l'on te demande, as-tu une idée ?

    pourquoi 10 fichiers ?
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  3. #3
    invite8b421ec7

    Question Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message

    est-ce que tu sait créer un fichier ? écrire dans un fichier ? bref qu'est-ce que tu sais faire et pas faire ?

    dans un premiers temps il faut définir les étapes principales pour réaliser ce que l'on te demande, as-tu une idée ?

    pourquoi 10 fichiers ?
    Ce que je voulais faire est créer 10 jeux de données de 100 clients(coordonnées). Les données de clients (coordonnées)sont générées aléatoirement dans l'intervalle [-500,500].

    Voici mon essai
    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    typedef struct 
    {
        int x; // Abscisses
        int y; // Ordonnées
    }Clients;//tableau de clients
    Clients Node[100];
    
     int rand_a_b(int a, int b)// génération des valeurs aléatoires
     {                                                                                                  
    		return rand ()%(b-a)+a;
     }
     void Creersaisir(Clients Node[], int a, int b)
     {
    	FILE* f = NULL; 
    	int i;
    	f = fopen("N100.text","w"); 
        	 	
    	 for (i=1;i<100;i++)
    	 {
    		 Node[i].x	= (rand_a_b(a,b));
    		 fprintf(f,"%d  %d\n", i, Node[i].x); 
    	 }
    	 fclose(f);
     }
      
    int main()
    {
    	int nombre_aleatoire = 0;
    	srand( (unsigned)time( NULL ) );
    	Creersaisir (Node,-500, 500);
            return 0;
    }
    Est ce que mon code est correcte?
    Je ne parviens pas à créer 10 fichiers contenant des données de clients (coordonées) générées aléatoirement?
    Merci
    Dernière modification par Jack ; 16/01/2011 à 11h04. Motif: suppression de ligne vides inutiles

  4. #4
    Jack
    Modérateur

    Re : Langage C: génération de données

    IL faudrait que soit précis:

    ca ne compile pas: quel est alors le message d'erreur
    l'exécution ne se déroule pas comme il faut: à quel moment, quels sont les affichages?

    A+

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Langage C: génération de données

    Une petite remarque en attendant:
    for (i=1;i<100;i++) : un tableau en C commence à l'indice 0

    Pour la création des 10 fichiers, il te faudra faire une boucle pour 10 itérations en passant en paramètre le nom physique du fichier à chaque fois à la fonction de création du fichier.

    A+

  7. #6
    doul11

    Re : Langage C: génération de données

    Citation Envoyé par Jack Voir le message
    Pour la création des 10 fichiers, il te faudra faire une boucle pour 10 itérations en passant en paramètre le nom physique du fichier à chaque fois à la fonction de création du fichier.
    on peut aussi utiliser le même nom de fichier et lui coller un numéro derrière :

    Code:
    int i;
    
    for(i=0;i<10;i++)
    	{
    	char fileName[256];
    	FILE *file;
    	
    	sprintf(fileName,"file_%i.txt",i);
    	file=fopen(fileName,"w");
    	
    	//ecriture dans le fichier
    	
    	fclose(file);
    	}
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  8. #7
    Jack
    Modérateur

    Re : Langage C: génération de données

    C'est astucieux

    A+

  9. #8
    invite8b421ec7

    Question Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message
    on peut aussi utiliser le même nom de fichier et lui coller un numéro derrière :

    Code:
    int i;
    
    for(i=0;i<10;i++)
    	{
    	char fileName[256];
    	FILE *file;
    	
    	sprintf(fileName,"file_%i.txt",i);
    	file=fopen(fileName,"w");
    	
    	//ecriture dans le fichier
    	
    	fclose(file);
    	}
    Merci pour votre réponse.
    Au fait, je voudrais que les données de clients générées soient différentes.

    Comment faire?

  10. #9
    Jack
    Modérateur

    Re : Langage C: génération de données

    Citation Envoyé par celine2 Voir le message
    Merci pour votre réponse.
    Au fait, je voudrais que les données de clients générées soient différentes.

    Comment faire?
    Pourquoi ne le seraient-elles pas puisque tu continues à tirer des nombres aléatoires.

    A+

  11. #10
    doul11

    Re : Langage C: génération de données

    Citation Envoyé par celine2 Voir le message
    Au fait, je voudrais que les données de clients générées soient différentes.

    Comment faire?

    il n'y a rien a faire, il faut remplacer là ou j'ai écrit :

    Code:
    //ecriture dans le fichier
    par ton algorithme de remplissage aléatoire, chaque fichier étant crée l'un après l'autre il seront tous différant.

    édit : toasted by Jack
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  12. #11
    invite8b421ec7

    Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message
    Code:
    	
    	sprintf(fileName,"file_%i.txt",i);
    Je ne comprends pas cette ligne??
    Dernière modification par Philou67 ; 17/01/2011 à 08h09. Motif: Correction balise de citation

  13. #12
    Jack
    Modérateur

    Re : Langage C: génération de données

    c'est comme printf ou fprintf, mais appliqué à une chaine au lieu de stdout ou un fichier.

    Donc si i = 3 par exemple, la chaine filename sera égale à "file_3"

    A+

  14. #13
    invite8b421ec7

    Re : Langage C: génération de données

    Citation Envoyé par Jack Voir le message
    c'est comme printf ou fprintf, mais appliqué à une chaine au lieu de stdout ou un fichier.

    Donc si i = 3 par exemple, la chaine filename sera égale à "file_3"

    A+
    Merci pour votre réponse.
    J'ai rectifié mon programme, le voici. Mais voilà il me renvoie des bugs!!
    Merci.

    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    typedef struct 
    {
        int x; // Abscisses
        int y; // Ordonnées
    }Clients;//tableau de clients
    Clients Node[100];
    
     int rand_a_b(int a, int b)// génération des valeurs aléatoires
     {                                                                                                  
    		return rand ()%(b-a+1)+a;
     }
     void Creersaisir(Clients Node[], int a, int b)
     {
    	 char f[256];
    	 FILE* f ; 
    	
    	
    	int i;
    	int j;
    	
    	if (f !=NULL)
    	{
    		for(j=0;j<10;j++)
    		{
    			for (i=0;i<100;i++)
    			{
    				Node[i].x	= (rand_a_b(a,b));
    				fprintf(f,"%d  %d\n", i, Node[i].x); 
                 
    
    			 sprintf(fileName,"file_%i.txt" ,i);
    
    			}
    		 }
         fclose(f);
    	}
    
    else
    {
      printf("Message d'erreur quelquonque\n");
    }
    }
     
    
    
    
      
    int main()
    {
    	int i;
    	srand( (unsigned)time( NULL ) );
    	for (i=0;i<10;i++)
    		Creersaisir (Node,-500, 500);
            return 0;
    }
    [/
    1>------ Début de la génération*: Projet*: Test4, Configuration*: Debug Win32 ------
    1>Compilation en cours...
    1>main.c
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(19) : error C2372: 'f'*: redéfinition*; types d'indirection différents
    1> c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(18)*: voir la déclaration de 'f'
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(32) : warning C4133: 'fonction'*: types incompatibles - de 'char [256]' à 'FILE *'
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(35) : error C2065: 'fileName'*: identificateur non déclaré
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(35) : warning C4047: 'fonction'*: 'char *' diffère de 'int' dans les niveaux d'indirection
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(35) : warning C4024: 'sprintf'*: types différents pour le paramètre formel et réel 1
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(39) : warning C4133: 'fonction'*: types incompatibles - de 'char [256]' à 'FILE *'
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\admin\Mes documents\Visual Studio 2008\Projects\Test4\Test4\Debu g\BuildLog.htm"
    1>Test4 - 2 erreur(s), 4 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

  15. #14
    Jack
    Modérateur

    Re : Langage C: génération de données

    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(19) : error C2372: 'f'*: redéfinition*; types d'indirection différents
    pas étonnant:
    char f[256];
    FILE* f ;
    il faut choisir soit f est le nom physique du fichier, soit c'est celui du flux.

    en plus il n'y a plus de fopen ...
    A+

    (et à demain cause dodo)
    Dernière modification par Jack ; 16/01/2011 à 23h07.

  16. #15
    Xoxopixo

    Re : Langage C: génération de données

    >c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main .c(19) : error C2372: 'f'*: redéfinition*; types
    Un bug provient à mon avis d'une redeclaration du type de f.
    Ce qui veut dire que son type a été déclaré, ça c'est ok, mais que le compilateur trouve ensuite une autre declaration de f.

    comme ici
    Code:
     char f[256];
     FILE* f ;
    f ne peut pas être un pointeur sur un fichier et une chaine de caractere
    en même temps.

  17. #16
    doul11

    Post Re : Langage C: génération de données

    bonjour,

    Citation Envoyé par celine2 Voir le message
    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    typedef struct 
    {
        int x; // Abscisses
        int y; // Ordonnées
    }Clients;//tableau de clients
    Clients Node[100];
    
     int rand_a_b(int a, int b)// génération des valeurs aléatoires
     {                                                                                                  
    		return rand ()%(b-a+1)+a;
     }
     void Creersaisir(Clients Node[], int a, int b)
     {
    	 char f[256];
    	 FILE* f ; 
    	
    	
    	int i;
    	int j;
    	
    	if (f !=NULL)
    	{
    		for(j=0;j<10;j++)
    		{
    			for (i=0;i<100;i++)
    			{
    				Node[i].x	= (rand_a_b(a,b));
    				fprintf(f,"%d  %d\n", i, Node[i].x); 
                 
    
    			 sprintf(fileName,"file_%i.txt" ,i);
    
    			}
    		 }
         fclose(f);
    	}
    
    else
    {
      printf("Message d'erreur quelquonque\n");
    }
    }
      
    int main()
    {
    	int i;
    	srand( (unsigned)time( NULL ) );
    	for (i=0;i<10;i++)
    		Creersaisir (Node,-500, 500);
            return 0;
    }
    tout ça c'est très confus : c'est mal identé, les variables n'ont pas des noms assez explicites et pour finir l'organisation n'est pas bonne -> bug !

    Code:
    	for (i=0;i<10;i++)
    		Creersaisir (Node,-500, 500);
    a quoi ça sert de faire un for si la variable i n'est pas utilisé dans la boucle ?


    je ferais en deux étapes :

    1-création de 10 liste de 100 clients.
    2-enregistrement des liste dans des fichier.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  18. #17
    invite8b421ec7

    Re : Langage C: génération de données

    Citation Envoyé par Jack Voir le message
    flux.
    Merci pour votre réponse.
    Citation Envoyé par Jack Voir le message
    flux.
    Qu'est ce que c'est les flux?
    Bon, j'ai nommé différement le nom du flux et le nom de fichier.
    Voici le code. Mais voilà toujours des bugs.

    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    typedef struct 
    {
        int x; // Abscisses
        int y; // Ordonnées
    }Clients;//tableau de clients
    Clients Node[100];
    
     int rand_a_b(int a, int b)// génération des valeurs aléatoires
     {                                                                                                  
    		return rand ()%(b-a+1)+a;
     }
     void Creersaisir(Clients Node[], int a, int b)
     {
    	 
    	 FILE* f ; 
    	
    	
    	int i;
    	int j;
    	file=fopen(donnees,"w");
    
    	if (f !=NULL)
    	{
    		
    		{
    			for (i=0;i<100;i++)
    			{
    				Node[i].x	= (rand_a_b(a,b));
    				fprintf(f,"%d  %d\n", i, Node[i].x); 
    				 fclose(f);
    			}
                 for(j=0;j<10;j++)
    			 {
    				  char fileName[256];
    				  file=fopen(fileName,"w");
    
    				sprintf(filName,"file_%i.txt" ,j);
    				fclose(f);
    			}
    
    	else
    	{
    		printf("erreur \n");
    	}
    }
     
    
    
    
      
    int main()
    {
    	int i;
    	srand( (unsigned)time( NULL ) );
    	for (i=0;i<10;i++)
    		Creersaisir (Node,-500, 500);
            return 0;
    }
    Les bugs
    Code:
    1>------ Début de la génération*: Projet*: Test4, Configuration*: Debug Win32 ------
    1>Compilation en cours...
    1>main.c
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(24) : error C2065: 'file'*: identificateur non déclaré
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(24) : error C2065: 'donnees'*: identificateur non déclaré
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(24) : warning C4047: 'fonction'*: 'const char *' diffère de 'int' dans les niveaux d'indirection
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(24) : warning C4024: 'fopen'*: types différents pour le paramètre formel et réel 1
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(24) : warning C4047: '='*: 'int' diffère de 'FILE *' dans les niveaux d'indirection
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(39) : error C2065: 'file'*: identificateur non déclaré
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(39) : warning C4047: '='*: 'int' diffère de 'FILE *' dans les niveaux d'indirection
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(41) : error C2065: 'filName'*: identificateur non déclaré
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(41) : warning C4047: 'fonction'*: 'char *' diffère de 'int' dans les niveaux d'indirection
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(41) : warning C4024: 'sprintf'*: types différents pour le paramètre formel et réel 1
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(45) : error C2181: instruction else sans if correspondant non conforme
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(55) : error C2143: erreur de syntaxe*: absence de ';' avant 'type'
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(61) : warning C4098: 'Creersaisir'*: retour d'une valeur par la fonction 'void'
    1>c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(64) : fatal error C1075: fin de fichier rencontrée avant que l'élément accolade '{' gauche de 'c:\documents and settings\admin\mes documents\visual studio 2008\projects\test4\test4\main.c(27)' soit équilibré
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\admin\Mes documents\Visual Studio 2008\Projects\Test4\Test4\Debug\BuildLog.htm"
    1>Test4 - 7 erreur(s), 7 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

  19. #18
    whoami

    Re : Langage C: génération de données

    Bonjour,

    Les messages d'erreur sont explicites, il faut quand même faire un effort pour comprendre, et aller voir ce qu'il en est dans ton code.

  20. #19
    bzh_nicolas

    Re : Langage C: génération de données

    Ton code part dans tous les sens là, cela ne correspond ni à ce que tu veux faire, ni à ce qu'il t'a été conseillé.
    Tu fermes tes fichiers plus souvent que tu ne les ouvres, tu ouvres un fichier avant d'avoir donnée une valeur à la variable contenant son nom. Il y a des fautes de frappes, des variables non déclarées. Etc...
    Il y a des erreurs de syntaxe aussi (parenthèse ouvrantes qui n'ont pas raison d'être notamment).

    Bref, relis ton code avec attention.

  21. #20
    Jack
    Modérateur

    Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message
    a quoi ça sert de faire un for si la variable i n'est pas utilisé dans la boucle ?
    si tu parles d'une manière générale, je ne te suis pas trop. On peut utiliser un compteur uniquement pour compter le nombre d'itérations, sans y faire référence dans la boucle.

    Qu'est ce que c'est les flux?
    c'est ce qui permet de désigner un fichier. Le gestion interne des fichier est assez complexe. Le langage C donne l'accès aux fichiers au travers de flux (stream).
    Quand tu écris FILE* f; f est est un flux.

    Voici le code. Mais voilà toujours des bugs.
    Visual studio est assez clair au niveau de ses messages. En tout cas la ligne incriminée est parfaitement identifiée
    test4\main.c(24) : error C2065: 'file'*: identificateur non déclaré
    ta ligne 24 est la suivante:
    Code:
    	file=fopen(donnees,"w");
    c'est file qui est en cause puisque le compilateur ne connait pas cette variable que tu sors d'on ne sait où.

    Si tu as déclaré le flux f, c'est pour t'en servir pour la suite, donc:
    Code:
     f=fopen(donnees,"w");
    A+

    rhhhâââ, j'ai été pris de vitesse. Tout à fait d'accord avec toi bzh_nicolas
    Dernière modification par Jack ; 17/01/2011 à 11h23.

  22. #21
    whoami

    Re : Langage C: génération de données

    Bonjour,
    Citation Envoyé par bzh_nicolas Voir le message
    Ton code part dans tous les sens là, cela ne correspond ni à ce que tu veux faire, ni à ce qu'il t'a été conseillé.
    Tu fermes tes fichiers plus souvent que tu ne les ouvres, tu ouvres un fichier avant d'avoir donnée une valeur à la variable contenant son nom. Il y a des fautes de frappes, des variables non déclarées. Etc...
    Il y a des erreurs de syntaxe aussi (parenthèse ouvrantes qui n'ont pas raison d'être notamment).

    Bref, relis ton code avec attention.
    +1.

    Et pour faire un peu mieux : soigne la présentation de ton code (indentation régulière et cohérente, lignes vides pour aérer [mais pas trop], ...), et tu verras que ça paraîtra plus clair.

  23. #22
    invite8b421ec7

    Unhappy Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message

    je ferais en deux étapes :

    1-création de 10 liste de 100 clients.
    2-enregistrement des liste dans des fichier.
    Je vais commencer par la première étape.
    J'ai essayé d'écrire un programme qui permet de créer une liste de 1 clients. La valeur de l'élement de la liste est générée aléatoirement dans l'intervalle[-500,500].
    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    #include<string.h>
    
    typedef struct element element;
    struct element
    {
        int x;
        struct element *nxt;
    };
     
    typedef element* llist;
     
    
    
    llist ajouterEnTete(llist liste)
    {
        /* On crée un nouvel élément */
        element* nouvelElement = malloc(sizeof(element));
     
        /* On assigne la valeur au nouvel élément */
        nouvelElement->x = rand ()% (500+500+1)+500;
     
        /* On assigne l'adresse de l'élément suivant au nouvel élément */
        nouvelElement->nxt = liste;
     
        /* On retourne la nouvelle liste, i.e. le pointeur sur le premier élément */
        return nouvelElement;
    }
     void afficherListe(llist liste)
    {
        element *tmp = liste;
        /* Tant que l'on n'est pas au bout de la liste */
        while(tmp != NULL)
        {
            /* On affiche */
            printf("%d ", tmp->x);
            /* On avance d'une case */
            tmp = tmp->nxt;
        }
    }
     
    
    int main(int argc, char **argv)
    {
        llist ma_liste = NULL;
        
     
        
            ma_liste = ajouterEnTete(ma_liste);
            
        
        afficherListe(ma_liste);
     
        
     
        return 0;
    }
    Mais voilà je me bloque. Je n'arrive pas à créer une liste de 100 clients.
    Pourriez-vous m'aider?
    Merci.

  24. #23
    doul11

    Re : Langage C: génération de données

    en toute franchise j'ai absolument rien compris au code, ça a l'air compliqué pour rien : pas besoin de faire de l'allocation dynamique.

    j'ai un peut de mal a expliquer avec des mots alors voila un exemple de code qui fait simplement 10 liste de 100 clients :

    Code:
    #include <stdio.h>
    
    typedef struct
    {
    	int i_x;
    	int i_y;
    }Client;
    
    int main()
    {
    int i_nliste, i_nclient;
    
    Client liste_client[10][100];
    
    for(i_nliste=0;i_nliste<10;i_nliste++)
    	{
    	for(i_nclient=0;i_nclient<10;i_nclient++)
    		{
    		liste_client[i_nliste][i_nclient].i_x=rand();
    		liste_client[i_nliste][i_nclient].i_y=rand();
    		}
    	}
    }
    reste écrire la liste dans un fichier, j'ai déjà donné le code donc il "suffit" de faire ...
    Dernière modification par doul11 ; 17/01/2011 à 15h33.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  25. #24
    bzh_nicolas

    Re : Langage C: génération de données

    Ne te lance pas tout de suite dans les listes chainées. Ne le prends pas mal, mais tu n'as pas l'air à l'aise avec l'algorithmique.

    voici l'algo (pas en langage algorithmique formel mais ce n'est pas grave, dis moi si tu ne comprends pas quelque chose), à toi de le traduire en C :
    Code:
    pour ind1 = 0 à 9 //10 tours de boucle
      générer nouveau nom du fichier // avec sprintf
      ouvrir le fichier (avec le nouveau nom)
      pour ind2 = 0 à 99 // 100 tour de boucle
        écrire dans le fichier les coordonnées x ET y du client générées aléatoirement //tu oublies y à chaque fois
      fin pour
      fermer le fichier
    fin pour

  26. #25
    invite8b421ec7

    Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    
    typedef struct
    {
    	int i_x;
    	int i_y;
    }Client;
    
    int main()
    {
    int i_nliste, i_nclient;
    
    Client liste_client[10][100];
    
    for(i_nliste=0;i_nliste<10;i_nliste++)
    	{
    	for(i_nclient=0;i_nclient<10;i_nclient++)
    		{
    		liste_client[i_nliste][i_nclient].i_x=rand();
    		liste_client[i_nliste][i_nclient].i_y=rand();
    		}
    	}
    }
    Merci beaucoup pour votre aide précieuse.
    Citation Envoyé par doul11 Voir le message
    reste écrire la liste dans un fichier, j'ai déjà donné le code donc il "suffit" de faire ...
    Voici mon essai. Je cherche là à écrire chaque liste d'élements dans un fichier (j'ai 10 listes).
    Merci de m'aider.
    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    
    typedef struct
    {
    	int i_x;
    	int i_y;
    }Client;
    
    
    	Client liste_client[10][100];
    int main()
    {
    	
    	FILE* f = NULL;
    	int i_nliste; 
    	int i_nclient;
    	
    	f = fopen("donnees_clients.text","w");
    	for(i_nliste=0;i_nliste<10;i_nliste++)
    		{
    			for(i_nclient=0;i_nclient<100;i_nclient++)
    			{
    				liste_client[i_nliste][i_nclient].i_x = rand()%(500+500+1)-500;
    				liste_client[i_nliste][i_nclient].i_y = rand()%(500+500+1)-500;
    				fprintf(f, "%d  %d\n", liste_client[i_nliste][i_nclient].i_x, liste_client[i_nliste][i_nclient].i_y);
    				
    			}
    		}
    	    fclose(f);
    		
    return 0;
    }

  27. #26
    doul11

    Re : Langage C: génération de données

    bonsoir celine2

    le fopen n'est pas au bon endroit, il faut ouvrir un fichier par liste, de plus pense a utiliser un sprintf comme je l'ai fait pour avoir 10 noms de fichiers différant. bzh_nicolas te donne la marche a suivre.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  28. #27
    Xoxopixo

    Re : Langage C: génération de données

    Je pense qu'il te faudra mettre à jour le nom de ton fichier à chaque ouverture et ecriture. Donc il te fout un nom de fichier manipulable.
    Une variable.
    J'ai rajouté la variable nom_fichier, initialise a 255 characteres.
    je te laisse voir comme y adjoindre, par concatennation peut-être le nom du fichier pour qu'il exprime tes souhaits.

    J'ai mis le fclose à sa bonne place ainsi que le fopen.
    C'est à dire juste à avant l'accolade de la fin de boucle 10.
    Je me suis egalement permi de refaire l'indentation, selon mes habitudes, maintenant, c'est vrai que c'est aussi une histoire de gouts.

    Une petite precision, le return 0 n'a pas d'interet.

    tu declare main en int main()
    mais pourquoi pas void main() ?

    Si return vaut toujours 0, pourquoi indiquer la valeur ?
    C'est le Nombre entier qui permet de donner le resultat de l'execution de main à sa sortie.
    0 si tout est ok.
    autre-chose en cas d'erreur.

    tu devrais mettre int main(void) en toute rigueur d'apres le message #3 de la discussion suivante : http://forums.futura-sciences.com/lo...main-void.html

    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h> 
    
    typedef struct
    {
      int i_x;
      int i_y;
    } Client;
    
    Client liste_client[10][100];
    
    int main()
    {
      FILE* f = NULL;
      int i_nliste; 
      int i_nclient;
      char nom_fichier[256];
    	
      for(i_nliste=0;i_nliste<10;i_nliste++)
       {
         nom_fichier="donnees_clients.text";
         f = fopen(nom_fichier,"w");
         for(i_nclient=0;i_nclient<100;i_nclient++)
          {
            liste_client[i_nliste][i_nclient].i_x = rand()%(500+500+1)-500;
            liste_client[i_nliste][i_nclient].i_y = rand()%(500+500+1)-500;
            fprintf(f, "%d  %d\n", liste_client[i_nliste][i_nclient].i_x,       
            liste_client[i_nliste][i_nclient].i_y);
          }
         fclose(f);
       }
    
      return 0;
    }

  29. #28
    invite8b421ec7

    Re : Langage C: génération de données

    Merci pour vos réponses.

    Voici mon essai. Je n'arrive toujours pas à avoir les 10 fichiers de données
    Quelqu'un pourrait m'aider?
    Merci par avance.
    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    typedef struct
    {
    	int x;	//abscisse
    	int y; //ordonnée
    
    }Client;
    
    
    	Client liste_client[10][100];
    int main()
    {
    
    	
    	
    	int liste;
    	int client;
    
    
    	for(liste=0;liste<10;liste++) // pour chaque liste
        {
    		
            for(client=0;client<100;client++) // pour chaque client d'une liste
            {
                liste_client[liste][client].x = rand()%(500+500+1)-500;
                liste_client[liste][client].y = rand()%(500+500+1)-500;
            }
        }
       
       for(liste=0;liste<10;liste++)// pour chaque liste
        {
    		char fichier_donnees[256];
    			
    		FILE* file;
    		file=fopen("fichier_donnees","w");
    		sprintf(fichier_donnees,"file_%liste.txt",liste);
    		for(client=0;client<100;client++) // pour chaque client d'une liste
            {
    			
    			fprintf(file, " %+4d %+4d  %d \n",liste_client[liste][client].x, liste_client[liste][client].y);
    			
    		}
    
            fclose(file);
       }
    
    
        return 0;
    }

  30. #29
    doul11

    Re : Langage C: génération de données

    tu y est presque !

    Citation Envoyé par celine2 Voir le message
    Code:
    file=fopen("fichier_donnees","w");
    sprintf(fichier_donnees,"file_%liste.txt",liste);
    il faut inverser ces deux lignes : d'abord tu crée un nom de fichier ensuite tu ouvre un fichier avec ce nom.

    dans sprintf le format n'est pas %liste mais %i pour un int

    dans fopen il ne faut pas de guillemets sur fichier_donnees, car fichier_donnees est la variable qui contient le nom, tel que tu l'a écrit le fichier crée ce nome "fichier_donnees" et non pas le nom qui est dans fichier_donnees. c'est a dire "file_0.txt" (si liste=0)
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  31. #30
    invite8b421ec7

    Re : Langage C: génération de données

    Citation Envoyé par doul11 Voir le message
    tu y est presque !



    il faut inverser ces deux lignes : d'abord tu crée un nom de fichier ensuite tu ouvre un fichier avec ce nom.

    dans sprintf le format n'est pas %liste mais %i pour un int

    dans fopen il ne faut pas de guillemets sur fichier_donnees, car fichier_donnees est la variable qui contient le nom, tel que tu l'a écrit le fichier crée ce nome "fichier_donnees" et non pas le nom qui est dans fichier_donnees. c'est a dire "file_0.txt" (si liste=0)
    Merci beaucoup pour ces corrections.

    J'ai effectué les rectifications.
    Je trouve dans le repertoire qu'un seul fichier. Il y a quelque chose qui m'échappe encore
    Code:
    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    typedef struct
    {
    	int x;	//abscisse
    	int y; //ordonnée
    
    }Client;
    
    
    	Client liste_client[10][100];
    int main()
    {
    
    	
    	
    	int liste;
    	int client;
    
    
    	for(liste=0;liste<10;liste++) // pour chaque liste
        {
    		
            for(client=0;client<100;client++) // pour chaque client d'une liste
            {
                liste_client[liste][client].x = rand()%(500+500+1)-500;
                liste_client[liste][client].y = rand()%(500+500+1)-500;
            }
        }
       fputs("DIMENSION \n", f);
       fputs("NODE_COORD \n",f );
       for(liste=0;liste<10;liste++)// pour chaque liste
        {
    		for(client=0;client<100;client++) // pour chaque client d'une liste
            {
    		    char fichier_donnees[256];
    			FILE* file;
    			sprintf(fichier_donnees,"file_%i.txt",i);
    			file=fopen(fichier_donnees,"w");
    	
    			fprintf(f, " %+4d %+4d  %d \n",liste_client[liste][client].x, liste_client[liste][client].y);
    			fprintf(h, "%+4d %+4d \n", liste_client[liste][client].x, liste_client[liste][client].y);
    		}
    
        fclose(file);
       }
    
    
        return 0;
    }

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. de langage C en langage assembleur
    Par invite284746c1 dans le forum Électronique
    Réponses: 1
    Dernier message: 14/05/2009, 12h42
  2. Génération bornée (Bounded Generation)
    Par inviteececec2d dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 05/03/2009, 10h41
  3. importation de données de excel dans R : données numériques non reconnues
    Par invitef67ae3c5 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 05/02/2009, 19h00