dzień tygodnia sprawdzenie poprawnosci daty

dzień tygodnia sprawdzenie poprawnosci daty
DC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 325
0

Napisz program, który wczytuje ze standardowego wejścia datę w formacie DD-MM-RRRR a następnie sprawdza czy jest ona poprawna. Dla poprawnej daty program powinien wydrukować na standardowym wyjściu odpowiadający jej dzień tygodnia (PN, WT, SR, CZ, PT, SB, ND) zaś dla daty niepoprawnej slowo ERROR.

Przykładowe wejście:
07-04-2018
08-04-2018
09-04-2018
10-04-2018
11-04-2018
12-04-2018
13-04-2018
40-04-2018
12-15-2018
29-02-2018
Przykładowe wyjście:
SB
ND
PN
WT
SR
CZ
PT
ERROR
ERROR
ERROR

Kopiuj
#include <stdio.h>

char *tydzien[7]= {"SB","ND","PN","WT","SR","CZ","PT"};
int dni_mies[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
int dni_mies_rok[12];

int sprawdz_date(int d, int m, int r)
{
    return (d>0 && d<=dni_mies[m-1]) && (m>=1 && m<=12);
}

int rok_przestepny(int r)
{
    return (r%400==0 || (r%4==0 && r%100!=0));
}

int mk_dni_mies_rok()
{
    int n;
    for(n=1; n<12; n++)
    {
        dni_mies_rok[n]=dni_mies_rok[n-1]+dni_mies[n-1];
    }
    return n;
}

int ile_przestepnych(int r)
{
    int n,iprzestepnych=0;
    for(n=1; n<r; n++)
    {
        if(rok_przestepny(n))
            iprzestepnych++;
    }
    return iprzestepnych;
}

int main(int argc, char *argv[])
{
    int d,m,r;
    for(;;)
    {
        printf("podaj date(dd-mm-rrrr): ");
        scanf("%d-%d-%d",&d,&m,&r);
        if(rok_przestepny(r))
            dni_mies[1]=29;
        else
            dni_mies[1]=28;
    if(!sprawdz_date(d,m,r)){
            printf("ERROR");
    }
       mk_dni_mies_rok();
printf("%s\n",tydzien[(d+dni_mies_rok[m-1]+r+ile_przestepnych(r))%7]);
    }


}

Proszę o pomoc, gdy podaje zła date wyswietla mi nieporawny dzien zamiast slowa error

Hodor
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 337
0

Po dopisaniu else wyświetla się tylko error:

Kopiuj
if (!sprawdz_date(d, m, r))
    printf("ERROR\n");
else {
    mk_dni_mies_rok();
    printf("%s\n", tydzien[(d + dni_mies_rok[m - 1] + r + ile_przestepnych(r)) % 7]);
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.