Patrick.Karre Geschrieben 16. Dezember 2005 Geschrieben 16. Dezember 2005 Hallo Forum, ich habe folgende Aufgabe und ich komme einfach nicht auf die Lösung. Ich habe einen Zeitraum X, jeder Tag in diesem Zeitraum X beginnt um Y Uhr und endet um Z Uhr. Zu jedem Tag zu einer bestimmten Uhrzeit können Werte hinterlegt werden. Bei einer einfachen Tagesausrechnung ist dies kein Problem. Jetzt soll dies aber für einen beliebigen Zeitraum sein. Ich habe ein Eindemensionales Array ZEIT[n]. In dieses Array müssen alles Tage mit Zeiten (die Werte) abgelegt werden. Ich habe bisher keine Formal die mir für jeden Tag zu einer betimmten Uhrzeit einen Wert für n bestimmt um dann ein Ergebnis dort einzutragen. Folgenden Ansatz habe ich bisher: n = static_cast<int>(((value.m_dt-m_pEngine->m_dtStart.m_dt)*((ClearDatePortion(value)-m_pEngine->m_dMin)*1440)/m_pEngine->m_iStep+1)); ZEIT[n]->m_Value += WERT; Ich denke ich brauche nur einen Hinweis, ich sehe einfach den Wald vor lauter Bäumen nicht Gruß aus Hanau Patrick Zitieren
Guybrush Threepwood Geschrieben 16. Dezember 2005 Geschrieben 16. Dezember 2005 Also ich habs jetzt 3 mal gelesen und nicht verstanden Zitieren
Patrick.Karre Geschrieben 19. Dezember 2005 Autor Geschrieben 19. Dezember 2005 Vielleicht wird es einfacher, wenn ich das Ziel versuche zu erklären. Am ende soll es einen Array mit Werten gefüllt sein. Diese Werte sollen nach Tagen und Zeiten sortiert sein. Mit den Werten wird eine Liste gefüllt. Vielleicht hilft das weiter. Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 19. Dezember 2005 Geschrieben 19. Dezember 2005 Mir scheint, du willst die Einträge gleich sortiert einfügen. Warum fügst du nicht erst alle ein, und sortierst dann das komplette Array einmal? Das sollte erheblich schneller und einfacher sein. Zitieren
Patrick.Karre Geschrieben 19. Dezember 2005 Autor Geschrieben 19. Dezember 2005 Das geht leider nicht. Das Array wird später in eine bereits vorhandene Liste kopiert. Die größe ist auf beiden Seiten gleich. In das Array selbst, werden nur Ergebnisse abgelegt. Aus diesem Grund ist keine sortierung im nachhinein möglich. Zitieren
Klotzkopp Geschrieben 19. Dezember 2005 Geschrieben 19. Dezember 2005 Das Array wird später in eine bereits vorhandene Liste kopiert. Die größe ist auf beiden Seiten gleich. In das Array selbst, werden nur Ergebnisse abgelegt.Aber nichts davon ist ein Grund dafür, warum man das nicht nachträglich sortieren können soll. Das Ergebnis ist doch das gleiche. Und dein eigentliches Problem habe ich immer noch nicht verstanden. Du kannst den Wert n nicht für einen Eintrag allein ermitteln. Du musst alle Einträge prüfen, daraus eine Reihenfolge erstellen (üblicherweise nennt man das sortieren), dann hast du dein n. Alternativ könntest du an Stelle eines Arrays einen assoziativen Container wie z. B. std::map benutzen. Zitieren
Patrick.Karre Geschrieben 19. Dezember 2005 Autor Geschrieben 19. Dezember 2005 Generell eine sehr gute Idee, aber wenn ich sowieso mit einer MAP arbeiten, kann ich nicht gleich ausrechnen an welcher Stelle im Array der Wert eingetragen werden muss und gleich auch einfügen. Das würde mir den Zwischenschritt sparen. Zitieren
Klotzkopp Geschrieben 19. Dezember 2005 Geschrieben 19. Dezember 2005 kann ich nicht gleich ausrechnen an welcher Stelle im Array der Wert eingetragen werden muss und gleich auch einfügen. Nein. Stell dir vor, ich denke mir zwei Zahlen aus, sage dir eine davon, und du sollst sagen, ob das die kleinere oder die größere ist. Das geht schlicht und einfach nicht. Ich muss dir erst alle Zahlen nennen, vorher kannst du nichts über die Position irgendeiner Zahl sagen. Zitieren
Patrick.Karre Geschrieben 19. Dezember 2005 Autor Geschrieben 19. Dezember 2005 Stimmt, da gebe ich dir recht. Also muss ich einen "Container" erstellen, indem ich die Werte zwischenspeicher um sie danach in die eigentliche Liste zu tranferieren. Allerdings dürfte eine normale MAP hier nicht ausreichen. Ich habe TAGE, ZEITEN und WERTE. Zu jedem Tag zu einer bestimmten Zeit müssen Werte abgelegt werden können. Eine Multimap dürfte auch nicht gehen. Ich bin für jede Idee offen Gruß aus Hanau Patrick Zitieren
Klotzkopp Geschrieben 19. Dezember 2005 Geschrieben 19. Dezember 2005 Zu jedem Tag gibt es mehrere Zeiten und zu jeder Zeit mehrere Werte? Oder wie sehen die Beziehungen aus? Zitieren
Patrick.Karre Geschrieben 19. Dezember 2005 Autor Geschrieben 19. Dezember 2005 Fast. Zu jedem Tag gibt es mehrere Zeiten. Zu jeder Zeit gibt es Werte zu zusammengerechnet dargstellt werden. Beispiel: TAG ZEIT WERT 1. Tag 14 Uhr 2 1. Tag 15 Uhr 5 2. Tga 09 Uhr 3 usw. Zitieren
Klotzkopp Geschrieben 19. Dezember 2005 Geschrieben 19. Dezember 2005 Wenn die Tage wirklich nur Zahlen (und keine Daten) sind, und die Zeit wirklich nur volle Stunden, kannst du Tag und Zeit zusammenrechnen: int TimeKey = 24 * Tag * Zeit; Dann reicht eine std::map<int, WERTTYP>. Ansonsten eine std::map<TAGTYP, std::map<ZEITTYP, WERTTYP> >. Zitieren
Patrick.Karre Geschrieben 21. Dezember 2005 Autor Geschrieben 21. Dezember 2005 Hallo Klotzkopp, ich habe eine Lösung ohne eine weitere MAP. Die Zeitraster sind statisch, dadurch kann ich den jeweiligen Punkt im Array direkt ansteuern. Hierfür war nur ein weitere Rechenschritt erforderlich. Danke für deine Hilfe. Zum nachvollziehen, die geänderten Codesegmente: int nPerDay = static_cast<int>((m_pEngine->m_dMax.m_dt-m_pEngine->m_dMin)*1440+1)/m_pEngine->m_iStep; int iWeekDay = (value.GetDayOfWeek()+5) % 7; if (m_pEngine->m_bWeekdays) n += iWeekDay*nPerDay; Gruß aus Hanau Patrick Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.