Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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

  • Autor

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.

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.

  • Autor

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.

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.

  • Autor

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

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

  • Autor

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.