C :: Aufgabe #21
1 Lösung
Anzahl Freitag, der 13te über bestimmten Zeitraum
Anfänger - C
von pocki
- 29.12.2012 um 19:56 Uhr
Schreibe ein Programm welches 2 verschiedene Datum einliest und berechne die Anzahl wie oft in diesem Zeitraum der 13te eines Monats auf einen Freitag fiel und gib diese aus.
Konsolenausgabe:
Startdatum: 01.01.2009
Enddatum: 31.12.2009
13.02.2009
13.03.2009
13.11.2009
Summe: 3
Lösungen:
/****************************************
* fr13.c 13. Freitage ermitteln
* devnull 02-03-2014
****************************************/
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define TMBUF_LEN 20
#define SECONDS_PER_DAY 86400
#define DATE_FORMAT "%d.%m.%Y"
int input_date(char *sdate, struct tm *tmi)
{
char inbuf[TMBUF_LEN + 1];
char *pe;
printf("%-10s: ", sdate);
scanf("%s", inbuf);
inbuf[TMBUF_LEN] = '\0';
strcat(inbuf, " 00:00:01");
pe = strptime(inbuf, DATE_FORMAT " %T", tmi);
if (pe == NULL || *pe != 0) {
fprintf(stderr, "%11s %10s\n", "Ungueltiges", sdate);
return 1;
}
return 0;
}
int main(void)
{
time_t t, ts, te; // Start,Ende UNIX-Zeit
struct tm tms, tme; // Start,Ende Lokalzeit-Struktur
struct tm *tml;
char tmbuf[TMBUF_LEN];
int cdays = 0;
if ((input_date("Startdatum", &tms) != 0) ||
(input_date("Enddatum", &tme) != 0))
return 1; // Fehler
ts = mktime(&tms);
te = mktime(&tme);
for (t = ts; t <= te; t += SECONDS_PER_DAY) {
tml = localtime(&t);
if (tml->tm_mday == 13 && tml->tm_wday == 5) {
strftime(tmbuf, TMBUF_LEN, DATE_FORMAT, tml);
printf("%s\n", tmbuf);
cdays++;
}
}
printf("Summe: %d\n", cdays);
return 0;
}
