Advertisement
antisa

LV6

Apr 6th, 2023
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <math.h>
  5.  
  6. #define MAX_M 100
  7. #define MIN_M 5
  8. #define MAX_N 16
  9. #define MIN_N 3
  10.  
  11. typedef struct {
  12.     double x;
  13.     double y;
  14. } Tocka;
  15.  
  16. typedef struct {
  17.     Tocka* vrh1;
  18.     Tocka* vrh2;
  19.     Tocka* vrh3;
  20.     Tocka* vrh4;
  21. } Cetverokut;
  22.  
  23. int unosDuljine() {
  24.     int duljina;
  25.     printf("Unesite duljinu polja: ");
  26.     scanf("%d", &duljina);
  27.     return duljina;
  28. }
  29.  
  30. void zauzimanjeTocaka(int m, Tocka** tocke) {
  31.     *tocke = malloc(m * sizeof(Tocka));
  32.     if (*tocke == NULL) {
  33.         printf("Neuspjesno zauzimanje memorije za tocke\n");
  34.         exit(EXIT_FAILURE);
  35.     }
  36. }
  37.  
  38. void zauzimanjeCetverokuta(int n, Cetverokut** cetverokuti) {
  39.     *cetverokuti = malloc(n * sizeof(Cetverokut));
  40.     if (*cetverokuti == NULL) {
  41.         printf("Neuspjesno zauzimanje memorije za cetverokute\n");
  42.         exit(EXIT_FAILURE);
  43.     }
  44. }
  45.  
  46. void popunjavanjeKoordinata(Tocka* tocke, int m) {
  47.     srand(time(NULL));
  48.     for (int i = 0; i < m; i++) {
  49.         tocke[i].x = rand() % 101;
  50.         tocke[i].y = rand() % 101;
  51.     }
  52. }
  53.  
  54. int odabirVrha(int m, int* dodijeljene_tocke, int broj_dodijeljenih) {
  55.     int vrh;
  56.     do {
  57.         vrh = rand() % m;
  58.     } while (dodijeljene_tocke[vrh] == 4 - broj_dodijeljenih);
  59.     dodijeljene_tocke[vrh]++;
  60.     return vrh;
  61. }
  62.  
  63. double duljinaStranice(Tocka* tocka1, Tocka* tocka2) {
  64.     double dx = tocka1->x - tocka2->x;
  65.     double dy = tocka1->y - tocka2->y;
  66.     return sqrt(dx * dx + dy * dy);
  67. }
  68.  
  69. double opsegChetverokuta(Cetverokut* cetverokut) {
  70.     double a = duljinaStranice(cetverokut->vrh1, cetverokut->vrh2);
  71.     double b = duljinaStranice(cetverokut->vrh2, cetverokut->vrh3);
  72.     double c = duljinaStranice(cetverokut->vrh3, cetverokut->vrh4);
  73.     double d = duljinaStranice(cetverokut->vrh4, cetverokut->vrh1);
  74.     return a + b + c + d;
  75. }
  76.  
  77. void prosjecnaUdaljenost(Cetverokut* cetverokuti, int n, double* min, double* max) {
  78.     double suma = 0;
  79.     *min = INFINITY;
  80.     *max = -INFINITY;
  81.          
  82. ////////////////////////////////////////////
  83.          
  84. #include <stdio.h>
  85. #include <stdlib.h>
  86. #include <math.h>
  87. #include <time.h>
  88.  
  89. // Struktura za točku
  90. typedef struct {
  91.     double x;
  92.     double y;
  93. } Tocka;
  94.  
  95. // Struktura za četverokut
  96. typedef struct {
  97.     Tocka* vrh1;
  98.     Tocka* vrh2;
  99.     Tocka* vrh3;
  100.     Tocka* vrh4;
  101. } Cetverokut;
  102.  
  103. // Funkcija za unos duljine polja
  104. int unosDuljine() {
  105.     int duljina;
  106.     printf("Unesite duljinu polja: ");
  107.     scanf("%d", &duljina);
  108.     return duljina;
  109. }
  110.  
  111. // Funkcija za zauzimanje memorije za polje točaka
  112. Tocka* zauzimanjeTocaka(int duljina) {
  113.     Tocka* polje = (Tocka*) malloc(duljina * sizeof(Tocka));
  114.     return polje;
  115. }
  116.  
  117. // Funkcija za zauzimanje memorije za polje četverokuta
  118. Cetverokut* zauzimanjeCetverokuta(int duljina) {
  119.     Cetverokut* polje = (Cetverokut*) malloc(duljina * sizeof(Cetverokut));
  120.     return polje;
  121. }
  122.  
  123. // Funkcija za popunjavanje koordinata pseudo-slučajnim odabirom
  124. void popunjavanjeKoordinata(Tocka* tocke, int duljina) {
  125.     srand(time(NULL));  // Postavljanje seed-a za pseudo-slučajni broj generator
  126.     for (int i = 0; i < duljina; i++) {
  127.         tocke[i].x = rand() % 101;
  128.         tocke[i].y = rand() % 101;
  129.     }
  130. }
  131.  
  132. // Funkcija za pseudo-slučajni odabir vrha četverokuta
  133. int odabirVrha(int m) {
  134.     return rand() % m;
  135. }
  136.  
  137. // Funkcija za pronalazak udaljenosti između dviju točaka
  138. double duljinaStranice(Tocka* t1, Tocka* t2) {
  139.     double dx = t1->x - t2->x;
  140.     double dy = t1->y - t2->y;
  141.     return sqrt(dx*dx + dy*dy);
  142. }
  143.  
  144. // Funkcija za računanje opsega četverokuta
  145. double opsegCetverokuta(Cetverokut* c) {
  146.     double a = duljinaStranice(c->vrh1, c->vrh2);
  147.     double b = duljinaStranice(c->vrh2, c->vrh3);
  148.     double c1 = duljinaStranice(c->vrh3, c->vrh4);
  149.     double d = duljinaStranice(c->vrh4, c->vrh1);
  150.     return a + b + c1 + d;
  151. }
  152.  
  153. // Funkcija za pronalazak četverokuta s najvećim opsegom
  154. Cetverokut* najveciOpseg(Cetverokut* cetverokuti, int dul
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement