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