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 :

projet academique : epidemie de grippe


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut projet academique : epidemie de grippe
    Bonjour,

    J'ai un projet academique dont voici le sujet :
    A partir d'une carte de France comportant la densité de population, vous devez simuler la transmission aléatoire d'un virus de la maladie de la grippe et l'afficher graphiquement sur une carte de France. Vous devez commencer par la definition d'un modèle de propagation et le comparer avec les modèles existants.

    J'ai deja commencé à faire un programme sans interface grapique, je ferai l'interface en dernier en utilisant le logiciel "Glade". Pour l'instant j'ai créé un modèle de propagation.

    Mais mon programme ne fonctionne pas comme je voudrais. Je joint à ce message mes sources avec un Makefile pour qu'un "programmeur" puisse m'aider à améliorer mon programme.

    Merci d'avance

    Erebos
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Vu que ton projet est déjà important, pourrais tu nous en dire d'avantage sur ce que "le programme ne fait pas" comme il le devrait

    Pourrais-je en profiter pour te rappeler l'importance d'une indentation cohérente et correcte ainsi que celle des commentaires quand il s'agit de s'attaquer à un programme dont on ne sait rien

    Enfin, du point de vue meme du code, finalement, il faut savoir que:
    • A titre personnel, je préfère les déclarations de variables sous la forme de
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
        int i;
        int k;
        int l;
        int ok;
        int identification;
        int new;
      Cela ne prend pas beaucoup plus de temps, mais ca en fait gagner énormément lorsqu'il s'agit de découvrir le code (ou de se le rappeler): il est si facile de passer à coté de la déclaration de l, quand elle est entourée d'autres nom de variables
    • Le cast n'est plus nécessaire, de par la norme, sur les fonctions *alloc.

      Tu peux tres bien te contenter d'un
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      nouveau = malloc(sizeof(malade));
      (ligne 19 de main())
    • Par contre, la vérification du pointeur renvoyé par les fonction *alloc est primordiale car une allocation dynamique de la mémoire est toujours susceptible d'échouer

      Le code
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
        nouveau->id=identification;
        nouveau->numero_region = 10;
        nouveau->duree = 1;
        nouveau->psuivant = NULL;
       
        ok = ajout_malade(nouveau);
      (lignes 20 à 25 de main) devrait etre entouré d'un test
      et ok devrait prendre une valeur différente de 0 dans la partie else du test
    • tu ne passe jamais dans la partie else du code
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
        ok = ajout_malade(nouveau);
       
        if (ok == 0)
        {
        	printf("Nouveau malade inserer dans la liste chainee\n");
        }else{
        	printf("Erreur d'ajout du malade\n"); 
        }
      de main (lignes 25 à 32)... Simplement parce que la fonction ajout_malade renvoie toujours 0

      Mais la remarque d'avant permet de surmonter ce problème (sans pour autant tous les résoudre)
    • Les trois remarques précédentes sont aussi valable pour les lignes 37 à 50 de main()
    • De manière générale, l'utilisation de variables globales n'est pas des plus recommandées (je pense à malade *tete; qui se trouve à la ligne 28 de simulation.h)

      Evidemment, leur suppression nécessite l'ajout de parametres à certaines fonctions
    • tete n'est jamais initialisé à une valeur connue...

      Il est donc plus que vraissemblable qu'il ne vaille jamais NULL, mais bien "les crasses laissée par une utilisation antérieure de la mémoire"
    • Tant qu'à faire, pourquoi ne pas garder également un pointeur malade *queue qui pointerait systématiquement sur le dernier élément de la liste

      Ce pourrait etre de nature à te faciliter la vie
    • Il n'y a strictement rien qui t'oblige à créer un fichier *.c par fonction... (sauf peut etre les desiderata d'un prof )

      Tu pourrais tres bien rendre le code plus accessible en regroupant les différentes fonctions au sein d'un seul fichier, voire, au sein de plusieurs fichiers en fonction de leur champs d'application, par exemple:
      • malade.c: toutes les fonctions qui ont trait à la gestion des malades
        • duree_maladie
        • ajout_malade
        • detruit_malade
        • nouveaux_malades
      • init.c: toutes les fonctions d'initialisation
        • init_alea
        • init_table
      • simulation.c: les autres fonctions
        • alea_gauss
        • change_region
        • contamination
      • main.c: uniquement la fonction main
      Cela aussi serait de nature à faciliter la vie (et le Makefile, au passage )
    • N'oublie pas de libérer la mémoire de la liste chainée avec une boucle contenant un free avant de quitter

    Enfin, je n'ai pas eu le courrage de m'attaquer à tous les fichiers... les commentaires ci-dessus ne sont inspirés que du contenu meme de l'archive et de l'examen de simulation.h et de main.c (les autres fichiers ont juste été survolés )

    Il y a donc peut etre d'autres erreurs que je n'ai pas remarquées
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    koala01, je te remercie pour ces conseils que je vais très vite mettre en pratique.

    Pour répondre à ta première question, je souhaite entrer le numéro d'une région pour y placer le malade "zéro" et ensuite afficher en temps réel le nombre de personnes contaminés, le temps (le nombre de jours) qu'a duré la simulation et les différents régions qui ont été contaminés. Plus tard, j'essayerais de complexifié le programme.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par Erebos
    (snip)

    Pour répondre à ta première question, je souhaite entrer le numéro d'une région pour y placer le malade "zéro" et ensuite afficher en temps réel le nombre de personnes contaminés, le temps (le nombre de jours) qu'a duré la simulation et les différents régions qui ont été contaminés. Plus tard, j'essayerais de complexifié le programme.
    Heu, ma premiere question était: "Que fait ton programme qu'il ne devrait pas ou que ne fait il pas qu'il devrait", et tu n'y répond malheureusement pas

    La question à laquelle tu répond serait plutot celle qui a trait au fait d'envisager l'utilisation d'un pointeur "queue" qui servirait à maintenir le dernier élément de la liste, et ce n'est pas vraiment une chose compliquée à faire (mais, comme je l'ai signalé, qui serait de nature à te faciliter la tache) ... Et c'est plutot la dernière question (bon... )

    Au passage, une première tentative de compilation m'a étonné en me faisant remarquer que la fonction main se trouvait aussi bien dans main.c que dans simulation.c... Quelle est la version à utiliser, étant donné qu'elles ne sont pas identiques
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    Le fichier simulation.c ne devrai pas se trouvé là . C'était une ancienne version de mon programme. Donc pour compiler le programme, comme le dit le Makefile, tu ne doit pas compiler le fichier simulation.c mais bien le fichier main.c qui est le véritable main.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    Heu, ma premiere question était: "Que fait ton programme qu'il ne devrait pas ou que ne fait il pas qu'il devrait", et tu n'y répond malheureusement pas
    Mon principal probleme c'est que mon programme ne s'arrête pas ce qui fait que d'après mon programme tous le monde est contaminé ... c'est ennyeux!!!

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 15h52
  2. Réponses: 0
    Dernier message: 24/03/2010, 16h56
  3. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 16h33
  4. Réponses: 6
    Dernier message: 21/06/2002, 15h48
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 18h51

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