Programmation en fortran help!!!

Résolu/Fermé
vash74 - 25 nov. 2008 à 02:16
 vash74 - 26 nov. 2008 à 13:54
Bonjour,

Voila je viens de faire mon premier programme en fortran, c'est un programme qui approxime numériquement une quadruple intégrale. Enfin bon j'ai une erreur dans une subroutine voici la partie du code qui pose problème :

subroutine gl016 (x,a,c,d)
double precision c,d,x(16),a(16), xx(8),aa(8)
data (xx(i),aa(i),i=1,8) /.9894009349916499325961541734D0 ,.2715245941175409485178057245D-1,.9445750230732325760779884155D0 ,.6225352303864789286284383699D-1,.8656312023878317438804678977D0 ,.9515851168249278480992510760D-1,.7554044083550030338951011948D0 ,.1246289712555338720524762821D0 ,.6178762444026437484466717640D0 ,.1495959888165767320815017305D0 ,.4580167776572273863424194429D0 ,.1691565193950025381893120790D0 ,.2816035507792589132304605014D0 ,.1826034150449235888667636679D0 ,.9501250983763744018531933542D-1,.1894506104550684962853967232D0/
dmc = .5D0*(d-c)
dpc = .5D0*(d+c)
do 2 i=1,8
ni = 17 - i
x(i) = -dmc*xx(i) + dpc
x(ni) = dmc*xx(i) + dpc
a(i) = dmc*aa(i)
2 a(ni) = dmc*aa(i)
return
end


Je précise qu'au niveau de la balise data tout ce qui est entre / et / est sur la meme ligne dans mon programme. Donc l'erreur se trouve a la ligne dmc = .5D0*(d-c) il me dit "parse error, unexpected end of statement, expecting '/'" et donc la je sais pas trop quoi faire.

merci d'avance pour votre aide...
A voir également:

8 réponses

Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377
25 nov. 2008 à 14:46
Bonjour
Essaie comme ceci :
data xx(1:8)/.9894009349916499325961541734D0,.2715245941175409485178057245D-1,&
&.9445750230732325760779884155D0,.6225352303864789286284383699D-1,&
&.8656312023878317438804678977D0,.9515851168249278480992510760D-1,&
&.7554044083550030338951011948D0,.1246289712555338720524762821D0/
data aa(1:8)/.6178762444026437484466717640D0,.1495959888165767320815017305D0,&
&.4580167776572273863424194429D0,.1691565193950025381893120790D0,&
&.2816035507792589132304605014D0,.1826034150449235888667636679D0,&
&.9501250983763744018531933542D-1,.1894506104550684962853967232D0/
Bonne journée
0
Merci de ton aide, mais ça ne marche pas, j'ai toujours la même erreur pour les deux balises data maintenant...
0
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377
25 nov. 2008 à 15:39
Je viens d'écrire exactement ce code et ça compile...
Quel est ton compilateur ?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
25 nov. 2008 à 15:53
Je ne connais pas l'instruction DATA. Mais je remarque que les nombres fournis contiennent beaucoup de décimales (28), or le type double en gère 15 et le type long double 20, il y a donc des nombres en trop. C'est peut être la cause de l'erreur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
j'utilise l'IDE force 2.0, le compilateur est G77 il me semble... l'as-tu compilé en fortran 95??
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
25 nov. 2008 à 17:01
ce 'est pas du fortran 77 !
0
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
25 nov. 2008 à 17:28
:-DDD
Je dois avouer que je n'ai jamais utilisé ce dinosaure du fortran, alors je ne sais même pas à quoi cela ressemble.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
25 nov. 2008 à 19:15
Bonsoir,

Même chose chez moi Force 2.0 (G77) , Ca ne compile pas !

--
Cordialement.

Cchristian.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
26 nov. 2008 à 08:43
pour moi, g77 c'est la compilateur fortran de gcc, à la norme du fortran 77 dans l'ensemble.
Ls caractéristiques du fortran 77, c'est entre autre que les 6 (environ) première colonnes ne doivent pas être utilisé pour le code, la première est pour dire que la ligne est en commantaire et la sixième pour dire que la ligne continue celle du dessus.
à cela il faut ajouter qu'au delà de la colonne 72 (environ) tout ce qui est écrit est aussi ignoré. Ce format viens des cartes perforées il parait.
Donc le code présenté ici ne devrai pas passer du tout.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
26 nov. 2008 à 11:10
Bonjour,

C'est après recadrage du texte qu'il subsistait malgré tout, des erreurs à la compilatioin :
Le texte ci-dessous passe maintenant à la compilation :
       data (xx(i),i=1,8,1) /
     S  .9894009349916499325961541734D0 ,
     S .2715245941175409485178057245D-1,
     S .9445750230732325760779884155D0,    
     S .6225352303864789286284383699D-1,
     S .8656312023878317438804678977D0 ,
     S .9515851168249278480992510760D-1,
     S .7554044083550030338951011948D0 ,
     S .1246289712555338720524762821D0  /
       data ( aa(j),j=1,8,1) /
     S .6178762444026437484466717640D0 ,
     S .1495959888165767320815017305D0 ,
     S .4580167776572273863424194429D0 ,
     S .1691565193950025381893120790D0 ,
     S .2816035507792589132304605014D0 ,
     S .1826034150449235888667636679D0 ,
     S .9501250983763744018531933542D-1,
     S .1894506104550684962853967232D0 / 

Je viens de refaire les tests, chez moi le problème était lié à un tiret présent dans certaines valeurs,
.9445750230732325760779884­-155D0
résultat d'un copier/coller sans doute car je ne les localise pas dans le texte original, une fois éliminés (voir ci-dessus) ça passe en compilation.
Le plus surprenant est qu'en rappatriant (de mon éditeur) la ligne ci-dessus comme je viens de le faire pour illustrer mon propos, le tiret disparait (j'ai du l'ajouter ici)......................... Je pense que cela vient de l'éditeur, je vais voir ça !

Pour information je "travaille" en mode IMPLICIT NONE, j'ai donc déclaré en INTEGER i et j. (j'ai préféré dégagé une variable j)
0
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377
25 nov. 2008 à 16:21
Je l'ai compilé avec gfortran.
Il n'est pas improbable que la syntaxe soit différente pour un compilateur de versions précédentes du fortran.
Dans ce cas essaie :
data (xx(i),i=1,8)/.9894009349916499325961541734D0,.2715245941175409485178057245D-1,&
&.9445750230732325760779884155D0,.6225352303864789286284383699D-1,&
&.8656312023878317438804678977D0,.9515851168249278480992510760D-1,&
&.7554044083550030338951011948D0,.1246289712555338720524762821D0/
data (aa(i),i=1,8)/.6178762444026437484466717640D0,.1495959888165767320815017305D0,&
&.4580167776572273863424194429D0,.1691565193950025381893120790D0,&
&.2816035507792589132304605014D0,.1826034150449235888667636679D0,&
&.9501250983763744018531933542D-1,.1894506104550684962853967232D0/
Cela compile toujours de cette manière. Mais si vraiment cela ne marche toujours pas, pense à prendre en compte la remarque de Char Snipeur. Je pensais que ça ne posait pas de problème et que les doubles étaient tronqués dans les cas où le nombre de décimales était trop grand, mais peut-être que cela dépend des compilateurs.
0
J'ai déjà essayé la dernière syntaxe que tu as mis mais j'ai toujours le même problème, j'ai définis ,es xx et aa un par un sans utiliser de de DATA c'est pas très propre mais au moins ça tourne...

Merci pour votre aide ;)
0
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 377
25 nov. 2008 à 16:36
Ah bon... :-(
Je ne vois vraiment pas ce qui n'allait pas, désolé de ne pas avoir pu trouver le souci alors.
Bonne soirée
0