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 :

Nombres de chiffres significatif avec fortran


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Nombres de chiffres significatif avec fortran
    Bonjour,

    Contrairement à ce que la majorité gens, en fait je cherche à réduire le nombre de chiffres après la virgule de mes réel.

    Donc ce que je veux, c'est de considérer un certains nombres de chiffres après la virgule de mes réels sans pour autant vouloir les arrondir...
    Par exemple, si j'ai "pi" je cherche une option de write ou read qui me donnerait les 3 premiers chiffres par exemple, ou même rien que le premier, c.a.d je voudrais qu'il me donne 3,1 et non 3,10000 par exemple.

    J'ai trouvé une option F2.2 de write mais ça ne marche pas à tout les coups...

    Merci d'avance

    VaµRDeC

  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!
    J'ai trouvé une option F2.2 de write mais ça ne marche pas à tout les coups...
    Qu'est-ce qui ne marche pas? Donne-nous des exemples.
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci pour votre réponse
    Je vais donc vous expliquer ce que je veux faire...

    J'ai un répertoire qui contient des sous répertoires nommés : beta_9 ou beta_10 ou encore beta_12.5, vous comprendrez tout ce qu'il y a après le _ c'est les nombres qui sont dans le vecteurs beta que j'ai posté en bas.
    Alors dans ces sous répertoires, il y a des fichiers nommés par exemple "resultats.dat", qui contiennent des colonnes de nombres que je voudrais trier...
    J'aimerai donc écrire un code fortran qui me ferait tout ça tout seul, au lieu de m'embêter à le compiler pour chaque ficher "resulats.dat" dans chacun de mes sous répertoire beta... C'est à dire qu'un moment j'en aurai des centaines de sous répertoires beta!!

    Donc voici un bout de mon code qui ferait tout ce job, je vous évite les déclarations et tout (je sais que l'erreur ne viens pas de là):

    beta = (/8.7,10.0,12.0,12.5,13.0,13.5,14.0,16.0,18.0,20.0/)
    do k = 1, nb ! nb = la dimension de mon vecteur beta
    rang = beta(k)
    write(numero,FMT='(??.??)') rang
    print*,"numero=",numero ! Pour vérifier que ça a bien marché
    open(30,file="REPERT/beta"//"_"//trim(numero)//"/resultats.dat",form='formatted')
    do i=1,nk ! nk = le nombre de sous répertoires beta dans REPERT
    read(30,*) a(i), b(i)
    enddo
    close(30)
    enddo

    Puis, je trie et je les reclasse dans le fichier "resultats.dat" correspondant...

    Pour l'instant, la seul solution pour ça marche plus ou moins, c'est que je déclare la variable "rang" comme integer et que je mette "FMT='(I2.2)'".
    Le souci avec cette méthode, c'est qu'il ne va pas tenir compte des sous répertoires beta_Y.X avec Y quelconque et X différent de zéro, par exemple les beat_12.5 ou beta_13.4 mais le reste c'est OK...

    Dès que je veux mettre des trucs avec F (genre F6.2 par exemple) je déclare "rang" comme real et ça ne marche plus...

    Voilà, j'espère que ce n'est pas confus...

    VaµRDeC

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    D'où viennent tes nombres beta ? Sont-ils externes à ton programme ? Résultats numériques d'une autre partie du programme ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Ils viennent effectivement d'un autre programme...

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Pourquoi ne les passes-tu pas en caractères ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    integer, parameter :: nb=10
    character (5) :: beta(nb) = /('8.7  ','10.0 ','12.0 ','12.5 ','13.0 ','13.5 ','14.0 ','16.0 ','18.0 ','20.0 '/)
    charaacter (5) rang
    do k = 1, nb ! nb = la dimension de mon vecteur beta
      rang = beta(k)
      open(30,file="REPERT/beta_"//trim(Rang)//"/resultats.dat",form='formatted')
      do i=1,nk ! nk = le nombre de sous répertoires beta dans REPERT
        read(30,*) a(i), b(i)
      enddo
      close(30)
    enddo

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Nickel
    Je ne sais pas non plus pourquoi je ne l'ai pas fait
    Maintenant, faudrait que je trouve un moyen pour introduire ce que je récupère comme valeur pour beta et les mette dans cette chaine de caractère.

    Merci énormément!

    VaµRDeC

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par VauRDeC Voir le message
    Maintenant, faudrait que je trouve un moyen pour introduire ce que je récupère comme valeur pour beta et les mette dans cette chaine de caractère.
    Tu rediriges un "ls beta*" (ou dir beta* si Windows) dans un fichier, puis tu lis le fichier par ton programme Fortran qui décode les entrées...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/12/2012, 15h31
  2. Réponses: 28
    Dernier message: 03/06/2009, 09h31
  3. nombre de chiffres significatifs
    Par mitmit dans le forum SAS Base
    Réponses: 4
    Dernier message: 25/01/2008, 10h29
  4. nombre de chiffres significatifs variable
    Par kamouminator dans le forum C
    Réponses: 4
    Dernier message: 07/11/2006, 14h14
  5. nombre de chiffres significatifs
    Par pianpif dans le forum Langage
    Réponses: 4
    Dernier message: 06/07/2006, 08h51

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