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

Объяснение кода листинга программы

  1. Объявляется тип данных matr, который представляет массив 10x10 вещественных чисел
  2. Объявляется процедура vvod с переменными x:matr, n:integer, m:integer
  3. Пользователю предлагается ввести количество строк для матрицы, пока не будет введено число от 2 до 10
  4. Пользователю предлагается ввести количество столбцов для матрицы, пока не будет введено число от 2 до 10
  5. Введение элементов для каждой строки и столбца матрицы
  6. Происходит очистка окна ввода
  7. Выводится матрица
  8. Объявляется процедура InArea с переменными a:matr, n:integer, m:integer, xn:real, xk:real, b:boolean
  9. Пользователю предлагается ввести границы отрезка, пока не будет введено xk больше xn
  10. Вычисляется сумма элементов в каждой строке матрицы и проверяется, попадает ли сумма в заданный интервал
  11. Объявляется функция Maximum с переменными a:matr, n:integer, m:integer:integer`
  12. Находится номер строки с максимальной суммой элементов
  13. Объявляется процедура Nomera с переменными a:matr, n:integer, m:integer, xn:real, xk:real
  14. Выводятся номера строк, сумма элементов в которых не попадает в заданный интервал
  15. Объявляются переменные a:matr, n:integer, m:integer, xn:real, xk:real, b:boolean
  16. Вызываются vvod и InArea для ввода матрицы и проверки суммы элементов
  17. В зависимости от результата проверки выводится информация о суммах в строках или номер строк.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5