Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben (bearbeitet)

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
Geschrieben
vermute habe was bei der Verschachtelung falsch gemacht
Wenn du davon ausgehst, dass jeder Monat 30 Tage hat (was du offenbar tust), brauchst du überhaupt keine Verschachtelung.
Geschrieben

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)

Geschrieben (bearbeitet)

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
Geschrieben

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)" ?

Geschrieben

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

Geschrieben

Übungszweck. Die Synapsen aktivieren, Proteine im Hirn verbrennen ;) Naja ich werds schon hinbekommen.

Würde es mal einfach mit nem Array versuchen.

Ups ja, = Zuweisung, == Vergleich

Geschrieben (bearbeitet)
@ 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...
Geschrieben

@ shadak: lol i know, habs umständlich gemacht mit der Eingabe zu Beginn. Verstehe aber nicht wie das mit Modulo gehen soll. Sind doch Punkte dazwischen ...

Geschrieben

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

Wofür solltest du ein Array brauchen?

Du brauchst noch nicht einmal ein if.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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