Advertisement
Guest User

statistic

a guest
Nov 23rd, 2014
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.95 KB | None | 0 0
  1. /*1. Štatistika
  2. Napíšte viacvláknový program, ktorý bude v jednotlivých vláknach počítať rôzne štatistiky. V základnej verzii nech má program tri pracovné vlákna, ktoré počítajú priemer, maximum a minimum hodnôt zadaných na vstupe programu. Nech sú tieto výstupné štatistiky globálne prístupné, aby ich mohlo hlavné vlákno po ukončení pracovných vlákien vypísať.
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <pthread.h>
  7.  
  8. int pole[] = {90, 81, 78, 95, 72, 85};
  9. int pocCis = sizeof(pole)/sizeof(int);
  10.  
  11. void*  maximum(void* p) {
  12.     int* arr = (int*) p;
  13.     int i;
  14.     int maximum = arr[0];
  15.     for(i = 0; i < 5; i++) {
  16.         if(arr[i] > maximum) {
  17.             maximum = arr[i];
  18.         }
  19.     }
  20.    
  21.     //printf("Maximum je: %i\n", maximum);
  22.     return (void*)maximum;
  23. }
  24.  
  25. void*  minimum(void* p) {
  26.     int* arr = (int*) p;
  27.     int i;
  28.     int minimum = arr[0];
  29.     for(i = 0; i < 5; i++) {
  30.         if(arr[i] <  minimum) {
  31.             minimum = arr[i];
  32.         }      
  33.     }
  34.    
  35.     //printf("Minimum je: %i\n", minimum);
  36.     return (void*)minimum;
  37. }
  38.  
  39. void* average(void* p) {
  40.     int sum = 0;
  41.     int* arr = (int*) p;
  42.     int i;
  43.     printf("dlzka pola: %i\n", pocCis);
  44.  
  45.     for (i = 0; i < pocCis; i++) {
  46.         sum = sum + arr[i];
  47.     }  
  48.    
  49.     int avg;
  50.     avg = sum/pocCis;
  51.  
  52.     //printf("Sum: %i, Priemer je: %i\n", sum,  avg);
  53.  
  54. return (void*)avg;
  55. }
  56.  
  57. int main () {
  58.    
  59.     int i;
  60.     int tmp1;
  61.     tmp1 = sizeof(pole)/sizeof(int);
  62.     pthread_t max;
  63.     pthread_t min;
  64.     pthread_t avg;
  65.     void* maxim;
  66.     void* minim;
  67.     void* averg;
  68.     for (i = 0; i < tmp1; i++) {
  69.         int tmp;
  70.         tmp = pole[i];
  71.         printf("Pole %i hodnota: %i\n", i, tmp);
  72.        
  73.     }
  74.  
  75.     pthread_create(&max, NULL, maximum, (void*)pole);
  76.     pthread_create(&min, NULL, minimum, (void*)pole);
  77.     pthread_create(&avg, NULL, average, (void*)pole);
  78.    
  79.  
  80.     pthread_join(max, &maxim);
  81.     pthread_join(min, &minim);
  82.     pthread_join(avg, &averg);
  83.    
  84.     printf("Averg: %i\n", (int)averg);
  85.     printf("Maximum: %i\n", (int)maxim);
  86.     printf("Minimum: %i\n", (int)minim);
  87.    
  88.  
  89.  
  90. return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement