//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Name : Primzahlen.cpp + // Author : 25mmHg + // Version : 1.0.1 + // Copyright : free + // Description : Primzahlen + // Date : 120930 + //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #include #include #include using namespace std; //+++++++++++++++++++++++++++ //Prototypen Unterprogramme + //+++++++++++++++++++++++++++ int Fortsetzen(); //+++++++++++++++ //Hauptprogramm + //+++++++++++++++ int main(){ while(1){ //endlos bis Abbruch bei int Fortsetzen() cout << endl; cout << "Dieses Programm berechnet Primzahlen und deren Abstand voneinander. \n"; cout << "Die Abstände zwischen den Primzahlen werden in folgender Datei gespeichert: \n"; cout << "c:/temp/PRIMraw8bit.dat \n \n"; //++++++++++++++++++++++++++++++++ //Eingabeschleife für neue Werte + //++++++++++++++++++++++++++++++++ unsigned long maximal, minimal; do { cout << "Bitte Minimalwert eingeben: \n"; cin >> minimal; cout << "Bitte Maximalwert eingeben: \n"; cin >> maximal; if (minimal>=maximal){ //Test auf falsche Eingabe cout << "Falsche Eingabe! \a \n"; cout <<"Sie haben " << minimal <<" und " << maximal << " eingegeben. \n"; if (!Fortsetzen())return 0; //Abbruchbedingung } } while (minimal>=maximal); //++++++++++++++++++++++++++++++++++++++++++++++++++++ //Berechnung Primzahlen zwischen minimal und maximal + //++++++++++++++++++++++++++++++++++++++++++++++++++++ ofstream myFile ("c:/temp/PRIMraw8bit.dat", ios::out | ios::binary); //Sreamobjekt @ Datei binär!! da sonst A0 (LF) um 0D (CR) ergänzt wird if (!myFile)return 0; //Abbruch wenn kein Dateizugriff möglich cout << endl; //Leerzeile unsigned int maxdelta=0; unsigned long oldi=minimal; if(!(minimal%2))minimal+=1; for (unsigned long i=minimal; i<=maximal; i+=2){ //Hochzählen mögliche Primzahl i bool prim=0; for (unsigned long j=3; j*j<=i; j+=2){ //Hochzählen von Teiler j bis sqrt i prim=i%j; //Primzahltest if (!prim) break; } if(prim){ unsigned long k=(i-oldi); //Bestimmung Primzahlzwischenraum oldi=i; //update oldi unsigned char delta; delta=k; if (k>maxdelta) {cout << "\a"; maxdelta=k;} //update von maxdelta cout << i <<" "<< maxdelta <<" "<< k <<" |"; //Ausgabe i,maxdelta, k (wert gleich delta) for (; k>1; k>>=1) cout << "***"; //Balkenausgabe von delta cout << endl; myFile << delta; //Schreiben in Datei } } //+++++++++++++++++++++++++ //Ausgabe Zusammenfassung + //+++++++++++++++++++++++++ cout << "sind Primzahlen von " << minimal << " bis " << maximal << endl; cout << "Der groesste Abstand zwischen zwei Primzahlen ist " << maxdelta << endl; cout << "Viele Gruesse von Johannes (25mmHg)" << endl; myFile.close(); //Datei schließen und für andere freigeben if (!Fortsetzen()) return 0; //Abbruchbedingung } return 0; } //+++++++++++++++++++++++++++ //Definition Unterprogramme + //+++++++++++++++++++++++++++ int Fortsetzen(){ cout <<"Neue Eingabe? ja/nein" << endl; string a; cin >> a; return (a=="ja"); }