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

Informatiker Board » Themengebiete » Praktische Informatik » C++ Sprache » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (6): « erste ... « vorherige 2 3 [4] 5 6 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C++ Sprache
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 fang mal ganz leicht an :

Soll die for schleife etwa so aussehen?

for(m_entries = 0 ; m_entries>0; m_entries++) {


}

Ist die for schleife so etwa richtig ?
25.08.2017 09:44
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

ob der übergebene entry vor dem als nächstes zu kopierende entry aus dem alten Array liegt. Wenn das der Fall ist, muss einmal der neue entry eingefügt werden und dann erst weiter kopiert werden
code:
1:
2:
3:
4:
5:
6:
7:
if( m_entries> newEntries){

m_entries == newEntries;

return *this;
}


Würde das so passen ?

Wenn das alte mentries grösser als der neue Entrie Wert ist , wird der alte in den neuen Kopiert und sozusagen davor gestellt .

Mache ich das jetzt auch mit dem Code ? großes Grinsen
Das ist die Frage
25.08.2017 09:53
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
Ich fang mal ganz leicht an :

Soll die for schleife etwa so aussehen?

for(m_entries = 0 ; m_entries>0; m_entries++) {


}

Ist die for schleife so etwa richtig ?

Schau Dir bitte nochmal an, wie man über ein Array mit einer for-Schleife iteriert. Du musst eine Zähl-Variable verwenden. m_entries ist aber das Array selbst.
Außerdem m_entries>0? Was soll das denn bezwecken?

Aber ja, eine for-Schleife wäre erstmal der richtige Ansatz (oder ein möglicher zumindest).

Gruß
Marco
25.08.2017 14: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
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
ob der übergebene entry vor dem als nächstes zu kopierende entry aus dem alten Array liegt. Wenn das der Fall ist, muss einmal der neue entry eingefügt werden und dann erst weiter kopiert werden
code:
1:
2:
3:
4:
5:
6:
7:
if( m_entries> newEntries){

m_entries == newEntries;

return *this;
}


Würde das so passen ?

Wenn das alte mentries grösser als der neue Entrie Wert ist , wird der alte in den neuen Kopiert und sozusagen davor gestellt .

Mache ich das jetzt auch mit dem Code ? großes Grinsen
Das ist die Frage

Nicht das m_entries ist größer oder kleiner als das neue, sondern einzelne Elemente des m_entries-Arrays sind chronologisch früher oder später als der neu hinzu gekommene Entry.
Ich weiß nicht, ob Du das schon richtig verstanden hast: Die Methode bekommt ein neues Element übergeben, das an der richtigen (chronologischen) Position in das (eventuell) schon vorhandene m_entries-Array einsortiert werden soll.

Das if muss deshalb auch in die Schleife rein, weil Du ja in der Schleife alle m_entries Elemente durch gehst und jedes einzelne musst Du mit dem neuen vergleichen (naja, bis Du halt eines gefunden hast, das chronologisch nach dem neuen entry liegt).

Zeile 3 verstehe ich aber überhaupt nicht: Erstens ist ein doppeltes Gleichheitszeichen ein Vergleichsoperator (also ein Test auf Gleichheit, wie auch immer definiert). Das Ergebnis eines solchen Vergleichs ist true oder false (also bool) und kann in einem if() z. B. verwendet werden.
Falls es eine Zuweisung sein soll, dann musst Du ein einzelnes Gleichheitszeichen verwenden. Aber was Du hier ja willst ist den neuen Eintrag einem Platz im neuen Array zuzuweisen, falls das eingefügt werden soll, ansonsten aber einen eventuell alten Eintrag ins neue Array kopieren.

Gruß
Marco
25.08.2017 14:18 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

So besser ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
for( m_numberofEntries= 0 ;  m_numberofEntries>0; m_numberofEntries++) {
if( m_entries> newEntries){

m_entries = newEntries;

return *this;
}

}




Ich peile es net was für eine Bedingung ich da einbauen soll? Zunge raus
26.08.2017 01:38
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

Nicht wirklich besser, würde ich sagen...
Du rätst doch nur rum, das bringt doch keinen wirklich weiter, oder?

In der Aufgabe ist doch schon erwähnt, dass Ihr das entsprechend der Übung mit einem dynamischen Array mit growthSize = 1 entspricht. Den Quelltext von dieser Übung solltest Du ja wahrscheinlich (im Gegnsatz zu mir) haben, oder? Orientiere Dich doch einfach ersteinmal daran. Dann hast Du zwar die Sortierung noch nicht, aber wenigstens schon eine Basis, für die Du sogar schon Punkte bekommen würdest.

Ansonsten zur Sortierung:
Angenommen jemand gibt Dir zwei Notizblöcke. Der eine ist schon voll geschrieben und zwar so, dass auf jedem Blatt ein Termin (mit Datum, Ort, Beschreibung und so steht). Jedes einzelne Blatt ist auch schon mit jeweils einem Termin beschrieben. Die Termine sind so eingetragen, dass der füheste auf dem ersten Blatt steht, dann chronologisch aufsteigend sortiert auf jeden Blatt dann der nächste.
Der andere Block ist leer, hat aber genau ein Blatt mehr als der voll geschriebene.

Außerdem gibt er Dir noch einen extra Zettel, auf dem noch ein weiterer Termin drauf steht, der irgendwo in der Mitte der bisherigen Termine liegen könnte, vielleicht aber auch am Ende oder Anfang, Du weißt es noch nicht.

Deine Aufgabe ist es jetzt alle Termine vom alten in das neue Büchlein zu übertragen, dazu aber auch den neuen einzufügen, und zwar genau so, dass danach wieder alle Termine in der richtigen chronologischen Reihenfolge im neuen Büchlein stehen.

Wie würdest Du vorgehen?
Also ich würde die erste Seite vom alten Block aufschlagen und die erste vom neuen. Dafür brauchst Du eine Index-Variable, oft nimmt man i dafür. Dafür kannst Du nicht m_numberOfEntries nehmen! In dieser Variablen steht ja die Seitenzahl des alten Blocks drin. Wenn Du die Variable mit 0 initialisieren würdest, wäre die Information ja weg! Du musst also eine Schleife z. B. so beginnen:
code:
1:
for(int i = 0; i < m_numberOfEntries; i++) {...}

So, Du hast also die erste Seite aufgeschlagen. Was machst Du jetzt? Je nachdem, ob Dein neuer Termin vor dem ersten Termin im alten Block liegt oder nicht, musst Du ja jetzt entweder den ersten Termin im alten Block auf die erste Seite des neuen abschreiben, oder aber vorher noch den neuen Termin und auf die nächste Seite erst den Termin aus dem alten Block, oder?
Angenommen der erste Termin im alten Block wäre noch vor dem neuen Termin gewesen, dann schreibst Du erst den Termin aus dem alten Block ab, hast aber den neuen Termin noch nicht eingefügt. Also gehst Du weiter zur zweiten Seite vom alten und vom neuen Block.
Hier geht es wieder los: Du musst jetzt dem Termin auf der zweiten Seite mit dem neuen Termin vergleichen, um entschreiden zu können, ob Du gleich den Termin von der zweiten Seite vom alten Block abschreiben musst oder ob Du vorher noch den neuen Termin eintragen musst.

Wenn Du irgendwann den neuen Termin eingetragen hast, weil er früher war als einer der Termine im alten Block, dann ändert sich die Situation etwas: Erstens hast Du ja jetzt den neuen schon eingefügt, also musst Du kein Datum mehr vergleichen und auch keinen weiteren neuen mehr einfügen (ist ja nur einer gewesen). Allerdings ändert sich noch etwas wichtiges: Wenn Du im alten Block auf Seite i bist, im neuen Block aber den neuen Termin schon eingefügt hast, dann bist Du im neuen Block ja immer schon eine Seite weiter, also auf i+1. Sprich: Sobald Du den neuen schon eingefügt hast, musst Du beim kopieren nichtmehr von Seite i vom alten Block auf Seite i vom neuen kopieren, sondern von Seite i vom alten auf Seite i+1 vom neuen.

Das alles muss logischerweise innerhalb der Schleife passieren: Du musst ja jeden Termin vom alten Block mit dem neuen Vergleichen, bis Du die Stelle findest, an der Du korrekt den neuen einfügen kannst.

Also: Schau Dir die Übung mit dem dynamischen Array bitte nochmal an, oder kopier den Quelltext auch hier rein. Versuche mal zuerst genau identisch dazu die Termine zu kopieren, ungeachtet der Sortierung.
Wenn das geklappt hat, lies Dir meine Beschreibung zur Sortierung hier nochmal durch und versuche wirklich ersteinmal nachzuvollziehen, wie Du das "von Hand" mit Notizbüchern machen würdest. Das musst Du zuerst wirklich richtig verstanden haben, sonst bringt es nichts mit Programmieren anzufangen. Falls Du fragen zum dynamischen Array und wie man das auf diesen Kalender hier anwendet hast oder irgendetwas mit dem Sortieren von der Logik her unklar ist, frag bitte konkret die Punkte nach, die Du nicht verstehst.
Ich will Dich ja nicht demotivieren, aber so wie ich das sehe hast Du einen riesigen Aufholbedarf, wenn diese Aufgabe das ist, was Du eigentlich können solltest. Du musst also wirklich die Zähne zusammen beißen. Versuch mal wirklich so vorzugehen, wie ich es geschrieben habe. Ich versuche gerne Dir zu helfen, aber das ist eben über ein Internetforum wirklich schwierig, weil wohl doch einige Grundlagen auch fehlen.

Gruß
Marco
26.08.2017 12:29 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

Zitat:
Original von as_string
code:
1:
for(int i = 0; i < m_numberOfEntries; i++) {...}


i sollte besser auch als unsigned int deklariert werden, weil m_numberOfEntries unsigned ist.
Also besser:
code:
1:
for(unsigned int i = 0; i < m_numberOfEntries; i++) {...}


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

Kannst du mir erstmal erklären wie z.B der neue Termin heisst und wie der vom alten Block ? großes Grinsen

Das würde mir erstmal auch sehr weiter helfen großes Grinsen
27.08.2017 17:49
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

Versteh ich nicht, haben die Termine einen Namen?

Gruß
Marco
27.08.2017 21:29 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

Ja aber ich muss ja auch in der auf Bedingung den alten mit dem neuen Wert vergleichen ?
Wie heißen die beiden ?
28.08.2017 01:05
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 verstehe immer noch nicht genau, was Du meinst.
Ein Termin (CCalendarEntry) besteht aus drei Feldern, dem Datum und Ort und einer Beschreibung. Wenn Du die Termine chronologisch sortiert haben willst, welches dieser drei Felder wirst Du dann vergleichen müssen?
Um an ein Feld dran zu kommen, hat diese Klasse drei sogenannte "getter-Methoden", für jedes Feld eine. Welche musst Du also verwenden, um an das richtige Feld der beiden Termine dran zu kommen?

Hast Du Dir inzwischen mal die Übung zum "dynamischen Array" nochmal angeschaut? Hast Du eine Idee, wie Du das hier verwenden kannst?

Gruß
Marco
28.08.2017 07:55 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

Diese Klausr ist von einem alten Semster .

Diese Übung habe ich nicht großes Grinsen

Ich denke mal das ich die Datum vergleichen muss?
28.08.2017 14:35
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:
Calendar& operator+=(const CCalendarEntry& entry){

	CCalendarEntry * oldEntries = m_entries;  // das alte Array
	CCalenderEntry * newEntries = new CCalendarEntry [m_numberofEntries + 1];
	m_entries = newEntries;  // m_entries auf das neue Array zeigen lassen
	delete [] oldEntries;  // das alte Array zerlegen
	for(unsigned int i = 0; i < m_numberOfEntries; i++) {

	if(m_date> CCalendarEntry [m_numberofEntries + 1]){
		weiter immer noch keine Ahnung ?
				
				Ein kleiner tipp nochmals?
		
		


	}
	}


28.08.2017 16:21
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

Zuersteinmal kannst Du das delete[] ja nicht schon machen, bevor Du die alten Einträge umkopiert hast. Das muss also unter die for-Schleife!
Dann hat die Klasse CCalendar doch gar kein Member m_date. In welcher Klasse ist das definiert? Von welchem Objekt musst Du das Datum mit welchem anderen Objekt-Datum vergleichen?

Irgendwie verstehe ich diese ganze Situation nicht. Es kann doch nicht sein, dass Dir eine solche Aufgabe gestellt wird, wenn Du nicht schon vorher irgendetwas dazu gelernt hattest. Was ist das genau? Eine Vorlesung? Hast Du die ganze Zeit nichts gemacht dafür und jetzt fällt Dir auf, dass Du doch noch etwas abgeben musst?
Ich will Dir da keine Vorwürfe machen... muss ja jeder selbst wissen. Ich versuche es nur zu verstehen. Ich habe einfach den Eindruck, Du verstehst wirklich überhaupt nicht, von was die Rede ist, und rätst nur wild rum. Ich finde einfach, das bringt so ziemlich überhaupt gar nichts...
Ich meine schon das "CCalendarEntry [m_numberofEntries + 1]" von Dir da oben. Erstens ist CCalendarEntry eine Klasse und logischerweise nicht das Array. Welche Variablen zeigen alle auf ein Array? Du weißt ja offensichtlich überhaupt gar nicht, wie man mit Arrays umgeht, etc.
Dann das "m_numberofEntries + 1" in der eckigen Klammer. Erstens ist schon die Variable falsch geschrieben, das "O" von "Of" muss nämlich ein Großbuchstabe sein. Aber das ist gar nicht das Problem: Du willst ja über jedes Element des alten Arrays laufen und hast dazu ja die Index-Variable i eingeführt. Die musst Du jetzt natürlich auch benutzen, um auf die Elemente des Arrays zuzugreifen.
Was sollte denn m_numberOfEntries + 1 überhaupt sein? Das ist doch bei jedem Schleifen-Durchlauf immer derselbe Wert. Und der liegt sogar noch außerhalb des alten und des neuen Arrays.
Das ist das nächste Problem: Du hast offenbar sogar Probleme mit so grundlegenden Dingen wie eine for-Schleife zu verwenden geschweige denn über ein Array zu iterieren.
Das sind ganz elementare Dinge! Es kann nicht sein, dass Ihr vorher so etwas nicht schon irgendwo und irgendwie gelernt habt, bevor Ihr so eine Aufgabe bekommt!

Versteh mich nicht falsch, ich will Dich ja nicht beschimpfen oder Vorwürfe machen... Aber ich bin wirklich verzweifelt und weiß nicht, wie wir das weiter machen sollen. Ich meine eben, so macht das nicht wirklich viel Sinn, oder? Letztlich kann ich Dir auch einfach meine Lösung geben, dann hast Du zwar auch nichts dabei gelernt, aber immerhin sind wir dann irgendwann durch.

Oder aber wir fangen wirklich bei den Basics an. Aber ob das besonders sinnvoll ist, über so ein Forum das alles nachholen zu wollen... ich weiß nicht...

Was meinst Du dazu? Hast Du vielleicht jemanden, mit dem Du Dich mal regelmäßig für ein paar Stunden zusammen setzen könntest um solche Basics mal durchzugehen? Oder sollen wir hier weiter machen? Aber auf diese Art weiter zu machen halte ich für nicht besonders sinnvoll, oder?

Gruß
Marco

PS: Wirklich nicht böse gemeint...
28.08.2017 16: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

Leider habe ich niemanden der mir da helfen kann , daher hatte ich versucht über Forum zu lernen großes Grinsen

Dieser Aufgabenteil war auch gedacht um eine gute Note zu erreichen in der Klausur .
Mir geht es eigentlich nur um das bestehen .

großes Grinsen

Es ist nur ne alte Klausur mehr nicht .
28.08.2017 17:18
Seiten (6): « erste ... « vorherige 2 3 [4] 5 6 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » C++ Sprache