-
Notifications
You must be signed in to change notification settings - Fork 0
/
ejercicio_3.cpp
67 lines (56 loc) · 2.11 KB
/
ejercicio_3.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# include <iostream>
# include <thread>
# include <string>
# include <chrono>
# include <time.h>
# include <iomanip>
# include <cmath>
using namespace std;
// CONSTANTES GLOBALES:
const int N = 3; // Max numero de Threads
const int TOP = 100; // Cota maxima del rango
const int BOTTOM = 0; // Cota minima del rango
const int NUM_REALES = 100; // Max numero de reales que guarda el vector "reales"
void average(const double reales[], double& media) {
media = 0;
for (int i = 0; i < NUM_REALES; i++)
media += (reales[i] / NUM_REALES);
}
void minmax(const double reales[], double& min, double& max) {
min = reales[0];
max = reales[0];
for (int i = 0; i < NUM_REALES; i++) {
if (reales[i] < min) min = reales[i];
if (reales[i] > max) max = reales[i];
}
}
void sigma(const double reales[], const double media, double& desviacion) {
double sumatorio = 0;
desviacion = 0;
for (int i = 0; i < NUM_REALES; i++)
sumatorio += pow(reales[i] - media, 2);
desviacion = sqrt(sumatorio / (NUM_REALES-1));
}
int main(int argc, char* argv[]) {
thread P[N];
double reales[NUM_REALES];
srand(time(NULL));
for (int i = 0; i < 100; i++) {
reales[i] = (TOP - BOTTOM) * ((double)rand() / (double)RAND_MAX) + BOTTOM;
}
double media;
double min, max;
double desviacion;
P[0] = thread(&average, reales, ref(media)); // Ponemos en marcha el hilo de media
P[1] = thread(&minmax, reales, ref(min), ref(max)); // Ponemos en marcha el hilo de minmax
P[0].join(); //me bloqueo hasta que se calcule la media
P[2] = thread(&sigma, reales, media, ref(desviacion)); // Ponemos en marcha el hilo de la desviacion tipica
P[1].join(); //me bloqueo hasta que se calcule minmax
P[2].join(); //me bloqueo hasta que se calcule la desviacion tipica
cout << "=======RESULTADOS=======\n";
cout << "MEDIA = " + to_string(media) + "\n";
cout << "MIN = " + to_string(min) + "\n";
cout << "MAX = " + to_string(max) + "\n";
cout << "SIGMA = " + to_string(desviacion) + "\n";
return 0;
}