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 7 8 [9] 10 11 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

also:
Du hast doch das Rechteck definiert mit den beiden Eckpunkten. Da muss doch dann x von links nach rechts laufen und y von oben nach unten. Dann ist es doch logisch, dass Du die x Koordinate für den Start der äußeren for-Schleife aus dem Eckpunkt links (-unten) und die für das Ende der for-Schleife aus dem Eckpunkt recht (-oben) nehmen musst und nicht zweimal von demselben Eckpunkt.
Genau so für die y-Koordinate. Die Schleife muss doch von unten nach oben laufen, also nimmst Du die y-Koordinate vom unteren Punkt (was auch gleichzeitig der links ist, aber das spielt bei der y-Koordinate keine Rolle) und als Ende der Schleife dann halt die y-Koordinate des top...irgendwas Punktes.
Das ist doch wirklich einfachste Logik. Mit Programmieren hat das doch noch gar nichts zu tun! Sag doch bitte mal, was Du mit dem Rechteck, den Eckpunkten und so weiter immer noch nicht verstehst! Nimm doch nochmal das Übungsblatt und schau Dir die Zeichnung an wo die Eckpunkte und das Rechteck gezeichnet ist. Ich habe den Eindruck, Du hast immer noch überhaupt gar keine Ahnung, von was die Rede hier ist.

Was soll ich denn noch machen, ich hab das mit den Eckpunkten jetzt bestimmt schon zum 5ten-mal versucht zu erklären. Ich habe nicht das Gefühl, Du würdest auch nur ansatzweise irgendetwas verstehen. Sag doch bitte mal, wie siehst Du das denn?

Gruß
Marco
26.09.2017 13:08 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

AH ok das mit dem hinlaufen der Koordinaten habe ich jetzt verstanden großes Grinsen

Ich habe jetzt bei der oberen for schleife beide getx genannt ,weil ja man nur die X Koordinate laufen lässt?

Also

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_bottomLeft.getX(); m_topRight.getX()>=j;j++){

	for(int i = m_bottomLeft.getY();  m_topRight.getY()>=i; i++) {
	    screen.setPoint(j , i,´#`);




	}
    }
}


Müsste die obere X Koordinate nicht von oben nach unten laufen ?
War mir nicht sicher ob du dich verschrieben hast ?
26.09.2017 14:49
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

Ist egal, ob man von oben nach unten von links nach rechts oder umgekehrt geht. Wir haben hier allerdings Zahlen. Wenn Du bei der kleineren Zahl anfängst (was hier wohl unten oder links entspricht), dann musst Du bis zur größeren hoch zählen (i++ bzw. j++), falls Du es unbedingt anders machen wolltest, dann müsstest Du halt runter zählen.
Alles was Du dann ändern würdest, wäre ja nur die Aufrufreihenfolge der setPoint() Mehtode. Die ist aber vollkommen egal, es ist nur wichtig, dass sie einmal für alle "Punkte" innerhalb des Rechtecks aufgerufen wird.
Du hast immer noch das Füllzeichen erstens mit den falschen Hochkommata geschrieben und vor allem brauchst Du auch gar keine Anführungszeichen, wenn Du einfach die Membervariable verwenden würdest, wie Du es so wie so tun musst.
Also bitte das fest angegebene Füllzeichen durch die entsprechende Membervariable der Klasse CRectangle ersetzen.

Gruß
Marco
26.09.2017 15:31 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

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:

void CRectangle::draw(CScreen& screen) const
{
    for(int j = m_bottomLeft.getX(); m_topRight.getX()>=j;j++){

	for(int i = m_bottomLeft.getY();  m_topRight.getY()>=i; i++) {
	    screen.setPoint(j , i,m_fillChar);   fehler?



	}
    }
}


Trotzdem noch ein Fehler ?

Description Resource Path Location Type
Invalid arguments '
Candidates are:
void setPoint(CPoint, char)
' CRectangle.cpp /CRectangle line 93 Semantic Error
no matching function for call to 'CScreen::setPoint(int&, int&, const char&)' CRectangle.cpp /CRectangle line 93 C/C++ Problem
candidate expects 2 arguments, 3 provided CScreen.h /CRectangle line 33 C/C++ Problem
candidate: void CScreen::setPoint(CPoint, char) CScreen.h /CRectangle line 33 C/C++ Problem
26.09.2017 16:34
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

Ah, ok. Die Methode erwartet ein CPoint Objekt und nicht die beiden Koordinaten einzeln. Wie bekommst Du aus den beiden Koordinatenwerten i und j ein CPoint Objekt gebaut? Achte darauf, dass j die x-Koordinaten durchläuft und i die y-Koordinaten und der CPoint-Konstruktor entsprechend aufgerufen werden muss.

Gruß
Marco
26.09.2017 16:56 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

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_bottomLeft.getX(); m_topRight.getX()>=j;j++){

	for(int i = m_bottomLeft.getY();  m_topRight.getY()>=i; i++) {
	    screen.setPoint(Cpoint(j , i,m_fillChar));




	}
    }
}


So? verwirrt
26.09.2017 22:17
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

Also, ist ja schon näher dran...

Allerdings heißt die Klasse CPoint (großes P) und der Konstruktor von CPoint nimmt nur die beiden Koordinatenwerte als Argument, Du hast jetzt noch in die Klammer vom CPoint Konstruktor das Füllzeichen mit rein geschrieben. Sprich: die erste schließende Klammer muss vor dem Füllzeichen zu gehen.

Gruß
Marco
26.09.2017 23:54 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

Will es jetzt irgendwie testen

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:

// Header-Dateien
#include <iostream>		// Header für die Standard-IO-Objekte (z.B. cout, cin)
#include <stdlib.h>
// TODO: Fügen Sie hier weitere benötigte Header-Dateien der
// Standard-Bibliothek ein z.B.
// #include <string>

using namespace std;	// Erspart den scope vor Objekte der
						// C++-Standard-Bibliothek zu schreiben
						// z.B. statt "std::cout" kann man "cout" schreiben

// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
// #include "CFraction.h"
#include "CPoint.h"
#include "CRectangle.h"
#include "CScreen.h"


// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main() {
    CRectangle a(CPoint(5, 5), CPoint(25, 15)), b(CPoint(1, 2), CPoint(3, 4));
    if(a ==b)
        cout << "Rechtecke gleich" << endl;
    else
        cout << "Rechtecke verschieden" << endl;
    return 0;

    CScreen a.draw();

}



In unserem Fall heisst es ja nicht rect1 sondern a

oder?
Also a.draw?
Oder wie genau ?


Schwere Geburt aber geschafft
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_bottomLeft.getX(); m_topRight.getX()>=j;j++){

	for(int i = m_bottomLeft.getY();  m_topRight.getY()>=i; i++) {
	    screen.setPoint(CPoint(j , i),m_fillChar);




	}
    }
}

27.09.2017 00:19
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

Ja, a.draw(...) ist im Prinzip richtig. Allerdings hat die Methode ja ein Argument vom Typ CScreen. Ich kenne diese CScreen Klasse leider nicht, deshalb weiß ich nicht, was man da machen muss. Vielleicht genügt es a.draw(CScreen()) zu schreiben? Hast Du dazu noch mehr Unterlagen? Oder die Klasse selbst wenigstens?
27.09.2017 01:49 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

Ich hab gerade noch mal das Aufgabenblatt angesehen. Da steht ja alles soweit beschrieben. Du musst erst ein neues Objekt vom Typ CScreen anlegen. Dann rufst Du die draw auf, der Du das neue CScreen-Objekt übergibst. Danach musst Du noch die print() Methode des CScreen Objekts aufrufen, damit es auch ausgegeben wird.
27.09.2017 01: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
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

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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:

* CScreen.h
 *
 *  Created on: 05.01.2015
 *      Author: mnl
 */

#ifndef ASCIISCREENSOLUTION_MYCODE_CSCREEN_H_
#define ASCIISCREENSOLUTION_MYCODE_CSCREEN_H_

#include "CPoint.h"

/**
 * Dies Klasse repräsentiert einen Bereich von 80x24 "Punkten",
 * die als ein beliebiges Zeichen dargestellt werden können.
 */
class CScreen
{
private:
	/** Der Speicher für die Darstellung der Punkte. */
	char m_content[24*80];

public:
	/**
	 * Erzeugt eine neue Darstellung, bei der alle Punkte
	 * auf den Wert '.' gesetzt sind.
	 */
	CScreen();

	/**
	 * Setzt den angegebenen Punkt auf das angegebene Zeichen.
	 */
	void setPoint(CPoint point, char content);

	/**
	 * Gibt die Darstellung aus.
	 */
	void print() const;

	/**
	 * Löscht die Darstellung. Alle Zeichen werden wieder auf
	 * '.' gesetzt.
	 */
	void clear();
};

#endif /* ASCIISCREENSOLUTION_MYCODE_CSCREEN_H_ */




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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:

/*
 * CScreen.cpp
 *
 *  Created on: 05.01.2015
 *      Author: mnl
 */

#include <iostream>
using namespace std;

#include "CScreen.h"

CScreen::CScreen()
{
	clear();
}

void CScreen::setPoint(CPoint point, char content)
{
	if (point.getX() < 0 || point.getY() < 0
			|| point.getY() * 80 + point.getX() >= 24*80) {
		return;
	}
	m_content[point.getY() * 80 + point.getX()] = content;
}

void CScreen::print() const
{
	cout << "    ";
	for (int col = 0; col < 80; col++) {
		cout << col / 10;
	}
	cout << endl;
	cout << "    ";
	for (int col = 0; col < 80; col++) {
		cout << col % 10;
	}
	cout << endl;
	for (int row = 23; row >= 0; row--) {
		if (row < 10) {
			cout << ' ';
		}
		cout << row << ": ";
		for (int col = 0; col < 80; col++) {
			cout << m_content[row * 80 + col];
		}
		cout << endl;
	}
	cout << endl;
}

void CScreen::clear() {
	for (int i = 0; i < 24*80; i++) {
		m_content[i] = '.';
	}
}









Zeigt bei der main Probleme an ,dein beschriebenes Problem

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:
37:

// Header-Dateien
#include <iostream>		// Header für die Standard-IO-Objekte (z.B. cout, cin)
#include <stdlib.h>
// TODO: Fügen Sie hier weitere benötigte Header-Dateien der
// Standard-Bibliothek ein z.B.
// #include <string>

using namespace std;	// Erspart den scope vor Objekte der
						// C++-Standard-Bibliothek zu schreiben
						// z.B. statt "std::cout" kann man "cout" schreiben

// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
// #include "CFraction.h"
#include "CPoint.h"
#include "CRectangle.h"
#include "CScreen.h"


// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main() {
    CRectangle a(CPoint(5, 5), CPoint(25, 15)), b(CPoint(1, 2), CPoint(3, 4));
    if(a ==b)
        cout << "Rechtecke gleich" << endl;
    else
        cout << "Rechtecke verschieden" << endl;
    return 0;

    CScreen rect1;
  rect1.draw();

}


28.09.2017 09:27
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 nennst Du das CScreen-Objekt "rect1"? Dafür aber die CRectangle-Objekte a und b? Kein Wunder, dass Du immer so verwirrt bist... Wenn es auch technisch keine große Rolle spielen mag, wie die Variablen benannt werden, ist es doch für Menschen, die das lesen irgendwie verwirrend, finde ich.
Ganz am Ende in der main musst Du noch die draw() Methode Deines CScreen-Objekts aufrufen (das, was jetzt rect1 heißt).

Gruß
Marco
28.09.2017 10:10 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

rect1.draw();

Ich dachte damit rufe ich es aus ?
28.09.2017 10:44
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

Ach, nee, nicht draw()... diese print() Methode wars. Ich hatte das aber auch schon oben mal geschrieben.
28.09.2017 11:09 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

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:
37:

// Header-Dateien
#include <iostream>		// Header für die Standard-IO-Objekte (z.B. cout, cin)
#include <stdlib.h>
// TODO: Fügen Sie hier weitere benötigte Header-Dateien der
// Standard-Bibliothek ein z.B.
// #include <string>

using namespace std;	// Erspart den scope vor Objekte der
						// C++-Standard-Bibliothek zu schreiben
						// z.B. statt "std::cout" kann man "cout" schreiben

// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
// #include "CFraction.h"
#include "CPoint.h"
#include "CRectangle.h"
#include "CScreen.h"


// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main() {
    CRectangle a(CPoint(5, 5), CPoint(25, 15)), b(CPoint(1, 2), CPoint(3, 4));
    if(a ==b)
        cout << "Rechtecke gleich" << endl;
    else
        cout << "Rechtecke verschieden" << endl;
    return 0;

    CScreen rect1;
  rect1.draw();
  rect1.print();

}



Immer noch Fehler ?
Description Resource Path Location Type
'class CScreen' has no member named 'draw' main.cpp /CRectangle line 30 C/C++ Problem
Method 'draw' could not be resolved main.cpp /CRectangle line 30 Semantic Error

Ich meine in der Aufgabenstellung steht ja ,dass ich die print Methode aufrufen soll,aber warum ?
Das verstehe ich nicht großes Grinsen
28.09.2017 23:41
Seiten (13): « erste ... « vorherige 7 8 [9] 10 11 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Thema ist geschlossen
Informatiker Board » Themengebiete » Praktische Informatik » Programmierung 2