Разработать программу, выделив процедуры - Pascal (80424)
Формулировка задачи:
Если в прямоугольной матрице все суммы элементов строк попадают на заданный отрезок, определить номер строки с максимальной суммой элементов, иначе определить номера строк, сумма элементов которых не попала на заданный отрезок.
Проверьте пожалуйста:
type
matr=array [1..10,1..10] of real;
mass=array [1..10] of real;
inmass=array [1..10] of integer;
var
i,j,k,n,m:integer;
A:matr; s:mass;L:inmass;
b:boolean;
xn,xk:real;
procedure VVOD(n,m:integer; var A:matr);
var
i, j:integer;
begin
for i:=1 to n do
for j:=1 to m do
readln(A[i,j]);
end;
procedure VIVOD(n,m:integer; var A:matr);
var
i, j:integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(A[i,j]:6:2);
writeln;
end;
end;
procedure Sum(A:matr;var S:mass);
var i,j:integer;
ss:real;
begin
for i:=1 to n do begin
ss:=0;
for j:=1 to m do
ss:=ss+a[i,j];
s[i]:=ss;
end;
end;
procedure InArea(S:mass;xn,xk:real; var L:inmass; var k:integer;var b:boolean);
var i,j:integer;
begin
for i:=1 to n do
L[i]:=0;
if (s[i]<xn) or (s[i]>xk) then
begin
k:=k+1;
L[k]:=i;
end;
if k=0 then b:=true else b:=false;
end;
Function Maximum(s:mass):integer;
var max:real;
i,k:integer;
begin
k:=1;
max:=s[1];
for i:=2 to n do
if s[i]>max then begin
max:=s[i];
k:=i;
end;
maximum:=k;
end;
begin
writeln('Введите размерность матрицы');
readln(n,m);
writeln('Введите матрицу А');
VVOD(n,m,A);
writeln('Матрица А');
VIVOD(n,m,A);
writeln('Введите границы отрезка');
readln(xn,xk);
Sum(A,s);
InArea(S,xn,xk,L,k,b);
if b then writeln('Номер строки с максимальной суммой элементов', Maximum(S):5)
else begin
writeln('Номера строк, сумма элементов которых не попала на заданный отрезок');
for i:=1 to k do writeln(L[i]);
end;
readln;
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;//очистим окно ввода
writeln('Матрица');
for i:=1 to n do
begin
for j:=1 to m do
write(x[i,j]:6:2);
writeln;
end;
end;
procedure InArea(a:matr;n,m:integer;var xn,xk:real; var b:boolean);
var i,j:integer;
s:real;
begin
repeat
writeln('Введите границы отрезка');
readln(xn,xk);
until xk>xn;
i:=1;
b:=true;
while(i<=n)and b do
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];
if(s<xn)or(s>xk)then b:=false
else i:=i+1;
end;
end;
Function Maximum(a:matr;n,m:integer):integer;
var s,max:real;
i,j,imax:integer;
begin
for i:=1 to n do
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];
if i=1 then
begin
max:=s;
imax:=1
end
else if s>max then
begin
max:=s;
imax:=i;
end;
end;
Maximum:=imax;
end;
procedure Nomera(a:matr;n,m:integer;xn,xk:real);
var i,j:integer;
s:real;
begin
writeln('Номера строк, сумма в которых не попала в интервал [',xn:0:1,';',xk:0:1,']');
for i:=1 to n do
begin
s:=0;
for j:=1 to m do
s:=s+a[i,j];
if(s<xn)or(s>xk)then write(i:3);
end;
end;
var a:matr;
n,m:integer;
xn,xk:real;
b:boolean;
begin
vvod(a,n,m);
InArea(a,n,m,xn,xk,b);
if b then
begin
writeln('Суммы во всех строках попадают в интервал [',xn:0:1,';',xk:0:1,']');
write('Номер строки с максимальной суммой=',Maximum(a,n,m));
end
else
begin
writeln('Суммы не во всех строках попадают в интервал [',xn:0:1,';',xk:0:1,']');
Nomera(a,n,m,xn,xk);
end;
end.
Объяснение кода листинга программы
- Объявляется тип данных
matr, который представляет массив 10x10 вещественных чисел - Объявляется процедура
vvodс переменнымиx:matr,n:integer,m:integer - Пользователю предлагается ввести количество строк для матрицы, пока не будет введено число от 2 до 10
- Пользователю предлагается ввести количество столбцов для матрицы, пока не будет введено число от 2 до 10
- Введение элементов для каждой строки и столбца матрицы
- Происходит очистка окна ввода
- Выводится матрица
- Объявляется процедура
InAreaс переменнымиa:matr,n:integer,m:integer,xn:real,xk:real,b:boolean - Пользователю предлагается ввести границы отрезка, пока не будет введено xk больше xn
- Вычисляется сумма элементов в каждой строке матрицы и проверяется, попадает ли сумма в заданный интервал
- Объявляется функция
Maximumс переменнымиa:matr,n:integer,m:integer:integer` - Находится номер строки с максимальной суммой элементов
- Объявляется процедура
Nomeraс переменнымиa:matr,n:integer,m:integer,xn:real,xk:real - Выводятся номера строк, сумма элементов в которых не попадает в заданный интервал
- Объявляются переменные
a:matr,n:integer,m:integer,xn:real,xk:real,b:boolean - Вызываются
vvodиInAreaдля ввода матрицы и проверки суммы элементов - В зависимости от результата проверки выводится информация о суммах в строках или номер строк.