From Small Crow, 1 Week ago, written in C.
Embed
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. struct punkt {
  7.     double x, y;
  8. };
  9. typedef struct punkt punkt;
  10.  
  11. punkt* zad1(int n, punkt pkt, int r) {
  12.     if(n > 0) {
  13.         punkt* p = malloc(sizeof(punkt)*n);
  14.        
  15.         int ile = 0;
  16.        
  17.         do {
  18.             double x = (double)rand()/RAND_MAX*2.0-r;
  19.             double y = (double)rand()/RAND_MAX*2.0-r;
  20.            
  21.             if( pow(x - pkt.x, 2) + pow(y - pkt.y, 2) <= pow(r, 2) ) {
  22.                 p[ile].x = x;
  23.                 p[ile].y = y;
  24.                 ile++;
  25.             }
  26.            
  27.             if(ile == n) {
  28.                 break;
  29.             }
  30.         } while(1);
  31.        
  32.         return p;
  33.     }
  34.     return NULL;
  35. }
  36.  
  37. void zad_10_4(punkt* tab, int n, punkt pkt, punkt* pp1, punkt* pp2) {
  38.     int i;
  39.     double min = -1.0;
  40.     punkt p1;
  41.     punkt p2;
  42.     for(i = 0; i < n; ++i) {
  43.         double x = tab[i].x;
  44.         double y = tab[i].y;
  45.        
  46.         double z = sqrt(pow(x - pkt.x, 2) + pow(y - pkt.y, 2));
  47.        
  48.         if(min == -1.0) {
  49.             min = z;
  50.             p1.x = x;
  51.             p1.y = y;
  52.         } else {
  53.             if(min > z) {
  54.                 min = z;
  55.                 p1.x = x;
  56.                 p1.y = y;
  57.             }
  58.         }
  59.     }
  60.     min = -1.0;
  61.     for(i = 0; i < n; ++i) {
  62.         double x = tab[i].x;
  63.         double y = tab[i].y;
  64.        
  65.         if(p1.x == x && p1.y == y) continue;
  66.        
  67.         double z = sqrt(pow(x - pkt.x, 2) + pow(y - pkt.y, 2));
  68.        
  69.         if(min == -1.0) {
  70.             min = z;
  71.             p2.x = x;
  72.             p2.y = y;
  73.         } else {
  74.             if(min > z) {
  75.                 min = z;
  76.                 p2.x = x;
  77.                 p2.y = y;
  78.             }
  79.         }
  80.     }
  81.     *pp1 = p1;
  82.     *pp2 = p2;
  83. }
  84.  
  85. int main()
  86. {
  87.     srand(time(NULL));
  88.  
  89.     int n = 5;
  90.     punkt pkt;
  91.     pkt.x = 0;
  92.     pkt.y = 0;
  93.     punkt* tab = zad1(n, pkt, 3);
  94.    
  95.     int i;
  96.     for(i = 0; i < n; ++i) {
  97.         printf("(%0.1lf, %0.1lf)\n", tab[i].x, tab[i].y);
  98.     }
  99.    
  100.     punkt p1;
  101.     punkt p2;
  102.     zad_10_4(tab, n, pkt, &p1, &p2);
  103.    
  104.     printf("\n");
  105.     printf("(%0.1lf, %0.1lf)\n", p1.x, p1.y);
  106.     printf("(%0.1lf, %0.1lf)\n", p2.x, p2.y);
  107.  
  108.     return 0;
  109. }
  110.