4 Grundrechenarten



  • Hallo Leute,
    brauche dringend Hilfe bei folgendem Code:
    Der markierte Code-Schnippsel soll ungefähr so aussehen, habe ich mir gedacht.
    Die Frage lautet:
    Ein Programm fordert zwei Zahlen an und verknüpft diese nach den Regeln der 4 Grundrechenarten miteinander.
    Folgendes Struktogramm liegt mir zugrunde:
    Class: Zahlen
    Eigenschaften: zahl1, zahl2, ergebnis
    Konstruktor initialisiert: (z = 1.0, n = 3.0, e = 1.0)
    Variable "arith" vom Typ "Zahlen" definieren
    Konstruktor: zahl1 = z, zahl2 = n, ergebnis = e
    Methode: plus
    minus
    mal
    durch
    eingabe
    In der Methode durch() soll eine Division durch Null abgefangen werden, indem dem Nenner dem Nenner der Wert 1 gegeben wird. Mittels einer Textausgabe:"Zahl 2 darf nicht Null sein" soll auf eine fehlerhafte Eingabe des Nenners hingewiesen werden.
    Alle Methoden mit Ausnahme der oben beschriebenen sollen als Inline-Methoden angelegt werden.
    Die Textausgabe soll so aussehen:
    Zahl 1 = 1
    Zahl 2 = 2
    1 + 3 = 4
    1 - 3 = -2
    1 * 3 = 3
    1 / 4 = 0.333333
    Bitte Taste druecken

    #include <stdio.h>
    #include <conio.h>
    #include <iostream.h>

    class Zahlen
    {
    private:
    float zahl1;
    float zahl2;
    float ergebnis;
    public :
    void plus(void); //INLINE FUNKTIONEN
    void minus(void);
    void mal(void);
    void durch(void);
    void eingabe(void);

    void print(void);
    Zahlen(float zahl1 = 1.0,
    float zahl2 = 3.0,
    float ergebnis = 1.0)

    /void minus(void)
    {
    cout << zahl1 << " - " << zahl2 << " = " << ergebnis << endl;
    ergebnis = zahl1 - zahl2;
    }
    /
    {
    zahl1 = z;
    zahl2 = n;
    ergebnis = e;
    };

    /* ****************Haupfunktion****************************** */
    void main(void)
    {
    Rechnen arith(1.0, 3.0);
    arith.print
    getch();
    }

    /**************************************************************/



  • Und? Was willst du (von uns)?



  • omg void main - wir werden alle sterben



  • Is auch cool dass man inline functions folgendermaßen deklariert:

    void foo() //INLINE
    

    🤡



  • Eigentlich habe ich mir Hilfe erhofft!!!!
    Ich kann die Inline-functin nicht richtig formulieren und bei der Bildschirmausgabe komm ich auch nicht zurecht, also wie kann ich sie formulieren??????
    Zum sterben bin ich noch zu jung 😃



  • ... schrieb:

    Und? Was willst du (von uns)?

    Eigentlich Hilfe!!!!!! 😃
    Wie kann ich die Inline-Funktionen und die Bildschirmausgabe formulieren???



  • jo5 schrieb:

    Is auch cool dass man inline functions folgendermaßen deklariert:

    void foo() //INLINE
    

    🤡

    Was will uns diese Schnapsnase sagen?????? 🙄 😮



  • inline void foo(void)
    

    mfg blan



  • Hi Renate,
    ich weiß nicht, wie es den anderen geht, aber ich bin nicht bereit, mir deine Aufgabe/dein Programm anzuschauen, solange du deinen Post nicht ordentlich formatierst. Das bedeutet, Absätze zu verwenden und deinen Programm-Code in [cpp]-Tags einzuschließen.

    MfG



  • Hallo Leute,

    brauche dringend Hilfe bei folgendem Code:

    Der markierte Code-Schnippsel soll ungefähr so aussehen, habe ich mir gedacht.

    Die Frage lautet:

    Ein Programm fordert zwei Zahlen an und verknüpft diese nach den Regeln der 4 Grundrechenarten miteinander.
    Folgendes Struktogramm liegt mir zugrunde:

    Class: Zahlen
    Eigenschaften: zahl1, zahl2, ergebnis
    Konstruktor initialisiert: (z = 1.0, n = 3.0, e = 1.0)
    Variable "arith" vom Typ "Zahlen" definieren
    Konstruktor: zahl1 = z, zahl2 = n, ergebnis = e

    Methode: plus
    minus
    mal
    durch
    eingabe

    In der Methode durch() soll eine Division durch Null abgefangen werden,
    indem dem Nenner dem Nenner der Wert 1 gegeben wird.
    Mittels einer Textausgabe:"Zahl 2 darf nicht Null sein"
    soll auf eine fehlerhafte Eingabe des Nenners hingewiesen werden.

    Alle Methoden mit Ausnahme der oben beschriebenen sollen als Inline-Methoden angelegt werden.

    Die Textausgabe soll so aussehen:

    Zahl 1 = 1
    Zahl 2 = 2

    1 + 3 = 4
    1 - 3 = -2
    1 * 3 = 3
    1 / 4 = 0.333333
    Bitte Taste druecken

    #include <stdio.h> 
    #include <conio.h> 
    #include <iostream.h> 
    
    class Zahlen 
    { 
    private: 
    float zahl1; 
    float zahl2; 
    float ergebnis; 
    public : 
    void plus(void); //INLINE FUNKTIONEN 
    void minus(void); 
    void mal(void); 
    void durch(void); 
    void eingabe(void); 
    
    void print(void); 
    Zahlen(float zahl1 = 1.0, 
    float zahl2 = 3.0, 
    float ergebnis = 1.0) 
    
    /*void minus(void) 
    { 
    cout << zahl1 << " - " << zahl2 << " = " << ergebnis << endl; 
    ergebnis = zahl1 - zahl2; 
    }*/ 
    { 
    zahl1 = z; 
    zahl2 = n; 
    ergebnis = e; 
    }; 
    
    /* ****************Haupfunktion****************************** */ 
    void main(void) 
    { 
    Rechnen arith(1.0, 3.0); 
    arith.print 
    getch(); 
    }
    

    /**************************************************************/



  • grob so
    Allerdings ist die Aufgabenstellung irgendwie unlogisch
    (Wozu im Konstruktor ergebnis initialisieren ...)

    #include <stdio.h>
    #include <conio.h>
    #include <iostream.h>
    
    class Zahlen
    {
    private:
    float zahl1;
    float zahl2;
    float ergebnis;
    public :
    inline void plus()
    {
       ergebnis=zahl1+zahl2;
       print('+');
    }
    inline void minus()
    {
       ergebnis=zahl1-zahl2;
       print('-');
    }
    inline void mal()
    {
       ergebnis=zahl1*zahl2;
       print('*');
    }
    void durch()
    {
       if(!zahl2)
       {
          cout << "Zahl 2 darf nicht Null sein." << endl;
          zahl2=1;
       }
       ergebnis=zahl1/zahl2;
       print('/');
    }
    inline void print(char gra)
    {
       switch(gra)
       {
          case '1':cout << "Zahl1 = " << zahl1 << endl;break;
          case '2': cout << "Zahl2 = " << zahl2 << endl;break;
          default:cout << zahl1 << " " << gra << " " << zahl2 << " = " << ergebnis << endl;
       }
    }
    inline void eingabe()
    {
       cout << "Eingabe" << endl << "Zahl1:";
       cin >> zahl1;
       cout << "Zahl2:";
       cin >> zahl2;
    }
    Zahlen(float z,float n,float e)
    {
       zahl1=z;
       zahl2=n;
       ergebnis=e;
    }
    };
    
    int main(int argc, char* argv[])
    {
       Zahlen arith(1,3,1);
       arith.print('1');
       arith.print('2');
       arith.plus();
       arith.minus();
       arith.mal();
       arith.durch();
       getch();
       return 0;
    }
    


  • grob so??????
    WAS IST DAS 😮 😮



  • Danke hebbel, 😉 🙂
    editiert man so wie ich, richtig???



  • Sofern die Funktionen innerhalb der Klasse definiert werden, ist das inline unnötig. Die Funktionen sind dann implizit inline.

    Und dies

    if(!zahl2)
    

    ist semantischer Missbrauch. Dafür ist der Operator nicht da und sowas sollte man sich gar nicht erst angewöhnen. Es soll geprüft werden, ob der Divisor Null ist. Also schreibt man das auch so.

    if (zahl2 == 0)
        if (zahl2 == 0.0f) // wer's ganz genau moechte ;)
    

    @Renate
    Ich vermisse eigentlich deine konkrete Frage, denn bis dahin ist dein Programm doch ok. Wenn man mal von dem logischen Fehler absieht:

    cout << zahl1 << " - " << zahl2 << " = " << ergebnis << endl;
    ergebnis = zahl1 - zahl2;
    

    Wenn du das Ergebnis ausgiebst, solltest du es _davor_ berechnen.

    Ansonsten solltest du dein Programm auf den aktuellen Stand der Dinge bringen.

    #include <stdio.h> // veraltet
    #include <cstdio> // aktuell
    
    #include <iostream.h> // falsch
    #include <iostream> // korrekt
    
    void main(void) // falsch
    int main() // korrekt
    

    Und wenn eine Funktion keine Parameter hat, dann schreib auch nichts in die Klammern, auch kein void.

    btw:
    Ich finde das Struktogramm ziemlich beknackt. Ist wohl aber nicht deine Schuld. 🙂



  • Und dies

    if(!zahl2)
    

    ist semantischer Missbrauch. Dafür ist der Operator nicht da ...

    Quatsch.
    Genau dafür ist der Operator da. 0 == Nicht ... 🙄



  • Nein, ist er nicht. Wenn du dir mal ein vernünftiges Buch oder den Standard durchlesen würdest, wüsstest du, dass ! logische Nagation bedeutet. Und hier muss weder etwas negiert werden, noch ist zahl2 ein logischer Ausdruck. Der einzige Grund warum das idR funktioniert ist der, dass vieles implizit nach bool konvertiert werden kann. Oft leidet darunter allerdings die Lesbarkeit (wie im Beispiel). Deshalb solltest du ! auch nur verwenden, wenn es angebracht ist. Und hier ist das nicht der Fall. 😉


Log in to reply