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 :

générer 1 ou 0


Sujet :

Fortran

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut générer 1 ou 0
    Bonjour,

    Je suis débutant en Fortran et j'essaie d'écrire un programme pour générer n fois 1 ou bien 0. Et à chaque fois je dois avoir 50% de chance de générer 1 et 50% de chance de générer 0. Pouvez-vous m'indiquer comment s'y prendre? Merci d'avance pour votre aide!

  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 : 83
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    La fonction Random_Number te génère des nombres réel aléatoires dans l'intervalle 0. <= x < 1. Il te suffit donc d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          Call Random_Number(x)
          If (x.Lt.0.5) Then
            k=0
          Then
            k=1
          End If
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup!
    Par contre, la fonction Random_Number(x) tire tjrs le même numéros si je me trompe pas... Est-il possible de généré d'autre réels si on lance le programme plusieurs fois?

  4. #4
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    Novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    tu as du oublier de mettre random dans une boucle do.

    Chaque fois que tu apelle la subroutine random_number(x), elle affecte un nouveau réel entre 0 et 1 à x

    exemple:

    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
    program pile_ou_face                                                        random.f90 :1 *
    implicit none                                                                
    real :: x                                                                       
    integer :: i,n,k                                                                     
     
    n=10                                                                 
     
    do i=1,n                                             
      call random_number(x)                                
      print *, "x = ",x                                 
      if (x.lt.0.5) Then                                 
        k=0                                                 
      else                                                     
        k=1                                   
      end if                                                
      print *, "terme no ",i,", k = ",k                 
    end do                                              
    end program pile_ou_face

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Pour pouvoir générer un nombre aléatoire différent à chaque lancement du programme, tu dois générer une nouvelle liste avec random_seed.
    La solution proposée génère bien n nombres aléatoires, mais en exécutant plusieurs fois le programme, tu vas t'apercevoir que la liste aléatoire est la même à chaque fois (qui plus est dans le même ordre).

    Au passage, si ton compilateur supporte la fonction "nint", tu peux alléger la syntaxe :

    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 pile_ou_face
    implicit none
    real*8 :: x
    integer :: i , n , alea                                                                     
     
    call random_seed()
     
    n=10
     
    do i=1,n
      call random_number(x)
      alea = nint(x)
      write(*,*) x , alea
    end do                                              
    end program pile_ou_face

  6. #6
    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 : 83
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    tu dois générer une nouvelle liste avec random_seed
    ou appeler la fonction random_number un nombre arbitraire de fois au début de ton programme.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci bcp ça marche bien avec random_seed(). Mais j'ai un autre souci, en fait, je voudrais créer un tableau à 2 colonnes, avec un nombre de ligne n. Dans chaque case j'obtiens 1 ou 0 aléatoirement. Je voudrais que le tableau générer s'affiche dans un fichier txt.

    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
    program un_zero
    implicit none
    integer :: n,i,j,m,k,alea
    real::x
    real,dimension(:,:),allocatable :: A
    write(*,*) 'nb lignes'
    read(*,*) n
    m=2
    allocate(A(n,m))
        call random_seed()
    do i=1,n
      do j=1,m
        Call Random_Number(x)
        alea = nint(x)
        If (x.Lt.0.5) Then
        k=0
          elseif (x>=0.5)then
        k=1
          end if
          A(i,j)=k
          write(*,*)i,j,A(i,j)
    enddo
    enddo
    end
    Merci de votre aide

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Ben ce que tu a écris marche, sauf que ta structure "if" est redondante avec la fonction "nint". D'autre part, si le tableau ne doit contenir que des 0 ou 1, il est préférable de le déclarer entier :

    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
     
    program un_zero
    implicit none
     
    integer :: n,i,j,m
    real::x
    integer,dimension(:,:),allocatable :: A
     
    write(*,*) 'nb lignes'
    read(*,*) n
    m=2
    allocate(A(n,m))
     
    open(unit=10,file="aleatoire.dat",status="replace")
     
    call random_seed()
     
    do i=1,n
      do j=1,m
     
        Call Random_Number(x)
        A(i,j)=nint(x)
     
        write(10,*) i,j,A(i,j)
     
      enddo
    enddo
     
    close(10)
     
    end

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

Discussions similaires

  1. Générer une liste
    Par pfredin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2003, 15h30
  2. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  3. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30
  4. [CR][VB] comment générer un état ?
    Par ndi dans le forum SDK
    Réponses: 3
    Dernier message: 22/08/2002, 13h13
  5. Réponses: 5
    Dernier message: 08/07/2002, 16h22

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