Programmierung 2 - Seite 4 |
| 26.09.2017, 13:08 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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, 14:49 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | AH ok das mit dem hinlaufen der Koordinaten habe ich jetzt verstanden
Ich habe jetzt bei der oberen for schleife beide getx genannt ,weil ja man nur die X Koordinate laufen lässt? Also
Müsste die obere X Koordinate nicht von oben nach unten laufen ? War mir nicht sicher ob du dich verschrieben hast ? |
|||||||||||||||
| 26.09.2017, 15:31 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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, 16:34 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor |
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 |
|||||||||||||||
| Anzeige | ||||||||||||||||
|
|
||||||||||||||||
| 26.09.2017, 16:56 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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, 22:17 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor |
So?
|
|||||||||||||||
| 26.09.2017, 23:54 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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 |
|||||||||||||||
| 27.09.2017, 00:19 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Will es jetzt irgendwie testen
In unserem Fall heisst es ja nicht rect1 sondern a oder? Also a.draw? Oder wie genau ? Schwere Geburt aber geschafft
|
|||||||||||||||
| 27.09.2017, 01:49 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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:57 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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. |
|||||||||||||||
| 28.09.2017, 09:27 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor |
Zeigt bei der main Probleme an ,dein beschriebenes Problem
|
|||||||||||||||
| 28.09.2017, 10:10 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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:44 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | rect1.draw(); Ich dachte damit rufe ich es aus ? |
|||||||||||||||
| 28.09.2017, 11:09 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | Ach, nee, nicht draw()... diese print() Methode wars. Ich hatte das aber auch schon oben mal geschrieben. |
|||||||||||||||
| 28.09.2017, 23:41 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor |
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
|
|||||||||||||||
| 29.09.2017, 00:57 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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, 01:12 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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, 14:13 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Meinst du dass ich es jetzt so machen soll oder wie ? 0; CRectangle rect1; rect1.draw(); rect1.print(); |
|||||||||||||||
| 29.09.2017, 15:11 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | Nein. Schau doch einfach mal, welche Methode in welcher Klasse ist und welche Argumente die erwarten!
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 |
|||||||||||||||
| 30.09.2017, 08:28 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | CScreen screen; rect1.draw(screen); Warum fügst du hier die Variable screen rein ? Peile ich nicht
|
|||||||||||||||
| 30.09.2017, 11:47 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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:
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 |
|||||||||||||||
| 11.10.2017, 22:58 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Ist mein Konstruktor richtig implementiert?
Ich weiss das das iostream usw fehlt ,aber stimmt der code soweit? |
|||||||||||||||
| 12.10.2017, 22:31 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Ne idee String? |
|||||||||||||||
| 13.10.2017, 01:39 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string | 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, 12:45 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Hi String ,bin froh dass du wieder zurück bist
Habe mal Speicher allokiert und wieder bei Destruktor freigegeben . Passt es so ? Sind die Zusicherungen vom Konstruktor richtig?
|
|||||||||||||||
| 13.10.2017, 13:18 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito | 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
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, 15:28 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito |
Nein
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, 16:25 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | 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, 17:13 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito | 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:59 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Genau das ist ja meine Frage .
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
|
|||||||||||||||
| 13.10.2017, 18:11 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito |
Was jetzt genau? Ich habe mehrere formuliert. Und ich habe Sie formuliert, weil Du dir darüber klar werden sollst. Wenn Du das nicht wirst, probierst Du wieder nur rum und bist dir gar nicht im klaren darüber was das soll.
Genau darin liegt das Problem und daran solltest Du als Erstes arbeiten. Du verstehst die Konzepte nicht und dafür stellst Du hier die falschen Fragen. Deine Fragen zielen immer darauf ab einen Lösungsversuch zu kontrollieren und ich unterstelle, dass Du hoffst dadurch die Lösung zu bekommen, weil der Antwortende die Geduld mit deinen Fehlversuchen verliert.
Wie? Und welche Zusicherungen. Was wolltest Du wie zusichern und vor allem warum? Besten Gruß, Karlito |
|||||||||||||||
| 13.10.2017, 18:42 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Im Uml Diagramm , dass ich angehängt hatte waren Zusicherungen gegeben . Dachte die gehören zum Konstruktor ? |
|||||||||||||||
| 13.10.2017, 19:03 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito | Welche? |
|||||||||||||||
| 13.10.2017, 19:50 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Blätter bitte 2 oder 1 Seite zurück . Da ist ein Bild angehängt
|
|||||||||||||||
| 13.10.2017, 19:56 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito | Nein! Ich habe die Aufgabenstellung verstanden. Ich möchte sehen, dass Du sie auch verstanden hast! |
|||||||||||||||
| 13.10.2017, 22:59 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor |
Ich glaube der Speicher ist richtig allokiert,aber beim Konstruktor bin ich immer noch nicht sicher ? |
|||||||||||||||
| 14.10.2017, 10:25 | Auf diesen Beitrag antworten » | |||||||||||||||
| Karlito | Die Allokierung sieht gut aus. Über was bist Du dir nicht sicher? Was willst Du denn machen? Und was hast Du versucht zu tun und warum? Und woran zweifelst Du? Besten Gruß, Karlito |
|||||||||||||||
| 14.10.2017, 12:09 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor | Reicht das so aus?
|
|||||||||||||||
| 14.10.2017, 12:21 | Auf diesen Beitrag antworten » | |||||||||||||||
| as_string |
Du gehst nie auf das ein, was Dir die Leute sagen bzw antwortest, auf was sie Dich fragen.Beantworte endlich mal Kalitos Fragen! Mit eigenen Worten und erstmal ohne neuen Quelltext. Gruß Marco |
|||||||||||||||
| 14.10.2017, 13:01 | Auf diesen Beitrag antworten » | |||||||||||||||
| Victor |
Hatte ich ja bereits hier schon gesagt |
|||||||||||||||
|
|
Verwandte Themen
| Die Beliebtesten » |
| Die Größten » |
|
| Die Neuesten » |
|
