Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Zadatak 2b: Dretve
- #include <iostream>
- #include <iomanip>
- #include <math.h>
- #include <signal.h>
- #include <unistd.h>
- #include <pthread.h>
- #define PI 3.14159265358979
- using namespace std;
- struct podaci_za_mnogokut
- {
- int *n; // Broj stranica
- double *a; // Duljina stranica
- double *povrsina;
- double *opseg;
- };
- podaci_za_mnogokut m;
- int br_m; // Broj mnogokuta
- void m_povrsina(int i)
- {
- m.povrsina[i] = (float)1 / 4 * m.n[i] * m.a[i] * m.a[i] / tan(PI / m.n[i]);
- cout << "n = " << left << setw(5)
- << m.n[i] << " a = " << left << setw(5)
- << m.a[i] << " P = " << m.povrsina[i] << endl;
- }
- void m_opseg(int i)
- {
- m.opseg[i] = (float)m.n[i] * m.a[i];
- cout << "n = " << left << setw(5)
- << m.n[i] << " a = " << left << setw(5)
- << m.a[i]<< " O = " << m.opseg[i] << endl;
- }
- void *ispisi(void *arg)
- {
- int i = *((int *)arg);
- m_povrsina(i);
- usleep(1000000);
- m_opseg(i);
- }
- void izbrisi(int sig)
- {
- delete[] m.n;
- delete[] m.a;
- delete[] m.povrsina;
- delete[] m.opseg;
- exit(EXIT_SUCCESS);
- }
- void provjeri_parametre(int br_provjere, int arg_count, char **args)
- {
- switch (br_provjere)
- {
- case 1:
- if (arg_count < 3 || arg_count > 11 || arg_count % 2 == 0)
- {
- cout << "Neispravan unos parametara!" << endl;
- exit(EXIT_FAILURE);
- }
- break;
- case 2:
- int j = 0;
- for (int i = 1; i < arg_count; i++)
- {
- if (atoi(args[i]) <= 0 || (i % 2 != 0 && atoi(args[i]) < 3))
- {
- cout << "Neispravan unos parametara!" << endl;
- izbrisi(0);
- exit(EXIT_FAILURE);
- }
- else
- if (i % 2 != 0) m.n[j] = atoi(args[i]);
- else m.a[j++] = atof(args[i]);
- }
- break;
- }
- }
- int main(int arg_count, char **args)
- {
- provjeri_parametre(1, arg_count, args);
- br_m = (arg_count - 1) / 2;
- pthread_t thread_id[br_m];
- m.n = new int[br_m];
- m.a = new double[br_m];
- m.povrsina = new double[br_m];
- m.opseg = new double[br_m];
- sigset(SIGINT, izbrisi);
- provjeri_parametre(2, arg_count, args);
- for (int q = 0; q < br_m; q++)
- {
- if (pthread_create(&thread_id[q], NULL, &ispisi, &q) != 0)
- {
- cout << "Pogreska pri kreiranju dretve!" << endl;
- exit(EXIT_FAILURE);
- }
- usleep(1000000);
- }
- for (int z = 0; z < br_m; z++)
- pthread_join(thread_id[z], NULL);
- izbrisi(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement