Root /ArchiveAbout
()

Минимумы и максимумы в строках и столбцах

Минимумы и максимумы в строках и столбцах

На предыдущей странице было несколько задач из решебника Абрамяна, посвященных нахождению сумм и произведений элементов в разных строках и столбцах. На данной странице мы будем находить минимумы и максимумы в строках и столбцах. Все матрицы целочисленные, формирование осуществляется с помощью датчика 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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **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

  1. **procedure** Randomize;: Инициализирует датчик псевдослучайных чисел.2) **procedure** Randomize(seed: integer);: Инициализирует датчик псевдослучайных чисел, используя значение seed. При одном и том же seed генерируются одинаковые псевдослучайные последовательности.
  2. **function** Random(maxValue: integer): integer;: Возвращает случайное целое в диапазоне от 0 до maxValue - 1.2) **function** Random(a,b: integer): integer;: Возвращает случайное целое в диапазоне от a до b.3) **function** Random: real;: Возвращает случайное вещественное в диапазоне [0..1).