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 :

Erreur de compilation


Sujet :

Fortran

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut Erreur de compilation
    Voila, j'ai ce code là :

    MODULE elimination_base
    contains
    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
    SUBROUTINE elimine_ligne(bool,i,j,k,l,m) 
      IMPLICIT NONE
        INTEGER :: i,j,k,l,m
        INTEGER,DIMENSION(3,3,3,3) :: tab
        LOGICAL,DIMENSION(3,3,3,3,9) :: bool
        bool=.TRUE.
        DO i=1,3
           DO j=1,3
              DO k=1,3
                 DO l=1,3
                    Do m=1,9
                       where  (m=tab(i,j,k,l)) 
                          bool(i,1,k,1,m)=.false.
                       end where
                    end do
                  end do
                end do
            end do
         end do
     end subroutine
     end module
    Et il n'y a jamais moyen de compiler ! J'ai toujours l'erreur suivante :
    " where (m=tab(i,j,k,l))
    1
    Error: Unclassifiable statement at (1)
    Elimination_base.f90:16.22:

    end where
    1
    Error: Expecting END DO statement at (1)"
    J'ai essayer de remplacer le where par un if, mais j'ai la même erreur (avec if à la place du where dans le msg d'erreur)


    Je suis un gros débutant en programmation, l'erreur ne me saute pas aux yeux ^^

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Par défaut
    Citation Envoyé par crunc Voir le message
    Voila, j'ai ce code là :
    J'ai essayer de remplacer le where par un if, mais j'ai la même erreur (avec if à la place du where dans le msg d'erreur)
    Je mettrais effectivement plutôt un IF qu'un Where en l'occurence car cela ne me semble pas une syntaxe type de where (mais je ne l'utilise pas)
    if (m.EQ.tab(i,j,k,l))
    bool(i,1,k,1,m)=.false.
    end if

    Un autre Pb est que je ne vois pas où "tab" se voit allouer des valeurs...

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Attention:
    where(m=tab(i,j,k,l))
    '=' signifie que l'on donne à 'm' la valeur de tab(i,j,k,l) , et ça n'a pas de sens au sein d'un 'where'

    Si on veut comparer deux valeurs, c'est l'opérateur '==' qu'il faut utiliser:
    where(m==tab(i,j,k,l))
    Bonne continuation

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut
    Merci pour vos réponse, je pense qu'effectivement c'est bien le if qu'il faut utilisé.
    Maintenant j'ai une autre erreur :

    if (m==tab(i,j,k,l))
    1
    Error: Cannot assign to a named constant at (1)
    Elimination_base.f90:16.22:

    end if
    1
    Error: Expecting END DO statement at (1)
    Je pense que le problème vient du tab, mais pourtant en faisant ma boucle, j'assigne bien des valeurs à tab non ?
    Je ne vois pas quoi faire...j'ai essayé avec un allocatable, ca ne compile pas non plus.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 21
    Par défaut
    Citation Envoyé par crunc Voir le message
    Je pense que le problème vient du tab, mais pourtant en faisant ma boucle, j'assigne bien des valeurs à tab non ?
    Je ne vois pas quoi faire...j'ai essayé avec un allocatable, ca ne compile pas non plus.
    A priori non, tab ne reçoit pas de valeur ! Il faut lui en donner avant la ligne avec le IF. C'est bool qui reçoit des valeurs, pas tab.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Citation Envoyé par crunc Voir le message
    Merci pour vos réponse, je pense qu'effectivement c'est bien le if qu'il faut utilisé.
    Maintenant j'ai une autre erreur :

    if (m==tab(i,j,k,l))
    1
    Error: Cannot assign to a named constant at (1)
    Elimination_base.f90:16.22:

    end if
    1
    Error: Expecting END DO statement at (1)
    Je pense que le problème vient du tab, mais pourtant en faisant ma boucle, j'assigne bien des valeurs à tab non ?
    Je ne vois pas quoi faire...j'ai essayé avec un allocatable, ca ne compile pas non plus.
    Le message d'erreur est plutôt relatif à une mauvaise utilisation du if:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (condition) then
      instructions
    endif
    Et je souscris bien évidement au commentaire de MDev25: bien penser à initialiser les variables avant de les manipuler...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut
    J'avais oublié le then....Je ne fais pas l'erreur d'habitude !! J'ai du resté trop longtemps devant l'ordi et ne pas voir l'erreur du coup ^^

    Merci a vous, ça compile comme il faut

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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