Page 2 sur 2
Publié : mer. 01/juil./2009 13:22
par kerkael
Ollivier a écrit : Le problème c'est que ((-1) % 26) = -1, et ça ça n'est pas top.
Hum, pourquoi n'est-ce pas top ? Je n'ai pas de raison de chercher des nombres positifs, vu que je peux cycler par le bas.
J'ai bien (-1)%26=-1 ; (-27)%26=-1 ; 1%26=1 ; 27%26=1
Qu'est-ce qui tu chaffouine ?

Publié : mer. 01/juil./2009 14:14
par Ollivier
Ben Changement("A", -1) ne renvoie pas 25 (donc Z) mais -1 (donc Chr(64) ).
Mais j'ai posté un code où l'on remarque l'addition par un assez grand nombre divisible par 26.
En gros, modulo n marche bien mais pour obtenir des valeur de 0 à (n-1) il faut que le nombre en entrée reste positif et abs(), par exemple ne convient pas.
(((0) - 1) % 10) consisterait à obtenir 9 puisque ça recule d'un nombre entre 0 et 9, qu'on a 0 qui devient -1. Or, lieu de devenir 9, ce calcul retourne -1.
Pour corriger le tir, il faut rajouter un nombre puissance de 10:
((((0) - 1) + 10000) % 10)
Dans ce cas, on est sûr d'effectuer un cycle continu 012345678901234...
ou 9876543210987...
Le simple modulo donnerait de 12 à -12 donnerait:
2 1 0 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 0 -1 -2
alors qu'il nous faut dans ce cas:
2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8
Woilà!
Ollivier
Publié : mer. 01/juil./2009 16:25
par kerkael
@Ollivier
Bon, je vois bien que tu insistes pour obtenir des valeurs positives comprises entre 1 et 26 (ou 0 et 25), mais je ne me suis pas posé la question, n'en ayant point besoin, puisque j'ai ensuite rajouté un test si on n'est pas entre les 2 valeurs de la table Ascii que l'on traite.
Je comprends ton
achtuche d'ajouter une puissance fort élevée, mais

elle ne me parait pas plus élégante que ma méthode qui te chaffouine. En effet, pourquoi 10000 et pas 100000 ou encore 10000000 ... pourquoi 456911 et pas autre chose ? Je ne trouve pas ça beau du tout, et si telle valeur te parait
suffisamment élevée, à partir de quel seuil ?
Tu pourrais aussi bien utiliser mon test d'intervalle dans l'affichage en une seule ligne avec les opérateurs logiques, du genre (mais j'ai pas le temps de réfléchir, là) : (x>96)*(x<123)*[calcul]*Affichage+(x<96)*(x>123)*[calcul]*AutreAffichage ...
J'y pense et je te rappelle, si je peux avant de partir en vacances.

Publié : mer. 01/juil./2009 21:40
par Ollivier
Bah si tu veux, pourquoi pas, mais je ne sais pas trop dans quel but...
Je tiens à te dire qu'il n'est pas directement possible d'utiliser les opérations comme (A > B) etc...
Tu dois écrire ((A > B) Or 0) pour obtenir une résultante booléenne.
Bonne vacances!