MW211 EXIT

devlog
設計/連番をグループ番号と枝番に変換
2014年07月01日
一定の周期でグループ化されている連番から、グループ番号と枝番を算出する方法。
┌──────────────────────────────────────┐
│                        Y座標                                               │
│      ┌─┬─┬─┬─┐                                                    │
│      │ 1│ 2│ 3│ 4│    1                                               │
│      ├─┼─┼─┼─┤                                                    │
│      │ 5│ 6│ 7│ 8│    2                                               │
│      └─┴─┴─┴─┘                                                    │
│ X座標   1   2   3   4                                                      │
└──────────────────────────────────────┘
例えば、上記の場合「7」は「2-3」(Y-X)みたいな感じに変換する方法。

単純に以下のようにやってしまうと、剰余がない場合にずれてしまう。
┌──────────────────────────────────────┐
│グループ番号 = (値 / グループ単位) + 1;  …商(端数切捨)                     │
│        枝番 = 値 % グループ単位;        …剰余                             │
└──────────────────────────────────────┘
上記の例でいえば、「8」は「2-0」ではなく「3-0」になってしまう。

よって、以下のように「-1」して0オリジンにしてから計算しなければならない。
┌──────────────────────────────────────┐
│                        商                                                  │
│      ┌─┬─┬─┬─┐                                                    │
│      │ 0│ 1│ 2│ 3│ 0                                                  │
│      ├─┼─┼─┼─┤                                                    │
│      │ 4│ 5│ 6│ 7│ 1                                                  │
│      └─┴─┴─┴─┘                                                    │
│  剰余   0   1   2   3                                                      │
└──────────────────────────────────────┘
つまり、以下のような感じになる。
┌──────────────────────────────────────┐
│グループ番号 = ((値 - 1) / グループ単位) + 1;  …商(端数切捨)               │
│        枝番 = ((値 - 1) % グループ単位) + 1;  …剰余                       │
└──────────────────────────────────────┘
注意が必要だ。
分類:設計