bài tập của em ko biết mắc lỗi gí mà nó không chạy.
program jacobi_hichic_khoqua;
uses crt;
type matranA=array[1..10,1..10] of real;
matranB=array[1..10] of real;
var
a:matranA;
b:matranB;
x0,x1:array[1..10] of real;
i,j,k,l,n:integer;
s,c,esp:real;
procedure nhapmtA(var a:matranA;n:integer);
var i,j:integer;
begin
writeln(' MOI BAN NHAP CAC GIA TRI CUA MA TRAN VUONG A' );
for i:=1 to n do
for j:=1 to n do
begin
write('a[',i,' ',j,']=');
readln(a[i,j]);
end;
end;
procedure nhapmtB(var b:matranB;n:integer);
var i:integer;
begin
writeln(' MOI BAN NHAP CAC GIA TRI CAU MA TRAN B' );
for i:=1 to n do
begin
write('b[',i,']=');
readln(b[i]);
end;
end;
procedure hienthimtA(var a:matranA;n:integer);
var
i,j:integer;
begin
writeln(' HIEN THI MA TRAN A' ) ;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:5:2);
writeln;
end;
end;
procedure hienthimtB(var b:matranB;n:integer);
var i:integer;
begin
writeln(' HIEN THI MA TRAN B' );
for i:=1 to n do
writeln(b[i]:5:2);writeln;
end;
procedure kiemtramt(a:matranA;n:integer);
var i,j:integer;
max,tong:real;
begin
for i:=1 to n do
begin
c:=1/a[i,i];
for j:=1 to n do
if j<>i then
begin
a[i,j]:=a[i,j]*c;
b[i]:=b[i]*c;
a[i,i]:=0;
end;
end;
begin
max:=0;
for i:=1 to n do
begin
tong:=0;
for j:=1 to n do
begin
tong:=tong+abs(a[i,j]);
if tong>max then
max:=tong;
end;
end;
begin
if max<1 then
writeln('ma tran A hoi tu');
if max>1 then
begin
writeln('ma tran A ko hoi tu');
writeln(' BAN PHAI NHAP LAI MA TRAN A' );
nhapmtA(a,n);
end;
end;
end;
end;
function jacobi (var a:matranA;b:matranB;n:integer;esp:real):real;
var i,j,k:integer;
s:real;
t:boolean;
begin
for i:=1 to n do
x0[i]:=0;
x0[1]:=1;
for i:=1 to n do
begin
begin
c:=1/a[i,i];
for j:=1 to n do
if j<>i then
begin
a[i,j]:=a[i,j]*c;
b[i]:=b[i]*c;
a[i,i]:=0;
end;
end;
k:=1;
t:=false;
{ repeat }
begin
for i:=1 to n do
begin
x1[i]:=b[i];
for j:=1 to n do
x1[i]:=x1[i]-a[i,j]*x0[j];
end;
s:=0;
for i:=1 to n do
s:=abs(x1[i]-x0[i]);
if s>=esp then
for i:=1 to n do
x0[i]:=x1[i];
if s<esp then
begin
{ t:=true;
writeln; }
writeln('phep lap hoi tu sau',k,'buoc tinh');
writeln;
writeln('nghiem cua phuong trinh da cho la');
writeln;
for i:=1 to n do
writeln(x1[i]:10:5);
end;
k:=k+1;
if k<1 then
begin
t:=true;
writeln('Phep lap ko hoi tu sau',k-1,'buoc tinh');
end;
end;
begin
clrscr;
writeln('nhap vao gia tri cua n');
readln(n);
writeln('nhap vao sai so cho phep esp= ');
readln(esp);
nhapmtA(a,n);
nhapmtB(b,n);
writeln('MA TRAN A DUOC HIEN THI LA');
hienthimtA(a,n);
writeln('MA TRAN B DUOC HIEN THI LA');
hienthimtB(b,n);
kiemtramt(a,n);
jacobi(a,b,n,esp);
readln;
end.
Đây là chuơng trình giải phương trình AX=b bằng phương pháp jacobi
với A là ma trận lặp nhập từ bàn phím.
Em đã viét chương trình như trên nhưng nó không chạy,
o cho jacobi
em biết còn đôi chỗ chưa đúng và nhiều chỗ thừa kô cần thiêt nên em post bài này lên ,mọi người cùng giúp em sửa sao cho ngắn gọn và dễ hiểu nhất
em cảm ơn
Bookmarks