Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <iomanip> // Für die Füllenden Nullen
- #include <time.h> // Für Messung von Rechenzeit!!
- #include <fstream>
- using namespace std;
- int programm();
- // long long isPrim_alt(long long zahl); alte Funktion
- long long isPrim(long long zahl);
- void searchPrim(long long start, long long ziel, int flag1, int flag2, long long zaehler=1);
- int main()
- {
- programm();
- system("pause");
- return 0;
- }
- void searchPrim(long long start,long long ziel, int flag1, int flag2, long long zaehler){
- float time1=0.0f, time2=0.0f, tstart1, tstart2; // Zeitmessungsvariablen
- long long count = zaehler;
- if ((ziel-start) > 20000000) cout << "Der Zahlenraum ist zu gross!" << endl; // anpassbar, je nachdem wie viel Zeitdauer man dem User zumuten kann ;) Der Zahlenraum 1 - 1Mio dauert ca. 3 1/2 h ...
- else {
- ofstream primzahlen_s;
- if (flag1) {
- if (flag2) {
- primzahlen_s.open("Primzahlen.txt", ios::out /*,ios::_Openprot*/);
- }
- else {
- primzahlen_s.open("Primzahlen.txt", ios::out | ios::app /*,ios::_Openprot*/);
- }
- }
- if (!primzahlen_s) {
- cerr << "Fehler beim Öffnen der Datei!";
- }
- else {
- tstart1 = clock();
- tstart2 = clock(); // Zeitmessugn Start
- for (long long i=start; i<ziel; i++){
- time2 = 0.0f;
- if (isPrim(i)) {
- if (count==1){
- cout << count << ".\t" << i << "\t";
- //primzahlen_s << count << ".\t" << i << "\t";
- primzahlen_s << i;
- }
- else {
- cout << endl << count << ".\t" << i << "\t";
- //primzahlen_s << endl << count << ".\t" << i << "\t";
- primzahlen_s << endl << i;
- }
- count++;
- time2 += clock() - tstart2; // Zeitmessung Ende
- time2 = (time2/CLOCKS_PER_SEC)*1000; // Umrechnung in MilliSekunden
- if (time2<1){
- cout << "<1 ms";
- //primzahlen_s << "<1 ms";
- }
- else {
- cout << " " << time2 << " ms";
- //primzahlen_s << " " << time2 << " ms";
- }
- tstart2 = clock(); // Zeitmessugn Start
- }
- }
- time1 += clock() - tstart1; // Zeitmessung Ende
- time1 = (time1/CLOCKS_PER_SEC)*1000; // Umrechnung in MilliSekunden
- int std=0,min=0,sec=0,msec;
- msec = (int)time1;
- while ( msec >= 1000 ){
- msec-=1000;
- sec++;
- }
- while ( sec >= 60 ){
- sec-=60;
- min++;
- }
- while ( min >= 60 ){
- min-=60;
- std++;
- }
- cout << endl << endl << "Gesamtzeit der Primzahlensuche von " << start << " bis " << ziel << ": " << setfill('0') << setw(2) << std << "h:" << setfill('0') << setw(2) << min << "min:" << setfill('0') << setw(2) << sec << "s:" << msec << "ms" << endl;
- }
- primzahlen_s.close();
- }
- }
- /*long long isPrim_alt(long long zahl){ Alte, langsame Funktion.
- for (long long double i=2; i<(zahl/2); i++){ die neue Funktion (unten) prüft zunächst die Teilbarkeit durch 2
- if (!(zahl%i)) return 0; und lässt im Erfolgsfalle jeden zweiten Teiler weg.
- }
- return 1;
- }*/
- long long isPrim(long long zahl){
- if (!(zahl%2)) return 0;
- else {
- for (long long double i=3; i<(zahl/2); i=i+2){
- if (!(zahl%i)) return 0;
- }
- return 1;
- }
- }
- int programm(){
- char frage1[80],frage2[80],frage3[80],buffer_a[1000],buffer_b[1000],buffer[1000];
- long long start,ziel,zaehler;
- int flag1, flag2;
- do {
- system("cls");
- cout << "\t\tPrimzahlengenerator v1.1 (c) by Grownz" << endl << endl << endl;
- ifstream primzahlen_l;
- primzahlen_l.open("Primzahlen.txt", ios::in);
- if (primzahlen_l) {
- do{
- primzahlen_l.close();
- ifstream primzahlen_l;
- primzahlen_l.open("Primzahlen.txt", ios::in);
- system("cls");
- cout << "\t\tPrimzahlensucher v1.1 (c) by Severus" << endl << endl << endl;
- cout << "Primzahlen.txt vorhanden!" << endl << endl;
- zaehler=0;
- do {
- zaehler++;
- if (!(zaehler%2)) {
- primzahlen_l.getline(buffer_a,1000,'\n');
- //cout << "Letzte Zeile: " << buffer_a << " Counter: " << zaehler << endl;
- }
- else {
- primzahlen_l.getline(buffer_b,1000,'\n');
- //cout << "Letzte Zeile: " << buffer_b << " Counter: " << zaehler << endl;
- }
- } while (primzahlen_l);
- if (!(zaehler%2)) {
- cout << "Letzte gefundene Primzahl: " << buffer_b << "\tNummer: " << zaehler << endl;
- for (int i=0;i<1000;i++){
- buffer[i]=buffer_b[i];
- }
- }
- else {
- cout << "Letzte gefundene Primzahl: " << buffer_a << "\tNummer: " << zaehler << endl;
- for (int i=0;i<1000;i++){
- buffer[i]=buffer_a[i];
- }
- }
- primzahlen_l.close();
- long zw_zaehler=atol(buffer);
- cout << endl << "Soll ab Primzahl Nr. " << zaehler << ", Wert " << zw_zaehler << " weiter gemacht werden? [Y(J)/N]";
- cin.getline(frage3,80);
- if ((frage3[0]=='Y') || (frage3[0]=='y') || (frage3[0]=='J') || (frage3[0]=='j')){
- long zahlen;
- cout << endl << endl << "Wie viel weitere Zahlen sollen ueberprueft werden?" << endl;
- cin >> zahlen;
- cout << endl << endl;
- searchPrim(zw_zaehler, (zw_zaehler+zahlen), true, false, zaehler);
- system("pause");
- return 0;
- }
- else if ((frage3[0]=='N') || (frage3[0]=='n')){
- flag1=0;
- cout << endl <<"Die Suche nach Primzahlen wird nicht unmittelbar fortgesetzt!" << endl << endl;
- system("pause");
- }
- else {
- cerr << endl <<"Fehleingabe! Bitte neu eingeben!" << endl<< endl;
- system("pause");
- //exit(1);
- }
- } while ((frage3[0]!='Y') && (frage3[0]!='y') && (frage3[0]!='J') && (frage3[0]!='j') && (frage3[0]!='N') && (frage3[0]!='n'));
- }
- //else
- cout << "Sollen die Daten gespeichert werden? [Y(J)/N]";
- cin.getline(frage1,80);
- if ((frage1[0]=='Y') || (frage1[0]=='y') || (frage1[0]=='J') || (frage1[0]=='j')){
- flag1=1;
- cout << endl << "Ergebnisdaten werden in der Datei Primzahlen.txt\nim Programmverzeichnis gespeichert!" << endl << endl;
- system("pause");
- }
- else if ((frage1[0]=='N') || (frage1[0]=='n')){
- flag1=0;
- cout << endl <<"Ergebnisdaten werden nicht gespeichert!" << endl << endl;
- system("pause");
- }
- else {
- cerr << endl <<"Fehleingabe! Bitte neu eingeben!" << endl<< endl;
- system("pause");
- //exit(1);
- }
- } while ((frage1[0]!='Y') && (frage1[0]!='y') && (frage1[0]!='J') && (frage1[0]!='j') && (frage1[0]!='N') && (frage1[0]!='n'));
- if (flag1) {
- do {
- system("cls");
- cout << "\t\tPrimzahlengenerator v1.1 (c) by Severus" << endl << endl << endl;
- cout << "Soll die Datei ueberschrieben werden (Y) oder fortgesetzt werden (N)?" << endl << "WARNUNG!! Alte Daten gehen beim ueberschreiben unwiderruflich verloren!" << endl;
- cin.getline(frage2,80);
- if ((frage2[0]=='Y') || (frage2[0]=='y') || (frage2[0]=='J') || (frage2[0]=='j')){
- flag2=1;
- cout << endl << "Ergebnisdaten werden neu in der Datei Primzahlen.txt gespeichert!" << endl << endl;
- system("pause");
- }
- else if ((frage2[0]=='N') || (frage2[0]=='n')){
- flag2=0;
- cout << endl <<"Ergebnisdaten werden an bestehende angehängt!" << endl << endl;
- system("pause");
- }
- else {
- cerr << endl <<"Fehleingabe! Bitte neu eingeben!" << endl<< endl;
- system("pause");
- //exit(1);
- }
- } while ((frage2[0]!='Y') && (frage2[0]!='y') && (frage2[0]!='J') && (frage2[0]!='j') && (frage2[0]!='N') && (frage2[0]!='n'));
- }
- cout << endl << endl << "In welchem Zahlenraum sollen Primzahlen gesucht werden?" << endl << "Start: \t";
- cin >> start;
- if (start==1) start++;
- cout << "Ziel: \t";
- cin >> ziel;
- cout << endl << endl;
- searchPrim(start, ziel, flag1, flag2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement