daily pastebin goal
29%
SHARE
TWEET

Untitled

a guest Mar 21st, 2019 52 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Zadatak 2b: Dretve
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <math.h>
  5. #include <signal.h>
  6. #include <unistd.h>
  7. #include <pthread.h>
  8.  
  9. #define PI 3.14159265358979
  10.  
  11. using namespace std;
  12.  
  13. struct podaci_za_mnogokut
  14. {
  15.     int *n; // Broj stranica
  16.     double *a; // Duljina stranica
  17.     double *povrsina;
  18.     double *opseg;
  19. };
  20.  
  21. podaci_za_mnogokut m;
  22. int br_m; // Broj mnogokuta
  23.  
  24. void m_povrsina(int i)
  25. {
  26.     m.povrsina[i] = (float)1 / 4 * m.n[i] * m.a[i] * m.a[i] / tan(PI / m.n[i]);
  27.     cout << "n = " << left << setw(5)
  28.         << m.n[i] << " a = " << left << setw(5)
  29.         << m.a[i] << " P = " << m.povrsina[i] << endl;
  30. }
  31.  
  32. void m_opseg(int i)
  33. {
  34.     m.opseg[i] = (float)m.n[i] * m.a[i];
  35.     cout << "n = " << left << setw(5)
  36.         << m.n[i] << " a = " << left << setw(5)
  37.         << m.a[i]<< " O = " << m.opseg[i] << endl;
  38. }
  39.  
  40. void *ispisi(void *arg)
  41. {
  42.     int i = *((int *)arg);
  43.     m_povrsina(i);
  44.     usleep(1000000);
  45.     m_opseg(i);
  46. }
  47.  
  48. void izbrisi(int sig)
  49. {
  50.     delete[] m.n;
  51.     delete[] m.a;
  52.     delete[] m.povrsina;
  53.     delete[] m.opseg;
  54.    
  55.     exit(EXIT_SUCCESS);
  56. }
  57.  
  58. void provjeri_parametre(int br_provjere, int arg_count, char **args)
  59. {
  60.     switch (br_provjere)
  61.     {
  62.         case 1:
  63.             if (arg_count < 3 || arg_count > 11 || arg_count % 2 == 0)
  64.             {
  65.                 cout << "Neispravan unos parametara!" << endl;
  66.                 exit(EXIT_FAILURE);
  67.             }
  68.             break;
  69.         case 2:
  70.             int j = 0;
  71.            
  72.             for (int i = 1; i < arg_count; i++)
  73.             {
  74.                 if (atoi(args[i]) <= 0 || (i % 2 != 0 && atoi(args[i]) < 3))
  75.                 {
  76.                     cout << "Neispravan unos parametara!" << endl;
  77.                     izbrisi(0);
  78.                     exit(EXIT_FAILURE);
  79.                 }
  80.                 else
  81.                     if (i % 2 != 0) m.n[j] = atoi(args[i]);
  82.                     else m.a[j++] = atof(args[i]);
  83.             }
  84.             break;
  85.     }
  86. }
  87.  
  88. int main(int arg_count, char **args)
  89. {
  90.     provjeri_parametre(1, arg_count, args);
  91.    
  92.     br_m = (arg_count - 1) / 2;
  93.     pthread_t thread_id[br_m];
  94.    
  95.     m.n = new int[br_m];
  96.     m.a = new double[br_m];
  97.     m.povrsina = new double[br_m];
  98.     m.opseg = new double[br_m];
  99.     sigset(SIGINT, izbrisi);
  100.    
  101.     provjeri_parametre(2, arg_count, args);
  102.    
  103.     for (int q = 0; q < br_m; q++)
  104.     {
  105.         if (pthread_create(&thread_id[q], NULL, &ispisi, &q) != 0)
  106.         {
  107.             cout << "Pogreska pri kreiranju dretve!" << endl;
  108.             exit(EXIT_FAILURE);
  109.         }
  110.         usleep(1000000);
  111.     }
  112.    
  113.     for (int z = 0; z < br_m; z++)
  114.         pthread_join(thread_id[z], NULL);
  115.    
  116.     izbrisi(0);
  117.     return 0;
  118. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top