Advertisement
wojtas626

[C] Sprawdzanie kół

Jan 17th, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5.  
  6. struct Circle
  7. {
  8.     char name;
  9.     double radius;
  10.     double x;
  11.     double y;
  12.     struct Circle *next;
  13. };
  14.  
  15.  
  16. void addCircles(struct Circle **headPointer)
  17. {
  18.     int choose;
  19.     struct Circle *pointer;
  20.  
  21.     pointer = *headPointer;
  22.  
  23.     printf("1. Dodaj kolo\n");
  24.     printf("2. Zakoncz dodawanie\n");
  25.     scanf("%d", &choose);
  26.     while (choose == 1)
  27.     {
  28.         if (pointer == NULL)
  29.         {
  30.             pointer = (struct Circle*)malloc(sizeof(struct Circle));
  31.             pointer->next = NULL;
  32.  
  33.             printf("\nWprowadz nazwe (1 znak): ");
  34.             scanf(" %c", &(pointer->name));
  35.             printf("\nWprowadz wsporzedna X: ");
  36.             scanf("%lf", &(pointer->x));
  37.             printf("\nWprowadz wsporzedna Y: ");
  38.             scanf("%lf", &(pointer->y));
  39.             printf("\nWprowadz promien: ");
  40.             scanf("%lf", &(pointer->radius));
  41.             *headPointer = pointer;
  42.         }
  43.         else
  44.         {
  45.             while (pointer->next != NULL)
  46.             {
  47.                 pointer = pointer->next;
  48.             }
  49.             pointer->next = (struct Circle*)malloc(sizeof(struct Circle));
  50.             pointer = pointer->next;
  51.             pointer->next = NULL;
  52.  
  53.             printf("\nWprowadz nazwe (1 znak): ");
  54.             scanf(" %c", &(pointer->name));
  55.             printf("\nWprowadz wsporzedna X: ");
  56.             scanf("%lf", &(pointer->x));
  57.             printf("\nWprowadz wsporzedna Y: ");
  58.             scanf("%lf", &(pointer->y));
  59.             printf("\nWprowadz promien: ");
  60.             scanf("%lf", &(pointer->radius));
  61.         }
  62.         printf("1. Dodaj kolo\n");
  63.         printf("2. Zakoncz dodawanie\n");
  64.         scanf("%d", &choose);
  65.     }
  66. }
  67.  
  68.  
  69. int checkCirclesAmount(struct Circle *head)
  70. {
  71.     int circlesAmount;
  72.     circlesAmount = 0;
  73.  
  74.     if(head != NULL)
  75.     {
  76.         circlesAmount = 1;
  77.         while(head->next != NULL)
  78.         {
  79.             head = head->next;
  80.             circlesAmount++;
  81.         }
  82.     }
  83.     return circlesAmount;
  84. }
  85.  
  86.  
  87. int **checkCircles(struct Circle *head)
  88. {
  89.     int circlesAmount, i, j;
  90.     struct Circle *pointer, *pointer2;
  91.     int **checkArray;
  92.  
  93.  
  94.     pointer = head;
  95.     circlesAmount = checkCirclesAmount(head);
  96.  
  97.     checkArray = (int **)malloc(sizeof(int*)*(circlesAmount-1));
  98.     j = circlesAmount - 1;
  99.     for(i = 0; i < (circlesAmount - 1); i++)
  100.     {
  101.         checkArray[i] = (int*)malloc(sizeof(int)*j);
  102.         j--;
  103.     }
  104.  
  105.     pointer = head;
  106.     pointer2 = head;
  107.     for (i = 0; i < (circlesAmount - 1); i++)
  108.     {
  109.         for(j = 0; j < (circlesAmount - 1 - i); j++)
  110.         {
  111.             double distance;
  112.  
  113.             pointer2 = pointer2->next;
  114.             distance = sqrt((pointer->x - pointer2->x)*(pointer->x - pointer2->x) + (pointer->y - pointer2->y)*(pointer->y - pointer2->y));
  115.  
  116.             if (distance <= pointer->radius + pointer2->radius)
  117.             {
  118.                 checkArray[i][j] = 1;
  119.             }
  120.             else
  121.             {
  122.                 checkArray[i][j] = 0;
  123.             }
  124.         }
  125.         pointer = pointer->next;
  126.         pointer2 = pointer;
  127.     }
  128.  
  129.     return checkArray;
  130. }
  131.  
  132.  
  133. int main()
  134. {
  135.     struct Circle *head;
  136.     int **checkArray;
  137.     int i, j, circlesAmount;
  138.  
  139.     head = NULL;
  140.  
  141.     addCircles(&head);
  142.  
  143.     checkArray = checkCircles(head);
  144.  
  145.  
  146.     circlesAmount = checkCirclesAmount(head);
  147.     for (i = 0; i < (circlesAmount - 1); i++)
  148.     {
  149.         for (j = 0; j < (circlesAmount - 1 - i); j++)
  150.         {
  151.             if(checkArray[i][j])
  152.             {
  153.                 printf("tak  ");
  154.             }
  155.             else
  156.             {
  157.                 printf("nie  ");
  158.  
  159.             }
  160.         }
  161.         printf("\n");
  162.     }
  163.  
  164.     return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement