Advertisement
miky0123

vlakna

Oct 29th, 2013
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.76 KB | None | 0 0
  1. #include<iostream>
  2. #include<time.h>
  3. #include <windows.h>
  4.  
  5. using namespace std;
  6.  
  7. const int N = 10;
  8. const int R = 10;
  9. const int S = 10;
  10. char pole2[R][S];
  11. char pole[N];
  12. char novePole[S*2];
  13. //naplneni jednorozmerneho pole
  14. void naplnPole(int velikost)
  15. {
  16.     srand(time(0));
  17.     for(int i = 0; i < velikost; i++)
  18.     {
  19.         char r = rand() % 70 - 60;
  20.         pole[i] = r;
  21.     }
  22. }
  23. //tisk jednorozmerneho pole
  24. void tiskPole( int velikost)
  25. {
  26.     for(int i = 0; i < velikost; i++)
  27.     {
  28.         printf("%d ", pole[i]);
  29.     }
  30. }
  31. //naplneni dvourozmerneho pole
  32. void naplnPole2(int velikostRadek, int velikostSloupec)
  33. {
  34.     srand(time(0));
  35.     for(int i = 0; i < velikostRadek; i++)
  36.     {
  37.         for(int j = 0; j < velikostSloupec; j++)
  38.         {
  39.             char r = rand() % 200 - 100;
  40.             pole2[i][j] = r;
  41.         }
  42.     }
  43. }
  44.  
  45. //tisk dvourozmerneho pole
  46. void tiskPole2(int velikostRadek, int velikostSloupec)
  47. {
  48.     for(int i = 0; i < velikostRadek; i++)
  49.     {
  50.         for(int j = 0; j < velikostSloupec; j++)
  51.         {
  52.             printf("%d ", pole2[i][j]);
  53.         }
  54.         cout << endl;
  55.     }
  56. }
  57.  
  58. //bublinkove razeni
  59. void bubbleSort(int od, int konec){
  60.     for(int i = od; i < konec; i++){
  61.         for(int j = od; j < konec - (i - od) - 1; j++){
  62.             if(pole[j+1] > pole[j]){
  63.                 int tmp = pole[j + 1];
  64.                 pole[j + 1] = pole[j];
  65.                 pole[j] = tmp;
  66.             }  
  67.         }  
  68.     }  
  69. }
  70.  
  71. void bubbleSortD(int od, int konec){
  72.     for(int i = od; i < konec; i++){
  73.         for(int j = od; j < konec - i - 1; j++){
  74.             if(novePole[j+1] > novePole[j]){
  75.                 int tmp = novePole[j + 1];
  76.                 novePole[j + 1] = novePole[j];
  77.                 novePole[j] = tmp;
  78.             }  
  79.         }  
  80.     }  
  81. }
  82.  
  83.  
  84. //bublinkove razeni pro dvourozmerne pole
  85. void bubbleSort2(int od, int konec, int sloupec){
  86.     for(int r = od; r < konec; r++) {
  87.     for(int i = 0; i < sloupec - 1; i++){
  88.         for(int j = 0; j < sloupec - i - 1; j++){
  89.             if(pole2[r][j+1] > pole2[r][j]){
  90.                 int tmp = pole2[r][j + 1];
  91.                 pole2[r][j+1] = pole2[r][j];
  92.                 pole2[r][j] = tmp;
  93.             }  
  94.         }  
  95.     }  
  96.     }
  97. }
  98.  
  99. //razeni vyberem
  100. void selectionSort(int od, int konec) {
  101.      for (int i = od; i < konec - 1; i++) {
  102.          int maxIndex = i;
  103.          for (int j = i + 1; j < konec; j++) {
  104.              if (pole[j] > pole[maxIndex]) maxIndex = j;
  105.          }
  106.          int tmp = pole[i];
  107.          pole[i] = pole[maxIndex];
  108.          pole[maxIndex] = tmp;
  109.      }
  110.  }
  111.  
  112. //razeni vyberem pro dvourozmerne pole
  113. void selectionSort2(int od, int konec, int sloupec) {
  114.     for(int r = od; r < konec; r++) {
  115.      for (int i = 0; i < sloupec - 1; i++) {
  116.          int maxIndex = i;
  117.          for (int j = i + 1; j < sloupec; j++) {
  118.              if (pole2[r][j] > pole2[r][maxIndex]) maxIndex = j;
  119.          }
  120.          int tmp = pole2[r][i];
  121.          pole2[r][i] = pole2[r][maxIndex];
  122.          pole2[r][maxIndex] = tmp;
  123.      }
  124.     }
  125.  }
  126.  
  127.  
  128. //razeni vkladanim
  129. void insertionSort(int od, int konec) {
  130.     for (int i = 0; i < konec - 1; i++) {
  131.         int j = i + 1;
  132.         int tmp = pole[j];
  133.         while (j > 0 && tmp > pole[j-1]) {
  134.             pole[j] = pole[j-1];
  135.             j--;
  136.         }
  137.         pole[j] = tmp;
  138.     }
  139. }
  140.  
  141. //razeni vkladanim pro dvourozmerne pole
  142. void insertionSort2(int od, int konec, int sloupec) {
  143.     for(int r = od; r < konec; r++) {
  144.     for (int i = 0; i < sloupec - 1; i++) {
  145.         int j = i + 1;
  146.         int tmp = pole2[r][j];
  147.         while (j > 0 && tmp > pole2[r][j-1]) {
  148.             pole2[r][j] = pole2[r][j-1];
  149.             j--;
  150.         }
  151.         pole2[r][j] = tmp;
  152.     }
  153.     }
  154. }
  155. void otoceniPole(int velikost)
  156. {
  157.     for(int i = 0; i < velikost; i++)
  158.     {
  159.         if(i < N/2)
  160.         {
  161.             char pom = pole[i];
  162.             pole[i] = pole[N - i - 1];
  163.             pole[N - i - 1] = pom;
  164.         }
  165.     }
  166. }
  167.  
  168.  
  169. int kolik_ms( LPFILETIME pred, LPFILETIME po )
  170. {
  171.         hyper pred64b = pred->dwHighDateTime;
  172.         pred64b = ( pred64b << 32 ) | pred->dwLowDateTime;
  173.         hyper po64b = po->dwHighDateTime;
  174.         po64b = ( po64b << 32 ) | po->dwLowDateTime;
  175.         // konverze 100ns -> 1ms
  176.         return ( int ) ( ( po64b - pred64b ) / 10000 );
  177. }
  178.  
  179. DWORD WINAPI vlaknoA( LPVOID r1)
  180. {
  181.     int *pom = (int*)r1;   
  182.     printf( "Startuje vlakno A\n" );
  183.     bubbleSort(pom[0],pom[1]);
  184.     return 0;
  185. }
  186.  
  187. void funkce(int a, int b)
  188. {
  189.    
  190.     for(int i = 0; i < S*2; i++)
  191.     {
  192.         if(i < S)
  193.             novePole[i] = pole2[a][i];
  194.         else
  195.             novePole[i] = pole2[b][i - S];
  196.     }
  197.     bubbleSortD(0,S*2);
  198. }
  199.  
  200. void tisk()
  201. {
  202.     for(int i = 0; i < S*2; i++)
  203.     {
  204.         printf("%d ", novePole[i]);
  205.     }
  206. }
  207.  
  208.  
  209. int main()
  210. {
  211.     //int pole[N];
  212.     FILETIME cas_pred, cas_po;
  213.     //---------------------------------------------------------------------------------
  214.     /*
  215.     naplnPole(N);
  216.     tiskPole(N);
  217.     GetSystemTimeAsFileTime( &cas_pred );
  218.     bubbleSort(0,N);
  219.     GetSystemTimeAsFileTime( &cas_po );
  220.     cout << endl;
  221.     tiskPole(N);
  222.     cout << "Cas byl: " << kolik_ms(&cas_pred, &cas_po) << "ms" << endl;
  223.     */
  224.     //--------------------------------------------------------------------------------------
  225.     /*
  226.     naplnPole(N);
  227.     HANDLE p1,p2;
  228.     int v1[] = {0,N/2};
  229.     int v2[] = {N/2,N};
  230.     GetSystemTimeAsFileTime( &cas_pred );
  231.     p1 = CreateThread( 0, 0, vlaknoA, v1, 0, 0 );
  232.     p2 = CreateThread( 0, 0, vlaknoA, v2, 0, 0 );
  233.     WaitForSingleObject( p1, INFINITE );
  234.     WaitForSingleObject( p2, INFINITE );
  235.     GetSystemTimeAsFileTime( &cas_po );
  236.     tiskPole(N);
  237.     cout << "Cas byl: " << kolik_ms(&cas_pred, &cas_po) << "ms" << endl;
  238.     */
  239.     //---------------------------------------------------------------------------------------
  240.     /*
  241.     HANDLE p1,p2,p3,p4;
  242.     naplnPole(N);
  243.     //tiskPole(N);
  244.     cout << endl;
  245.     int v1[] = {0,N/2};
  246.     int v2[] = {N/2,N};
  247.     GetSystemTimeAsFileTime( &cas_pred );
  248.     p1 = CreateThread( 0, 0, vlaknoA, v1, 0, 0 );
  249.     p2 = CreateThread( 0, 0, vlaknoA, v2, 0, 0 );
  250.     WaitForSingleObject( p1, INFINITE );
  251.     WaitForSingleObject( p2, INFINITE );
  252.     GetSystemTimeAsFileTime( &cas_po );
  253.     //tiskPole(N);
  254.     cout << "Cas byl: " << kolik_ms(&cas_pred, &cas_po) << "ms" << endl;
  255.     otoceniPole(N);
  256.     cout << endl;
  257.     cout << "Otacim pole\n";
  258.     //tiskPole(N);
  259.     */
  260.     //--------------------------------------------------------------------------------------
  261.     /*
  262.     cout << endl;
  263.     GetSystemTimeAsFileTime( &cas_pred );
  264.     p3 = CreateThread( 0, 0, vlaknoA, v1, 0, 0 );
  265.     p4 = CreateThread( 0, 0, vlaknoA, v2, 0, 0 );
  266.     WaitForSingleObject( p3, INFINITE );
  267.     WaitForSingleObject( p4, INFINITE );
  268.     GetSystemTimeAsFileTime( &cas_po );
  269.     cout << endl;
  270.     //tiskPole(N);
  271.     cout << "Cas byl: " << kolik_ms(&cas_pred, &cas_po) << "ms" << endl;
  272.     */
  273.  
  274.     //-------------------------------------------------------------------------------
  275.     //-------------------------------------------------------------------------------
  276.     //-------------------------------------------------------------------------------
  277.     /*
  278.     naplnPole2(R,S);
  279.     tiskPole2(R,S);
  280.     bubbleSort2(0,R,S);
  281.     cout << "\nSetrizene\n";
  282.     tiskPole2(R,S);
  283.     */
  284.     //--------------------------------------------------------------------------------
  285.     /*
  286.     naplnPole2(R,S);
  287.     GetSystemTimeAsFileTime( &cas_pred );
  288.     selectionSort2(0,R,S);
  289.     GetSystemTimeAsFileTime( &cas_po );
  290.     tiskPole2(R,S);
  291.     cout << "Cas srotovani: " << kolik_ms(&cas_pred, &cas_po) << "ms" << endl;
  292.     */
  293.     //--------------------------------------------------------------------------------
  294.     /*
  295.     HANDLE v[R];
  296.     naplnPole2(R,S);
  297.     GetSystemTimeAsFileTime( &cas_pred );
  298.     int par[] = {0,1};
  299.     int par1[] = {1,2};
  300.     int par2[] = {2,3};
  301.     int par3[] = {3,4};
  302.     int par4[] = {4,5};
  303.     int par5[] = {5,6};
  304.     int par6[] = {6,7};
  305.     int par7[] = {7,8};
  306.     int par8[] = {8,9};
  307.     int par9[] = {9,10};
  308.  
  309.     v[0] = CreateThread( 0, 0, vlaknoA, par, 0, 0 );
  310.     v[1] = CreateThread( 0, 0, vlaknoA, par1, 0, 0 );
  311.     v[2] = CreateThread( 0, 0, vlaknoA, par2, 0, 0 );
  312.     v[3] = CreateThread( 0, 0, vlaknoA, par3, 0, 0 );
  313.     v[4] = CreateThread( 0, 0, vlaknoA, par4, 0, 0 );
  314.     v[5] = CreateThread( 0, 0, vlaknoA, par5, 0, 0 );
  315.     v[6] = CreateThread( 0, 0, vlaknoA, par6, 0, 0 );
  316.     v[7] = CreateThread( 0, 0, vlaknoA, par7, 0, 0 );
  317.     v[8] = CreateThread( 0, 0, vlaknoA, par8, 0, 0 );
  318.     v[9] = CreateThread( 0, 0, vlaknoA, par9, 0, 0 );
  319.    
  320.     WaitForSingleObject( v[0], INFINITE );
  321.     WaitForSingleObject( v[1], INFINITE );
  322.     WaitForSingleObject( v[2], INFINITE );
  323.     WaitForSingleObject( v[3], INFINITE );
  324.     WaitForSingleObject( v[4], INFINITE );
  325.     WaitForSingleObject( v[5], INFINITE );
  326.     WaitForSingleObject( v[6], INFINITE );
  327.     WaitForSingleObject( v[7], INFINITE );
  328.     WaitForSingleObject( v[8], INFINITE );
  329.     WaitForSingleObject( v[9], INFINITE );
  330.    
  331.     GetSystemTimeAsFileTime( &cas_po );
  332.     tiskPole2(R,S);
  333.     cout << "Cas srotovani: " << kolik_ms(&cas_pred, &cas_po) << "ms" << endl;
  334.     cout << endl;
  335.     funkce(0,9);
  336.     tisk();
  337.  
  338.     */
  339.     //------------------------------------------------------------------------------------
  340.    
  341.  
  342.  
  343.     return 0;
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement