На предыдущей странице было несколько задач из решебника Абрамяна, посвященных нахождению сумм и произведений элементов в разных строках и столбцах. На данной странице мы будем находить минимумы и максимумы в строках и столбцах. Все матрицы целочисленные, формирование осуществляется с помощью датчика 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] of integer;
i, j, M, N: byte;
MinElem: integer;
begin
write('M = ');
readln(M);
write('N = ');
readln(N);
{ Формируем и выводим матрицу: }
randomize;
writeln('Случайная матрица ', M, 'x', N, ':');
for i := 1 to M do begin
for j := 1 to N do begin
a[i, j] := -100 + random(200);
write(a[i, j]:4)
end;
writeln
end;
writeln;
writeln('Минимальный элемент в каждой строке:');
for i := 1 to M do begin
{ Начальное значение минимального элемента
равно первому элементу строки (j = 1): }
MinElem := a[i, 1];
for j := 2 to 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;
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1). Но задачу Matrix23 поиска минимального элемента в каждой строке можно выполнить и в одном цикле: сначала находить и выводить элемент матрицы, и тут же сравнивать с минимальным. Также эту задачу можно записать с помощью процедур (вспомогательных подпрограмм).
Matrix24. Дана матрица размера M × N. В каждом столбце матрицы найти максимальный элемент.
Суть такая: сначала формируем матрицу (строки 14 - 20 кода), потом в новом цикле в каждом столбце отдельно находим максимальный элемент (строки 23 - 30). Причем, во втором цикле внешний цикл будет по столбцам, внутренний - по строкам.
var
A: array[1..10, 1..10] of integer;
i, j, M, N: byte;
MaxElem: integer;
begin
write('M = ');
readln(M);
write('N = ');
readln(N);
{ Формируем и выводим матрицу: }
randomize;
writeln('Случайная матрица ', M, 'x', N, ':');
for i := 1 to M do begin
for j := 1 to N do begin
a[i, j] := -100 + random(200);
write(a[i, j]:4)
end;
writeln
end;
writeln;
writeln('Максимальный элемент в каждом столбце:');
for j := 1 to N do begin
{ Начальное значение максимального элемента
равно первому элементу столбца: i = 1 }
MaxElem := a[1, j];
for i := 2 to M do { <-- Проверяем остальные элементы столбца }
{ Если a[i,j] больше максимума, то новым
максимумом становится a[i,j] }
if a[i, j] > MaxElem then MaxElem := a[i, j];
writeln(j, '-й столбец: ', MaxElem)
end;
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1). Задача Matrix24 с использованием процедур:
Matrix25. Дана матрица размера M × N. Найти номер ее строки с наибольшей суммой элементов и вывести данный номер, а также значение наибольшей суммы.
var
A: array[1..10, 1..10] of integer;
i, j, M, N, NumMaxSum: byte;
S, MaxSum: integer;
begin
repeat
write('M = ');
readln(M)
until (M > 0) and (M < 11); { <-- Количество строк от 1 до 10 }
repeat
write('N = ');
readln(N)
until (N > 0) and (N < 11); { <-- Количество столбцов от 1 до 10 }
{ Формируем и выводим матрицу: }
randomize;
writeln('Случайная матрица ', M, 'x', N, ':');
for i := 1 to M do begin
S := 0; { Сумма элементов i-й строки вначале равна 0 }
for j := 1 to N do begin
a[i, j] := -100 + random(200); { Случайный элемент -100..99 }
write(a[i, j]:4);
S := S + a[i, j] { Увеличиваем сумму }
end;
if i = 1 then begin
MaxSum := S;
NumMaxSum := 1
end
else
if S > MaxSum then begin
MaxSum := S;
NumMaxSum := i
end;
writeln
end;
writeln;
writeln('Номер строки с наибольшей суммой элементов: ', NumMaxSum);
writeln('Значение наибольшей суммы: ', MaxSum);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1). Matrix26. Дана матрица размера M × N. Найти номер ее столбца с наименьшим произведением элементов и вывести данный номер, а также значение наименьшего произведения.
var
A: array[1..10, 1..10] of integer;
i, j, M, N, NumMinProd: byte;
MinProd, P: real;
begin
repeat
write('M = ');
readln(M)
until (M > 0) and (M < 11); { <-- Количество строк от 1 до 10 }
repeat
write('N = ');
readln(N)
until (N > 0) and (N < 11); { <-- Количество столбцов от 1 до 10 }
{ Формируем и выводим матрицу: }
randomize;
writeln('Случайная матрица ', M, 'x', N, ':');
for i := 1 to M do begin
for j := 1 to N do begin
a[i, j] := -10 + random(20); { Случайный элемент -10..9 }
write(a[i, j]:4)
end;
writeln
end;
writeln;
for j := 1 to N do begin
P := 1; { <-- Произведение элементов j-го столбца вначале равно 0 }
for i := 1 to M do
P := P * a[i, j]; { <-- Находим произведение всех элементов j-го столбца }
if j = 1 then { <-- Первый столбец }
begin
MinProd := P;
NumMinProd := 1
end
else
if P < MinProd then { <-- Остальные столбцы }
begin
MinProd := P;
NumMinProd := j
end
end;
writeln('Номер столбца с наименьшим ',
'произведением элементов: ', NumMinProd);
writeln('Значение наименьшего произведения: ', MinProd);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1). Matrix27. Дана матрица размера M × N. Найти максимальный среди минимальных элементов ее строк.
const
rows = 10; { <-- Количество строк }
columns = 10; { <-- Количество столбцов }
var
A: array[1..rows, 1..columns] of integer;
i, j, M, N: byte;
MinElem, MaxMinElem: integer;
begin
repeat
write('M = ');
readln(M)
until (M >= 1) and (M <= rows); { <-- Количество строк от 1 до rows }
repeat
write('N = ');
readln(N)
until (N >= 1) and (N <= columns); { <-- Количество столбцов от 1 до columns }
{ Формируем и выводим матрицу: }
randomize;
writeln('Случайная матрица ', M, 'x', N, ':');
for i := 1 to M do begin
for j := 1 to N do begin
a[i, j] := -100 + random(200); { <-- Случайный элемент -100..99 }
write(a[i, j]:4);
if j = 1 then MinElem := a[i, j] { <-- Инициализация минимального элемента }
else { Сравниваем остальные элементы с минимальным: }
if a[i, j] < MinElem then MinElem := a[i, j]
end;
if i = 1 then MaxMinElem := MinElem { <-- Инициализация максимального минимума }
else
if MinElem > MaxMinElem then MaxMinElem := MinElem;
writeln
end;
writeln;
writeln('Максимальный среди минимальных элементов строк: ', MaxMinElem);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1). Matrix28. Дана матрица размера M × N. Найти минимальный среди максимальных элементов ее столбцов.
const
rows = 10; { <-- Количество строк }
columns = 10; { <-- Количество столбцов }
var
A: array[1..rows, 1..columns] of integer;
i, j, M, N: byte;
MaxElem, MinMaxElem: integer;
begin
repeat
write('M = ');
readln(M)
until (M >= 1) and (M <= rows); { <-- Количество строк от 1 до rows }
repeat
write('N = ');
readln(N)
until (N >= 1) and (N <= columns); { <-- Количество столбцов от 1 до columns }
{ Формируем и выводим матрицу: }
randomize;
writeln('Случайная матрица ', M, 'x', N, ':');
for i := 1 to M do begin
for j := 1 to N do begin
a[i, j] := -100 + random(200); { <-- Случайный элемент -100..99 }
write(a[i, j]:4)
end;
writeln
end;
for j := 1 to N do begin
MaxElem := a[1, j]; { <-- Инициализация максимального элемента j-го столбца }
for i := 2 to M do
if a[i, j] > MaxElem then MaxElem := a[i, j];
if j = 1 then MinMaxElem := MaxElem { <-- Инициализация минимального максимума }
else
if MaxElem < MinMaxElem then MinMaxElem := MaxElem
end;
writeln;
writeln('Минимальный среди максимальных элементов ее столбцов: ', MinMaxElem);
readln
end.
**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**type** byte;
: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647
**procedure** Randomize;
: Инициализирует датчик псевдослучайных чисел.2)**procedure** Randomize(seed: integer);
: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.**function** Random(maxValue: integer): integer;
: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2)**function** Random(a,b: integer): integer;
: Возвращает случайное целое в диапазоне от a до b.3)**function** Random: real;
: Возвращает случайное вещественное в диапазоне [0..1).