Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. #include <iostream>
  2. #include <chrono>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. void sequence();
  10.  
  11. void parallel();
  12.  
  13. void printResult(vector<string> &vector);
  14.  
  15. void menu();
  16.  
  17. int getSum(vector<int> &number, int sum);
  18.  
  19. int value_async;
  20. clock_t startTimeParallel;
  21. clock_t endTimeParallel;
  22. vector<string> resultsParallel;
  23.  
  24. int value;
  25. clock_t startTime;
  26. clock_t endTime;
  27. vector<string> results;
  28.  
  29. int main() {
  30. cout << endl << "Program start" << endl;
  31. startTime = clock();
  32. sequence();
  33. endTime = clock();
  34. cout << endl << "Sekwencyjny Wynik: " << value << " Czas: "
  35. << float(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
  36.  
  37. startTimeParallel = clock();
  38. parallel();
  39. endTimeParallel = clock();
  40. cout << endl << "Rownolegly Wynik: " << value_async << " Czas: "
  41. << float(endTimeParallel - startTimeParallel) / CLOCKS_PER_SEC << "s" << endl;
  42.  
  43. menu();
  44. return 0;
  45. }
  46.  
  47. void menu() {
  48. string input;
  49. while (input != "0") {
  50. cout << endl << endl << "Wyniki" << endl;
  51. cout << "1 - Wydrukuj wyniki sekwencyjne" << endl;
  52. cout << "2 - Wydrukuj wyniki rownolegle" << endl;
  53. cout << "0 - Wyjdz" << endl;
  54. cin >> input;
  55. if (input == "1")
  56. printResult(results);
  57. else if (input == "2")
  58. printResult(resultsParallel);
  59. else if (input == "0")
  60. break;
  61. else
  62. cout << endl << "Zly wybor" << endl;
  63. }
  64. }
  65.  
  66. void printResult(vector<string> &vector) {
  67. for (const auto &item : vector) {
  68. cout << item << endl;
  69. }
  70. }
  71.  
  72. unsigned int getInt(vector<int> &vector, int startIndex, int endIndex) {
  73. unsigned int result = 0;
  74. for (int i = startIndex; i <= endIndex; ++i) {
  75. result = result * 10 + vector[i];
  76. }
  77. return result;
  78. }
  79.  
  80. int getSum(vector<int> &number, int sum) {
  81. for (int i = 0; i < 9; i++) {
  82. unsigned int firstINumber = getInt(number, 0, i);
  83. if (firstINumber == 0) {
  84. continue;
  85. }
  86. unsigned int secondINumber = getInt(number, i + 1, 9);
  87. if (secondINumber == 0) {
  88. continue;
  89. }
  90. for (int j = 0; j < 9; j++) {
  91. if (i == j) {
  92. continue;
  93. }
  94. unsigned int firstNumber, secondNumber, thirdNumber;
  95. firstNumber = firstINumber;
  96. secondNumber = getInt(number, i + 1, j);
  97. thirdNumber = getInt(number, j + 1, 9);
  98. if (thirdNumber == 0 || secondNumber == 0 || firstNumber > 100) {
  99. continue;
  100. }
  101. try {
  102. if ((float) firstNumber + (float) ((float) secondNumber / (float) thirdNumber) == 100.0) {
  103. sum += 2;
  104. }
  105. }
  106. catch (exception &e) {
  107. continue;
  108. }
  109. }
  110. }
  111. return sum;
  112. }
  113.  
  114. void sequence() {
  115. std::vector<int> src = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  116. vector<vector<int>> vectorTab;
  117. vectorTab.push_back(src);
  118. while (next_permutation(src.begin(), src.end())) {
  119. vectorTab.push_back(src);
  120. }
  121. value = 0;
  122. for (auto &i : vectorTab) {
  123. vector<int> &vector = i;
  124. int sum = 0;
  125. sum = getSum(vector, sum);
  126. value += sum;
  127. }
  128. }
  129.  
  130. void parallel() {
  131. std::vector<int> src = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  132. vector<vector<int>> vectorTab;
  133. vectorTab.push_back(src);
  134. while (next_permutation(src.begin(), src.end())) {
  135. vectorTab.push_back(src);
  136. }
  137. value_async = 0;
  138.  
  139. #pragma omp parallel for reduction(+:value_async)
  140. for (auto &i : vectorTab) {
  141. #pragma omp parallel for
  142. vector<int> &vector = i;
  143. int sum = 0;
  144. sum = getSum(vector, sum);
  145. value_async += sum;
  146. }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement