Bonjour à tous,

Je souhaiterais convertir un petit programme Fortran en C.

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
Désolé pour le manque de clarté éventuelle, à ma décharge, ce n'est pas moi l'auteur de cette fonction Fortran.

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.