[gelöst] Rechtwinkliges Dreick



  • Hallo zusammen,

    Komme gerade nicht weiter, hoffe ihr könnt mir helfen.
    Zu meiner Aufgabenstellung :
    Ich soll eine Klasse Dreieck erstellen, welche ein rechtwinkliges dreieck darstellen soll . ( Es soll nicht gezeichnet werden )

    Eigenschaften der Klasse :
    int a
    int b
    int c

    Aufgaben :
    - Der Defaultkonstruktor setzt die Seiten auf die Werte 3, 4 und 5 als Standard
    für ein rechtwinkliges Dreieck
    - Der (Paramter-)Konstruktor soll drei Seiten übernehmen und vor der Zuweisung
    überprüfen, ob die Seiten en rechtwinkliges dreieck bildne ,ansonsten werdne
    die
    Standardwerte zugewiesen
    - Weiterhin soll eine Mehtode zur Ausgabe des Dreieck, sowie ein Destruktor mit
    entsprechendem Ausgabetext, geschrieben werden

    Die Bildschirm ausgabe soll wie folgt ausehen :

    Ausgabe von Dreick A :
    Die Seite a lautet :
    Die Seite b lautet :
    Die Seite c lautet :

    Ausgabe von Dreick B :
    Die Seite a lautet :
    Die Seite b lautet :
    Die Seite c lautet :

    Ausgabe von Dreick C :
    Die Seite a lautet :
    Die Seite b lautet :
    Die Seite c lautet :

    Nun zeig ich euch mal was ich schon erarbeitet habe :
    Header.h

    #include<iostream>
    
    using namespace std;
    
    class Dreieck
    {
    	private:
    		int a ;
    		int b ;
    		int c ;
    	public:
    		Dreieck();
    		Dreieck(int a,int b,int c);
    		~Dreieck();
    		void ausgabe();
    };
    

    Dreieck_main.cpp

    #include<iostream>
    #include"Header.h"
    
    using namespace std;
    
    int main ()
    {
    	Dreieck A;
    	Dreieck B (5,4,3);
    	Dreieck C (6,8,10);
    
    	cout<<"Ausgabe von Dreieck A :" <<endl;
    	A.ausgabe();
    	cout<<"Ausgabe von Dreieck B :" <<endl;
    	B.ausgabe();
    	cout<<"Ausgabe von Dreieck C :" <<endl;
    	C.ausgabe();
    
    	cin.get();
    	cin.get();
    	return 0 ;
    }
    

    Dreieck_UP.cpp

    #include"Header.h"
    
    Dreieck::Dreieck()
    {
    	a = '3';
    	b = '4';
    	c = '5';
    }
    Dreieck::Dreieck(int  ,int  ,int )
    {
    
    }
    Dreieck::~Dreieck()
    {
    
    }
    void Dreieck::ausgabe()
    {
    	cout<<"Die Seite a lautet : "<<a<<endl;
    	cout<<"Die Seite b lautet : "<<b<<endl;
    	cout<<"Die Seite c lautet : "<<c<<endl<<endl;
    }
    

    Meine Bildschirmausgabe zeigt jetzt schon vollkommen andere Zahlen. Obwohl eigentlich mein Objekt A schon mit den Standartwerten initialisiert ist .

    Kann mir einer weiterhelfen ?

    Bedanke mich für die Zeit, die ihr für mich verwendet 😃



  • Hallo,

    Dreieck B und C weisen keinesfalls eine Initialisierung der Seitenlängen auf. Für die Prüfung ob die Werte zu einem rechtwinkligen Dreieck gehören, reicht der Satz des Pythagoras aus.



  • Welche Ausgabe erwartest du denn damit?

    Dreieck::Dreieck()
    {
        a = '3';
        b = '4';
        c = '5';
    }
    


  • @manni66
    Das soll keine Ausgabe sein, wollte damit eigentlich bezwecken , das die Standardwerte im Defaultkonstrukor gesetzt werden .

    @inflames2K
    Das ist mir schon klar, aber wie setzte ich im Defaultkonstruktor die Seiten auf die Standardwerte ?



  • Moritz Vogt schrieb:

    @manni66
    Das soll keine Ausgabe sein, wollte damit eigentlich bezwecken , das die Standardwerte im Defaultkonstrukor gesetzt werden .

    Ja, das ist mir klar. Was aber glaubst du, was deine asugabe-Funktion dann ausgibt?



  • Dem Objekt A hab ich ja nix mitgegeben, also sollte sich doch das Objekt die Standardwerte aus dem Konstruktor holen ?
    Habe gedacht der Compiler erzeugt dann das Objekt A mit dem Defaultkonstruktor ?



  • Moritz Vogt schrieb:

    Dem Objekt A hab ich ja nix mitgegeben, also sollte sich doch das Objekt die Standardwerte aus dem Konstruktor holen ?
    Habe gedacht der Compiler erzeugt dann das Objekt A mit dem Defaultkonstruktor ?

    Ja, das ist richtig. Was aber glaubst du, was deine asugabe-Funktion dann ausgibt?



  • Hallo,

    deine Annahme ist ja völlig korrekt. Allerdings ist '5' nicht gleich 5. Du musst zwischen Zeichen und Zahlen unterscheiden!

    Bei '5' sollte die Variable den Wert 53 erhalten. Ich nehme an, dein Dreieck A spuckt folgendes aus:

    Ausgabe von Dreick A :
    Die Seite a lautet : 51
    Die Seite b lautet : 52
    Die Seite c lautet : 53



  • Ich hab gehofft das er die Standardwerte ausgibt, leider ist dem nicht so 😞
    Er gibt 51,52,53 aus was ich überhaupt nicht verstehe .



  • Ohhhh man was ein Anfänger fehler 😡 😡
    Habs verwechselt mit dem Char Typen



  • Trotzdem komm ich nicht bei der zweiten Aufgabe weiter/weis nicht wie ich das angehen soll.



  • Welchen Teil? Zuweisen der Parameter wird ja nicht das Problem sein. Also der Test ob es ein rechtwiklinges Dreieck ist? Dazu hat inflames2k ja schon einen Tipp gegeben.



  • @all

    Meine Objkete B und C zeigen aber nicht die Werte an die ich ihnen mitgegeben habe. Zeigen einen Random wert was ja klar ist wenn sie anscheinend nicht definiert sind.
    Was hab ich falsch gemacht ? Habe den Objekten in der Main doch seine Werte gegeben .

    Zu der berechnung ob das Dreieck Rechtwinklig ist :
    Bin ich mir noch nicht sicher ob das soo stimmt 😞

    Dreieck::Dreieck(int a,int b ,int c )
    {
    	if((c*c)==(a*a)+(b*b))
    	{
    		cout<<"Rechtwinklig"<<endl;
    	}else if ((a*a)==(b*b)+(c*c))
    	{
    		cout<<"Rechtwinklig"<<endl;
        }else if ((b*b)==(a*a)+(c*c))
    	{	
    		cout<<"Rechtwinklig"<<endl;	
    	}else
    	{
    		cout<<"Nicht Rechtwinklig"<<endl;
    	}
    
    }
    


  • Dann musst du dir wohl nochmal das Kapitel über Konstruktoren in deinem Lehrbuch anschauen.



  • Ganz einfach. - Allein die übergabe der Werte in den Konstruktor weist diese Daten noch lang nicht zu den Klassen-Feldern zzu.



  • Ok Danke für eure Hilfe 😃
    Werde mich nochmal genauer über Konstruktoren und destruktoren schlau machen



  • Vielleicht solltest du den Parametern auch mal andere Namen geben als den Variablen in deiner Klasse. Führt sonst nur zur Verwirrung ob man gerade den Parameter a oder die Membervariable a meint.



  • @sebi707 Hätte vielleicht den This-Zeiger benutzen sollen, habe es jetzt aber mit anderen Parameternamen gemacht



  • sebi707 schrieb:

    Vielleicht solltest du den Parametern auch mal andere Namen geben als den Variablen in deiner Klasse. Führt sonst nur zur Verwirrung ob man gerade den Parameter a oder die Membervariable a meint.

    Besser wäre es, eine Initialisierungsliste zu verwenden.



  • manni66 schrieb:

    Besser wäre es, eine Initialisierungsliste zu verwenden.

    Wolltest du wirklich meinen Beitrag zitieren? Eine Initialisierungsliste ist zwar schön und funktioniert auch wenn Parameter und Membervariablen gleich heißen, aber gerade für Anfänger ist es doch gut zu sehen, dass es einen Unterschied zwischen den Beiden gibt. Unterschiedliche Namen und Initialisierungsliste schließen sich ja nicht aus.


Anmelden zum Antworten