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.
Bổ sung lệnh cho ra độ dài 3 cạnh tam giác khi nhập vào toạ độ?
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