Разбить на процедуры - Free Pascal
Формулировка задачи:
Помогите пожалуйста разбить код на процедуры. Промучался 2 часа. Ничего так и не получилось. Разбить таким образом, чтобы решение каждой подзадачи описывалось процедурой, а основная программа состояла бы из последовательности вызова процедур.
const n=5;//размер матрицы var a:array[1..n,1..n] of integer; //матрица из чисел от -70 до 70 x:array[1..n] of longint;//вектор из чисел не более 70^5 i,j,k:byte; //счетчики циклов и фиксатор отрицательных begin writeln('Введите ',n*n,' целых чисел по модулю не более 70'); for i:=1 to n do for j:=1 to n do repeat write('a[',i,',',j,']='); readln(a[i,j]); until abs(a[i,j])<=70; //вод с проверкой, чтобы произведение 5 чисел точно не вышло за пределы типа Longint writeln('Матрица'); k:=0; //пока отрицательных нет for i:=1 to n do begin for j:=1 to n do begin write(a[i,j]:4); if a[i,j]<0 then k:=1; //если есть end; writeln; end; if k=0 then begin writeln('Отрицательных элементов нет'); writeln('Вектор Х сумм четных в строках'); for i:=1 to n do begin x[i]:=0; for j:=1 to n do //считаем суммы четных в строках if a[i,j] mod 2=0 then x[i]:=x[i]+a[i,j]; end; end else begin writeln('Отрицательные элементы есть'); writeln('Вектор Х произведений в столбцах'); for j:=1 to n do begin x[j]:=1; for i:=1 to n do x[j]:=x[j]*a[i,j];//считаем произведения в столбцах end; end; for i:=1 to n do write(x[i],' '); readln end.
Решение задачи: «Разбить на процедуры»
textual
Листинг программы
{$mode ObjFPC} const n=5; type TMatrix = array [1..n,1..n] of Integer; TVector = array [1..n] of Integer; procedure vWrite(const x: TVector; const s: String); var j: Integer; begin if s<>'' then WriteLn(s); for j:=1 to n do Write(' ',x[j]); WriteLn; end; procedure mWrite(const a: TMatrix; const s: String); var i, j: Integer; begin if s<>'' then WriteLn(s); for i:=1 to n do begin for j:=1 to n do Write(' ',a[i,j]:3); WriteLn; end; end; procedure mRead(var a: TMatrix; Limit: Integer); var i, j: Integer; begin WriteLn('Введите ',n*n,' целых чисел по модулю не более ',Limit); for i:=1 to n do for j:=1 to n do repeat Read(a[i,j]) until Abs(a[i,j])<=Limit; ReadLn; end; function mNegCount(const a: TMatrix): Integer; var i, j: Integer; begin Result:=0; for i:=1 to n do for j:=1 to n do if a[i,j]<0 then Inc(Result); end; procedure mSumEvens(const a: TMatrix; var x: TVector); var i, j: Integer; begin for i:=1 to n do begin x[i]:=0; for j:=1 to n do if not Odd(a[i,j]) then x[i]:=x[i]+a[i,j]; end; end; procedure mProdCol(const a: TMatrix; var x: TVector); var i, j: Integer; begin for j:=1 to n do begin x[j]:=1; for i:=1 to n do x[j]:=x[j]*a[i,j]; end; end; var a: TMatrix; x: TVector; begin mRead(a,70); mWrite(a,'Матрица:'); if mNegCount(a)=0 then begin WriteLn('Отрицательных элементов нет'); Writeln('Вектор Х сумм четных в строках'); mSumEvens(a,x); end else begin WriteLn('Отрицательные элементы есть'); WriteLn('Вектор Х произведения в столбцах'); mProdCol(a,x); end; vWrite(x,'X ='); ReadLn; end.
Объяснение кода листинга программы
- Объявлены константы и типы данных:
- константа n=5 для размера матрицы и вектора;
- тип данных TMatrix - массив Integer размером 1..n x 1..n;
- тип данных TVector - массив Integer размером 1..n.
- Объявлены процедуры:
- vWrite - выводит вектор на экран, пробелы между элементами;
- mWrite - выводит матрицу на экран, пробелы между элементами;
- mRead - считывает матрицу из диапазона целых чисел, ограниченного Limit;
- mNegCount - считает количество отрицательных элементов в матрице;
- mSumEvens - суммирует четные элементы в каждой строке матрицы в соответствующий вектор;
- mProdCol - перемножает элементы каждого столбца матрицы в соответствующий вектор.
- Объявлены переменные:
- a - матрица;
- x - вектор;
- i, j - индексы для обхода матрицы и вектора.
- Главный цикл программы:
- считывание матрицы;
- проверка наличия отрицательных элементов;
- вывод соответствующего вектора;
- чтение из консоли.
- Вектор x выводится на экран с пробелами между элементами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д