| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Заполнение матрицы числами |
| Автор: FFFU 21.4.2011, 21:46 | ||||
| Здравствуйте! Нам в институте задали сделать такую лабораторку:
С диагоналями я разобрался, а как задавать остальные числа не пойму:
Помогите, пожалуйста! |
| Автор: volvo877 21.4.2011, 22:41 |
| А можно картинку СЮДА прикрепить, а не на этот ###хостинг, который постоянно отображает "Domain Unregistered" с этой поганой жабой? А то неизвестно, какая там схема у тебя... Как думаешь, что я должен понять из твоего сообщения? |
| Автор: FFFU 21.4.2011, 22:49 |
| Простите, поправил. |
| Автор: volvo877 21.4.2011, 23:06 | ||
Так, что-ли?
Что непонятно - спрашивай... |
| Автор: FFFU 23.4.2011, 01:16 |
| Да, все так, спасибо большое! А можешь рассказать свой ход мысли? Выглядит здорово, и я сомневаюсь что я бы сам до такого додумался. Может я недостаточно подумал, но не понимаю, как путем наблюдений получить n - 2 * i и n - i + 1. |
| Автор: volvo877 23.4.2011, 03:28 |
| Ну, это как раз проще простого. Что обозначает в данном случае i - понятно? Это либо номер строки (когда работаем с 1 и 2), либо номер столбца (работаем с 3, 4). Но логика везде одинакова, индексы только меняются местами, так что для простоты будем считать, что i - номер строки, а j - номер столбца, и работаем мы с 1-цами. Так вот. Начинаем, понятно, с первой строки. Откуда в первой строке надо начинать заполнять элементы? со столбца №2, правда? Заканчивать где? В столбце (n-1). Во второй строке начало/конец - соответственно 3 и (n - 2). То есть, отсюда вычисляются параметры вложенного цикла, по j. Внешний. До каких пор имеет смысл продолжать цикл, т.е., переходить к новой строке? Пока в новой строке будут присутствовать единицы. Каждая новая строка уменьшает количество единиц на 2 (одна - слева, вторая - справа). То есть, в строке №1 число единиц = (N - 2), в строке №2 их еще на 2 меньше, т.е., (N - 2*2), так что продолжать цикл надо, пока (N - 2*текущая_строка) больше 0, что я и сделал. Дальше нет смысла продолжать, ты ж не будешь заполнять ноль ячеек, или тем более отрицательное количество Ну, а это вообще элементарно. Все треугольники с числами - симметричны относительно центра матрицы. То есть, для того, чтобы выставить двойки, надо их ставить в том же столбце, что и единицы (J не меняется), но в симметричной строке: единицу ставим в первой - двойку надо в N-ой. Единицу - во второй строке => двойку - в (N - 1)-ой, и так далее. Отсюда и N+1-i. То же самое касается и троек/четверок, но тут надо поменять строки/столбцы местами, что я и сделал... |
| Автор: FFFU 24.4.2011, 21:28 |
| Да, теперь понятно. Большое спасибо! |