Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Prime.cpp : Diese Datei enthält die Funktion "main". Hier beginnt und endet die Ausführung des Programms.
- //#include <Windows.h>
- #include <stdio.h>
- #include <iostream>
- #include <time.h>
- #include <thread>
- #include <vector>
- #include <cstdlib>
- #include <string>
- #include <string.h>
- #include <fstream>
- //#include <mutex>
- //#include <chrono>
- int treffer[1000000];
- double istime = 0.0;
- int arraylastvaltest(int array[])
- {
- int i;
- for (i = 0; i < sizeof(array) / sizeof(int) - 1; i++)
- {
- if (array[i] == NULL)
- {
- break;
- }
- }
- return i;
- }
- int arraylastval()
- {
- int i;
- for (i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
- {
- if (treffer[i] == NULL)
- {
- break;
- }
- }
- return i;
- }
- void sort()
- {
- int sortirentemp[10000];
- for (int i = 0; i < 10000; i++)
- {
- for (int i = 0; i < 10000; i++)
- {
- if (i == treffer[i])
- {
- sortirentemp[arraylastvaltest(sortirentemp)] = treffer[i];
- }
- }
- }
- for (int i = 0; i < arraylastvaltest(sortirentemp); i++)
- {
- treffer[i] = sortirentemp[i];
- }
- /* //int sortirentemp[1000000];
- int maxval = arraylastval();
- int minval = 0;
- for (int i = 0; i < maxval; i++)
- {
- for (int i = 0; i < 1000000 || minval >= maxval || maxval != 0; i++)
- {
- if (treffer[i] < maxval)
- {
- maxval = treffer[i];
- }
- if (maxval <= 2)
- {
- break;
- }
- }
- std::cout << maxval << std::endl;
- //sortirentemp[i] = maxval;
- minval = maxval;
- }*/
- }
- void Prime(int minprime, int maxprime)
- {
- double time1 = 0.0, tstart;
- tstart = clock();
- for (int zahl = minprime; zahl < maxprime; zahl++)
- {
- bool isPrime = 1;
- int teiler = 2;
- while (teiler < zahl)
- {
- if (zahl % teiler == 0)
- {
- isPrime = 0;
- break;
- }
- teiler++;
- }
- if (isPrime != 0)
- {
- treffer[arraylastval()] = zahl;
- }
- }
- //std::cout << " tstart = " << tstart << " sec." << " time1 = " << clock() << std::endl;
- time1 += clock() - tstart; // end
- time1 = time1 / CLOCKS_PER_SEC;
- istime += time1;
- /*if (true == false)
- {
- printf("Alle Treffer: ");
- for (int i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
- {
- if (treffer[i] == NULL)
- {
- break;
- }
- else
- {
- if (treffer[i] != 2)
- {
- std::cout << ", ";
- }
- }
- std::cout << treffer[i];
- }
- std::cout << " minprime = " << minprime << " maxprime = " << maxprime << std::endl;
- std::cout << " time = " << time1 << " sec." << std::endl;
- }*/
- }
- void thrads(int minprime, int maxprime, int threads)
- {
- int threadSpread = maxprime / threads;
- int newEnd = minprime + threadSpread - 1;
- std::vector<std::thread> ThreadVector;
- for (int i = 0; i < threads; i++)
- {
- //std::thread t(Prime,minprime, newEnd);
- //t.join();
- ThreadVector.emplace_back(Prime, minprime, newEnd);
- minprime += threadSpread;
- newEnd += threadSpread;
- }
- for (auto& t : ThreadVector)
- {
- t.join();
- }
- /*pthread_t threads[8];
- for (int i = 0; i < threads; i++)
- {
- std::thread t(Prime,minprime, newEnd);
- t.join();
- //t.detach();
- minprime += threadSpread;
- newEnd += threadSpread;
- }*/
- }
- int main(int argc, char* argv[])
- {
- int minprime = 2;
- int maxprime = 999999;
- int threads = 8;
- for (int i = 0; i < argc; i++)
- {
- // Ausgabe aller Parameter
- std::cout << i << " \"" << argv[i] << "\"" << std::endl;
- // Auf speziellen Parameter prüfen
- if (strcmp(argv[i], "-help") == 0)
- {
- std::cout << "Beispiel Kommando: -minprime 2 -maxprime 200000 -threads 8" << std::endl;
- return EXIT_SUCCESS;
- }
- else if (strcmp(argv[i], "-debug") == 0)
- {
- std::cout << "\n\nDebug Modus gesetzt!" << std::endl;
- return EXIT_SUCCESS;
- }
- else if (strcmp(argv[i], "-minprime") == 0)
- {
- minprime = strtol(argv[i + 1], NULL, 10);
- }
- else if (strcmp(argv[i], "-maxprime") == 0)
- {
- maxprime = strtol(argv[i + 1], NULL, 10);
- }
- else if (strcmp(argv[i], "-threads") == 0)
- {
- threads = strtol(argv[i + 1], NULL, 10);
- }
- else
- {
- std::cout << "Beispiel Kommando: -minprime 2 -maxprime 200000 -threads 8" << std::endl;
- }
- }
- //std::cin.get();
- //return EXIT_SUCCESS;
- std::cout << "minprime = " << minprime << " maxprime = " << maxprime << " threads = " << threads << std::endl;
- if (maxprime >= 1000000)
- {
- std::cout << "Deine gewählte Zahl" << maxprime << "überschreitet das Maximum von 1000000." << std::endl;
- return EXIT_SUCCESS;
- }
- else if (minprime > maxprime)
- {
- std::cout << "Der Minimalwert darf nicht größer sein als der Maximalwert." << std::endl;
- return EXIT_SUCCESS;
- }
- else if (maxprime < 2)
- {
- std::cout << "Der Maximalwert darf unter 2 liegen." << std::endl;
- return EXIT_SUCCESS;
- }
- else if (threads == 0)
- {
- std::cout << "Die Anzahl der Threads muss mindestens bei 1 festgelegt werden." << std::endl;
- return EXIT_SUCCESS;
- }
- else if (minprime < 2)
- {
- std::cout << "Der Minimalwert wurde auf 2 festgelegt." << std::endl;
- minprime = 2;
- }
- double time1 = 0.0, tstart;
- tstart = clock(); // start
- thrads(minprime, maxprime, threads);
- std::cout << "GesamtzeitThreads = " << istime << " sec." << std::endl;
- time1 = clock() - tstart; // end
- time1 += time1 / CLOCKS_PER_SEC; // rescale to seconds
- std::cout << "Gesamtzeit = " << time1 << " sec." << std::endl;
- //sort(); //Sortieren
- char antwort;
- std::cout << "Möchtest du alle Treffer auflisten? Y/n" << std::endl;
- std::cin >> antwort;
- if (antwort == 'y' || antwort == 'Y')
- {
- printf("Alle Treffer: ");
- for (int i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
- {
- if (treffer[i] == NULL)
- {
- break;
- }
- else
- {
- if (treffer[i] != 2)
- {
- std::cout << ", ";
- }
- }
- std::cout << treffer[i];
- }
- }
- std::cout << "Möchtest du alle Treffer in einer Text Datei abspeichern? Y/n" << std::endl;
- std::cin >> antwort;
- if (antwort == 'y' || antwort == 'Y')
- {
- std::ofstream schreiben;
- std::ifstream File("save.txt");
- if (!File.is_open())
- {
- //Sortieren
- schreiben.open("save.txt");
- schreiben << "Alle Treffer: ";
- for (int i = 0; i < sizeof(treffer) / sizeof(int) - 1; i++)
- {
- if (treffer[i] == NULL)
- {
- break;
- }
- else
- {
- if (treffer[i] != 2)
- {
- schreiben << ", ";
- }
- }
- schreiben << treffer[i];
- }
- schreiben.close();
- }
- //fStream
- }
- //Prime(200000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement