JanisPlayer

Prime

Jan 11th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 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. }
Add Comment
Please, Sign In to add comment