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 :

Initialisation de tableau dans une subroutine ne donnant pas de résultats corrects


Sujet :

Fortran

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 865
    Points : 219 078
    Points
    219 078
    Billets dans le blog
    121
    Par défaut Initialisation de tableau dans une subroutine ne donnant pas de résultats corrects
    Bonjour à tous,

    Je fais face à un problème, surement dû à mon inexpérience en Fortran.
    J'ai la subroutine suivante :
    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 getmatrix (A,n,m)
     
    INTEGER :: m, n, i, j
    REAL*4,intent ( inout ) :: A(n,m)
     
    PRINT *,"GETMATRIX(N:",n,"M:",m,")"
    do i = 1, n
           do j = 1, m
             A(i,j)=int(rand(0)*99)+1
           end do
    end do
     
    do i = 1, n
       do j = 1, m
          PRINT *,"I: ",i," J: ",j," MAT2: ",A(i,j)
       end do
    end do
     
    END SUBROUTINE getmatrix
    Qui affiche ce qui suit :
    GETMATRIX(N: 64 M: 1 )
    I: 1 J: 1 MAT2: 1.00000000
    I: 2 J: 1 MAT2: 14.0000000
    I: 3 J: 1 MAT2: 75.0000000
    I: 4 J: 1 MAT2: 46.0000000
    I: 5 J: 1 MAT2: 53.0000000
    I: 6 J: 1 MAT2: 22.0000000
    I: 7 J: 1 MAT2: 5.00000000
    I: 8 J: 1 MAT2: 68.0000000
    I: 9 J: 1 MAT2: 68.0000000
    I: 10 J: 1 MAT2: 93.0000000
    I: 11 J: 1 MAT2: 38.0000000
    I: 12 J: 1 MAT2: 52.0000000
    I: 13 J: 1 MAT2: 83.0000000
    I: 14 J: 1 MAT2: 4.00000000
    I: 15 J: 1 MAT2: 6.00000000
    I: 16 J: 1 MAT2: 53.0000000
    I: 17 J: 1 MAT2: 67.0000000
    I: 18 J: 1 MAT2: 1.00000000
    I: 19 J: 1 MAT2: 38.0000000
    I: 20 J: 1 MAT2: 7.00000000
    I: 21 J: 1 MAT2: 42.0000000
    I: 22 J: 1 MAT2: 68.0000000
    I: 23 J: 1 MAT2: 59.0000000
    I: 24 J: 1 MAT2: 93.0000000
    I: 25 J: 1 MAT2: 84.0000000
    I: 26 J: 1 MAT2: 53.0000000
    I: 27 J: 1 MAT2: 10.0000000
    I: 28 J: 1 MAT2: 65.0000000
    I: 29 J: 1 MAT2: 42.0000000
    I: 30 J: 1 MAT2: 70.0000000
    I: 31 J: 1 MAT2: 91.0000000
    I: 32 J: 1 MAT2: 76.0000000
    I: 33 J: 1 MAT2: 26.0000000
    I: 34 J: 1 MAT2: 5.00000000
    I: 35 J: 1 MAT2: 73.0000000
    I: 36 J: 1 MAT2: 33.0000000
    I: 37 J: 1 MAT2: 63.0000000
    I: 38 J: 1 MAT2: 75.0000000
    I: 39 J: 1 MAT2: 99.0000000
    I: 40 J: 1 MAT2: 37.0000000
    I: 41 J: 1 MAT2: 25.0000000
    I: 42 J: 1 MAT2: 98.0000000
    I: 43 J: 1 MAT2: 72.0000000
    I: 44 J: 1 MAT2: 75.0000000
    I: 45 J: 1 MAT2: 65.0000000
    I: 46 J: 1 MAT2: 8.00000000
    I: 47 J: 1 MAT2: 63.0000000
    I: 48 J: 1 MAT2: 88.0000000
    I: 49 J: 1 MAT2: 27.0000000
    I: 50 J: 1 MAT2: 44.0000000
    I: 51 J: 1 MAT2: 76.0000000
    I: 52 J: 1 MAT2: 48.0000000
    I: 53 J: 1 MAT2: 24.0000000
    I: 54 J: 1 MAT2: 28.0000000
    I: 55 J: 1 MAT2: 36.0000000
    I: 56 J: 1 MAT2: 17.0000000
    I: 57 J: 1 MAT2: 49.0000000
    I: 58 J: 1 MAT2: 89.0000000
    I: 59 J: 1 MAT2: 91.0000000
    I: 60 J: 1 MAT2: 6.00000000
    I: 61 J: 1 MAT2: 90.0000000
    I: 62 J: 1 MAT2: 50.0000000
    I: 63 J: 1 MAT2: 52.0000000
    I: 64 J: 1 MAT2: 32.0000000
    Et le programme main suivant :
    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
    program main
     
    DOUBLE PRECISION, dimension (:,:), allocatable :: MAT2
     
    allocate(MAT2(64,1))
     
    CALL getmatrix (MAT2,64,1)
    do i = 1, 64
       do j = 1, 1
          PRINT *,"I: ",i," J: ",j," MAT2: ",MAT2(i,j)
       end do
    end do
     
    deallocate(MAT2)
     
    end
    Qui affiche :
    I: 1 J: 1 MAT2: 8388609.9843750000
    I: 2 J: 1 MAT2: 103079232150.00000
    I: 3 J: 1 MAT2: 268435522.32812500
    I: 4 J: 1 MAT2: 3298535412736.0000
    I: 5 J: 1 MAT2: 28587306682368.000
    I: 6 J: 1 MAT2: 274877974624.00000
    I: 7 J: 1 MAT2: 512.00012712180614
    I: 8 J: 1 MAT2: 343597449984.00000
    I: 9 J: 1 MAT2: 7.8125019360868464E-003
    I: 10 J: 1 MAT2: 32768.008068084717
    I: 11 J: 1 MAT2: 3298535425280.0000
    I: 12 J: 1 MAT2: 28587306675200.000
    I: 13 J: 1 MAT2: 343597451936.00000
    I: 14 J: 1 MAT2: 2473901696000.0000
    I: 15 J: 1 MAT2: 3848291239168.0000
    I: 16 J: 1 MAT2: 6597070859648.0000
    I: 17 J: 1 MAT2: 2048.0005021095276
    I: 18 J: 1 MAT2: 10737420370.250000
    I: 19 J: 1 MAT2: 6047315042048.0000
    I: 20 J: 1 MAT2: 21474840753.500000
    I: 21 J: 1 MAT2: 43980473733120.000
    I: 22 J: 1 MAT2: 6047315043328.0000
    I: 23 J: 1 MAT2: 131072.03247451782
    I: 24 J: 1 MAT2: 17592190401536.000
    I: 25 J: 1 MAT2: 68719493592.000000
    I: 26 J: 1 MAT2: 137438987568.00000
    I: 27 J: 1 MAT2: 2147484174.0000000
    I: 28 J: 1 MAT2: 50331656.257812500
    I: 29 J: 1 MAT2: 19791213642752.000
    I: 30 J: 1 MAT2: 8192.0020358562469
    I: 31 J: 1 MAT2: 206158464360.00000
    I: 32 J: 1 MAT2: 8589936714.0000000
    I: 33 J: 1 MAT2: 0.0000000000000000
    I: 34 J: 1 MAT2: 0.0000000000000000
    I: 35 J: 1 MAT2: 0.0000000000000000
    I: 36 J: 1 MAT2: 0.0000000000000000
    I: 37 J: 1 MAT2: 0.0000000000000000
    I: 38 J: 1 MAT2: 0.0000000000000000
    I: 39 J: 1 MAT2: 0.0000000000000000
    I: 40 J: 1 MAT2: 0.0000000000000000
    I: 41 J: 1 MAT2: 0.0000000000000000
    I: 42 J: 1 MAT2: 0.0000000000000000
    I: 43 J: 1 MAT2: 0.0000000000000000
    I: 44 J: 1 MAT2: 0.0000000000000000
    I: 45 J: 1 MAT2: 0.0000000000000000
    I: 46 J: 1 MAT2: 0.0000000000000000
    I: 47 J: 1 MAT2: 0.0000000000000000
    I: 48 J: 1 MAT2: 0.0000000000000000
    I: 49 J: 1 MAT2: 0.0000000000000000
    I: 50 J: 1 MAT2: 0.0000000000000000
    I: 51 J: 1 MAT2: 0.0000000000000000
    I: 52 J: 1 MAT2: 0.0000000000000000
    I: 53 J: 1 MAT2: 0.0000000000000000
    I: 54 J: 1 MAT2: 0.0000000000000000
    I: 55 J: 1 MAT2: 0.0000000000000000
    I: 56 J: 1 MAT2: 0.0000000000000000
    I: 57 J: 1 MAT2: 0.0000000000000000
    I: 58 J: 1 MAT2: 0.0000000000000000
    I: 59 J: 1 MAT2: 0.0000000000000000
    I: 60 J: 1 MAT2: 0.0000000000000000
    I: 61 J: 1 MAT2: 0.0000000000000000
    I: 62 J: 1 MAT2: 0.0000000000000000
    I: 63 J: 1 MAT2: 0.0000000000000000
    I: 64 J: 1 MAT2: 0.0000000000000000
    Pourquoi les valeurs dans la matrice perçue par le main, ne sont pas identique au valeurs initialisés par la fonction getmatrix.

    Merci beaucoup
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 865
    Points : 219 078
    Points
    219 078
    Billets dans le blog
    121
    Par défaut
    J'ai trouvé. C'était simplement un problème de typage. En effet, dans la subroutine, la matrice est en REAL*4, alors que celle déclarée est en DOUBLE PRECISION.
    Du coup, les valeurs lues en retour n'était pas correctement placées (je créais un décalage dans la mémoire en lui spécifiant un type différent).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Initialisation d'un tableau dans une classe
    Par MrGhan dans le forum C#
    Réponses: 5
    Dernier message: 26/04/2009, 11h14
  2. Utiliser le tableau d'une subroutine dans une autre
    Par phy4me dans le forum Fortran
    Réponses: 2
    Dernier message: 31/08/2007, 23h38
  3. Pb pour se servir d'un tableau dans une autre unité
    Par libititi dans le forum Langage
    Réponses: 7
    Dernier message: 08/06/2005, 11h40
  4. Tableau dans une interface idl
    Par Polochon2001 dans le forum CORBA
    Réponses: 2
    Dernier message: 14/05/2004, 09h44
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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