C++ Primzahlengenerator

  • Hallo Community.

    Um C++ zu üben habe ich ein Programm geschrieben, Wass alle Primzahlen bis zu dem eingegebenen Limit berechnet
    und dann in eine Text-Datei schreibt.

    Quellcode bekommt ihr natürlich auch ;)

    Quellcode

    Eine vorkompilierte Exe liegt bei ;)

  • Hallo Community.

    Um C++ zu üben habe ich ein Programm geschrieben, Wass alle Primzahlen bis zu dem eingegebenen Limit berechnet
    und dann in eine Text-Datei schreibt.

    Quellcode bekommt ihr natürlich auch ;)

    Quellcode

    Eine vorkompilierte Exe liegt bei ;)

    hehe genau auf so ein Bsp. bin ich voher in nem Cpp TuT gestoßen. schöne Sache :thumbup:

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Super 8)

    Appropros Primzahlen ist der Wettbewerb eigenlch noch in Bearbeitung oder vergessen ?


    Mathias G. geht es doch nicht so gut, deswegen gibt es keine Auswertung.

    Ich werd mir den Quelltext gleich mal angucken.
    Edit: Da gibts nichts zu meckern :thumbup:

    mfg Ubuntu

  • Sieht gut aus, ich lerne auch gerade fleißig C++, mit meinem Projekt gibt es einige Probleme, zum Beispiel dass er die Class String nicht findet, obwohl #include <string> drinsteht (alle varianten ausprobiert)
    Angefangen habe ich auch mit sowas, das System("Pause") benutze ich auch immer, aber der Text der davon kommt lässt sich mit system("pause >nul"); wegschaffen

    Einmal editiert, zuletzt von TheShadowAE (13. Juni 2010 um 08:45)

  • Ja, eigentlich schon. Ich hab auch schon nachgeguckt ob das durch die Includes deklariert wird, es steht auch drin, aber wenn ich es dann benutze kommt `string does not name a type'
    EDIT:
    VC++ findet es, ich glaube langsam das dev c++ einen Fehler hat.

    EDIT:
    Habe es hingekriegt.

    EDIT:
    Ich wusste gar nicht, dass C++ so schnell ist, ich hab deine Funktion ein wenig verschnellert (der muss nur einmal auf gerade Zahlen beim prüfen achten, die 2) und der kann Primzahlen von 3 bis 1000 in weniger als einer Millisekunde berechenen (und in der Datei speichern und anzeigen)

    EDIT:
    Viele Edits :D
    Mein Timer hat nicht funktioniert, weiß ich nicht ob es stimmt

    EDIT:
    Jetzt klappt er, 1-10000, 46ms, 1-1000, wirklich 0 ms

    EDIT:
    Total im Zeitmessfieber
    20 MB pro Sekunde kann c++ ca. schreiben

    7 Mal editiert, zuletzt von TheShadowAE (13. Juni 2010 um 09:44)

  • Hehe, so ein Beispiel hab ich auch mal in einem Tutorial gesehen. ;)

    Irgendwie lernen gerade ziemlich viele C++. Ich bin grad bei der GUI programmierung. :)

  • cin.get() geht normalerweise schon, aber nur, wenn noch nicht auf ENTER gedrückt wurde.
    Wenn schonmal auf ENTER gedrückt wurde, schreibe einfach

    Code
    cin.sync() //Löscht den Eingegebenen Inhalt
    cin.get()   //Jetzt funktioniert cin.get() wieder
  • Wenn du nen Buffer nutzt anstatt direkt in die Datei zu schreiben bist du noch schneller. Das sieht dann in etwa so aus (ungetestet sollte aber gehn). So sollten ein paar hundert mb pro Sekunde drin sein.

    Spoiler anzeigen

    #include <iostream>
    #include <ostringstream>
    #include <fstream>
    using namespace std;

    int main()
    {
    int limit;

    cout << "Bitte geben sie das Limit an, bis wohin die Primzahlen berechnet werden sollen\nLimit: ";
    cin >> limit;

    ostringstream buffer;
    fstream f;
    f.open("Primzahlen.txt", ios::out);

    for(int i=3; i<limit; ++i)
    {
    bool isprim=true;
    for(int j=2; j<i; ++j)
    {
    if(i%j == 0) { isprim=false; break; }
    }
    if(isprim) buffer << i << endl;
    if(isprim) cout << i << " ist eine Primzahl\n";
    }

    f << buffer.str().c_str();
    f.close();
    cout << "----------------------\nPrimzahlen in Datei 'Primzahlen.txt' geschrieben\n\n";
    system("PAUSE");
    }

    Ich häng mal noch ne winzige klasse zum Zeitmessen an:

    Spoiler anzeigen

    #ifndef TIMER_H
    #define TIMER_H

    #include <windows.h>
    class timer
    {
    private:
    LARGE_INTEGER iFreq;
    LARGE_INTEGER iBegin, iEnd;
    public:
    LONGLONG timerinit()
    {
    QueryPerformanceFrequency(&iFreq);
    QueryPerformanceCounter(&iBegin);
    return iFreq.QuadPart;
    }
    double timerdiff()
    {
    QueryPerformanceCounter(&iEnd);
    return (double)(iEnd.QuadPart-iBegin.QuadPart)/iFreq.QuadPart;
    }
    void reset()
    {
    timer::timerinit();
    }
    };

    #endif // TIMER_H


  • Da schafft ja autoit mehr. Zeig mal code vlt kann ich´s ja nen bissl verschnellern


    Bei mir ist Autoit viel langsamer, ich habe mal versucht eine 250 MB Datei zu laden, der war bei mir langsamer

    Zum Zeit messe benutze ich aus time.h:

    Code
    clock_t start=clock();
    //...
    clock_t end=clock();
    long int diff=end-start;