Разработать программу, выделив процедуры - Pascal (80425)

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

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

Если в первом столбце прямоугольной матрицы все элементы по модулю больше заданной величины, разделить столбец с максимальным средним арифметическим элементов на соответствующие элементы первого столбца.
Мои наработки:
Листинг программы
  1. program p4_3_3_25;
  2. type
  3. matr=array [1..10,1..10] of real;
  4. var
  5. n,m,jmax:integer;
  6. A:matr;
  7. b:boolean;
  8. procedure VVOD(n,m:integer; var X:matr);
  9. var
  10. i, j:integer;
  11. begin
  12. for i:=1 to n do
  13. for j:=1 to m do
  14. readln(X[i,j]);
  15. end;
  16. procedure VIVOD(n,m:integer; var X:matr);
  17. var
  18. i, j:integer;
  19. begin
  20. for i:=1 to n do
  21. begin
  22. for j:=1 to m do
  23. write(X[i,j]:6:2);
  24. writeln;
  25. end;
  26. end;
  27. procedure PROVERKA(A:matr; var b:boolean);
  28. var i,j,k,n,m:integer;
  29. T:real;
  30. begin
  31. writeln('Введите величину Т: ');
  32. readln(T);
  33. for i:=1 to n do
  34. if abs(a[i,1])<T then k:=k+1;
  35. if k<>0 then b:=false;
  36. end;
  37. procedure MAXSRAR(A:matr; var jmax:integer);
  38. var i,j,n,m:integer;
  39. max,sr:real;
  40. begin
  41. for j:=1 to m do
  42. begin
  43. sr:=0; max:=a[1,j];
  44. for i:=1 to m do
  45. sr:=sr+a[i,j];
  46. sr:=sr/(n*m);
  47. if sr>max then
  48. begin
  49. max:=sr;
  50. jmax:=j;
  51. end;
  52. end;
  53. end;
  54. procedure DELENIE(var A:matr);
  55. var i,j,jmax,n:integer;
  56. begin
  57. for i:=1 to n do
  58. a[i,jmax]:=a[i,jmax]/a[i,1];
  59. end;
  60.  
  61. begin
  62. writeln('Введите размерность матрицы A: n,m');
  63. readln(n,m);
  64. writeln('Введите элементы матрицы А');
  65. VVOD(n,m,A);
  66. writeln('Исходная матрица А');
  67. VIVOD(n,m,A);
  68. b:=true;
  69. PROVERKA(A,b);
  70. if b then
  71. begin
  72. MAXSRAR(A,jmax);
  73. DELENIE(A);
  74. end
  75. else
  76. writeln('Условие не выполняется');
  77.  
  78. writeln('Измененная матрица А');
  79. VIVOD(n,m,A);
  80. end.

Решение задачи: «Разработать программу, выделив процедуры»

textual
Листинг программы
  1. type matr=array [1..10,1..10] of real;
  2. procedure vvod(var x:matr;var n,m:integer);
  3. var i,j:integer;
  4. begin
  5. repeat
  6. write('Количество строк от 2 до 10 n=');
  7. readln(n);
  8. until n in [2..10];
  9. repeat
  10. write('Количество столбцов от 2 до 10 m=');
  11. readln(m);
  12. until m in [2..10];
  13. writeln('Введите элементы матрицы, действительные числа');
  14. for i:=1 to n do
  15. for j:=1 to m do
  16.  begin
  17.   write('el[',i,',',j,']=');
  18.   readln(X[i,j]);
  19.  end;
  20. cls;//очистим окно ввода
  21. end;
  22.  
  23. procedure vyvod(x:matr;n,m:integer;s:string);
  24. var i,j:integer;
  25. begin
  26. writeln(s);
  27. for i:=1 to n do
  28.  begin
  29.   for j:=1 to m do
  30.   write(x[i,j]:6:2);
  31.   writeln;
  32.  end;
  33. end;
  34.  
  35. procedure prowerka(x:matr;n:integer;var b:boolean);
  36. var i,k:integer;
  37.     t:real;
  38. begin
  39. write('Введите величину Т=');
  40. readln(t);
  41. k:=0;
  42. for i:=1 to n do
  43. if abs(x[i,1])>t then k:=k+1;
  44. b:=k=n;
  45. end;
  46. procedure maxsrar(x:matr;n,m:integer;var jmax:integer);
  47. var i,j:integer;
  48.     max,sr:real;
  49. begin
  50. for j:=1 to m do
  51.  begin
  52.   sr:=0;
  53.   for i:=1 to n do
  54.   sr:=sr+x[i,j];
  55.   sr:=sr/n;
  56.   if j=1 then
  57.    begin
  58.     max:=sr;
  59.     jmax:=1;
  60.    end
  61.   else if sr>max then
  62.    begin
  63.     max:=sr;
  64.     jmax:=j;
  65.    end;
  66.   end;
  67. writeln('Максимальное среднее арифметическое=',sr:0:2,' в столбце ',jmax);
  68. end;
  69. procedure delenie(var x:matr;n,jmax:integer);
  70. var i:integer;
  71. begin
  72. for i:=1 to n do
  73. x[i,jmax]:=x[i,jmax]/x[i,1];
  74. end;
  75. var a:matr;
  76.     n,m,jmax:integer;
  77.     b:boolean;
  78. begin
  79. vvod(a,n,m);
  80. vyvod(a,n,m,'Исходная матрица');
  81. prowerka(a,n,b);
  82. if b then
  83.  begin
  84.   maxsrar(a,n,m,jmax);
  85.   delenie(a,n,jmax);
  86.   vyvod(a,n,m,'Измененная матрица');
  87.  end
  88. else writeln('Условие не выполняется');
  89. end.

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

  1. Объявляется пользовательский тип данных matr, представляющий массив 10x10 действительных чисел.
  2. Объявляется процедура vvod, которая принимает массив x:matr, и переменные n и m типа integer.
  3. Пользователю предлагается ввести количество строк и столбцов матрицы. Ввод проверяется на соответствие условиям (от 2 до 10).
  4. Пользователю предлагается ввести элементы матрицы построчно.
  5. Очищается окно ввода.
  6. Объявляется процедура vyvod, которая принимает массив x:matr, переменные n, m типа integer и строку s типа string.
  7. Для каждого элемента матрицы выводится значение с шириной 6 символов и двумя знаками после запятой.
  8. Объявляется процедура prowerka, которая принимает массив x:matr, переменную n типа integer и переменную b типа boolean по ссылке.
  9. Пользователю предлагается ввести значение t.
  10. Проверяется выполнение условия для каждого элемента первого столбца матрицы и устанавливается значение переменной b в зависимости от результата.
  11. Объявляется процедура maxsrar, которая принимает массив x:matr, переменные n, m типа integer и переменную jmax типа integer по ссылке.
  12. Вычисляется среднее арифметическое для каждого столбца матрицы и находится столбец с наибольшим средним арифметическим.
  13. Объявляется процедура delenie, которая принимает массив x:matr, переменную n типа integer и переменную jmax типа integer.
  14. Каждый элемент столбца jmax матрицы делится на соответствующий элемент первого столбца матрицы.
  15. Объявляется массив a:matr, и переменные n, m, jmax типа integer, и переменная b типа boolean.
  16. Вызывается процедура vvod для заполнения массива a и переменных n и m.
  17. Вызывается процедура vyvod для вывода исходной матрицы.
  18. Проверяется выполнение условия с помощью процедуры prowerka.
  19. Если условие выполнено, вызывается процедура maxsrar, процедура delenie и процедура vyvod для вывода измененной матрицы. В противном случае выводится сообщение о невыполненном условии.

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


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

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

11   голосов , оценка 4 из 5

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

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

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