Aller au contenu

Fortran


Spitfire_fr

Messages recommandés

Posté(e)

Salut à tous (je suis new!!!)

Je cherche désespérement une info pour du Frotran :francais:

(c'est pour mes concours de fin d'année, alors, on rigole pas, c'est sérieux!)

Mon pb est le suivant:

j'ai un prog en Frotran que je convertis en Maple, et j'ai cette ligne

if (.NOT. CONVRG) GO TO 220

le go to 220, ça va, j'ai compris. Par contre, le not converg, non. convrg c'est défini par CONVERG=.FALSE, donc je go à 220 si quoi????

j'ai le même genre de procédure un peu plus loin avec une autre variable PRINTU qui n'est pas défini (si, juste LOGICAL PRINTU). Alors if (PRINTU) go to... je go à l'étiquette si quoi???

Vola, si qqn à une idée.

MERCI

Posté(e)

Je crois que j'ai trouvé, en fait on a pas l'habitude de creer des conditions comme ca, si t'es CONVRG et PRINTU sont bien des noms de variables, alors

si (non convrg ) = 1 go to 220

et si PRINTU = 1 go to ...

Posté(e)

si (non convrg ) = 1 go to 220

=1 ça se traduite par yes? En fait, si j'ai convrg=false, alors je vais en 220, et si j'ai printu=true, je vais à l'autre étiquette?

(de tte façon, printu et convrg ne peuvent avoir que true ou false comme valeur car ils sont défini comme suit convrg = ((un chiffre) .LT. (un ature chiffre)))

Merci de me répondre, c'est super sympa!!!! :D

Posté(e)

J'ai étudié ça en 1983, je cois ! :transpi:

Ben j'ai tout oublié ! :non:

Ah si, je me rappelle qu'il y avait des sections !... Ah ben non, c'était en Cobol, ça ! Crébordel, qu'est-ce qu'on devient vieux ! :chinois:

Posté(e)
J'ai étudié ça en 1983, je cois ! :transpi:

Ben j'ai tout oublié ! :pleure:

Ah si, je me rappelle qu'il y avait des sections !... Ah ben non, c'était en Cobol, ça ! Crébordel, qu'est-ce qu'on devient vieux ! ;)

Je programme aussi en cobol, cobol ans-85 pour etre précis...

Posté(e)

En même temps, les GOTO, c'est très rare d'utilisation, sauf à programmer comme un pied :p.

NB : j'ai aussi fait du fortran77, mais ça remonte :reflechis:.

NB2 : comme cela, je te dirais aussi d'utiliser des booleans pour tes conditions et non des renvois anarchiques :p.

édit : tiens, je suis dans la catégorie prog, bizarre :mdr: (je me croyais dans la cat. Linux :modoreussi:).

Posté(e)

Salut,

Le Fortran77 est encore massivement utilisé par les scientifiques. Ca peut donc encore servir de l'apprendre.

Les variables logical prennent pour valeur .true. ou .false.

L'instruction suivant le if n'est exécutée que si la condition, dans ton cas .NOT. CONVRG, a pour valeur .true. Elle est donc exécutée si CONVRG a pour valeur .false.

De la même façon, il faut que PRINTU ait pour valeur .true. pour que l'instruction suivant le if soit exécutée. Il faut donc que PRINTU soit initialisée à un moment ou à un autre (il est déconseillé de laisser le compilateur se charger de l'initialisation des variables).

Enfin, en ce qui concerne les goto, le Fortran77 étant dépourvu d'instructions de type tant que, on est parfois obligé d'y recourir, même en programmant correctement.

Posté(e)

oui pour les boucle de type while ( en C ), pour les reproduire en fortran nous on a appris de la facon suivante :

Do 10

if ( condition de sortie ) goto 20

10 continue

20 continue

Maintenant il y a peut-etre mieux...

Puis je crois que les scientifiques utilisent la norme 97 et plus la 77

Posté(e)

Non non, je crois que la plupart utilise encore du 77 "amélioré" (les compilateurs récents acceptent plus de trucs que les vieux). Assez peu de gens font du 90, du 95 ou je ne sais quoi encore. Je pense que la principale raison est que beaucoup de codes scientifiques sont écrits en 77 et que les traduire demanderaient pas mal de boulot.

Par exemple, je code à peu près tout en Fortran77 (simulation en astrophysique et en physique des lasers). Et des collègues travaillent comme des fous pour réécrire un code de calcul éléments finis en C++ (la version originale est en Fortran77).

Posté(e)

ouaou, des spécialistes du fortran.

;);)

Bah j'ai une deuxième question: à la fin d'une boucle if, j'ai un RETURN, mais le RETURN revoie où? Au début du programme, à la fin de la boucle?...

Par exemple, je code à peu près tout en Fortran77 (simulation en astrophysique et en physique des lasers)

Ouaou...astrophysique, physique des lasers, c'est du hut vol tout ça. :zarb: Moi je me contente des écoulements autour d'ailes d'avions, c'est plus simple!! ;)

Posté(e)

Spécialiste, c'est beaucoup dire :zarb:

Le RETURN te fais sortir de ta procédure et te renvoie juste après l'appel à cette procédure dans la procédure appelante.

Exemple :

Program principal

...

Call toto(a,b)

...

End

Subroutine toto(a,b)

...

If(a.GT.1) RETURN

...

END

Si a est plus grand que 1, tu retourne immédiatement juste après le Call toto dans le programme pricipal sans exécuter la fin de ta procédure.

Et pour l'astro et les lasers, c'est pas toujours si compliqué. Et les écoulements, ça peut être bien méchant ;)

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...