ist ein fehler in diesem programm?



  • VC ist schlecht 🕶 😃 😉 😞 😡



  • Du meinst also, nur aus einem kleinem Beispiel schließen zu können, dass dieses Buch schlecht ist? Weil zwei Integer am Anfang von main deklariert werden? Nicht schlecht.

    Beweis (Vorrausgesetzt der Quelltext stand so im Buch):

    #include<iostream>
    

    Zwischen '#include' und '<iostream>' gehört ein Space.

    using namespace std;
    int main()
    

    Klammer...

    int i, j;
    bool isprime;
    

    Variablendefinition mit zu großem Gültigkeitsbereich. Außerdem wäre es ein schönerer Stil, wenn es 'isPrime' hieße.

    for(i=1; i<100; i++){
    

    Müsste 'i=2' (ganz korrekt 'int i=2') sein.

    isprime=true;
    for(j=2; j<=i/2; j++)
    if((i%j)==0) isprime=false;
    

    Sehr unübersichtlich (Einrückungen etc.)

    if(isprime)
    cout<<i<<" ist eine Primzahl.\n";
    }
    

    'cout' benutzen aber dann '\n'??

    return 0;
    

    Warum 0 return?

    Ich schreibs mal in (meiner Ansicht nach) gutem Stil:

    #include <iostream>
    using namespace std;
    
    int main()
    {
        for(int i = 2; i < 100; i++)
        {
            bool isPrime = true;
    
            for(int j = 2; j <= i/2; j++)
            {
                if((i%j) == 0)
                {
                    isPrime = false;
                }
            }
    
            if(isPrime == true)
            {
                cout << i << " ist eine Primzahl." << endl;
            }
        }
    }
    

    (Keine Gewähr auf korrekte Funktion, habs nicht getestet...)

    Also ich möchte Ben1990 jetzt nicht verunsichern, mein Post sollte nur o.g. Zitat entkräften.
    Wichtig ist, dass Ben die Funktion versteht, den Stil gewöhnt man sich nach ner Zeit eigentlich eh selbst an (man merkt, dass es irgendwann unübersichtlich wird.).

    // Edit: return 0; entfernt (Übersehen...)

    MfG. Firebyte



  • 2und40 schrieb:

    Du meinst also, nur aus einem kleinem Beispiel schließen zu können, dass dieses Buch schlecht ist? Weil zwei Integer am Anfang von main deklariert werden? Nicht schlecht.

    Ja. Siehe Post von Firebyte. Ich würde allerdings noch das '== true' und das 'return 0;' weglassen, da dies überflüssig ist.

    Und wenn bei dem Buch VC6 dabei ist, dann ist das Buch schlecht! Denn Code der auf VC6 funktioniert, ist nicht standard. (Beispiel: Gültigkeitsbereich von for-Variablen)

    mfg.



  • Mist, das return 0; hab ich übersehen 😮

    das == true hm, ja da bin ich mit mir auch noch nicht ganz im reinen *gg*.
    Natürlich ist es überflüssig, aber ich glaub nen bisschen übersichtlicher...



  • Trotzdem sagt das nichts über die Qualität des Buches an sich aus. Ganz abgesehen davon, dass einige von euch genannten Punkte Kappes sind.

    Firebyte::Username schrieb:

    #include<iostream>
    

    Zwischen '#include' und '<iostream>' gehört ein Space.

    Nicht zwingend.

    Außerdem wäre es ein schönerer Stil, wenn es 'isPrime' hieße.

    IYHO (in your humble opinion).

    isprime=true;
    for(j=2; j<=i/2; j++)
    if((i%j)==0) isprime=false;
    

    Sehr unübersichtlich (Einrückungen etc.)

    Sehr unübersichtlich, dein Code, mit so vielen Klammern.

    if(isprime)
    cout<<i<<" ist eine Primzahl.\n";
    }
    

    'cout' benutzen aber dann '\n'??

    Ja, ist sogar der beste Weg in diesem Fall. Oder was wolltest du vorschlagen? std::endl? Dass 100 Mal der Buffer geleert wird und in die Konsole geschrieben wird?

    return 0;
    

    Warum 0 return?

    Warum nicht?

    Ich schreibs mal in (meiner Ansicht nach) gutem Stil:

    Das von mir Hervorgehobene triffts ganz gut.

    joomoo schrieb:

    Ich würde allerdings noch das '== true' und das 'return 0;' weglassen, da dies überflüssig ist.

    OMG, lässt du alles weg, was "überflüssig" ist?



  • Michael E. schrieb:

    Außerdem wäre es ein schönerer Stil, wenn es 'isPrime' hieße.

    IYHO (in your humble opinion).

    ähh... ja. Also ich find man sollte sich ne bessere schreibweise als allewörteeinfachnurhintereinanderschreiben angewöhnen. entweder alle_wörter_einfach_... oder alleWörteEinfach...

    isprime=true;
    for(j=2; j<=i/2; j++)
    if((i%j)==0) isprime=false;
    

    Sehr unübersichtlich (Einrückungen etc.)

    Sehr unübersichtlich, dein Code, mit so vielen Klammern.

    Bei seinem Code, sind alle Sachen in den Klammern eingerückt, dadurch weiß man sofort wo was ist. Bei dem Beispiel-Code musste ich erstmal ne Weile überlegen, bis ich die Struktur gecheckt habe.

    if(isprime)
    cout<<i<<" ist eine Primzahl.\n";
    }
    

    'cout' benutzen aber dann '\n'??

    Ja, ist sogar der beste Weg in diesem Fall. Oder was wolltest du vorschlagen? std::endl? Dass 100 Mal der Buffer geleert wird und in die Konsole geschrieben wird?

    Woher willst du das wissen??? Vielleicht ist es ja auch total schlecht, den Buffer mit einem riesigen Text vollaufen zu lassen, um ihn dann am Ende einmal zu flushen.

    return 0;
    

    Warum 0 return?

    Warum nicht?

    Weil im Standard steht, dass dies nicht erforderlich ist, und in dem Beispiel ist es total sinnlos!

    Ich schreibs mal in (meiner Ansicht nach) gutem Stil:

    Das von mir Hervorgehobene triffts ganz gut.

    Meine Ansicht ist das auch.

    joomoo schrieb:

    Ich würde allerdings noch das '== true' und das 'return 0;' weglassen, da dies überflüssig ist.

    OMG, lässt du alles weg, was "überflüssig" ist?

    ähm... Also ein '== true' ist ja wohl total überflüssig! Und es trägt (meine Meinung) nicht zur Lesbarkeit bei.
    Und das return 0; ??? Also ich versteh den Code immer noch genauso gut wie vorher. Denn es ist dort wirklich nicht relevant.

    Nicht vergessen: Ich finde das Buch auch deshalb schlecht, weil da VC6 dabei ist. (Wenn der dabei ist, was ich glaube)

    mfg.



  • Nicht zwingend.

    Hab ich auch nicht geschrieben, ich habe auch in dem ganzen Text nur von Stil geredet, nicht über syntaktische korrektheit. Ich kenn niemanden der ernsthaft:

    #include<iostream>
    

    schreibt. Du?

    IYHO (in your humble opinion).

    Naming Conventions

    Seh grad, dass joomoo schon geantwortet hat. Stimme mit ihm überein.

    MfG. 😉



  • joomoo schrieb:

    Michael E. schrieb:

    Außerdem wäre es ein schönerer Stil, wenn es 'isPrime' hieße.

    IYHO (in your humble opinion).

    ähh... ja. Also ich find man sollte sich ne bessere schreibweise als allewörteeinfachnurhintereinanderschreiben angewöhnen. entweder alle_wörter_einfach_... oder alleWörteEinfach...

    Interessant, die Qualität eines Buches (unter anderem) durch ein solches Kriterium zu belegen.

    Bei seinem Code, sind alle Sachen in den Klammern eingerückt, dadurch weiß man sofort wo was ist.

    Und ich finde, dass er es mit den Klammern übertreibt. Das Wichtige (der eigentliche Code) wird zu weit zerstreut. Meine Meinung, muss keiner teilen.

    Bei dem Beispiel-Code musste ich erstmal ne Weile überlegen, bis ich die Struktur gecheckt habe.

    Deine Meinung, muss keiner teilen.

    Woher willst du das wissen??? Vielleicht ist es ja auch total schlecht, den Buffer mit einem riesigen Text vollaufen zu lassen, um ihn dann am Ende einmal zu flushen.

    Natürlich 🙄

    return 0;
    

    Warum 0 return?

    Warum nicht?

    Weil im Standard steht, dass dies nicht erforderlich ist, und in dem Beispiel ist es total sinnlos!

    Wieder so ein Punkt, bei dem ich mich frage, wie du dadurch die Qualität des Buchs festlegen willst, weil längst nicht jeder das return weglässt. Ist auch nicht ganz sinnlos, weil ältere Compiler ein return erzwingen (Stichwort (sinnvolle) Kompatibilität).

    joomoo schrieb:

    Ich würde allerdings noch das '== true' und das 'return 0;' weglassen, da dies überflüssig ist.

    OMG, lässt du alles weg, was "überflüssig" ist?

    ähm... Also ein '== true' ist ja wohl total überflüssig! Und es trägt (meine Meinung) nicht zur Lesbarkeit bei.

    Beispiel C#: Hier muss man "== true" anfügen. Ich will einen konsequenten Stil haben ➡ Ich schreibs immer.

    Ganz nebenbei: Überflüssige Sachen können extrem hilfreich sein!



  • Firebyte::Username schrieb:

    Ich kenn niemanden der ernsthaft:

    #include<iostream>
    

    schreibt. Du?

    Ja, schon gesehen.



  • Michael E. schrieb:

    joomoo schrieb:

    Michael E. schrieb:

    Außerdem wäre es ein schönerer Stil, wenn es 'isPrime' hieße.

    IYHO (in your humble opinion).

    ähh... ja. Also ich find man sollte sich ne bessere schreibweise als allewörteeinfachnurhintereinanderschreiben angewöhnen. entweder alle_wörter_einfach_... oder alleWörteEinfach...

    Interessant, die Qualität eines Buches (unter anderem) durch ein solches Kriterium zu belegen.

    Das ist auch nicht mein einziges Kriterium, es geht auch darum, dass dieses Buch wahrscheinlich den VC6 mit bringt, welcher ein total veralteter Compiler ist.

    Woher willst du das wissen??? Vielleicht ist es ja auch total schlecht, den Buffer mit einem riesigen Text vollaufen zu lassen, um ihn dann am Ende einmal zu flushen.

    Natürlich 🙄

    Super Argumentation.

    return 0;
    

    Warum 0 return?

    Warum nicht?

    Weil im Standard steht, dass dies nicht erforderlich ist, und in dem Beispiel ist es total sinnlos!

    Wieder so ein Punkt, bei dem ich mich frage, wie du dadurch die Qualität des Buchs festlegen willst, weil längst nicht jeder das return weglässt. Ist auch nicht ganz sinnlos, weil ältere Compiler ein return erzwingen (Stichwort (sinnvolle) Kompatibilität).

    Sinnvolle Kompalität? Sinnvole ausselektierung von altem Müll! Aber du hast ja auch recht, so schlimm ist es nicht.

    Ganz nebenbei: Überflüssige Sachen können extrem hilfreich sein!

    Manchmal aber auch nur einfach überflüssig!

    Viele Sachen sind wirklich nicht so wichtig und damit kann man das Buch nicht beurteilen, aber wichtig ist:
    - Variablendefinition müssen, ja sollten, nicht an den Anfang!
    - Dieses Buch scheint von einer Langlebigkeit von for-Variablen auszugehen, was einfach FALSCH ist!
    - Aufrgund von der Sache mit den for-Variablen ist bei dem Buch wahrsch. der VC6 dabei und der ist einfach scheiße!

    Und zum Thema Kompalität: Tu mal nen VC6 Code in nen standardkonformen Compiler!

    mfg.



  • joomoo schrieb:

    Nicht vergessen: Ich finde das Buch auch deshalb schlecht, weil da VC6 dabei ist. (Wenn der dabei ist, was ich glaube)

    Wie könnten wir das vergessen?

    Zugegeben,VC++6 ist (als Vorstandard-) Compiler nicht gerade der Kracher aber trotzdem....das ist krankes Geschwafel eines ideologisch zerfressenen Spinners.



  • Michael E. schrieb:

    Beispiel C#: Hier muss man "== true" anfügen. Ich will einen konsequenten Stil haben ➡ Ich schreibs immer.

    Mit welcher Version von C# programmierst Du bitte?

    Davon ab dass das subjektiv für mich überhaupt keinen Sinn machen würde das vorauszusetzen, macht es rein logisch schon keinen Sinn denn das Ergebnis jeder Bedingung hat den Typ bool und eine bool-Variable ja wohl auch.



  • joomoo schrieb:

    Und zum Thema Kompalität: Tu mal nen VC6 Code in nen standardkonformen Compiler!

    mfg.

    Nein,nein,nein.....es muss heißen:
    Tue mal nen (fortgeschrittenen) standardkonformen Code in den VC++ 6!



  • Durchschauer schrieb:

    joomoo schrieb:

    Nicht vergessen: Ich finde das Buch auch deshalb schlecht, weil da VC6 dabei ist. (Wenn der dabei ist, was ich glaube)

    Wie könnten wir das vergessen?

    Zugegeben,VC++6 ist (als Vorstandard-) Compiler nicht gerade der Kracher aber trotzdem....das ist krankes Geschwafel eines ideologisch zerfressenen Spinners.

    Wieso? Wenn ich schon C++ lernen will, dann lern ich nicht den "Vorstandard". Es gibt viele Bücher die sich schon lange an den Standard halten, deswegen sind die anderen Bücher, okay, das war vielleicht etwas hart, nicht schlecht, sondern veraltet.

    mfg.



  • Irgendwie hat das was von nem Trollpost...

    Ich bleib mal sachlich:

    Michael E. schrieb:

    Firebyte::Username schrieb:

    Ich kenn niemanden der ernsthaft:

    #include<iostream>
    

    schreibt. Du?

    Ja, schon gesehen.

    Quelle? (Betonung liegt auf ernsthaft)

    Wieder so ein Punkt, bei dem ich mich frage, wie du dadurch die Qualität des Buchs festlegen willst, weil längst nicht jeder das return weglässt. Ist auch nicht ganz sinnlos, weil ältere Compiler ein return erzwingen (Stichwort (sinnvolle) Kompatibilität).

    Die Zielgruppe eines solchen Buches benutzt keine älteren Compiler, und wenn man sie benutzt wird man schon auf solche tücken achten...

    Beispiel C#: Hier muss man "== true" anfügen. Ich will einen konsequenten Stil haben Ich schreibs immer.

    👍
    Da pass mal auf:

    #define SUB void
    #define MAIN main() {
    #define END_SUB }
    #define PRINT printf
    
    SUB MAIN
        PRINT("Hallo QBasic Welt");
    END_SUB
    

    Viele Sachen sind wirklich nicht so wichtig und damit kann man das Buch nicht beurteilen, aber wichtig ist:
    - Variablendefinition müssen, ja sollten, nicht an den Anfang!
    - Dieses Buch scheint von einer Langlebigkeit von for-Variablen auszugehen, was einfach FALSCH ist!
    - Aufrgund von der Sache mit den for-Variablen ist bei dem Buch wahrsch. der VC6 dabei und der ist einfach scheiße!

    Und zum Thema Kompalität: Tu mal nen VC6 Code in nen standardkonformen Compiler!

    VC6 ist wirklich schlecht. Wenn bei dem Buch so eine Version bei sein sollte, ist es nicht gerade ein Kaufargument. (Zudem gibt es VS2005 Express kostenlos)
    Viel sinvoller würde ich eine kleine Einführung in das Makefile system finden, da hat man dann eine wesentlich größere Auswahl an Compilern.
    Ich erinner mich noch an meinen Informatik Unterricht beim Abi.
    Der Lehrer hat den Schüler nur den Umgang mit C++ in Verbindung mit dem Borland Builder 2 gezeigt.
    Am Ende waren nur 2 oder 3 Schüler (mich eingeschlossen 😉 ) in der Lage Programme ausserhalb Borlands zu schreiben (und sogar mehrere CPP Dateien zu benutzen...)

    So long



  • joomoo schrieb:

    Michael E. schrieb:

    joomoo schrieb:

    Michael E. schrieb:

    Außerdem wäre es ein schönerer Stil, wenn es 'isPrime' hieße.

    IYHO (in your humble opinion).

    ähh... ja. Also ich find man sollte sich ne bessere schreibweise als allewörteeinfachnurhintereinanderschreiben angewöhnen. entweder alle_wörter_einfach_... oder alleWörteEinfach...

    Interessant, die Qualität eines Buches (unter anderem) durch ein solches Kriterium zu belegen.

    Das ist auch nicht mein einziges Kriterium

    Deshalb auch das "(unter anderem)", ändert auch nix daran, dass das Argument Kappes ist.

    es geht auch darum, dass dieses Buch wahrscheinlich den VC6 mit bringt, welcher ein total veralteter Compiler ist.

    Woher du das hast, ist mir noch nicht klar.

    Woher willst du das wissen??? Vielleicht ist es ja auch total schlecht, den Buffer mit einem riesigen Text vollaufen zu lassen, um ihn dann am Ende einmal zu flushen.

    Natürlich 🙄

    Super Argumentation.

    Du willst noch ne Argumentation? Beim Flushen werden ne Menge OS-spezifische Funktionen aufgerufen. Wie sieht denn ein System aus, bei dem das mehrmalige Flashen einer kleinen Zeichenkette schneller geht als das einmalige Flashen einer großen Zeichenkette?

    Sinnvolle Kompalität? Sinnvole ausselektierung von altem Müll!

    return hat immer noch seine Darseinsberechtigung in der main-Funktion (mehrere Exit Points, andere Rückgabewerte). Wieso also nicht immer schreiben? Wieso als alten Müll bezeichnen?

    - Dieses Buch scheint von einer Langlebigkeit von for-Variablen auszugehen, was einfach FALSCH ist!

    Wo?

    - Aufrgund von der Sache mit den for-Variablen ist bei dem Buch wahrsch. der VC6 dabei und der ist einfach scheiße!

    Weil ich nicht sehe, wo hier der for-Bug von VC 6 benutzt wird, entzieht sich mir auch die Grundlage für die Vermutung, dass jener beim Buch ist.

    Und zum Thema Kompalität: Tu mal nen VC6 Code in nen standardkonformen Compiler!

    Völlig anderes Thema!

    LordJaxom schrieb:

    Mit welcher Version von C# programmierst Du bitte?

    Nicht C#? Sorry, dann wars ne andere Sprache.

    joomoo: Du scheinst zu übersehen, dass Programmieren aus mehr als nur der puren Syntax besteht. Wenn in dem Buch die Grundlagen der Programmierung gut dargestellt werden, dafür aber nicht ganz standardkonformer Beispiel-Code beiliegt, ist mir das tausendmal lieber als andersrum.



  • Firebyte::Username schrieb:

    Ich bleib mal sachlich:

    Danke.

    Michael E. schrieb:

    Firebyte::Username schrieb:

    Ich kenn niemanden der ernsthaft:

    #include<iostream>
    

    schreibt. Du?

    Ja, schon gesehen.

    Quelle? (Betonung liegt auf ernsthaft)

    Weiß nicht mehr wo. Es war in nem Quelltext von irgendeinem Open-Source-Programm/Library.

    Wieder so ein Punkt, bei dem ich mich frage, wie du dadurch die Qualität des Buchs festlegen willst, weil längst nicht jeder das return weglässt. Ist auch nicht ganz sinnlos, weil ältere Compiler ein return erzwingen (Stichwort (sinnvolle) Kompatibilität).

    Die Zielgruppe eines solchen Buches benutzt keine älteren Compiler, und wenn man sie benutzt wird man schon auf solche tücken achten...

    Ich reu mich jedes Mal, wenn ich in nem Quelltext was ändern darf, was mein Compiler nicht schluckt. Wieso mit (einem kleinen Teil der heute verwendeten) Compilern inkompatibel werden, wenn es keinen Vorteil bringt?

    Beispiel C#: Hier muss man "== true" anfügen. Ich will einen konsequenten Stil haben Ich schreibs immer.

    👍
    Da pass mal auf:

    #define SUB void
    #define MAIN main() {
    #define END_SUB }
    #define PRINT printf
    
    SUB MAIN
        PRINT("Hallo QBasic Welt");
    END_SUB
    

    Was willst du mir damit sagen?



  • Michael E. schrieb:

    Firebyte::Username schrieb:

    Ich bleib mal sachlich:

    Danke.

    NP

    Michael E. schrieb:

    Michael E. schrieb:

    Firebyte::Username schrieb:

    Ich kenn niemanden der ernsthaft:

    #include<iostream>
    

    schreibt. Du?

    Ja, schon gesehen.

    Quelle? (Betonung liegt auf ernsthaft)

    Weiß nicht mehr wo. Es war in nem Quelltext von irgendeinem Open-Source-Programm/Library.

    Wahnsinns Quelle. Wenn ich eben bei sf.net ein projekt mit total verkorkstem Source reinstelle benutzt du das dann auch als Quelle?

    Michael E. schrieb:

    Wieder so ein Punkt, bei dem ich mich frage, wie du dadurch die Qualität des Buchs festlegen willst, weil längst nicht jeder das return weglässt. Ist auch nicht ganz sinnlos, weil ältere Compiler ein return erzwingen (Stichwort (sinnvolle) Kompatibilität).

    Die Zielgruppe eines solchen Buches benutzt keine älteren Compiler, und wenn man sie benutzt wird man schon auf solche tücken achten...

    Ich reu mich jedes Mal, wenn ich in nem Quelltext was ändern darf, was mein Compiler nicht schluckt. Wieso mit (einem kleinen Teil der heute verwendeten) Compilern inkompatibel werden, wenn es keinen Vorteil bringt?

    Grund: Ich programmiere C++. Ich programmiere nicht für Compiler, sondern nach dem Standard.

    Michael E. schrieb:

    Beispiel C#: Hier muss man "== true" anfügen. Ich will einen konsequenten Stil haben Ich schreibs immer.

    👍
    Da pass mal auf:

    #define SUB void
    #define MAIN main() {
    #define END_SUB }
    #define PRINT printf
    
    SUB MAIN
        PRINT("Hallo QBasic Welt");
    END_SUB
    

    Was willst du mir damit sagen?

    Du beziehst irgendwelche anderen Programmiersprachen ein um deinen C++ Syntax zu rechtfertigen. Mein Code war eine "Satire"...



  • @Michael E.

    Kannst du mal das Primzahlprogramm posten, wie es nach deiner Syntax aussähe?



  • @Michael E.

    Also. Folgender Code:

    for(int i = 0; i < 123; ++i) {
    }
    int asd = i;
    

    Ist FALSCH, denn i geht verloren nach der for-Schleife. Der VC6 lässt es aber durchgehen. Und nicht nur das, er lässt folgendes nicht durchgehen:

    for(int i = 0; i < 123; ++i) {
    }
    for(int i = 0; i < 123; ++i) {
    }
    

    Was allerdings total legal ist.

    Außerdem besitzt er eine Template-Unterstütztung die du in die Tonne treten kannst. Deswegen ist er veraltet. PUNKT!

    return hat immer noch seine Darseinsberechtigung in der main-Funktion (mehrere Exit Points, andere Rückgabewerte). Wieso also nicht immer schreiben? Wieso als alten Müll bezeichnen?

    mehre Exit Points gab es in diesem Beispiel nicht!
    Mit Müll mein ich den Compiler, der ein return 0 erwartet.

    Sollte der VC6 nicht im Buch sein, kann das Buch ja vielleicht doch nicht veraltet sein, aber ich vermute es stark. Hier bräuchten wir Infos vom Threadersteller.

    mfg.


Anmelden zum Antworten