Frage zu Syntax und Semantik



  • Hallo,

    ich habe ein Problem zur Angabe der Syntax und der Semantik, ich hoffe ihr könnt mir weiterhelfen.

    Folgender Ausdruck liegt mir vor:

    (1) int rechteck::anzahl=0;

    int main()
    {
    cout<<"Anzahl der Rechtecke: "<<rechteck::anzahl_rechtecke()<<endl;
    (2) rechteck r1(1,2)r2(2,3),r3;
    (3) cout<<"Anzahl der Rechtecke: "<<rechteck::anzahl_rechtecke()<<endl;
    (4) r1.flaeche();
    r2.flaeche();

    (5) r3.flaeche();
    system("pause");
    }

    und ich soll nun zu (1)(2)(3)(4)(5) jeweils die Syntax und die Semantik angeben, bin da aber etwas überfragt.

    Mein bisheriger Vorschlag:

    (1) Klasse = rechteck
    Klassenvariable ist "anzahl", es ist noch kein Objekt vorhanden
    Der Datentyp wurde vom Typ Int angegeben.

    (2)

    (3) Implementierung der Methode anzahl_rechtecke

    (4) Zugriff auf die Instanz r1, und r2????

    Könnt ihr mir dabei helfen, ich krieg das nicht gebacken!
    Wäre echt super



  • (1) initialisierung einer statischen klassen member

    (2) Konstruktoraufrufe, 2mal mit initialisierung der eigenschaften( sicher hoehe und breite oder x und y position ) und einmal der defaultkonstruktor

    (3) wenn ein konstruktor aufruf da war wird die statische zaehlervariable "anzahl" incrementiert, also wird hier sicher 3 ausgegeben, weil drei objekte erzeugt wurden

    (4) scheint ne methode zu sein die den schlaecheninhalt berechnet

    (5) das selbe wie (4)

    Genaueres kann ich da auch net sagen weil ich ja die definition der methoden nicht sehe

    gruß Tobi.



  • Hallo TObi,

    vielen Dank erstmal für die schnelle Antwort. ich hab hier noch ein paar Infos für dich:

    Folgende Bildschirmausgabe kommt bei diesem Programm heraus:

    Anzahl der Rechtecke: 0
    Konstruktor2 Rechteck
    Konstruktor2 Rechteck
    Konstruktor1 Rechteck
    Anzahl der Rechtecke: 3
    Flaeche: 2
    Flaeche: 6
    Flaeche: 0
    Drücken Sie ein beliebe Taste.....

    Die Ausgangslage ist folgende:

    Die Klasse "rechteck" besitzt folgende Eigenschaften:
    -zwei private Variablen (Typ float) für die Attribute "laenge" und "breite".
    -eine private Klassenvariable zum Zählen der generierten Instanzen (Rechtecke)

    Die Klasse soll folgende Methoden (public) zur Verfügung stellen:
    (1) einen Standardkonstruktor zur Initialisierung der Attribute "laenge" und "breite"
    (2)einen Konstruktor mit zwei float-Parametern zum Setzen der Attribute "laenge" und "breite"
    (3) eine Methode "flaeche", die die Fläche eines Rechtecks errechnet und auf dem Bildschrim ausgibt
    (4) eine Klassenmethode "anzahl_rechtecke", die die Anzahl der generierten Instanzen (Rechtecke) auf dem Bildschirm ausgibt.

    Ich hoffe du kannst damit was anfangen?!



  • verstehe ich das richtig, das dir nur der inhalt gegeben ist den diese Klasse besitzt und du nun anhand der informationen sleber mögliche Methoden bzw die komplette Klasse Recheck nach bauen sollst?



  • Hallo,

    also ich habe als Information die Klassendefinition, das Hauptprogramm und den Bildschirmausgabe. Ich habe alle Infos die ich habe gepostet. Und nun soll ich im ersten Schritt die Symantik und Semantik anhand der Bildschirmausgabe und Klassendefinition angeben für die 5 markierten Punkte (1) (2) (3) (4) (5).

    Die darauffolgende Aufgabe ist dann so gestellt: Definieren Sie die Methode (2) ausserhalb der Klasse "rechteck" (einen Konstruktor mit zwei float-Parametern zum Setzen der Attribute "laenge" und "breite")

    Zusammenfassung: erstmal Syntax und Semantik der Bildschirmausgabe und dann die Methode definieren, also den Konstruktor erstellen. Wenn du einen Tip hast wie ich die 2. Aufgabe lösen kann bin ich dir auch sehr dankbar!

    Ich hoffe du hast mich verstanden, ansonsten stell ich nochmal die komplette Prüfung rein in der Reihenfolge in der ich sie bearbeiten soll.



  • sorry aber ich habs nicht so mit Fachausdruecken... @ Symantik und Semantik



  • TObi,

    die Antwort die du mir gegeben hast geht schon in die richtige Richtung.
    Vielleicht kann mir sonst noch wer einen Hinweis zur Lösung geben?

    Vielen Dank schon mal vorab für eure Hilfe!

    Gruß
    fm2008



  • Jo,

    bin hier gerade on tour, werd dir morgen danndie klasse schreiben oder was du hier sonstso brauchst, wenns nicht vorher nen anderer getan hat.

    Gruß Tobi-



  • Hallo Tobi at WLan,

    danke dass du mir hilfst.

    nochmal kurz zusammengefasst was ich brauche:

    -Syntax und Semantik beschreiben aufgrund des Bildschirmausdrucks und der Infos aus der Klassendefiniton

    -Eine Methode außerhalb der Klasse "rechteck" definieren (einen Konstruktor mit zwei float-Parametern zum Setzten der Attribute "laenge" und "breite")



  • http://de.wikipedia.org/wiki/Formale_Semantik => Sematik

    #include <cstdio>
    #include <iostream>
    #include "recteck.hpp"
    
    int rechteck::anzahl=0; // (1)
    
    int main()
    {
        std::cout << "Anzahl der Rechtecke: " << rechteck::anzahl_rechtecke() std::<< endl; // (3)
        rechteck r1(1,2), r2(2,3), r3; // (2)
        std::cout << "Anzahl der Rechtecke: " << rechteck::anzahl_rechtecke() << std::endl; // (3)
        r1.flaeche(); // (4)
        r2.flaeche(); // (4)
        r3.flaeche(); // (5)
    
        std::system("pause");
    }
    

    So, jetzt kommen wir mal zum Erklärbär 😉
    (1) Initialisierung der statischen Membervariable anzahl(vom Typ int) mit 0.
    (3) Aufruf der statischen Memberfunktion anzahl_rectecke, die (wahrscheinlich) den Wert der statischen Membervariable anzahl zurückgibt. Danach wird diese Zahl mit "Anzahl der Rechtecke:" ausgegeben.
    (2) Konstruktoraufruf mit 2 Integer. Diese werden implizit gecastet (nach float). r3 ruft den Default-Konstruktor auf. Im Konstruktor wird die folgende Ausgabe getätigt:

    std::cout << "Konstruktor" << rechteck::anzahl++ << " Rechteck" << std::endl;
    

    Dadurch wird auch direkt die Anzahl erhöht (a++).
    (4), (5) Aufruf der Funktion flaeche, die keine Parameter verlangt und die Fläche ausgibt (statt die sinnvoller weise zurück zu geben). Dabei sollte flaeche const sein, was aber oft schonmal weggelassen wird, wenn der Ersteller nicht sauber programmiert.

    void rechteck::flaeche() const
    {
        std::cout << "Flaeche: " << breite * laenge << std::endl;
    }
    

    wäre das was da verlangt ist.

    Eigtl. muss es auch noch einen überladenen Destruktor geben, der rechteck::anzahl wieder dekrementiert(wenn ein Rechteck zerstört wird, gibt es zwangsmäßig eines weniger 😉 ). Kann man aber aus dem Beispiel nicht wirklich entnehmen!



  • Danke (D)Evil!

    hast mir echt weitergeholfen, das mit Syntax und Semantik ist nicht so mein Themengebiet, aber mit eurer Hilfe wirds schon langsam.

    Gruß
    gm2008


Anmelden zum Antworten