Wrong Number of parametrs - Free Pascal
Формулировка задачи:
Снова прошу вашей помощи. Вот сижу с этой прогой уже много времени, и просто глаза и мозг зависли конкретно.
Итак, где я облажалась??
Ошибки следующие:
(120,9)Wrong Number of parametrs specified for call to "Dop";
(147,11)Wrong Number of parametrs specified for call to "Razl";
(148, 8) Wrong Number of parametrs specified for call to "DETERM".
По идее программа должна занулять матрицу по методу Гаусса и считать определитель.
Heelp
program recurs;
const
C=10;
type
Matrix = array[1..C,1..C] of real;
var
A,M: Matrix;
Det: real;
N,Col: integer;
procedure VvSKl;
var I,J: integer;
begin
Writeln('Write elements: ');
for I:=1 to N do
for J:=1 to N do
Read(A[I,J]);
end;
procedure Rand;
var I,J: integer;
begin
randomize;
for I:=1 to N do
for J:=1 to N do
A[I,J]:=random(10)+1;
end;
procedure NatCh;
var I,J,K: integer;
begin
K:=0;
for I:=1 to N do
for J:=1 to N do begin
K:=K+1;
A[I,J]:=K;
end;
end;
procedure VV;
var Num: integer;
begin
Num:=1;
N:=0;
While not N in [1..10] do
begin
Writeln('Write matrix size:' );
Readln(N);
Writeln('Write number of column: ');
Readln(Col);
//else
//Writeln('Wrong data!');
end;
Writeln('Type of enter');
Write('1-your choise: ');
Write(', 2-random: ');
Write(', 3-natural numbers: ');
while not (Num in [1..3]) do
begin
Readln(Num);
case Num of
1: VvSKl;
2: Rand;
3: Natch;
end;
end;
end;
procedure VuV(M:Matrix);
var I,J: integer;
begin
for I:=1 to N do
Write(I:4);
Readln;
for I:=1 to N do
begin
Write(I);
for J:=1 to N do
Write(M[I,J]:7);
Readln;
end;
end;
function Dop(A: Matrix; var M:Matrix; var I,J:integer):real;
var K,Ks,Q,Qs:integer;
begin
Q:=0;
for K:=1 to N-1 do begin
if (K=I) then Q:=1;
Qs:=0;
for Ks:=1 to N-1 do begin
if (Ks=J) then Qs:=1;
M[K,Ks]:=A[K+Q,Ks+Qs];
end;
end;
Dop:=M[K,Ks];
end;
function Razl(A:Matrix; N:integer):real;
var K,I,J:byte;
M:Matrix;
Alg:real;
begin
Alg:=0;
K:=1;
if (N<1) then begin
Writeln('Det doesn.t exist. N=', N);
end;
if (N=1) then Alg:=A[1,1]
else
if (N=2) then
Alg:=A[1,1]*A[2,2]-A[2,1]*A[1,2]
else
for I:=1 to N do
begin
Dop(A,M,N,I,1);
Alg:=Alg+K*A[I,1]*Razl(M,N-1);
K:=-K;
end;
Razl:=Alg;
end;
function DETERM (A:Matrix; M:Matrix; N:byte):real;
var K,I,J: integer;
R: real;
begin
for K:=1 to N do
for J:=K+1 to N+1 do begin
R:=M[J,K]/M[K,K];
for I:=K to N do begin
M[J,I]:=M[J,I]-R*M[K,I];
end;
end;
VuV(M);
for I:=1 to N do begin
M[I,J]:=M[J,I]*A[I,I];
end;
end;
Begin
VV;
VuV(M);
Writeln(Razl(A));
Det:=DETERM(A);
Writeln('Determinant= ', det);
Readln();
end.Решение задачи: «Wrong Number of parametrs»
textual
Листинг программы
program laba10;
uses crt;
type Matrix=array[1..10,1..10] of real;
Strk=array[1..10] of real;
var A,B:Matrix;
I,J:longint;
opr:real;
N,Col,S,L:integer;
Vub:byte;
procedure Vyvod(M:Matrix; N:integer);
var I,J:integer;
begin
for L:=1 to N do
Write(' ',L,'. ');
Writeln;
for I:=1 to N do
begin
Write(I,'. ');
for j:=1 to N do
write(M[I,J]:7:1,' ');
writeln;
end;
end;
procedure dop(A:Matrix; var B:Matrix; M,I,J:integer);
var ki,kj,di,dj:integer;
begin
di:=0;
for ki:=1 to m-1 do
begin
if (ki=i) then di:=1;
dj:=0;
for kj:=1 to m-1 do
begin
if (kj=j) then dj:=1;
b[ki,kj]:=a[ki+di,kj+dj];
end;
end;
end;
function opred(A:Matrix; N:integer):real;
var I,J,St:longint;
det,K:real;
B:Matrix;
begin
det:=0;
St:=col;
if N=1 then det:=A[1,1]
else if N=2
then det:=A[1,1]*A[2,2]-A[2,1]*A[1,2]
else
for i:=1 to n do
begin
if (i+st) mod 2=0 then k:=A[I,St]
else k:=-A[I,St];
dop(A,B,N,I,St);
det:=det+K*opred(B,N-1);
end;
opred:=det;
end;
function Ymnogaem(S:Strk; k:real):Strk; {a[i]:=k*a[i]}
var I:byte;
begin
for I:=1 to N do
S[I]:=K*S[I];
Ymnogaem:=S;
end;
function Vichitaem(S1:Strk; S2:Strk):Strk;
var I:byte;
begin
for I:=1 to N do
S1[i]:=S1[I]-S2[I];
Vichitaem:=S1;
end;
function G(A:Matrix):real;
var I,J:integer;
S:Strk;
R:real;
begin
for j:=1 to N-1 do
for i:=j+1 to n do
if (a[j,j]=0) then
begin
S:=A[I];
A[I]:=A[J];
A[J]:=Ymnogaem(S,(-1));
end
else
if not (A[I,J]=0) then
A[i]:=Vichitaem(A[I],Ymnogaem(A[J],A[I,J]/A[J,J]));
Vyvod(A,N);
R:=1;
for I:=1 to N do
R:=R*A[I,I];
G:=R;
end;
begin
clrscr;
writeln('Write matrix size:');
readln(N);
writeln('Write number of column: ');
readln(Col);
Writeln('Type of enter');
Write('1-your choise: ');
Write(', 2-random: ');
Write(', 3-natural numbers: ');
Writeln;
readln(Vub);
case Vub of
1:begin
for i:=1 to n do
for j:=1 to n do
read(A[I,J]);
end;
2:begin
randomize;
for i:=1 to n do
for j:=1 to n do
A[i,j]:=1*random(10)-5;
end;
3:begin
s:=0;
for i:=1 to n do
for j:=1 to n do begin
inc(s);
A[i,j]:=s;
end;
end;
end;
Vyvod(A,N);
opr:=opred(A,N);
writeln('Opredelitelb = ', opr:3:1);
Writeln('<br>');
writeln(G(A):3:1);
Readln();
end.
Объяснение кода листинга программы
В коде используется язык программирования Free Pascal. Типы данных и переменные:
- Matrix - массив реальных чисел размером 10x10, представленный как двумерный массив.
- Strk - массив реальных чисел размером 10.
- A, B - двумерные массивы для работы с исходной и временной матрицами соответственно.
- I, J - целочисленные переменные для обозначения строк и столбцов матрицы.
- opr - переменная для хранения результата вычисления определителя.
- N, Col, S, L - целочисленные переменные для обозначения размера матрицы, количества столбцов и номеров строк/столбцов.
- Vub - переменная типа byte для обозначения выбора типа ввода. Процедуры и функции:
- Vyvod - процедура для вывода содержимого матрицы на экран.
- dop - процедура для перестановки элементов матрицы B в соответствии с матрицей A.
- opred - функция для вычисления определителя матрицы.
- Ymnogaem - функция для умножения элементов матрицы на одно и то же число k.
- Vichitaem - функция для вычитания матрицы S2 из матрицы S1.
- G - функция для поиска наибольшего элемента в матрице и вычисления определителя. Постановка задачи:
- Ввод размера матрицы N и количества столбцов Col.
- Ввод типа ввода (1 - ввод с клавиатуры, 2 - случайный ввод, 3 - ввод последовательности натуральных чисел).
- Ввод исходных данных в матрицу A.
- Вычисление определителя матрицы opred.
- Вывод содержимого матрицы A и определителя opred.
- Вычисление значения функции G, представляющей собой сумму произведений главных диагоналей матрицы A.