Viết chương trình tính khoảng cách giữa hai điểm Pascal

Đề bài: Nhập vào tọa độ 2 điểm A[xA; yA] và B[xB; yB]. Tính khoảng cách AB.


Yêu cầu kiến thức:

  • Xác định đúng kiểu dữ liệu
  • Khai báo và sử dụng biến
  • Nhập và hiện thị giá trị của các biến
  • Vận dụng công thức tính khoảng cách giữa 2 điểm trong hệ tọa độ Descartes Oxy

Code tham khảo dưới được lưu với phần mở rộng là “.cpp”:

// Ho ten: Hoang Van Tuan // Website: timoday.edu.vn // De bai: /* Bai 1: Tinh khoang cach giua 2 diem trong he toa do Oxy*/ #include #include #include using namespace std; //===chuong trinh chinh=== int main[] { // Khai bao bien float xA, yA, xB, yB, d; // Nhap toa do cho cac bien coutxA; coutyA; coutxB; coutyB; // Tinh khoang cach giua 2 diem d = sqrt[[xB - xA]*[xB - xA] + [yB - yA]*[yB - yA]]; // Hien thi ket qua printf["Khoang cach giua 2 diem A va B la: %0.2f", d]; cout0] then Exit ; thuoc_doan:=True; End ; 3. Cắt nhau: a. Đường thẳng cắt đường thẳng: [1]: A1*x+B1*y+C1=0 và [2]: A2*x+B2*y+C2=0. Thì ta gọi mối tương quan giữa [1]và [2] được biểu diễn qua hệ phương trình sau: A1*x+B1*y=-C1 A2*x+B2*y=-C2 đặt: D=A1*B2-A2*B1; Dx=B1*C2 - B2*C1; Dy=C1*B2-A1*C2 * Hai đường thẳng cắt nhau khi và chỉ khi: D≠0. Toạ độ điểm giao của hai đường thẳng này là: x=Dx/D, y= Dy/D * Hai đường thẳng song song với nhau khi và chỉ khi: D=0 và Dx ≠ 0 hoặc Dy ≠ 0. * Hai đường thẳng trùng nhau khi: D=Dx=Dy=0. Chúng ta có thể xây dựng hàm kiểm tra cắt nhau của hai đường thẳng. Hàm Lines_Cut có giá trị: 1: Nếu hai đường thẳng đó cắt nhau 2: Nếu hai đường thẳng đó song song nhau 3: Nếu hai đường thẳng đó trùng nhau. Function Lines_cut [ L1 , L2 : Lines ] : Byte ; var D, Dx,Dy : Longint ; Begin D := L1.a*L2.b -L2.a*L1.b; Dx :=L1.b*L2.c-L1.c*L2.B ; Dy:=L1.c*L2.b-L1.b*L2.c ; If D0 then Lines_cut:=1 else If D=0 then Begin If [Dx0]Or[Dy0]Then Lines_cut:=2 ; If [Dx=0]And[Dy=0] ThenLines_Cut:=3; End ; End ; b. Đường thẳng cắt đoạn thẳng: [1]: A1*x+B1*y+C1=0 và đoạn AB, A [x1,y1], B[x2,y2]. Đặt A2:=y1-y2; B2:=x2-x1; C2:=-[A2*x1+B2*y] D=A1*B2-A2*B1; Dx=B1*C2 -B2*C1; Dy=C1*B2-A1*C2 Mối quan hệ giữa [1] và AB được thể hiện: * Nếu D ≠ 0 và điểm P[Dx/D,Dy/D] nằm trên đoạn AB thì [1] cắt AB. * Nếu D ≠ 0 và điểm P[Dx/D,Dy/D] nằm ngoài đoạn AB thì [1] cắt đường thẳng chứa AB nhưng không cắt AB. * Nếu D=Dx=Dy=0 thì AB[1]. * Nếu D=0, Dx/D0 hoặc Dy/D0 thì AB song song với [1]. Chúng ta xây dựng hàm: Lines_Cut_AB Lines_Cut_AB bằng: 1: Nếu đoạn thẳng cắt đường thẳng. 2: Nếu đoạn thẳng song song với đường thẳng 3: Nếu đoạn thẳng thuộc đường thẳng. 4: Nếu đường thẳng chứa đoạn thẳng cắt đường thẳng một điểm nằm ngoài đường thẳng. Function Lines_Cut_AB [L1:Lines ; P,Q : Point ]: Byte; Var L2 : Lines; Giao : Point_Chung ; D , Dx , Dy : Longint ; Begin With L2 do Xac_DinhABC [P,Q,a,b,c]; D := L1.a*L2.b -L2.a*L1.b; Dx :=L1.b*L2.c-L1.c*L2.B ; Dy:=L1.c*L2.b-L1.b*L2.c ; If D=0 Then Begin If [Dx=0]And [Dy=0]Then Lines_Cut_AB:=3; If [ Dx0]Or[Dy0]Then Lines_Cut_AB:=2 ; End ; If D0 Then Begin Giao.x := Dx/D ; Giao.y := Dy/D ; If Thuoc_Doan [Giao,P,Q] then Lines_Cut_AB:=1 Else Lines_Cut_AB:=4 ; End ; End ; c. Đoạn thẳng cắt đoạn thẳng: Xét hai đoạn thẳng AB và CD thì chúng cắt nhau hay không thì chúng ta có thể xét theo hai cách. Trong bài này tôi xin đề nghị cả hai cách, mỗi cách có những ưu, nhược điểm khác nhau. Cách 1: Cách Theo Phương Trình Đường Thẳng: Function Cat_Nhau1 [P,Q,M,N: Point] : Boolean ; Var L : Lines ; Begin Cat_Nhau1:=False; With L Do Xac_DinhABC[P,Q,a,b,c]; If Lines_Cut_AB[L,M,N]1 then Exit; With L Do Xac_DinhABC[M,N,a,b,c]; If Lines_Cut_AB[L,P,Q]1 then Exit ; Cat_Nhau1:=True ; End ; Cách 2: [Tham khảo sách Cẩm nang thuật toán - tập 2] Function ccw [ P0 , p1 , p2 : Point ] : Integer ; Var Dx1,Dx2,Dy1,Dy2: Integer ; Begin Dx1 := P1. x -P0.x ; Dy1 :=P1.y-P0.y ; Dx2 := P2. x -P0.x ; y2 :=P2.y-P0.y ; If Dx1*Dy2>Dy1*Dx2 then ccw :=1 ; If Dx1*Dy2ccw := -1 ; If Dx1*Dy2=Dx2*Dy1 then Begin If [Dx1*Dx2

Chủ Đề