Разработать программу, выделив процедуры - 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
для вывода измененной матрицы. В противном случае выводится сообщение о невыполненном условии.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д