Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe bei C++ Programm um ein Rechteck oder quadrat zu bekommen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.12.2017, 19:02 Uhr
katilinchen



Guten Abend,

ich hab ein kleines Programmierproblem.

Zwar sollte das folgende Programm Seitenlängen und Diagonalen einlesen und dann selbstständig entscheiden habe ich ein Quadrat oder habe ich ein Rechteck und soll dann jeweil die Fläche und den Umfang berechen, oder wenn gar nichts davon vorliegt sollte es ausgeben das es weder rechteck noch quadrat ist.
Momentan gibt es mir für das Quadrat beides aus also das es ein rechteck und ein quadrat ist. Wie könnte ich denn das am blödesten vermeiden oder abfangen, dass es mir dann nur das quadrat ausgibt und berechnet. momentan prüfe ich ob eben alle seiten gleich lang sind, nur leider beisst sich das etwas mit der abfrage ob beide seiten gleich lang sind.

ich freue mich über jede hilfe danke schonmal!



C++:
#include <iostream>
#include "rechteck.h"

using namespace std;

int main()
{

    float seite_a, seite_b, seite_c, seite_d, diag_e, diag_f;
    cout << "Bitte geben Sie nacheinander die Laengen der 4 Seiten und der 2 Diagonalen des Rechtecks an:\nSeite a: " ;
    cin >> seite_a;
    cout << "Seite b: ";
    cin >> seite_b;
    cout << "Seite c: ";
    cin >> seite_c;
    cout << "Seite d: ";
    cin >> seite_d;
    cout << "Diagonale e: ";
    cin >> diag_e;
    cout << "Diagonale f: ";
    cin >> diag_f;
    //cout << seite_a << seite_b << seite_c << seite_d << diag_e << diag_f;
    rechteck rechteck1 (seite_a, seite_b, seite_c, seite_d, diag_e, diag_f);

    if (rechteck1.sindGegenueberliegendeSeitenGleichLang() == 0)
    {
        cout << "Kein Rechteck, da die gegenueberliegenden Seiten nicht gleich lang sind!Seitenlaengen: a = " << seite_a << " , b = " << seite_b << " , c = " << seite_c << " , d = " << seite_d << endl;
    }
    if (rechteck1.sindDiagonalenGleichLang() == 0)
    {
        cout << "Kein Rechteck, da die Diagonalen nicht gleich lang sind!" << "Diagonalen: e = " << diag_e << " , f = " << diag_f << endl;
    }
    if (rechteck1.liegteinQuadratvor() == 0)
    {
                cout << "Kein Quadrat da die seiten nicht gleich sind" << "a="<< seite_a << " , b= " << seite_b <<  "c="<< seite_c << " , d= " << seite_d <<endl;

    }
    if ((rechteck1.sindGegenueberliegendeSeitenGleichLang() != 0)&(rechteck1.sindDiagonalenGleichLang() != 0))
    {
        cout << "Ihre Eingabe ergibt ein Rechteck.\n\nSeitenlaengen: a = " << seite_a << " , b = " << seite_b << " , c = " << seite_c << " , d = " << seite_d <<"\nDiagonalen: e = " << diag_e << " , f = " << diag_f << endl;
        cout << "\nFlaeche ihres Rechtecks: " << rechteck1.flaeche() << "\nUmfang ihres Rechtecks: " << rechteck1.umfangquadrat() << endl;
    }
    if(rechteck1.liegteinQuadratvor() !=0 )
    {
         cout << "Ihre Eingabe ergibt ein Quadrat.\n\nSeitenlaengen: a = " << seite_a << " , b = " << seite_b << " , c = " << seite_c << " , d = " << seite_d <<"\nDiagonalen: e = " << diag_e << " , f = " << diag_f << endl;
        cout << "\nFlaeche ihres Quadrats: " << rechteck1.flaechequadrat() << "\nUmfang ihres Quadrats: " << rechteck1.umfangquadrat()<< endl;
    }


    return (0);
}





C++:
#include "rechteck.h"

rechteck::rechteck(const float a, const float b, const float c, const float d, const float e, const float f)
    : a_ ( a) , b_ ( b) , c_ ( c) , d_ ( d) , e_ ( e) , f_ ( f )
{
}


bool rechteck::liegteinQuadratvor()
{
    if((a_ == b_ ) && (a_ == c_) && (e_ == f_))
        return true;
    else
        return false;

}


bool rechteck::sindGegenueberliegendeSeitenGleichLang()
{
    if ((a_ == c_ ) & (b_ == d_))
        return true;
    else
        return false;

}

bool rechteck::sindDiagonalenGleichLang()
{
    if (e_ == f_)
        return true;
    else
        return false;
}


float rechteck::flaeche()
{
    flaeche_ = a_ * b_;
    return flaeche_;
}


float rechteck::umfang()
{
    umfang_ = 2 * (a_ + b_);
    return umfang_;
}

float rechteck::flaechequadrat()
{
    flaeche_ = a_ * a_;
    return flaeche_;
}


float rechteck::umfangquadrat()
{
    umfang_ = a_*b_*c_*d_;
    return umfang_;
}

rechteck::~rechteck()
{
    //dtor
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2017, 09:13 Uhr
ao

(Operator)



Zitat von katilinchen:
Momentan gibt es mir für das Quadrat beides aus also das es ein rechteck und ein quadrat ist.

Weil die Programmlogik im Moment so ist:

if (Bedingungen für Rechteck erfüllt)
{
Ausgaben für Rechteck
}

if (Bedingungen für Quadrat erfüllt)
{
Ausgaben für Quadrat
}

Da jedes Quadrat auch ein Rechteck ist, sind für Quadrate beide Sätze Bedingungen erfüllt.

Das ist ein Fall für eine if-else-if-else-Kette. Kannst du mit dem Tipp was anfangen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2017, 09:27 Uhr
katilinchen



Hey,

Danke schonmal für die Antwort, wenn ich das mit einer if else anweisung mache wie frage ich das dann genau ab?

C++:
if((a==b) && ( c==d) &&(e==f))
{
return true;
}
else
return false;

if((a==b==c==d) && (e==f))
{
return true;
}
else
return false;




so ungefähr oder wie krieg ich das am besten hin das ich sagen kann das alle seiten gleich sein sollen und das die diagonale gleich lang sein sollten ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2017, 15:13 Uhr
ao

(Operator)


a==b==c==d geht so nicht (*). Du kannst immer nur 2 Werte vergleichen. Du musst dann die Vergleiche mit && verknüpfen, so wie im oberen Test.

Und wenn du das so machst wie du schreibst, dann machst du den ersten Test (auf Rechteck) und gehst dann entweder mit true oder mit false raus. Den zweiten Test (auf Quadrat) machst du dann gar nicht mehr.

(*) Genauer gesagt: Das geht schon, aber es macht nicht das, was du willst.
a==b==c wird abgearbeitet wie (a==b)==c. Es wird also zuerst a mit b verglichen, und das Ergebnis ist entweder 0 oder 1. Das wird dann mit c verglichen. Der Gesamtausdruck ist also true, wenn a==b && 1 == c oder wenn a!=b && 0==c, sonst ist er false. Aber das nur am Rand.

Dieser Post wurde am 08.12.2017 um 15:17 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: