Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Programmierung 2 » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (13): « erste ... « vorherige 8 9 [10] 11 12 nächste » ... letzte » Neues Thema erstellen Thema ist geschlossen
Zum Ende der Seite springen Programmierung 2
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Erstens: Bitte nenne den CSCREEN nicht rect1. Deine Rechtecke sind doch a und b!
Zweitens: draw() ist eine Methode der Klasse CRectangle und nicht CScreen! Sie hat ein Argument vom Typ SCreen, aber ist trotzdem Teil der Rechteckklasse.

Ich hab immer noch den Eindruck, dass Du überhaupt nicht verstehst, was da gemacht wird und warum. Dann frage doch bitte entsprechend nach und probieren nicht alles mögliche aus, bis ich irgendwann sage: "so stimmts"!

Gruß
Marco
29.09.2017 00:57 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Warum Du die print() Methode aufrufen sollst:
Das ist in der Aufgabe eigentlich auch beschrieben: die CSreen Klasse merkt sich in einem großen Array die Character für eine Konsolen-Seite mit 80 Zeichen Breite und 24 Zeilen (früher hatten Computer oft Bildschirme, die nur Zeichen anzeigen konnten und 80 Spalten und 25 Zeilen hatten. Vermutlich kommt die Aufgabe aus dieser Zeit...)
Allerdings merkt sich die Klasse zuerst alle Zeichen in diesem Array, ohne irgendetwas auf dem Bildschirm auszugeben, so lange nur setPoint() aufgerufen wird.
Erst der Aufruf von print() gibt die 24 Zeilen mit jeweils 80 Zeichen auf dem Bildschirm aus.

Du bereitest also mit setPoint() Aufrufen eine Bildschirmseite vor. Erst wenn alles fertig ist (z. B. alle Rechtecke gezeichnet sind), wird diese vorbereitete Bildschirmseite ausgegeben. Diesen Schritt macht print().

Gruß
Marco
29.09.2017 01:12 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meinst du dass ich es jetzt so machen soll oder wie ?

0;

CRectangle rect1;
rect1.draw();
rect1.print();
29.09.2017 14:13
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein. Schau doch einfach mal, welche Methode in welcher Klasse ist und welche Argumente die erwarten!
code:
1:
2:
3:
4:
5:
6:
CRectangle rect1(CPoint(4, 2), CPoint(26,10), 'x');
CScreen screen;
rect1.draw(screen);
screen.print();


Du verstehst überhaupt gar keinen Zusammenhang, oder? Ich weiß wirklich nicht, was ich Dir noch schreiben soll. Sag mir doch, wo Du hängst!

Gruß
Marco
29.09.2017 15:11 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

CScreen screen;
rect1.draw(screen);

Warum fügst du hier die Variable screen rein ?

Peile ich nicht großes Grinsen
30.09.2017 08:28
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das ist es halt, was ich mit "fehlenden Grundlagen" meine. Ich finde es zwar einerseits gut, dass Du endlich mal eine solche Frage stellst und nicht nur blind rumprobierst, aber sie zeigt halt deutlich, dass die Probleme schon sehr viel tiefer anfangen und man zuerst solche Dinge mal klären muss. Das ist aber an sich nicht schlimm, nur wenn man es nie erfragt und mit Trial-and-Error versucht weiter zu kommen, dann werden sich solche Fragen auch kaum jemals klären lassen.

Die Definition der Methode draw sah ja so aus:
code:
1:
void CRectangle::draw(CScreen& screen) const {...}

Was bedeuten die einzelnen Angaben hier? Lass uns die einfach mal durch gehen.
Es fängt an mit "void". Das ist der Typ des Rückgabewerts. "void" ist aber gar kein echter Typ sondern steht für "nichts", sprich die Funktion hat keine Rückgabe. Das bedeutet aber auch, dass sie kein "return ...;" am Ende haben muss, was ja sonst dastehen muss, um etwas zurück geben zu können.
Als nächstes kommt die CRectangle::draw. Das sagt, dass wir hier die Funktion namens draw der Klasse CRectangle definieren wollen (also ausprogrammieren wollen), die aber innerhalb der Klasse, also in der Header-Datei, schon deklariert worden sein musste (schau Dir die Header-Datei an, da steht die draw auch schon drin).
Dann kommt eine Klammer und in der Klammer eine Argumentenliste. Hier besteht die Liste aus nur einem Element, nämlich einer Referenz auf das CScreen-Objekt namens screen. Das Kaufmanns-und hinter CScreen steht für "Referenz von" dem was vornedran steht, also Referenz auf ein CScreen.
Für was ist das mit den Refernezen gut? Suche mal im Internet nach "call-by-reference" im Unterschied zu "call-by-value". Kurz gesagt: Wir wollen das screen-Objekt verändern und deshalb brauchen wir eine Referenz auf das Objekt des Aufrufers und nicht eine Kopie davon, die uns ein call-by-value geben würde.
Ganz am Ende steht dann noch ein "const". Das bedeutet nur, dass die Methode selbst am CRectangle-Objekt nichts verändert. So würde man einen Fehler bekommen, wenn es die Funktion doch versuchen würde. Ändern bedeutet dann hier, dass eine Memebervariable des CRectangle-Objekts, für das die Methode aufgerufen wird, verändert werden würde.

Sprich: Hier ist die Signatur der draw-Methode schon so, dass sie in ihrer Argumentenliste ein CScreen-Objet erwartet. Deshalb muss sie auch so aufgerufen werden.
Aber was Du mitlerweile eigentlich schon verstanden haben solltest ist, warum die draw-Methode ein CScreen braucht, um etwas tun zu können. Wenn Du das immer noch nicht verstanden hast, dann frage ich mich, für was wir die letzten ~5 Seiten in diesem Thread überhaupt gemacht haben.
Die Aufgabe der draw-Methode ist doch, das Rechteck für das diese Methode aufgerufen wird, auf einen Bildschirm zu "zeichnen". Dazu verwendet sie die Methode setPoint des übergebenen CScreen-Objekts. Die Frage, warum es das übergeben bekommt, wenn alles was sie tut letztlich ist, die setPoint von einem solchen Objekt mehrfach aufzurufen, erscheint mir deshalb ziemlich merkwürdig. Kannst Du mir genau sagen, warum Dich das überrascht (hat) und warum Du gedacht hättest, das könnte auch ohne die Übergabe funktionieren?

Gruß
Marco
30.09.2017 11:47 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ist mein Konstruktor richtig implementiert?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
#include "CDrawing.h"

CDrawing::CDrawing(int initialSize)
{
    if(initialSize>0 && initialSize <=0){
        
        m_initialSize = initialSize;
    }
    else{
        m_initialSize = 10;
    }
    if(m_nextFree>=0 && m_nextFree<=m_arraySize){
        
        m_nextFree= nextFree;
    }
    else{
        
        m_nextFree=0;
    }
    if(m_arraySize>0){
        m_arraySize= arraySize;
    }
}

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






code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

#ifndef CDRAWING_H
#define CDRAWING_H


class CDrawing
{
private:
    CRectangle* m_rectangles;
    int m_nextFree = 0;
    int m_arraySize;

public:
    CDrawing(int initialSize = 10);
    void ~CDrawing();
    void add(const CRectangle& rectangle);
    void print();
    void drawFiltered(CScreen& screen, char filter =0);

};

#endif // CDRAWING_H


Ich weiss das das iostream usw fehlt ,aber stimmt der code soweit?

Victor hat dieses Bild (verkleinerte Version) angehängt:
g.png

11.10.2017 22:58
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ne idee String?
12.10.2017 22:31
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Schon, aber es macht halt alles wieder wenig Sinn...
Es steht etwas von einem Array in der Aufgabe, in dem die Rechtecke gespeichert werden sollen und das Du im Konstruktor anlegen und im Destruktor freigeben sollst. Davon zb erkenne ich gar nichts.

Gruß
Marco
13.10.2017 01:39 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi String ,bin froh dass du wieder zurück bist großes Grinsen

Habe mal Speicher allokiert und wieder bei Destruktor freigegeben .

Passt es so ?
Sind die Zusicherungen vom Konstruktor richtig?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:

#include "CDrawing.h"
#include <ostream>
using namespace std;
CDrawing::CDrawing(int initialSize)
{
    if(initialSize>0 && initialSize <=10){

        m_initialSize = initialSize;
    }
    else{
        m_initialSize = 10;
    }
    if(0<= m_nextFree <= m_arraySize){

        m_nextFree= nextFree;
    }
    else{

        m_nextFree=0;
    }
    if(m_arraySize>0){
        m_arraySize= arraySize;
    }

    CRectangle* m_rectangles = new Crectangle;
}

CDrawing::~CDrawing()
{
    delete[] m_rectangles;
}


13.10.2017 12:45
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das hat keinen Sinn. Ich schließe das Thema jetzt.

- Es ist nicht erkennbar, dass Du irgendetwas von dem verstehst, was Du tun sollst
- Du fragst nicht nach Verständnis
- Du probierst wild und testest offensichtlich nicht selbst
- Der ganze Thread hier führt einzig dazu, dass Du eine Lösung erhältst, ohne wesentliche Eigenleistung

Zitat:

Das Informatikerboard gibt „Hilfe zur Selbsthilfe“. Diese besteht aus Tipps und Hinweisen, so dass die Fragesteller den Stoff verstehen und die Aufgaben selbst bewältigen können.


Dies sehe ich nicht mehr als erfüllt an, da Seitens des Fragestellers keine Eigenleistung, welche über unreflektiertes Ausprobieren hinaus geht, erkennbar ist.

Besten Gruß,

Karlito
13.10.2017 13:18 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von Victor

Passt es so ?
Sind die Zusicherungen vom Konstruktor richtig?

Nein

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:

#include "CDrawing.h"
#include <ostream>
using namespace std;
CDrawing::CDrawing(int initialSize)
{
    if(initialSize>0 && initialSize <=10){ //Warum initialSize <=10?

        m_initialSize = initialSize; //m_initialSize existiert nicht!
    }
    else{
        m_initialSize = 10; 
    }
    if(0<= m_nextFree <= m_arraySize){ // Was soll das? _m_nextfree ist immer 0 hier. Das ergibt keinen Sinn! Welchen sinn hat denn m_nextFree?

        m_nextFree= nextFree; //nextFree existiert hier nicht!
    }
    else{

        m_nextFree=0;
    }
    if(m_arraySize>0){
        m_arraySize= arraySize; //arraySize exisitert nicht!
    }

    CRectangle* m_rectangles = new Crectangle; //Das ist kein gültiges Statement
}

CDrawing::~CDrawing()
{
    delete[] m_rectangles; 
}




Formuliere doch mal bitte in eigenen Worten, welchen Sinn die Deklarationen in der Header-Datei haben und was der Konstruktor machen soll.

Gruß,

Karlito
13.10.2017 15:28 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ehrlich gesagt verstehe ich jetzt gar nicht was ich beim Konstruktor genau machen soll?
Normalerweise ist ja im Konstruktor nur die Variable initialSize vorhanden .

Spielen in diesem Fall die anderen Zusicherungen überhaupt keine Rolle?

In der Header sind mehrere Variablen gegeben um etwas zu zeichnen ?
13.10.2017 16:25
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Der Konstruktor initialisiert ein Objekt beim erstellen. D.h. er tut alles, was notwendig ist, damit man ein Objekt einer Klasse verwenden wann.

Dazu folgende Frage:
- Was ist der Unterschied zwischen Objekt und Klasse?

Diese "Zusicherungen" sind schon wichtig, aber:
- Was genau willst Du denn zusichern?
- Was bzweckst Du mit deinen Zusicherungen, die Du formuliert hast?

Gruß,

Karlito
13.10.2017 17:13 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Genau das ist ja meine Frage . großes Grinsen

Ich verstehe an der Aufgabe nicht genau was die von mir haben wollen .

Ich habe einfach die Zusicherungen beachtet , die ich dachte richtig zu sein großes Grinsen
13.10.2017 17:59
Seiten (13): « erste ... « vorherige 8 9 [10] 11 12 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Thema ist geschlossen
Informatiker Board » Themengebiete » Praktische Informatik » Programmierung 2