Poster un nouveau sujet Poster une réponse
Conversion de bases : de "tout" à "tout"
Auteur Message
Caltodev
Invité
Posté le : Sam 26 Oct 2013, 11:32   Citer 

Autre programme de conversion de bases de ma fabrication qui permet de convertir n'importe quelle base en n'importe quelle autre.(sauf au-dela de la base 36, bien sur).

Fonctionnement : on entre la base d'entrée, puis la base de sortie, puis le nombre à convertir, et hop, c'est parti !


Code

EffEcr
Input "ENTREE=",E
Input "SORTIE=",S
Input "NOMBRE=",Chaine0
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"->Chaine1

If E>35 ou E<2 ou S>35 ou S<2                //Test de la validité des bases
Then                                           d'entrée et de sortie
Output(5,1,"PAS POSSIBLE
Stop
End

For(X,1,longueur(Chaine0                     //Test de  la validité du
sous-chaine(Chaine0,X,1)->Chaine3              nombre à convertir
If Chaine3="-" ou Chaine3="+" ou Chaine3="(" ou Chaine3=")" ou Chaine3="/" ou Chaine3="."
Then
Output(5,1,"PAS POSSIBLE
Stop
End
End

Output(5,1,">
0->Q
">"->Chaine2
For(X,longueur(Chaine0),1,-1
1->I
While sous-chaine(Chaine0,X,1)!=sous-chaine(Chaine1,I,1)
1+I->I
End
Q+(I-1)*E^(longueur(Chaine0)-X)->Q
End

If S=10                  //Le nombre est convertit en décimal avant d'être
Then                       convertit dans la base de sortie. Si, par hasard,
Output(5,2,Q               la base de sortie est 10, le programme ne fait
Stop                       plus le calcul et affiche directement le nombre.
End

While Q!=0                //Conversion du ombre en base 10 dans la base
partEnd(Q/S)->P             souhaitée
Q-SP->R
sous-Chaine(Chaine1,R+1,1)+Chaine2->Chaine2
P->Q
End
Output(5,2,sous-Chaine(Chaine2,1,longueur(Chaine2)-1



J'ai bien vérifié le code ; j'espère qu'aucune erreur ne s'est glissée.

  Haut de page Bas de page 
 
ld
Avatar

Autorisation : Membre
Nb de messages : 373
Inscrit le : Jeu 23 Sep 2010, 16:05
Posté le : Dim 27 Oct 2013, 12:38   Citer 

J'aime l'idée de :

Code
Input "ENTREE=",E
Input "SORTIE=",S
Input "NOMBRE=",Chaine0


Pas mal du tout.

----------------------
Note Éphéméride Chrono Bombrman BlueFishEncryptor Labygénérateur Nord BandeauDeTexte LunarPhase Syracuse Papy-Jump Convertisseur ! SolveurDeSudoku VérificateurDeCodesBanquaire PrgmADiviser CryptageDeVigenere MiniSolv Reed-Solomon Code128Géodésie
 Adresse email Haut de page Bas de page 
 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 29 Oct 2013, 13:32   Citer 

Correct, peut mieux faire.
Les tests d'invalidité peuvent être intéressants. Personnellement je m'en fiche.

La chaîne 3 peut se remplacer par Ans/Rép.

Des Gotos et un Label pour les verdicts d'impossibilité permettrait d'éviter les mots-clés d'alternatives et d'écrire plusieurs fois.

Si tu veux vraiment détecter la présence de caractères invalides, tu as plutôt intérêt à utiliser une recherche inString/carChaîne dans la chaîne_1 des caractères saisis. Le moindre zéro signifiera que le caractère n'est pas prévu.
Idem quand tu associes les valeurs aux caractères.
carChaîne(Chaîne1,sous-Chaîne(Chaîne0,X,1->I

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes