Lu a tous,
Je souhaites afficher une variable dans un texte mais tout cela dans la meme ligne.
J'ai essayé Disp "Texte",variable,"Text" mais ça affiche sur 3 lignes.
Sinon j'ai réussi avec des output mais ça fait pas pro^pre et si la variable est plus grande que prévue, ça m'ecrase le texte.

En gros, je veux afficher une variable au mileu d'un exte et ceci proprement smile
Avec Text (mais c'est seulement sur l'ecran graphique).
Syntaxe : Text("BIDULE",variable,"BIDULE")

Par contre c'est pas possible dans l'ecran home (a part en pas tres propre avec Output).
Pour le moment je fais en pas très propre avec output.
Et sinon ya un moyen simple que le output se décale en fontion de la longueur de la variable ?
Sinon merci, je vais essayer avec l'ecran graphique meme si ça ne m'arrange pas :P
Et sinon ya un moyen simple que le output se décale en fontion de la longueur de la variable

Ouaip, faut utiliser le log (décimal ) pour ça.

En gros, int(log(x)+1) te donne le nombre de "cractère" que fait ta variable.
Tu multipli ce nombre par la largeur de l'écran (6 ou qqch comme ça..), et t'a gagné.

ça te donne un truc genre:

Output(X,Y,A)
Output(Z,Y+6*int(log(A)+1),"hello world..")

Je te laisse rebricoler pour rajouter espaces etc, une fois le principe compris wink.

( bha vi en fait la focntion logrithme décimle est plus ou moins la fonction réciproque de (10^), et donc en gros la partier entière du log te donne la première puissance de 10 inférieur ou égale à ton nombre. ON rajoute 1 pour avoir l'égalité.
Mais atention, log(0) = - infiny, ce qui peut poser quelques problémes pour l'affichage grin. Traite donc le cas A=0 a part s'il existe.)
J'ai pas bien compris ce que tu m'as dit very
La j'ai fait un truc comme ça
Output(1,1+P,A)
Et je fais varier p en fonction de la gradeur de 2 de mes variables
mais ça rajoute plein de code parce que je le teste plusieurs fois.
if a >9 <10 >999 >9999.
Bha mon poste est claire pourtant, non ??

Tu veut faire varier P en fonction de A ?
Bha, donne textuellement ton code, je te montrerais comment faire avec du log...
Je l'ai pas encore testé avec les dernières modifications


Lbl 1
Clr Home
Prompt A,B,C
Clr Home
abs(B)=>S
If S<10
Then
0=>P
Goto 2
Else
If S>9
Then
1=>P
Goto 2
Else
If S>99
Then
2=>P
Goto 2
Else
if B>999
Then
Goto 2
Lbl 2
(B²-(4xAxC))=>D
Disp "DELTA",D
abs(D)=>T
rac(abs(D)=>J
If T<100
Then 0=>P
Goto 3
Else
If T>99
Then 1=>Q
Goto 3
Else
If T>999
Then 2=>Q
Goto3
Else
If T>9999
Then
3=>Q
Goto 3
Else
Goto 3
Lbl 3
(J-iPart(J))=>L
If L#0 //(#=différent)
Then
Goto 0
Else
If D>0
Then
((-B-rac(D))/(A))=>E
((-B+rac(D))/(2A))=>F
Disp "2 SOL R",E,F
Pause
Goto 1
Else
If D=0
Then((-B)/(2A))=>G
Pause
Goto 1
Else
If D<0
Then
(rac(D²))=>D
((-B-irac(D)/(2A))=>N //i [2nd] [.]
((-B+irac(D)/(2A))=>0
Disp "2 SOL CPX",N,O
Pause
Goto 1
Else
Lbl 0 //A partir de ce moment,rac(Delta) ne tombe pas juste on donne donc une valeur exacte.
If D>0
Then
Disp "2 SOL R"
Output(4,1,-B)
Output(4,3+P,"-rac("
Output(4,6+P,D)
Output(4,8+P+Q,")/")
output(4,10+P+Q,2A)
Output(5,1,-B)
Output(5,3+P,"+rac("
Output(5,6+P,D)
Output(5,8+P+Q,")/")
Output(5,10+P+Q,2A)
Pause
Goto 1
Else
If D<0
Then
rac(rac(D²))=>D
Disp "2 SOL CPX"
Output(4,1,-B)
Output(4,3+P,"-irac("
Output(4,7+P,D)
Output(4,9+P+Q,")/")
output(4,11+P+Q,2A)
Output(5,1,-B)
Output(5,3,+P"+irac("
Output(5,7+P,D)
Output(5,9+P+Q,")/")
Output(5,11+P+Q,2A)
Pause
Goto 1
En fait, juste la partie impliqué m'aurait suffit hein. (les qques lignes voulues quoi.)

edit:
Effectivement c'est vraiment très spagheti.
Bon, #courage#...

Tu veut que je te montre juste comment on peut faire pour ce point précis ou te me permet d'optimiser d'autre trucs au passage ?
Bon, vite-fait, tout ce qui est avant le "Label 3", tu devrais pouvoir le remplacer par:

Lbl 1
ClrHome
Prompt A,B,C
ClrHome
int( log( abs(B) ) ) -> P
Lbl 2
(B²-(4xAxC))=>D
Disp "DELTA",D
abs(D)=>T
rac(abs(D)) ->J
int( log(T) -1 ) -> P
Lbl 3
........


J'ai souligné les parties que j'ai touchés. (y'a pas d'espace, c'est juste question de lisibilité) En gros, ça correspond à tes if... if.. if... if..

Autrement, pour coder proprement, à chaque then doit correspondre un end.
Enfin, tu sur-utilsie les labels, tu n'a ni besoin du label 2, ni du label 3. (et me dit pas que c'est de l'optimisation...)
Par contre, doit y avoir moyen d'optimiser tout le paté à la fin. (puisqu'on affiche 4 fois la même chose avec +/- i près.)
En fait y'a moyen d'optimiser à-peu-près tout, mais bon...

Sinon, à a l'habitude de noter '->' pour [STO], 'sqrt' pour racine carré (litérallement square root), != po ur différent.
( ce sont les sumboles que l'onr etrouves dans d'autres languages informatiques majeurs, donc bon..)


Edit: par contre faut que b !=0 (bon sinnon c'est trivial hein)
Mais surtout que T != 0( ie D !=0 ).
Donc tu peut tout de même rajouter un if devant le int( log(T)-1), ce qui donne en gros:
if T !=0:int( log(T) -1 ) -> P
if T =0: 0-> P
Mais very ton truc avec log ca marche pas avec des nombres a virgules (ex: 1.23 : longueur 4, mais log +1 = 1), donc ca marche quand meme seulement dans des cas particuliers (entiers positifs differents de 0).
Heu, ouais mais non pasqeu si happy.

En fait tout dépend.
Déjà, on travailm souvent avec des entier quand même..

Ensuite, si tu sait par exemple qu'il y a 2 (ou 4 ou 6..) variables après la vigule qui t'intéressent, tu fixe touça (en fait t'es même pas obligé), puis tu prend le log de
N*10^(nombre_de_chiffre_significatifs).

C'est simple, non ?
Ouai effectivement, pour avoir toujours 2 chiffres apres la virgule par exemple.
Et sinon tu peut aussi fixer ce nombre de décimales avec Float (MODE...).
Donc certes ca marche souvent en fait. Mais pour les nombres négatifs ca donne quoi ?
Vaut mieu passer par la valeur absolue cheeky.
( tape log(-5) sur ta calto, tu verra ^^.)

Et si tu veut vraiment être précis, tu rajoute un petit truck pour prendre en compte le '-'. ( pareil que pour la vrigule, en fait..)

Merci beaucoup de votre aide.
J'ai refait mon prog en mode graphique, c'est plus propre, beaucoup plus propre meme mais il m'affiche toujours sous la forme (-b-sqrt(Delta))/2A meme lorque racine de delta tombe juste et donc que la fraction se simplifie.
A part ça, tout marche bien wink
Il suffit de faire:
If sqrt(D) = int( sqrt(D))
afin de différencier les deux
cas. ( si la condition est emplie, c'est que sqrt(D) est un nombre entier.)
J'au réussi, j'ai refait le prog en mode graphique et il gère meme les complexes (un ptit magouillage a été nécessaire car avec des complexes il m'affichait un argument error).
Si ça vous interesse je peux vous filer le code source afin que vous puissiez me donner des conseils pour l'améliorer/le simplifier.
Tu peut toujours le poster ^^
en fait il est sense faire quoi ton programme??
mdr, il est sensé calculer delta avec les X' et X"...je le trouve beaucoup trop long et beaucoup trop compliqué ton programme...il te prend quoi comme place ? le mien est tout simple et tellement utile smile, il me fait même le maximum et le minimum ( bon c bidon ok mais lol ^^)....wink
Je vous propose une petite routine que j'avais fait pour le même programme que toi :

If Ans<0 and fPart Ans=0 //on teste si la valeur est entiere et negative
Then
int(log abs Ans)+2 //on ajoute 2 caractère pour le -
Return
End
If Ans>0 and fPart Ans=0 //on teste si la valeur est entiere et positive
Then
int(log Ans)+1
Return
End
If fPart Ans!=0 //si la valeur n'est pas entiere
Then
While fPart Ans!=0 //on la fait devenir entiere
10Ans
End
If Ans<0 //si en plus elle est negative on ajoute 2 pour le - et le .
Then
int(log (abs Ans+1))+3
Return
Else //si elle est postive on ajoute juste 1 pour le .
int(log Ans)+2
Return
End

dans tous les cas il faut ajouter 1 en plus dut au log et pour une variable mit dans le Ans ce programme la replace par son nombre de chiffre
Après avoir enregistrer ce programme sous un nom X tu l'appele dans ton programme principal comme suit:
A //valeur qui précede ton texte
PrgmX
Output(1+int(Ans/16),Ans-15int(Ans/16),"ton texte //si la longueur du nombre excede 16 ce calcul ajoute 1 a la ligne
//+int(Ans/16) et enleve 15 à la colone -15int(Ans/16)

voila si vous voyez des choses améliorables je suis preneur...
Si je ne m'abuse, tu peut entièrement supprimer la 1ere partie. (avant le while. )

ça te donne:

While fPart Ans!=0 //on la fait devenir entiere
10Ans
End
If Ans<0 //si en plus elle est negative on ajoute 2 pour le - et le .
Then
int(log (abs Ans+1))+3
Return
Else //si elle est postive on ajoute juste 1 pour le .
int(log Ans)+2
Return


J'ai la flemme de tester, mais ça devrais marcher.

( puisqu'un entier n'est qu'un nombre à 0 'décimales'. )


Bon, sinon, exepté l'amusement, je vois pas l'intérêt de le faire en mode txt au lieu d'en graphique. ( la contacénation dess chaines à lk'affichage est immédiat. )
Sauf qu'il n'y a pas de . dans un nombre à 0 décimal donc un caractere en moins
et effectivement il n'y a pas d'interet si ce n'est la curiosité de savoir comment marche la contacénation et le fait que quand j'ai fait ca je ne savait pas qu'elle etait automatique en mode graphique.
Bon, mais en utilisant des autres variables:


Ans->B
0->A
If fPart B != 0: 1->A
If B<0:1+A->A
If
While fPart B!=0 //on la fait devenir entiere
10B->B
End
A+int(log(abs(B)))+1->A
Return


Je pense que c'est tout de même plus rapide.
Je suis presque sur qu'il y a moyehn de faire mieux.
Oui, mais je ne voulais pas faire intervenir de variable afin que ce programme puisse servire de routine a d'autre programme sans devoirs les modifiers.