Задача на нахождение суммы элементов столбцов в матрице по условию - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Условие: Если столбец к прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого столбца, иначе сумму элементов столбцов после к-ого. Уважаемые программисты, не могли бы Вы помочь написать часть программы. Часть задания я сделал, но дальше не могу додумать. Заранее спасибо!
По своей программе могу сказать, что она выводит матрицу, заданную константным числом, находит сумму всех столбцов. (Также есть процедура, которая недодумана мной. Процедуура VVODK. Вводится с клавиатуры порядковый номер столбца, а при введении числа большего, чем число столбцов выводит "Некорректный номер столбца!". Также составлена процедура определяющая минимальную сумму столбцов:
Теперь не знаю как сделать, чтобы при вводе номера столбца К с клавиатуры, программа сравнивала значение с суммой столбца и работала по условию задачи. Еще раз условие: Если столбец к прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого столбца, иначе сумму элементов столбцов после к-ого. Помогите

Решение задачи: «Задача на нахождение суммы элементов столбцов в матрице по условию»

textual
Листинг программы
const
  n = 6;
 
type
  matr = array [1..n, 1..n] of integer;
 
procedure VIVODMATR(var x: matr);
var
  i, j: integer;
begin
  Randomize;
  for i := 1 to n do
  begin
    for j := 1 to n do
    begin
      x[i, j] := random(10);
      write(x[i, j]:4);
    end;
    writeln;
  end;
end;
 
procedure VVODK(var Result: integer);
begin
  write('  Введите номер столбца: ');
  readln(Result);
  while (Result < 1) or (Result > n) do
  begin
    writeln('  Некорректный номер столбца!');
    write('  Введите номер столбца: ');
    readln(Result);
  end;
end;
 
procedure SumColumn(A: matr; Col: Integer; var result: integer);
begin
  Result := 0;
  for var Row := 1 to n do Result += A[Row, Col];
end;
 
procedure MinSum(A: matr; var result: integer);
var
  s: integer;
begin
  SumColumn(A, 1, Result);
  for var Col := 2 to n do
  begin
    SumColumn(A, Col, s);
    Result := min(Result, s);
  end;
end;
 
var
  A: matr;
  s, mins, K: integer;
  iFrom, iTo: integer;
  st: string;
 
begin
  writeln('     Исходная матрица');
  VIVODMATR(A);
  writeln('  <br>CУММА<br>');
  for var Col := 1 to n do
  begin
    SumColumn(A, Col, s);
    Write(s:4);
  end;
  writeln;
  MinSum(A, s);
  writeLn('  Минимальная сумма столбцов матрицы: ', s);
  VVODK(K);
  SumColumn(A, K, s); MinSum(A, mins);
  if s = mins then
  begin
    iFrom := 1; iTo := K - 1; st := 'до';
  end
    else
  begin
    iFrom := K + 1; iTo := n; st := 'после';
  end;
  var Sum := 0;
  for var Col := iFrom to iTo do 
  begin
    SumColumn(A, Col, s);
    Sum += s;
  end;
  WriteLnFormat('Сумма столбцов {0} столбца {1} равна {2}', st, K, Sum);
  
end.

Объяснение кода листинга программы

  1. Объявлены константы: n = 6 (размер матрицы), st = 'до' (строка для вывода).
  2. Объявлен тип данных: matr = array [1..n, 1..n] of integer (массив для хранения матрицы целых чисел).
  3. Выведена исходная матрица с помощью процедуры VIVODMATR.
  4. В цикле выведены суммы всех столбцов матрицы с помощью процедуры SumColumn и MinSum найдена минимальная сумма столбцов.
  5. Запрошен номер столбца для вычисления суммы с помощью процедуры VVODK.
  6. Если сумма текущего столбца равна минимальной, то начинается новый цикл с изменением префикса для строк.
  7. Если сумма текущего столбца не равна минимальной, то цикл продолжается без изменений.
  8. В цикле вычисляются суммы выбранных столбцов и выводится итоговая информация.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы