Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4_1-2-3 Вложенные циклы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
371.71 Кб
Скачать

Пример 1 выполнения задания на обработку матрицы

В матрице A(m,n), m12, n10, поменять местами строки с наибольшей и наименьшей суммами элементов.

Для решения поставленной задачи необходимо вычислить суммы элементов каждой строки матрицы, однако не требуется запоминать все вычисленные суммы. Поэтому после вычисления суммы элементов очередной строки матрицы следует сравнить вычисленное значение с текущими значениями максимальной и минимальной сумм и изменить, в случае необходимости, текущие значения максимума и минимума на только что вычисленное, а также запомнить номер строки, для которой эта сумма минимальна или максимальна.

После нахождения номеров строк, подлежащих обмену местами выполняется собственно обмен. Поскольку строка матрицы представляет собой одномерный массив (первый индекс имеет фиксированное значение), то эта операция выполняется с использованием обычного (не вложенного цикла), при этом обмен местами ведется с использованием промежуточной простой переменной b.

program Matr1;

{$APPTYPE CONSOLE}

uses

SysUtils;

const

Mm=12; Nn=10;

type

matr=array[1..Mm,1..Nn] of Real;

var

A:matr;S,Smax,Smin,B:Real;

Imax,Imin,I,J,M,N:Integer;

.....................

begin

WriteLn('Введите количество строк и столбцов');

ReadLn(M,N);

WriteLn('Введите матрицу по строкам');

for I:=1 to M do

begin

for J:=1 to N do

Read(A[I,J]);

ReadLn;

end;

WriteLn('Исходная матрица');

for I:=1 to M do

begin

for J:=1 to N do

Write(A[I,J]:6:1,' ');

WriteLn;

end;

//Задание начальных значений

Smax:=-1e30; //Очень маленькое число

Smin:=1e30; //Очень большое число

//Строго говоря, самое маленькое и самое большое

//значения для используемого типа данных

{

Другой вариант – нахождение суммы элементов первой строки и

задание этого значения для максимума и минимума:

S:=0;

for J:=1 to N do

S:=S+A[1,J];

Smax:=S; Imax:=1;

Smin:=S; Imin:=1;

Далее строки можно рассматривать, начиная со второй

}

//Цикл поиска строк с максимальной и минимальной

//суммами элементов

for I:=1 to M do

begin

S:=0; //Задание начального значение суммы

//Цикл вычисления суммы элементов очередной строки

for J:=1 to N do

S:=S+A[I,J];

if S>Smax then

begin

Smax:=S;

Imax:=I;

end

else

if S<Smin then

begin

Smin:=S;

Imin:=I;

end;

end;

for J:=1 to N do //Цикл обмена местами найденных строк

begin

B:=A[Imin,J];

A[Imin,J]:=A[Imax,J];

A[Imax,J]:=B;

end;

WriteLn('Полученная матрица');

for I:=1 to M do

begin

for J:=1 to N do

Write(A[I,J]:6:1,' ');

WriteLn;

end;

WriteLn('imin=',Imin:2,' imax=',Imax);

ReadLn;

end.

Если матрицу описать как одномерный массив, элементами которого являются одномерные массивы, то обмен местами найденных строк может быть записан короче, без использования цикла:

type

mas=array[1..Nn] of Real;

matr=array[1..Mm] of mas;

var

A:matr; S,Smax,Smin:Real; B:mas;

.................

B:=A[Imin];

A[Imin]:=A[Imax];

A[Imax]:=B;

  1. ..............