Loading:


C++ ustalenie dnia tygodnia na podstawie daty w formacie dd.mm.rrrr

Skrypt ustala dzień tygodnia na podstawie daty.

Treść zadania:

Zainicjuj tablicę z nazwami dni tygodnia. Wczytaj datę w postaci dd.mm.rrrr (dzień, miesiąc rok) do zmiennych d, m, r, a następnie wyznacz dzień tygodnia i wyprowadź tę datę oraz nazwę dnia tygodnia. Powyższą czynność powtarzaj tak długo, jak długo podawane daty są poprawne. Kalendarz gregoriański wprowadzono 15.10.1582 r. Program nie powinien akceptować daty wcześniejszej ani przekraczającej rok 2999. W tym czasie lata przestępne to te, które są podzielne przez 400 lub podzielne przez 4, ale nie przez 100.
Uwzględnij, że po roku zwykłym dzień tygodnia przesuwa się o 1, a po przestępnym o2 – nie musisz wtedy mnożyć numeru roku przez 365 i zmieścisz się w zakresie liczb typu int. Zainicjuj tablicę z liczbami dni w każdym miesiącu. Po wczytaniu daty zmodyfikuj liczbę dni lutego, a następnie sprawdź poprawność tej daty. Do 12-elementowej tablicy wpisz liczby dni pomiędzy 1 stycznia, a pierwszym dniem kolejnych miesięcy (dla stycznia będzie to zero, a dla lutego 31). Tablica ta ułatwi określenie, którego dnia roku dotyczy podana data. Jeśli do tego dodasz numer roku oraz liczbę lat przestępnych, które go poprzedzają (licząc od roku 1 wg zasad obowiązujących dzisiaj), to reszta z dzielenia tej sumy przez siedem wyznaczy dzień tygodnia.



Napisz Artykuł

Listing


#include <stdio.h>

char *tydzien[7]={"sobota","niedziela","poniedzialek","wtorek","sroda","czwartek","piatek"};
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) && (r>=1582 && r<=2999);
}

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)) return 0;
    mk_dni_mies_rok();
    printf("%s\n",tydzien[(d+dni_mies_rok[m-1]+r+ile_przestepnych(r))%7]);
  }
}
 


kontakt w sprawie miejsca



Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-19 v.1.5 | design: diviXdesign & rainbowcolors