| Base 2 Base (en developpement) |
| Auteur |
Message |
Ev3rdr3am
Invité
|
Posté le : Sam 15 Aoû 2009, 20:33
|
|
|
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
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 ), 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
|
| |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Sam 15 Aoû 2009, 21:08
|
|
|
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
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Sam 15 Aoû 2009, 21:38
|
|
|
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
Mais en fait je veux bien le faire si ça te parait + perfectionniste. (avec pause ça parait faisable et j'aime les défis )
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.
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Dim 16 Aoû 2009, 12:05
|
|
|
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.
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Dim 16 Aoû 2009, 16:08
|
|
|
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? 
Au fait j'avais oublié de préciser: TAILLE 338 OCTETS
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Dim 16 Aoû 2009, 17:06
|
|
|
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
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Dim 16 Aoû 2009, 17:24
|
|
|
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?
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Dim 16 Aoû 2009, 20:24
|
|
|
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
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. 
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
|
|
 |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Lun 17 Aoû 2009, 19:07
|
|
|
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 ^^.
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Lun 17 Aoû 2009, 20:24
|
|
|
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 )
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^^
|
 |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Lun 17 Aoû 2009, 20:40
|
|
|
Je l'essaierais tout à l'heure,ça coute rien ^^
Sinon pour le signe t'as le choix:$ ¤ £ µ @...
|
 |
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Lun 17 Aoû 2009, 21:46
|
|
|
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.
|
 |
|
| |
mathieuI
Autorisation : Membre
Nb de messages : 1
Inscrit le : Mer 23 Mai 2007, 11:02
|
Posté le : Mar 18 Aoû 2009, 3:04
|
|
|
| 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 ≠ conviendrait mieux, non ? 
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. |
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Mar 18 Aoû 2009, 21:54
|
|
|
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
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
Rézus
Autorisation : Membre
Nb de messages : 835
Inscrit le : Sam 20 Jui 2009, 20:35
|
Posté le : Mer 19 Aoû 2009, 9:56
|
|
|
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.
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Mer 19 Aoû 2009, 13:09
|
|
|
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
|
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Mer 19 Aoû 2009, 14:18
|
|
|
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.
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Mer 19 Aoû 2009, 16:10
|
|
|
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 e .
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.
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Mer 19 Aoû 2009, 19:00
|
|
|
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
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Ven 21 Aoû 2009, 15:49
|
|
|
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)
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Ven 21 Aoû 2009, 18:22
|
|
|
Le disp sert à afficher les nombres dans les listes or ceux-ci sont constitués de 9 chiffres au maximum donc une ligne permet d'afficher 9 chiffre.
Pour les fonctions elles sont toutes située dans le sujet "Traduction des fonctions Anglaises/Françaises" mais au cas où voici la traduction des programmes:
| Code | EffEcr
Disp "NOMBRE EN BASE"
Input "2:",A
.5->B
0C
While partEnt(A [différent de] 0
2B->B
.1A->A
C+B10partDéc(arrondi(A,1->C
End
EffEcr
Disp C |
| Code | EffEcr
EffListe L1
Disp "NOMBRE EN BASE"
Input "10:",A
1->C
0->D
1->E
While partEnt(A [différent de] 0
0->B
partEnt(A)/2->A
If A [différent de] partEnt(A
1->B
D+CB->D
10C->C
If D>[EE]9
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 |
J'aimerais si possible un lien pour télécharger les programmes car j'ai la flemme de les taper.
Sangohan38
|
 |
|
| |
Ev3rdr3am
Autorisation : Membre
Nb de messages : 12
Inscrit le : Sam 15 Aoû 2009, 21:33
|
Posté le : Sam 22 Aoû 2009, 19:54
|
|
|
jpeux l'uploader, mais tu connais un hébergeur gratuit?
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Dim 23 Aoû 2009, 11:49
|
|
|
Celui que j'utilise est Badongo mais si tu veux il y a aussi Rapidshare.
Sangohan38
|
 |
|
| |
Wirekey
Autorisation : Membre
Nb de messages : 228
Inscrit le : Mer 17 Jui 2009, 0:54
|
Posté le : Lun 24 Aoû 2009, 12:38
|
|
|
Rapidshare c'est le pire pour les FreeUsers :@
Durée d'attente énorme entre deux téléchargements ...
Je c pas si on peut déposer gratuitement mais il y a MegaUpload qui est très bien.
Et très rapid ( enfin pour un programme de TI ^^ pas besoin de tant de rapidité ) 
|
 |
|
| |
Sangohan38
Autorisation : Membre
Nb de messages : 3293
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Lun 24 Aoû 2009, 16:24
|
|
|
Après maintes recherches sur mégaupload, je n'avais jamais réussis à trouver comment hoster ces fichiers avec un compte gratuit.
Et la aujourd'hui le premier lien que me donne mon navigateur me permet de tranférer des fichiers depuis mon ordi.
Donc sur mégaupload c'est possible mais il faut se créer un compte (gratuitement).
Sangohan38
|
 |
|
| |
Google_AdSense
|
Publicité
|
|
|
|
| |