Articles avec "module" Tag

Le module de calcul

Le «module» est l'un des aritmentiche disponible sur presque tous les langages de programmation (Je l'ai utilisé la première fois avec la base de Commodore 64) . Peut apparaître comme un opérateur simple, comme dans le cas d'ActionScript ou JavaScript, qui utilisent toutes deux le caractère "pour cent" (b%), ou comme une méthode ou une instruction. Pour les développeurs peuvent être utiles dans des contextes apparemment différents. Gskinner parlé récemment, montrant quelques exemples classiques mais intéressants.

Dit simplement, l'opération renvoie deux nombres forment le reste de leur division. Pour être complet, nous disons que le fonctionnement du module est un sujet très vaste, dont j'ai discuté dans le cryptage RSA ! Cette fois, cependant, ne parle pas des codes ou des chiffres, mais des choses utiles beaucoup plus simple.

Divisible par alternance ...

La première utilisation, nous pouvons rendre le fonctionnement de ce module est de déterminer si un nombre est divisible par un nombre B! Si le risultatto d'un b% (% je vais utiliser ici la notation pour indiquer le fonctionnement du module) est nul, a est divisible par b. Je me souviens quand j'avais à faire avec un problème comme je ne connaissais pas le fonctionnement du module. Sur le Commodore 64 j'avais besoin de savoir si un nombre est divisible par 2. A l'époque j'ai utilisé cette syntaxe (j'ai trouvé le code de origionale - année 1983):

1
2
3
10 INPUT A
12 B = A / 2: si B = INT (B) THEN PRINT "OK LE NOMBRE« A »ET« EQUAL »: GOTO 10
14 print "Le nombre" A "ET" bizarre ": GOTO 10

La base du Commodore 64, cependant, n'ont pas le fonctionnement du module - au moins que je me souviens!

Fondamentalement exactement ce que je faisais que par sa nature rend le fonctionnement du module: 2 vérifié que la division avait pas de repos, dans ce cas, vérifiez que le résultat ne contient pas de décimal ( IF B = INT(B) )! Si l'opération de division est égal à son maximum, puis le nombre est égal!

Si a avoir notre valeur à tester, la même chose peut être résolu par:

1
2
3
a % 2 ) == 0 ) { if ((2%) == 0) {
/ / Même
}

Ou, pour 3, par:

1
2
3
a % 3 ) == 0 ) { if ((a% 3) == 0) {
/ / Divisible par 3
}

Petite note: grâce à la piste si vous avez à faire avec les puissances de 2 annche il un moyen plus rapide pour vérifier si un nombre est pair ou impair. En notation binaire, en fait, les nombres sont tous égaux à zéro le premier bit! Ainsi, en utilisant les opérateurs logiques, vous pouvez savoir si un nombre est impair ou même simplement «protestant» le premier bit:

1
2
3
! ( a & 1 ) ) { if ((a + 1)) {
/ / Même
}

À l'Assemblée, par exemple, ce n'est du pain et du beurre! Il est encore plus immédiate et simple (le Motorola 68020, par exemple, avait une instruction BTST que "testé" juste un seul bit ;) ). – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera ). Les opérations logiques (ET, OU, NON, XOR, etc ...), en fait, sont connus pour être plus rapide en termes de courir, et puis "time machine"! (a & 1) effectue l'opération logique de ET ( & - Multiplication binaire) entre notre valeur a , et 1 (appelé masque). Si a = 7 (00000111), par exemple:

1
2
3
00000111 ET
= 00000001
00000001; impairs

Si a 8 =:

1
2
3
00001000 ET
= 00000001
00000000, égale

Non seulement nous pouvons vérifier les numéros, qui est, avec le premier bit à 0, et donc divisible par 2, mais peut également se produire si un nombre est divisible par 4, 8, 16, 32, 64, etc ... en utilisant les formulaires appropriés:

1
2
3
! ( a & 3 ) ) { if ((a & 3)) {
/ / Divisible par 4 (masque = 00000011 = 3), puisque 4 est 00000100)
}

Si les deux derniers bits sont mis à zéro le nombre est divisible par 4! Si les trois derniers bits (masque 00000111) sont à zéro le nombre est divisible par 8! Et ainsi de suite :)

Gskinner montre l'utilisation du module en cas de génération alternante des valeurs. Un exemple classique est de changer le fond d'une liste d'éléments:. Un blanc et un gris Gskinner propose:

1
2
3
4
5
rowIndex % 2 == 0 ) { if (rowIndex% 2 == 0) {
= 0xFFFFFF appeler rowColor;
{ Else {}
appeler rowColor = 0xCCCCCC;
}

Tout d'abord, le code ci-dessus peuvent être résolus avec une seule ligne de code:

1
2 == 0 ) ? 0xFFFFFF : 0xCCCCCC ; appeler rowColor = (rowIndex% 2 == 0) 0xFFFFFF: 0xCCCCCC;?

Par ailleurs, dans ce cas précis, je voudrais éviter d'effectuer une réalité "lourd" sous forme d'opération. Cette situation particulière est souvent engagé dans une boucle, de sorte qu'il serait "bon" ne pas perdre de cycles d'horloge de la machine. Dans ces cas, j'aime le plus propre (et logique) solution:

1
fooIndex == false ) ) ? 0xFFFFFF : 0xCCCCCC ; appeler rowColor = (fooIndex = (fooIndex == false)) 0xFFFFFF:? 0xCCCCCC;

o false , a seconda di come vogliamo impostare inizialmente il nostro colore sfondo.fooIndex precedentemete est une valeur définie au true ou false , selon la façon dont nous avons d'abord mis notre couleur de fond. Cette approche est plus subtile, moins immédiates, au premier abord, mais plus rapide car il effectue logiquement vrai / faux. la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. Si fooIndex est vrai, lorsque l'instruction est exécutée (fooIndex = (fooIndex == false) ) la condition (fooIndex == false) est faux et par conséquent fooIndex sera fixé de true à false. verrà impostato da false a true! La deuxième fois, cependant, la condition (fooIndex == false) est vraie et ensuite fooIndex est du faux à vrai! Et sur ...

Répétitions: à surveiller le comportement

L'arithmétique finie, qui est la base du fonctionnement de l'exploitation du module, il est souvent désigné comme l'arithmétique d'horloge. Une pièce d'horlogerie classique a un cadran avec des mains divisées en 12 heures (12, plus 12 jours de nuit!), Suffit à indiquer l'un des 24 heures par jour. A 08h00 Si je vous ai demandé à quelle heure votre montre score entre 18 heures, votre réponse serait de 8 +18 = 26! Mais l'02:00 dans la nuit! Involontairement et sans le savoir, peut-être, effectuer des opérations conitnuamente formulaire chaque fois que nous avons affaire à temps.

En Italie, nous sommes habitués au système de 24 heures (ou mixte). Quand nous point à 16h00 heure de l'intention que dans d'autres pays est indiqué comme h 04:00. Qui utilise le suis postfix / h à distinguer de ces heures de nuit OFA, plus souvent encore exécute l'opération du module, le module 12 dans ce cas! Nous, les Italiens, et d'autres, cependant, étant habitués à considérer les 24 heures, effectuer des opérations avec le formulaire 24!

Quand je suis 11 heures du matin (11h00 pour tous) et de penser "en 5 heures», les Italiens répondent 5 11 = 16 (quatre dans l'après-midi), un étranger pourrait aussi répondre à 5 +11 = 16 heures. Depuis 5 + 11 arithmétiques classiques, est évidemment 16, ainsi que de l'étranger pour répondre aux 16 heures? Il suffit de lancer le module 12 sur le résultat: 5 + 11 = 16 mod 12 = 4. Il n'est pas nécessaire que vous preniez une calculatrice pour vérifier l'exactitude du calcul, mais ces mesures sont un peu "tout, affiché un visage d'une horloge et placer les mains sur les 11 mentalement, puis ajouter - toujours visuellement - 5 heures, comme par magie, vous aurez en fait environ 4! C'est pourquoi ils sont appelés les quatre dans l'après-midi 16 :)

En Italie, au contraire, nous utilisons une formule 24, en fait: 11 +5 = 16 mod 24 = 16. Quand je suis à 23:00 h, 5 heures après l'28:00 ne sera pas, parce que 28 modulo 12 = 4! 122514884225 Formule 24 = 17! Qu'est-ce qui se passe est que le résultat clé de la formule 24 ne dépassera jamais 24. Mais la chose la plus intéressante est que les numéros sont répétés indéfiniment:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1% 24 = 1
2% 24 = 2
3% 24 = 3
...
22% 24 = 22
23% 24 = 23
24% 24 = 0
25% 24 = 1
26% 24 = 2
27% 24 = 3
...
48% 24 = 0
49% 24 = 1
50% 24 = 2
51% 24 = 3
...

Cette répétition est une désarmante facilité. Imaginez, par exemple, ils doivent avoir un objet, un objet MovieClip, semblable à un échiquier, en quatre colonnes. Créer un quandrato MovieClip, 55 × 55 pixels et la esportiamolo panneau de propriétés comme Simbolo . Le code suivant va avoir notre MovieClip sur quatre colonnes, et sera la "tête" avec le fonctionnement du module:

1
2
3
4
5
6
7
Number = 4 ; var col: Number = 4;
var i= 0 ; i < 12 ; i ++ ) { for (var i = 0; i <12; i + +) {
Sprite = new Simbolo ( ) ; var s: Sprite = new Symbole ();
s ) ; addChild (s);
= ( i % col ) * 60 ; s. = x (avec i%) * 60;
= Math . floor ( i / col ) * 60 ; s. y = Math . floor (i / Col) * 60;
}

cresce in modo indefinito. Comme vous pouvez le voir dans le code, la variable i cycle de for grossir indéfiniment. Mais la coordonnée x de notre MovieClip ne dépasse jamais une certaine valeur, et répète indéfiniment! Voici un exemple concret:

Chargement Flash ...

Grâce aux deux boutons vous pouvez varier le nombre de colonnes (la forme) et le nombre total d'éléments, en utilisant l'algorithme ci-dessus.

Suite ...

Le cryptage RSA

Tout d'abord, comme mentionné dans le message de cryptage du système RSA est un chiffrement à clé publique et tire parti des propriétés des nombres premiers. Par ailleurs, l'arithmétique utilisée (dans les calculs) n'est pas l'ordinaire, mais le fini que l'on appelle ou artirmetica modulaire. Commençons tout de ce dernier à procéder étape par étape dans la mise en œuvre de cryptage RSA.

Suite ...