Матрицы
Вложений: 1
Помогите найти ошибку! При ручном счете результаты вычисления вектора не совпадают с машинным.Кратко привожу постановку задачи и свой алгоритм:
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 по заданной формуле:Вложение 57043 Алгоритм: 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[i]:=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[i]<0 then p:=p*x[i]; if x[i]>0 then s:=s+x[i]; 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[i]: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. В процедуре Matrica неверно считается факториал. 2. Там же перепутаны индексы массива (a[j,i] вместо a[i,j]). 3. В процедуре Porjadok неверно записан алгоритм "пузырька". 4. В функции Fyn вычисление y:=p/s; загнано в тело цикла (а надо после), что приводит к ошибке и "вылету" программы. В общем, до крайности неряшливая работа. Извините, но в программировании так нельзя: компьютер "общих соображений" не понимает, в программе всё должно быть выверено до последней точки. Вот исправленный вариант: Код:
Const |
Часовой пояс GMT +4, время: 00:28. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.