Hiển thị kết quả từ 1 đến 9 / 9
  1. #1
    Tham gia
    30-10-2007
    Bài viết
    159
    Like
    1
    Thanked 1 Time in 1 Post

    Cần chú ý ! Cứu!!! chương trình của em không chạy !!ai giúp em sửa với

    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
    Quote Quote

  2. #2
    Tham gia
    30-10-2007
    Bài viết
    159
    Like
    1
    Thanked 1 Time in 1 Post
    sao hông ai post bài lên thế

  3. #3
    Tham gia
    11-07-2007
    Bài viết
    42
    Like
    0
    Thanked 2 Times in 2 Posts
    Này bạn gameonline ơi viết chương trình nên cách và căn dòng sao cho dễ nhìn, chứ thế nào chả có ma nào thèm đọc la phải, nhìn cái procedure này lẫn vào cái kia loạn hết cả mắt lên.

  4. #4
    Tham gia
    30-10-2007
    Bài viết
    159
    Like
    1
    Thanked 1 Time in 1 Post
    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;
    Vay các anh chỉ cần kiểm tra hộ em đoạn chương trình này thôi
    em ko biết làm sao mà nọ ko chạy

  5. #5
    Tham gia
    03-11-2007
    Bài viết
    1
    Like
    0
    Thanked 0 Times in 0 Posts
    co ai chi giup dum tui voi

    may cua tui tu nhien vao yahoo messenger khi enter thi tu dong bien mat.da remove va cai lai nhung van vay.

    ai chi dum tui cach phai lam sao cam on nhieu

  6. #6
    Tham gia
    30-10-2007
    Bài viết
    159
    Like
    1
    Thanked 1 Time in 1 Post
    lỗi của em là khi khai báo ham function jacobi trong chương trình chính,
    nó hiện thông báo lôi (:= expected) o ngay chỗ dấu cách của function jacobi(a,b,n,esp);
    em đã kiểm tra nhưng không phát hiện lỗi sai nào,
    các anh chị góp ý sửa giúp em cais
    em cảm ơn nhiều

  7. #7
    Tham gia
    09-07-2004
    Location
    nơi tui ở!
    Bài viết
    303
    Like
    0
    Thanked 2 Times in 2 Posts
    ở trên bạn dùng function để khai báo jacobi, nhưng khi gọi hàm bạn lại dùng cách gọi của procedure?

  8. #8
    Tham gia
    27-10-2007
    Bài viết
    69
    Like
    0
    Thanked 0 Times in 0 Posts
    bạn kiểm tra lỗi xem nó bị mắc lỗi gì, nếu không có lỗi thì phải xem lại thuật giải thui!!

  9. #9
    Tham gia
    30-10-2007
    Bài viết
    159
    Like
    1
    Thanked 1 Time in 1 Post
    không phải em khai báo đúng hàm rồi,em nghĩ chắc chỉ tại thuật toán thôi,
    em không biết sai chỗ nào,
    về các bước khai báo thì em chắc là em đúng rồi chỉ có các diều kiện liên quan thì em không chắc lắm.
    Đề bài chi tiết em đã nêu ở trên rồi và cả bài làm cua em nữa.
    các anh chị coppy về máy cho chay thử rồi sửa lỗi cho em luôn.
    em cảm ơn

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •