Langage C: génération de données - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 53 sur 53

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



  1. #31
    invite8b421ec7

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


    ------

    [QUOTE=celine2;3373489]Merci beaucoup pour ces corrections.

    J'ai effectué les rectifications.
    Des commentaires??
    Une autre question SVP, savez-vous comment calculer le temps d'éxécution de ce programme?
    Merci beaucoup de vos aides.
    Enfin!!
    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 ;
    			sprintf(fichier_donnees,"file_%d.txt",liste);
    			
    			file=fopen(fichier_donnees,"w");
    			 fputs("DIMENSION \n", file);
                fputs("NODE_COORD \n", file);
    
    		for(client=0;client<100;client++) // pour chaque client d'une liste
            {
    		    
    	       
    			fprintf(file, " %d % d % d \n",client, liste_client[liste][client].x, liste_client[liste][client].y);
    			
    		}
    
        fclose(file);
       }
    
    
        return 0;
    }

    -----

  2. #32
    Xoxopixo

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

    Super, je suis content que ca fonctionne.

    Une petite retouche, d'organistaion
    Tu peut mettre les declarations hors des boucles,
    pourquoi pas avec liste et client,
    comme ça c'est plus claire quelles sont les variables utilisées dans la procedure.

    char fichier_donnees[256];
    FILE* file ;

    Et peut-être changer la taille de la chaine, qui ne sera jamais aussi longue.

    Sinon, le temps d'execution du programme, c'est un point important ?
    Je ne comprend pas pourquoi tu t'embetes à calculer un temps, à mon avis tres court, pour lequel son usage tel que je le vois ne destine pas à depasser la seconde sur un pc moyen de gamme.

    Tu comptes augmenter le nombre de clients ou de listes?

  3. #33
    Jack
    Modérateur

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

    Citation Envoyé par Xoxopixo Voir le message
    Une petite precision, le return 0 n'a pas d'interet.

    tu declare main en int main()
    mais pourquoi pas void main() ?
    la norme du langage C prévoit que la fonction main doit toujours retourner un int.

    A+

  4. #34
    invite8b421ec7

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

    Citation Envoyé par Xoxopixo Voir le message
    Super, je suis content que ca fonctionne.

    Une petite retouche, d'organistaion
    Tu peut mettre les declarations hors des boucles,
    pourquoi pas avec liste et client,
    comme ça c'est plus claire quelles sont les variables utilisées dans la procedure.

    char fichier_donnees[256];
    FILE* file ;

    Et peut-être changer la taille de la chaine, qui ne sera jamais aussi longue.
    ?
    Merci pour ces conseils pertinents.
    Citation Envoyé par Xoxopixo Voir le message
    Sinon, le temps d'execution du programme, c'est un point important ?
    Je ne comprend pas pourquoi tu t'embetes à calculer un temps, à mon avis tres court, pour lequel son usage tel que je le vois ne destine pas à depasser la seconde sur un pc moyen de gamme.

    Tu comptes augmenter le nombre de clients ou de listes?
    Tout à fait. J'attends votre réponse.
    Merci.

  5. #35
    bzh_nicolas

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

    Pour le temps d'exécution, le plus simple va être de faire des tests, sachant que la plus grande partie du temps utilisé va l'être par les opérations sur les fichiers (ouverture, écriture, fermeture). Opérations qui dépendront de la charge du processeur à ce moment là, de la vitesse d'écriture du disque dur, etc... C'est assez difficile à quantifier mais tu n'as pas moyen d'y couper.
    Tu peux gagner un peu de temps en plaçant l'écriture dans le fichier dans la même boucle que la génération des données aléatoires, tu passeras ainsi de 4 boucles à 2 mais ça ne va pas être un écart mesurable pour un être humain (à moins bien sûr que tu ne prévois de générer plusieurs centaines de fichiers avec plusieurs milliers de clients dans chaque fichier, auquel cas ça peut commencer à devenir intéressant).
    Dernière modification par bzh_nicolas ; 18/01/2011 à 11h12.

  6. #36
    invite8b421ec7

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

    Salut,

    Les valeurs des élèments de liste de clients (les coordonnées) générées aléatoirement sont différentes des valeurs trouvées par ma collègues de classe!
    Le problème traité est le problème de tournées de véhicules (généralisation du problème de voyageur de commerce).

    Bon, j'ai supposé que le dépot à comme coordonnée (0,0) et j'ai généré que les coordonnées de clients qui sont dans lintervalle [-500,500].
    Est ce que c'est logique ce que j'ai fait?
    Alors, où est le problème?
    J'espère que j'ai bien exposé mon problème.

    Merci par avance de vos aides.

  7. #37
    bzh_nicolas

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

    Citation Envoyé par celine2 Voir le message
    Les valeurs des élèments de liste de clients (les coordonnées) générées aléatoirement sont différentes des valeurs trouvées par ma collègues de classe!
    Si vous avez toutes les deux utilisé la méthode rand c'est normal que vous ayez des résultats différents, c'est le but de rand qui te retourne un nombre aléatoire.

    Citation Envoyé par celine2 Voir le message
    Le problème traité est le problème de tournées de véhicules (généralisation du problème de voyageur de commerce).

    Bon, j'ai supposé que le dépot à comme coordonnée (0,0) et j'ai généré que les coordonnées de clients qui sont dans lintervalle [-500,500].
    Est ce que c'est logique ce que j'ai fait?
    Alors, où est le problème?
    J'espère que j'ai bien exposé mon problème.
    Pour l'instant la génération aléatoire ne va faire que créer les données qui devront être utilisées pour ton problème.
    Donc on ne peut pas dire si c'est logique ou pas, vu que pour l'instant tu n'as que les données de départ. Cela dépendra de comment tu vas gérer ces données.

  8. #38
    Xoxopixo

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

    Citation Envoyé par celine2 Voir le message
    Bon, j'ai supposé que le dépot à comme coordonnée (0,0) et j'ai généré que les coordonnées de clients qui sont dans lintervalle [-500,500].
    Est ce que c'est logique ce que j'ai fait?
    rand()%(1001)-500 ne donne pas le resultat attendu.
    Je ne suis pas un feru du c, plutot pascal objet, donc j'ai regardé la definition de rand :

    La fonction rand() renvoie un entier pseudo-aléatoire entre 0 et RAND_MAX.
    Source : http://bat710.univ-lyon1.fr/~jciehl/...n3/rand.3.html

    RAND_MAX etant egal à 32000 selon ce site.
    Il s'agir d'une variable définie.

    Citation Envoyé par site
    "Si vous désirez engendrer un entier aléatoire entre 1 et 10, vous devez toujours procéder en utilisant les bits de poids forts, comme dans :
    j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
    et jamais ainsi : j=1+(rand() % 10);
    (car cette derniere version utilise les bits de poids faibles)."
    Pour avoir un nombre entre 0 et 1000 il faut diviser le resultat par RAND_MAX (RAND_MAX+1 selon le site mais j'ai un doute) et le multiplier par 1000

    donc x= (int) (1000.0*rand()/RAND_MAX)-500;
    ou x=(int)(1000*rand()/(RAND_MAX+1)) -500 selon les preconisations du site.

    Apres evidement que vous n'ayez pas les mêmes valeurs dans vos fichiers, comme le dir bzh_nicolas, ça me semble normal.
    Tant que les valeurs se trouvent entre -500 et 500 inclus.

    Pour le debogage, tu peux verfier que ton programme fourni au moins une fois les valeurs -500 et 500, en regardant dans tes fichiers par exemple. Qu'il atteigne les valeurs limites et reste dans ces limites.

  9. #39
    invite8b421ec7

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

    Citation Envoyé par bzh_nicolas Voir le message
    Si vous avez toutes les deux utilisé la méthode rand c'est normal que vous ayez des résultats différents, c'est le but de rand qui te retourne un nombre aléatoire.

    Merci pour votre réponse.
    Si j'ai bien compris, Rand doit renvoyer des valeurs différentes à chaque exécution du programme?

  10. #40
    bzh_nicolas

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

    Citation Envoyé par Xoxopixo Voir le message
    rand()%(1001)-500 ne donne pas le resultat attendu.
    La formule est bonne pour moi, pas de soucis.

    Citation Envoyé par celine2 Voir le message
    Merci pour votre réponse.
    Si j'ai bien compris, Rand doit renvoyer des valeurs différentes à chaque exécution du programme?
    Si tu utilises la fonction srand avant oui, si tu ne l'utilise pas tu devrais avoir les mêmes valeur à chaque exécution
    Dernière modification par bzh_nicolas ; 18/01/2011 à 20h30.

  11. #41
    Xoxopixo

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

    Concernant la mesure de ton temps d'execution, c'est un probleme auquel j'ai deja eu affaire, mais en delphi (pascal).
    Je l'avait résolu en appelant une procedure pour determiner l'instant, via le temps fourni par le PC.
    Puis en appelant une autre procedure qui stoque la valeur de l'instant à la fin du programme.
    Comme ceci :

    Code:
    procedure StartTime();
    begin
      TimeD:=GetTickCount();
    end;
    
    procedure StopTime();
    var
      f: textfile;
      s : string;
      t : glfloat;
    begin
      t:=GetTickCount()-TimeD;
      s:=apppath+'\'+'time.txt';
      assignfile(f,s);
      rewrite(f);
      writeln(f,t);
      close(f);
    end;
    Dans ton cas, le principe est de creer une boucle qui repete n fois ce que tu veux mesurer. Lancer le getTickCount avant cette boucle, Lancer le GetTickCount apres cette boucle.
    En faisant varier n, par exemple, 1, 10 ,100 ,1000 tu auras les temps correspondants. t1, t10, t100, t1000
    et donc tu peux deduire la durée d pour 1 iteration pour chaque n.

    d1=t1/1
    d10=t10/10
    d100=t100/100
    d1000=t1000/1000

    Tu constateras que d1, d10, d100, d1000 sont sensiblement identiques, mais que la meilleur valeur sera d1000

    A la duree des appels de fonctions StartTime et StopTime pres.
    Qui devient negligable si n est tres grand.

    GetTickCount est une API WIndows qui donne le temps en millisecondes.
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    Peut-être que quelqu'un saurait comment utiliser ce GetTickCount en C ?

  12. #42
    Jack
    Modérateur

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

    sinon il y a la fonction time(). Même principe, on appelle time() au début du programme, puis à la fin et on fait la différence entre les valeurs renvoyées par la fonction, sachant que la macro CLOCKS_PER_SEC donne l'échelle de temps puisqu'il faudra diviser la valeur obtenue par CLOCKS_PER_SEC pour obtenir le temps en secondes par exemple.

    A+

  13. #43
    whoami

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

    Bonjour,
    Citation Envoyé par celine2 Voir le message
    Le problème traité est le problème de tournées de véhicules (généralisation du problème de voyageur de commerce).
    Je vais mettre mon grain de sel : ce problème n'est pas du tout trivial à résoudre, et ton manque de connaissances, tant du C que des bases de la programmation, le met hors de ta portée pour l'instant.

    Il faut apprendre les bases avant de se lancer dans ce genre de programme.

    Rectification : Il faut apprendre les bases. Point.

    Ce qui implique de commencer par de petits exercices de difficulté croissante, le tout faisant le tour de la base du langage.
    Par là-dessus, il est simultanément nécessaire d'apprendre au moins les principaux algorithmes basiques.

    Si tu ne fais pas ça, il t'arrive ce qui conduit à l'existence de ce sujet : tu t'y perds, alors que c'est très basique, c'est le type d'exercice qu'on pourrait poser à un débutant après 4 ou 5 cours (je parle seulement de la génération de tes données et fichiers, ta question d'origine).
    Entre autres, ne pas savoir que rand() doit renvoyer des valeurs différentes (si bien utilisé), alors que c'est précisément son travail, montre bien où tu en es : tu n'as même pas commencé le début.

    Je te parais dur ?

    Non, simplement réaliste, et pas du genre à me taire quand j'ai quelque chose à dire, en particulier si je pense que ça doit rendre service.

  14. #44
    Xoxopixo

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

    Citation Envoyé par whoami Voir le message
    Bonjour,
    ce problème n'est pas du tout trivial à résoudre, et ton manque de connaissances, tant du C que des bases de la programmation, le met hors de ta portée pour l'instant.
    Je ne m'avancerait pas si promptement whoami
    La resolution du probleme n'est peut-être pas du type informatique.
    Avec ce que je vois ici, je peut imaginer que des Commerciaux auquels on donne une tournée de client, 10 cartes.
    Pouraient se les echanger lors d'une reunion discussion...

    C'est une resolution multitache

  15. #45
    danyvio

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

    Citation Envoyé par Jack Voir le message
    Pourquoi ne le seraient-elles pas puisque tu continues à tirer des nombres aléatoires.

    A+
    Hum........
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  16. #46
    whoami

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

    Bonjour,
    Citation Envoyé par Xoxopixo Voir le message
    Je ne m'avancerait pas si promptement whoami
    La resolution du probleme n'est peut-être pas du type informatique.
    Avec ce que je vois ici, je peut imaginer que des Commerciaux auquels on donne une tournée de client, 10 cartes.
    Pouraient se les echanger lors d'une reunion discussion...

    C'est une resolution multitache
    Ce problème fait partie des classiques.
    C'est "trivial" avec quelques véhicules et clients, mais la quantité envisagée sort déjà de ce côté simple, et a priori, ce n'est pas destiné à fonctionner sur un super-ordinateur.

    Et cela n'empêche pas que celine2 doive apprendre les bases du langage C et de la programmation, ET doit également apprendre à lire les docs (sa méconnaissance du fonctionnement de rand() montre bien que jamais une doc n'a été consultée).

  17. #47
    Xoxopixo

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

    Citation Envoyé par whoami Voir le message
    Et cela n'empêche pas que celine2 doive apprendre les bases du langage C et de la programmation, ET doit également apprendre à lire les docs (sa méconnaissance du fonctionnement de rand() montre bien que jamais une doc n'a été consultée).
    Oui, c'est vrai, c'est un reflexe qu'il faut avoir, la doc.
    Et l'avoir parcouru pour savoir ce qu'elle contient, au minimum.

    Justement , la doc tu peut la telecharger ici.
    http://www.open-std.org/jtc1/sc22/wg...docs/n1124.pdf

    Page 350 il est question justement du CLOCKS_PER_SEC dont parlais Jack.
    Page 312 la fameuse fonction rand.

    C'est vrai aussi que taper la fonction sur google pour la connaitre. Il faut deja connaitre le nom de la fonction...

    Je prefere le pascal delphi, tu fait f1 et hop l'aide s'affiche.
    Mais ça depend de l'editeur de C aussi non ?

  18. #48
    Jack
    Modérateur

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

    Citation Envoyé par danyvio Voir le message
    Hum........
    Ma réponse faisait suite à
    Au fait, je voudrais que les données de clients générées soient différentes.
    il me semble raisonnable qu'en continuant à tirer des nombres aléatoires comme c'était le cas dans le programme du message #3, les données générées seraient de fait différentes.

    Donc je ne comprends pas le sens de ta remarque

  19. #49
    Jack
    Modérateur

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

    Je prefere le pascal delphi, tu fait f1 et hop l'aide s'affiche.
    Mais ça depend de l'editeur de C aussi non ?
    Je suis un fan de Borland de la 1ère heure (Turbo Pascal sur Apple II sous CP/M). Toujours en avance au niveau ergonomie jusqu'à ces dernières années.

    Mais Visual studio le fait aussi aujourd'hui (peut-être aussi parce qu'une partie des développeurs de borland a été débauchée par microsoft ).

    A+
    Dernière modification par Jack ; 19/01/2011 à 17h41. Motif: Petit lapsus: turbo pascal, pas turbo c

  20. #50
    Xoxopixo

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

    Citation Envoyé par Jack Voir le message
    Je suis un fan de Borland de la 1ère heure (turbo C++ sur Apple II sous CP/M). Toujours en avance au niveau ergonomie jusqu'à ces dernières années.

    Mais Visual studio le fait aussi aujourd'hui (peut-être aussi parce qu'une partie des développeurs de borland a été débauchée par microsoft ).

    A+
    Ah ouiii Visual Studio
    C'est malheureusement trop luxueux pour moi, j'ai ete habitué aux pires editeurs.
    C'est trop dur de s'en passer apres toutes ces années. Comme c'est fatiguant de devoir balader, organiser et re et re toutes ces fenetres et autres zoins-zoins aux milles options magiques certes, pour, sans nul doute aucun, une i m m e n s e ergonomie.

  21. #51
    whoami

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

    Bonjour,

    Ça dérive.

    Et je croyais que la charte interdit de dénigrer des marques ?

  22. #52
    bzh_nicolas

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

    Citation Envoyé par Xoxopixo Voir le message
    Ah ouiii Visual Studio
    C'est malheureusement trop luxueux pour moi, j'ai ete habitué aux pires editeurs.
    Il y a visual studio express aussi, gratuit et largement suffisant pour une utilisation personnelle (et même professionnelle dans pas mal de cas).

  23. #53
    Xoxopixo

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

    Citation Envoyé par whoami
    Et je croyais que la charte interdit de dénigrer des marques ?
    Ca va que c'est une blague.
    C'est comme dire qu'un Frigidaire ça consomme ou qu'un Sopalin il n'y en a jamais assez.

    Oui, Visual Studio Express, pour le pascal objet, gratuit.
    Tant que tu ne veux pas ajouter de nouveaux composants, c'est gratuit. Tu t'enregistres, ça te donne un droit d'utilisation de 100 ans. Ca laisse 94 ans pour en profiter au pire.
    C'est tres tres bien €$ €€ €€ $€ , lisez bien : ** G R A T U I T ** entre autre.

Page 2 sur 2 PremièrePremière 2

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