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 5 6 [7] 8 9 nächste » ... letzte » Neues Thema erstellen Thema ist geschlossen
Zum Ende der Seite springen Programmierung 2
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
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

Ich weiss das hier meine Idee nicht ganz so richtig ist.
Aber das sind irgendwie die Gedankengänge die ich hier rein geschrieben habe.

Für die X Koordinate muss ich ja die for schleife über die X Werte gehen lassen ,daher habe ich getX genommen.

Aber das zeigt nur Fehler großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
void CRectangle::draw(CScreen& screen) const
{
	for(int getX() = 0; getX()>0 ; getX()++){


		setPoint(m_x,#);
	}
}



Ich hoffe der Code hat wenigstens bisschen Logik?
19.09.2017 09: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

Kannst du mir noch weiter helfen string ?
Besser bisschen Hilfe von dir als gar keine großes Grinsen
Ohne deine Hilfe schaffe ich gar nichts
19.09.2017 20:35
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
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 hier:
code:
1:
for(int getX() = 0; getX()>0 ; getX()++){...}

Ist in so vieler Hinsicht falsch und blödsinnig, dass ich gar nicht weiß, wo ich anfangen soll.
getX() ist doch keine Variable (genauer: kein LValue), der Du eine 0 zuweisen könntest oder die Du eins hochzählen könntest!
Warum sollte die Schleife bei 0 anfangen?
Was sollte die Bedingung ">0" bringen? Das ist beim ersten Durchlauf dann ja nie wahr, wenn Du vorher den Schleifenzähler mit 0 initialisiert hast!

Für mich zeigt das, dass Du noch nicht mal mit so eine grundlegende Sache wie eine for-Schleife auch nicht im Ansatz verstanden hast.
Lass uns deshalb mal anders anfangen. Nehmen wir als Beispiel das Rechteck mit den Ecken (5,5) und (15,25). Um dieses Rechteck zeichnen zu können, müssen wir die Methode setPoint(x, y, c) ja mehrfach aufrufen, und zwar für jeden einzelnen "Punkt" innerhalb dieses Rechtecks.
Wir müssen also z. B. die erste Zeile des Rechtecks zeichnen, indem wir für alle Punkte mit den Koordinaten 5 bis 15 für den x-Wert und 5 für den y-Wert aufrufen.
Also prinzipiell muss das hier ausgeführt werden:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
screen.setPoint( 5, 5, '#');
screen.setPoint( 6, 5, '#');
screen.setPoint( 7, 5, '#');
screen.setPoint( 8, 5, '#');
screen.setPoint( 9, 5, '#');
screen.setPoint(10, 5, '#');
screen.setPoint(11, 5, '#');
screen.setPoint(12, 5, '#');
screen.setPoint(13, 5, '#');
screen.setPoint(14, 5, '#');
screen.setPoint(15, 5, '#');

Das würde eine horizontale Linie mit den dem Füllzeichen '#' ausgeben. So könnten wir jetzt Zeile für Zeile weiter machen, also nochmal diese ganzen Anweisungen allerdings mit einer 6 für die y-Koordinate. Und so weiter bis zur 25 in der y-Koordinate.

Das wäre natürlich nicht sehr flexibel, weil man ja für unterschiedliche Rechtecke direkt den kompletten Quellcode ändern müsste. Deshalb wollen wir das mit Schleifen lösen, die flexibel die Anweisungen passend zu den Eckpunkten "generieren".

Deshalb für Dich zuerst mal eine einfache Aufgabe: Schreibe mir einfach mal eine for-Schleife auf für die erste Zeile. Verwende als Laufvariable einfach ein "i" und schreibe die ganzen Zahlen einfach zuerst fix rein. Das können wir dann später noch besser machen. Ich stelle mir also sowas vor:
code:
1:
2:
3:
4:
5:
for(...) {
    screen.setPoint(i, 5, '#');
}

Was muss in der Klammer hinter "for" statt der Pünktchen stehen, damit i der Reihe nach mit den Zahlen 5 bis 15 belegt wird?

Gruß
Marco
20.09.2017 22:03 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: 639
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 habe gerade nochmal die Aufgabe angeschaut. Da ist der zweite Eckpunkt nicht (15,25) sondern (25,15). Das hatte ich falsch in Erinnerung. Das spielt aber letztlich keine wichtige Rolle im Moment. Du kannst meinetwegen den einen oder den anderen nehmen, wie Du möchtest...

Gruß
Marco
20.09.2017 22:06 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:
void CRectangle::draw(CScreen& screen) const
{

	for(int i = 5; 25>=i; i++) {
	    screen.setPoint(i, 5, '#');
	   
	}
  i++;
}


Ich habe am ende noch ein i++ eingebaut ,damit es auch irgendwann eine Zeile höher geht?

Aber das Problem ist ,ich will ja das es irgendwann aufhört oder ?

Irgendwie while Schleife einbauen oder wie?
22.09.2017 23:14
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
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

Zitat:
Original von Victor
code:
1:
2:
3:
	for(int i = 5; 25>=i; i++) {

Nein, das ist schon falsch. Der zweite ist die "condition", aber das ist nicht die Abbruch-Bedingung, sondern eigentlich eine "Weitermach-Bedingung". So lange wie diese "true" ergibt, wird die Schleife fortgesetzt. Du hast es also gerade falsch rum formuliert.
Lies Dir doch am Besten mal das hier durch:
https://www.tutorialspoint.com/cprogramming/c_for_loop.htm
Zitat:
Original von Victor
Ich habe am ende noch ein i++ eingebaut ,damit es auch irgendwann eine Zeile höher geht?

Und was soll das bringen? Dann wird halt am Ende nochmal i hochgezählt. Das wurde innerhalb der Schleife schon von 5 bis 25 hoch gezählt. Wenn Du es noch eins weiter zählst, wird einfach i 26 sein. Es wird mit i aber gar nichts mehr gemacht und deshalb ist das völlig irrelevant.
Aber i ist ja so wie so nicht die Zeilennummer sondern die Spalte. Du willst ja gar nicht i erhöhen sondern Du willst noch eine zweite Variable für die Spalte einführen, also z. B. j. Der Trick ist, dass Du bei screen.setPoint(i, 5, '#'); die 5 ersetzt, z. B. mit einem j.
Dann machst Du um die for-Schleife mit i noch eine weitere for-Schleife außen rum, in der Du das j von 5 bis 15 hoch zählst. Dann hast Du eine innere und eine äußere Schleife und innerhalb der inneren rufst Du screen.setPoint auf. An dieser Stelle hast Du sowohl i als auch j, zuerst wird i und j beide 5 sein. Die innere Schleife zählt i bis 25 hoch. Dann kommt aber wieder die äußere for-Schleife zum Zug und zählt j auf 6 hoch. Mit j=6 wird dann aber i in der inneren wieder neu auf 5 initialisiert und die innere Schleife läuft wieder bis 25 hoch. Jetzt aber wird setPoint mit einer 6 für die y-Koordinate aufgerufen, so dass die zweite Zeile komplett ausgegeben wird. Usw.
Kannst Du das mal probieren?
22.09.2017 23:50 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

Etwa so String?

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

void CRectangle::draw(CScreen& screen) const
{
    for(int j = 5; 15>=j;j++){
	for(int i = 5; 25>=i; i++) {
	    screen.setPoint(i, j, '#');
	    
	}
    }

23.09.2017 22:50
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
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 sieht doch schon ganz gut aus! Wink

Jetzt haben wir die Koordinaten für die Ecken, also die 5, 25 und die 5, 15 noch hard-coded im Quelltext stehen. Die wollen wir aber aus den Eckpunkten ermitteln!
Also, i ist ja die Zählvariable für die Spalten, also für x. Du muss von der x-Koordinate vom einen CPoint für die linke(-untere) Ecke bis zur x-Koordinate der rechten(-oberen) Ecke laufen für jede Zeile. Du musst also die 5 und die 25 in der inneren for-Schleife entsprechend ersetzen.
Genauso auch in der äußeren for-Schleife die 5 mit dem y-Wert der (linken-)unteren Ecke und die 15 mit der y-Koordinate der (rechten-)oberen Ecke.
Wie kommst Du aber an diese Koordinaten ran? Die Methode ist in der Klasse CRectangle. Du kannst also innerhalb der Klasse direkt auf die jeweiligen Member-Variablen zugreifen. Welches sind denn diese Variablen und wie kommst Du über die Punkte zu den richtigen X/Y-Koordinaten?

Außerdem haben wir auch das Füllzeichen '#' noch hart-kodiert. Auch hierfür haben wir in CRectangle eine Member-Variable, die den richtigen Wert beinhaltet.

Versuch mal, ob Du richtigen Werte für die vier Koordinaten (der beiden Eckpunkte) und das Füllzeichen raus bekommst und an die richtigen Stellen einsetzen kannst.

Gruß
Marco
24.09.2017 00:01 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 = 5; 15>=j;j++){
    	screen.CRectangle(i,j,`#´);
	for(int i = 5; 25>=i; i++) {
	    screen.setPoint(i, j, '#');
	    screen.CRectangle(i,j,`#´);


	}
    }
}


Dafür müsste ich doch diesenCRectangle Konstruktor aufrufen siehe meinen Code?
Soll ich auch da Werte reinschreiben?
24.09.2017 04:07
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
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

Ohje... das hat doch wirklich keinen Zweck! Ließ endlich mal ein Buch zur Objektorientierten Programmierung! Das macht doch überhaupt gar keinen Sinn das hier mit trial-and-error zu probieren!

Also erstens: ein Konstruktor ist dafür da, ein neues Objekt aufzubauen, Du hast aber schon ein Objekt, sonst könntest Du doch die Methode draw() gar nicht aufrufen, da sie nicht statisch ist!
Dann ruft man doch einen Konstruktor nicht in der Art eines Methodenaufrufs eines Objekts screen einer völlig anderen Klasse auf. Wie kommt man denn nur auf so einen Schwachsinn überhaupt.
Dann hast Du doch gar keinen Konstruktor, der zwei int und ein char akzeptieren würde.
Du hast überhaupt gar keinen blassen Schimmer, was es mit Klassen und Objekten überhaupt auf sich hat und schon gar nicht, weshalb das so ist. Du hast überhaupt keine Vorstellung was Kapselung ist, manchmal denke ich, Dir ist noch nichtmal der Unterschied zwischen Variablen und Methoden richtig klar etc. Du hast Schwierigkeiten grundlegende Konstrukte wie eine for-Schleife zu verwenden. Da schaffst es in eine kurze Programmzeile mehr als 3 Syntaxfehler und ungezählte semantische Fehler einzubauen.

Also das bringt hier wirklich rein gar nichts. Nimm Dir ein Buch. Wenn Du da was nicht verstehst, kannst Du gerne dazu dann fragen, aber das hier ist einfach Zeitverschwendung für alle Beteiligten.

Gruß
Marco
24.09.2017 11:40 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

Aber wie soll ich den sonst den Konstruktor aufrufen ?

So klappt es auch irgendwie nicht ?

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 = 5; 15>=j;j++){
    	CRectangle(i,j,`#´);
	for(int i = 5; 25>=i; i++) {
	    screen.setPoint(i, j, '#');
	    CRectangle(i,j,`#´);


	}
    }

24.09.2017 13:24
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

Meine andere IDee wäre so ?
Aber funktioniert auch net

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

void CRectangle::draw(CScreen& screen) const
{
    for(int j = 5; 15>=j;j++){
    	this->CRectangle(CPoint i,Cpoint j , `#´);
	for(int i = 5; 25>=i; i++) {
	    screen.setPoint(i, j, '#');
	    this->CRectangle(CPoint i,Cpoint j , `#´);


	}
    }
24.09.2017 13:36
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

Sind meine Idee wieder nicht gut ?
Ich möchte aber wissen wie es geht großes Grinsen

Habe im Netz herum gegoogelt .

Es steht teilweise drinnen das man Konstruktor in Funktionen mit this aufrufen kann ?

Aber das gibt ja trotzdem Fehler bei Eclipse
24.09.2017 16:09
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
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

Wieso um alles in der Welt willst Du einen Konstruktor aufrufen??? Ich hab doch schon erklärt dass das Schwachsinn an dieser Stelle ist!
24.09.2017 21:24 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

Wie soll ich das dann hier machen ?

Wie kommst Du aber an diese Koordinaten ran? Die Methode ist in der Klasse CRectangle. Du kannst also innerhalb der Klasse direkt auf die jeweiligen Member-Variablen zugreifen. Welches sind denn diese Variablen und wie kommst Du über die Punkte zu den richtigen X/Y-Koordinaten?
24.09.2017 22:03
Seiten (13): « erste ... « vorherige 5 6 [7] 8 9 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Thema ist geschlossen
Informatiker Board » Themengebiete » Praktische Informatik » Programmierung 2