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