На предыдущей странице было несколько задач из решебника Абрамяна, посвященных нахождению сумм и произведений элементов в разных строках и столбцах. На данной странице мы будем находить минимумы и максимумы в строках и столбцах. Все матрицы целочисленные, формирование осуществляется с помощью датчика randomize.
Matrix23. Дана матрица размера M × N. В каждой строке матрицы найти минимальный элемент.
Ввод матрицы осуществляется в цикле (строки 14-20). Обозначим минимальный элемент строки матрицы переменной MinElem, переменные для строк и столбцов i,j соответственно. Заходим в строку с номером i (строка 23). Сначала минимальный элемент равен первому элементу i-й строки матрицы a[i,j] (строка 26 кода). Потом проверяем остальные элементы i-й строки (строка 27 кода): если элемент a[i,j] меньше минимального MinElem, то новым минимальным становится a[i,j] (строка 29 кода).
var
A:array[1..10,1..10]ofinteger;
i, j, M, N:byte;
MinElem:integer;
beginwrite('M = ');
readln(M);
write('N = ');
readln(N);
{ Формируем и выводим матрицу: }randomize;
writeln('Случайная матрица ', M,'x', N,':');
for i :=1to M dobeginfor j :=1to N dobegin
a[i, j]:=-100+random(200);
write(a[i, j]:4)end;
writelnend;
writeln;
writeln('Минимальный элемент в каждой строке:');
for i :=1to M dobegin{ Начальное значение минимального элемента
равно первому элементу строки (j = 1): }
MinElem := a[i,1];
for j :=2to N do{ Проверяем остальные элементы строки: j = 2, 3, ..., N }{ Если a[i,j] меньше минимума, то новым минимумом становится a[i,j] }if a[i, j]< MinElem then MinElem := a[i, j];
writeln(i,'-я строка: минимальный элемент = ', MinElem)end;
readlnend.
Но задачу Matrix23 поиска минимального элемента в каждой строке можно выполнить и в одном цикле: сначала находить и выводить элемент матрицы, и тут же сравнивать с минимальным. Также эту задачу можно записать с помощью процедур (вспомогательных подпрограмм).
type
TIntMatr =array[1..10,1..10]ofinteger;
{ Процедура формирования и вывода случайной матрицы: }procedure Vvod(var X: TIntMatr; M, N:byte);
var
i, j:byte;
begin
randomize;
writeln('Случайная матрица ', M,'x', N,':');
for i :=1to M dobeginfor j :=1to N dobegin
x[i, j]:=-100+ random(200); { Случайное целое число с диапазона -100..99 }write(x[i, j]:4)end;
writelnendend;
{ Процедура отыскания минимального
элемента в каждой строке матрицы: }procedure MinElemLine(X: TIntMatr; M, N:byte);
var
i, j:byte;
MinElem:integer;
beginwriteln('Минимальный элемент в каждой строке:');
for i :=1to M dobegin{ Начальное значение минимального элемента
равно первому элементу строки: j = 1 }
MinElem := x[i,1];
{ Проверяем остальные элементы строки: j = 2, 3, ..., N }for j :=2to N do{ Если a[i,j] меньше минимума, то новым
минимумом становится a[i,j] }if x[i, j]< MinElem then MinElem := x[i, j];
writeln(i,'-я строка: минимальный элемент = ', MinElem)endend;
var
A: TIntMatr;
M, N:byte;
beginwrite('M = ');
readln(M);
write('N = ');
readln(N);
{ Формируем и выводим матрицу }
Vvod(A, M, N);
writeln;
{ Находим минимум в каждой строке }
MinElemLine(A, M, N);
readlnend.
Matrix24. Дана матрица размера M × N. В каждом столбце матрицы найти максимальный элемент.
Суть такая: сначала формируем матрицу (строки 14 - 20 кода), потом в новом цикле в каждом столбце отдельно находим максимальный элемент (строки 23 - 30). Причем, во втором цикле внешний цикл будет по столбцам, внутренний - по строкам.
var
A:array[1..10,1..10]ofinteger;
i, j, M, N:byte;
MaxElem:integer;
beginwrite('M = ');
readln(M);
write('N = ');
readln(N);
{ Формируем и выводим матрицу: }randomize;
writeln('Случайная матрица ', M,'x', N,':');
for i :=1to M dobeginfor j :=1to N dobegin
a[i, j]:=-100+random(200);
write(a[i, j]:4)end;
writelnend;
writeln;
writeln('Максимальный элемент в каждом столбце:');
for j :=1to N dobegin{ Начальное значение максимального элемента
равно первому элементу столбца: i = 1 }
MaxElem := a[1, j];
for i :=2to M do{ <-- Проверяем остальные элементы столбца }{ Если a[i,j] больше максимума, то новым
максимумом становится a[i,j] }if a[i, j]> MaxElem then MaxElem := a[i, j];
writeln(j,'-й столбец: ', MaxElem)end;
readlnend.
const
rows =10; { Максимальное количество строк матрицы }
columns =10; { Максимальное количество столбцов матрицы }type
TIntMatr =array[1..rows,1..columns]ofinteger; { Описываем тип массива }{ Процедура формирования и вывода случайной матрицы: }procedure VvodRandom(var X: TIntMatr; M, N:byte);
var
i, j:byte;
begin
randomize;
writeln('Случайная матрица ', M,'x', N,':');
for i :=1to M dobeginfor j :=1to N dobegin
x[i, j]:=-100+ random(200); { Случайное целое число с диапазона -100..99 }write(x[i, j]:4)end;
writelnendend;
{ Максимальный элемент в каждом столбце: }procedure MaxElemInEachColumn(X: TIntMatr; M, N:byte);
var
i, j:byte;
MaxElem:integer;
beginfor j :=1to N dobegin{ Начальное значение максимального элемента равно первому элементу столбца: i = 1 }
MaxElem := x[1, j];
for i :=2to M do{ <-- Проверяем остальные элементы столбца: i = 2, 3, ..., M }{ Если a[i,j] больше максимума, то новым максимумом становится a[i,j] }if x[i, j]> MaxElem then MaxElem := x[i, j];
writeln(j,'-й столбец: ', MaxElem)end;
end;
var
A: TIntMatr;
M, N:byte;
MaxElem:integer;
beginrepeatwrite('M = ');
readln(M)until(M >0)and(M <= rows);
repeatwrite('N = ');
readln(N)until(N >0)and(N <= columns);
writeln;
VvodRandom(A, M, N); { Вызываем процедуру формирования и вывода случайной матрицы }writeln;
writeln('Максимальный элемент в каждом столбце:');
MaxElemInEachColumn(A, M, N);
readlnend.
Matrix25. Дана матрица размера M × N. Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы.
var
A:array[1..10,1..10]ofinteger;
i, j, M, N, NumMaxSum:byte;
S, MaxSum:integer;
beginrepeatwrite('M = ');
readln(M)until(M >0)and(M <11); { <-- Количество строк от 1 до 10 }repeatwrite('N = ');
readln(N)until(N >0)and(N <11); { <-- Количество столбцов от 1 до 10 }{ Формируем и выводим матрицу: }randomize;
writeln('Случайная матрица ', M,'x', N,':');
for i :=1to M dobegin
S :=0; { Сумма элементов i-й строки вначале равна 0 }for j :=1to N dobegin
a[i, j]:=-100+random(200); { Случайный элемент -100..99 }write(a[i, j]:4);
S := S + a[i, j]{ Увеличиваем сумму }end;
if i =1thenbegin
MaxSum := S;
NumMaxSum :=1endelseif S > MaxSum thenbegin
MaxSum := S;
NumMaxSum := i
end;
writelnend;
writeln;
writeln('Номер строки с наибольшей суммой элементов: ', NumMaxSum);
writeln('Значение наибольшей суммы: ', MaxSum);
readlnend.
Matrix26. Дана матрица размера M × N. Найти номер ее столбца с наименьшим произведением элементов и вывести данный номер, а также значение наименьшего произведения.
var
A:array[1..10,1..10]ofinteger;
i, j, M, N, NumMinProd:byte;
MinProd, P:real;
beginrepeatwrite('M = ');
readln(M)until(M >0)and(M <11); { <-- Количество строк от 1 до 10 }repeatwrite('N = ');
readln(N)until(N >0)and(N <11); { <-- Количество столбцов от 1 до 10 }{ Формируем и выводим матрицу: }randomize;
writeln('Случайная матрица ', M,'x', N,':');
for i :=1to M dobeginfor j :=1to N dobegin
a[i, j]:=-10+random(20); { Случайный элемент -10..9 }write(a[i, j]:4)end;
writelnend;
writeln;
for j :=1to N dobegin
P :=1; { <-- Произведение элементов j-го столбца вначале равно 0 }for i :=1to M do
P := P * a[i, j]; { <-- Находим произведение всех элементов j-го столбца }if j =1then{ <-- Первый столбец }begin
MinProd := P;
NumMinProd :=1endelseif P < MinProd then{ <-- Остальные столбцы }begin
MinProd := P;
NumMinProd := j
endend;
writeln('Номер столбца с наименьшим ','произведением элементов: ', NumMinProd);
writeln('Значение наименьшего произведения: ', MinProd);
readlnend.
Matrix27. Дана матрица размера M × N. Найти максимальный среди минимальных элементов ее строк.