Aizen_Stas
Новые
- Регистрация
- 26 Окт 2011
- Сообщения
- 20
- Реакции
- 0
- Баллы
- 0
Матрицы
Помогите найти ошибку! При ручном счете результаты вычисления вектора не совпадают с машинным.Кратко привожу постановку задачи и свой алгоритм:
1)расчёт элементов квадратной матрицы A=a(i,j), i,j=1,2,…n по заданной формуле:a=sin(i*j)*ln(j!);
2)вычисление элементов вектора X=x(i) i=1,2,…n
по заданному правилу:xi-скалярное произведение i-го столбца на (n+1-i)-ю строку;
3)упорядочить элементы четных строк матрицы А по убыванию абсолютных значений;
4)вычисление значения функции y по заданной формуле:
Алгоритм:
Program Lab5;
Const n=3;
Title='Pabota 5';
Type vect=array[1..n] of real;
matr=array[1..n,1..n] of real;
Var x:vect; a:matr;
i,j:integer;
y:real;
Procedure Matrica(n:integer; Var A:matr);
Var f,i,j:integer;
Begin
for i:=1 to n do
for j:=1 to n do
begin
f:=1;
f:=f*j;
a[j,i]:=sin(i*j)*ln(f);
end;
End;
Procedure Vector(n:integer; A:matr; Var X:vect);
Var l,k,h,i:integer;
Begin
for i:=1 to n do
begin
l:=n+1-i;
h:=0;
for k:=1 to n do
x:=h+a[k,i]*a[l,k];
end;
End;
Procedure Porjadok(n:integer; Var A:matr);
Var k,i,j:integer;
q:real;
Begin
for j:=1 to n do
begin
if j mod 2=0 then
begin
for i:=1 to n-1 do
for k:=i+1 to n do
if abs(a[j,i])<abs(a[j,k]) then
begin
q:=a[j,i]; a[j,i]:=a[j,k]; a[j,k]:=q;
end;
end;
end;
End;
Function Fyn(n:integer; X:vect):real;
Var i:integer;
P,S,y:real;
Begin
p:=1;
s:=0;
for i:=1 to n do
begin
if x<0 then p:=p*x;
if x>0 then s:=s+x;
y:=p/s;
end;
Fyn:=y;
End;
Begin
Matrica(n,a);
Writeln('MATPICA A');
for i:=1 to n do
Begin
for j:=1 to n do Write(a[i,j]:8:3);
writeln;
End;
Vector(n,a,x);
Writeln('BEKTOP X');
for i:=1 to n do write(x:8:3);
writeln;
Porjadok(n,a);
Writeln('UPOR CHETNYE STROKI MATPICY A');
for i:=1 to n do
Begin
for j:=1 to n do Write(a[i,j]:8:3);
writeln;
End;
y:=Fyn(n,x);
Writeln('Rez y= ',y:10:3);
Writeln(Title);
End.
Помогите найти ошибку! При ручном счете результаты вычисления вектора не совпадают с машинным.Кратко привожу постановку задачи и свой алгоритм:
1)расчёт элементов квадратной матрицы A=a(i,j), i,j=1,2,…n по заданной формуле:a=sin(i*j)*ln(j!);
2)вычисление элементов вектора X=x(i) i=1,2,…n
по заданному правилу:xi-скалярное произведение i-го столбца на (n+1-i)-ю строку;
3)упорядочить элементы четных строк матрицы А по убыванию абсолютных значений;
4)вычисление значения функции y по заданной формуле:

Алгоритм:
Program Lab5;
Const n=3;
Title='Pabota 5';
Type vect=array[1..n] of real;
matr=array[1..n,1..n] of real;
Var x:vect; a:matr;
i,j:integer;
y:real;
Procedure Matrica(n:integer; Var A:matr);
Var f,i,j:integer;
Begin
for i:=1 to n do
for j:=1 to n do
begin
f:=1;
f:=f*j;
a[j,i]:=sin(i*j)*ln(f);
end;
End;
Procedure Vector(n:integer; A:matr; Var X:vect);
Var l,k,h,i:integer;
Begin
for i:=1 to n do
begin
l:=n+1-i;
h:=0;
for k:=1 to n do
x:=h+a[k,i]*a[l,k];
end;
End;
Procedure Porjadok(n:integer; Var A:matr);
Var k,i,j:integer;
q:real;
Begin
for j:=1 to n do
begin
if j mod 2=0 then
begin
for i:=1 to n-1 do
for k:=i+1 to n do
if abs(a[j,i])<abs(a[j,k]) then
begin
q:=a[j,i]; a[j,i]:=a[j,k]; a[j,k]:=q;
end;
end;
end;
End;
Function Fyn(n:integer; X:vect):real;
Var i:integer;
P,S,y:real;
Begin
p:=1;
s:=0;
for i:=1 to n do
begin
if x<0 then p:=p*x;
if x>0 then s:=s+x;
y:=p/s;
end;
Fyn:=y;
End;
Begin
Matrica(n,a);
Writeln('MATPICA A');
for i:=1 to n do
Begin
for j:=1 to n do Write(a[i,j]:8:3);
writeln;
End;
Vector(n,a,x);
Writeln('BEKTOP X');
for i:=1 to n do write(x:8:3);
writeln;
Porjadok(n,a);
Writeln('UPOR CHETNYE STROKI MATPICY A');
for i:=1 to n do
Begin
for j:=1 to n do Write(a[i,j]:8:3);
writeln;
End;
y:=Fyn(n,x);
Writeln('Rez y= ',y:10:3);
Writeln(Title);
End.