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 :

Afficher une position dans un tableau


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Afficher une position dans un tableau
    Salut,

    Voilà j'ai un projet dérivé du démineur, je dois aller d'un point A à un point B, mais je bloque vraiment sur la méthode, mon programme est de cette manière :

    Faire
    InitialiserPlateau(plateau)
    InitialiserMines1(plateau
    Affnom(nom)
    AffPlateau(plateau)

    JeuPasTerminé = vrai

    Tant que (JeuPasTerminé)
    Tant que (position !=MINE ou position!=arrivée)
    AffPlateau(position)
    Déplacement


    En gras je n'arrive pas à les mettre en relation, j'ai donc alors tenté de faire une unique fonction, mais j'ai des erreurs dans le switch
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    void AffPosition (int t[NBLigne][NBColonne]) {
        int position[NBLigne][NBColonne];
        int i=0,j=0,k=0, deplacement = 0;
     
        t[0][0] = DEPART; // Détermination point de départ
        t[NBLigne-1][NBColonne-1] = ARRIVEE; // Détermination point d'arrivée
        position = t[0][0];
     
        while (position != MINE || position != ARRIVEE) {
           printf("\n\nDeplacement :");
           printf("\nDroite -  Saisir 1");
           printf("\nGauche -  Saisir 2");
           printf("\nHaut   -  Saisir 3");
           printf("\nBas    -  Saisir 4");
      scanf("%d",&deplacement);  //Déplacement
     
      switch (deplacement) {
      case 1 : position = t[j][k+1];
          break;
      case 2 : position = t[j][k-1];
          break;
      case 3 : position = t[j-1][k];
          break;
      case 4 : position = t[j+1][k];
          break;
     
        for (j=0;j<NBLigne;j++) {
            printf("\n");
              for (k=0;k<NBColonne;k++) {
                   printf("| ");
                  if (t[j][k] == INIT)
                      printf("  ");
                    else if (t[j][k] == DEPART)
                      printf("D ");
                    else if (t[j][k] == ARRIVEE)
                      printf("A ");
                      else if (t[j][k] == position)
                        printf("O");
                    /*else if (t[j-1][k] == MINE || t[j+1][k] == MINE || t[j][k-1] == MINE || t[j][k+1] == MINE )
                       printf("X ");*/
                    else if (t[j][k] == MINE)
                       printf("  ");
                   /* else if (t[j][k] == Gagne)
                    printf("G ");*/
            }
              printf("|");
              printf("\n");
              for(k=0;k<NBColonne;k++)
                printf("----");
          }
      }
     }
    }
    Merci

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Tu ne teste pas si k+1 est un indice valable de ton tableau ou non.

    Deux possibilités :
    - Quand tu sors d'un côté, tu entre de l'autre côté : position = t[j][(k+1)%nbColonne]; ou position = t[j][(k < nbColonne ? k+1:0)];.
    - Tu ne peux pas sortir d'un côté : position = t[j][(k < nbColonne ? k+1:k)];De même pour les 3 autres cas.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Neckara Voir le message
    - Tu ne peux pas sortir d'un côté : position = t[j][(k < nbColonne ? k+1:k)];
    Bonjour
    On peut même faire mieux et ne proposer, dans le menu, que les choix de déplacement autorisés...
    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
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour
    On peut même faire mieux et ne proposer, dans le menu, que les choix de déplacement autorisés...
    Mais toujours est-il que l'utilisateur est libre d'entrer des directions non-présentes de le menu et il faut bien les gérer.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Voilà j'ai trouve une autre méthode pour déplacer mon joueur, le soucis c'est que je ne sais pas comment mémoriser cette nouvelle position, au lieu de ré-initialiser cette position :
    la fonction en cause :
    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
    void AfficherPosition (int t1[NBLigne][NBColonne],int position) {
      int x = 0,y = 0;
      int deplacement = 0;
     
     
      printf("\nDroite -  Saisir 1");
      printf("\nGauche -  Saisir 2");
      printf("\nHaut   -  Saisir 3");
      printf("\nBas    -  Saisir 4");
      scanf("%d",&deplacement);
     
        switch (deplacement) {
      case 1 : t1[x][y+1] = position;
          break;
      case 2 : t1[x][y-1] = position;
          break;
      case 3 : t1[x-1][y] = position;
          break;
      case 4 : t1[x+1][y] = position;
          break;
      }
              // scanf("%d %d",&x,&y);
              // t1[x][y] = position;
     
     
    }


    Merci, ça fait vraiment plusieurs jours que je suis sur ce programme.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé ça aussi mais ça marche pas :
    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
    41
    void InitialiserPosition (int t[NBLigne][NBColonne], int position){
    position = t[0][0];
    }
     
    void AfficherPosition (int t1[NBLigne][NBColonne],int position) {
      int x = 0,y = 0,j,k;
      int deplacement = 0;
     
    while (position != t1[NBLigne-1][NBColonne-1]) {
      printf("\nDroite -  Saisir 1");
      printf("\nD1 -  Saisir 2");
      printf("\nHaut   -  Saisir 3");
      printf("\nBas    -  Saisir 4");
      scanf("%d",&deplacement);
     
        switch (deplacement) {
      case 1 : t1[x][y+1] = position;
          break;
      case 2 :
               t1[x][y+1] = position
          break;
      case 3 : t1[x-1][y] = position;
          break;
      case 4 : t1[x+1][y] = position;
          break;
      }
     
          for (j=0;j<NBLigne;j++) {
            printf("\n");
              for (k=0;k<NBColonne;k++) {
                  if (t1[j][k] == INIT)
                     printf(".");
                    else if (t1[j][k] == position)
                        printf("O ");
              }
          }
     
    }
     
          position = t1[x][y];
    }

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Cannot Voir le message
    J'ai essayé ça aussi mais ça marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void InitialiserPosition (int t[NBLigne][NBColonne], int position){
    position = t[0][0];
    }
    Si tu avais écouté en cours, tu te serais rappelé que si on passe une variable à une fonction on ne lui passe que la copie de cette variable et donc qu'il lui est impossible, avec cette copie, de modifier la variable d'origine.

    Il faut donc passer à la fonction non pas la variable mais son adresse. La fonction recevra là aussi une copie de cette adresse mais que ce soit l'adresse d'origine ou la copie, les deux éléments référencent la même chose, à savoir l'emplacement de la variable en question.
    Et donc avec cet emplacement la fonction est tout à fait capable de modifier ladite variable.
    Dernier détail: quand on passe une adresse à une fonction, cette adresse doit être stockée dans une variable adaptée donc un pointeur.

    Ayant tous ces éléments en tête, on est alors à même d'écrire une fonction correcte...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void InitialiserPosition (int t[NBLigne][NBColonne], int *position){
        *position = t[0][0];
    }
    ... et de programmer correctement son appel...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int position;
    InitialiserPosition (..., &position);
    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]

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2010
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/03/2011, 11h17
  2. Détermination d'une position dans un tableau
    Par oLie dans le forum Bibliothèque standard
    Réponses: 13
    Dernier message: 21/05/2008, 10h38
  3. Réponses: 3
    Dernier message: 15/12/2007, 16h56
  4. afficher une image dans un tableau
    Par phpaide dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/04/2006, 12h10
  5. [JTable] Afficher une date dans un tableau / Renderer
    Par isak dans le forum Composants
    Réponses: 3
    Dernier message: 11/07/2005, 17h09

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