Bổ sung lệnh cho ra độ dài 3 cạnh tam giác khi nhập vào toạ độ?

program ChTrinhConNC2_TinhChatCuaTamGiac; 

uses
  crt;


const
  eps = 1.0E-6;// 1.0E-6 = 1.0×10^-6 = 0.000001. C.Thuc la MeN= M×e^-N.


type
  //tao bang ghi mo ta du lieu toa do 3 diem cua tam giac
  diem = record
    x, y: real;
  end;
  Tamgiac = record
    A, B, C: diem;
  end;

var
  T: tamgiac;
  deu, can, vuong: boolean;
  
  canha,canhb,canhc: real;
  
  
  


function khoangcach(P, Q: diem) : real;
//ham tinh khoang cach giua 2 diem P,Q cho ra do dai doan thang
begin
  khoangcach := sqrt((P.x - Q.x) * (P.x - Q.x) + (P.y - Q.y) * (P.y - Q.y));
end; 


procedure dodaicanh(var R: tamgiac;var a, b, c: real);
  //thu tuc nhan du lieu la bien mo ta tam giac va xuat ra du lieu la so dai 3 canh a,b,c
begin
  a := khoangcach(R.B, R.C);
  b := khoangcach(R.A, R.C);
  c := khoangcach(R.A, R.B);
end;


function chuvi(var R: tamgiac) : real;
  //ham tinh chu vi
var
  a, b, c: real;
begin
  dodaicanh(R, a, b, c);
  chuvi := a + b + c;
end;


function dientich(var R: tamgiac) :real;
  //ham tinh dien tich
var
  a, b, c, p: real;
begin
  dodaicanh(R, a, b, c);
  p := (a + b + c) / 2;
  dientich := sqrt(p * (p - a) * (p - b) * (p - c));
end;


procedure hienthi(var R: tamgiac);
  //thu tuc : toa do 3 dinh tam giac  
begin

  writeln('toa do 3 dinh cua tam giac la: ');
  writeln(' -dinh A(',R.A.x:0:3,', ', R.A.y:0:3,')');
  writeln(' -dinh B(',R.B.x:0:3,', ', R.B.y:0:3,')');
  writeln(' -dinh C(',R.C.x:0:3,', ', R.C.y:0:3,')');
end;


procedure tinhchat(var R: tamgiac; var deu, can, vuong: boolean);
  //thu tuc nhan du lieu la bien mo ta tam giac, xuat ra tinh chat cua no
var
  a, b, c: real;  
begin
  deu := false;
  can := false;
  vuong := false;
  dodaicanh(R, a, b, c);
  
    if (abs(a-b)<eps) and (abs(a-c)<eps) then
    deu:= true //do canh a - canh b,c < 1.10^-6 ~ 0 nen coi nhu 3 canh = nhau
else 
    if (abs(a-b)<eps) or (abs(a-c)<eps)
    or (abs(b-c)<eps) 
then can := true ;//tuong tu nhung la 1 trong 2 canh = nhau
    
    if (abs(a*a + b*b - c*c)<eps) 
    or (abs(a*a + c*c - b*b)<eps) 
    or (abs(b*b + c*c - a*a)<eps) 
then
   vuong := true ;//he thuc pytago tong  binh phuong 2 canh = binh phuong canh con lai, nen chuyen ve se cho =0 (<eps)
end;

Function k_cach(x1,y1,x2,y2:integer; T:tamgiac;A,B,C:diem;):real;

begin

k_cach:=sqrt(sqr(x2-x1)+sqr(y2-y1));

end;





begin //bat dau chuong trinh chinh

  textcolor(lightgreen);
  writeln('nhap thong tin tam giac: ');
  
  writeln('toa do dinh A: ');
  readln(T.A.x, T.A.y);
  
  writeln('toa do dinh B: ');
  readln(T.B.x, T.B.y);
  
  writeln('toa do dinh C: ');
  readln(T.C.x, T.C.y);
  writeln('====================================');
  hienthi(T);
  
//hien thi so do 3 canh  
  writeln('so do 3 canh la:');
  writeln('canh a: ',k_cach(T.A.x,T.A.y));
  writeln('canh b: ',canhb);
  writeln('canh c: ',canhc);
  
  writeln('so do dien tich va chu vi:'); writeln('dien tich: ',dientich(T):9:3);
  writeln('chu vi: ', chuvi(T) : 9: 3); tinhchat(T, deu, can, vuong);
  
writeln('tam giac nay co tinh chat: ');

  if deu then
    writeln(' la tam giac deu')  
  else if can then
    writeln(' la tam giac can') ;
  if vuong then
    writeln(' la tam giac vuong')  
  else 
    writeln(' la tam giac binh thuong');
  readln;
end.
dodaicanh(T, canha, canhb, canhc);
writeln('so do 3 canh la:');
writeln('canh a: ', canha);
writeln('canh b: ', canhb);
writeln('canh c: ', canhc);

Đúng không?

2 Likes

Em Có thử rồi , mà vướng cái vụ bản ghi vs nhận , trả giá trị của chươnh trình con nên vẫn ko ra

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?