Programmierung 2 |
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Welche Membervariablen hat denn die Klasse CRectangle?
|
|
24.09.2017 23:34 |
|
|
Victor unregistriert
|
|
Meinst du das ich die get Methoden bottomLeftCorner und getTopRoght aufrufen soll ?
|
|
25.09.2017 06:02 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Du kannst die Methoden aufrufen und das könnte i. A. sogar vorteilhaft sein, aber in diesem Fall könntest Du auch einfach direkt auf die Membervariablen zugreifen.
Nochmal: Was sind denn die drei Membervariablen der Klasse CRectangle? Tipp: Schau doch mal in die dazugehörige Headerdatei. Dort sind die deklariert. Und noch ein Tipp: Um Membervariablen von anderen (z. B. lokalen/auto Variablen innerhalb einer Methode) unterscheiden zu können, wird in Deinen Beispielen offenbar die Konvention benutzt, vor Membervariablen ein "m_" zu schreiben ("m" wie "member").
Gruß
Marco
PS: Warum kannst Du eigentlich nicht einfach mal machen, was ich sage? Ich hatte nach den Membervariablen gefragt und Du schreibst dann was von gettern. Warum kannst Du dann nicht einfach auch mal die Membervariablen nennen? Wenn Du nicht weißt, was eine Membervariable ist, dann frag das nach. Wenn sonst was an meiner Frage unklar ist bitte auch. Aber ignorier doch nicht ständig was ich schreibe und komme mit etwas ganz anderem! Ich versteh Dich einfach nicht...
|
|
25.09.2017 10:39 |
|
|
Victor unregistriert
|
|
Ah die Variablen
m_bottomLeft;
m_topRight;
m_fillChar
Aber wie soll ich die jetzt genau im Code einbauen
Komme irgendwie nicht auf die Idee
|
|
25.09.2017 13:29 |
|
|
Victor unregistriert
|
|
Soll ich jetzt die Zahlen in der for Schleife irgendwie mit den Member Variablen ersetzen?
|
|
25.09.2017 14:03 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Ja, mehr oder weniger schon. Allerdings brauchst Du für die for-Schleifen ja wirklich Koordinatenwerte, also int-Zahlen. Die Member m_bottomLeft und m_topRight sind aber Objekte der Klasse CPoint, also keine int-Zahlen.
Um an die jeweilgen Koordinaten der Punkte zu kommen musst Du dann jeweils getX() bzw getY() aufrufen.
Das Füllzeichen hast Du direkt als char in der Member-Variable m_fillchar und kannst das für den setPoint-Aufruf direkt verwenden.
Versuche das mal.
Gruß
Marco
|
|
25.09.2017 15:34 |
|
|
Victor unregistriert
|
|
Puuh bin irgendwie so überlastet .
Bei meinen Ideen werden nur fehler amgezeigt
for(int j = 5; 15>=j;j++){
screen.getX();
Vor dem getX muss ich doch irgendwas schreiben oder ?
Ich dachte screen ,aber nur Fehler .
Verdammt
|
|
25.09.2017 17:00 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Warum screen.getX()? Du willst doch nicht die x-Koordinate von screen (was auch immer das sein sollte, macht ja gar keinen Sinn) sondern von der jeweiligen Ecke haben. Deshalb fragte ich Dich doch nach den Membervariablen, weil zwei davon die beiden Eckpunkte repräsentieren. Von denen willst Du die X- und Y-Werte haben!
Warum an dieser Stelle? Schau doch mal: Die Laufvariable j der äußeren for-Schleife wird doch in der setPoint()-Methode für die Y-Koordinate des zu setzenden Punktes verwendet. Diese soll doch zwischen der Y-Koordinate des unteren Eckpunkts und der des oberen Eckpunkts laufen.
Du sollst also die 5 und die 15 von der äußeren for-Schleife durch die jeweiligen y-Koordinaten-Werte der beiden Eckpunkte ersetzen.
Genau so sollst Du in der inneren for-Schleife die Werte 5 und 25 des minimalen und maximalen X-Wertes durch die X-Koordinaten der beiden Eckpunkte ersetzen.
Nochmal: Wie kommst Du z. B. an die y-Koordinate des Eckpunktes unten-links?
Gruß
Marco
|
|
25.09.2017 17:23 |
|
|
Victor unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
void CRectangle::draw(CScreen& screen) const
{
for(int j = m_topRight.getX(); m_topRight.getX()>=j;j++){
for(int i = m_bottomLeft.getY(); m_bottomLeft.getY()>=i; i++) {
screen.setPoint(m_topRight,m_bottomLeft,´#`);
}
}
}
|
|
hmm irgendwas passt immer noch nicht?
|
|
25.09.2017 18:23 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Ja, ich weiß auch nicht... warum ersetzt Du jetzt denn i und j im Aufruf von setPoint()?
Weißt Du immer noch nicht, wie eine for-Schleife funktioniert?
Vorher stand in der ersten for Klammer noch 5 und 15, jetzt hast Du bei beiden denselben Wert rein geschrieben. Das muss doch auch Dir auffallen, dass da was nicht stimmt, oder?
Für welche Werte standen denn die 5 und die 15 oder die 5 und die 25? Welche Koordinaten von welchen Punkten waren das denn? Ich hab’s doch sogar schon geschrieben gehabt.
Sag mal ehrlich: verstehst Du überhaupt irgendetwas von dem allem hier? Ich schreib doch wirklich schon in einer Art, dass es selbst jemand ganz ohne Vorwissen irgendwie verstehen sollte, aber bei Dir habe ich ehrlich nicht den Eindruck. Du rätst einfach nur die ganze Zeit rum. Das bringt doch einfach rein gar nichts!
|
|
25.09.2017 21:42 |
|
|
Victor unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
void CRectangle::draw(CScreen& screen) const
{
for(int j = m_topRight.getX(); m_topRight.getX()>=j;j++){
for(int i = m_bottomLeft.getY(); m_bottomLeft.getY()>=i; i++) {
screen.setPoint(j , i,´#`); hier meckert er ?
}
}
}
|
|
Ist das bisschen besser ?
|
|
26.09.2017 01:06 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Ich weiß nicht, warum Du die Bedeutung von i und j jetzt vertauscht hast, vorher hatten wir i für die x-Koordinate und j für y, aber das macht im Prinzip nichts.
Aber immernoch hast Du für die Schleifen jeweils dieselbe Zahl für Anfang und Ende. Das kann doch nicht stimmen! Bei welcher x-Koordinate von welchem Punkt muss die erste Schleife anfangen? Von welchem Punkt muss die x-Koordinate sein, bei dem sie aufhört, das kann doch nicht derselbe Punkt sein! Genauso für die beiden y-Koordinaten. Versuche doch mal zu verstehen, was wir hier überhaupt tun!
Der Fehler, den ich sehe, sind einfach die Anführungszeichen um das Füllzeichen. Die sind bei Dir irgendwie krumm... das müssen gerade Hochkommata sein, so wie wir es auch die ganze Zeit vorher hatten.
Aber eigentlich sollst Du ja auch das hier fest angegebene Füllzeichen durch den Wert einer weiteren Membervariable ersetzen. Was musst Du hier noch machen?
|
|
26.09.2017 07:48 |
|
|
Victor unregistriert
|
|
die erste Vorschleife muss doch bei der x Koordinate beginnen ,wie du gesagt hast oder ?
Also getX()
Daher habe ich das geschrieben :
for(int j = m_topRight.getX(); m_topRight.getX()>=j;j++)
Ist das überhaupt richtig ?
Vielleicht gehen wir Schritt für Schritt vor.
Ich weiss es ist für dich leider mühsam ,aber mir fällt das einfach sau schwer.
Was soll ich machen.
|
|
26.09.2017 10:14 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Die X Koordinate doch aber nicht zweimal von demselben Punkt! Das wäre dann ja immer nur ein und derselbe Wert, wie willst Du dann eine komplett Zeile bekommen. Also: nicht zweimal topRight, sondern einmal bottomLeft und einem topRight!
Gruß
Marco
|
|
26.09.2017 11:47 |
|
|
Victor unregistriert
|
|
Bin irgendwie gerade verwirrt ,warum bei mir im Code 2 mal der gleiche Wert aufgerufen wird .
Liegt wohl daran ,dass ich nicht so fit bin beim proggen
So sah der code ja mal aus:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
void CRectangle::draw(CScreen& screen) const
{
for(int j = 5; 15>=j;j++){
for(int i = 5; 25>=i; i++) {
screen.setPoint(i, j, '#');
}
}
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
void CRectangle::draw(CScreen& screen) const
{
for(int j =m_topRight.getX() ; 15>=j;j++){
for(int i =m_bottomLeft.getY() ; 25>=i; i++) {
screen.setPoint(i, j, '#');
}
}
|
|
Ich denke das du meinst ,dass ich nicht zweimal topRight und bottomLeft in der for Schleife schreiben soll?
|
|
26.09.2017 12:27 |
|
|
|