Определить номера подъезда и этажа, исходя из номера квартиры, количества этажей и количества квартир на этаже

Итак, нумерация квартир, этажей и подъездов в доме начинается с 1. Тут ничего не поделаешь. Временно упростим задачу. Допустим, нужно выяснить этаж квартиры в 1 подъезде. Если разделим нацело номер квартиры на количество квартир на этаже, по идее, оно и получится (для выравнивания таблицы, чтоб лучше видно было, добавил незначащие нули, не обращайте на них внимания).

| | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| k | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
| k div 4 | 00 | 00 | 00 | 01 | 01 | 01 | 01 | 02 | 02 | 02 | 02 | 03 |

Но не получается. Однако, заметим, что ещё и этажи получаются от 0, да ещё и квартиры по этажам сдвинуты на 1. Чё ж делать, 3 div 3 ещё = 0, а 4 div 4 уже = 1. Нумеровались бы они с 0, было бы всё тип-топ. Ну и, исходя из вот этих

бредовых

рассуждений, соображаем, что номер квартиры надо брать на 1 меньше, а результат целочисленного деления на 1 больше. Пробуем.

| | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| k | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
| k - 1 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
| (k - 1) div 4 | 00 | 00 | 00 | 00 | 01 | 01 | 01 | 01 | 02 | 02 | 02 | 02 |
| (k - 1) div 4 + 1 | 01 | 01 | 01 | 01 | 02 | 02 | 02 | 02 | 03 | 03 | 03 | 03 |

Ура, получилось. Ну и, надеюсь, div уже вкурили, и откуда -1, а заодно и +1, выяснили.

Аналогично выясняется номер подъезда, только делим не на количество квартир на этаже, а на количество квартир в подъезде.

А теперь

барабанная дробь

разберёмся, чё ж делать, если номер квартиры больше 36, то есть, квартира не в первом подъезде. Для этого и была применена операция mod. Она вычисляет остаток от деления, то есть, выясняет, что там остаётся после применения операции div.

На пальцах: 38 div 36 = 1 (и 2 в остатке) 72 div 36 = 2 (и 0 в остатке). Вот эти-то остатки mod и выясняет. То есть, 38 Mod 36 = 2, 72 mod 36 = 0.

Однако, с этой операцией та же бадяга, что и с div: счёт начинается от 0, а не от 1. С помощью этой операции была пересчитана нумерация квартир так, чтобы для каждого подъезда получалось, что квартиры пронумерованы так же, как и в первом подъезде, а далее вступают в силу вышеупомянутые рассуждения с цветастыми таблицами.

| | | | | |
| --- | --- | --- | --- | --- |
| Подъезд | 1 | 2 | 3 | .. |
| k | 1..36 | 37..72 | 73..108 | .. |
| k-1 | 0..35 | 36..71 | 72..107 | .. |
| (k - 1) mod 36 | 0..35 | 0..35 | 0..35 | .. |

Ну и... После этих манипуляций номер этажа квартиры в любом подъезде вычислить легко: надо то, что получилось, нацело поделить на 4 и добавить 1: (k - 1) mod 36 div 4 + 1.

Глубоко надеюсь, что объяснил всё понятно и просто.

Не по теме:

И, Desdichado2013, полагаю, Вам пора привыкать делать подобные рассуждения в уме. Тогда умище отрастёт, может, больше, чем у меня. :D