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

 


Dernière réponse
Sujet : Comment intervertir les chiffres d'un nombre ?
Batman-Fr 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 :)
 
++

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Batman-Fr 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 :)
 
++
tfj57

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

wakko 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.
Batman-Fr

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.

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

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

Batman-Fr 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...
tfj57 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--

Batman-Fr 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 ?
philou_a7 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....
Batman-Fr 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--

duch si tu fait valeur[longueur_source-i] ça veux dire que valeur est un tableau, est-ce le cas??
Batman-Fr 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--

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

JPA 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
philou_a7 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
calvaire318 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
Batman-Fr 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

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