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 :

Aide pour un projet de simulation du fonctionnement d'un ascenseur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut Aide pour un projet de simulation du fonctionnement d'un ascenseur
    un programme qui simule le fonctionnement
    d’un ascenseur. Il s’agit de créer aléatoirement des processus fils qui vont simuler les usagers
    faisant des demandes de déplacement aux différents étages (0, 1, 2,3, et 4) tandis que le processus
    père simule l’ascenseur.
    Initialement l’ascenseur est à l’étage 0. Son comportement simplifié et en boucle consiste
    à monter jusqu’au 4ème puis redescendre à l’étage 0, toujours dans cet ordre. L’ascenseur s’arrête à un étage si et seulement s’il y a des passagers qui veulent se déplacer (descendre ou
    monter) dans son sens de fonctionnement. Chaque demande (aléatoire) de déplacement faite par
    un usager à un étage est gérée par une file de messages (5 files).
    s'il vous plaît aidez moi à Compréhension du sujet, à trouver une Solution retenue pour résoudre le problème et concevoir la solution.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 504
    Par défaut
    Bonjour,

    Citation Envoyé par sefmaze Voir le message
    s'il vous plaît aidez moi à Compréhension du sujet, à trouver une Solution retenue pour résoudre le problème et concevoir la solution.
    T'aider à « compréhension du sujet » ? Je crois que c'est plutôt clair. Qu'est-ce que tu ne comprends pas dans cet énoncé ? Parce que s'il faut vraiment t'aider à comprendre le sujet, la route risque d'être très longue jusqu'à l'aboutissement de ton projet.

    Pour le reste, l'exercice consiste à utiliser les « files de message » des IPC SysV. Les deux autres ressources étant les sémaphores et la mémoire partagée. Les fonctions pour les manipuler sont décrites ici : http://man.developpez.com/man2/msgsnd.2.php

    En bref, tu crées une file de message, puis tu crées tes fils, qui en hériteront automatiquement (sinon, tu utilises msgget() pour la retrouver). Ensuite :

    — Chaque fils s'endort pour une durée aléatoire (voir sleep() et rand()), puis envoie un message dans la file pour simuler un appui sur le bouton, et recommence ;
    — Chaque message utilise le « type » de message pour désigner son étage ;
    — Le père exécute une boucle qui fait un appel (bloquant, donc) à msgrcv() et qui utilise le « type » pour dire à quel étage il se trouve actuellement. Ceci permet de demander au système d'aller récupérer directement les messages dont le type est supérieur ou égal à celui cherché et laisser les autres dans l'ordre dans la file. Donc tout le travail est fait pour toi, par le système ;

    Ce système marche bien mais il aura quand même l'inconvénient d'aller directement à l'étage du premier processus qui a appelé plutôt que de s'arrêter au plus proche. Si tu veux faire cela, alors tu fais des appels non-bloquants et tu vérifies les appels pour chaque étage.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    — Chaque message utilise le « type » de message pour désigner son étage ;
    Attention avec cette convention car le membre "type" ne peut pas être égal à 0.

    Citation Envoyé par Obsidian Voir le message
    — Le père exécute une boucle qui fait un appel (bloquant, donc) à msgrcv() et qui utilise le « type » pour dire à quel étage il se trouve actuellement. Ceci permet de demander au système d'aller récupérer directement les messages dont le type est supérieur ou égal à celui cherché et laisser les autres dans l'ordre dans la file. Donc tout le travail est fait pour toi, par le système ;
    Attention car l'énoncé précise que l'ascenseur doit parcourir les étages de 0 à 4 puis de 4 à 0 en s'arrêtant à chaque étage où qqun attend (dans le bon sens) et non aller de l'étage X à l'étage Y selon les appels de chacun...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 504
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Attention avec cette convention car le membre "type" ne peut pas être égal à 0.
    Effectivement, je n'avais pas fait attention à ce détail (bon, il suffit de faire un +1 sur les numéros d'étage).

    Attention car l'énoncé précise que l'ascenseur doit parcourir les étages de 0 à 4 puis de 4 à 0 en s'arrêtant à chaque étage où qqun attend (dans le bon sens) et non aller de l'étage X à l'étage Y selon les appels de chacun...
    C'est effectivement ce qu'il y a de plus sensé pour un ascenseur (et c'est comme cela qu'ils fonctionnent en pratique) mais j'avais compris cela autrement : expliqué comme ci-dessus, je pensais que l'ascenseur devait faire l'omnibus (si besoin) jusqu'au quatrième, puis redescendre directement tout en bas avant de démarrer un nouveau cycle.

  5. #5
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut aide
    tout je vous remercie de participé ....
    le probleme est que je debute en developpement langage c sous linux..
    et donc j'aurai de voir comment ecrire le code source et explication de chaque partie.
    merci....

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sefmaze Voir le message
    tout je vous remercie de participé ....
    le probleme est que je debute en developpement langage c sous linux..
    et donc j'aurai de voir comment ecrire le code source et explication de chaque partie.
    merci....
    euh.. Ici on aide, on ne fait pas à la place des gens...

    Travaille et propose-nous quelque chose...

  7. #7
    Membre expérimenté Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 626
    Par défaut
    Citation Envoyé par sefmaze Voir le message
    tout je vous remercie de participé ....
    le probleme est que je debute en developpement langage c sous linux..
    et donc j'aurai de voir comment ecrire le code source et explication de chaque partie.
    merci....
    Commence par séparer les "acteurs", c'est à dire l'ascenceur, et ses 5 fils (ça je le fais pour toi).
    De là tu vas déterminer ce que chacun d'entre eux doit faire (et peut faire).
    C'est à dire répondre à la question "Quel est le comportement d'un fils ?" et Quel est le comportement du père ?".
    Ensuite, tu te fais un exemple bateau, où tu décides exactement comment ça va se passer (sans le côté aléatoire).
    Une fois que tout çà c'est fait, tu devrais pouvoir commencer à coder, commence par faire ton exemple avant de passer au cas "général".

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 860
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    (bon, il suffit de faire un +1 sur les numéros d'étage).
    Ouais. Moi j'aurais plutôt mis 0xffff pour l'étage 0 (convention) mais bon, j'ai pas vraiment réfléchi aux avantages et inconvénients de ta solution et de ma proposition, c'est juste pour donner des idées quoi...

    Citation Envoyé par sefmaze Voir le message
    le probleme est que je debute en developpement langage c sous linux..
    Si on t'a donné ce TP, c'est qu'on t'a aussi donné les notions, les cours, les technologies pour le réaliser...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Besoin d'aide pour un projet en vb6
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/01/2006, 05h25
  2. de l'aide pour un projet svp!!!!
    Par lamoon dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/01/2006, 15h45
  3. Besoin d'aide pour un projet
    Par ZiMo dans le forum Linux
    Réponses: 9
    Dernier message: 24/10/2005, 00h28
  4. Besoin d'aide pour un projet de jeu en ligne
    Par FLEO dans le forum Projets
    Réponses: 1
    Dernier message: 21/10/2005, 08h55
  5. [CAML] Recherche aide pour un projet
    Par tarzoon dans le forum Caml
    Réponses: 1
    Dernier message: 02/09/2005, 10h32

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