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 :

Passage de tableau à des fonctions


Sujet :

Fortran

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Points : 100
    Points
    100
    Par défaut Passage de tableau à des fonctions
    Re-Hugh !

    Alors voilà, j'ai vu ça là :
    http://www.developpez.net/forums/d19...-tre-fonction/

    Apparemment on peut passer des tableau en argument sans passer la taille : cool !

    Alors je pars du code 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
    17
    18
    19
    20
    21
    22
    23
    function f1(x) 
      implicit none
      real :: f1
      real ,dimension(2) :: x
      write(*,*) x 
      f1=1.0  
    end function f1
     
    subroutine programme(fonction)
      implicit none
      real fonction
      real temp
      real a(2)
      a(1)=2.0
      a(2)=2.0
      temp=fonction(a)
    end subroutine programme
     
    program main
      implicit none
      external f1  
      call programme(f1)
    end program main
    qui marche et j'enlève la dimension spécifiée à 2 dans la fonction :
    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
    function f1(x) 
      implicit none
      real :: f1
      real ,dimension(:) :: x
      write(*,*) x 
      f1=1.0  
    end function f1
     
    subroutine programme(fonction)
      implicit none
      real fonction
      real temp
      real a(2)
      a(1)=2.0
      a(2)=2.0
      temp=fonction(a)
    end subroutine programme
     
    program main
      implicit none
      external f1  
      call programme(f1)
    end program main
    Et là misère ça ne marche plus...

    Vous auriez une idée ?

    PS : la structure de ce programme est un peu tordue mais c'est voulu : mon problème est de faire un algorithme d'optim sur une fonction donnée
    -> fonction est la fonction donnée, qui est définie en dehors de tout
    -> program est le programme qui lance l'optim
    -> subroutine est l'algo d'optim qui reçoit donc la fonction f en argument (car celle-ci peut changer)
    Pour ceux qui veulent bronzer avec autre chose que des tubes cathodiques : quelques idées de balades !

  2. #2
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    dison que là, tu cumul les soucis: une fonction external c un peu délicat, as-tu essayé (pour test) de lancer ta fonction directement et sans passé par le external...

    moi j'ai aucun soucis avec mes tableaux (en plus certain sont défini dans des modules à charger... etc... tout ceux-ci avec des tailles quelconque et variables (des petits soucis quand j'avais défini différement dans certaines sub) et donc cela marche parfaitement. NOTE: penser à passé la taille du tableau à ta fonction (par parramètre, module oou autre....)
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 123
    Points : 100
    Points
    100
    Par défaut
    Ben ma fonction external, j'ai pas le choix, et passer la taille du tableau en argument, je voulais m'en dipenser d'où le nouveau sujet. Mais si c'est pas possible, j'abandonnerais.

    Mais merci pour ta réponse quand même.
    Pour ceux qui veulent bronzer avec autre chose que des tubes cathodiques : quelques idées de balades !

  4. #4
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    si tu ne veux pas passer la taille de ton tableau en argument, c'est possible, avec un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function NormeL2(X)
    implicit none
    real(kind=8),dimention(1:),intent(in)::X
    real(kind=8) :: NormeL2
    integer :: Ne,i
      Ne=size(X)
      NormeL2=0.d0
      do i=1,Ne
        NormeL2=NormeL2+X(i)**2.d0
       end do
      NormeL2=dsqrt(NormeL2)
      return
    end function NormeL2
    de même si tu a un tableau à deux dimension tu peux utilise size(X,1),size(X,2) pour récupéré les tailles, cependant, il y a un soucis concernant l'indice de départ que tu es obligé de fixé (à la valeur que tu veux, mais il est fixé lorque tu code...)

    après, je suis pas assez familier avec les fonction external pour t'en dire plus....
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

Discussions similaires

  1. Passage de tableau à une fonction Lua en C
    Par astro01 dans le forum C
    Réponses: 4
    Dernier message: 28/05/2015, 10h07
  2. Réponses: 7
    Dernier message: 14/01/2008, 12h13
  3. Passage de tableau à une fonction: pb de debugger
    Par Felipe_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2007, 09h26
  4. Passage de tableau à une fonction par pointeur
    Par progfou dans le forum C++
    Réponses: 15
    Dernier message: 23/02/2007, 11h45
  5. Réponses: 8
    Dernier message: 10/03/2006, 17h28

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