Bài toán:
Khai báo một cấu trúc mô tả một điểm trên tọa độ xOy. Sau đó viết hàm thực hiện các chức năng sau:
- Nhập, xuất điểm.
- Kiểm tra điểm có nằm trên trục tung/trục hoành.
- Tính khoảng cách giữa 2 điểm.
- Tìm điểm đối xứng của 1 điểm qua trục tung/trục hoành
Xử lý bài toán:
- Nhập và xuất một tọa độ trong hệ xOy có dạng: (x,y)
- Ta thực hiện viết hàm void để xuất và nhập x và y.
- Kiểm tra điểm đó có nằm trên trục hoành hay trục tung không. Để biết ta cần hiểu như sau
- Nếu điểm đó nằm trên trục tung thì nghĩa là khi đó điểm đó phải có dạng (0,a) nghĩa là x=0. Với a là số bất kì đã nhập trước đó.
- Nếu điểm đó nằm trên trục hoành thì nghĩa là khi đó điểm đó phải có dạng (b,0) nghĩa là y=0. Với b là số bất kì đã nhập trước đó.
- Từ đó, ta viết hàm kiểm tra trả về giá trị 0 và 1 để xác định điểm đó thuộc trục nào ( 2 hàm 1 hàm kiểm tra trục tung 1 hàm kiểm tra trục hoành) hoặc bạn cũng có thể viết 1 hàm void để kiểm tra cùng một lúc.
- Tìm khoảng cách giữa 2 điểm bất kì trên hệ trục xOy.
- Khoảng cách giữa 2 điểm trên hệ trục xOy với tọa độ A(x1 , y1), B(x2,y2) ta tính như sau:
D = SQRT (pow((float) (x1 – y1),2) + p((float)x2-y2),2)
với sqrt() là căn bậc 2. Pow(a,b) nghĩa là ab ta sử dụng kiểu số thực trong pow
=>Từ đó, ta thực hiện viết hàm tính khoảng cách với d ta khai báo kiểu số thực.
- Tìm điểm đối xứng của 1 điểm (x,y). Trước tiên ta hiểu như sau
- ví dụ: Ta có tọa độ A(1;2)
+ Đối xứng qua trục hoành ta được tọa độ A’(1;-2)
+ Đối xứng qua trục tung ta được tọa độ A’’(-1;2)
=>Ta rút ra nhận xét như sau:
+ Đối xứng qua trục hoành thì là đốicủa y: -y
+ Đối xứng qua trục tung thì là đối của x: -x
Đối với trường hợp (0,a) thì không có điểm đối xứng qua trục tung vì nó nằm trên trục trung. (a,0) cũng vậy không có điểm đối xứng qua trục hoành vì nằm trên trục hoành và khi đó chỉ có đối xứng qua trục hoành hoặc trục tung. (0,-a) hoặc (-a,0)
=> Ta viết hàm void để tìm điểm đối xứng của tọa độ.
Khai báo thư viện:
#include<stdio.h> #include<conio.h> #include<math.h>
Khai báo struct tọa độ: x,y
struct toado { int x; int y; };
Khai báo prototype
void nhaptoado (toado &a); void xuattoado (toado a); void kiemtra_toado (toado a); float khoangcach (toado a,toado b); void diemdoixung (toado a);
Hàm MAIN
void main() { toado a,b; nhaptoado(a); xuattoado(a); nhaptoado(b); xuattoado(b); kiemtra_toado(a); kiemtra_toado(b); printf("Khoang cach cua 2 toa do la: %f \n",khoangcach(a,b)); diemdoixung(a); diemdoixung(b); getch(); }
Hàm nhập tọa độ
void nhaptoado (toado &a) { printf("NHAP TOA DO\n"); printf("\tNhap x: "); scanf("%d",&a.x); printf("\tNhap y: "); scanf("%d",&a.y); }
Hàm xuất tọa độ
void xuattoado (toado a) { printf("=>Toa do ban nhap la: ( %d , %d )\n",a.x,a.y); }
Hàm kiểm tra tọa độ nằm trên trục hoành/trục tung
void kiemtra_toado (toado a) { if(a.y==0) printf("+ Toa do ( %d, %d ) nam tren truc hoanh\n",a.x,a.y); else if(a.x==0) printf("+ Toa do ( %d, %d ) nam tren truc tung\n",a.x,a.y); else printf("+ Toa do ( %d, %d ) khong nam tren truc tung hay truc hoanh\n",a.x,a.y); }
Hàm tính khoảng cách
float khoangcach (toado a,toado b) { float d; d=sqrt(pow((float)(a.x-b.x),2)+pow((float)(a.y-b.y),2)); return d; }
Hàm tìm điểm đối xứng
void diemdoixung (toado a) { if(a.x==0) { printf("- Diem ( 0 , %d ) khong co diem doi xung qua truc tung\n",a.y); printf("- Diem doi xung cua ( 0 , %d ) qua truc hoanh la ( 0 , - %d)\n",a.y,a.y); } else if(a.y==0) { printf("- Diem doi xung cua ( %d , 0) qua truc tung la ( - %d , 0 )\n",a.x,a.x); printf("- Diem ( %d , 0 ) khong co diem doi xung qua truc hoanh\n",a.x); } else { printf("- Diem doi xung qua truc tung cua ( %d , %d ) la: (- %d , %d )\n",a.x,a.y,a.x,a.y); printf("- Diem doi xung qua truc hoanh cua ( %d , %d ) la: ( %d , - %d )\n",a.x,a.y,a.x,a.y); } }
Xem thêm: Cách sử dụng Kiểu dữ liệu cấu trúc: Struct phân số
13