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

Free Pascal Discussion :

Mélange d'une liste chaînée [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Mélange d'une liste chaînée
    Bonjour à vous,

    Etant étudiant en première année d'informatique, j'ai comme projet de programmer un jeu de cartes (la bataille) pour 2 joueurs en Pascal. J'ai déjà commencé par définir les types en question :

    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
    TYPE
    Couleurs = (pique, coeur, carreau, trefle);
     
    Liste = ^Carte;
     
    NumFig = record
    	num : integer;
    	figure : char;
    	end;
     
    Carte = record
            couleur : Couleurs;
            valeur : NumFig;
            suivant : Liste;
            end;
     
    Pile = ^Carte;
    Puis la procédure pour remplir le paquet de cartes (liste chaînée) :

    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
    PROCEDURE remplissage (VAR paquet1 : Liste);
     
    VAR
    ElementP : liste; i : integer;
     
    BEGIN
    paquet1 := NIL;
     
    	FOR i:=1 TO 13 DO
     
    	BEGIN
    		NEW (ElementP);
    		ElementP^.couleur := pique ;
    		ElementP^.valeur.num := i;
    		ElementP^.suivant := paquet1;
    		paquet1 := ElementP;
     
    		NEW (ElementP);
    		ElementP^.couleur := coeur ;
    		ElementP^.valeur.num := i;
    		ElementP^.suivant := paquet1;
    		paquet1 := ElementP;
     
     
    		NEW (ElementP);
    		ElementP^.couleur := trefle ;
    		ElementP^.valeur.num := i;
    		ElementP^.suivant := paquet1;
    		paquet1 := ElementP;
     
     
    		NEW (ElementP);
    		ElementP^.couleur := carreau ;
    		ElementP^.valeur.num := i;
    		ElementP^.suivant := paquet1;
    		paquet1 := ElementP;
     
    	END;
     
    END;
    Là où je bloque, c'est comment mélanger cette liste chaînée, pour pouvoir ensuite distribuer directement les cartes vers les 2 autres listes (celles des joueurs). Je sais qu'à la place d'une liste chaînée, je pourrais utiliser un tableau, la manipulation y serait plus facile. Mais le professeur a bien précisé qu'il fallait utiliser les structures de données dynamiques. Toute aide me serait précieuse!

    Merci d'avance.

    Très cordialement.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    9 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 9 280
    Points : 13 186
    Points
    13 186
    Par défaut
    Bonsoir,

    il te faut une autre variable dans l'intervalle 1..13, aléatoire, en stocker sa valeur pour la comparer à la valeur du prochain tirage et à chaque tirage la supprimer (sinon tu risquerais de la retirer) et réduire l'intervalle.

    Bref, ça demande un peu de réflexion et j'ai pas trop le temps, là, mais je pense qu'avec un papier et un crayon ça serait plus facile.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Bienfaiteur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 537
    Points : 3 828
    Points
    3 828
    Par défaut
    Salut

    Citation Envoyé par Illuvatar1 Voir le message
    Là où je bloque, c'est comment mélanger cette liste chaînée, pour pouvoir ensuite distribuer directement les cartes vers les 2 autres listes (celles des joueurs). Je sais qu'à la place d'une liste chaînée, je pourrais utiliser un tableau, la manipulation y serait plus facile. Mais le professeur a bien précisé qu'il fallait utiliser les structures de données dynamiques. Toute aide me serait précieuse!
    Je demande une petite précision : est-ce que ton prof a demandé une structure de liste chaînée ou une structure dynamique d'une façon générale ?

    Ou je veux en venir : Représenter un jeu de carte sous la forme unique d'une liste chaînée me paraît bizarre, modéliser un tirage de carte me le semble moins.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.8 (FPC 3.0), Python 3 -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal
    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 066
    Points : 5 104
    Points
    5 104
    Par défaut
    salut

    pourquoi dans ta définition de carte tu ne mettrais pas un identifiant unique sur chaque cartes

    disons de 1 à 52

    ensuite il te suffit de faire un tirage aléatoire entre 1 et 52 et de distribuer la carte ayant l'identifiant identique au tirage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       TCarte = record
            Ident    : Integer;  
            couleur : TCouleurs;
            valeur  : TNumFig;
            suivant : TListe;
        end;

    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
         FOR i:=1 TO 13 DO
         BEGIN
            .... 
    	NEW (ElementP);
    	ElementP^.couleur := coeur ;
            ElementP^.Ident := ((i-1)*4)+2;
    	ElementP^.valeur.num := i;
    	ElementP^.suivant := paquet1;
    	paquet1 := ElementP;
     
    	NEW (ElementP);
    	ElementP^.couleur := trefle ;
            ElementP^.Ident := ((i-1)*4)+3;
    	ElementP^.valeur.num := i;
    	ElementP^.suivant := paquet1;
    	paquet1 := ElementP;
        ....
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par e-ric Voir le message
    Je demande une petite précision : est-ce que ton prof a demandé une structure de liste chaînée ou une structure dynamique d'une façon générale ?
    Il a bien précisé qu'il fallait une structure de liste chaînée, vu que c'est le chapitre qu'on vient tout juste de terminé.

    Citation Envoyé par anapurna Voir le message
    pourquoi dans ta définition de carte tu ne mettrais pas un identifiant unique sur chaque cartes

    disons de 1 à 52

    ensuite il te suffit de faire un tirage aléatoire entre 1 et 52 et de distribuer la carte ayant l'identifiant identique au tirage
    Salut anapurna!

    C'est vraiment une excellente idée! Je vais essayer de l'implémenter en considérant les trois cas ; le tirage tombe sur la tête de la liste, sur la queue de la liste, et au milieu de la liste.

    Je vous tiens au courant, merci!

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Finalement j'ai réussi à faire ce que je voulais grâce à l'idée de anapurna! J'ai même presque fini le programme entièrement. Je mets en résolu.

    Encore merci à tous pour vos réponses!

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

Discussions similaires

  1. Inversion d'une liste chaînée
    Par sossomj dans le forum Pascal
    Réponses: 10
    Dernier message: 25/06/2006, 15h51
  2. select sur une liste chaînée
    Par wtfu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/06/2006, 15h30
  3. Implémentation d'une liste chaînée
    Par Yux dans le forum C
    Réponses: 22
    Dernier message: 02/03/2006, 20h31
  4. Réponses: 16
    Dernier message: 19/11/2005, 16h47
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

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