Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
30.04.2013
Размер:
153.09 Кб
Скачать

Пример 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}

кон

Теперь читатель может самостоятельно построить детальный алгоритм, обеспечивающий полное решение поставленной задачи.

Соседние файлы в папке лекции