2017-01-20 3 views
1

は私がこの配列の上にカウンタをインクリメントしていた場合、私は必ずそれがインデックスの外に出たことがないようにするにはモジュレーションの略語は逆になっていますか?

i % 6 

ような何かを行うことができます5

て配列のインデックス0を持っていると言います。減らすために同じことのための略記がありますか?デクリメントとき、私は、

は私が知っている任意の言語に固有のものではない、私はいくつかの言語では

if (i < 0) i = 5 

答えて

0

正の整数の場合、nと負のカウンタの場合は、iを使用して、正の整数値を持つ算術演算として、モジュロnの増分と減分を定義できます。インクリメントはi = (i + 1) % nで、デクリメントはi = (i + n - 1) % nです。

0

を行うことができ、一般的に求めている、i % 6はまだでも動作します - 彼らはあなたので、正、正と負の%を定義します私は-1に減少するときに5を得る。

いずれの言語でも、(i + 6) % 6は、増分または減分のいずれの場合でも範囲内にとどまります。

0

ユーザー定義型に対してモジュラー算術をサポートしている言語を選択した場合、モジュラー整数を使用すると、そのモジュラー整数の範囲内の値になります。

Adaでは、ユーザーはモジュラータイプを指定できます。あなたの質問のためのエイダ・ソリューションは、アレイを介し

type Index_type is mod 6; 
type Example is array(Index_Type) of Integer; 

反復され、循環バッファとして扱い、私は増減することができ、ループ内の単純なループ

declare 
    I : Index_Type := 0; 
    A : Example; 
begin 
    loop 
     A(I) := some_value; 
     I := I - 1; 
    end loop; 
end; 

で行うことができますこの場合、算術演算は常に6を法とします。 Adaでは、このような循環バッファはプロデューサ/コンシューマパターンで使用されることがあります。その場合、各書き込み時にバッファフル状態をチェックし、各読み出し時にバッファエンプティ状態をチェックする、別個の読み出しおよび書き込みインデックスがある。

関連する問題