Viết chương trình thao tác trên các điểm trên mặt phẳng (có các thành phần X, Y) :
+ Nhập thông tin về 3 điểm A, B, C. Tính diện tích của Tam giá ABC.
+ Nhập danh sách n điểm, và điểm M. Hãy xác định điểm gần điểm M nhất.
Hướng dẫn:
- Viết hàm tính khoảng cách giữa 2 điểm A, B theo công thức:
- Viết hàm tính diện tích tam giác ABC thông qua chu vi của tam giác:
a = KhoangCach(B, C)
b = KhoangCach(A, C)
c = KhoangCach(A, B)
p = ( a+b+c) / 2
- Viết hàm tìm kiểm trong danh sách điểm nhậm vào, tìm điểm X có khoảng cách từ X đến M là nhỏ nhất.
Source code chương trình:
{ 1. Khai bao cac kieu du lieu va bien can thiet }
PROGRAM ThaoTacDiem;
Uses CRT;
Type KDIEM = RECORD
X,Y : Integer;
End;
KDSDIEM = Array[1..50] of KDIEM;
Var
DS: KDSDIEM;
n: Integer;
A, B, C, M, X: KDIEM;
{ 2. Thu tuc nhap 3 diem A, B, C}
Procedure NhapABC( Var A, B, C: KDIEM);
Begin
Write(‘Toa do A(X, Y):’); Readln( A.X, A.Y );
Write(‘Toa do B(X, Y):’); Readln( B.X, B.Y );
Write(‘Toa do C(X, Y):’); Readln( C.X, C.Y );
End;
{ 3. Thu tuc nhap du lieu cho danh sach diem }
Procedure NhapDSDiem( Var dsdiem : KDSDIEM; Var N:Integer);
Var i:Integer;
Begin
Repeat
Write(‘Nhap so diem = ‘);
Readln(N);
Until ( N>0 ) and ( N < 51);
For i:=1 to N do
Begin
Write(‘Toa do X, Y:’); Readln(dsdiem[i].X, dsdiem[i].Y);
End;
End;
{ 4. Ham tinh khoang cach giua 2 diem A, B }
Function KhoangCach( A, B: KDIEM) : Real;
Begin
KhoangCach := Sqrt( Sqr(A.X-B.X) + Sqr(A.Y-B.Y) );
End;
{ 5. Ham tinh dien tich tam giac A, B, C }
Function DienTichABC( A, B, C: KDIEM) : Real;
Var ab, bc, ca, p: Real;
Begin
ab := KhoangCach ( A, B );
bc := KhoangCach ( B, C );
ca := KhoangCach ( C, A );
p := (ab + bc + ca) / 2;
DienTichABC := Sqrt( p * (p-ab) * (p-bc) * (p-ca) );
End;
{ 6. Xac dinh diem gan M nhat trong danh sach n diem }
Function DiemGanMnhat(ds : KDSDIEM; n:Integer;M:KDIEM): KDIEM;
Var kcMin, kc: Real;
X: KDIEM;
I : Integer;
Begin
KcMin := KhoangCach(M, ds[1]);
For i:=1 to N do
Begin
Kc := KhoangCach(M, ds[i]);
If (kc >= kcMin) Then
Begin
KcMin := Kc;
X := ds[i];
End;
DiemGanMnhat := X;
End;
{ Chương trình chính; }
BEGIN
Clrscr;
NhapABC( A, B, C );
Writeln(‘Diem tich tam giac ABC= ‘, DienTichABC(A, B, C):6:2);
NhapDSDiem( ds, N );
Write(‘Toa do M(x, y):’); Readln(M.X, M.Y);
X := DiemGanMnhat(ds, N, M);
Writeln(‘Diem gan M nhat la (‘, X.x,’ , ’ , X.y,’ ) trong cac diem nhap vao. ’);
Readln;
END.