Advertisement
barbaravladi

Untitled

Dec 15th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4.  
  5. #define EPS 1e-6
  6.  
  7. typedef struct
  8. {
  9. double x;
  10. double y;
  11. double R;
  12. int state;
  13. } point;
  14.  
  15. void init (point *, int);
  16. double distance (point * pa, point * pb);
  17.  
  18. int main()
  19. {
  20. point * p;
  21. int size;
  22. double d;
  23. double MIN;
  24. int ind, ind2;
  25. int i, j, k;
  26. double a;
  27.  
  28.  
  29. FILE * f = fopen ("input.txt","r");
  30. for (size = 0; fscanf (f,"%lf", &a) == 1 ; ++size);
  31. if (size % 2 != 0)
  32. {
  33. printf ("Incorrect data\n");
  34. return -1;
  35. }
  36. size /= 2;
  37. if (size == 1)
  38. {
  39. printf ("Incorrect data\n");
  40. return -1;
  41. }
  42. rewind (f);
  43. point = p[size];
  44. for (i = 0; i < size; ++i)
  45. {
  46. fscanf (f, "%lf %lf", &p[i].x, &p[i].y);
  47. }
  48. fclose (f);
  49.  
  50. init (p, size);
  51. /*MIN = sqrt (pow (buble[0].x - buble[1].x, 2) + pow (buble[0].y - buble[1].y, 2)) / 2;
  52. printf ("1st distance = %lf\n", MIN);*/
  53.  
  54. for (k = 0; k < size; ++k)
  55. {
  56. MIN = 0;
  57. for (i = 0; i < size ; ++i)
  58. {
  59. if (p[i].status == 1)
  60. {
  61. for (j = 0; j < size; ++j)
  62. {
  63. if (i != j)
  64. {
  65. d = distance(p[i], p[j]);
  66. if (buble[j].status == 0)
  67. {
  68. d = d - p[j].R;
  69. }
  70. else
  71. {
  72. d /= 2;
  73. }
  74. if (MIN == 0)
  75. {
  76. MIN = d;
  77. ind = i;
  78. }
  79. else if (d < MIN)
  80. {
  81. MIN = d;
  82. ind = i;
  83. ind2 = j; // mojno dobavit index j i potom buble[j].status = 0
  84. }
  85. //printf ("rassto9nie ot i%d do j%d minimalno i = %lf\n",i, j, MIN);
  86. }
  87. }
  88. }
  89. }//
  90. p[ind].R = MIN;
  91. p[ind].status = 0;
  92. if (p[ind2].status == 1)
  93. {
  94. p[ind2].R = MIN;
  95. p[ind2].status = 0;
  96. }
  97. }//
  98.  
  99. for (int i = 0; i < size; ++i){
  100. printf ("X%d (%lf, %lf) R = %lf\n", i, p[i].x, p[i].y, p[i].R);
  101. }
  102. delete [] p;
  103. return 0;
  104. }
  105.  
  106. void init (Buble *buble, int size)
  107. {
  108. for (int i = 0; i < size; ++i)
  109. {
  110. buble[i].R = 0;
  111. buble[i].status = 1;
  112. }
  113. }
  114.  
  115. double distance (point * pa, point * pb)
  116. {
  117. double dx = pa->x - pb->x;
  118. double dy = pa->y - pb->y;
  119.  
  120. return sqrt(dx*dx + dy*dy);
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement