Posté(e) le 16 février 200520 a Salut à tous (je suis new!!!) Je cherche désespérement une info pour du Frotran (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) le 16 février 200520 a Heu c'est en quel norme ton fortran ? Je sais programmer en Fortran 77 et j'ai jamais vu ca...
Posté(e) le 16 février 200520 a Auteur fortran 77...ça m'ennui réellement parce que c'est assez important...
Posté(e) le 17 février 200520 a 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) le 18 février 200520 a Auteur 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!!!!
Posté(e) le 18 février 200520 a 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... Modifié le 18 février 200520 a par LePhasme
Posté(e) le 19 février 200520 a J'ai étudié ça en 1983, je cois ! Ben j'ai tout oublié ! 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 !
Posté(e) le 20 février 200520 a J'ai étudié ça en 1983, je cois ! Ben j'ai tout oublié ! 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) le 21 février 200520 a Auteur Le phasme, tu fais quoi dans la vie pour utiliser tous ces programmes???
Posté(e) le 21 février 200520 a En même temps, les GOTO, c'est très rare d'utilisation, sauf à programmer comme un pied . NB : j'ai aussi fait du fortran77, mais ça remonte . NB2 : comme cela, je te dirais aussi d'utiliser des booleans pour tes conditions et non des renvois anarchiques . édit : tiens, je suis dans la catégorie prog, bizarre (je me croyais dans la cat. Linux ). Modifié le 21 février 200520 a par j_c_p
Posté(e) le 23 février 200520 a 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) le 23 février 200520 a 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 Modifié le 23 février 200520 a par LePhasme
Posté(e) le 24 février 200520 a 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) le 24 février 200520 a Auteur 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. Moi je me contente des écoulements autour d'ailes d'avions, c'est plus simple!!
Posté(e) le 24 février 200520 a Spécialiste, c'est beaucoup dire 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
Posté(e) le 24 février 200520 a Tu peux télécharger une petite doc sur le Fortran que j'aime bien ici. C'est fait par des gens de l'Université de Rennes qui savent de quoi ils parlent
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.