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