Nombres de chiffres significatif avec fortran
Résolu/Fermé
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
-
7 juin 2012 à 16:44
VauRDeC Messages postés 202 Date d'inscription jeudi 27 août 2009 Statut Membre Dernière intervention 8 juin 2012 - 8 juin 2012 à 17:12
VauRDeC Messages postés 202 Date d'inscription jeudi 27 août 2009 Statut Membre Dernière intervention 8 juin 2012 - 8 juin 2012 à 17:12
A voir également:
- Nombres de chiffres significatif avec fortran
- Nombre de combinaison possible avec 6 chiffres de 0 à 9 - Forum loisirs/vie pratique
- Tous les code possible de 0 à 9 (4 chiffres ) - Forum Jeux vidéo
- Nombre de combinaison possible avec 4 chiffres - Forum Programmation
- Identifiant pôle emploi 7 chiffres - Forum Réseaux sociaux
- Combien de combinaison possible avec 3 chiffres - Forum Programmation
10 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
7 juin 2012 à 16:53
7 juin 2012 à 16:53
hello
I c'est pout integer non ?
essayer F2.2
I c'est pout integer non ?
essayer F2.2
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
8 juin 2012 à 07:56
8 juin 2012 à 07:56
montre le code
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
8 juin 2012 à 11:10
8 juin 2012 à 11:10
https://pages.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html
je dirais "E2.1E2".
je dirais "E2.1E2".
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
7 juin 2012 à 17:01
7 juin 2012 à 17:01
Merci pour la réponse.
Malheureusement ça ne marche pas :(
Malheureusement ça ne marche pas :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 11:27
8 juin 2012 à 11:27
Merci pour vos réponses les gens.
J'ai aussi été sur le site que tu me conseilles Char Sniper mais je ne comprends pas non plus pourquoi ça ne marche pas...
Je vous montre le code, comme à mon habitude il doit y avoir un truc que je n'ai pas du bien réglé...
Le voici:
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
rang = beta(k)
write(numero,FMT='(??.??)') rang
print*,"numero=",numero
enddo
Je vous évite le reste car je me sers de ça pour faire un truc inutilement compliqué :)
Merci encore
VaµRDeC
J'ai aussi été sur le site que tu me conseilles Char Sniper mais je ne comprends pas non plus pourquoi ça ne marche pas...
Je vous montre le code, comme à mon habitude il doit y avoir un truc que je n'ai pas du bien réglé...
Le voici:
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
rang = beta(k)
write(numero,FMT='(??.??)') rang
print*,"numero=",numero
enddo
Je vous évite le reste car je me sers de ça pour faire un truc inutilement compliqué :)
Merci encore
VaµRDeC
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 11:31
8 juin 2012 à 11:31
J'oubliais,
CHARACTER(len=3) :: numero
Certaines fois il me donne l'erreur : " Fortran runtime error: End of record "
D'autres fois, il m'affiche : "numero=***"
CHARACTER(len=3) :: numero
Certaines fois il me donne l'erreur : " Fortran runtime error: End of record "
D'autres fois, il m'affiche : "numero=***"
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
8 juin 2012 à 11:33
8 juin 2012 à 11:33
pour plus de clarté, donne le résultat que tu attends.
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
8 juin 2012 à 12:04
8 juin 2012 à 12:04
et avec ?
write(numero,FMT='(F4.2)') rang
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 12:22
8 juin 2012 à 12:22
Déjà essayé ducek et ça ne marche pas...
Bon 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 l'aurez compris tout ce qu'il y a après le _ c'est les nombres qui sont dans le vecteurs beta que j'ai posté tout à l'heure.
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'ést à dire qu'un moment j'en aurai des centaines de sous répertoires beta!!
Donc voici 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,*) wr(i), wi(i)
enddo
close(30)
enddo
Puis, je trie et je les reclasse dans le fichier "resultats.dat" correspondant...
Voilà, j'espère que ce n'est pas confus...
VaµRDeC
Bon 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 l'aurez compris tout ce qu'il y a après le _ c'est les nombres qui sont dans le vecteurs beta que j'ai posté tout à l'heure.
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'ést à dire qu'un moment j'en aurai des centaines de sous répertoires beta!!
Donc voici 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,*) wr(i), wi(i)
enddo
close(30)
enddo
Puis, je trie et je les reclasse dans le fichier "resultats.dat" correspondant...
Voilà, j'espère que ce n'est pas confus...
VaµRDeC
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
8 juin 2012 à 12:40
8 juin 2012 à 12:40
ok, a peu près. tu obtiens quoi en mettant 2.2 qui ne va pas ?
as tu essayer F6.2 ?
as tu essayer F6.2 ?
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 13:55
8 juin 2012 à 13:55
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...
Je vous mets en commentaire quand ça marche et quand ça ne marche pas...
Vous est-il possible de tester, de votre côté, ce que je fais??
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...
Je vous mets en commentaire quand ça marche et quand ça ne marche pas...
Vous est-il possible de tester, de votre côté, ce que je fais??
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 13:59
8 juin 2012 à 13:59
Voici:
At line 42 of file spectre.f90 ! Cette ligne c'est là où il y a write(numero,FMT etc...
Fortran runtime error: End of record
At line 42 of file spectre.f90 ! Cette ligne c'est là où il y a write(numero,FMT etc...
Fortran runtime error: End of record
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 8/06/2012 à 14:08
Modifié par dubcek le 8/06/2012 à 14:08
agrandir numero CHARACTER(len=10) ?
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 14:27
8 juin 2012 à 14:27
Nickel!!!!!!!!!!! Ça marche!!!! avec FMT='(F4.1)'
Mais il y a quand même un (gros) souci, il arrondi et c'est exactement ce que je ne veux pas :(
Par exemple, pour un sous-répertoire beta_10.17 il cherche beta_10.2
Une remarque au passage, il ne considère pas les entiers avec un chiffre dans la partie entière. Par exemple, ça ne marche pas pour beta_8.12 (mais pour ça je peux m'arranger)..
Mais il y a quand même un (gros) souci, il arrondi et c'est exactement ce que je ne veux pas :(
Par exemple, pour un sous-répertoire beta_10.17 il cherche beta_10.2
Une remarque au passage, il ne considère pas les entiers avec un chiffre dans la partie entière. Par exemple, ça ne marche pas pour beta_8.12 (mais pour ça je peux m'arranger)..
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
8 juin 2012 à 14:29
8 juin 2012 à 14:29
et avec FMT='(F5.2)'
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 14:38
8 juin 2012 à 14:38
Il garde les deux chiffres après la virgule.
S'il y en a trois, il arrondi pour la deuxième...
S'il y en a trois, il arrondi pour la deuxième...
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
Modifié par VauRDeC le 8/06/2012 à 14:42
Modifié par VauRDeC le 8/06/2012 à 14:42
Malgré les petits détails qui restent à régler je considère que mon problème est résolu.
Je vais me débrouiller dans ma façon de créer les sous répertoires pour qu'ils puissent être traités par cette partie de mon code fortran.
Merci énormément pour votre aide dubcek et Char Snipeur.
VaµRDeC
Je vais me débrouiller dans ma façon de créer les sous répertoires pour qu'ils puissent être traités par cette partie de mon code fortran.
Merci énormément pour votre aide dubcek et Char Snipeur.
VaµRDeC
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
8 juin 2012 à 15:04
8 juin 2012 à 15:04
en fait, pourquoi utiliser des réels ? Tu ne peut pas utiliser des tableaux de string ? Sinon tu peux essayer en utilisant deux entier à la place d'un reel (pour l'arrondi en particulier).
Clairement le fortran n'est pas le mieux pour faire ce genre de traitement. Nous ne savons pas ce que tu veux faire exactement, mais de ce que tu en dit il y a plus simple. Dans un environnement POSIX, tu combines un "for ls beta_*" avec un sort et ça suffit.
Clairement le fortran n'est pas le mieux pour faire ce genre de traitement. Nous ne savons pas ce que tu veux faire exactement, mais de ce que tu en dit il y a plus simple. Dans un environnement POSIX, tu combines un "for ls beta_*" avec un sort et ça suffit.
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 15:27
8 juin 2012 à 15:27
Je ne sais pas ce que c'est que l'environnement POSIX. D'ailleurs, je suis un peu contraint à me servir de fortran parce que tout ce fait dans ce langage dans mon code et c'est d'ailleurs le seul dont je me sers.
D'autre part, comme j'ai besoin de trier, je me sers donc de fortran. C'est pour ça que j'ai dit "inutilement compliqué" :) J'imagine bien qu'il y a plus simple comme façon de faire.
À moins qu'il me soit possible de les combiner...
D'autre part, comme j'ai besoin de trier, je me sers donc de fortran. C'est pour ça que j'ai dit "inutilement compliqué" :) J'imagine bien qu'il y a plus simple comme façon de faire.
À moins qu'il me soit possible de les combiner...
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
8 juin 2012 à 15:54
8 juin 2012 à 15:54
POSIX : UNIX LINUX MACOSX BSD.
'sort' est une commande qui trie. Il doit être possible de combiner ce que tu veux. Le plus gros problème c'est fortran. Enfin, tu fais du F90, ça limite les ennuis.
'sort' est une commande qui trie. Il doit être possible de combiner ce que tu veux. Le plus gros problème c'est fortran. Enfin, tu fais du F90, ça limite les ennuis.
VauRDeC
Messages postés
202
Date d'inscription
jeudi 27 août 2009
Statut
Membre
Dernière intervention
8 juin 2012
3
8 juin 2012 à 17:12
8 juin 2012 à 17:12
J'ai trouvé!! Toujours avec fortran!
Il fallait simplement que je transforme mon vecteur beta en chaine de caractère...
character (5) :: beta(nb) = /('8.7 ','10.0 ','12.0 ','12.5 ','13.0 ','13.5 ','14.0 ','16.0 ','18.0 ','20.0 '/)
Tout simplement^^
Merci énormément les gars
A Bientôt pour de nouvelles galères :)
VaµRDeC
Il fallait simplement que je transforme mon vecteur beta en chaine de caractère...
character (5) :: beta(nb) = /('8.7 ','10.0 ','12.0 ','12.5 ','13.0 ','13.5 ','14.0 ','16.0 ','18.0 ','20.0 '/)
Tout simplement^^
Merci énormément les gars
A Bientôt pour de nouvelles galères :)
VaµRDeC