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

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 :wink: 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. :twisted:

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!