Comment intervertir les chiffres d'un nombre ? - Programmation
Marsh Posté le 28-02-2001 à 16:20:37
je connait pas asp mais ca doit marcher partout 
tu converti ton nombre(130601) en chaine de caractaire("130601" ) 
apres tu peut creer une fonction qui traite cette chaine  
en ("010613" )puis tu reconvertis en nombre. 
mais a mon avis ya mieu
Marsh Posté le 28-02-2001 à 16:28:50
comme calvaire318, le passage par une chaine. 
C est le plus simple et le plus generique (tu peux changer facilement la taille des blocs). 
 
en fait, le principe est de copier blocs de caracteres par blocs de caracteres ta chaine source dans une chaine destination, en utilisant longueur-position courante comme indice. 
 
boucle sur i de 1 a longueur_source 
  dest[i]=source[longueur_source-i] 
  dest[i+1]=source[longueur_source-i+1] 
  (pour des blocs de 2) 
 
voila
Marsh Posté le 28-02-2001 à 16:33:09
Je ne connais pas l'ASP non plus mais qq chose dans le genre : 
Valeur = ton nombre de 6 chiffres 
droite = valeur - arrondir(valeur/100)*100 
centre = arrondir(valeur/100)-arrondir(valeur/10000)*100 
gauche = arrondir(valeur/10000) 
 
resultat = droite*10000 + centre*100 + gauche 
 
arrondir = partie entière bien sur
Marsh Posté le 28-02-2001 à 16:53:20
JPA : merci pour ta methode 
 
je sais qu'elle marche mais je prefererais passer par l'autre methode (changement en chaine de char) 
 
mais bon, si pers n'arrive a m'aider, je passerai par la tienne 
 
 
Les autres : oui, j'y ai pense aussi mais je n'y arrive pas 
 
quelqu'un sait comment convertir un nombre en chaine texte ? j'ai essaye avec split() mais lorsque je fais un response.write pour tester, il me met que le type n'est pas compatible 
 
 
so, j'ai toujours pas la solution ... 
 
encore un peu d'aide svp 
 
 
merci d'avance !
--Message édité par Batman-Fr--
Marsh Posté le 05-03-2001 à 18:02:03
salut a tous 
 
 
me r'vala 
 
 
alors juste pour vous dire que je galere un peu... 
la manip "mathematique" fonctionne mais ne me permet pas d'obtenir un resultat ideal. Du coup, je dois absolument passer par la manip "litteraire" ... 
 
alors voila mon code pour intervertir les chiffres, comme propose par  Philou_a7 : 
 
valeur = Cstr(rs.Fields("DCA" ).value) 
longueur_source =  len(valeur) 
 
For i = 1 To longueur_source 
DCA_inv[i] = valeur[longueur_source-i]  
DCA_inv[i+1] = valeur[longueur_sourcei+1] 
Next 
 
seulement, la compilation ne va pas, et IE m'affiche cette erreur : 
 
Erreur de compilation Microsoft VBScript error '800a0401'  
 
Fin d'instruction attendue  
 
/cgi-bin/gest/liste_offre_log.asp, line 186  
 
DCA_inv[i] = valeur[longueur_source-i] 
------------------^ 
 
so 
 j'ai encore tape une connerie grosse comme le monde ?? 
 
merci de nouveau pour votre aide 
 
 
 
 
--Message édité par Batman-Fr--
Marsh Posté le 05-03-2001 à 18:19:02
si tu fait valeur[longueur_source-i] ça veux dire que valeur est un tableau, est-ce le cas??
Marsh Posté le 05-03-2001 à 21:21:15
salut 
 
 
bah c'est le premier appel a cette avriable et elle n'est pas declare ... 
il me semblait que les variables prenaient le type le + arrangeant non 
 
 
ca serait ca le probleme ?
--Message édité par Batman-Fr--
Marsh Posté le 05-03-2001 à 21:50:27
La ,désolé, mais je connais pas le VBScript du tout 
 ! 
 
Dans mon mail, le valeur[i] représente le ième caractère de la chaine valeur, c'est tout ce que je peux te dire....
Marsh Posté le 05-03-2001 à 21:56:29
oui, comme en C ou une chaine de char est un tab de char ! 
 
je pense que c'est commun a nombre de langages non ?
Marsh Posté le 05-03-2001 à 23:44:39
Bonjour à toutes et tous, 
 
Comme JPA et d'autres, je trouve qu'il est beaucoup plus facile d'utiliser une méthode mathématique pour ce problème. L'algorithme, ci-dessous, ne prend que quelques lignes. 
 
Salutations 
 
------------------------------ 
Algorithme de la fonction (x doit être >=0) : 
 
Inverse2a2 (x) 
début 
   y <- 0 
   tant que x<>0 
      y <- (y*100) + (x modulo 100) 
      x <- partie entière(x/100) 
   ftant 
   retourne y 
fin 
 
------------------------------ 
Exemple du programme en C : 
 
typedef unsigned long NOMBRE; 
 
NOMBRE Inverse2a2 (NOMBRE x) 
{ 
   NOMBRE y; 
   y=0; 
   while (x) 
   { 
      y=y*100+(x%100); 
      x/=100; 
   } 
   return(y); 
} 
 
main() 
{ 
   NOMBRE x; 
   x=12345678L; 
   printf("Inverse2a2(%lu)=%lu\n",x,Inverse2a2(x)); 
} 
 
Donne à l'exécution : 
 
Inverse2a2(12345678)=78563412
--Message édité par tfj57--
Marsh Posté le 06-03-2001 à 08:59:49
le probleme avec la methode maths, c'est que si mon nombre commence par un 0, bah il ne me le garde pas alors que ca serait + plus agreable pour l'utilisation qu'on en fait...
Marsh Posté le 06-03-2001 à 15:21:04
Bonjour à toutes et à tous, 
 
S'il y a un seul zéro en début de nombre ou s'il y a un nombre impaire de chiffres significatifs, le zéro est conservé : 
 
Inverse2a2(12345)=452301 
Inverse2a2(012345)=452301 
Inverse2a2(0012345)=452301 
Inverse2a2(00012345)=452301 
 
Est-ce que les nombres ont un format précis, exactement 6 chiffres complétés avec des 0 à gauche ? Si le nombre à inverser a un nombre de chiffres impaires, style 123, comment doit se faire l'inversion ? 
 
Salutations
--Message édité par tfj57--
Marsh Posté le 06-03-2001 à 19:19:20
chaine = 130601 
'recuperation de la longueur de la chaine 
var = len(chaine) 
 
DO WHILE(var <> 0) 
 
'on met les 2 derniers elements de chaine 
newchaine = ""&newchaine&""&right(chaine,2)&"" 
 
'on eleve les deux derniers elements de chaine 
chaine = left(chaine,var - 2) 
 
var = var - 2 
 
LOOP 
 
En ASP il n'y a pas vraiment de type c'est definie par rapport a l'action que l'on fait. 
 
J'ai juste fait des actions sur les chaines de caracteres.
--Message édité par Wakko--
Marsh Posté le 06-03-2001 à 19:44:46
| tfj57 a écrit a écrit  : Bonjour à toutes et à tous, S'il y a un seul zéro en début de nombre ou s'il y a un nombre impaire de chiffres significatifs, le zéro est conservé : Inverse2a2(12345)=452301 Inverse2a2(012345)=452301 Inverse2a2(0012345)=452301 Inverse2a2(00012345)=452301 Est-ce que les nombres ont un format précis, exactement 6 chiffres complétés avec des 0 à gauche ? Si le nombre à inverser a un nombre de chiffres impaires, style 123, comment doit se faire l'inversion ? Salutations --Message édité par tfj57--  | 
 
 
je parlais du resultat : s'il commence par un 0, il ne sera pas conserve. 
 
Le probleme, c'est que le nombre de depart represente une date au format jjmmaa mais qu'il n'est pas au format date ... et je dois effectuer un tri croissant sur cette date. Du coup, pour etre valable, je dois passer au format aammjj et les annees, bah elles commencent inevitablement par 0 voire 00 si c'est pour 2000.
Marsh Posté le 06-03-2001 à 19:49:44
Avec ma solution ca marche le zero est conserve tant que tu rest avec des chaines de caracteres, mais sa ne pose aucun probleme pour faire un tri.
Marsh Posté le 07-03-2001 à 03:11:41
| Wakko a écrit a écrit  : Avec ma solution ca marche le zero est conserve tant que tu rest avec des chaines de caracteres, mais sa ne pose aucun probleme pour faire un tri.  | 
 
 
Je comprends maintenant, l'inversion des chiffres 2 à 2 va permettre de faire des tris sur une date. 
 
Si la date est toujours du type jjmmaa, il suffit de faire quelque chose comme : 
 
valeur = Cstr(rs.Fields("DCA" ).value)  
resultat = mid(valeur,5,2) + mid(valeur,3,2) + mid(valeur,1,2) 
 
La fonction mid(chaîne, début, longueur)  permet d'extraire une sous chaîne. 
 
Attention, s'il y a des dates <2000, le fameux bug de l'an 2000 va frapper car il va y avoir un problème pour le tri ! Il faudra faire une petite modification. 
 
Salutations
Marsh Posté le 07-03-2001 à 16:59:52
Wakko : arrggghhhhh, voila exactement LA fonction que je cherchais ! Merci de me l'avoir fait decouvrir car j'ai essaye de passer par split() mais ca foirait totalement 
 
 
 
 
le topic est clos, merci  une nouvelle fois A TOUS pour votre contribution 
 
 
++
Marsh Posté le 28-02-2001 à 15:40:46
Salut,
 
 
sous ASP, j'ai un nombre a 6 chiffres et j'aimerais intervertir les chiffres 2 a 2 ...
Un exemple me fera mieux comprendre :
depart : 130601
arrivee : 010613
vous vous en doutez, je n'y arrive pas
pouvez vous m'aider svp ?
merci d'avance
---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391