Advertisement
Stybyk

Vlákna

Oct 28th, 2014
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. Zadanie u Olivky
  2. 1.)Vytv. pole floatov do 20 prvkov, v intervale <-100.00, 100.00>
  3. pomocou vlakien
  4. predavat parametry do vlakna
  5. 2.)Triedit pomocou dvoch vlakien 1/2 pola, insertion sort
  6. +merat cas
  7. tisk pola
  8. 3.)Otocit poradie prvkov v poli (v kazdej polke) a znovu zotriedit
  9. +merat cas
  10. tisk pola
  11. 4.)Prvky z 3.) spojit do jedneho pola do zoradeneho pola
  12. tisk pola
  13. 5.)Znova bod 1.) a skusime triedit cele pole
  14. 100 000 prvkov v poli
  15. +merat cas
  16. tisk
  17.  
  18. #include <iostream>
  19. #include <time.h>
  20. #include <windows.h>
  21.  
  22. using namespace std;
  23. const int N = 14;
  24. signed int P[N];
  25. int R[2];
  26. int R2[2];
  27. int T[N];
  28. void insertSort(int pole[], int size[2])
  29. {
  30.     for (int i=size[0]; i<size[1]-1; i++)
  31.     {
  32.         int j = i+1;
  33.         int a = pole[j];
  34.         while (j>size[0] && a<pole[j-1])
  35.         {
  36.             pole[j] = pole[j-1];
  37.             j--;
  38.         }
  39.         pole[j] = a;
  40.        
  41.     }
  42.     for(int k=size[0]; k<size[1]; k++)
  43.     {
  44.         cout << P[k] << " ";
  45.     }
  46.     cout<<endl;
  47. }
  48.  
  49. int kolik_ms( LPFILETIME pred, LPFILETIME po )
  50. {
  51.     hyper pred64b = pred->dwHighDateTime;
  52.     pred64b = ( pred64b << 32 ) | pred->dwLowDateTime;
  53.     hyper po64b = po->dwHighDateTime;
  54.     po64b = ( po64b << 32 ) | po->dwLowDateTime;
  55.     // konverze 100ns -> 1ms
  56.     return ( int ) ( ( po64b - pred64b ) / 10000 );
  57. }
  58.  
  59.  
  60. DWORD WINAPI vlakna( LPVOID c)
  61. {
  62.     int * d = ( int * ) c;
  63.     cout <<d[0]<<" "<<d[1] <<endl ;
  64.     insertSort(P,d);
  65.    
  66.     return 0;
  67. }
  68. DWORD WINAPI vlakna1( LPVOID )
  69. {
  70.    
  71.     int k=0,i=0,j=N/2;
  72.     cout<< "spojeni poli";
  73.     while(k<=N-1)
  74.     {
  75.         if((i<N/2)&& P[i]<=P[j])
  76.         {
  77.             T[k]=P[i];
  78.             i++;
  79.             k++;
  80.         }
  81.         else if(j<N)
  82.         {
  83.             T[k]=P[j];
  84.             j++;
  85.             k++;
  86.         }
  87.    
  88.     }
  89.     for(int k=0; k<N; k++)
  90.     {
  91.         cout << T[k] << " ";
  92.     }
  93.     cout<<endl;
  94.     return 0;
  95. }
  96.  
  97.  
  98.  
  99. void main()
  100. {
  101.    
  102.     srand( ( int ) time( NULL ) );
  103.     for (int i=0; i<N; i++)
  104.     {
  105.         P[i] = rand() % 70 - 30;
  106.     }
  107.     cout << "Aplikovani tridiciho algoritmu."<< endl;
  108.     /*for (int i=0; i<N; i++)
  109.     {
  110.         cout << P[i] << endl;
  111.     }*/
  112.     int R[2]={0,N/2};
  113.     FILETIME cas_pred, cas_po;
  114.     GetSystemTimeAsFileTime( &cas_pred );
  115.     HANDLE vlakno = CreateThread( 0, 0,vlakna,R, 0, 0 );
  116.     R2[0]=N/2;
  117.     R2[1]=N;
  118.     HANDLE vlakno2 = CreateThread( 0, 0,vlakna,R2, 0, 0 );
  119.     WaitForSingleObject( vlakno, INFINITE );
  120.     WaitForSingleObject( vlakno2, INFINITE );
  121.  
  122.     GetSystemTimeAsFileTime( &cas_po );
  123.  
  124.     cout << "Pole bylo setrideno"<< endl;
  125.     cout << "Setrideni trvalo: " << kolik_ms( &cas_pred, &cas_po )<<"ms" << endl;
  126.  
  127.     for(int i=0;i<=N-1-i;i++)
  128.     {
  129.         int b = P[i];
  130.         P[i] = P[N-1-i];
  131.         P[N-1-i] = b;
  132.     }
  133.     cout << "Prevracene pole."<< endl;
  134.     GetSystemTimeAsFileTime( &cas_pred );
  135.     vlakno = CreateThread( 0, 0,vlakna,R, 0, 0 );
  136.     vlakno2 = CreateThread( 0, 0,vlakna,R2, 0, 0 );
  137.     WaitForSingleObject( vlakno, INFINITE );
  138.     WaitForSingleObject( vlakno2, INFINITE );
  139.  
  140.     GetSystemTimeAsFileTime( &cas_po );
  141.  
  142.     cout << "Pole bylo setrideno"<< endl;
  143.     cout << "Setrideni trvalo: " << kolik_ms( &cas_pred, &cas_po )<<"ms" << endl;
  144.  
  145.     int T[N];
  146.     vlakno = CreateThread( 0, 0,vlakna1,R, 0, 0 );
  147.     WaitForSingleObject( vlakno, INFINITE );
  148.     cout <<"Pole spojeno."<<endl;
  149.  
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement