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 :

Fonction aléatoire en fortran 77


Sujet :

Fortran

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut Fonction aléatoire en fortran 77
    Bonsoir! J'aimerais vous demander de l'aide sur un point que je n'ai pas réussi à éclaircir. J'ai un plateau de jeu sur lequel je dois générer des pièces de jeu, c'est à dire des arbres, ou des personnages. Le problème, c'est que ces arbres doivent etre générés de façon aléatoire sur mon plateau. Quelqu'un pourrait-il m'expliquer comment réaliser une fonction aléatoire ?
    En vous remerciant d'avance de l'intérêt que vous voudrez bien porter à ma requête, je vous souhaite de passer une bonne soirée.

  2. #2
    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 : 84
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    comment réaliser une fonction aléatoire
    Sauf erreur, le Fortran comporte une fonction ran. Sinon, voir "Numerical Recipes", chapitre 7.
    Jean-Marc Blanc

  3. #3
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Citation Envoyé par romain_t Voir le message
    Bonsoir! J'aimerais vous demander de l'aide sur un point que je n'ai pas réussi à éclaircir. J'ai un plateau de jeu sur lequel je dois générer des pièces de jeu, c'est à dire des arbres, ou des personnages. Le problème, c'est que ces arbres doivent etre générés de façon aléatoire sur mon plateau. Quelqu'un pourrait-il m'expliquer comment réaliser une fonction aléatoire ?
    En vous remerciant d'avance de l'intérêt que vous voudrez bien porter à ma requête, je vous souhaite de passer une bonne soirée.
    Il n'y a pas de générateur de nombres aléatoires dans la norme FORTRAN77.
    Certains compilateurs en propose un. Sinon, tu peux utiliser ce petit générateur
    simple que m'avait donné un collègue probabiliste il y a quelques années.

    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
     
          FUNCTION RANDOM (N0)
     
    C     On initialise N0 a une valeur quelconque ENTIERE 
    C     RANDOM renvoie un REEL compris entre 0.0 et 1.0
     
          REAL      RANDOM
          INTEGER   N0, K, CONST1, CONST2, CONST3, CONST4
          PARAMETER (CONST1 = 127773)
          PARAMETER (CONST2 = 16807)
          PARAMETER (CONST3 = 2836)
          PARAMETER (CONST4 = 2147483647)
     
          K = N0 / CONST1
          N0 = CONST2 * (N0 - K * CONST1) - K * CONST3
          IF (N0 .LT. 0) N0 = N0 + CONST4
          RANDOM = REAL(N0) / REAL(CONST4)
     
          END

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut
    Merci beaucoup! Je vais tester comme ca alors! Et au niveau de la syntaxe je la relie au programme principal comme une subroutine non ?
    Merci beaucoup

  5. #5
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Citation Envoyé par romain_t Voir le message
    Merci beaucoup! Je vais tester comme ca alors! Et au niveau de la syntaxe je la relie au programme principal comme une subroutine non ?
    Merci beaucoup
    Non pas une subroutine, une fonction.

    Si tu cherches à générer des entiers, j'ai une autre petit générateur encore plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
          FUNCTION GECOLI (GRAINE,BORNE)
          INTEGER GECOLI, GRAINE, BORNE
          INTEGER A,M
     
          PARAMETER (A=1117)
          PARAMETER (M=19991)
     
          GRAINE = MOD(GRAINE * A, M)
          GECOLI = 1 + INT(BORNE * REAL(GRAINE) / REAL(M))
     
          END
    Tu peux l'appeler à partir d'u programme suivant, par exemple , pour en tester l'équiprobabilité, qui n'est pas mauvaise compte tenu de l'extrême simplicité du générateur, juste congruentiel linéaire.
    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
     
          PROGRAM TESRND
     
    C- Borne 
          INTEGER BORNE
          PARAMETER (BORNE=10)
    C- Fonction générateur
          INTEGER GECOLI
    C- Graine initiale du générateur
          INTEGER GRAIN0
    C- Boucle
          INTEGER I
    C- Nombre tiré 
          INTEGER N     
    C- Tableaux contenant les tirages
          INTEGER RES(BORNE)
    C- Nombre de tirages  
          INTEGER TIRS
     
    C- Initialisations globales
          GRAIN0 = 7333 
          TIRS = 10000000 
          DO 10 I=1,BORNE
             RES(I)=0
    10    CONTINUE
     
          WRITE(*,*)'Graine de départ  = ',GRAIN0
          WRITE(*,*)'Borne             = ',BORNE 
          WRITE(*,*)'Nombre de tirages = ',TIRS   
          DO 20  I=1,TIRS
            N = GECOLI (GRAIN0, BORNE)
            RES(N) = RES(N) + 1
    20    CONTINUE
     
          WRITE(*,*)'Résultats'
          DO 30 I=1,BORNE
             WRITE(*,*) I, RES(I)
    30    CONTINUE  
     
          END

Discussions similaires

  1. fonction aléatoire sous l'AS 400
    Par tenah34 dans le forum AS/400
    Réponses: 6
    Dernier message: 02/09/2008, 17h08
  2. Fonction aléatoire pas ordinaire
    Par gotrunkssj dans le forum C
    Réponses: 5
    Dernier message: 21/01/2008, 13h09
  3. Excel fonction aléatoire
    Par Biker-Robby dans le forum Excel
    Réponses: 3
    Dernier message: 11/12/2007, 09h17
  4. [Débutant] Les fonctions mathématiques en Fortran
    Par feynman dans le forum Fortran
    Réponses: 1
    Dernier message: 17/07/2007, 10h21
  5. Fonctions aléatoires pour caractères
    Par IDE dans le forum C
    Réponses: 14
    Dernier message: 13/05/2007, 15h06

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