Задача на нахождение суммы элементов столбцов в матрице по условию - PascalABC.NET
Формулировка задачи:
Условие: Если столбец к прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого столбца, иначе сумму элементов столбцов после к-ого.
Уважаемые программисты, не могли бы Вы помочь написать часть программы. Часть задания я сделал, но дальше не могу додумать. Заранее спасибо!
Теперь не знаю как сделать, чтобы при вводе номера столбца К с клавиатуры, программа сравнивала значение с суммой столбца и работала по условию задачи.
Еще раз условие: Если столбец к прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого столбца, иначе сумму элементов столбцов после к-ого.
Помогите
Листинг программы
- program pr4337;
- const
- n = 6;
- type
- matr = array [1..n, 1..n] of integer;
- mas = array [1..n] of integer;
- chislo = integer;
- nomer = integer;
- var
- A: matr;
- SumA: mas;
- M: chislo;
- K: nomer;
- 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 SUMST(var x: mas);
- var
- i, j: integer;
- begin
- for j := 1 to n do
- begin
- for i := 1 to n do
- SumA[j] := SumA[j] + a[i, j];
- end;
- for j := 1 to n do
- write(' ', SumA[j]:3);
- writeln;
- end;
- procedure VVODK(var x: nomer);
- var
- K:integer;
- begin
- write (' Введите номер столбца: ');
- readln (K);
- if K>n
- then
- begin
- writeln (' Некорректный номер столбца!');
- readln;
- end;
- begin
- if K=M then
- begin
- writeln ('!!!',K);
- end;
- end;
- end;
- procedure MINSUM(var x: chislo);
- var
- j,S: integer;
- begin
- M := SumA[1];
- for j := 1 to n do
- if SumA[j] < M then
- begin
- M := j;
- write(M:3);
- end;
- end;
- begin
- writeln(' Исходная матрица');
- VIVODMATR(A);
- writeln(' _________CУММА_________');
- SUMST(SumA);
- writeln;
- VVODK(K);
- write(' Минимальная сумма столбцов матрицы:');
- MINSUM(M);
- end.
По своей программе могу сказать, что она выводит матрицу, заданную константным числом, находит сумму всех столбцов. (Также есть процедура, которая недодумана мной. Процедуура VVODK. Вводится с клавиатуры порядковый номер столбца, а при введении числа большего, чем число столбцов выводит "Некорректный номер столбца!".
Также составлена процедура определяющая минимальную сумму столбцов:
Листинг программы
- procedure MINSUM(var x: chislo);
- var
- j: integer;
- begin
- M := SumA[1];
- for j := 1 to n do
- if SumA[j] < M then
- M := SumA[j];
- write(M:3);
Решение задачи: «Задача на нахождение суммы элементов столбцов в матрице по условию»
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.
Объяснение кода листинга программы
- Объявлены константы: n = 6 (размер матрицы), st = 'до' (строка для вывода).
- Объявлен тип данных: matr = array [1..n, 1..n] of integer (массив для хранения матрицы целых чисел).
- Выведена исходная матрица с помощью процедуры VIVODMATR.
- В цикле выведены суммы всех столбцов матрицы с помощью процедуры SumColumn и MinSum найдена минимальная сумма столбцов.
- Запрошен номер столбца для вычисления суммы с помощью процедуры VVODK.
- Если сумма текущего столбца равна минимальной, то начинается новый цикл с изменением префикса для строк.
- Если сумма текущего столбца не равна минимальной, то цикл продолжается без изменений.
- В цикле вычисляются суммы выбранных столбцов и выводится итоговая информация.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д