1

Bonjour a tous,voila mon probleme:
Depuis quelque temps j'essai de creer un programme permettant de passer dun nombre reeel a un binaire en basic

petit rappel du binaire(pour ceux qui le savent deja):
pour trouver la valeur binaire dun nombre,on le compare a un tableau
ex:le nombre 166
cela donne: .../ 128 / 64 / 32 / 16 / 8 / 4 / 2 / 1 / 0 -->On remarque que
/ 1 / 0 / 1 / 0 / 0 /1 / 0 / 1 1*2=2.. 2*2=4...et 4*2=8 ...........
je mexplique:

166>128 donc on place 1 et on fait 166-128=38(qui nous servira pour la
prochaine valeur)
38<64 donc on met 0 et on continu avec la meme valeur
38>32 donc on place 1 et 38-32=6 (cf au dessu...)
6<16 donc 0
6<8 donc 0
6>4donc 1 et 6-4=2
2=2 donc 1 et 2-2=0
0<1 donc 0
0=0 donc 1

Voici donc le code que je tape pour l'avoir:
:ClrHome //efface l'ecran
:Prompt A //demande la variable A(nombre reel a convertir)
:246144->B // stoque 246144 dans B
:Repeat B=1 //jusqu'a ce que B=1(debut de la boucle)
:If A>B //si a>b
:Ouput("1" //ecrit 1
:A-B->A //comme expliquer plus haut,si a>b,on fai a-b pour avoir la nouvele valeur a comparer a b
:B/2->B // comme expliquer plus haut,si a>b,on fai b/2 pour avoir le nouvo comparant
:If a<b //si a<b
:Output("0" //ecirt 0
:End //fin de la boucle on revient a repeat



Mais malhaureusement,il ne marche pas,alors si vous avez le bon code,merci de me le faire parvenir!

2

Salut smile.
Déjà, quand tu dit "sa marche pas", ce serait bien d'expliquer où se situ le probléme

Je pense (je n'ai pas testé le code) que ton problème vient de l'oubli des then-end, je metterazit, suivant ta logique et ton programme (bref, juste en le "corrigant"):


:ClrHome //efface l'ecran
:Prompt A //demande la variable A(nombre reel a convertir)
:246144->B // stoque 246144 dans B
:Repeat B=1 //jusqu'a ce que B=1(debut de la boucle)
:If A>B //si a>b
:Then // alors
:Ouput("1" //ecrit 1
:A-B->A //comme expliquer plus haut,si a>b,on fai a-b pour avoir la nouvele valeur a comparer a b
:B/2->B // comme expliquer plus haut,si a>b,on fai b/2 pour avoir le nouvo comparant
:end //fin de ce cas
:If a<b //si a<b
:Output("0" //ecirt 0
:End //fin de la boucle on revient a repeat


En fait, lorsque l'instrcution à éxécuter conditionellement est un ensembelk d'instrcution plus garnd qu'une ligne, il faut absoluent mettre un then....end après ton if.
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

3

j'ai tester,le programme n'a pas de probleme de syntax mais kan jentre ma valeur A,la calcullete ne fai ke me dir done!!!rarf!

4

Et aussi, normalmeent, c'est Output(X,Y,N), X désiganbt la ligne, et Y la colone.
C'est me parait tellement simple que je n'ai même pas vu sa cheeky

Donc dans ton cs, tu met quelquechose comme Output(2,3+I,"1')
A cahque fois que tu affiche un caractère, tu incrémente I

Et donc (ans tester, flemme):


:ClrHome
:Prompt A
:246144->B // stoque 246144 dans B
:2->I
:Repeat B=1 //jusqu'a ce que B=1(debut de la boucle)
:If A>B
:Then
:Ouput(3,I,"1")
:I+1->I
:A-B->A
:B/2->B
:end //fin de ce cas
:If a<b
:Output(3,I,"0")
:End


Voilà, je pense que sa va marcher comme sa smile
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

5

merci verytourist mais il reste un dernier probleme,la boucle ne se repete pas

6

merci a tous,ca marche!
je vous donne le code si ca vous interesse,bien qu'il ne serve a rien:
:ClrHome
:Prompt A
:262144->B
:2->I
:2->X
:While b>0.999
:If A>B //c'est plus grand ou egal
:Then
:Output(X,I,"1")
:I+1->I
:A-B->A
:B/2->B
:End
:If A<B
:Then
:Output(X,I,"0")
:I+1->I
:End
:End
:Output(X,I,"FIN")


Voila ,sauf que quand je l'execute,il me demande bien la variable A
Mais me dit,apres m'avoir afficher mes 0et mes 1,quil ya
une erreur du type DOMAIN(ca doit etre kan les chiffres sont trop lon et depasse lecran je pense)
et je ne sais comment la resoudre,car pour l'instant,je ne peut pas lire
plus de 9colones!!! :s:s:s
Si vous avez une parade,merci de me la communiquer!!

7

( effectivement, le boucle ne se répétait pas car le end de la fin était pris pour le "end" du if et donc pas de ta boucle, (je ne code plus trop en basic Ti z80 cheeky ).

Bon, déjà, le "FIN", tu peut lui mettre uen valeur fixe, genre Output(4,4,"FIN")
Ensuite, pour savoir si tu dépasse, il suffit de tester te valeur de Iavant d'afficher smile. (avec un If). Selon ce que tu veut faire, si on arrive en bout de ligne, tu peut continuer à la ligne suivante (X+1->X : 1->I) Tu peut aussi comencer à afficher au début de la ligne, pour la premièr (1->X).

Si malgré tout tu veut convertir de gros chiffres et que sa fait horiblement laid sur 4 lignes en mode texte, il existe une autre "parade": tu passe en mod graphique, la logique sera à peu près la même, ( sauf que tu doit rajouter 4-5 à ta valeur de colone à chaque fois car si je me souvient, l'instruction Text doit être en pixels)
Si tu utilise l'écran graphique, essay de respecter les bonnes sconventions sur celui-ci smile (sauvegarde une GDB, efface ce qui te géne (fonctions, axes), remet un bon zoom qui corrrespond au pixels (enfin, tu en aura p-t pas besoin pour faire du Text() ), et restore enfin ta GDB à la fin smile).
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

8

Merci verytourist,mais maintenant que j'ai fait ca,j'ai l'impression que c'est mon outpout(celui a zero) qui se repete seul et non la boucle qui fait son tour come elle le devrait car le "fin" ne s'affcihe pas...
Est-ce possible de limiter le nombre de fois qu'est ecrit output?
Il me smeble que non
Sinon,pour ta "parade" sur le graphe,je n'ai pas les competences pourl e faire!!!et cela amenerai plus de kestions que de reponses!lol

9

Bon, du coup, j'ai pris le temps de regarder un peu (au début, je pensait quie c'était seulement un problème de syntaxe, donc je n'ai pas vraiment regarder autre chose que vite fait la syntaxe), et voici le code correcte:
ClrHome Prompt A 64->B 2->I 2->X while B!=0.5 If I>16 1->I If A<B Output(X,I,"0") If A->B Then Output(X,I,"1") A-B->A End I+1->I B/2->B End Output(5,5,"FIN"

Bon, de plus, pour ta variable du début, tu devrait soit t'en passer, soit essayer de l'estimer à partir du nombre, là j'ai mis arbitrairement 64 car je testait sur de petits nombres.

«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

10

Faut biensure remplaver le != par "différent".
Bon, de plus, si le programme fait une ligne compléte avant d'arriver à la fin de ton nombre, tu ne va pas savoir ou il se termine, la tu à deux solution:
Soit tu incrément X aussi lorsque I>16, et doinc affiche à la ligne du dessou, ce qui peut être pratique pour de grands nombres
soit tu efface au moins un caractère après ton nombre, histoire de voir où est la fin.

Pour estimer ta puissance maximum, il suffit de faire par exemple int(ln(A)/ln(2)))
( car si 2^x=a, alors x.ln(2)=ln(a) ie x= ln(a)/ln(2), on veut la valeur entière inférieur, donc on prend la partie entière smile )

Voilà, en éspérant que cette fois-ci c'est bon.
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

11

Merci very tourist,le code marche ,je donne la syntaxe:
:ClrHome
:Prompt A
:4194304->B
:2->I
:2->X
:While b>0.999
:If I>15
:Then
:X+1->X
:1->I
:End
:If A>B //c'est plus grand ou egal
:Then
:Output(X,I,"1")
:I+1->I
:A-B->A
:B/2->B
:End
:If A<B
:Then
:Output(X,I,"0")
:I+1->I
:B/2->B //cest ca ke javai oblié car sinon ,a sera tjrs plus grand ke b et donc le o safichera tt ltps!
:End
:End
:Pause
:Output(X,I,"FIN")

12

Tu ferait bien de regarder un peu le code que j'ai posté, j'ai léghérement optimiser au passage wink
(faut rajouter le x+1->X et donc faut mettre un then..end sur cette ligne car plus de deux instructions).

Pour l'estimation du B ajusté, tyu devrait regardé la méthode que je t'ai proposé, sa t'évitera d'avoir pleins de zeros wink
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

13

ouai...je vais y reflechir,mais pour l'instant je n'en ait pas les capacités,j'ai debuter il ya a peine 1semaine!!!!!