Da fehlt was...



  • Soweit ist die Aufgabe richtig, nur gibt er keine Korrekte zahl aus...
    #include <cmath>
    #include <iostream>
    using namespace std;

    int main ()

    {

    double Gregorianisches_Datum;
    long double Julianischer_Tag;
    double Julianischer_Tag2;
    double Julianischer_Tag3;
    double Tag;
    double Monat;
    double Jahr;
    char Antwort;

    do
    {
    cout << " Geben Sie das Jahr ein ! " ;
    cin >> Jahr;

    cout << " Geben Sie den Monat ein ! ";
    cin >> Monat ;

    while ( Monat > 12 )
    {
    cout << "Achtung! Ihre Eingabe ist falsch! " ;
    cin >> Monat ;

    }

    cout << " Geben Sie den Tag ein !";
    cin >> Tag;

    while ( Tag > '31' )
    {
    cout << " Achtung! Ihre Eingabe ist falsch! " ;

    }

    Julianischer_Tag = Gregorianisches_Datum - 32075 + 1461*( Jahr + 4800 + ( Monat - 14 ) / 12 ) / 4 ;
    Julianischer_Tag2 = Julianischer_Tag + 367*( Monat - 2 - ( Monat - 14 ) / 12 * 12 ) / 12;
    Julianischer_Tag3 = Julianischer_Tag2 - 3*( ( Jahr + 4900 + ( Monat - 14 ) / 12 ) / 100 ) / 4 ;

    cout << " Ihr engegbenes Datum entspricht " << Julianischer_Tag << endl;

    cout << " Moechten Sie eine weitere Berechnung (j/n) ? ";
    cin >> Antwort;

    }

    while ( Antwort == 'j');

    return 0;
    }
    Ergebnis bei Eingabe 244027 e + 006

    Woran liegt das????
    Vielen Dank 😃



  • Erstens: Warum speicherst du die Datumswerte eigentlich in double? Berücksichtigst du etwa auch halbe Tage? (im Klartext: Dafür düfte int oder long passender sein)

    Zweitens: Entweder ich bin voerzeitig erblindet oder dort wird tatsächlich nirgends die Variable "Gregorianisches_Datum" mit einem Wert belegt. (lokale Variablen erhalten vom Start weg einen unbestimmten Wert)



  • CStoll schrieb:

    (lokale Variablen erhalten vom Start weg einen unbestimmten Wert)

    Den find ich *rofl*. Das klingt so, als würde da wer was gemeinerweise was unbestimmtes zuweisen^^ 🤡

    PS: jaja ich weis wie du es meinst, is ja alles ok, find trotzdem *rofl*



  • Das Gregorianische Datum muß doch der User eingeben, oder nich???



  • Ja, entweder der User gibt es ein oder du berechnest es. Aktuell gibt der User nur die Variablen "Jahr", "Monat" und "Tag" ein - du kannst nicht erwarten, daß der Compiler dir daraus magischerweise eine Formel herleitet, um "Gregorianisches_Datum" zu füllen (für den Compiler sind das Variablen, die absolut nichts miteinander zu tun haben).

    @Pellaeon: Schön, wenn ich dich erheitern konnte 😃



  • Danke, ihr seit riesig!!!! 😃



  • Wobei hier natuerlich auch zu sagen ist, dass man variablen bei der erstellung am besten auch gleich initialisiert.

    erstens umgeht man damit das problem mit den unitialisierten variablen ... welche durchaus unangenehmes Laufzeitverhalten mit sich bringen keonnen (debug version verhaelt sich volkommen anders wie release version z.B.)

    Man ist soweiso immer zu faul sich default initialisierungswerte einfallen zu lassen, deshalb tendiert man mehr zu c / c++ like code, wo man variablen erst deklariert, wenn man sie auch wirklich braucht .... im gegensatz zu basic und co.

    Ciao ...


Anmelden zum Antworten