- •7. Типовые алгоритмы обработки массивов
- •А1. Ввод массива с клавиатуры
- •А2. Вывод одномерного массива целых по k чисел в строке
- •А3. Вывод элементов прямоугольной матрицы по строкам
- •А4. Сумма элементов массива:
- •А5. Поиск максимального / минимального элемента
- •А6. Подсчет числа элементов массива, удовлетворяющих условию
- •А7. Выбор элементов по условию
- •А8. Проверка выполнения некоторого условия
- •А9. Поиск номера элемента, удовлетворяющего условию
- •Примеры использования типовых алгоритмов Пример 1. ”Сформировать массив ”с”, включив в него четные элементы массива ”а”, которые присутствуют в массиве ”в”.
- •Пример 2. ”Найти значение элемента, встречающегося в массиве наибольшее количество раз”.
- •Пример 3. В матрице a[1..N, 1..M] поменять местами первый и третий отрицательные элементы, встретившиеся при просмотре матрицы по строкам слева направо и сверху вниз.
Пример 3. В матрице a[1..N, 1..M] поменять местами первый и третий отрицательные элементы, встретившиеся при просмотре матрицы по строкам слева направо и сверху вниз.
Разработаем только алгоритм, реализующий основную цель задания, предоставив читателю самостоятельно написать фрагменты, обеспечивающие ввод исходных данных и вывод результата.
В
Const MaxCols
= 6; MaxRows
= 6;
Var A
: array[1..
MaxRows, 1.. MaxCols] of real; i,
j : integer; {индексы
текущего элемента при просмотре} i1,j1:
integer; {индексы 1-го отрицательного
элемента} i3,j3:
integer; {индексы 3-го отрицательного
элемента} CountNeg
: integer; {количество отрицательных
элементов} FlagFound3
: boolean; {признак того, что
найден 3-й элемент} Temp
: real; {вспомогательная переменная для
обмена}
Т
CountNeg
:= 0; FlagFound3
:= FALSE; i
:= 1; {для
всех строк начиная с 1-й} while
(i<=n) and
(not
FlagFound3) do begin j
:= 1; {для
всех столбцов начиная с 1-го} while
(j<=m) and
(not
FlagFound3) do begin обработать-элемент-A[i,j]
поменять-местами-элементы-1-и-3 j
:= j + 1; {увеличить
номер столбца} end; i
:= i + 1; {
увеличить номер строки} end;
В этом алгоритме предполагается, что оба цикла могут закончиться в случае, когда найден третий отрицательный элемент и в этот момент будет произведена перестановка его и первого элемента. Если трех элементов в массиве нет, циклы закончатся после просмотра всех элементов матрицы. Перестановка элементов будет выполняться в алгоритме ”обработать-элемент-A[i,j]”.
Приведем вначале алгоритм перестановки (смотрите следующую страницу):
if
FlagFound3 then
begin Temp
:= a[i1, j1]; a[i1,
j1] := a[i3, j3]; a[i3,
j3] := Temp; end; if
FlagFound3 then
begin Temp
:= a[i1, j1]; a[i1,
j1] := a[i3, j3]; a[i3,
j3] := Temp; end;
И, наконец, приведем алгоритм ”обработать-элемент-A[i,j]”:
План
”обработать-элемент-A[i,j]
” нач if
A[i,j]<0 then begin CountNeg
:= CountNeg + 1; if
CountNeg=1 then
begin i1
:= i; j1
:= j; end else
if
CountNeg=3 then
begin i3
:= i; j3
:= j; FlagFound3
:= TRUE; end;
{if} end;
{if} кон
Теперь читатель может самостоятельно построить детальный алгоритм, обеспечивающий полное решение поставленной задачи.
