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

Algorithmes et structures de données Discussion :

Parcours d'une matrice


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Parcours d'une matrice
    Bonjour,

    Dans le cadre d'un jeu que je dois programmer, j'ai besoin de faire un sous-programme ( en ADA ) qui va vérifier si la partie est terminée ou non.
    Pour que le jeu soit fini, il faut que une ligne entière ou colonne soit complétée d'un même pion ( mes pions sont des '#' et des 'o' ).
    Seul problème : je n'arrive pas à trouver un moyen de vérifier toutes les lignes et toutes les colonnes d'un tableau à 2 dimensions.
    Si quelqu'un a une idée, ça serait gentil !

    Merci

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Tu es étudiant... en informatique je suppose.
    Tu as dû apprendre la notion de boucle, non ?
    Peut être même que tu as déjà fait des exercices avec 2 boucles imbriquées ?

    Si on ne t'a jamais parlé des boucles , alors tu ne peux pas t'en sortir. Mais si on t'a déjà expliqué cette notion, et si tu as déjà fait des exercices avec des boucles imbriquées, alors c'est un exercice très facile.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Inactif
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2016
    Messages : 22
    Points : 31
    Points
    31
    Par défaut
    Bonjour.
    C'est pas deux boucle imbriquer qu'il faut ici, mais deux fois une boucle.
    Une pour les ligne et une pour les colone.

    Pour accéder à un élément dans un tableau à deux dimmensions c'est Tableau(indice1, indice2).

    Pour faire une boucle dans l'indice1 du tabeleau c'est for indice in Tableau'range(1) loop
    Pour faire une boucle dans l'indice2 du tabeleau c'est for indice in Tableau'range(2) loop

    A toi de savoir comment est orientés la matrice pour savoir où sont les lignes et les colonnes.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Oui j'avais déjà l'idée de faire 2x2 boucles imbriquées pour vérifier premièrement les colonnes et deuxièmement les lignes. Malheureusement je n'ai aucune idée du code que je dois insérer à l'intérieur d'où mon post.

    J'ai eu des idées pour vérifier que la valeur suivante était égale à cette valeur, elle même égale à mon pion ('#' ou 'o') mais ça ne semble pas marcher.
    Si quelqu'un a un début de code (algorithme) pouvant me faire comprendre le principe, ça serait cool !

  5. #5
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    Supposons que la matrice soit notée A, possède n lignes et p colonnes, et que l'on accède à un de ses éléments sous la forme A(i,j) avec i = numéro de ligne et j = numéro de colonne.

    Notons "fini" une variable booléenne.
    Notons "a" une variable de type caractère ; elle va recevoir '#' ou 'o'.

    L'algorithme pourrait se présenter ainsi :

    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
     
    pour i de 1 à n faire              # étudier toutes les lignes
        fini <- vrai                           
        a <- A(i,1)                    # premier élément de la ligne i
        pour j de 2 à p faire          # étudier les autres éléments de la ligne i
            si A(i,j) <> a alors 
                fini <- faux           # il y a deux éléments différents dans la ligne i
                break                  # inutile d'étudier les autres éléments de la ligne
            fin_si
        fin_pour                       # fin de l'étude de la ligne i
        si fini alors break            # si la ligne i est bonne, inutile d'étudier les autres lignes
        fin_si
    fin_pour                           # fin d'étude des lignes
     
    si fini alors retourner(vrai)      # si une ligne est bonne, inutile d'étudier les colonnes
    fin_si
     
    pour j de 1 à p faire              # étudier toutes les colonnes
        fini <- vrai                           
        a <- A(1,j)                    # premier élément de la colonne j
        pour i de 2 à n faire          # étudier les autres éléments de la colonne j
            si A(i,j) <> a alors 
                fini <- faux           # il y a deux éléments différents dans la colonne j
                break                  # inutile d'étudier les autres éléments de la colonne
            fin_si
        fin_pour                       # fin de l'étude de la colonne j
        si fini alors break            # si la colonne j est bonne, inutile d'étudier les autres colonnes
        fin_si
    fin_pour                           # fin d'étude des colonnes
     
    retourner(fini)
    J'ai noté "break" l'instruction qui permet de sortir d'une boucle avant la fin.
    Elle est notée "exit" en ADA.

    Notez que, si la fonction retourne vrai, le contenu de la variable a permet de savoir qui a gagné.
    Il est alors possible de modifier la fonction afin qu'elle retourne a quand la partie est finie ou le caractère nul dans le cas contraire.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup !

    J'y étais presque, mais je n'avais pas vu qu'on pouvait stocker la valeur de M(I,J) dans une variable pour pouvoir la comparer avec toutes les valeurs de la ligne ou de la colonne...
    Merci !!

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    En fait il y avait un problème : mes cases sont initialisées à ' ' donc l'algorithme détectait également les lignes étant remplies d'espaces (donc nulles) comme des lignes gagnantes. J'ai résolu le problème MAIS un autre problème m'est venu en tête :
    En effet dans mon jeu lorsque je vais insérer un pion dans une direction, cela va pousser les pions dans la direction concernée, il peut donc y avoir des égalités, ou même plusieurs lignes gagnantes, ou plusieurs colonnes, c'est là où je commence à me perdre... comment déterminer qui gagne ?

    Pour mon programme, pour l'instant pour la vérification des lignes, j'ai ça : ( la même chose pour les colonnes )

    Nom : ui.PNG
Affichages : 1699
Taille : 22,5 Ko

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Là, ta question n'est plus une question d'algorithme, mais une question concernant les règles de ton jeu.
    Si à un instant donné, il y a une ligne pleine de 1 et une ligne pleine de 2 ( ou une colonne...), qui gagne, le joueur 1 ou le joueur 2 ?

    Et j'ai envie de formuler la question autrement.
    Si alors que le joueur 1 vient de jouer, il y a sur la grille une ligne pleine de 1, et une ligne pleine de 2, qui gagne ? C'est en lisant les règles du jeu que tu auras la réponse, pas ici.

    Et ensuite, ta fonction aura probablement besoin d'une information supplémentaire pour déterminer le gagnant : quel est le joueur qui vient de jouer.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    Si on ne t'a jamais parlé des boucles , alors tu ne peux pas t'en sortir.
    Si. Avec de nombreux copier-coller.


    C'est pas deux boucle imbriquer qu'il faut ici, mais deux fois une boucle.
    Pour chaque ligne, on teste chaque position dans la ligne. C'est donc bien une boucle dans une boucle. Soit 2 boucles imbriquées.
    tbc92 avait raison, aussi bien sur le fond, que sur l'orthographe ("2 boucles imbriquées").

    je commence à me perdre... comment déterminer qui gagne ?
    Faire faire ton boulot par les autres, c'est déjà pas joli-joli.
    Mais si tu ne donnes même pas la consigne, personne ne peut t'aider. Tu n'as jamais défini les conditions de victoire. Dans ton premier post, tu définis la partie "finie". Mais il y aurait un gagnant ???

    La réponse n'est pas dans l'informatique mais dans ta méthode (ou règle du jeu): Si dans la grille, plusieurs lignes ou colonnes sont complètes, qui gagne ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci TBC92, oui en effet je vois ce qu'il faudrait faire !

    Bonjour Flodelarab,

    Dire que je fais faire mon boulot par les autres est assez facile... Mon programme fait environs 200 lignes et j'ai eu de l'aide pour 30 lignes, sur lesquelles j'ai modifié des choses pour les faire correspondre aux règles de mon jeu.
    Certes je n'ai pas été très précis quant aux règles du jeu dans ce même post, mais de là à dire que je ne fais que recopier bêtement ce qu'on me donne, c'est un peu trop sachant que sur les 30 lignes que "Prof" m'a donné, j'avais quasiment trouvé la même chose, à un détail près qui m'a fait comprendre le principe même de l'algorithme.

    Sinon merci de tes conseils, je vais donc me débrouiller tout seul à partir de maintenant ! Merci à tous de votre aide, je devrai y arriver !

  11. #11
    Inactif
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2016
    Messages : 22
    Points : 31
    Points
    31
    Par défaut
    Non, désolé, pour chaque ligne ou chaque colonne, on teste si la ligne ou la colonne est une ligne ou une colonne d'un même pion.

    Oups, pour les line ou les colonne, peut-être, mais pour faire les deux, faudrait je que réfléchisse un peu quand même.

    Au revoir le correcteur d'orthographe.

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Citation Envoyé par localghost Voir le message
    Non, désolé, pour chaque ligne ou chaque colonne, on teste si la ligne ou la colonne est une ligne ou une colonne d'un même pion.
    Et comment fais-tu pour atteindre cet objectif, si tu ne vérifies pas chaque case une à une (de ta ligne) ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,

    C'était pour vous dire que j'ai réussi à terminer mon programme de vérification, qui va en fait compter le nombre de colonnes et de lignes remplies pour chaque joueur.
    J'ai additionné les 2 pour chaque joueur puis en comparant les 2 résultats obtenus, alors j'en déduis si je dois continuer à jouer ( score de 0-0 ) ou si j'arrête (score de parité non nul ou un gagnant).
    Ainsi j'en déduis s'il y a un gagnant ou non, et surtout qui a gagné.
    Merci pour votre aide

  14. #14
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 038
    Points : 9 347
    Points
    9 347
    Par défaut
    Citation Envoyé par localghost Voir le message
    Non, désolé, pour chaque ligne ou chaque colonne, on teste si la ligne ou la colonne est une ligne ou une colonne d'un même pion.

    Oups, pour les line ou les colonne, peut-être, mais pour faire les deux, faudrait je que réfléchisse un peu quand même.
    Si tu veux, simplifie un peu le jeu, en disant qu'on cherche à savoir si au moins une ligne est remplie de symboles tous identiques. (impasse sur l'autre règle, sur les colonnes).
    Et tu verras que déjà là, il faut 2 boucles imbriquées.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  15. #15
    Inactif
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2016
    Messages : 22
    Points : 31
    Points
    31
    Par défaut
    Ce serait génial de pouvoir Tab(1).all mais ça marche pas
    J'ai essayer des truc mais effectivement j'ai une une boucle imbriquée dans une seconde.
    Merci pour le rappel à la dure réalité.

Discussions similaires

  1. concernant parcours d'une matrice
    Par zied_m dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/01/2012, 15h14
  2. parcours d'une matrice
    Par doudi20 dans le forum Général Java
    Réponses: 5
    Dernier message: 17/03/2009, 16h51
  3. Parcours d'une matrice/tableau à deux dimensions
    Par yal001 dans le forum Mathématiques
    Réponses: 5
    Dernier message: 20/11/2008, 15h59
  4. Parcours d'une matrice
    Par LordPeterPan2 dans le forum MATLAB
    Réponses: 5
    Dernier message: 30/07/2008, 10h00
  5. Parcours d'une matrice(Gantt)
    Par asmiti dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 17/01/2008, 11h40

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