fork download
  1. #include <stdio.h>
  2. #define sqr(x) ((x)*(x))
  3. /*
  4. Se dau la intrare N cercuri, date fiecare prin coordonatele centrului si raza (numere reale)
  5. ce se incadreaza in tipul standard float si un punct in plan. Decideti caruia dintre discurile cercurilor ii apartine punctul dat.
  6. */
  7.  
  8. typedef struct Point {
  9. float x,
  10. y;
  11. } TPoint;
  12.  
  13. typedef struct Circle {
  14. TPoint O;
  15. float R;
  16. } TCircle;
  17.  
  18. float sqrt2(float n) {
  19. float x = n, y = 1, e = 0.000001;
  20. while(x-y>e){
  21. x = (x+y) / 2;
  22. y = n/x;
  23. }
  24. return x;
  25. }
  26.  
  27. float computeDistance(TPoint p1, TPoint p2) {
  28. return sqrt2(sqr(p2.x-p1.x) + sqr(p2.y-p1.y));
  29. }
  30.  
  31. int belongTo(TCircle C, TPoint P) {
  32. if(computeDistance(P, C.O) < C.R) {
  33. return 1;
  34. } else {
  35. return 0;
  36. }
  37. }
  38. int main(int argc, char const *argv[]) {
  39. int n;
  40. TCircle C[100];
  41. TPoint P;
  42.  
  43. printf("%s","Dati numarul de cercuri N = ");
  44. scanf("%d", &n);
  45.  
  46. printf("%s","Introduceti cercurile:\n");
  47.  
  48. for(int i = 0; i < n; ++i) {
  49. printf("Cercul#%d:\n", i + 1);
  50. printf("Centrul O(x,y) = ");
  51. scanf("%f %f", &C[i].O.x, &C[i].O.y);
  52. printf("R = ");
  53. scanf("%f", &C[i].R);
  54. }
  55.  
  56. printf("%s","Introduceti punctul P(x,y):");
  57. scanf("%f %f", &P.x, &P.y);
  58.  
  59. printf("\n--------%s--------\n","Output:");
  60.  
  61. printf("Punctul P(%3.3f,%3.3f) apartine cercurilor: \n", P.x, P.y);
  62.  
  63. for(int i = 0; i < n; ++i) {
  64. if(belongTo(C[i], P)) {
  65. printf("%d. C(%3.3f, %3.3f, %3.3f)\n", i+1, C[i].O.x, C[i].O.y, C[i].R);
  66. }
  67. }
  68.  
  69. return 0;
  70. }
Success #stdin #stdout 0s 5436KB
stdin
3
1.23
3.4
3.67
0
1.2
2.34
-1.23
8.9
2.34
1.56
2.34
stdout
Dati numarul de cercuri N = Introduceti cercurile:
Cercul#1:
Centrul O(x,y) = R = Cercul#2:
Centrul O(x,y) = R = Cercul#3:
Centrul O(x,y) = R = Introduceti punctul P(x,y):
--------Output:--------
Punctul P(1.560,2.340) apartine cercurilor: 
1. C(1.230, 3.400, 3.670)
2. C(0.000, 1.200, 2.340)