Fläche eines Rechteckes
-
Hallo,
ich bin ein voller neuling in c++ und muss zwei programme schreiben und ich habe leider ein paar Probleme damit.
Mein erstes Programm soll die fläche zweier rechecken berechnen.
SO weit so gut. Hier mein template:
// Program to calculate 2 rectangels
#include <iostream>using namespace std;
int main ()
{double length, width, area1, area2;
cout << "This Program calculates the area of two retcangels and compares the areas.";
cout << "Enter the length and width of the first rectangle.\n";
cin >> length;
cin >> width;
area1 = length * width;cout << " Enter the lenght and width of the second rectangle.\n";
cin >> length >> width;
area2 = length * width;
if ( area1 > area2)
{
cout << " The area of the first triangle is bigger.\n"; getchar();
}
else if ( area2 > area1)
{
cout << " The area of the first triangle is bigger.\n"; getchar();
}
else if ( area1 = area2)
{
cout << " The areas are the same.\n"; getchar();
}return 0;
}Sobald ich dass Programm ausführe kann ich nummern eingeben und dann nach der eingabe von der länge und breite schließt sich des Programm.
Mein zweites Programm soll den conditional operator verwenden und ich steige überhaupt nicht durch wie dieser funktion, In meinen fall ich soll zwei zahlen vergleichen und dann sagen welche größer ist
Vielen vielen Dank
Julia
-
damit das Programm nicht automatisch schließt sondern auf ein Enter wartet:
vor dem return 0; folgendes einfügen:std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get();
-
Hi und Willkommen im Forum.
Benutz das nächste mal Bitte die cpp-Tags, dann ist das ganze leicher zu lesen.
Und anständige Einrückung ist auch nicht schlecht.
Achja.. Und Templates sind in C++ was ganz anderes.
Das sich das ganze schliesst ist völlig normal, weil nach der Ausgabe dein Programm fertig ist. Dagegen hilft das Programm in der Konsole auszuführen, oder halt system("Pause") vor dem return hinzuschreiben. Nicht die feine Art, aber für einen Anfänger das schnellste, um damit klar zu kommen.
Ich denke mal, dass du mit conditional operator den ternären Operator meinst.
int i = 5; int n = 2; bool keiner = i < n? true:false;Noch kleine Anmerkung zu dem hier:
double length, width, area1, area2;Die Deklaration von Variablen sollte man immer so weit verschieben, bis man sie auch definieren kann.
-
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?