Aller au contenu

Fortran


Spitfire_fr

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

oui voila, en fait les variables de type logical ( que je ne connaissais pas :/ ) stockent la valeur d'une expresion logique ( .true. ou .false. )

C'est utilisé pour simplifier la condition.

J'ai trouvé un site pas mal en cherchant :

http://www.enstimac.fr/~gaborit/lang/CoursDeFortran/

PS: de rien pour une fois que mes connaissances en fortran servent à quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

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:).

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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).

Lien vers le commentaire
Partager sur d’autres sites

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!! ;)

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

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

×
×
  • Créer...