Kalendarz ver. 1
Kod był wyświetlany 1379 razy.
    /*
  Name: Kalendarz - zadanie maturalne 
  Copyright: GPL GNU
  Date: 02-12-07 09:48
  Description: 
Według kalendarza juliańskiego wprowadzonego przez Juliusza Cezara od roku 45 p.n.e., każdy rok nieprzestępny trwał 365 dni, a rok przestępny przypadający dokładnie co 4 lata trwał 366 dni.
Ustalenia te spowodowały, że na każde 128 lat pojawiała się różnica jednego dnia pomiędzy tym kalendarzem, a kalendarzem astronomicznym. Aby zlikwidować narastający błąd, w roku 1582 zastąpiono kalendarz juliański kalendarzem gregoriańskim. Nowy kalendarz obowiązuje od 4 października 1582 roku, kiedy po czwartku 4 października 1582 nastąpił piątek 15 października 1582 r.
Latami przestępnymi w kalendarzu juliańskim były wszystkie te lata, które dzieliły się bez reszty przez 4.
Według kalendarza gregoriańskiego latami przestępnymi są te, które dzielą się bez reszty przez 4, z wyjątkiem tych, które dzielą się bez reszty przez 100, a nie dzielą się bez reszty przez 400.
a) Napisz program, który uwzględniając powyższy opis wyświetli wszystkie daty wypadające w podanym z klawiatury dniu tygodnia w lutym wskazanego roku.
Rok powinien być liczbą naturalną z przedziału <1500, 2005>.
Przykładowe okno dialogowo-wynikowe:
podaj dz. tygodnia: wtorek
podaj rok: 2000
Odp:
01.02.2000
08.02.2000
15.02.2000
22.02.2000
29.02.2000
Dane wejściowe:
• dzień tygodnia „podany z klawiatury” jako tekst (pisany bez polskich liter i spacji);
• rok „podany z klawiatury”.
Program powinien wyświetlić komunikat o błędnie wprowadzonym dniu tygodnia oraz błędnie wprowadzonym roku.
Układ wyświetlonych wyników powinien być zgodny z układem przedstawionym w przykładowym oknie dialogowo-wynikowym. Daty powinny zostać wyświetlone w formacie dd.mm.rrrr. W kodzie programu powinny znaleźć się komentarze umożliwiające analizę użytego algorytmu.
*/

#define NIEZNANY 0xA0
#define PONIEDZIALEK 1
#define WTOREK 2
#define SRODA 3
#define CZWARTEK 4
#define PIATEK 5
#define SOBOTA 6
#define NIEDZIELA 7

#define BUFF_SIZE 255

#include <cstdlib>
#include <iostream>
#include <vector>

#define __DEBUG
using namespace std;

struct DATA
{
int d;
int m;
int r;       
};

class KALENDARZ
{
 public:
  KALENDARZ();
  ~KALENDARZ();
  void zapiszDzien(const char*);
  int dajDzien();
  void zapiszRok(int);
  int dajRok();
  void dajDaty(vector<DATA>&);
  
  private:
   int dzien;   
   int rok;   
};


void clrstr(char*&); //czysci ciag znakow

int main(int argc, char *argv[])
{
    cout<<"podaj dz. tygodnia: ";
    char * dzien = new char[BUFF_SIZE];
    clrstr(dzien);
    int rok;
    
    KALENDARZ kal;
    cin>>dzien;
    kal.zapiszDzien(dzien);
    if(kal.dajDzien() == NIEZNANY)
    {
     cout<<"Zly dzien";
     cin.ignore();
     getchar();
     return 1;               
    }
    
    cout<<"podaj rok: ";
    cin>>rok;
    
    kal.zapiszRok(rok);
    if(kal.dajRok() < 1500 || kal.dajRok() > 2005)
    {
     cout<<"Zly rok";
     cin.ignore();
     getchar();
     return 1;            
    }
    
    vector<DATA> v;
    
    kal.dajDaty(v);
    
    cout<<"Odp:"<<endl;
    
    for(int i = 0 ; i< v.size();i++)
    {
    cout<<v[i].d<<".02."<<v[i].r<<endl;        
    }
    
    cin.ignore();
    getchar();
    return 0;
}

void clrstr(char*&str)
{
 for(int i = 0 ; i< BUFF_SIZE ;i++)
 {
  str[i] = '\0';       
 }     
}


KALENDARZ :: KALENDARZ()
{        
}

KALENDARZ :: ~KALENDARZ()
{         
}

void KALENDARZ :: zapiszRok(int r)
{
rok = r;     
}

int KALENDARZ :: dajRok()
{
 return rok;   
}

int KALENDARZ :: dajDzien()
{
return dzien;    
}


void KALENDARZ :: dajDaty(vector<DATA>& vDest)
{
vDest.clear();    
DATA data; 
int tmpDzien = PONIEDZIALEK;


//=============================1582=============================================

 if(rok <= 1582)
 {
   bool bylPrzestepny = false;
  for(int i = 1500 ; i <= rok; i++)
  {
   if(bylPrzestepny) tmpDzien += 2; else tmpDzien++;
   if(i % 4 == 0)
   {
    bylPrzestepny = true;    
   }        
  }
  tmpDzien %= 7;
  
  if(rok % 4 == 0)
  {
    for(int i = tmpDzien; i<= 29; i+=7)
    {
     if(i+dzien-1 > 29)break;
     data.d = i + dzien - 1;
     data.m = 2;
     data.r = rok;
     vDest.push_back(data); 
   }      
  }
  
   if(rok % 4 != 0)
  {
    for(int i = tmpDzien ; i<= 28; i+=7)
    {
     if(i+dzien-1 > 28)break;
     data.d = i + dzien - 1;
     data.m = 2;
     data.r = rok;
     vDest.push_back(data); 
   }      
  } 
 }
//===================/1582/====================================================

tmpDzien = WTOREK;
 if(rok > 1582)
 {
   bool bylPrzestepny = false;
  for(int i = 1583 ; i <= rok; i++)
  {
   if(bylPrzestepny) tmpDzien += 2; else tmpDzien++;
   if((i % 4 == 0) && (i % 100 != 0) && (i%400 == 0))
   {
    bylPrzestepny = true;    
   }        
  }
  tmpDzien %= 7;
  
  if(rok % 4 == 0)
  {
    for(int i = tmpDzien; i<= 29; i+=7)
    {
     if(i+dzien-1 > 29)break;
     data.d = i + dzien-1;
     data.m = 2;
     data.r = rok;
     vDest.push_back(data); 
   }      
  }
  
   if(rok % 4 != 0)
  {
    for(int i = tmpDzien ; i<= 28; i+=7)
    {
     if(i+dzien-1 > 28)break;
     data.d = i + dzien-1;
     data.m = 2;
     data.r = rok;
     vDest.push_back(data); 
   }      
  } 
 }

}

//====================================================================
void KALENDARZ :: zapiszDzien(const char* d)
{
 if(strcmp(d,"poniedzialek") == 0)
  {
   dzien = PONIEDZIALEK;
   #ifdef __DEBUG
    cout<<"D: poniedzialek"<<endl;
   #endif 
   return;                               
  }
  
   if(strcmp(d,"wtorek") == 0)
  {
   dzien = WTOREK;
   #ifdef __DEBUG
    cout<<"D: wtorek"<<endl;
   #endif 
   return;                               
  }
  
   if(strcmp(d,"sroda") == 0)
  {
   dzien = SRODA;
   #ifdef __DEBUG
    cout<<"D: sroda"<<endl;
   #endif 
   return;                               
  }
  
   if(strcmp(d,"czwartek") == 0)
  {
   dzien = CZWARTEK;
   #ifdef __DEBUG
    cout<<"D: czwartek"<<endl;
   #endif 
   return;                               
  }
  
   if(strcmp(d,"piatek") == 0)
  {
   dzien = PIATEK;
   #ifdef __DEBUG
    cout<<"D: piatek"<<endl;
   #endif 
   return;                               
  }
  
   if(strcmp(d,"sobota") == 0)
  {
   dzien = SOBOTA;
   #ifdef __DEBUG
    cout<<"D: sobota"<<endl;
   #endif 
   return;                               
  }
  
   if(strcmp(d,"niedziela") == 0)
  {
   dzien = NIEDZIELA;
   #ifdef __DEBUG
    cout<<"D: niedziela"<<endl;
   #endif 
   return;                               
  }
  
  dzien = NIEZNANY;return;
}

//=====================================================================
    
Pobierz plik tekstowy
Załączniki
Administrator WJL
PHP&SQL coded by NOVA-IT