Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2747 connectés 

  FORUM HardWare.fr
  Programmation

  Comment intervertir les chiffres d'un nombre ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment intervertir les chiffres d'un nombre ?

n°16337
Batman-Fr
powered by LP & K2
Posté le 28-02-2001 à 15:40:46  profilanswer
 

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
mood
Publicité
Posté le 28-02-2001 à 15:40:46  profilanswer
 

n°16345
calvaire31​8
Posté le 28-02-2001 à 16:20:37  profilanswer
 

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

n°16347
philou_a7
\_o< coin ! >o_/
Posté le 28-02-2001 à 16:28:50  profilanswer
 

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

n°16348
JPA
Posté le 28-02-2001 à 16:33:09  profilanswer
 

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

n°16352
Batman-Fr
powered by LP & K2
Posté le 28-02-2001 à 16:53:20  profilanswer
 

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
n°17100
Batman-Fr
powered by LP & K2
Posté le 05-03-2001 à 18:02:03  profilanswer
 

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
n°17104
duch
Posté le 05-03-2001 à 18:19:02  profilanswer
 

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
n°17145
Batman-Fr
powered by LP & K2
Posté le 05-03-2001 à 21:21:15  profilanswer
 

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
n°17149
philou_a7
\_o< coin ! >o_/
Posté le 05-03-2001 à 21:50:27  profilanswer
 

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

n°17152
Batman-Fr
powered by LP & K2
Posté le 05-03-2001 à 21:56:29  profilanswer
 

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
mood
Publicité
Posté le 05-03-2001 à 21:56:29  profilanswer
 

n°17163
tfj57
Posté le 05-03-2001 à 23:44:39  profilanswer
 

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

n°17177
Batman-Fr
powered by LP & K2
Posté le 06-03-2001 à 08:59:49  profilanswer
 

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
n°17259
tfj57
Posté le 06-03-2001 à 15:21:04  profilanswer
 

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

n°17347
wakko
Posté le 06-03-2001 à 19:19:20  profilanswer
 

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

n°17349
Batman-Fr
powered by LP & K2
Posté le 06-03-2001 à 19:44:46  profilanswer
 

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
n°17350
wakko
Posté le 06-03-2001 à 19:49:44  profilanswer
 

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.

n°17401
tfj57
Posté le 07-03-2001 à 03:11:41  profilanswer
 

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

n°17538
Batman-Fr
powered by LP & K2
Posté le 07-03-2001 à 16:59:52  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  Comment intervertir les chiffres d'un nombre ?

 

Sujets relatifs
[java-scripts] nombre aléatoire et afficher une imagePHP nombre aléatoire
ASP, utilisation de nombre plutot que chaine de caractere...[phpmyadmin] y a-t-il une limite pour le nombre de champs ?
ASP : Comment généré un nombre aléatoire ?[ php] Existe-t-il un fonction pour compter le nombre de caractere ??
Plus de sujets relatifs à : Comment intervertir les chiffres d'un nombre ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR