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.

Finde den Fehler nicht ! Berechnung der Tage zwischen 2 Datume (Plural korrekt ?)

Empfohlene Antworten

Veröffentlicht

Hi !

Sitze schon seid über einer Stunde dran, finde nicht raus warum ich immer ein falsches Ergebnis bekomme (vermute habe was bei der Verschachtelung falsch gemacht).

Das Progrämmchen soll (ohne Strings usw) die Tage zwischen 2 Datume (Daten...wie auch immer) ausgeben. Davon ausgegangen das zweite Datum ist das jüngere bei der Eingabe. Meine Testdaten die nicht funktionieren sind: 1. Datum: 05.08.2011 und das 2. Datum: 05.03.2012. Rauskommen müsste 210, kommt aber 120.


#include <iostream>

#include <QString>

#include <ncurses.h>


using namespace std;


// int month[12];

int day1, day2, month1, month2, tempMonth, year1, year2;

int output;


int main()

{

    cout << "Please enter the first day (Format: 00): " << endl;

    cin >> day1;


    cout << "Please enter the first month (Format: 00): " << endl;

    // cin >> month[0];

    cin >> month1;


    cout << "Please enter the first year (Format: 0000) " << endl;

    cin >> year1;


    cout << "Please enter the second day (Format: 00): " << endl;

    cin >> day2;


    cout << "Please enter the second month (Format: 00): " << endl;

    cin >> month2;


    cout << "Please enter the second year (Format: 0000): " << endl;

    cin >> year2;


    if (year1 = year2)

    {


        if (month1 < month2)

        {

            tempMonth = (month2 - month1) - 2;

            tempMonth = tempMonth * 30;

            day1 = 30 - day1;


            output = (day1 + day2) + tempMonth;


            cout << "The days between both dates: " << output << endl;

            cout << "" << endl;

        }


        else

        {

            tempMonth = (month1 - month2) - 2;

            tempMonth = tempMonth * 30;

            day1 = 30 - day1;


            output = (day1 + day2) + tempMonth;


            cout << "The days between both dates: " << output << endl;

            cout << "" << endl;

        }



    }


    else

    {

        if (month1 < month2)

        {

            month1 = 12 - month1;

            tempMonth = (month1 + month2) - 1;

            tempMonth = tempMonth * 30;

            day1 = 30 - day1;


            output = (day1 + day2) + tempMonth;


            cout << "The days between both dates: " << output << endl;

            cout << "" << endl;

        }


        else

        {

            month1 = 12 - month1;

            tempMonth = (month1 + month2) - 1;

            tempMonth = tempMonth * 30;

            day1 = 30 - day1;


            output = (day1 + day2) + tempMonth;


            cout << "The days between both dates: " << output << endl;

            cout << "" << endl;

        }

    }

}

Bearbeitet von LeeHarvey

Es würde nicht schaden, die Tage je Monat etwas realistischer zu gestalten.

Auch solltest Du Dir einmal überlegen, was eigentlich die folgende Zeile in Deinem Code anrichtet:

if (year1 = year2)

ein heißer tipp: in C ist = keine überprüfung, sondern ne zuweisung. den fehler mach ich auch ständig wenn ich mit zuwenig koffein im blut code schreibe...

== ist die überprüfung.

abgesehen von den 30 Tage-Monaten fehlt da auch noch ne schaltjahrbetrachtung.

ach ja, plural von Datum ist simpel: Daten ^^

Bearbeitet von Shadak

  • Autor

Leute Leute Danke f die vielen Antworten aber das ist eine Übung die so gestellt wurde. Banken rechnen mit 30 Tagen pro Monat also 360 Tage im Jahr, und ich soll da ohne Arrays oder so arbeiten sondern rein logisch denken und versuchen so den Code zu basteln.

@ Shadak: ja == Zuweisung, = Vergleich, muss ich nochmal drübersehn wo das falsch ist. Und Schaltjahr ist da nicht relevant aber bei Lust und Laune bau ich das mit ein.

@ habbeda: diese Bedingung (year1 = year2) richtet an dass wenn die beiden Daten im selben Jahr liegen (was die Berechnung ja easy macht) ich nicht mit Jahreswechsel rechnen muss, ansonsten wenn das eine Datum 2011 ist das andere 2012 die Aufgabe schon um einiges schwieriger wird.

@ flashpixx: diese difftime Funktion ist zu viel des guten aber danke trotzdem

Die Aufgabe dient zum Üben des logischen Verständnisses.

Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ? Ohne einem Array dass sagt "höchstens 12 (Monate)" ?

ja == Zuweisung, = Vergleich, muss ich nochmal drübersehn wo das falsch ist.

Nein das ist falsch:

= Zuweisung und == Vergleich

Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ?

Ja, aber sinnvoll so ist es nicht

@ Shadak: ja == Zuweisung, = Vergleich, muss ich nochmal drübersehn wo das falsch ist. Und Schaltjahr ist da nicht relevant aber bei Lust und Laune bau ich das mit ein.

*kaffetasse rüberschieb*

Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ? Ohne einem Array dass sagt "höchstens 12 (Monate)" ?

musst halt ein paar ifs mehr einbauen...

nebenbei, deine benutzereingabe zu programmanfang ist nicht sehr benutzerfeundlich...ich hätt da 2 integers (date1, date2) eingeben lassen mit format 8 stellen und diese 8 stellen dann über ne forschleife mit modulo intern runterbrechen lassen.

Bearbeitet von Shadak
ich brauch mehr kaffee...

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.