Poster un nouveau sujet Poster une réponse Page: 1,      >>
Base 2 Base (en developpement)
Auteur Message
Ev3rdr3am
Invité
Posté le : Sam 15 Aoû 2009, 20:33   Citer 

bon voila un début de programme sympa, sans doute déjà vu mais pratique quand même.
Je le poste ici à la fois pour que vous me dites ce que vous en pensez et en plus pour que vous m'aidiez à le perfectionner crazy.gif

But du programme: convertir de la base 10 à la base 2 (décimal à binaire) et vice et versa. Faire pareil avec toutes les bases (hexadécimal, octal...)
Problème du moment: pas encore capté comment passé de la base 2 à 10. le programme se limite donc pour l'instant du passage de la base 10 à 2.
Point fort: Plus précis que la calcu de base d'un PC portable (sisi laugh.gif ), très léger, assez rapide pour les nombres élevés, calcul possible jusqu'à 2 puissance 110

Calculatrices compatibles:82 et + (si ça gene quelqu'un je retransforme en anglais les fonctions, car elles sont édités sous 82 stats fr)

Symbole spéciaux:
-> sto (sauf entre les guillemets)
>= plus grand ou égal
0 et O le premier est zéro le second le O(toute façon ya que des zéros)


Code

:EffEcr
:Disp "LIMITES:","","D-->B:2^110
:Pause
:EffEcr
:Lbl A
:0->B:0->D:2->U:4->V:0->W:80->Y
:Menu("BASE 2 BASE","D-->B",0,"QUITTER",Q
:
:Lbl 0
:EffEcr
:Input "DECIMAL:",D
:If D>2^110 ou D<1:Goto 0
:If D>2^78
:Then
:EffEcr
:V-2->V
:114->Y
:End
:Output(V-1,1,"BINAIRE:
:Output(V,1,"=
:For(T,Y,0,-1
:If D-2^T>=0
:Then
:Output(V,U,"1
:U+1->U
:D-2^T->D
:Else
:If U>2 ou W=1:Then
:Output(V,U,"0
:U+1->U
:End:End
:If U>16:Then
:V+1->V
:1->U
:1->W
:End:End
:Pause
:EffEcr
:Goto A
:
:Lbl Q
:EffEcr



P.S:il est possible que j'ai fait des erreurs de recopiage si quelqu'un teste, ou le voit, dites le moi et je rectifie

  Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Sam 15 Aoû 2009, 21:08   Citer 

Il y a une chose que je ne comprends pas: comment as-tu fixé la limite du 2^110?
Pourquoi pas 9*10^99?

Je vais tester le programme quand j'aurais le temps et je te dirais ce que ça donne.

Sangohan38

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Sam 15 Aoû 2009, 21:38   Citer 

c'est une bonne question^^
en fait lorsque l'on demande un nombre superieur à 2^78, il n'y a plus d'espace pour mettre à la fois le nombre choisi en decimal et le nombre binaire.
donc je fais réaparaitre ceci:

_________________
_BINAIRE:
_=
_
_
_
_
_
_________________

et en fait un nombre binaire prend un chiffre de plus à chaque puissance de 2 supplémentaire
ex: 2 en décimal donne 10 en binaire, 4 donne 100, 8 donne 1000 etc...
et donc j'ai limité sciemment le nombre à 2^110, c'est à dire au nombre d'espace restant après le =, soit 110 espaces.
j'aurais pu rajouter une ligne entière et enlever le = ce qui m'aurait fait 17 espaces supplémentaire ce qui aurait autorisé un plafond à 2^127, mais côté esthétique ça ne me plait pas trop.

Enfin j'aurai pu me rapprocher un maximum du maximum (oui c'est redondant) de la calcu (9*10^99) avec 2^332 (environ 8.7*10^99) mais alors ça veux dire qu'il faudrait soit faire défiler l'écran soit faire pause pour afficher plus de 3 écrans de nombre différents.

Bon, voila j'espère avoir été clair crazy.gif
Mais en fait je veux bien le faire si ça te parait + perfectionniste. (avec pause ça parait faisable et j'aime les défis godgrace.gif )

EDIT: je viens de voir que la question originelle est comment et pas pourquoi?^^
Et bien si l'on rentre un nombre trop grand dans le input, il ne le valide pas et te redemande un nombre. il en va de même pour les nombre négatifs.

EDIT BIS: mon principal souci est d'ailleurs que si l'on rentre un nombre qui dépasse 9*10^99, au lieur de le rejeter, la calcu indique une erreur de capacité. Si tu as quelque chose contre ça, je suis preneur.

 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Dim 16 Aoû 2009, 12:05   Citer 

Pour l'erreur de capacitée de la calcu, c'est impossible de ne pas la faire apparaitre.

Pour passer de la base 2 à la base 10, j'ai élaboré ce programme:


Code
ClrHome
Disp "NOMBRE EN BASE"
Input "2:",A
.5->B
0->C
While int(A [différent de] 0
2B->B
.1A->A
C+10B fPart( round(A,1->C
End
ClrHome
Disp "NOMBRE EN BASE","10",C



Sangohan38

PS: Pour ton programme, je pense qu'il est raccourcissable, je m'y pencherais un jour.

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Dim 16 Aoû 2009, 16:08   Citer 

Waouh j'ai rajouté quelque lignes de code à mon prgm et je peux t'assurer qu'il est nettement + rapide je te recopie le prgm avec les lignes supplémentaires en rouge:


Code

:EffEcr
:Disp "LIMITES:","","D-->B:2^110
:Pause
:EffEcr
:Lbl A
:0->B:0->D:2->U:4->V:0->W[couleur=#FF0000]:0->Y[/couleur]
:Menu("BASE 2 BASE","D-->B",0,"QUITTER",Q
:
:Lbl 0
:EffEcr
:Input "DECIMAL:",D
:If D>2^110 ou D<1:Goto 0
:If D>2^78
:Then
:EffEcr
:V-2->V
[couleur=#FF0000]!!!la ligne 114->Y as été effacée ici!!![/couleur]
:End
:Output(V-1,1,"BINAIRE:
:Output(V,1,"=
[couleur=#FF0000]:For(T,0,111
:If D<2^T:Then
:T-1->Y
:Goto 0A
:End:End
:Lbl OA[/couleur]
:For(T,Y,0,-1
:If D-2^T>=0
:Then
:Output(V,U,"1
:U+1->U
: D-2^T->D
[couleur=#FF0000]!!!Attention l'espace ici est juste pour éviter la transformation en smiley!!![/couleur]
:Else
:If U>2 ou W=1:Then
:Output(V,U,"0
:U+1->U
:End:End
:If U>16:Then
:V+1->V
:1->U
:1->W
:End:End
:Pause
:EffEcr
:Goto A
:
:Lbl Q
:EffEcr



ÉDIT: j'ai regardé un peu ton prgm mais je ne le comprend pas totalement, tu peux l'expliquer?
Sinon, as-tu essayé le mien? Qu'en pense tu? cupsmiley.gif
Au fait j'avais oublié de préciser: TAILLE 338 OCTETS

 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Dim 16 Aoû 2009, 17:06   Citer 

Je n'ai pas du tout testé ton programme mais je le ferais quand j'aurais le temps.

Pour passer d'une base 2 à une base 10, je trouve qu'un exemple est plus démonstratif que des explications: http://ens.univ-rennes1.fr/ue-fo/Technique/formulaireNumeration.pdf

Sangohan38

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Dim 16 Aoû 2009, 17:24   Citer 

ok j'ai vu le pdf et en effet je vois la procédure, même si j'ai utilisé quelque chose de différent pour mon prgm..

Prenons l'exemple de 25 qui vaut 11001 en binaire. En fait je soustrait les puissances de deux les plus élevées à 25 jusqu'à obtenir zéro.
ex:
25 - 2^4 - 2^3 -2^0
=24 - 16 - 8 - 1
=0

Les nombres des puissances qui m'ont permis de soustraire 25 jusqu'à zéro sont alors transformé en 1, ainsi le 1er le 4eme et le 5eme chiffre en partant des unités sont des 1. Le reste est constitué de 0.

11001
et ce principe permet d'obtenir une grande précision même avec de grand nombres.

En tout cas j'espère que tu testera mon programme, et si possible d'abord sans les lignes que j'ai rajouté pour saisir la différence de vitesse.

P.S:Comment ça se fait qu'il n'y ait que toi sur le forum?

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Dim 16 Aoû 2009, 20:24   Citer 

Amélioration du programme!

Je me suis inspirée de la formule de sangohan38 mais je l'ai fait à ma sauce^^
En fait j'avais déjà la notions de 100100=1*2^5 + 0*2^4 + 0*2^3 + 1*2^2 + 0*2^1+ 0*2^0.
Le truc c'est que jusqu'à ce moment, je n'avais pas imaginé la façon de mettre ça en BASIC. et c'est le
Code
.1A->A

de sango qui a été le déclic^^.

En tout cas voila: le programme ci-dessous converti désormais de BASE 10 à 2 et de BASE 2 à 10. Bon d'ailleurs je zape le rouge, vous trouverez bien tout seul les parties modifiées. godgrace.gif

Symboles speciaux
-> Sto
!= Différent de


Code

:EffEcr
:Disp "LIMITES:","","D-->B:2^110","B-->D:10^30
:Pause
:EffEcr
:Lbl A
:0->B:0->D:2->U:4->V:0->W:0->Y
:Menu("BASE 2 BASE","D-->B",0,"B-->D",1,"QUITTER",Q
:
:Lbl 1
:-1->W
:EffEcr
:Input "BINAIRE:",B
:If B<0 ou partDéc(B)!=0:Goto 1
:Output(V+3,1,"DECIMAL:
:Output(V+4,1,"=
:While partEnt(B)!=0
:B/10->B
:W+1->W
:If partDéc(B)=.1:2^W+D->D
:partEnt(B)->B
:End
:Output(V+4,2,D
:Pause
:Goto A
:
:Lbl 0
:EffEcr
:Input "DECIMAL:",D
:If D>2^110 ou D<1:Goto 0
:If D>2^78
:Then
:EffEcr
:V-2->V
:End
:Output(V-1,1,"BINAIRE:
:Output(V,1,"=
:For(T,0,111
:If D<2^T:Then
:T-1->Y
:Goto 0A
:End:End
:Lbl OA
:For(T,Y,0,-1
:If D-2^T>=0
:Then
:Output(V,U,"1
:U+1->U
: D-2^T->D
:Else
:If U>2 ou W=1:Then
:Output(V,U,"0
:U+1->U
:End:End
:If U>16:Then
:V+1->V
:1->U
:1->W
:End:End
:Pause
:EffEcr
:Goto A
:
:Lbl Q
:EffEcr



 Adresse email Haut de page Bas de page 
 
Rézus



Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Lun 17 Aoû 2009, 19:07   Citer 

Bonjour bonjour !
Sangohan n'est plus tout seul puisque je suis rentré hier.
Merci car vous m'avez apris à utiliser la base deux.
Bienvenue à toi mais évite d'utiliser le "!",il existe sur la calculatrice et il sert en proba ^^.

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Lun 17 Aoû 2009, 20:24   Citer 

Bonsoir rezus, tu veux parler de mes != oui c'est vrai que j'ai vu qu'il peut servir à autre choses, mis c'est le raccourci commun en C (a moins que ce soit en python? je ne sais plus) pour différent de et je n'avais pas d'autre idée de symbole de remplacement.

D'ailleurs j'aurais une ptite proposition à vous soumettre, ce serait de rajouter les symboles de ti en bas comme une autre catégorie de smiley, ça uniformiserait le truc, du coup ça serait + clair.

Pour en revenir au sujet, tu l'as testé rézus mon programme? Allez yen a bien un qui le fera (a part moi godgrace.gif )

En tout cas si on a pu te faire comprendre la base 2 avec tout le charabia qu'on a prononcé, j'en suis bien content^^

 Adresse email Haut de page Bas de page 
 
Rézus



Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Lun 17 Aoû 2009, 20:40   Citer 

Je l'essaierais tout à l'heure,ça coute rien ^^
Sinon pour le signe t'as le choix:$ ¤ £ µ @...

 Adresse email Haut de page Bas de page 
 
Rézus



Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Lun 17 Aoû 2009, 21:46   Citer 

Voilà je l'ai copié. Il marche parfaitement et j'aime bien la présentation, elle est bien aérée ^^. Par contre je pense qu'il est fortement racourcissable.

 Adresse email Haut de page Bas de page 
 
mathieuI



Autorisation : Membre
Nb de messages : 1
Inscrit le : Mer 23 Mai 2007, 11:02
Posté le : Mar 18 Aoû 2009, 3:04   Citer 


Citer : Ev3rdr3am
Bonsoir rezus, tu veux parler de mes != oui c'est vrai que j'ai vu qu'il peut servir à autre choses, mis c'est le raccourci commun en C (a moins que ce soit en python? je ne sais plus) pour différent de et je n'avais pas d'autre idée de symbole de remplacement.

Le != c'est effectivement le symbole de « différent de » dans la plupart des langages informatiques; en C, C++, python, ruby, bash, etc…
À part ça, le symbole &#8800; conviendrait mieux, non ? winkle.gif
Et le symbole « ! » est utilisé en proba, en terminale, c'est le symbole des factorielles ( 6! = 1*2*3*4*5*6 ), c'est pas trop dur ^^

----------------------
Quelqu'un de pas du tout actif, qui n'a pas touché une TI depuis le début des vacances, le python étant plus agréable que le TI-Basic.
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Mar 18 Aoû 2009, 21:54   Citer 

de quelle façon pense tu que je puisse le raccourcir?
Dis moi toujours, ça peut servir^^

sinon moi le python je trouve ça TRÈS ressemblant au ti-basic, donc un langage très haut niveau.

Mais même si j'en connait les rudiments je n'en vois as franchement l'intérêt immédiat, ça forme des prgm uniquement lisible par des utilisateur de python et fais ce que C est déjà capable de faire.
Mais si tu as des contre-exemple je suis preneur

 Adresse email Haut de page Bas de page 
 
Rézus



Autorisation : Membre
Nb de messages : 853
Inscrit le : Sam 20 Jui 2009, 20:35
Posté le : Mer 19 Aoû 2009, 9:56   Citer 

Là pour le rétrécir j'ai pas trop d'idées j'y réfléchirait peut-être,surtout que t'as pas fait la méthode simple comme celle de sangohan.
Alors à part recopier le prog B-->D de sango pour l'instant je vois pas.

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Mer 19 Aoû 2009, 13:09   Citer 

Euh oui je n'ai pas recopié sangohan, non pas parce que c'était mauvais, mais parce que j'aime bien comprendre ce que je code.

Et puis mon programme règle aussi l'affiche dans l'ordre les nombres, pas celui de sango, et s'affiche en output et non en disp.(donc chaque chiffre du nombre n'est pas séparé d'un saut à la ligne)

De plus au bout du compte le programme de sango n'est pas bien plus gros que le mien, son programme corresponds à mon Lbl 1 seulement:

PRGM DE SANGO

Code

ClrHome
Disp "NOMBRE EN BASE"
Input "2:",A
.5->B
0->C
While int(A [différent de] 0
2B->B
.1A->A
C+10B fPart( round(A,1->C
End
ClrHome
Disp "NOMBRE EN BASE","10",C


MON PRGM

Code

:Lbl 1
:-1->W
:EffEcr
:Input "BINAIRE:",B
:If B<0 ou partDéc(B)!=0:Goto 1
:Output(V+3,1,"DECIMAL:
:Output(V+4,1,"=
:While partEnt(B)!=0
:B/10->B
:W+1->W
:If partDéc(B)=.1:2^W+D->D
:partEnt(B)->B
:End
:Output(V+4,2,D
:Pause
:Goto A



 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Mer 19 Aoû 2009, 14:18   Citer 

Je pense que tu n'as pas testé mon programme pour dire que les chiffres sont affichés dans le mauvais ordre et qu'il y a un saut de ligne a chaque fois.

Sinon, voici mon programme pour passer de la base 10 à la base 2:


Code
ClrHome
ClrList L1
Disp "NOMBRER EN BASE"
Input "10:",A
1->C
0->D
1->E
While int(A [différent de] 0
0->B
int(A)/2->A
If A [différent de] int(A
1->B
D+CB->D
10C->C
If D>E9 (le E de la puissance de 10)
Then
E->dim(L1
D->L1(E
0->D
1->C
E+1->E
End
End
D->L1(E
For(A,E,1,-1
Disp L1(A
End



Sangohan38

PS: Edites tes doubles messages Everdream.

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Mer 19 Aoû 2009, 16:10   Citer 

si j'ai essayé ton prgm mais en fait j'ai fait une erreur sans doute dans le recopiage, car il n'a pas fonctionné.
en tout cas dans ton second prgm base 10 à 2, je trouve que ce n'est pas une bonne idée de se servir d'une liste, car ça prend bcp de memoire et on en a souvent besoin dans d'autre programme plus important.

De plus tu utilise encore disp, ce qui fait des retour à la ligne, et question lisibilité, il faut être superman pour arriver à lire 100 chiffres qui défilent sans pauses.

A la limite c'est valable la liste L1 seulement si tu t'en sert avec un output. (je parie que tu n'a pas essayé ton prgm avec 10^50 par ecrazy.gif.

Je suis d'accord pour faire des concessions sur ma manière de programmer, mais observe aussi ma méthode. Tu verras que mon programme affiche plus clairement les résultats.

Prend en compte la maniabilité dans tes prgm et montre moi que j'ai tort et qu'on peut faire plus court que moi tout en étant lisible.

 Adresse email Haut de page Bas de page 
 
Sangohan38



Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
Posté le : Mer 19 Aoû 2009, 19:00   Citer 

La encore, je ne peut supposer que tu n'as pas testé mon programme car il affiche 9 chiffres sur la même ligne avant de passer à la suivante.
Pour la liste, je suis d'accord sur le fait qu'elle prend de la place et qu'elle est utilisée dans d'autre programme seulement elle est utile dans le sens que cela affiche dans le bon ordre les chiffres.

J'avoue ne pas avoir testé tes programmes mais ici, je ne fait que donner ma version du programme qui est plus courte mais aussi moins lisible.

Et effectivement, je n'ai pas testé mon programme avec des nombres gigantesques mais je pense que jamais les profs ne demanderont des nombres très grands vu la lenteur de la méthode pour changer de base.

Sangohan38

 Adresse email Haut de page Bas de page 
 
Ev3rdr3am



Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
Posté le : Ven 21 Aoû 2009, 15:49   Citer 

comment tu peux afficher des nombres sur la même ligne en utilisant un disp?

En tout cas pardon, mais j'aimerais néanmoins que tu teste mon programme, histoire de faire la comparaison.

Et moi j'ai essayé ton programme, seulement il y a certaines fonction anglaises que je ne retrouve pas en français.(du coup ça marche pas)

 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse Page: 1,      >>





  Powered by Fire-Soft-Board v1.0.10 © 2004 - 2024 Groupe FSB
Page générée en 9 requêtes
BlackOne par Grimmlink