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 :

Variation d'une condition dans un IF


Sujet :

Fortran

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Variation d'une condition dans un IF
    Bonjour
    j'ai commencé à utiliser Fortran y a quelques semaines seulement, et étant donné qu'on l'utilise que faire du calcul de physique stats, on a vu que les choses de bases.

    Voici mon programme :
    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 analyse
    implicit none
     
    integer i
    double precision somme
     
    somme=0
    open(11,file='valeur_vitesse')
    do i=1,188
    read(11,*)vitesse(i)
    if(vitesse(i).lt.-1000)then
    somme=somme+1
    endif
    enddo
     
    print *,'La cumulee pour Vx=-1000 est',somme/188
    end
    Mon fichier valeur_vitesse est composé d'un unique colonne avec des valeurs de vitesses.

    Ce que je voudrais, c'est faire varier la valeur -1000 dans if(vitesse(i).lt.-1000) entre -1000 et 1000.

    J'avais essayé de rajouter une boucle pour le faire varier,comme ci-dessous, mais ça a jamais fonctionné.

    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
     
    program analyse
    implicit none
     
    integer i
    integer vx
    double precision somme
     
    somme=0
    open(11,file='valeur_vitesse')
    do vx=-1000,1000
    do i=1,188
    read(11,*)vitesse(i)
    if(vitesse(i).lt.vx)then
    somme=somme+1
    endif
    enddo
    print *,'La cumulee pour Vx=',vx,somme/188
    enddo
     
    end
    J'imagine que ça doit pas être compliqué à faire mais j'ai pas assez de vécu en Fortran pour voir où est le problème

    J'espère que vous pourrez me trouver cette solution.
    Merci d'avance, Frédérick.

  2. #2
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    Salut,

    Le problème principal, que tu rencontre est que tu fais k boucles pour lire un fichier de k lignes (jusque là tout va bien), mais le truc c'est que ces k boucles sont dans n autres boucles, donc à la fin de la première boucle sur les n, tu arrives à la fin de ton fichier, au début de la seconde boucle sur n tu essayes donc de lire la k+1 ème ligne de ton fichier qui n'en a que k.

    + tu as oublié de déclarer le tableau vitesse (integer, dimension(ta_dimension) :: vitesse)
    + tu n'as pas fermé ton fichier (close(unit_de_ton_fichier))

    Le mieux je pense est que tu fasses une première boucle pour lire ton fichier et sauvegarder les données dans un tableau puis dans une seconde boucle tu feras le traitement des données.

    En espérant avoir éclairé ta lanterne, bon week end et bon travail
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    J'ai tenté une modif avec ce que tu m'as dit mais j'ai pas réussi
    Voilà ce que j'ai essayé :
    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
     
    program analyse
    implicit none
     
    integer i
    double precision somme
    integer vx
    double precision vitesse(1000)
     
    open(11,file='valeur_vitesse')
    do i=1,188
    read(11,*)vitesse(i)
    enddo
    close(11)
     
    somme=0
    open(12,file='sortie')
    do vx=-1000,1000
    if(vitesse(i).lt.vx)then
    somme=somme+1
    endif
    enddo
    write(12,*)vx,somme
    enddo
    close(12)
    end
    Pour avoir une bonne idée de ce que je veux faire, j'ai un programme qui fonctionne bien mais est trop long :

    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
     
    program analyse
    implicit none
     
    integer i
    integer x
    double precision somme
    double precision somme1
    double precision somme2
    double precision somme3
    double precision somme4
    double precision somme5
    double precision somme6
    double precision somme7
    double precision somme8
    double precision vitesse(1000)
     
    somme=0
    open(11,file='valeur_vitesse')
    do i=1,188
    read(11,*)vitesse(i)
    if(vitesse(i).lt.-1000)then
    somme8=somme8+1
    endif
    if(vitesse(i).lt.-800)then
    somme7=somme7+1
    endif
    if(vitesse(i).lt.-500)then
    somme6=somme6+1
    endif
    if(vitesse(i).lt.-300)then
    somme=somme+1
    endif
    if(vitesse(i).lt.0)then
    somme1=somme1+1
    endif
    if(vitesse(i).lt.233)then
    somme2=somme2+1
    endif
    if(vitesse(i).lt.541)then
    somme3=somme3+1
    endif
    if(vitesse(i).lt.700)then
    somme4=somme4+1
    endif
    if(vitesse(i).lt.911)then
    somme5=somme5+1
    endif
    enddo
     
    print *,'La cumulee pour Vx=-1000 est',somme8/188
    print *,'La cumulee pour Vx=-800 est',somme7/188
    print *,'La cumulee pour Vx=-500 est',somme6/188
    print *,'La cumulee pour Vx=-300 est',somme/188
    print *,'La cumulee pour Vx=0 est',somme1/188
    print *,'La cumulee pour Vx=233 est',somme2/188
    print *,'La cumulee pour Vx=541 est',somme3/188
    print *,'La cumulee pour Vx=700 est',somme4/188
    print *,'La cumulee pour Vx=911 est',somme5/188
    end
    Si quelqu'un peut m'aider !
    Merci d'avance.

  4. #4
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    … tu as tous les ingrédients, il te manque juste… un peu de sommeil somme1, somme2, somme3 et si on mettait tout ça dans un tableau on pourrait ensuite faire une boucle et réduire le code ! + un autre truc qui peut être sympathique est de faire un tri de ta liste de vitesse pour aller encore plus vite puisque tu n'aurais plus qu'un seul balayage de ton tableau à faire pour savoir combien de vitesses de ta liste sont inférieures à une vitesse donnée.

    Bonne nuit !
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Problème résolu !

    Je poste mon programme, si ça peut aider quelqu'un plus tard, qui sait.

    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
     
    program analyse
    implicit none
     
    integer i
    integer vx
    double precision somme
    double precision vitesse(1000)
     
    do vx=-2500,1500
    somme=0
    open(11,file='valeur_vitesse')
    do i=1,188
    read(11,*)vitesse(i)
    if(vitesse(i).lt.vx)then
    somme=somme+1
    endif
    enddo
    open(12,file='resultat')
    write (12,*),vx,somme/188
    rewind(11)
    enddo
    close(11)
    close(12)
    end
    Je ne sais pas si c'est bien écrit mais dans tous les cas, ça fonctionne comme je le souhaite
    Merci à toi de m'avoir éclairer

    Bon dimanche, Frédérick.

Discussions similaires

  1. Débutant : Définir une condition dans une zone de texte
    Par OlivierC69 dans le forum Access
    Réponses: 5
    Dernier message: 11/08/2006, 23h02
  2. mettre une condition dans l'ajout de données
    Par ash_rmy dans le forum Access
    Réponses: 2
    Dernier message: 27/07/2006, 13h29
  3. Affichage selon une condition dans un DBGRID !
    Par obon dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/04/2006, 09h26
  4. Peut on insérer une condition dans une requête ?
    Par MITCH31 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/09/2005, 18h26
  5. Introduire une condition dans une requete
    Par DeezerD dans le forum Langage SQL
    Réponses: 9
    Dernier message: 12/10/2004, 18h13

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