Datumsverarbeitungen in meinem Programm

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
xingxing
Beiträge: 3
Registriert: Mi Feb 14, 2018 8:26 am

Datumsverarbeitungen in meinem Programm

Beitrag von xingxing » Mi Feb 14, 2018 9:19 am

Code: Alles auswählen

int is_leapyear(){

    int YY;
    int yy;
    int day;
    int imonth;
    
    // da ich zu meiner Berechnung des Doomsdays das Jahr in Jahrhundert (YY) und nachfolgend (yy) für die weitere Brechnung benötige
    //aber für die Berechnung eines Schaltjahres das Datum in der Form iYear (2000)=(yyyy) benötige und den Benutzer nicht mehr als nötig
    //nach eingaben abfragen möchte, muss diese Datumsabfrage einaml geschehen aber für alle Berechnungen gültig und zugänglich sein
    int iYear = YYyy;
    
    
    //hier zu sehen das Datum in der Form (yyyy) dieses funktioniert wie gesagt wunderbar für die Berechnung eines Schaltjahres
    //nur leider nicht für die Berechnung der Doomsday Mehtode, da ich erst den Schlüssel für das (Jahrundert Doomsday) ausrechen muss z.b. (1900)
    // und dann die Berechnug des nachfolgendem Teil z.b (20) dürchführen  + vorher ermitteltem Schlüssel um dann mit der Methode vorzufahren um den Doomsday und genauen Wochentag zu bestimmen.
    //puts("Please input your date in the following format (yyyy/dd/mm)");
     
    scanf("%2d%*c%2d%*c%2d%*c%2d",&YY, &yy, &day, &imonth);

    assert(iYear >= START_OF_GREGORIAN_CALENDAR);
    //hier weis ich nicht wie ich die beiden Daten zusammensetzen soll um sie weiterzuverarbeiten, das (YY + yy) soll dies veranschaulichen 
    //assert(YY + yy >= START_OF_GREGORIAN_CALENDAR);
    if((iYear % 4 && iYear % 100) == 0 )
    {
        printf("the year %d is a leap year\n", iYear);
    }
    else
    {
        printf("the year %d is not a leap year\n", iYear);
    }

}
Hallo Liebe Nutzer

erst einmal ein Hallo meinerseits, ich bin ziemlich neu in dem Thema Programmierung und der C-Programmierung.

Ich habe mir einige Bücher zugelegt und bin bei einigen Kursen eingeschrieben.

Nun bin ich an einem Punkt angekommen wo ich bei einer Aufgabe die uns zugeteilt wurde nicht weiterkomme. Oben im Code, den ich hoffentlich richtig hinzugefügt habe, wird kurz demonstriert wo meine Problematik liegt, ich hoffe es ist verständlich.

Die Details zur Aufgabe lauten; wir müssen ein Programm schreiben welches mit Hilfe von selbstgeschriebenen oder auch nur einer Funktion, aus einem von einem Benutzer angegebenem Datum errechnet ob es ein Schaltjahr ist, wir müssen den Doomsday berechnen und den Tag der Woche errechnen und ausgeben.

Wir haben noch keine Pointer, Felder/Arrays, Structs oder sonstiges zur Verfügung, die Übung die uns zugetragen wurde soll uns das Schreiben und erstellen von Funktionen näher bringen.

Ich hoffe ihr könnt mir mit meinen Problemen hier weiterhelfen

Vieln Dank


EDIT nufan: Code-Tags

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Datumsverarbeitungen in meinem Programm

Beitrag von Xin » Mi Feb 14, 2018 1:36 pm

Frage 1: Warum fragst Du das Jahr in zwei Variablen ab!?
Frage 2: Was machst Du mit dem *c in dem scanf?

Antwort 1: YY soll wohl die vorderen zwei Ziffern haben (1999 => 19) und yy die hinteren (99).
Entsprechend wäre die Rechnung iYear = YY*100 + yy;

Aber vergiss das: Mach eine vernünftige scanf-Abfrage oder noch besser: Verzichte auf die Abfrage und nimm die Programmparameter:
meinprogramm.exe 2000 12 24
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xingxing
Beiträge: 3
Registriert: Mi Feb 14, 2018 8:26 am

Re: Datumsverarbeitungen in meinem Programm

Beitrag von xingxing » Do Feb 15, 2018 7:43 am

Danke erst einmal für deine Antwort

FYI: leider habe ich gerade schon antworten wollen und beim klicken auf die Vorschau, wurde ich ausgeloggt und habe alles zuvor geschriebene Verloren :cry:

So nun zu den Fragen.

Frage 1:


1. Funktion errechnet ob es sich um ein Schaltjahr handelt und gibt dies auf den Bildschirm aus, (iYear).


Die nächsten 3 Funktion sind für die Doomsday Methode.
1. Errechnet den Schlüssel für den Jahrhundert Doomsday (YY).

2. Nimmt den hinteren Teil (yy) und addiert das Ergebnis mit dem Schlüssel(YY), um den Doomsday für z.b. 1999 zu ermitteln.

3.Nimmt den Tag(day) und den Monat (imonth) unter der Berücksichtigung des ermittelten Doomsdays für die Daten für 1999.
Details zu Funktion 3: Tage sind von 0-6 durchnummeriert
Seih das Datum 17 April, der Doomsday für den April ist 4 = Dienstag,
die Differenz der Tage 17 und 4 = 13, nun 13 % 7 = 6,
Nun wird der Dienstag + 6 Tage gerechnet = Montag,
das heißt der 17 April des gegebenen Jahres ist ein Montag.


Nun zur Frage 2:
Ich dachte das ich das *c für die Formation so benötige, um ehrlich zu sein habe ich es leider nicht genug hinterfragt, nun weiß ich aber zumindest warum all meine Berechnungen gescheitert sind, nur leider weiß ich immer noch nicht was das *c hier genau gemacht hat, also im Detail, kannst du mir dieses erklären?.


Zu den Programmparametern diese haben wir noch nicht drangenommen, diese Aufgabe soll uns das erstellen und einsetzten eigener Funktionen näher bringen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Datumsverarbeitungen in meinem Programm

Beitrag von Xin » Do Feb 15, 2018 10:55 am

xingxing hat geschrieben:Danke erst einmal für deine Antwort

FYI: leider habe ich gerade schon antworten wollen und beim klicken auf die Vorschau, wurde ich ausgeloggt und habe alles zuvor geschriebene Verloren :cry:
Im Browser zurückgehen, Text kopieren, einloggen, antworten, Text einfügen.

Webbrowser bringen mich bei Texteingaben auch regelmäßig zur Weißglut :D
xingxing hat geschrieben:So nun zu den Fragen.

Frage 1:


1. Funktion errechnet ob es sich um ein Schaltjahr handelt und gibt dies auf den Bildschirm aus, (iYear).


Die nächsten 3 Funktion sind für die Doomsday Methode.
1. Errechnet den Schlüssel für den Jahrhundert Doomsday (YY).

2. Nimmt den hinteren Teil (yy) und addiert das Ergebnis mit dem Schlüssel(YY), um den Doomsday für z.b. 1999 zu ermitteln.

3.Nimmt den Tag(day) und den Monat (imonth) unter der Berücksichtigung des ermittelten Doomsdays für die Daten für 1999.
Details zu Funktion 3: Tage sind von 0-6 durchnummeriert
Seih das Datum 17 April, der Doomsday für den April ist 4 = Dienstag,
die Differenz der Tage 17 und 4 = 13, nun 13 % 7 = 6,
Nun wird der Dienstag + 6 Tage gerechnet = Montag,
das heißt der 17 April des gegebenen Jahres ist ein Montag.
Das ist aber keine Frage an mich, hm? ^^
xingxing hat geschrieben: Nun zur Frage 2:
Ich dachte das ich das *c für die Formation so benötige, um ehrlich zu sein habe ich es leider nicht genug hinterfragt, nun weiß ich aber zumindest warum all meine Berechnungen gescheitert sind, nur leider weiß ich immer noch nicht was das *c hier genau gemacht hat, also im Detail, kannst du mir dieses erklären?.
Wenn ich scanf richtig im Kopf habe, erwartet er in der Form nach einer zweistelligen Zahl den Text "*c"
Die Eingabe sollte ja YYyy/mm/dd sein, dann wäre %2d%2d%c%2d%c%2d zu YYyy'/'mm'/'dd geworden. (Achtung %c, nicht *c). Die Character werden aber nicht in einer Character-Variable gespeichert, sondern in mm. Dann sind einfach zu wenige Angaben da.

Ich programmiere seit über 20 Jahren C. Warum habe ich die Benutzung von scanf nicht im Kopf? Weil man scanf nicht benutzt.
xingxing hat geschrieben:Zu den Programmparametern diese haben wir noch nicht drangenommen, diese Aufgabe soll uns das erstellen und einsetzten eigener Funktionen näher bringen.
Hier lesen: Übergabeparameter und diese dann umsetzen. Wenn Dein Lehrer/Ausbilder ein Problem damit hast, dass Du Aufgaben besser als gefordert löst, wechsle den Lehrer/Ausbilder. :-)
Wenn jemand verlangt, dass Du schlechte Programmierung umsetzt, dann ist nicht das Verstehen von Programmierung dein Problem, sondern dass Du gerade schlechte Programmierung nciht verstehst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

xingxing
Beiträge: 3
Registriert: Mi Feb 14, 2018 8:26 am

Re: Datumsverarbeitungen in meinem Programm

Beitrag von xingxing » Do Feb 15, 2018 11:30 am

Ja das war schon komisch, ich vermute ich wurde vielleicht schon vorher ausgeloggt, als ich mir dann die Vorschau angucken wollte muss sich der Status geändert haben bzw. aktualisiert haben, ich habe dann versucht zurückzugehen, nur leider blickte ich auf ein blankes Eingabefeld :shock: . Nun ja in Zukunft werde ich wohl immer erst alles kopieren oder in einen Editor pas kopieren.
Das ist aber keine Frage an mich, hm? ^^

doch das war meine Antwort zu deiner ersten Frage :) , vielleicht nicht so deutlich meinerseits.

Ja scanf werde ich vermutlich in der Zukunft auch nicht mehr so oft benutzen, es geht hier eher um den Einstieg und um später dann die Unterschiede und vielleicht Vorzüge und Implantierung und Formatierung zu veranschaulichen oder auch nicht. Was empfielst du denn in diesem Fall, aslo was würdest du hier scanf vorziehen?.

So nun gehe ich in die nächste Runde und werde versuchen das was ich in meinen pseudocode verfasst habe auch umzusetzen, das bedeuted im Detail versuchen die Funktionen einzubauen und gucken das sie auch miteinander komunizieren...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Datumsverarbeitungen in meinem Programm

Beitrag von Xin » Do Feb 15, 2018 11:50 am

xingxing hat geschrieben:Ja das war schon komisch, ich vermute ich wurde vielleicht schon vorher ausgeloggt, als ich mir dann die Vorschau angucken wollte muss sich der Status geändert haben bzw. aktualisiert haben, ich habe dann versucht zurückzugehen, nur leider blickte ich auf ein blankes Eingabefeld :shock: . Nun ja in Zukunft werde ich wohl immer erst alles kopieren oder in einen Editor pas kopieren.
Wenn Du Dich beim Anmelden dauerhaft anmeldest, wirst Du nicht mehr ausgeloggt.
xingxing hat geschrieben:
Das ist aber keine Frage an mich, hm? ^^

doch das war meine Antwort zu deiner ersten Frage :) , vielleicht nicht so deutlich meinerseits.
Hüstl... ja... ^^
Sorry, momentan ist was viel gewusel, da wird der Stack im Multithreading aufgeteilt ;)
xingxing hat geschrieben:Ja scanf werde ich vermutlich in der Zukunft auch nicht mehr so oft benutzen, es geht hier eher um den Einstieg und um später dann die Unterschiede und vielleicht Vorzüge und Implantierung und Formatierung zu veranschaulichen oder auch nicht. Was empfielst du denn in diesem Fall, aslo was würdest du hier scanf vorziehen?.
Die verlinkten Übergabeparameter.

Ansonsten möchtest Du das Jahr vierstellig haben. Nimm es doch vierstellig und teile es dann durch 100, bzw. Modulo 100 für die Komponenten, die Du brauchst.
Am Rande: War das Jahr 2000 eigentlich ein Schaltjahr? ^^
xingxing hat geschrieben: So nun gehe ich in die nächste Runde und werde versuchen das was ich in meinen pseudocode verfasst habe auch umzusetzen, das bedeuted im Detail versuchen die Funktionen einzubauen und gucken das sie auch miteinander komunizieren...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten