CHANGEMENT DE BASE D'UN NOMBRE

cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 - 31 août 2004 à 14:38
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007 - 6 sept. 2004 à 16:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25818-changement-de-base-d-un-nombre

gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
6 sept. 2004 à 16:27
Pour les bases non, conventionnelles, par contre, c'est intéressant, ca peut servir pour le cryptage.

Désolé, je n'avais pas lu tous les commentaires avant de poster
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
6 sept. 2004 à 16:23
Il esxiste un fonction dans PHP depuis la version 3.0.6 qui fait exactement la même chose que ta source :

base_convert($nb, $base1, $base2)

Voila :)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
6 sept. 2004 à 00:23
Cocoon, beaucoup de monde me dise "pourquoi ne le ferais tu pas ?" si je faisais toutes les fonctions que le monde me propose je pense que je n'aurais plus de vie !
C'était simplement mon commentaire mais la plupart des sources ici, je ne les utilise pas... Alors pourquoi je suis sur ce site ? je regarde le monde coder, comment ca évolue... :)
Malheureusement (pas toi) mais je trouve que les sources qui sont ici volent très bas. Genre du copier coller direct pour faire une source je trouve ca très nul...
Juste pour te dire, ne modifie pas ta fonction en fonction des autres... a moins que tu fasses un très gros programme ou que tu as fait une faute débile. Continue dans tes projets !
cs_cocoon Messages postés 2 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 4 septembre 2004
4 sept. 2004 à 18:55
re à tous...
GRenard>> je suis tout à fait d'accord avec toi... mais rien ne t'empéche de modifier la fonction à ta guise :)

Urukai1>> pour la gestion des erreurs, me servant de cette fonction dans certains scripts, si je dois passer un nombre binaire dans une autre base, je m'assure à l'avance de sa validité...mais ta remarque est fort juste (paf les doigts _ aïe...). Mais j'avoue avoir un peu tendu la perche en fournissant un exemple avec ma fonction qui l'utilise directement... :o/

Je ne pense pas que je retravaillerai cette fonction pour le moment... je l'ai partagée uniquement comme ça, me disant que l'algo en lui-même aiderai peut-être quelqu'un... mais une fois que j'aurai fini le projet sur lequel je suis...pourquoi pas...avec gestion des erreurs, formulaire de création d'une base, gestion des bases dans une BDD (quoique là...je ne suis pas convaincu de l'intéret quand aux performances du scripts due à l'interrogation de la base...un tableau c'est pas dure à écrire à la bonne ligne dans un fichier existant...et c'est beaucoup plus rapide à analyser)...etc...

Au fait... juste pour ceux qu'ont pas vu (puisqu'on m'en a fait la remarque : 666 base Héxadécimale...ça vaut quoi en base CHAT ? ;o) allé...++

.Cocoon.
Urukai1 Messages postés 42 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 14 mars 2008
2 sept. 2004 à 11:41
je viens mettre mon grain de sel

tu ne geres pas les erreurs de saisie du genre :
Le nombre 0100111210001 en base binaire vaut 4721 en base octale.

sinon j'aime beaucoup ta source car on peut y inserer tous les bases que lon souhaite
l'idée serait de mettre les differentes bases dans une bdd
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
1 sept. 2004 à 06:32
Tu n'as pas à te faire un "to" et un "from"... tu peux simplement parser ton tableau et faire des recherches avec des fonctions déjà définies en PHP qui recherche soit sur l'index soit sur la clé !
cs_cocoon Messages postés 2 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 4 septembre 2004
31 août 2004 à 23:52
tout à fait d'accord... juste que sur le moment de l'écriture de cette source je n'en avais pas besoin...(en fait il y a juste la base 5 dont j'avais besoin en plus...base que j'ai supprimée dans la source ici présente...).
J'avoue avoir été tenté de répondre à ta demande de reproduire n'importe quelle base numéraire... cependant, un probléme quelque peut délicat est venu jouer les trouble fait:
une fois qu'on a fini l'alphabet...je ne savais pas comment faire (d'ou une limitation à la base 36)...or, nous savons tous qu'il existe une multitude de bases un peu spéciales, comme la base 60 utilisée dans l'expression des angles et des heures...etc...
(pour un peu plus d'infos sur le sujet --> http://membres.lycos.fr/villemingerard/Numerati/Base.htm) et c'est pourquoi j'ai décidé de ne pas implémenter arbitrairement un nombre de base fini mais d'offrir un algorithme auquel on peut rajouter autant de base que l'on souhaite...juste en rajoutant une ligne dans le tableau. Ex: je veux utiliser une base qui représente les chiffres uniquement à partir des 5 éléments ordonnés suivant:
CHAT
on aura donc:
0(base10) = C(baseCHAT)
1(base10) = H(baseCHAT)
etc...
90(base10)=HHAA(baseCHAT)

bref suffit juste de rajouter une entrée au tableau "base" comme ceci:

'chat'=>array('sca'=>4,
'from'=>array('C'=>0,'H'=>1,'A'=>2,'T'=>3),
'to'=>array(0=>'C',1=>'H',2=>'A',3=>'T'))

(je viens de la rajouter à l'exemple d'utilisation de ma source...c'est marrant: http://maitre.cryzalid.net/cvt_base.php)

Bref... j'pense que finallement ma fonction est pas si mal... en tout cas pour l'usage que j'en fais (base courantes + base5 + autres) elle me convient trés bien...
;-)

++

Cocoon
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008 1
31 août 2004 à 14:38
Pour ceux un peu plus paresseux :
int intval ( mixed var [, int base])
ou encore
string sprintf ( string format [, mixed args [, mixed ...]])
En mettant comme argument
%b - Binaire
%o - Octal
%d - Entier
%x - Hexa

Donc pour être imaginatif avec ta source, ca serait bien si tu pouvais faire cela avec n'importe quelle base. Mais cela revient au même que d'utiliser intval()
Rejoignez-nous