Fläche eines Rechteckes
-
Hi,
danke Paul, des hat schon mal ein problem gelöst.
Jetzt ist es aber leider so, dass wenn die fläche 1 kleiner ist sagt mein programm trotzdem fläche 1 ist größer und dann sagt es auch noch dass die flächen gleich groß sind.
Julia
-
drakon
danke. Für mich ist des alles sehr neu!
Mit dem conditional operator meine ich nach der definition meines buchs
expression ? expression : expression
Julia
-
Playmuckel schrieb:
drakon
danke. Für mich ist des alles sehr neu!
Mit dem conditional operator meine ich nach der definition meines buchs
expression ? expression : expression
Julia@Drakon - true und false sind für den ternären Operator aber immer etwas doof, da schreibst nämlich lieber:
int i = 5; int n = 2; bool keiner = i < n;
na ja der ternäre Operator umgangssprachlich folgendes:
Vor dem "?" steht eine Bedingung dahinter durch Doppelpunkt getrennt, der Ausdruck falls die Bedingung zutrifft und der falls die Bedingung nicht zutrifft

Bedingung ? FallsBedingungZutrifft : FallsBedingung nicht zutrifftAngenommen du hast 3 ints a,b,c und falls b > c soll a c + 3 zugewiesen werden, ansonsten b - 3, dann kannst das so machen:
int a,b,c; // a,b,c werden iwie gefüllt a = b > c ? c + 3 : b - 3;
-
@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.
-
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 ifkönnte man ebenso gutelsenehmen. 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.

-
Nexus schrieb:
Dravere schrieb:
if(area1 > area2) // ... else if(area1 < area2) // ... else if(area1 == area2) // ...Beim dritten
else ifkönnte man ebenso gutelsenehmen. 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
-
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 mitstd::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