Chào bạn! Rất vui vì bạn đã vào thăm blog của tôi: -)

Danh sách bài đã đăng

Sửa Đóng
{Ví dụ: Từ HPT 4 ẩn:
            a11.x1+a12.x2+a13.x3+a14.x4 = b1
           
a21.x1+a22.x2+a23.x3+a24.x4 = b2
            a31.x1+a32.x2+a33.x3+a34.x4 = b3
            a41.x1+a42.x2+a43.x3+a44.x4 = b4.
Chương trình đưa HPT về dạng:
            a11.x1+a12.x2+a13.x3+a14.x4 = b1
                  
a22.x2+a23.x3+a24.x4 = b2
                          a33.x3+a34.x4 = b3
                                 a44.x4 = b4.
Từ đó tính được x4=b4/a44, rồi x3=(b3-a34.x4)/a33, ..., x1=....}

uses crt;
const n=4;
type Mang_2_Chieu=array[1..n,1..n] of integer;
     Mang_1_Chieu=array[1..n] of integer;
var a : Mang_2_Chieu;
    b : Mang_1_Chieu;
    Lan : byte;

procedure Nhap(var a:Mang_2_chieu; var b:Mang_1_chieu);
var i,j:byte;
begin
  for i:=1 to n do
    begin
      for j:=1 to n do a[i,j]:=random(9)-random(9);
      b[i]:=random(9)-random(9);
    end
end;

Procedure Xuat(a:Mang_2_chieu; b:Mang_1_chieu);
var i,j,k,maxd : byte;
    d:array[1..n] of byte;
    xN:string[12];
begin
  for j:=1 to n do
    begin
      str(a[1,j],xN);
      if a[1,j]>=0 then xN:='+'+xN;
      maxd:=length(xN);
      for i:=2 to n do
        begin
          str(a[i,j],xN);
          if a[i,j]>=0 then xN:='+'+xN;
          if length(xN)>maxd then maxd:=length(xN);
        end;
      d[j]:=maxd;
    end;
  textcolor(7);
  writeln('He phuong trinh lan thu ',Lan,' la:');
  for i:=1 to n do
    begin
      textcolor(7);
      write('(',i,') ');
      for j:=1 to n do
        begin
          str(a[i,j],xN);
          if a[i,j]>=0 then xN:='+'+xN;
          if (a[i,j]=0) and (i>j) then textcolor(12)
          else textcolor(15);
          write(xN:d[j]);
          textcolor(11);
          write('.x',j);
        end;
      textcolor(14);
      write(' = ');
      writeln(b[i]);
    end
end;

procedure DoiCho(var a,b:integer);
var c:integer;
begin
  c:=a;
  a:=b;
  b:=c;
end;

function USCLN(a,b:integer):integer;
var c : integer;
begin
  a:=abs(a);
  b:=abs(b);
  if a<b then DoiCho(a,b);
  while b>0 do
    begin
      c:=a mod b;
      a:=b;
      b:=c;
    end;
  USCLN:=a;
end;

procedure GianUoc(var a:Mang_2_chieu; var b:Mang_1_chieu);
var i,j : byte;
    usc : integer;
begin
  for i:=1 to n do
    begin
      usc:=b[i];
      for j:=1 to n do usc:=USCLN(usc,a[i,j]);
      if usc>1 then
        begin
          for j:=1 to n do a[i,j]:=a[i,j] div usc;
          b[i]:=b[i] div usc;
        end;
    end;
end;

procedure BienDoi(var a:Mang_2_chieu;
                  var b:Mang_1_chieu;
                  Lan:byte);
var i,j     : byte;
    aLL,aiL : integer;
begin
  i:=Lan;
  while (a[i,Lan]=0) and (i<=n) do i:=i+1;
  if (i>Lan) and (i<=n) then
    begin
      for j:=1 to n do DoiCho(a[Lan,j],a[i,j]);
      DoiCho(b[Lan],b[i]);
    end;
    aLL:=a[Lan,Lan];
      for i:=Lan+1 to n do
        if a[i,Lan]<>0 then
          begin
            aiL:=a[i,Lan];
            for j:=Lan to n do
              a[i,j]:=a[i,j]*aLL-a[Lan,j]*aiL;
            b[i]:=b[i]*aLL-b[Lan]*aiL;
          end;
  GianUoc(a,b);
  Xuat(a,b);
  readkey;
end;

procedure BienLuan;
var x   : array[1..n] of real;
    i,j : byte;
    s,P : real;
    xR  : string;
begin
  i:=1;
  while (a[i,i]<>0) and (i<=n) do i:=i+1;
  textcolor(15);
  if i<=n then
    writeln('Dap so: Hpt vo nghiem hoac vo so nghiem')
  else
    begin
      s:=0;
      i:=n;
      repeat
        P:=b[i]-s;
        x[i]:=P/a[i,i];
        i:=i-1;
        s:=0;
        for j:=i+1 to n do s:=s+a[i,j]*x[j];
      until i=0;
      writeln('Dap so: Hpt co 1 nghiem duy nhat:');
      for j:=1 to n do
        begin
          str(x[j]:0:14,xR);
          while xR[length(xR)]='0' do delete(xR,length(xR),1);
          if xR[length(xR)]='.' then delete(xR,length(xR),1);
          textcolor(11);
          write('x',j);
          textcolor(14);
          writeln(' = ',xR);
        end;
    end;
end;

BEGIN
  textmode(c80);
  randomize;
  repeat
    clrscr;
    writeln('Giai he phuong trinh theo thuat toan Gauss:');
    Lan:=0;
    Nhap(a,b);
    Xuat(a,b);
    readkey;
    for Lan:=1 to n do BienDoi(a,b,Lan);
    BienLuan;
    textcolor(7);
    write('Go Esc de thoat, phim khac de tiep tuc...');
  until readkey=#27
END.


Chú ý:
Sau khi chạy ngon bạn có thể thay n lớn hơn và random lớn hơn chút ít.... OK.
  • Báo cáo

    dat_nm93 10:43 31-05-2009

    CHAU CHAO CHU?CHAU LA DAN CHUYEN TIN MA PHAI LE THAT DAY??
  • Báo cáo

    dat_nm93 10:43 31-05-2009

    CHAU CHAO CHU?CHAU LA DAN CHUYEN TIN MA PHAI LE THAT DAY??
  • Báo cáo

    ttm021287 09:09 12-05-2009

    Cháu chào chú, khi nào chú rảnh cháu mời chú qua blog cháu nhé,,hì.......

    Chucs chú buỏi sáng an lành

  • Báo cáo

    DeLi_Cio 10:36 10-05-2009

    Mừng Ngày lễ của mẹ ! Chúc Bác gái của Bác luôn vui vẻ & sức khỏe rồi rào! Gia đình đầm ấm và tràn ngập yêu thương...!
    Chúc bác buổi sáng may mắn & an lành

    forever-love-mother.gif
  • Báo cáo

    Lã Chí An 08:15 10-05-2009

    Cháu chào chú! đây là ngôn ngữ lập trình pascal hở chú. Cháu ko học về cái này nên nhìn vào ko bít j hết. Cháu học 5 năm đại học hầu như là kiến thức xã hội thôi chú. hì
    chúc chú buổi sáng tốt lành nhé! Có thời gian qua blog cháu nhé chú!
  • WA.....CHU' SIEU WA'......CHU' LAM` NGHE` ZI` VAY? CHAU' TON CHU LEN LAM` SU PHU LUN ^O^ , MOT' KHI NAO` RANH~ CHU' NHO' ''THAM'' BLOG CUA~ CHAU' NHA!!!

Danh sách bạn bè

Sửa Đóng

Danh sách bạn bè

Bạn chưa kết nối với ai

Bạn chưa có trang yêu thích nào.

Thống kê

Sửa Đóng

Thống kê

  • Khách hôm qua: 4
  • Tổng số khách: 1356
  • lượt xem hôm nay: 0
  • Tổng lượt xem: 2666
  • Bài viết: 11
  • Hình ảnh: 3
  • Lời bình : 14
 

R H
G S
B V

#