Как исправить ошибку "Несколько подпрограмм могут быть вызваны"? - Pascal ABC
Формулировка задачи:
задание: превратить заданную матрицу А по правилу: если след матрицы меньше 1, то все строки с четными номерами заменить нулями, а с нечетными-единицям.
Ошибка:
Несколько подпрограмм могут быть вызваны
Решение задачи: «Как исправить ошибку "Несколько подпрограмм могут быть вызваны"?»
textual
Листинг программы
type
TArray = Array[Byte, Byte] Of Real;
procedure InputSize(const c: Char; var x: Byte);
begin
repeat
Write(c, '=');
ReadLn(x);
until (x > 0);
end;
procedure GenerateArray(var x: TArray; var n, m: Byte);
var
i, j: Byte;
begin
WriteLn;
Randomize;
InputSize('n', n); InputSize('m', m);
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
begin
x[i, j] := Random() * 100 - 50;
Write(' ', x[i, j]:6:2);
end;
WriteLn;
end;
end;
procedure ProcessArray(var x: TArray; const n, m: Byte);
var
i, j: Byte;
trace, temp: Real;
begin
WriteLn;
trace := 0;
for i := 0 to n - 1 do
trace := trace + x[i, i];
if (trace < 1)
then
begin
for i := 0 to n - 1 do
begin
temp := Ord(Not Odd(i));
for j := 0 to m - 1 do
begin
x[i, j] := temp;
Write(x[i, j]:2:0);
end;
WriteLn;
end;
end
else
WriteLn('trace >= 1');
end;
var
a, b: TArray;
nA, mA, nB, mB: Byte;
begin
GenerateArray(a, nA, mA); ProcessArray(a, nA, mA);
GenerateArray(b, nB, mB); ProcessArray(b, nB, mB);
end.
Объяснение кода листинга программы
- В начале кода объявлены необходимые переменные и типы данных.
- В процедуре
InputSizeсчитывается размер массива от пользователя. - В процедуре
GenerateArrayгенерируется случайное значение для каждого элемента массива. - В процедуре
ProcessArrayвычисляется сумма элементов диагонали массива и проверяется, равна ли она единице. Если нет, то происходит перегенерация массива. - В конце кода объявлены два массива
aиb, и выполнены вызовы процедурGenerateArrayиProcessArrayдля каждого из них.