Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement