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

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

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

Условие: Если столбец к прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого столбца, иначе сумму элементов столбцов после к-ого. Уважаемые программисты, не могли бы Вы помочь написать часть программы. Часть задания я сделал, но дальше не могу додумать. Заранее спасибо!
Листинг программы
  1. program pr4337;
  2. const
  3. n = 6;
  4. type
  5. matr = array [1..n, 1..n] of integer;
  6. mas = array [1..n] of integer;
  7. chislo = integer;
  8. nomer = integer;
  9. var
  10. A: matr;
  11. SumA: mas;
  12. M: chislo;
  13. K: nomer;
  14. procedure VIVODMATR(var x: matr);
  15. var
  16. i, j: integer;
  17. begin
  18. Randomize;
  19. for i := 1 to n do
  20. begin
  21. for j := 1 to n do
  22. begin
  23. x[i, j] := random(10);
  24. write(x[i, j]:4);
  25. end;
  26. writeln;
  27. end;
  28. end;
  29. procedure SUMST(var x: mas);
  30. var
  31. i, j: integer;
  32. begin
  33. for j := 1 to n do
  34. begin
  35. for i := 1 to n do
  36. SumA[j] := SumA[j] + a[i, j];
  37. end;
  38. for j := 1 to n do
  39. write(' ', SumA[j]:3);
  40. writeln;
  41. end;
  42. procedure VVODK(var x: nomer);
  43. var
  44. K:integer;
  45. begin
  46. write (' Введите номер столбца: ');
  47. readln (K);
  48. if K>n
  49. then
  50. begin
  51. writeln (' Некорректный номер столбца!');
  52. readln;
  53. end;
  54. begin
  55. if K=M then
  56. begin
  57. writeln ('!!!',K);
  58. end;
  59. end;
  60. end;
  61. procedure MINSUM(var x: chislo);
  62. var
  63. j,S: integer;
  64. begin
  65. M := SumA[1];
  66. for j := 1 to n do
  67. if SumA[j] < M then
  68. begin
  69. M := j;
  70. write(M:3);
  71. end;
  72. end;
  73. begin
  74. writeln(' Исходная матрица');
  75. VIVODMATR(A);
  76. writeln(' _________CУММА_________');
  77. SUMST(SumA);
  78. writeln;
  79. VVODK(K);
  80. write(' Минимальная сумма столбцов матрицы:');
  81. MINSUM(M);
  82. end.
По своей программе могу сказать, что она выводит матрицу, заданную константным числом, находит сумму всех столбцов. (Также есть процедура, которая недодумана мной. Процедуура VVODK. Вводится с клавиатуры порядковый номер столбца, а при введении числа большего, чем число столбцов выводит "Некорректный номер столбца!". Также составлена процедура определяющая минимальную сумму столбцов:
Листинг программы
  1. procedure MINSUM(var x: chislo);
  2. var
  3. j: integer;
  4. begin
  5. M := SumA[1];
  6. for j := 1 to n do
  7. if SumA[j] < M then
  8. M := SumA[j];
  9. write(M:3);
Теперь не знаю как сделать, чтобы при вводе номера столбца К с клавиатуры, программа сравнивала значение с суммой столбца и работала по условию задачи. Еще раз условие: Если столбец к прямоугольной матрицы имеет минимальную сумму элементов, определить сумму элементов столбцов до к-ого столбца, иначе сумму элементов столбцов после к-ого. Помогите

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

textual
Листинг программы
  1. const
  2.   n = 6;
  3.  
  4. type
  5.   matr = array [1..n, 1..n] of integer;
  6.  
  7. procedure VIVODMATR(var x: matr);
  8. var
  9.   i, j: integer;
  10. begin
  11.   Randomize;
  12.   for i := 1 to n do
  13.   begin
  14.     for j := 1 to n do
  15.     begin
  16.       x[i, j] := random(10);
  17.       write(x[i, j]:4);
  18.     end;
  19.     writeln;
  20.   end;
  21. end;
  22.  
  23. procedure VVODK(var Result: integer);
  24. begin
  25.   write('  Введите номер столбца: ');
  26.   readln(Result);
  27.   while (Result < 1) or (Result > n) do
  28.   begin
  29.     writeln('  Некорректный номер столбца!');
  30.     write('  Введите номер столбца: ');
  31.     readln(Result);
  32.   end;
  33. end;
  34.  
  35. procedure SumColumn(A: matr; Col: Integer; var result: integer);
  36. begin
  37.   Result := 0;
  38.   for var Row := 1 to n do Result += A[Row, Col];
  39. end;
  40.  
  41. procedure MinSum(A: matr; var result: integer);
  42. var
  43.   s: integer;
  44. begin
  45.   SumColumn(A, 1, Result);
  46.   for var Col := 2 to n do
  47.   begin
  48.     SumColumn(A, Col, s);
  49.     Result := min(Result, s);
  50.   end;
  51. end;
  52.  
  53. var
  54.   A: matr;
  55.   s, mins, K: integer;
  56.   iFrom, iTo: integer;
  57.   st: string;
  58.  
  59. begin
  60.   writeln('     Исходная матрица');
  61.   VIVODMATR(A);
  62.   writeln('  <br>CУММА<br>');
  63.   for var Col := 1 to n do
  64.   begin
  65.     SumColumn(A, Col, s);
  66.     Write(s:4);
  67.   end;
  68.   writeln;
  69.   MinSum(A, s);
  70.   writeLn('  Минимальная сумма столбцов матрицы: ', s);
  71.   VVODK(K);
  72.   SumColumn(A, K, s); MinSum(A, mins);
  73.   if s = mins then
  74.   begin
  75.     iFrom := 1; iTo := K - 1; st := 'до';
  76.   end
  77.     else
  78.   begin
  79.     iFrom := K + 1; iTo := n; st := 'после';
  80.   end;
  81.   var Sum := 0;
  82.   for var Col := iFrom to iTo do
  83.   begin
  84.     SumColumn(A, Col, s);
  85.     Sum += s;
  86.   end;
  87.   WriteLnFormat('Сумма столбцов {0} столбца {1} равна {2}', st, K, Sum);
  88.  
  89. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы