Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Gruß aus Hanau

Patrick

Geschrieben

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

Geschrieben

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.

Geschrieben
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.

Geschrieben

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.

Geschrieben
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.

Geschrieben

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

Gruß aus Hanau

Patrick

Geschrieben

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> >.

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...