[fortran] écrire résultat sur une seule ligne

Résolu/Fermé
fortran m'a tuer - 7 déc. 2008 à 16:05
 fortran m'a tuer - 11 déc. 2008 à 19:29
Bonjour,


j'ai un programme fortran à réaliser (une régression multilinéaire), et j'en suis déjà arriver à un stade assez avancé pour ce qui est de la programmation. Le point qui pose problème est l'affichage correct des résultats.
En fait, j'ai : un vecteur de chaines de caractères appelé "variable"
un vecteur de réel appelé "coeff"
et je dois afficher à l'écran : variable(1) = coeff(1) + coeff(2)variable(2) + coeff(3)variable(3) + ... + coeff(n)variable(n)

le problème, c'est que si je fais une boucle, on change de ligne à chaque tour de boucle. Dans l'exemple que j'étudie, il y a seulement 3 variables et 3 coeff, ce qui permet d'écrire, en faisant intervenir un format pour avoir le nombre de chiffres après la décimale voulu :
PRINT "(2(A),F6.2,2(A,F6.2,A))",TRIM(variable(1))," =",coeff(1)," +",coeff(2),TRIM(variable(2))," +",coeff(3),TRIM(variable(3))

Mais normalement un programme est sensé fonctionner pour n'importe quel jeu de donné, c'est-à-dire qu'il pourrait très bien y avoir 37 variables...^^
Je cherche donc à imprimer à l'écran tout ça, en utilisant un sous programme d'impression des résultats. Il faut aussi faire attention à ne pas mettre de "+" après la dernière variable, et le top du top serait de remplacer le "+" par un "-" quand le coeff est négatif (par ex, si coeff(i)<0 alors afficher "-",-coeff(i)).

Voilà, jespère que vous avez bien ompris mon problème et que vous pourrez m'aider !
Merci d'avance
A voir également:

8 réponses

fortran m'a tuer
7 déc. 2008 à 20:06
Personne qui peut m'aider ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
8 déc. 2008 à 10:16
hello
souvenir, souvenir, peut-être que :
mette un + comme premier caractère imprimé
ou un $ peut-etre
0
fortran m'a tuer
8 déc. 2008 à 15:32
Je ne vois pas ce que tu veux dire...
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
8 déc. 2008 à 15:36
PRINT "$(2(A),F6.2,.........
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 déc. 2008 à 15:51
Salut.
Fortran... comment rentre les choses faciles difficiles, je hais !
Mais bon, pour répondre à ton problème, la seule solution que je vois, c'est d'utiliser un format pour écrire tes données, peut être que là tu pourra lui préciser de ne pas faire de retour à la ligne. Sinon, tu peux essayer de concaténer ta chaine de caractère avant de l'afficher, si c'est possible, mais sans allocation dynamique de taille : bonne chance de pas sortir du domaine. Autre solution, qui marche mais qui peut être galère, cré toi une fonction C pour l'affichage. Voi là si tu veux plus de détail sur ce point :
http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html
0
fortran m'a tuer
8 déc. 2008 à 16:17
Merci à vous 2 pour vos réponses. J'ai essayé avec le $, ça ne marche pas. Pour ce qui est de la fonction C, c'est moyen car je dois utiliser uniquement fortran (et c'est le seul langage informatique où j'ai qques notions de base).

Sinon, j'ai trouvé un truc qui semble marcher :
PRINT*,TRIM(variable(1)),"=",coeff(1),("+",coeff(i),TRIM(variable(i)),i=2,nvariables)

où nvariables est le nombre de variables. Avec cette méthode, tout s'affiche bien sur une seule ligne et il n'y a pas de + après la dernière variable. En revanche, je n'ai pas réussi à avoir le format que je voulais (F6.2 : des nombres à 2 décimales et à maximum 6 caractères, c-à-d compris entre -99.99 et 999.99), ça semble marcher uniquement avec le format par défaut...
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
9 déc. 2008 à 02:47
Bonsoir,

Peux-tu me donner un exemple concret de ce que tu souhaites obtenir à l'affichage car j'éprouve quelques dificultés pour illustrer le problème, surtout en ce qui concerne la chronologie d'apparition des valeurs et des signes relativement aux deux sources "variables" et "coeff".

Il n'est pas impossible que j'ai fait en fortran quelque chose qui s'apparente à ce problème, quitte à faire un montage à partir de plusieurs programmes.
0
fortran m'a tuer
9 déc. 2008 à 19:01
Bonsoir

alors il y a une lecture des données, sur un fichier de ce type :
nombre de paramètres (chiffre)

x }
y }
z } toutes ces lettres sont stockées dans un vecteur de chaines de caractères ("variable",
t }dimension "nombre de paramètres"
u }
v }

5 }
4,2 }
5,26 } toutes ces valeurs sont stockées dans un vecteur de réels("coeff", dimension
-74 } "nombre de paramètres")
0,04 }
-2,78}

Et il faut afficher à la sortie :
x = 5 + 4,2 y + 5,26 z + -74 t + 0,04 u + -2,78 v

ou, mieux encore :
x = 5 + 4,2 y + 5,26 z - 74 t + 0,04 u - 2,78 v
mais ce n'est vraiment pas la peine d'être pointilleux à ce point à mon avis
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
10 déc. 2008 à 23:16
Bonsoir,

Ou en es-tu ? J'ai tardé à te répondre car j'étais occupé sur ce problème et je pensais toujours terminer dans l'heure qui suivait, mais ce n'était jamais possible.
J'ai fait quelques recherches sur brochure mais je n'ai rien trouvé de synthétique en Fortran 77 (du type de ce que tu as essayé PRINT *,..... TRIM.......) alors j'ai fait un petit développement qui malgré tout est assez conséquent (200 lignes environ hors commentaires). Alors si cela est toujours d'actualité et si cela t'intéresse je te le ferai parvenir. Nous pourrons toujours l'améliorer si nécessaire. De toute manière je lui trouverais bien une utilité tôt ou tard.
0
fortran m'a tuer > cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012
11 déc. 2008 à 16:59
Salut !

effectivement, tu t'es vraiment pris la tête sur ce problème à ce que je vois, merci beaucoup ! Ce que tu a fait m'intéresse (pour ma culture générale), mais je ne pense pas que je l'intègrerai à mon programme : je suis en 1ère année d'école d'ingénieur, dans une filière ou l'informatique ne fait partie de l'emploi du temps uniquement le 1er semestre...il ne s'agit donc pas de faire des programmes ultra perfectionnés (quand j'ai exposé mon problème au prof, il a répondu "n'allez pas à ce point dans le détail"^^)

Merci pour ton travail, si tu veux tu peux m'envoyer ce que tu as fait à jrcolson arobase voila.fr
J'espère que tu ne considéreras pas que tes efforts ont été inutiles... :-)
0
fortran m'a tuer > cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012
11 déc. 2008 à 17:05
je viens de voir le 200 lignes "hors commentaires"... les programmes que je dois réaliser font à peu près 600 lignes avec commentaires, et il y a près de 50% de commentaires...(et on doit réaliser seulement 2 programmes comme ça dans le semestre). On ne se situe pas du tout à la même échelle pour ce qui est de la programmation là, ya un léger clivage débutant/expert je crois !

++
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > fortran m'a tuer
11 déc. 2008 à 19:07
Bonsoir,

J'espère que tu ne considéreras pas que tes efforts ont été inutiles... --

Non, pas du tout, le problème est intéressant et suffisamment général pour être réutilisé, par exemple en l'intégrant dans des applications d'édition de résultats.

Je t'ai fait parvenir un document à l'adresse que tu as indiquée.

--
Cordialement.

Cchristian.
0
cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131 > fortran m'a tuer
11 déc. 2008 à 19:13
Je n'ai aucun mérite c'était mon métier, encore que pour Fortran je débute bien que je l'ai appris en 1969 sans l'avoir jamais pratiqué.

Si je peux t'aider, n'hésite pas, bon courage !
0