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)
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:
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.
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
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?
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
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.
Autorisation : Membre
Nb de messages : 853
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 ^^.
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^^
Autorisation : Membre
Nb de messages : 853
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.
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.
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
Autorisation : Membre
Nb de messages : 853
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.
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
Autorisation : Membre
Nb de messages : 3370
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
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.
Autorisation : Membre
Nb de messages : 3370
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.