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ébutant] Tableau en paramètre d'une fonction


Sujet :

Fortran

  1. #1
    Vol
    Vol est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 38
    Points
    38
    Par défaut [Débutant] Tableau en paramètre d'une fonction
    Bonjour, j'ai une fonction qui reçoit comme paramètre un tableau de 2 dimensions. Dans la littérature, j'ai lu qu'il fallait indiquer les dimensions de ce tableau lors des déclarations. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fonction(tab,m,n)
     
    implicit none
     
    integer, dimension(m,n) :: tab
    Par contre, si je ne déclare pas la dimension du tableau cela fonctionne quand même. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    fonction(tab)
     
    implicit none
     
    integer, dimension(:,:) :: tab
     
    integer :: m,n
     
    m = size(tab(:,1))
    n = size(tab(1,:))
    Plusieurs références indiquent qu'il faut passer en paramètre les dimensions et les utiliser pour déclarer le tableau (premier exemple). Est-ce seulement pour Fortran90 et moins? Si la deuxième méthode fonctionne est-ce que ça veut dire que j'utilise Fortran95 (je croyais utiliser 90)? Sous question***

    Si la littérature indique qu'il faut toujours déclarer la dimension, est-ce que je risque des problèmes avec la méthode présenté au deuxième exemple? Si ce n'est effectivement pas nécessaire de déclarer, pourquoi la littérature indique qu'il faut déclarer alors ?!?


    *** Sous question: Je ne voulais pas créer de nouveau sujet, si ce serait mieux de créer un nouveau sujet laisser moi le savoir SVP.
    Si mon fichier à l'extension .f90, est-ce que cela m'assure de compiler sous Fortran90? J'utilise Compaq Visual Fortran et je sais que je pourrais compiler en Fortran95 (il me semble...). Par contre, lorsque je crée un projet je ne fais que choisir "Fortran Console Application". J'ai parcouru les menus mais je n'ai rien trouvé concernant la version de Fortran à compiler.

    Merci!!

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Vol
    Dans la littérature, j'ai lu qu'il fallait indiquer les dimensions de ce tableau lors des déclarations.
    Si tu connais les dimensions, c'est aussi bien.
    Par contre, si je ne déclare pas la dimension du tableau cela fonctionne quand même.
    Oui, ce sont les 'assumed-shape arrays'. Ils sont Fortran 90. Ils sont utiles lorsque la dimension n'est pas connue (envoit d'un sous-tableau a nombre variable d'elements a une fonction par exemple).
    Si ce n'est effectivement pas nécessaire de déclarer, pourquoi la littérature indique qu'il faut déclarer alors
    Parce que tu n'as lu le bon chapitre. Le Fortran 90 possede quatre types de tableaux differents: Explicit Shape Arrays (les tableaux classiques), Assumed Shape Arrays (que tu viens de decouvrir), Deferred Shape Arrays (allocatable et pointers) et Assumed Size Arrays (nombre d'element connu par le tableau passe en argument, mais nombre de dimensions different). Ton livre de Fortran doit certainement aborder ces quatre types de tableaux.

    Si mon fichier à l'extension .f90, est-ce que cela m'assure de compiler sous Fortran90? J'utilise Compaq Visual Fortran et je sais que je pourrais compiler en Fortran95
    Il faudrait regarder la doc en detail. A priori, je dirais que l'extension n'assure pas le standard du langage. Je n'utilise pas ce compilateur et je ne suis pas sur qu'un compilateur supporte Fortran95 en entier, pour l'instant.

  3. #3
    Vol
    Vol est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Merci pour les réponses, cela résoud bien mes questionnement!

    Citation Envoyé par DaZumba
    Si tu connais les dimensions, c'est aussi bien.
    Est-ce que "C'est aussi bien" signifie que c'est préférable de définir les dimensions si elles sont connues? Ou bien, est-ce que cela signifie tout simplement que les deux méthodes sont équivalentes, et ce, tant en terme de fonctionnement qu'en terme de performance mémoire/temps d'exécution? Si c'est préférable de définir les dimensions si elles sont connues, pour quelles raisons l'est-ce?

    Citation Envoyé par DaZumba
    Parce que tu n'as lu le bon chapitre. Le Fortran 90 possede quatre types de tableaux differents: Explicit Shape Arrays (les tableaux classiques), Assumed Shape Arrays (que tu viens de decouvrir), Deferred Shape Arrays (allocatable et pointers) et Assumed Size Arrays (nombre d'element connu par le tableau passe en argument, mais nombre de dimensions different). Ton livre de Fortran doit certainement aborder ces quatre types de tableaux.
    En fait, je n'ai pas de livre et je me suis débrouillé avec la doc qui venait avec Compaq Visual Fortran ainsi que des faqs sur le net... Connaissant maintenant le nom des 4 types de tableaux, je vais faire des recherches en conséquence sur le net.

    Merci!

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Vol
    Est-ce que "C'est aussi bien" signifie que c'est préférable de définir les dimensions si elles sont connues?
    Oui, c'est juste plus simple - et on aime la simplicite ! Cela economise un appel a size(), certes peu couteux, mais finalement inutile si les dimensions ne sont pas destinees a changer. Lorsqu'on utilise une sous-routine ou fonction qui accepte un assumed-shape array, il faut aussi declarer explicitement son interface, ce qui ajoute quelques lignes de code...

  5. #5
    Vol
    Vol est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    De mon côté, la simplicité veut dire ne pas passer les dimensions, si c'est possible, et dans le cas actuel, c'est possible . Puisque j'ai plusieurs tableaux à passer en paramètre. C'est plus facile d'écrire l'appel des fonctions sans avoir à passer le triple des paramètres...
    Merci pour les explications, c'est bien apprécié!

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

Discussions similaires

  1. tableau a 2 dimentions appelé dans une fonction
    Par epeichette dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/10/2007, 16h38
  2. Réponses: 8
    Dernier message: 19/07/2007, 17h40
  3. passer un tableau issu d'un malloc a une fonction
    Par tixweb dans le forum Débuter
    Réponses: 6
    Dernier message: 09/07/2007, 08h14
  4. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 16h00
  5. Créer un tableau lors de l'appel d'une fonction
    Par MiJack dans le forum Langage
    Réponses: 11
    Dernier message: 01/02/2006, 12h18

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