Форум программистов, компьютерный форум CyberForum.ru

календарь - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Vavan_monster
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 15
13.07.2011, 12:03     календарь #1
Даны натуральные числа А,В, С, которые обозначают число, месяц и год. Получить тройку чисел, соответствующую следующему дню.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
int main ()
{
int x;
int y;
int z;
cout << "vvedite god";
cin>>x;
cout<<"vvedite mesyz ";
cin>>y;
cout<<"vvedite den";
cin>>z;
if ( y > 12 || z > 31)
  {
   cout<<"nepravilno vvedena data ";
   getch ();
   return 0;
}
if ( y==2 || z > 29)
  {
   cout<<"nepravilno vvedena data ";
   getch ();
   return 0;
}    
if ( x%4=0 || y==2 || z > 29)
  {
   cout<<"nepravilno vvedena data ";
   getch ();
   return 0;
}    
if ( y==2 || z > 28)
  {
   cout<<"nepravilno vvedena data ";
   getch ();
   return 0;
}    
switch(y)
 { 
         case 1:
              {if (z<31)z++;
              else
              {y++;z=1;}
                }
         break;
          case 3:
              {if (z<31)z++;
              else
              {y++;z=1;}
                }
         break;
          case 5:
              {if (z<31)z++;
              else
              {y++;z=1;}
                }
         break;
          case 8:
              {if (z<31)z++;
              else
              {y++;z=1;}
                }
         break;
          case 10:
              {if (z<31)z++;
              else
              {y++;z=1;}
                }
         break;
          case 4:
              {if (z<30)z++;
              else
              {y++;z=1;}
                }
         break;
          case 6:
              {if (z<30)z++;
              else
              {y++;z=1;}
                }
         break;
          case 9:
              {if (z<30) z++;
              else
              {y++;z=1;}
                }
         break;
          case 11:
              {if (z<30)z++;
              else
              {y++;z=1;}
                }
         break;
          case 12:
              {if (z<31)z++;
              else
              {y++;z=1;x++;}
                }
         break;
          case 2:
              {if (z<29)z++;
              else
              {y++;z=1;}
                }
         break;
        }
          cout<<"god:"<<x<<endl;
          cout<<"mesic:"<<y<<endl;
          cout<<"dey:"<<z<<endl;
          
          getch();
          return 0;}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2011, 12:03     календарь
Посмотрите здесь:

японский календарь C++
Универсальный календарь C++
Календарь в С C++
Восточный календарь C++
C++ Календарь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.07.2011, 14:21     календарь #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
 
int main(){
  using namespace boost::gregorian;
  size_t num, mon, yea;
  std::cin >> num >> mon >> yea;
  date d(yea, mon, num);
  d = d + date_duration(1);
  std::cout << d;
  return 0;
}
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
13.07.2011, 17:33     календарь #3
Код сохранил, негоже такому добру пропадать.
Если есть желание/надо написать код по подсчёту даты вручную то:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Date.h
#ifndef DATE_H
#define DATE_H
 
#include <iostream>
using std::ostream;
 
class Date
{
   friend ostream &operator<<( ostream &, const Date & );
public:
   Date( int m = 1, int d = 1, int y = 1900 ); // default constructor
   void setDate( int, int, int ); // set month, day, year
   Date &operator++(); // prefix increment operator
   Date operator++( int ); // postfix increment operator
   const Date &operator+=( int ); // add days, modify object
   bool leapYear( int ) const; // is date in a leap year?
   bool endOfMonth( int ) const; // is date at the end of month?
private:
   int month;
   int day;
   int year;
 
   static const int days[]; // array of days per month
   void helpIncrement(); // utility function for incrementing date
}; // end class Date
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//Date.cpp
#include <iostream>
#include "Date.h"
 
// initialize static member at file scope; one classwide copy
const int Date::days[] = 
   { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
// Date constructor
Date::Date( int m, int d, int y ) 
{ 
   setDate( m, d, y ); 
} // end Date constructor
 
// set month, day and year
void Date::setDate( int mm, int dd, int yy )
{
   month = ( mm >= 1 && mm <= 12 ) ? mm : 1;
   year = ( yy >= 1900 && yy <= 2100 ) ? yy : 1900;
 
   // test for a leap year
   if ( month == 2 && leapYear( year ) )
      day = ( dd >= 1 && dd <= 29 ) ? dd : 1;
   else
      day = ( dd >= 1 && dd <= days[ month ] ) ? dd : 1;
} // end function setDate
 
// overloaded prefix increment operator 
Date &Date::operator++()
{
   helpIncrement(); // increment date
   return *this; // reference return to create an lvalue
} // end function operator++
 
// overloaded postfix increment operator; note that the  
// dummy integer parameter does not have a parameter name
Date Date::operator++( int )
{
   Date temp = *this; // hold current state of object
   helpIncrement(); 
 
   // return unincremented, saved, temporary object
   return temp; // value return; not a reference return
} // end function operator++
 
// add specified number of days to date
const Date &Date::operator+=( int additionalDays )
{
   for ( int i = 0; i < additionalDays; i++ )
      helpIncrement();
 
   return *this; // enables cascading
} // end function operator+=
 
// if the year is a leap year, return true; otherwise, return false
bool Date::leapYear( int testYear ) const
{
   if ( testYear % 400 == 0 || 
      ( testYear % 100 != 0 && testYear % 4 == 0 ) )
      return true; // a leap year
   else
      return false; // not a leap year
} // end function leapYear
 
// determine whether the day is the last day of the month
bool Date::endOfMonth( int testDay ) const
{
   if ( month == 2 && leapYear( year ) )
      return testDay == 29; // last day of Feb. in leap year
   else
      return testDay == days[ month ];
} // end function endOfMonth
 
// function to help increment the date
void Date::helpIncrement()
{
   // day is not end of month
   if ( !endOfMonth( day ) )
      day++; // increment day
   else 
      if ( month < 12 ) // day is end of month and month < 12
      {
         month++; // increment month
         day = 1; // first day of new month
      } // end if
      else // last day of year
      {
         year++; // increment year
         month = 1; // first month of new year
         day = 1; // first day of new month
      } // end else
} // end function helpIncrement
 
// overloaded output operator
ostream &operator<<( ostream &output, const Date &d )
{
   static char *monthName[ 13 ] = { "", "January", "February",
      "March", "April", "May", "June", "July", "August",
      "September", "October", "November", "December" };
   output << monthName[ d.month ] << ' ' << d.day << ", " << d.year;
   return output; // enables cascading
} // end function operator<<
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
13.07.2011, 18:36     календарь #4
сложно как у вас всё...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
int main(void){
    time_t sec;
    struct tm stm;
    
    memset(&stm, 0, sizeof(struct tm));
    printf("Year: ");
    if ( scanf("%d", &stm.tm_year) != 1 || stm.tm_year < 1970 || stm.tm_year > 2037 ){
        fprintf(stderr, "Wrong year!\n");
        exit(1);
    }
    printf("Month: ");
    if ( scanf("%d", &stm.tm_mon) != 1 || stm.tm_mon < 1 || stm.tm_mon > 12 ){
        fprintf(stderr, "Wrong month!\n");
        exit(1);
    }
    printf("Day: ");
    if ( scanf("%d", &stm.tm_mday) != 1 || stm.tm_mday < 1 || stm.tm_mday > 31 ){
        fprintf(stderr, "Wrong day!\n");
        exit(1);
    }
    
    stm.tm_year -= 1900;
    stm.tm_mon -= 1;
    stm.tm_min = 1;
    if ( ( sec = mktime(&stm) ) == -1 ){
        fprintf(stderr, "Error! Probably wrong data...\n");
        exit(1);
    }
    
    sec += 60 * 60 * 24;
    stm = *localtime(&sec);
    printf("Next date: %02d.%02d.%04d\n", stm.tm_mday, stm.tm_mon + 1, stm.tm_year + 1900);
    
    exit(0);
}
asics
13.07.2011, 18:55
  #5

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
сложно как у вас всё...
Это кому адресуется ?)

easybudda
13.07.2011, 19:17     календарь
  #6

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
Это кому адресуется ?)
Ну у Вас-то и не зная boost не сложно разобраться. Класс Date я бы лучше обёрткой к стандартным функциям сделал, хотя спорно - дату Куликовской Битвы не сохранишь...
А вот в первом варианте уже после первой дюжины строк потерялся... Единственное, что понял - проверкой отрицательных чисел не заморочились, тогда бы x, y, z лучше беззнаковыми делать, да и имена даже m, d, y были бы понятнее (month, day, year)...

Yandex
Объявления
13.07.2011, 19:17     календарь
Ответ Создать тему
Опции темы

Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru