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