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

Fortran Discussion :

déplacement d'un caractère dans un tableau


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut déplacement d'un caractère dans un tableau
    Bonsoir, d'abord merci à Grame pour son aide sur les fonctions aléatoires, j'ai bien réussi à l'intégrer dans mon programme.

    Maintenant j'essaie de faire déplacer un personnage 'C' sur une grille en tapant 8,6,4,2 dans une chaine de caractère, ces derniers étant respectivement les déplacements en haut, à droite, à gauche et en bas du personnage sur la grille.

    J'arrive à faire le premier déplacement (en haut ou à droite : car mon personnage part en bas à gauche de la grille) mais les déplacements suivants ne s'effectuent pas... Cela vient surement de la boucle mais j'ai beau changer plein de choses, je n'arrive pas à régler le problème...

    Si quelqu'un voit ce qui ne va pas, pourriez vous me le dire s'il vous plait? Je vous remercie d'avance et passez une bonne soiré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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    options/extend_source
            subroutine AFF(CH,I,J,T)
            implicit none
     
     
            integer*8 I,J,K
            character*12 T(12,20)
            character*1 CH
     
            I=12
            J=1
     
            do while (T(I,J).ne.'M' .and. T(I,J).ne. 'A')
     
     
            write(*,*) 'Veuillez choisir un deplacement pour le chaperon rouge'
            read(*,*) CH
     
     
                    if (CH(1:1).eq.'8') then
                    T(I-1,J)='C'   
                    I=I-1
                    J=J
     
                    elseif (CH(1:1).eq.'6') then
                    T(I,J+1)='C'
                    J=J+1
                    I=I
     
                    elseif (CH(1:1).eq.'2') then
                    T(I+1,J)='C'
                    T(I,J)=' '
                    I=I+1
                    J=J
     
                    elseif (CH(1:1).eq.'4') then
                    T(I,J-1)='C'
                    J=J-1
                    I=I
                    end if
     
     
    ! Ecriture du tableau
                    do I=1,12
     
                    write(*,30) (T(I,J), J=1,20)
    30             format(X,'|',20(A2),'|')
     
                     end do
     
            end do

  2. #2
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Bonsoir, d'abord merci à Grame pour son aide sur les fonctions aléatoires, j'ai bien réussi à l'intégrer dans mon programme.
    Merci

    J'arrive à faire le premier déplacement (en haut ou à droite : car mon personnage part en bas à gauche de la grille) mais les déplacements suivants ne s'effectuent pas... Cela vient surement de la boucle mais j'ai beau changer plein de choses, je n'arrive pas à régler le problème...
    Ben, il me semble que tu affectes bien la nouvelle position de C mais tu oublies de libérer l'ancienne position.
    Il faudrait écrire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      if (CH(1:1).eq.'8') then
        T(I,J) = ' ' 
        T(I-1,J)='C'   
        I=I-1
        J=J
     
        elseif (CH(1:1).eq.'6') then
          T(I,J) = ' '    
          T(I,J+1)='C'
          J=J+1
          I=I
    .  .  .  .
    en supposant qu'une position vide soit représentée par un espace.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut
    Je l'ai fait mais cela ne marche toujours pas.... J'ai l'impression que le problème vient de l'affichage non? Parce que ma boucle semble bonne a priori.
    En plus cela marche la premiere fois que je veux le déplacer. Je pense qu'il ne comprend pas qu'il y a de nouvelles coordonnées pour C quand il recommence la boucle. Mais j'ai essayé de changer tout un tas de paramètres mais cela ne marche pas...

  4. #4
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Citation Envoyé par romain_t Voir le message
    Je l'ai fait mais cela ne marche toujours pas.... J'ai l'impression que le problème vient de l'affichage non? Parce que ma boucle semble bonne a priori.
    En plus cela marche la premiere fois que je veux le déplacer. Je pense qu'il ne comprend pas qu'il y a de nouvelles coordonnées pour C quand il recommence la boucle. Mais j'ai essayé de changer tout un tas de paramètres mais cela ne marche pas...
    En regardant de plus près, ya des choses qui vont pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       character*12 T(12,20)
    Alors que tu veux remplir/écrire T(I,J).
    Donc choisis :
    - ou tu as un tableau de 20 chaines de longueur 12 et tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      character*12 T(20)
       . . .
       T(I)(J:J) = 'C'
    - ou tu as un tableau de 12x20 caractères et tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       character T(12,20)
       . . .
       T(I,J)= 'C'
    mais surtout pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        character*12 T(12,20)
    qui définit un tableau de 12x20 chaines de longueur 12.

    De plus, je ne comprend pas ce que tu fais avec I et J. Tu les passes en arguments d'entrée et tu les modifies aussitot. Ca ne sert à rien de les passer en arguments dans ce cas !

  5. #5
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    J'ai oublié : tu utilises I comme variable de boucle

    à l'intérieur de la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       do while (T(I,J).ne.'M' .and. T(I,J).ne. 'A')
    où tu testes T(I,J). Or I vaut toujours 12 dès la première boucle !

  6. #6
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    En fichier joint, un petit programme reprenant ta subroutine corrigée, qui fonctionne, et qui doit faire ce que tu veux.

    Je ne sais pas sous quel OS ni avec quel compilateur tu travailles.
    Je l'ai compilé avec gfortran sous linux avec les options
    -Wall : donne le maximum de messages
    -pedantic -std=f95 : vérifie qu'on respecte la norme Fortran 95
    -fbounds-check : vérifie les indices de tableaux. Ca ralentit mais c'est utile pour la mise au point.
    Fichiers attachés Fichiers attachés
    • Type de fichier : zip tc.zip (594 octets, 90 affichages)

Discussions similaires

  1. Insérer plusieurs caractères dans un tableau
    Par Gigatrappeur dans le forum Ada
    Réponses: 4
    Dernier message: 28/12/2007, 21h24
  2. Remplir une chaîne de caractère dans un tableau
    Par Windsor123 dans le forum C
    Réponses: 4
    Dernier message: 03/11/2007, 01h29
  3. Réponses: 3
    Dernier message: 14/11/2006, 10h45
  4. Réponses: 3
    Dernier message: 26/05/2006, 19h49
  5. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43

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