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

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

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

Если в первом столбце прямоугольной матрицы все элементы по модулю больше заданной величины, разделить столбец с максимальным средним арифметическим элементов на соответствующие элементы первого столбца.
Мои наработки:
program p4_3_3_25;
type
  matr=array [1..10,1..10] of real;
var
 n,m,jmax:integer;
  A:matr;
  b:boolean;
procedure VVOD(n,m:integer; var X:matr);
var 
  i, j:integer;
begin
  for i:=1 to n do
    for j:=1 to m do
      readln(X[i,j]);
end;
 
procedure VIVOD(n,m:integer; var X:matr);
var 
  i, j:integer;
begin
  for i:=1 to n do 
    begin
      for j:=1 to m do
        write(X[i,j]:6:2);
        writeln;
    end;
end;
 
procedure PROVERKA(A:matr; var b:boolean);
var i,j,k,n,m:integer;
    T:real;
begin
writeln('Введите величину Т: ');
readln(T);
for i:=1 to n do
  if abs(a[i,1])<T  then  k:=k+1;
if k<>0 then b:=false;
end;
 
procedure MAXSRAR(A:matr; var jmax:integer);
var i,j,n,m:integer;
max,sr:real;
begin
for j:=1 to m do 
  begin
    sr:=0; max:=a[1,j];
      for i:=1 to m do
      sr:=sr+a[i,j];
      sr:=sr/(n*m);
      if sr>max then
        begin
          max:=sr;
          jmax:=j;
        end;
  end;
end;
 
procedure DELENIE(var A:matr);
var i,j,jmax,n:integer;
begin
for i:=1 to n do
  a[i,jmax]:=a[i,jmax]/a[i,1];
end;

begin
writeln('Введите размерность матрицы A: n,m');
readln(n,m);
writeln('Введите элементы матрицы А');
VVOD(n,m,A);
writeln('Исходная матрица А');
VIVOD(n,m,A);
b:=true;
PROVERKA(A,b);
if b then 
begin
  MAXSRAR(A,jmax);
  DELENIE(A);
end
else
writeln('Условие не выполняется');

writeln('Измененная матрица А');
VIVOD(n,m,A);
end.

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

textual
Листинг программы
type matr=array [1..10,1..10] of real;
procedure vvod(var x:matr;var n,m:integer);
var i,j:integer;
begin
repeat
write('Количество строк от 2 до 10 n=');
readln(n);
until n in [2..10];
repeat
write('Количество столбцов от 2 до 10 m=');
readln(m);
until m in [2..10];
writeln('Введите элементы матрицы, действительные числа');
for i:=1 to n do
for j:=1 to m do
 begin
  write('el[',i,',',j,']=');
  readln(X[i,j]);
 end;
cls;//очистим окно ввода
end;
 
procedure vyvod(x:matr;n,m:integer;s:string);
var i,j:integer;
begin
writeln(s);
for i:=1 to n do
 begin
  for j:=1 to m do
  write(x[i,j]:6:2);
  writeln;
 end;
end;
 
procedure prowerka(x:matr;n:integer;var b:boolean);
var i,k:integer;
    t:real;
begin
write('Введите величину Т=');
readln(t);
k:=0;
for i:=1 to n do
if abs(x[i,1])>t then k:=k+1;
b:=k=n;
end;
procedure maxsrar(x:matr;n,m:integer;var jmax:integer);
var i,j:integer;
    max,sr:real;
begin
for j:=1 to m do
 begin
  sr:=0;
  for i:=1 to n do
  sr:=sr+x[i,j];
  sr:=sr/n;
  if j=1 then
   begin
    max:=sr;
    jmax:=1;
   end
  else if sr>max then
   begin
    max:=sr;
    jmax:=j;
   end;
  end;
writeln('Максимальное среднее арифметическое=',sr:0:2,' в столбце ',jmax);
end;
procedure delenie(var x:matr;n,jmax:integer);
var i:integer;
begin
for i:=1 to n do
x[i,jmax]:=x[i,jmax]/x[i,1];
end;
var a:matr;
    n,m,jmax:integer;
    b:boolean;
begin
vvod(a,n,m);
vyvod(a,n,m,'Исходная матрица');
prowerka(a,n,b);
if b then
 begin
  maxsrar(a,n,m,jmax);
  delenie(a,n,jmax);
  vyvod(a,n,m,'Измененная матрица');
 end
else writeln('Условие не выполняется');
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