Bonjour à tous,
Je souhaiterais convertir un petit programme Fortran en C.
Désolé pour le manque de clarté éventuelle, à ma décharge, ce n'est pas moi l'auteur de cette fonction Fortran.
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 real*8 function gint (g1,g2,eps,pp,Re,s1,c1,ssig,csig,along1) implicit real*8 (a-h,o-z) n = 8 1 h = (g2-g1) / dfloat(n) hh = 0.5D0*h g = h*0.5773502691896D0 y = g1 + (h-g)*0.5D0 gint2 = eld(y,pp,Re,s1,c1,ssig,csig,along1)+ + eld(y+g,pp,Re,s1,c1,ssig,csig,along1) do m = 1,n-1 gint2 = gint2 + eld(y+h-g,pp,Re,s1,c1,ssig,csig,along1)+ + eld(y+h,pp,Re,s1,c1,ssig,csig,along1) y = y + h enddo gint2 = gint2*hh if (n.eq.8.or.abs(gint1-gint2).gt.eps*abs(gint1)) then n = n*2 gint1 = gint2 if (n.lt.1024) goto 1 endif gint = gint2+(gint2-gint1)/15.0D0 return end
J'ai pensé à la boucle do_while sur la valeur de n (inférieure à 1024)
Le problème est que ce goto est situé à l'intérieur d'une boucle IF.
Je crois pas qu'il soit possible de fermer avec le while du do_while à l'intérieur du if(n eq8 etc...) converti en C, et si je mets ce while à l'extérieur, le souci est que ce IF peut faire tourner la boucle à l'infini, pour peu que la 2ème condition ne soit pas réalisée.
Je patauge un peu, je ne demande pas à ce qu'on me serve le programme en C sur un plateau d'argent, mais si je pouvais avoir quelques pistes sur la structure à adopter pour m'affranchir de ce goto...
Je vous remercie de vos lumières, en vous souhaitant un bon week-end.
Partager