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 :

Error 112 "reference to undefined variable, array element or function result"


Sujet :

Fortran

  1. #1
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut Error 112 "reference to undefined variable, array element or function result"
    Salut,
    J ai un probleme de compilation:
    j ai ecrit un program en F77, et ca marche, mais sur un compilateur F90 sur mon pc ca donne erreur, alors qu est ce qu il faut rectifier?
    merci

  2. #2
    Membre du Club Avatar de phy4me
    Inscrit en
    Octobre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 116
    Points : 61
    Points
    61
    Par défaut
    peut-tu nous ecrire l'erreur ?

  3. #3
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    error 112,reference to undefined variable , array element or function result

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    D'après le message d'erreur, tu utilises une variable/un élément de tableau/ une fonction non définie...
    Visiblement ton compilateur 77 tolérait celà, mais pas ton compilateur 90 (ce qui est à mon gout plus sain).

    As-tu pensé à utiliser un "implicit none" dans ton programme et à compiler avec un maximum d'options de diagnostiques d'erreurs?

  5. #5
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Tu as raison, j oublies tjs le implicit none, j esseyerai et je te dirai si le probleme existe ou pas

  6. #6
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Malheuresement le message existe toujours,
    en effet il compile sans erreurs, mais dans apres, dans l affichage, ca me donne ce message

  7. #7
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut !

    Une méthode rustique mais souvent efficace, c'est la dichotomie (le nom est affreux, mais la méthode est toute simple):

    Tu ajoutes, à peu près au milieu de ton programme, une instruction Print ou Write pour afficher une ou plusieurs variables qui te semblent être intéressantes, puis tu exécutes. Selon qu'une valeur est affichée ou non, tu sais si l'erreur est dans la première moitié ou dans la seconde.

    Puis tu ajoutes un Print ou un Write au milieu la moitié qui contient l'erreur, et ainsi de suite, jusqu'à ce que tu saches dans quelle instruction se produit l'erreur. Tu affiches alors successivement toutes les variables utilisées dans cette instruction.

    Cette méthode est utilisée surtout pour déverminer de très gros programmes, et, dans ton cas, c'est peut-être utiliser un marteau-pilon pour écraser une mouche, mais ça marche.

    Bonne chance
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  8. #8
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Slalut ,
    Jean Marc, le compilateur F90 me donne l erreur dans un sous program, sans preciser,
    malgre que le program marche tres bien en F77

  9. #9
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!

    De deux choses l'une: ou bien tu as le fichier source de ton sous-programme, ou bien tu ne l'as pas.

    Dans le premier cas, c'est très simple: tu appliques la méthode de la dichotomie à l'intérieur de ton sous-programme. Tu peux aussi vérifier (à l'intérieur du sous-programme), si tous les paramètres ont des valeurs correctes.

    Dans le second cas, c'est un peu moins simple: tu vérifies les valeurs de tous les paramètres juste avant l'instruction d'appel de ton sous-programme. Maintenant, le plus ennuyeux pour toi serait qu'il y ait une erreur dans un sous-programme qui n'est pas de toi.

    Bonne chance
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  10. #10
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Je pense que j ai trouver le truc
    Le compilateur F77 est sur lunix, tant que le compilateur F90 est sur windows.
    Alors est ce que c est le vrai probleme?
    si oui comment regler ce cas?
    merci

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    C'est probablement un appel à une fonction ou routine propriétaire du compilateur F77 et elle n'existe pas dans ton compilateur F95. Normalement, le message d'erreur doit être accompagné du nom de la fonction ou de la routine problématique.

  12. #12
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Tu as raison,
    J ai fait appelle a une subroutine, et elle me donne erreur ( c est moi qui a construit cette subroutine)

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Est-ce une erreur de compilation ou de link ?

    Je ne vois pas le lien entre le fait que ce soit une de tes routines et le fait que ce soit sensible à la plateforme / compilateur.

    Peux-tu nous fournir une copie de l'affichage au moment où l'erreur se produit ? Avec quelques lignes avant le message ?

  14. #14
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Voila exactemenr ce que j obtient apres compilation (pas d erreurs dans la compilation)

    Run-time Error
    *** Error 112, Reference to undefined variable, array element or function result (/UNDEF)

    MATMULL - in file gggggggg.f95 at line 88 [+01ce]

    main - in file gggggggg.f95 at line 41 [+0909]

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Dans mon manuel Compaq, on dit qu'une variable est defined when you give it a value.

    Donc, l'erreur est que tu n'as pas assigné de valeur à la variable MALMULL (?) à la ligne 88 (?)

  16. #16
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Si j ai donne' une valeur a la subroutine Matmull, et cela ce voit clairement avec les resultats de F77.
    Pour voir plus le probleme acceptez vous que je vous donne le programme?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    C'est de loin la chose à faire; sinon on peut supputer à volonté (et pendant longtemps)...

    Montre donc la source, ou si il y en a des tonnes, au moins les parties concernées (c.-à-d. les blocs de code aux alentours des lignes 41 et 88).

  18. #18
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Voila le code,
    en fait Si tu a une matrice A et tu la decompose par A=C_1+C_2 (C1 et C2 sont des matrices superieures et nferieures)
    ce program resoud le systeme lineaire AX=b par une methode iterative C1X^n+1+C2 X^n=b


    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
     
     
                 program ligne
                  real A(3,3),B(3),C1(3,3),C2(3,3),X(3),Xold(3),M2(3)
         &           , normee, norme
         &           , verif, sm(3)
                  integer i,j, num_iter
                  read*,((A(i,j),j=1,3),i=1,3)
                  print 10,((A(i,j),j=1,3),i=1,3)
    10           format('A=',3(/,1X,3(F4.1,1X)))
                  read*,(B(i),i=1,3)
                  print 20,(B(i),i=1,3)
    20           format('B=',5(F4.1,1X))
     
                  do i=1,3
                     do j=1,3
                       if(i.LE.j) then
                         C1(i,j)=A(i,j)
                       else
                         C1(i,j)=0.0
                       endif
                     enddo
                  enddo
                  print 30,((C1(i,j),j=1,3),i=1,3)
    30           format('C1=',3(/,1X,3(F4.1,1X)))
                   do i=1,3
                     do j=1,3
                       if(i.GT.j) then
                         C2(i,j)=A(i,j)
                       else
                         C2(i,j)=0.0
                       endif
                     enddo
                  enddo
                   do i =1,3
                      X(i)=2.
                   end do
     
                  print 40,((C2(i,j),j=1,3),i=1,3)
    40           format('C2=',3(/,1X,3(F4.1,1X)))
                 norme = 1.
                 num_iter = 0
                  do while(norme.GT.0.01)
                     num_iter = num_iter + 1
                     Call  matmull(C2,Xold,M2)
                     do i = 1, 3
                       sm(i)=B(i)-M2(i)
                       end do
                     Call  triangle(C1,sm,X)
                     norme = normee(X,Xold)
                     print *, norme
                       do j=1,3
                            Xold(j) = X(j)
                       enddo
                   print *, num_iter
                   do i = 1, 3
                      print *, 'X',i,' = ',X(i)
                    end do
                  if (num_iter.gt.10) stop
                  enddo
                   do i = 1, 3
                      print *, 'X',i,' = ',X(i)
                    end do
    c
    c   ***  verification de la solution
    c
           do i = 1, 3
             verif = -B(i)
             do j = 1, 3
               verif = verif + A(i,j)*X(j)
             end do
             print *, '*** verification ligne ',i, verif
           end do
           end
                    subroutine triangle(C,D,Y)
                    real C(3,3),D(3),Y(3),S
                    integer n,i
                    Y(3)=D(3)/C(3,3)
                       do i=2,1,-1
                          S = 0.
                          do n=i+1,3
                              S=S+C(i,n)*Y(n)
                          enddo
                        Y(i)=(D(i)-S)/C(i,i)
                        enddo
                    return
                    end
     
                   subroutine matmull(R,S,T)
                   real R(3,3),S(3),T(3)
                   do i=1,3
                      T(i)=0.0
                      do j=1,3
                         T(i)=T(i)+R(i,j)*S(j)
                      enddo
                   enddo
                   return
                   end
     
                   function normee(G,H)
                   implicit none
                   integer i
                   real G(3),H(3),normee
                   normee = 0.0
                      do i=1,3
                         normee = normee+(G(i)-H(i))**2
                      enddo
                   normee = sqrt(normee)
                   return
                   end

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Je pense entrevoir le problème: Lors du tout premier appel à ta routine 'matmull', le vecteur 'Xold', utilisé par cette même routine pour calculer 'M2' n'est pas initialisé (les valeurs des éléments de 'Xold' sont donc indéterminés/dépendants d'éventuels comportement par défaut sur l'initialisation des variables propre à chaque compilateur).

    Il faut initialiser proprement 'Xold' avant la boucle 'do while'.

  20. #20
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Merci Ehouarn ca marche tres bien
    c est toujours comme ca , si j oubli une petite chose dans le program, il y aura d erreurs

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ODBC] Fatal error: Cannot redeclare et Notice: Undefined variable:
    Par razily dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/05/2010, 16h33
  2. Réponses: 2
    Dernier message: 09/05/2010, 16h39
  3. problème avec array Notice: Undefined variable:
    Par seksaki dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 10/11/2009, 18h01
  4. Réponses: 3
    Dernier message: 22/09/2005, 11h24
  5. [MSXSL] Reference to undefined entity 'nbsp'.
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 27
    Dernier message: 30/08/2005, 17h35

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