2012-04-05 4 views
0

Je me demande comment je vais procéder à l'addition et la soustraction de nombres dans une plage définie et qui se boucleraient sur eux-mêmes, exemple ci-dessous;Ajouter et soustraire dans une plage de nombres et boucler

Gamme: 1 - 10

Donc, si je devais maintenant le numéro 7 et ajouté 5, je voudrais que le nombre aller à 2

8, 9, 10, boucle autour de 1, 2.

et même si je soustrait, de sorte que je le numéro 3 et I 4 retranche donc je devrait être laissée à 9.

2, 1, boucle autour de 10, 9

I espère que cela fait sens.

Merci.

Répondre

2

Vous pouvez utiliser l'opérateur%.

Il calcule le reste après la division.

Par exemple:

$d = 10; 

$x = 7; 

$y = 5; 

echo ($x + $y) % $d; 

donne 2;

Avec des valeurs négatives, vous pouvez simplement supprimer MOINS

+0

Si je '$ r = 10; echo (2 - 5)% $ r; ' Il me renvoie avec -3 Quand il descend en dessous de 1, je dois aller à 10 puis redescendre à partir de là, donc ce qui précède devrait me sortir 7. – Hairzo

+0

Utilisez '$ r = 10; $ s = 2 - 5; echo $ s <0? $ r + $ s: $ s% $ r; ' –

+0

Merci, le tien semble le plus simple de tous. – Hairzo

0

Utilisez l'opérateur de module.

result = (a + b) % 10; 
0

Vous pouvez utiliser la fonction modulo comme (7 + 5)% 10 = 2

0

Essayez ceci:

$range = range(1,10); 
$min = min($range); 
$max = max($range); 

function operate($a, $b, $operation) { 
    global $max, $min; 

    switch($operation) { 
     case '+': 
      $a += $b; 
      break; 
     case '-': 
      $a -= $b; 
      break; 
    } 

    if($a < $min) { 
     return $max + $a; 
    } else if($a > $max) { 
     return $a - $max; 
    } 
} 

Hope it helps.

+0

Cela n'a pas semblé fonctionner, il a juste ajouté les nombres et me donne le mauvais nombre. – Hairzo

+0

cela ne fonctionnera pas pour 7 + 25 ou 7-25 – user1303559

0

Vous pouvez le faire avec le code comme

$range = array('from' => 3, 'to' => 13); 
$dist = $range['to'] - $range['from']; 
$a = 7; 
$b = 14; 

echo ($dist + ($a % $range['to'] - $b % $range['to'])) % $dist; // $a - $b 
echo ($dist + ($a % $range['to'] + $b % $range['to'])) % $dist; // $a + $b 
0

Modulo fera l'affaire comme d'autres l'ont montré, mais vous devez aussi prendre en compte l'extrémité inférieure de la plage.

E.g. en boucle une valeur arbitraire dans une plage d'heures fonctionnera car il est basé sur zéro. Mais si vous voulez en boucle une valeur dans une plage de mois, vous aurez des ennuis avec le dernier jour, parce que:

31% 31 = 0

Vous bouclera à zéro lorsque vous devez rester sur 31.

Pour faire face à toute gamme, vous devez faire ceci:

$min = 5; 
$max = 15; 
$value = 25; // The range is 11, so we want this turned into 14 

$range = $max - $min + 1; 
$value = (($value-$min) % $range) + $min; 

Pour faire face à des valeurs inférieures au minimum:

$range = $max - $min + 1; 
$value = ($min - $value) % $range; 
$value = $max - ($value - 1); 
Questions connexes