Конспект лекций по программированию для начинающих. Гладков В.П. - 181 стр.

UptoLike

Составители: 

183
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0.
Решение 1. Можно решить эту задачу, используя описанные ранее идеи.
Заметим, что единицы в массиве-результате составляют ромб, две стороны
которого параллельны главной диагонали и отстоят от нее на (n+1) div 2-1. Обе эти
диагонали можно описать уравнением |i-j|=(n+1) div 2-1. Две другие стороны ромба
параллельны побочной диагонали массива. Диагональ, лежащая выше побочной
диагонали, описывается уравнением |i+j|=n-(n+1) div 2+2,
а диагональ, лежащая
ниже побочной, - |i+j|=n+(n+1) div 2. Это решение можно оформить следующим
фрагментом:
k:=(n+1) div 2;
for i:=1 to n do
for j:=1 to n do
if (abs(i-j)=k-1) or (abs(i+j)=n-k+2) or (abs(i+j)=n+k)
then a[i,j]:=1
else a[i,j]:=0.
Решение 2. Можно подойти к решению этой задачи по-другому. Представим,
что единицы в массиве изображают график функции |x|+|y|=k-1, смещенный
относительно начала координат на k (рис. 11.2). Обозначим ось x через i, а ось y
через j. Тогда все элементы массива, равные единице, будут удовлетворять
уравнению |i-k|+|j-k|=k-1.
5
4
3
2
1
1 2 3 4 5
0 0 1 0 0
0 1 0 1 0
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
Ось i
Ось j
Рис. 11.2
Ниже приводится фрагмент, реализующий решение 2:
for i:=1 to n do
for j:=1 to n do
if abs(i-k)+abs(j-k)=k-1
then a[i,j]:=1
else a[i,j]:=0.
Пример 11.37. Найти индексы максимального элемента двумерного массива.
Решение. Идея решения этой задачи совпадает с идеей решения задачи для
одномерного массива. Отличие заключается в необходимости для двумерного
массива вложенных циклов перебора. Фрагмент программы приведен ниже:
                                          183

      10001
      01010
      0 0 1 0 0.
   Решение 1. Можно решить эту задачу, используя описанные ранее идеи.
Заметим, что единицы в массиве-результате составляют ромб, две стороны
которого параллельны главной диагонали и отстоят от нее на (n+1) div 2-1. Обе эти
диагонали можно описать уравнением |i-j|=(n+1) div 2-1. Две другие стороны ромба
параллельны побочной диагонали массива. Диагональ, лежащая выше побочной
диагонали, описывается уравнением |i+j|=n-(n+1) div 2+2, а диагональ, лежащая
ниже побочной, - |i+j|=n+(n+1) div 2. Это решение можно оформить следующим
фрагментом:
   k:=(n+1) div 2;
   for i:=1 to n do
      for j:=1 to n do
              if (abs(i-j)=k-1) or (abs(i+j)=n-k+2) or (abs(i+j)=n+k)
              then a[i,j]:=1
              else a[i,j]:=0.
   Решение 2. Можно подойти к решению этой задачи по-другому. Представим,
что единицы в массиве изображают график функции |x|+|y|=k-1, смещенный
относительно начала координат на k (рис. 11.2). Обозначим ось x через i, а ось y
через j. Тогда все элементы массива, равные единице, будут удовлетворять
уравнению |i-k|+|j-k|=k-1.
                                  Ось j

                           5      0   0   1   0   0
                           4      0   1   0   1   0
                           3      1   0   0   0   1
                           2      0   1   0   1   0
                           1      0   0   1   0   0


                                  1 2 3 4 5           Ось i


                                Р ис. 11.2

   Ниже приводится фрагмент, реализующий решение 2:
   for i:=1 to n do
      for j:=1 to n do
              if abs(i-k)+abs(j-k)=k-1
              then a[i,j]:=1
              else a[i,j]:=0.
   Пример 11.37. Найти индексы максимального элемента двумерного массива.
   Решение. Идея решения этой задачи совпадает с идеей решения задачи для
одномерного массива. Отличие заключается в необходимости для двумерного
массива вложенных циклов перебора. Фрагмент программы приведен ниже: