Разработать программу, выделив процедуры - 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.
Объяснение кода листинга программы
- Объявляется пользовательский тип данных
matr
, представляющий массив 10x10 действительных чисел. - Объявляется процедура
vvod
, которая принимает массивx:matr
, и переменныеn
иm
типаinteger
. - Пользователю предлагается ввести количество строк и столбцов матрицы. Ввод проверяется на соответствие условиям (от 2 до 10).
- Пользователю предлагается ввести элементы матрицы построчно.
- Очищается окно ввода.
- Объявляется процедура
vyvod
, которая принимает массивx:matr
, переменныеn
,m
типаinteger
и строкуs
типаstring
. - Для каждого элемента матрицы выводится значение с шириной 6 символов и двумя знаками после запятой.
- Объявляется процедура
prowerka
, которая принимает массивx:matr
, переменнуюn
типаinteger
и переменнуюb
типаboolean
по ссылке. - Пользователю предлагается ввести значение
t
. - Проверяется выполнение условия для каждого элемента первого столбца матрицы и устанавливается значение переменной
b
в зависимости от результата. - Объявляется процедура
maxsrar
, которая принимает массивx:matr
, переменныеn
,m
типаinteger
и переменнуюjmax
типаinteger
по ссылке. - Вычисляется среднее арифметическое для каждого столбца матрицы и находится столбец с наибольшим средним арифметическим.
- Объявляется процедура
delenie
, которая принимает массивx:matr
, переменнуюn
типаinteger
и переменнуюjmax
типаinteger
. - Каждый элемент столбца
jmax
матрицы делится на соответствующий элемент первого столбца матрицы. - Объявляется массив
a:matr
, и переменныеn
,m
,jmax
типаinteger
, и переменнаяb
типаboolean
. - Вызывается процедура
vvod
для заполнения массиваa
и переменныхn
иm
. - Вызывается процедура
vyvod
для вывода исходной матрицы. - Проверяется выполнение условия с помощью процедуры
prowerka
. - Если условие выполнено, вызывается процедура
maxsrar
, процедураdelenie
и процедураvyvod
для вывода измененной матрицы. В противном случае выводится сообщение о невыполненном условии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д