Advertisement
JanisPlayer

Prime

Jan 11th, 2020
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.37 KB | None | 0 0
  1. // Prime.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.
  2. //#include <Windows.h>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <time.h>
  6. #include <thread>
  7. #include <vector>
  8. #include <cstdlib>
  9. #include <string>
  10. #include <string.h>
  11. #include <fstream>
  12. //#include <mutex>
  13. //#include <chrono>
  14. int treffer[1000000];
  15. double istime = 0.0;
  16.  
  17. int arraylastvaltest(int array[])
  18. {
  19. int i;
  20. for (i = 0; i < sizeof(array) / sizeof(int) - 1; i++)
  21. {
  22. if (array[i] == NULL)
  23. {
  24. break;
  25. }
  26. }
  27. return i;
  28. }
  29.  
  30. int arraylastval()
  31. {
  32. int i;
  33. for (i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
  34. {
  35. if (treffer[i] == NULL)
  36. {
  37. break;
  38. }
  39. }
  40. return i;
  41. }
  42.  
  43. void sort()
  44. {
  45.  
  46. int sortirentemp[10000];
  47. for (int i = 0; i < 10000; i++)
  48. {
  49. for (int i = 0; i < 10000; i++)
  50. {
  51. if (i == treffer[i])
  52. {
  53. sortirentemp[arraylastvaltest(sortirentemp)] = treffer[i];
  54. }
  55. }
  56. }
  57. for (int i = 0; i < arraylastvaltest(sortirentemp); i++)
  58. {
  59. treffer[i] = sortirentemp[i];
  60. }
  61. /* //int sortirentemp[1000000];
  62. int maxval = arraylastval();
  63. int minval = 0;
  64. for (int i = 0; i < maxval; i++)
  65. {
  66. for (int i = 0; i < 1000000 || minval >= maxval || maxval != 0; i++)
  67. {
  68. if (treffer[i] < maxval)
  69. {
  70. maxval = treffer[i];
  71. }
  72. if (maxval <= 2)
  73. {
  74. break;
  75. }
  76. }
  77. std::cout << maxval << std::endl;
  78. //sortirentemp[i] = maxval;
  79. minval = maxval;
  80. }*/
  81. }
  82.  
  83. void Prime(int minprime, int maxprime)
  84. {
  85. double time1 = 0.0, tstart;
  86. tstart = clock();
  87.  
  88. for (int zahl = minprime; zahl < maxprime; zahl++)
  89. {
  90. bool isPrime = 1;
  91. int teiler = 2;
  92. while (teiler < zahl)
  93. {
  94. if (zahl % teiler == 0)
  95. {
  96. isPrime = 0;
  97. break;
  98. }
  99. teiler++;
  100. }
  101. if (isPrime != 0)
  102. {
  103. treffer[arraylastval()] = zahl;
  104. }
  105. }
  106.  
  107. //std::cout << " tstart = " << tstart << " sec." << " time1 = " << clock() << std::endl;
  108.  
  109. time1 += clock() - tstart; // end
  110. time1 = time1 / CLOCKS_PER_SEC;
  111. istime += time1;
  112. /*if (true == false)
  113. {
  114. printf("Alle Treffer: ");
  115.  
  116. for (int i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
  117. {
  118. if (treffer[i] == NULL)
  119. {
  120. break;
  121. }
  122. else
  123. {
  124. if (treffer[i] != 2)
  125. {
  126. std::cout << ", ";
  127. }
  128. }
  129. std::cout << treffer[i];
  130. }
  131.  
  132. std::cout << " minprime = " << minprime << " maxprime = " << maxprime << std::endl;
  133. std::cout << " time = " << time1 << " sec." << std::endl;
  134. }*/
  135. }
  136.  
  137. void thrads(int minprime, int maxprime, int threads)
  138. {
  139. int threadSpread = maxprime / threads;
  140. int newEnd = minprime + threadSpread - 1;
  141.  
  142. std::vector<std::thread> ThreadVector;
  143.  
  144. for (int i = 0; i < threads; i++)
  145. {
  146. //std::thread t(Prime,minprime, newEnd);
  147. //t.join();
  148.  
  149. ThreadVector.emplace_back(Prime, minprime, newEnd);
  150. minprime += threadSpread;
  151. newEnd += threadSpread;
  152. }
  153.  
  154. for (auto& t : ThreadVector)
  155. {
  156. t.join();
  157. }
  158.  
  159. /*pthread_t threads[8];
  160. for (int i = 0; i < threads; i++)
  161. {
  162. std::thread t(Prime,minprime, newEnd);
  163. t.join();
  164. //t.detach();
  165. minprime += threadSpread;
  166. newEnd += threadSpread;
  167. }*/
  168. }
  169.  
  170.  
  171. int main(int argc, char* argv[])
  172. {
  173. int minprime = 2;
  174. int maxprime = 999999;
  175. int threads = 8;
  176. for (int i = 0; i < argc; i++)
  177. {
  178. // Ausgabe aller Parameter
  179. std::cout << i << " \"" << argv[i] << "\"" << std::endl;
  180. // Auf speziellen Parameter prüfen
  181. if (strcmp(argv[i], "-help") == 0)
  182. {
  183. std::cout << "Beispiel Kommando: -minprime 2 -maxprime 200000 -threads 8" << std::endl;
  184. return EXIT_SUCCESS;
  185. }
  186. else if (strcmp(argv[i], "-debug") == 0)
  187. {
  188. std::cout << "\n\nDebug Modus gesetzt!" << std::endl;
  189. return EXIT_SUCCESS;
  190. }
  191. else if (strcmp(argv[i], "-minprime") == 0)
  192. {
  193. minprime = strtol(argv[i + 1], NULL, 10);
  194. }
  195. else if (strcmp(argv[i], "-maxprime") == 0)
  196. {
  197. maxprime = strtol(argv[i + 1], NULL, 10);
  198. }
  199. else if (strcmp(argv[i], "-threads") == 0)
  200. {
  201. threads = strtol(argv[i + 1], NULL, 10);
  202. }
  203. else
  204. {
  205. std::cout << "Beispiel Kommando: -minprime 2 -maxprime 200000 -threads 8" << std::endl;
  206. }
  207.  
  208. }
  209.  
  210. //std::cin.get();
  211. //return EXIT_SUCCESS;
  212.  
  213. std::cout << "minprime = " << minprime << " maxprime = " << maxprime << " threads = " << threads << std::endl;
  214.  
  215. if (maxprime >= 1000000)
  216. {
  217. std::cout << "Deine gewählte Zahl" << maxprime << "überschreitet das Maximum von 1000000." << std::endl;
  218. return EXIT_SUCCESS;
  219. }
  220. else if (minprime > maxprime)
  221. {
  222. std::cout << "Der Minimalwert darf nicht größer sein als der Maximalwert." << std::endl;
  223. return EXIT_SUCCESS;
  224. }
  225. else if (maxprime < 2)
  226. {
  227. std::cout << "Der Maximalwert darf unter 2 liegen." << std::endl;
  228. return EXIT_SUCCESS;
  229. }
  230. else if (threads == 0)
  231. {
  232. std::cout << "Die Anzahl der Threads muss mindestens bei 1 festgelegt werden." << std::endl;
  233. return EXIT_SUCCESS;
  234. }
  235. else if (minprime < 2)
  236. {
  237. std::cout << "Der Minimalwert wurde auf 2 festgelegt." << std::endl;
  238. minprime = 2;
  239. }
  240.  
  241. double time1 = 0.0, tstart;
  242. tstart = clock(); // start
  243. thrads(minprime, maxprime, threads);
  244. std::cout << "GesamtzeitThreads = " << istime << " sec." << std::endl;
  245. time1 = clock() - tstart; // end
  246. time1 += time1 / CLOCKS_PER_SEC; // rescale to seconds
  247. std::cout << "Gesamtzeit = " << time1 << " sec." << std::endl;
  248.  
  249. //sort(); //Sortieren
  250.  
  251. char antwort;
  252. std::cout << "Möchtest du alle Treffer auflisten? Y/n" << std::endl;
  253. std::cin >> antwort;
  254. if (antwort == 'y' || antwort == 'Y')
  255. {
  256. printf("Alle Treffer: ");
  257.  
  258. for (int i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
  259. {
  260. if (treffer[i] == NULL)
  261. {
  262. break;
  263. }
  264. else
  265. {
  266. if (treffer[i] != 2)
  267. {
  268. std::cout << ", ";
  269. }
  270. }
  271. std::cout << treffer[i];
  272. }
  273. }
  274.  
  275. std::cout << "Möchtest du alle Treffer in einer Text Datei abspeichern? Y/n" << std::endl;
  276. std::cin >> antwort;
  277. if (antwort == 'y' || antwort == 'Y')
  278. {
  279. std::ofstream schreiben;
  280. std::ifstream File("save.txt");
  281. if (!File.is_open())
  282. {
  283. //Sortieren
  284. schreiben.open("save.txt");
  285. schreiben << "Alle Treffer: ";
  286. for (int i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
  287. {
  288. if (treffer[i] == NULL)
  289. {
  290. break;
  291. }
  292. else
  293. {
  294. if (treffer[i] != 2)
  295. {
  296. schreiben << ", ";
  297. }
  298. }
  299. schreiben << treffer[i];
  300. }
  301. schreiben.close();
  302. }
  303. //fStream
  304. }
  305. //Prime(200000);
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement