Comment intervertir les chiffres d'un nombre ?

Comment intervertir les chiffres d'un nombre ? - Programmation

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 :D
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
Reply

Marsh Posté le 28-02-2001 à 15:40:46   

Reply

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

Reply

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

Reply

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

Reply

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 :cry:
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--


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 05-03-2001 à 18:02:03    

salut a tous :)
 
me r'vala :D
 
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--


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

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??


---------------
Webmaster du site de l'Île-Saint-Denis : http://www.lile-saint-denis.fr
Reply

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--


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

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....

Reply

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 ?


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Marsh Posté le 05-03-2001 à 21:56:29   

Reply

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--

Reply

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...


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

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--

Reply

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--

Reply

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.


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

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.

Reply

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

Reply

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 :gun:
 
:)
 
le topic est clos, merci  une nouvelle fois A TOUS pour votre contribution :)
 
++


---------------
Tout ou rien mais rien que tout ! feed-back : http://forum.hardware.fr/forum2.ph [...] ost=121391
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed