Fläche eines Rechteckes



  • @Drakon - true und false sind für den ternären Operator aber immer etwas doof, da schreibst nämlich lieber:

    War ja nur ein Beispiel mit etwas, was sie es auch sicher versteht. 😉

    Ich hätte auch verschachtelte Operationen nehmen können, aber dient nicht wirklich dem Verständnis.


  • Administrator

    Ein zwei Dinge, welche mir beim schnellen überfliegen aufgefallen sind:

    // using namespace std; mit Vorsicht zu geniessen, ja nicht in einen Header damit!
    
    if(area1 > area2) 
    { 
      std::cout << "The area of the first triangle is bigger." << std::endl;
    } 
    else if(area1 < area2) // ist deutlicher!
    {
      // Schreibfehler ;)
      std::cout << "The area of the first (really???) triangle is bigger." << std::endl;
    } 
    else if(area1 == area2) // = ist Zuweisung, == ist der Vergleich
    { 
      std::cout << "The areas are the same." << std::endl;
    }
    
    // Verwende std::endl für eine neue Zeile. Flusht auch gleich den Stream.
    
    // getchar ist C, besser C++ verwenden:
    std::cin.get();
    
    // Oder mit Absicherung:
    std::cin.ignore(std::cin.rdbuf()->in_avail());
    std::cin.clear();
    std::cin.get();
    // Wurde aber schon erwähnt.
    

    Edit: Grad noch was aufgefallen, Triangle ist ein Dreieck, du hast aber Rechtecke, noch ein Schreibfehler? 😃

    Grüssli



  • danke,
    habe alle fehler ausgebessert und ja ich hatte rectangel und triangel einfach vermischt. Programm läuft jetzt werde ich mich mal an die sache mit dem conditional operator machen.
    Julia



  • Dravere schrieb:

    if(area1 > area2) 
        // ...
    else if(area1 < area2)
        // ...
    else if(area1 == area2) 
        // ...
    

    Beim dritten else if könnte man ebenso gut else nehmen. Die Rechtecke sind zwangsläufig gleich, wenn keines grösser als das andere ist.

    Playmuckel schrieb:

    jetzt werde ich mich mal an die sache mit dem conditional operator machen.

    Da musst du aber aufpassen; man gerät schnell in Versuchung, komplexe Ausdrücke in den ternären Operator zu stecken, und ebenso schnell wird es unübersichtlich und noch schneller fehleranfällig. 😉


  • Administrator

    Nexus schrieb:

    Dravere schrieb:

    if(area1 > area2) 
        // ...
    else if(area1 < area2)
        // ...
    else if(area1 == area2) 
        // ...
    

    Beim dritten else if könnte man ebenso gut else nehmen. Die Rechtecke sind zwangsläufig gleich, wenn keines grösser als das andere ist.

    Da hast du natürlich recht! Ich empfehle aber trotzdem etwas ähnliches zu machen:

    if(area1 > area2) 
        // ...
    else if(area1 < area2)
        // ...
    else // area1 == area2
        // ...
    

    Das kann hilfreich beim Lesen des Codes sein 😉

    Grüssli



  • hallo,
    jetzt bin ich dank euere hilfe schon um einiges weiter gekommen und jetzt habe ich wieder ein Problem und zwar eigentlich wieder das alte, dass mein programm sich schließt:
    1#include <iostream>
    2using namespace std;
    3int main()
    4{
    5 int i , j;
    6 cout << "Enter two numbers and I tell you which number is the smaller and which is the lager.\n";
    7 cin >> i;
    8 cin >> j;
    9 cout << ( i > j ? i : j ) << " is greater." << endl;
    10
    11 std::cin.clear();
    12 std::cin.ignore(std::cin.rdbuf()->in_avail());
    13 std::cin.get();
    14
    15 return 0;
    15}



  • nicht die feine Art aber für ein einfaches Programm und für Anfänger völlig ausreichend ist:

    system("PAUSE");
    

    anstatt

    std::cin.clear(); 
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    std::cin.get();
    

    Womit das genau zusammenhängt kann dir ein erfahrener erklären...

    lg

    Walter


  • Administrator

    Walter S. schrieb:

    Womit das genau zusammenhängt kann dir ein erfahrener erklären...

    Kann man auch in der Konsolen-FAQ nachlesen, bzw. im daran verlinkten C++-FAQ Beitrag.
    Und ich weiss gar nicht, ob das irgendwo in den Beiträgen steht, aber was noch dazu kommt, ist: system("PAUSE") ist nicht Platformunabhängig. Erzähl das mal einem Anfänger, welcher auf Linux arbeitet, dem wird das nichts bringen 😉

    Grüssli



  • mir ist bewusste das es nicht plattformunabhängig ist 😉 Aber ihm zusagen es geht mit

    std::cin.clear(); 
    std::cin.ignore(std::cin.rdbuf()->in_avail()); 
    std::cin.get();
    

    ohne zu erklären was da überhaupt steht halte ich für nicht sinnvoll.

    Wenn man später in die Optimierung eines codes geht ist es natürlich sinnwoll nicht mit system zu arbeiten. Aber bei den noch recht einfachen Programmen ist es meiner Meinung nach nicht ganz so wichtig aber wenn ihr es unbedingt wollt bitte wie im faq beschrieben programmieren und meinen ersten post außer acht lassen 🙂

    lg

    Walter

    P.S: Immer diese Perfektionisten 😃



  • ohne zu erklären was da überhaupt steht halte ich für nicht sinnvoll.

    Die Error Flags des Stream werden zurückgesetzt (clear), dann werden alle (in_avail) Zeichen, die sich im Buffer befinen verworfen. (ignore). Und zum Schluss wir auf das nächste Zeichen gewartet (get).

    Ich weiss nicht, ob das einem Anfänger mehr bringt. 😉



  • Ich weiss nicht, ob das einem Anfänger mehr bringt.

    weis ich auch nicht aber somit besteht ja die Möglichkeit das er es versteht. Ich sage mal ein einfaches Beispiel: Hausaufgabe (wenn man noch schüler ist) : Schreibe ein Programm was ausgibt welche der beiden Zahlen größer ist. Und dann soll man den geschriebenen code dem Lehrer erklären. Und dann.. 😉



  • Walter S. schrieb:

    weis ich auch nicht aber somit besteht ja die Möglichkeit das er es versteht. Ich sage mal ein einfaches Beispiel: Hausaufgabe (wenn man noch schüler ist) : Schreibe ein Programm was ausgibt welche der beiden Zahlen größer ist. Und dann soll man den geschriebenen code dem Lehrer erklären. Und dann.. 😉

    wenn der Lehrer sein Geld wert ist, dann weiß er, was vom Schüler selbst kommt und was er nur kopiert hat... bei sowas kann man aber getrost zugeben, es nur kopiert zu haben... Auch die Lehrer sind da oft nicht besser ^^



  • Walter S. schrieb:

    Aber bei den noch recht einfachen Programmen ist es meiner Meinung nach nicht ganz so wichtig [...]

    Wenn man sich der Nachteile von system("pause") bewusst ist, finde ich es durchaus legitim. Aber die Diskussion hatte ich schon einmal mit Dravere... 😉



  • Klar nicht die schönste art, aber mzu mehr lang es im moment noch nicht. Noch eine frage wie hand habe ich es am besten wenn der benutzer zweimal die selbe zahl eingibt?



  • Playmuckel schrieb:

    Klar nicht die schönste art, aber mzu mehr lang es im moment noch nicht. Noch eine frage wie hand habe ich es am besten wenn der benutzer zweimal die selbe zahl eingibt?

    Wie meinst du das? - Dann gibt es halt gleiche Rechtecke, oder wo ist das Problem?



  • Versuche einfach die nächsten male dein problem genau zu definieren. Vorallem wie glaubst du kann man das problem lösen und was hast du schon als code. 😉 Dann könnte man dir eher helfen... zwar könnte man einfach einen fertigen code reinschreiben.. aber das bringt dir nichts 😉

    lg

    Walter


Anmelden zum Antworten