Probleme bei Tutorial (Programm zur Auflistung aller Primzahlen von 1 bis 100)



  • Hi.

    Zeile 16: Du machst eine Zuweisung, keinen Vergleich (= statt ==)

    gruß
    syntax

    [EDIT] Wenn der Lehrer nicht immer die Runde gehen würde, wär isch der schnellste gewesen. 🕶

    gruß
    syntax


  • Mod

    Apropos der Schnellste:

    cout << "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97\n";
    

    ?



  • Hallo,
    also erstmal Ihr seid ja echt der Hammer! Großes Kompliment von mir für die extrem schnellen Antworten (Und dann auch noch die Richtigen!!!).

    Und zur möglichen 1:1 Kopie. Nachdem mein vollkommen selbst geschriebenes progrämmchen nicht funktioniert hat, habe ich mich tatsächlich immer mehr dem vorgegeben Teil aus dem Tutorial angenähert (zumindest bei der Funktion unten).

    PS: warum macht dir <=Zahl-1 Angst?

    Vielen vielen dank an alle



  • jango157 schrieb:

    PS: warum macht dir <=Zahl-1 Angst?

    Vielen vielen dank an alle

    Mir machts zwar keine Angst, aber ich finde <Zahl schöner und kürzer. 🙂

    gruß
    syntax



  • Ich finde < Zahl auch schöner. Und was nicht schön ist macht mir Angst 😃

    Abgesehen davon:

    if(...)
        cout << "foo";
    else
    ;
    

    Das ist auch unschön. Das else dürfte zwar von jedem schlauen Compiler wegoptimiert werden, aber warum schreibst du das überhaupt hin um dann ne leere Anweisung draus zu machen?

    EDIT:

    Zahl=Zahl+1;
    

    Auch unschön.



  • SeppJ schrieb:

    Apropos der Schnellste:

    cout << "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97\n";
    

    ?

    Kann ich überbieten:

    puts("2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97\n");
    

    😃


  • Mod

    hustbaer schrieb:

    Kann ich überbieten:

    Das würde ich mal messen (mein Rechner ist aber im Moment zu ausgelastet für Benchmarks). ostream::operator<< ist schließlich überladen für C-Strings, daher sollte das eigentlich das gleiche sein.



  • SeppJ schrieb:

    hustbaer schrieb:

    Kann ich überbieten:

    Das würde ich mal messen (mein Rechner ist aber im Moment zu ausgelastet für Benchmarks). ostream::operator<< ist schließlich überladen für C-Strings, daher sollte das eigentlich das gleiche sein.

    Es ging glaub' ich nicht um die Geschwindigkeit sondern um die Anzahl der Zeichen...

    Abgesehen davon muss die Aufgabe ja Berechnung aller Primzahlen von ... heißen.



  • Nö mir ging's schon um die Geschwindigkeit 🤡

    SeppJ schrieb:

    hustbaer schrieb:

    Kann ich überbieten:

    Das würde ich mal messen (mein Rechner ist aber im Moment zu ausgelastet für Benchmarks). ostream::operator<< ist schließlich überladen für C-Strings, daher sollte das eigentlich das gleiche sein.

    Na gut, dann halt

    static const char tfpnutoh[] = "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97\n";
    fwrite(tfpnutoh, 1, sizeof(tfpnutoh) - 1, stdout);
    

    🤡 🤡


  • Mod

    Jetzt kommen wir dem Ziel einer nicht nur absichtlich falsch verstandenen sondern auch absolut unleserlichen Lösung näher. 👍

    P.S.: In C++ natürlich cout.write(...). Den dadurch erzeugten Overhead beim Startup für die Konstruktion des cout-Objektes würde nicht nicht mitzählen.



  • Ich glaub nicht das er noch irgendwas von dem Zeugs versteht, was ihr schreibt :p .



  • Da sein Problem ja schon gelöst wurde, sollte das OK gehen. Behaupte ich mal. Wenn nicht einfach schreien.

    Man könnte jetzt ne TMP Version basteln. Also komplett inklusive Konvertierung ins Dezimalsystem und Konkatenierung der Ergebnisse.

    fwrite(black_template_magic_primes<100>::str, 1, black_template_magic_primes<100>::strlen, stdout);
    


  • hustbaer schrieb:

    Da sein Problem ja schon gelöst wurde, sollte das OK gehen. Behaupte ich mal. Wenn nicht einfach schreien.

    Man könnte jetzt ne TMP Version basteln. Also komplett inklusive Konvertierung ins Dezimalsystem und Konkatenierung der Ergebnisse.

    fwrite(black_template_magic_primes<100>::str, 1, black_template_magic_primes<100>::strlen, stdout);
    

    Mein Unnötigkeitssensor schlägt wieder aus... oha, 6.9 - ich glaube gar, hustbaer sitzt da wirklich dran.



  • Hacker, überleg mal. Wie kann ein Sensor der - sich in deinem Besitz befindend - immer auf Anschlag steht noch weiter ausschlagen? Das kann nicht gehen.

    Und nein, ich sitze da nicht dran.

    Obwohl es auch nicht notwendigerweise "unnötig" wäre, zumindest nicht subjektiv betrachtet. Kann man einiges dabei lernen, bzw. üben wenn es Dinge sind die man schon kann, aber vielleicht länger nicht mehr angewendet hat.



  • hustbaer schrieb:

    Hacker, überleg mal. Wie kann ein Sensor der - sich in deinem Besitz befindend - immer auf Anschlag steht noch weiter ausschlagen? Das kann nicht gehen.

    Ich hab Alufolie rumgewickelt und bediene das ding durch eine Angel und einen Stock, aber der Zeiger zittert immer noch ein bisschen 🤡

    Außerdem mach' ich eigentlich nie unnötige Sachen. Ich bin - in gewissen Zeiten - recht rational.


  • Mod

    hustbaer schrieb:

    Man könnte jetzt ne TMP Version basteln. Also komplett inklusive Konvertierung ins Dezimalsystem und Konkatenierung der Ergebnisse.

    Ei, das ist wirklich übel hart. Da bin ich mir selbst nach einigem Nachdenken nicht sicher, ob das überhaupt geht. Ich glaube man braucht aber mindestens variadic templates. Habe gerade keine Zeit, mir das genauer anzugucken.



  • Variadic Templates waren noch nie erforderlich, sie sind einfach eine Vereinfachung für Typlisten, wie aus dem Alexandrescu bekannt.



  • Kellerautomat schrieb:

    sie sind einfach eine Vereinfachung für Typlisten, wie aus dem Alexandrescu bekannt.

    Das ist Sepp sicherlich bekannt. Aber es sind generische Typlisten 🤡



  • Was soll denn bitte eine generische Typliste sein?



  • Kellerautomat schrieb:

    Was soll denn bitte eine generische Typliste sein?

    Was ich meine ist folgendes: Ich dachte, du meinst, man kann statt

    template<typename ...c>
    void func(//.....
    

    Auch gleich das aufzurufende einsetzen.

    template<char a, size_t s, char b>
    void func(//...
    

    In diesem Fall ist aber (ich weiß nicht ob das Wort hier passt) oberes generischer, nicht?


Anmelden zum Antworten