Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Tìm khoảng cách của 2 điểm lớn nhất trong n điểm nhập vào?

  1. #1
    Ngày gia nhập
    07 2011
    Bài viết
    10

    Red face Tìm khoảng cách của 2 điểm lớn nhất trong n điểm nhập vào?

    Các pro giúp mình bài này với! Mai kiểm tra rồi?
    Đề bài là: Tạo lớp diem các điểm trong không gian 3 chiều với các phương thức nhập tọa độ, in tọa độ. Tạo lớp doanthang kế thừa từ lớp diem và có các phương thức nhập dữ liệu 2 điểm , in dữ liệu 2 điểm, tính độ dài đoạn thẳng nối 2 điểm.Lập trình nhập tọa độ n điểm va tìm 2 điểm A,B trong n điểm sao cho độ dài đoạn AB là lớn nhất?
    Mình làm được các ý đầu rồi còn ý cuối tìm độ dài lớn nhất trong n điểm khó quá mong các pro giải giúp.
    Đây là bài code mình đã làm các bạn có thể sửa luôn trên code cho mình dễ hiểu nha!
    C++ Code:
    1. #include<iostream.h>
    2. #include<math.h>
    3. class diem
    4. {
    5.     protected:
    6.         float x,y,z;
    7.     public:
    8.         diem()
    9.         {
    10.             x=y=z=0;
    11.         }
    12.         void nhap();
    13.         float getx();
    14.         float gety();
    15.         float getz();
    16.         void hien();
    17. };
    18. void diem::nhap()
    19. {
    20.     cout<<"Nhap toa do x,y,z \n";
    21.     cin>>x>>y>>z;
    22. }
    23. float diem::getx()
    24. {
    25.     return x;
    26. }
    27. float diem::gety()
    28. {
    29.     return y;
    30. }
    31. float diem::getz()
    32. {
    33.     return z;
    34. }
    35.  
    36. void diem::hien()
    37. {
    38.         cout<<"("<< x <<"," << y <<"," <<z << ")\n";
    39.  
    40. }
    41. class doanthang:public diem
    42. {
    43.     public:
    44.         float kc;
    45.         float tinhdodai(diem,diem);
    46.         void dodaimax(diem);
    47. };
    48. float doanthang::tinhdodai(diem a,diem b)
    49. {
    50.     float dx,dy,dz;
    51.     dx=a.getx()-b.getx();
    52.     dy=a.gety()-b.gety();
    53.     dz=a.getz()-b.getz();
    54.     return sqrt(dx*dx+dy*dy+dz*dz);
    55.     kc=sqrt(dx*dx+dy*dy+dz*dz);
    56. }
    57.  
    58. void main()
    59. {
    60.     diem A,B;
    61.     doanthang L;
    62.     cout<<"Nhap toa do diem A:\n";A.nhap();
    63.     cout<<"Nhap toa do diem B:\n";B.nhap();
    64.     cout<<"Toa do diem A: ";A.hien();
    65.     cout<<"Toa do diem B: ";B.hien();
    66.     cout<<"Khoang cach giua A va B: "<<L.tinhdodai(A,B);
    67. }

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    bắt cặp điểm 0-1 là max.rồi đặt cố định 0 duyệt lên dần các điểm còn lại cái nào max hơn lại gán vào max.mún nữa thì ghi nhớ vị trí của điểm thứ i đó

  3. #3
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    772

    Tớ code thuật toán thì quen thói viết C thuần rồi. Thế nên cứ C mà téng thôi.
    Khoảng cách lớn nhất của hệ n điểm.
    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <memory.h>
    4. #include <math.h>
    5.  
    6. typedef struct pointstruct
    7. {
    8.         float x;
    9.         float y;
    10.         float z;
    11. }point_t;
    12.  
    13. float distance(point_t begin, point_t end)
    14. {
    15.         float dx = end.x - begin.x;
    16.         float dy = end.y - begin.y;
    17.         float dz = end.z - begin.z;
    18.         return sqrt(dx * dx + dy * dy + dz * dz);
    19. }
    20.  
    21. void enumerate(int* a, int n, int k,int start, int current, point_t* points, float* max)
    22. {
    23.     int i, first = 0;
    24.     point_t *from;
    25.     point_t *end;
    26.     float d;
    27.     if(current == k)
    28.     {
    29.         for(i = 0; i < n; i++)
    30.         {
    31.             if(a[i])
    32.             {
    33.                 if(!first)
    34.                 {
    35.                     first = 1;
    36.                     from = points + i;
    37.                 }
    38.                 else
    39.                 {
    40.                     end = points + i;
    41.                     break;
    42.  
    43.                 }
    44.             }
    45.         }
    46.         d = distance(*from, *end);
    47.         if(*max < d)
    48.                 *max = d;
    49.         return;
    50.     }
    51.     for(i = start; i < n; i++)
    52.     {
    53.         if(!a[i])
    54.         {
    55.             a[i] = i + 1;
    56.             enumerate(a, n, k, i, current + 1, points, max);
    57.             a[i] = 0;
    58.         }
    59.     }
    60.  
    61. }
    62. void combination_enumerate(int n, point_t* points)
    63. {
    64.     int *a;
    65.     float max = 0;
    66.     if(n < 0)
    67.     {
    68.         printf("n: invalid input\n");
    69.         return;
    70.     }
    71.     a = (int *)malloc(n * sizeof(int));
    72.     memset(a, 0, n* sizeof(int));
    73.  
    74.     enumerate(a, n, 2, 0, 0, points, &max);
    75.     printf("Max distance = %f\n", max);
    76.     free(a);
    77.  
    78. }
    79.  
    80. int main()
    81. {
    82.     point_t points[] = {{4.f, 5.3f, 0.f},
    83.                         {2.4f, 6.7f, 0.f},
    84.                         {0.f, 0.f, 0.f},
    85.                         {10.f, 10.f, 0.f}};
    86.     int size;
    87.     size = sizeof(points) / sizeof(point_t);
    88.     combination_enumerate(size, points);
    89.     return 0;
    90. }

Các đề tài tương tự

  1. Graphic Xử lý khoảng màu da người ( RGB ) khi nhận diện mặt người trong ảnh?
    Gửi bởi SkyAndOcean trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 08-08-2013, 02:16 PM
  2. Tìm phân số p/q trong khoảng a/b và c/d sao cho q nhỏ nhất
    Gửi bởi Anonymous trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 25-05-2011, 11:12 PM
  3. Chỉ cho nhập 1 khoảng số cụ thể vào textbox trong lập trình C#?
    Gửi bởi hunterval trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 29-01-2011, 04:07 PM
  4. Kỹ thuật C++ Các quy tắc nhập chuỗi trong C++, làm thế nào để nhập chuỗi có khoảng trắng?
    Gửi bởi quyen1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 20-11-2010, 03:36 PM
  5. Kỹ thuật C++ không nhập được khoảng trắng trong tập tin
    Gửi bởi cafelanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 28-05-2010, 11:56 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn