ALTERNATIVE À LA FONCTION ITOA

cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008 - 4 nov. 2003 à 23:30
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005 - 8 nov. 2003 à 02:13
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/17684-alternative-a-la-fonction-itoa

kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
8 nov. 2003 à 02:13
faut pas lire plusieurs sources en meme temps !!!

;-D
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
8 nov. 2003 à 01:17
Eh mais j'avais posté un message d'excuses qd je m'étais rendu compte de mon erreur...où qu'il est passé ???

Bon bah encore désolé
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
7 nov. 2003 à 23:23
lol, c pas grave garlouche, l'algo de génétique c'est de l'autre côté, on t'en veut pas ;-)
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
7 nov. 2003 à 09:53
Ca fait qq temps que je n'y ai plus touché mais pour autant que je me souvienne les algo génétiques utilisent davantage de notions normalement. Ici tu n'utilises que les mutations, mais il y avait une histroire de cross-bidule et de je ne sais quoi encore. Il me semble qu'il y a avait 3 types d' <<erreurs>> possibles. De plus je ne vois pas le taux de mutation ds ton prog.
Sinon je trouve ça un peu bizarre que le mutations ne soient pas utilisées pendant la "procréation" (càd dans l'opérateur *)

Sinon j'ai pas pu testé bicoz j'ai pas un linux sous la main mais d'après la capture d'écran ça a l'air assez efficace.

Sinon pour Kirua : la force brute est toujours la + mauvaise solution!!! (sauf pour trouver un mot de passe....). Et même si dans un cas particulier ça marche mieux (par exemple quand il y a peu de villes à traverser) il ne faut pas en tenir compte car la vitesse des algos se calcule généralement dans le cas des très grand ensembles.


Sinon c'est bien codé mais pas assez commenté...8/10
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
7 nov. 2003 à 02:21
pour info, mon algo fonctionnais nickel et rapidement y'a 10 ans sur un MO6 avec un vieux basic 1.0 donc ca devaris pas poser de pb de perf maintenant ! ;-)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
6 nov. 2003 à 18:32
pour un paramètre par défaut, pas la peine d'utiliser les macro du préprocesseur comme tu l'as fait

#define _itoa(a,b,c) __itoa(a,b,c,32)

il te suffit de faire ceci dans la déclaration de ta fonction:

int __itoa(int num,char *result,int base,int nbrNum = 32)

tu vois, le dernier paramètre, si tu n'en passes pas lors de l'appel de la fonction, 32 sera utilisé.

une autre possibilité, mais qui sied moins ds ce cas-ci, aurait été la surcharge (définir plusieurs prototypes de fonctions de même nom, avec un nombre de paramètres différents, l'une appelant l'autre)
kimmelf2 Messages postés 267 Date d'inscription lundi 22 septembre 2003 Statut Membre Dernière intervention 27 novembre 2005
6 nov. 2003 à 03:37
un algo qui n'utilise pas les puissances :

char HEX[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

cpt=0;
x=valeur a convertir

tant que (x>0)
y=x
x=(int)y/base
reste=y-x*base
chaine[cpt]=HEX[reste]
cpt++
fin tant que
chaine[cpt]=0 // caractere de fin de chaine a pas oublier
inverse le sens de chaine

exemple : convertir 38 vers la base 3
x=38, base=3, cpt=0
-1er passage-
y=x=38
x=(int)38/3 = (int)12.33333 = 12
r=38-12*3 = 38-36 = 2
chaine[0]='2' => chaine="2"
cpt++ => cpt=1

-2e-
y=x => 12
x=(int)12/3=4
r=12-4*3=0
chaine[1]='0' => chaine="20"
cpt=2

-3e-
y=x=>4
x=(int)4/3=1
r=4-1*3=1
chaine[2]='1' => chaine="201"
cpt=3

-4e-
y=x=>1
x=(int)1/3=0
r=1-0*3=1
chaine[3]='1'=>chaine="2011"
cpt=4

------x=0 donc on quitte la boucle-------

chaine[4]=0 => chaine = "2011"
on retourne chaine : chaine="1102" qui est bien la connv en base 3 de 38 :
2*3^0 + 0*3^1 + 1*3^2 + 1*3^3 2*1 + 0*3 + 1*9 + 1*27
2+9+27 = 38

CQFD
cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008
4 nov. 2003 à 23:30
Ca m'a l'air bien lent comme fct.
Perso, je ne l'ai jamais essayé, mais je pense que ma méthode est bcp plus rapide mais marche que sous win.
Je posterai sa demain.
Rejoignez-nous