У меня такая задача.
Даны матрицы А[1:5,1:6] и В[1:5,1:6]. Из произведений нечетных элементов строк матрицы В сформировать вектор D. Если минимальный элемент 1-ой строки матрицы А больше минимального элемента 2-ой строки матрицы А, то в матрицу А добавить 3-ий столбец, являющийся значениями вектора D, иначе в матрице В поменять местами 1 и 5 столбцы. В п/п (подпрограмме) формирования вектора D использовать п/п нахождения произведений элементов вектора.
Модуль типов MyType
Unit MyType;
Interface
Uses Wincrt;
Type
mas1=array[1..50] of integer;
mas2=array[1..10,1..10] of integer;
func=function(Aa:Mas1;na:Byte):integer;
Var
f:text;
priz,priz1,priz2:Byte;
A:Mas2;B:Mas2; C,D:Mas1;
Implementation
End.
Модуль ввода элементов массивов VVod1
Unit Vvod1;
Interface
Uses Mytype;
Procedure FormMatr(na,ma:Byte;Pa,Qa:Integer;Var Aa:mas2);
Implementation
Procedure FormMatr;
Var i,j:Byte;
Begin
For i:=1 to na do For j:=1 to ma do
Begin Aa[i,j]:=Random(Qa-Pa)+Pa; End;
End;
End.
Модуль вывода элементов Vyvod
Unit Vyvod;
Interface
Uses MyType,WinCrt;
Procedure VyvodVek(na:Byte;Var Aa:mas1);
Procedure VyvodMatr(na,ma:Byte;Var Ba:mas2);
Implementation
Procedure VyvodVek;
Var i:Byte;
Begin
For i:=1 to na do
Write(f,Aa[i]:10,' ');
writeLn(f,'');
End;
Procedure VyvodMatr;
Var i,j:Byte;
Begin
For i:=1 to na do
begin
For j:=1 to ma do
Write(f,Ba[i,j]:3,' '); writeLn(f,'');
end;
End;
End.
Модуль типовых алгоритмов TypAlg1
Исходный код
Unit TipAlg1;
Interface
Uses Wincrt,MyType;
Procedure FormD(Aa:mas2;na,ma:Byte;Proiz:Func;Var Da:mas1;Var k:Byte);
Procedure Vstavka(Aa:mas2;na,ma,k2:Byte;Var Ba:mas2);
Procedure zamena(Aa:mas2;ma:Byte;nomer1,nomer2:Byte;Var Ba:mas2);
Function Proiz(na,ma:Byte; Aa:mas1):integer;Far;
Function MinStr(Aa:mas2;nomer,ma:Byte):integer;
Implementation
{Получение произведений}
Function Proiz;
Var i:Byte; Pr:integer;
Begin
Pr:=1;
For i:=1 to na do
If i mod 2=0
Then Pr:=Pr*Aa[i];
Proiz:=Pr;
End;
{Формирование вектора D}
Procedure FormD;
Var i,j:Byte;C:Mas1;
Begin
For i:=1 to na do
Begin
For j:=1 to ma do
C[j]:=Aa[i,j];
Da[i]:=Proiz(C,ma);k:=k+1;
End;
End;
{Поиск минимального элемента в строке}
Function MinStr;
Var i,j:Byte; minchStr,minchStol:Integer;
Begin
minchStr:=Aa[nomer,1];
For j:=1 to ma do
If Aa[nomer,1]<minchStr Then minchStr:=Aa[i,j];
MinStr:=minchStr;
End;
Procedure Vstavka;
Var i,j:Byte;
Begin
For i:=na+1 downto k2 do
For j:=1 to ma do
Aa[i,j]:=Aa[i-1,j];
For j:=1 to ma do
Aa[k2,j]:=D[i];
End;
Procedure zamena;
Var i,j:Byte;Pa:Byte;
Begin
For j:=1 to ma do
Begin
Pa:=A[nomer1,j]; A[nomer1,j]:=A[nomer2,j];A[nomer2,j]:=Pa;
End;
End;
end.
Головная программа
Исходный код
Program Lab3;
Uses WinCrt,MyType,Vvod1,Vyvod,TipAlg1;
Var
min1,min2:integer;
Begin
Assign(f,'C:\Rezlab\lab3.txt');ReWrite(f);
Randomize;
FormMatr(5,6,0,30,A);
WriteLn(f,‘Матрица А’);
VyvodMatr(5,6,A);
FormMatr(5,6,0,20,B);
WriteLn(f,‘Матрица В’);
VyvodMatr(5,6,B); WriteLn(f,’’);
FormD(B,5,6,Proiz,D,k);
VyvodVek(5,D);
Writeln('');
Min1:=MinStr(A,1,6);
Min2:=MinStr(A,2,6);
WriteLn(f,'min1=',min1:5,'min2=',min2:5); WriteLn(f,‘’);
If min1>min2 then
Begin
Vstavka(A,5,7,3,A);
WriteLn(f,'Матрица с добавленным столбцом');
VyvodMatr(5,7,A);
End
Else
Begin
Writeln(f,'Матрица с перестановленными столбцами');
Zamena(B,6,1,5,B)
VyvodMatr(5,6,B);
End; close(f); End.
Когда я компилирую мне выдает ошибку, что что-то не вторядке с тродцедурным типом Proiz (FormD(B,5,6,Proiz,D,k)). Я уже все перепробывола что мне в голову пришло, но ничего не получается.