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 :

valeurs croissantes générées d'une manière aléatoire


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut valeurs croissantes générées d'une manière aléatoire
    Bonsoir
    je veux générer des nombres aléatoires pour qu'un variable q passe de qmin à qmax puis revient à qmin, tous ça pour une série de 12 valeurs croissantes entre qmin et qmax et 12 valeur décroissantes entre qmax et qmin.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Et bien il te suffit simplement de générer toutes les valeurs d'un coup, puis de les agencer comme tu le souhaites.

    Bonne continuation

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    merci pour l'information et voici le code pour trier un tableau générer aléatoirement
    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
     
          INTEGER N
          PARAMETER(N=12)
          real k(N)
          INTEGER i
          real Qmin, Qmax
          PARAMETER(Qmin=3.0, Qmax=5.2)
          INTEGER*4 time(3)
          REAL rand,c
          call itime(time)
          i = rand(time(1) + time(2) + time(3))
     
    	k(1)=Qmin
    	k(12)=Qmax
     
          DO i = 2, N-1
          k(i) = (rand(0) * (Qmax  - Qmin) + Qmin)
          ENDDO
     
    	do j=1,100 ! c pour s'assurer que le tableau est bien trié
    		do i=2,N-1
    		if (k(i).LT.k(i-1)) then
    			c=k(i-1)
    			k(i-1)=k(i)
    			k(i)=c
    		end if
    		end do
    	end do
     
    	do i=1,N
    	write(*,*)k(i)
    	end do	
     
     
          END

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Citation Envoyé par brahim20 Voir le message
    merci pour l'information et voici le code pour trier un tableau générer aléatoirement
    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
     
          INTEGER N
          PARAMETER(N=12)
          real k(N)
          INTEGER i
          real Qmin, Qmax
          PARAMETER(Qmin=3.0, Qmax=5.2)
          INTEGER*4 time(3)
          REAL rand,c
          call itime(time)
          i = rand(time(1) + time(2) + time(3))
     
    	k(1)=Qmin
    	k(12)=Qmax
     
          DO i = 2, N-1
          k(i) = (rand(0) * (Qmax  - Qmin) + Qmin)
          ENDDO
     
    	do j=1,100 ! c pour s'assurer que le tableau est bien trié
    		do i=2,N-1
    		if (k(i).LT.k(i-1)) then
    			c=k(i-1)
    			k(i-1)=k(i)
    			k(i)=c
    		end if
    		end do
    	end do
     
    	do i=1,N
    	write(*,*)k(i)
    	end do	
     
     
          END
    En gros oui, par contre pour le tri il serait préférable d'utiliser une méthode éprouvée (et moins coûteuse, mais cela n'aurait d'importance que si on a besoin de beaucoup de valeurs) du type "tri à bulles".

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    en faite c'est ce que je veux trie, un ensemble des valeurs.
    voici le code
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    	CALL HYDROGRAMME(10.2,45.2,240)
     
     
    	END
     
    	SUBROUTINE HYDROGRAMME(Qmin,Qmax,T)
          INTEGER N,NI,NF,T
          real k(T)
          real Qmin, Qmax
          INTEGER*4 time(3)
          REAL rand,c
          call itime(time)
     
    	N=12
    	NI=1
    	NF=24
    	M=T/24
    	k(N)=Qmax
    	k(NI)=Qmin
     
    		i = rand(time(1) + time(2) + time(3))
    		DO i = NI+1, N-1
    		k(i) = (rand(0) * (Qmax  - Qmin) + Qmin)
    		ENDDO
     
    		DO i = N+1,NF
    		k(i) = (rand(0) * (Qmax  - Qmin) + Qmin)
    		ENDDO
     
    		do j=1,100 ! c pour s'assurer que le tableau est bien trié
    			do i=NI+1,N-1
    			if (k(i).LT.k(i-1)) then
    				c=k(i-1)
    				k(i-1)=k(i)
    				k(i)=c
    			end if
    			end do
     
    			do i=N+1,NF
    			if (k(i).GT.k(i-1)) then
    				c=k(i-1)
    				k(i-1)=k(i)
    				k(i)=c
    			end if
    			end do
    		END DO
     
    	DO L=1,M-1
    	N=N+24
    	NI=NI+24
    	NF=NF+24
    	k(N)=Qmax
    		DO i = NI, N-1
    		k(i) = (rand(0) * (Qmax  - Qmin) + Qmin)
    		ENDDO
     
    		DO i = N+1,NF
    		k(i) = (rand(0) * (Qmax  - Qmin) + Qmin)
    		ENDDO
     
    		do JJ=1,100 ! c pour s'assurer que le tableau est bien trié
    			do i=NI,N-1
    			if (k(i).LT.k(i-1)) then
    				c=k(i-1)
    				k(i-1)=k(i)
    				k(i)=c
    			end if
    			end do
     
    			do i=N+1,NF
    			if (k(i).GT.k(i-1)) then
    				c=k(i-1)
    				k(i-1)=k(i)
    				k(i)=c
    			end if
    			end do
    		END DO
    	end do
     
    	do i=1,T
    	write(*,*)i,k(i)
    	end do
     
          END
    explication: je veux avoir une allure croissante entre 0 et 12h et décroissant entre 12h et 24h puis a chaque période je veux générer des valeurs différentes des autre et en même temps avoir la même allure.
    T:temps max ici =240
    M=T/24 :période

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

Discussions similaires

  1. Distribution d'une valeur sur plusieurs variables de manière aléatoire
    Par farida.info2010 dans le forum Probabilités
    Réponses: 1
    Dernier message: 19/02/2013, 14h29
  2. [MVVM] Récupérer valeur listbox générée par une BDD
    Par edwix dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 16/11/2012, 11h59
  3. [AC-97] Afficher une valeur issue d'une table de manière aléatoire
    Par JazzKDU dans le forum IHM
    Réponses: 0
    Dernier message: 20/10/2009, 13h46
  4. Réponses: 9
    Dernier message: 22/05/2006, 09h17

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