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

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

  1. Объявлены константы и типы данных:
    • константа n=5 для размера матрицы и вектора;
    • тип данных TMatrix - массив Integer размером 1..n x 1..n;
    • тип данных TVector - массив Integer размером 1..n.
  2. Объявлены процедуры:
    • vWrite - выводит вектор на экран, пробелы между элементами;
    • mWrite - выводит матрицу на экран, пробелы между элементами;
    • mRead - считывает матрицу из диапазона целых чисел, ограниченного Limit;
    • mNegCount - считает количество отрицательных элементов в матрице;
    • mSumEvens - суммирует четные элементы в каждой строке матрицы в соответствующий вектор;
    • mProdCol - перемножает элементы каждого столбца матрицы в соответствующий вектор.
  3. Объявлены переменные:
    • a - матрица;
    • x - вектор;
    • i, j - индексы для обхода матрицы и вектора.
  4. Главный цикл программы:
    • считывание матрицы;
    • проверка наличия отрицательных элементов;
    • вывод соответствующего вектора;
    • чтение из консоли.
  5. Вектор x выводится на экран с пробелами между элементами.

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


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

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

10   голосов , оценка 3.8 из 5
Похожие ответы