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

UptoLike

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

187
Решение. В этой задаче исходные данные представлены в виде двумерного
массива. Результат также является массивом, но одномерным. Для элементов
одномерного массива не нужно в данной задаче заводить отдельного индекса, так
как элементы получаются синхронно с обработкой строк исходного массива.
Фрагмент программы на Паскале может быть таким:
for i:=1 to n do {перебираем строки}
begin b[i]:=0; {начальное значение
суммы i-ой строки}
for j:=1 to n do b[i]:=b[i]+a[i,j]
end.
Пример 11.44. Положительные суммы элементов строк двумерного массива n·n
записать в массив b.
Решение. Эта задача отличается от предыдущей тем, что не все суммы строк
двумерного массива записываются в ответ, поэтому для работы с массивом b
потребуется дополнительный индекс. Фрагмент программы приведен ниже:
k:=0; {пока нет положительных сумм элементов строк}
for i:=1 to n do {перебор строк двумерного массива}
begin s:=0; {начальное значение суммы i-ой строки}
for j:=1 to n do s:=s+a[i,j];
if s>0 then begin k:=k+1; b[k]:=s end
end.
Упражнение. Перепишите фрагмент предыдущей программы так, чтобы не
использовать дополнительную переменную s.
Пример 11.45. Найти максимальную сумму среди сумм тех столбцов
целочисленного двумерного массива n·n, диагональный элемент которых
положительный.
Решение. Перебираем столбцы (i). Для каждого столбца (j), проверяем
положителен ли его диагональный элемент (i=j). Если диагональный элемент
положителен, то находим сумму элементов этого столбца и проверяем ее на
максимум. При поиске максимальной суммы возникает проблема присваивания
начального значения, которое заранее неизвестно, так как заранее неизвестен
столбец с положительным элементом на диагонали. Поэтому приходится
заводить
указатель, указывающий, в первый ли раз вычислено нужное значение.
p:=0; {нет начального значения для поиска максимума}
for i:=1 to n do {перебор столбцов}
if a[i,i]>0
then begin s:=0;
for j:=1 to n do s:=s+a[j,i];
if p=0
then begin max:=s; p:=1 end { установлено начальное значение
для максимума }
else if max<s then max:=s
end.
Пример 11.46. Отсортировать элементы двумерного массива по элементам
второй строки.
Решение. Исходный массив Результат
1 2 3 4 5 5 2 4 3 1
                                       187

   Решение. В этой задаче исходные данные представлены в виде двумерного
массива. Результат также является массивом, но одномерным. Для элементов
одномерного массива не нужно в данной задаче заводить отдельного индекса, так
как элементы получаются синхронно с обработкой строк исходного массива.
Фрагмент программы на Паскале может быть таким:
   for i:=1 to n do {перебираем строки}
   begin       b[i]:=0; {начальное значение суммы i-ой строки}
               for j:=1 to n do b[i]:=b[i]+a[i,j]
   end.
   Пример 11.44. Положительные суммы элементов строк двумерного массива n·n
записать в массив b.
   Решение. Эта задача отличается от предыдущей тем, что не все суммы строк
двумерного массива записываются в ответ, поэтому для работы с массивом b
потребуется дополнительный индекс. Фрагмент программы приведен ниже:
   k:=0; {пока нет положительных сумм элементов строк}
   for i:=1 to n do {перебор строк двумерного массива}
   begin       s:=0; {начальное значение суммы i-ой строки}
               for j:=1 to n do s:=s+a[i,j];
               if s>0 then begin k:=k+1; b[k]:=s end
   end.
   Упражнение. Перепишите фрагмент предыдущей программы так, чтобы не
использовать дополнительную переменную s.
   Пример 11.45. Найти максимальную сумму среди сумм тех столбцов
целочисленного двумерного массива n·n, диагональный элемент которых
положительный.
   Решение. Перебираем столбцы (i). Для каждого столбца (j), проверяем
положителен ли его диагональный элемент (i=j). Если диагональный элемент
положителен, то находим сумму элементов этого столбца и проверяем ее на
максимум. При поиске максимальной суммы возникает проблема присваивания
начального значения, которое заранее неизвестно, так как заранее неизвестен
столбец с положительным элементом на диагонали. Поэтому приходится заводить
указатель, указывающий, в первый ли раз вычислено нужное значение.
   p:=0; {нет начального значения для поиска максимума}
   for i:=1 to n do {перебор столбцов}
   if a[i,i]>0
   then        begin s:=0;
                       for j:=1 to n do s:=s+a[j,i];
                       if p=0
                       then begin max:=s; p:=1 end { установлено начальное значение
                                                       для максимума }
                       else if max