Advertisement
didak1t

KursovaStanislav

Dec 19th, 2024
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Структура за трапец
  5. typedef struct
  6. {
  7.     double a; // първа основа
  8.     double b; // втора основа
  9.     double h; // височина
  10. } Trapezoid;
  11.  
  12. // Функция за пресмятане на площта на трапец
  13. double calculateArea(Trapezoid t)
  14. {
  15.     return ((t.a + t.b) * t.h) / 2;
  16. }
  17.  
  18. // Функция за намиране на индекса на трапеца с най-малка площ
  19. int findMinAreaIndex(double areas[], int n)
  20. {
  21.     int minIndex = 0;
  22.     for (int i = 1; i < n; i++)
  23.     {
  24.         if (areas[i] < areas[minIndex])
  25.         {
  26.             minIndex = i;
  27.         }
  28.     }
  29.     return minIndex;
  30. }
  31.  
  32. // Функция за сортиране на трапеците по площ (плъзгаща сортировка)
  33. void sortTrapezoids(Trapezoid trapezoids[], double areas[], int n)
  34. {
  35.     for (int i = 0; i < n - 1; i++)
  36.     {
  37.         for (int j = 0; j < n - i - 1; j++)
  38.         {
  39.             if (areas[j] > areas[j + 1])
  40.             {
  41.                 // Размяна на площите
  42.                 double tempArea = areas[j];
  43.                 areas[j] = areas[j + 1];
  44.                 areas[j + 1] = tempArea;
  45.  
  46.                 // Размяна на трапеците
  47.                 Trapezoid tempTrapezoid = trapezoids[j];
  48.                 trapezoids[j] = trapezoids[j + 1];
  49.                 trapezoids[j + 1] = tempTrapezoid;
  50.             }
  51.         }
  52.     }
  53. }
  54.  
  55. int main()
  56. {
  57.     int n;
  58.  
  59.     // Въвеждане на броя на трапеците
  60.     printf("Enter the number of trapezoids: ");
  61.     scanf_s("%d", &n);
  62.  
  63.     // Динамично заделяне на памет за масивите
  64.     Trapezoid* trapezoids = (Trapezoid*)malloc(n * sizeof(Trapezoid));
  65.     double* areas = (double*)malloc(n * sizeof(double));
  66.  
  67.     // Въвеждане на данни за всеки трапец
  68.     for (int i = 0; i < n; i++) {
  69.         printf("\nEnter the bases and height for trapezoid %d:\n", i + 1);
  70.         printf("Base a: ");
  71.         scanf_s("%lf", &trapezoids[i].a);
  72.         printf("Base b: ");
  73.         scanf_s("%lf", &trapezoids[i].b);
  74.         printf("Height h: ");
  75.         scanf_s("%lf", &trapezoids[i].h);
  76.  
  77.         // Пресмятане на площта и съхраняване в масива
  78.         areas[i] = calculateArea(trapezoids[i]);
  79.     }
  80.  
  81.     // Намиране на трапеца с най-малка площ
  82.     int minAreaIndex = findMinAreaIndex(areas, n);
  83.  
  84.     // Сортиране на трапеците по площ
  85.     sortTrapezoids(trapezoids, areas, n);
  86.  
  87.     // Извеждане на данните
  88.     printf("\nTrapezoids sorted by area:\n");
  89.     for (int i = 0; i < n; i++) {
  90.         printf("Trapezoid %d: a = %.2lf, b = %.2lf, h = %.2lf, Area = %.2lf\n",
  91.             i + 1, trapezoids[i].a, trapezoids[i].b, trapezoids[i].h, areas[i]);
  92.     }
  93.  
  94.     printf("\nTrapezoid with the smallest area:\n");
  95.     printf("a = %.2lf, b = %.2lf, h = %.2lf, Area = %.2lf\n",
  96.         trapezoids[minAreaIndex].a, trapezoids[minAreaIndex].b, trapezoids[minAreaIndex].h, areas[minAreaIndex]);
  97.  
  98.     // Освобождаване на заделената памет
  99.     free(trapezoids);
  100.     free(areas);
  101.  
  102.     return 0;
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement