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