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 :

Problème erreur code Fortran (débutant)


Sujet :

Fortran

  1. #1
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut Problème erreur code Fortran (débutant)
    Bonjour à tous

    Voilà je débute en Fortran et je voudrai simplement faire une matrice 2x2 et l'afficher.

    J'ai repris ce code d'une doc du logiciel SAMCEF qui utilise dans des routines des bouts de code Fortran.

    voici le code :

    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
     
          SUBROUTINE MC531 (SS)
    C
          DIMENSION        SS(NDIM,NDIM)
          INTEGER          NDIM
    C
    C
    	  AK = 5000
    C
    	  SS(1,1) = AK
    	  SS(2,2) = AK
    	  SS(1,2) = -AK
    	  SS(2,1) = -AK
    C
    	  do i = 1, n
    		write(*,*) i, SS(i)
    	  enddo
     
          END
    Voici l'erreur que j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Matrice.f: In subroutine `mc531':
    Matrice.f:16:
                       write(*,*) i, SS(i)
                                     1   2
    Too few elements (1 missing) as of (2) for array reference at (1)
    Matrice.f:3:
             DIMENSION        SS(NDIM,NDIM)
                                 1
    Matrice.f:19: (continued):
             END
             2
    Invalid declaration of or reference to symbol `ndim' at (2) [initially seen at (
    1)]
    Pour compiler j'utilise la commande suivante : g77 Matrice.f -o Matrice.exe

    Une idée ?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 25
    Points : 21
    Points
    21
    Par défaut
    Bonsoir,


    Si tu debutes en ForTran du devrais directement passer aux version modernes...minimum fortran 90...

    SInon l erreur est clairement expliquee dans le message que tu recois du compiler.
    Il te manque une dimension a l indice que tu souhaites afficher:

    pour une matrice integer :: matrix(2,2)

    si je veux afficher les elemnts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    write(*,*) matrix(1,1), matrix(1,2)
    write(*,*) matrix(2,1), matrix(2,2)
    ou alors tu definis ta matrice comme un tableau 1D:
    Et la tu faire ta boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    integer, parameter :: n = 4
    integer :: matrix(n)
    integer :: I
     
    do I = 1, n
      write(*,*) matrix(I)
    end do

    bonne soiree

  3. #3
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    @oliverjack

    Merci de ta réponse, mais le soucis c'est que le logicile SAMCEF fonctionne avec g77.

    Ce que tu m'as donné comme correction n'a pas l'air de fonctionner.

    j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	  integer, parameter :: n = 4
    	  integer :: matrix(n)
    	  integer :: I
    C	  
    	  AK= 5000
    C	  
    	  matrix(1,1) = AK
    	  matrix(2,2) = AK
    	  matrix(1,2) = -AK
    	  matrix(2,1) = -AK
    C 
    	  do I = 1, n
    		write(*,*) matrix(I)
    	  end do
    Merci d'avance pour votre aide

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 91
    Points
    91
    Par défaut
    Bonjour.

    je ne vois pas l'intérêt de déclarer NDIM après son utilisation pour dimensionner le tableau... Et surtout, il y a un problème majeur: que vaut NDIM?

    Soit c'est une variable globale (dans un COMMON), soit il est passé en argument de la routine, soit enfin c'est une constante. Mais tel que, la routine ne peut pas fonctionner. Et pour savoir ça, il faut regarder le reste du code

    Par ailleurs, une fois que ce premier point sera réglé, pour afficher correctement le tableau SS, il faut bien évidemment fournir DEUX indices.
    Et bien sûr, la variable n doit être définie (il s'agit de NDIM, en fait)
    Ainsi, on peut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
               do i = 1, NDIM
                 do j=1,NDIM
    		write(*,*) i, j, SS(i,j)
                 enddo
    	  enddo
    Ceci dit, cela va afficher chaque élément sur une ligne. Il vaut mieux, si l'on veut un affichage plus proche de notre visualisation de la matrice écrire ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
               do i = 1, NDIM
    		write(*,*) i, (SS(i,j),j=1,NDIM)
    	  enddo
    qui devrait afficher chaque ligne du tableau sur une même ligne.


    Pour le reste, un compilateur fortran 90/95 doit compiler sans problème du code 77. Je suggère donc d'utiliser gfortran.

    Bon courage

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2009, 15h43
  2. Problème macro erreur code
    Par yayasiano dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/03/2009, 15h56
  3. Réponses: 1
    Dernier message: 18/12/2008, 13h43
  4. [MEX] Problème avec le code Fortran yprimef.F
    Par ZeFMG dans le forum MATLAB
    Réponses: 5
    Dernier message: 13/11/2008, 10h36
  5. [Tableaux] problème de code de débutant
    Par polo42 dans le forum Langage
    Réponses: 8
    Dernier message: 07/07/2006, 17h30

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