Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 25.12.2010
Сообщений: 15
1

календарь

13.07.2011, 12:03. Показов 4151. Ответов 5
Метки нет (Все метки)

Даны натуральные числа А,В, С, которые обозначают число, месяц и год. Получить тройку чисел, соответствующую следующему дню.
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;}
 Комментарий модератора 
Используйте теги форматирования кода!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2011, 12:03
Ответы с готовыми решениями:

Календарь в С
Задали задание написать календарь в С. Что бы вверху были дни недели написаные в строчку, а под...

Календарь
Не могу доделать календарь, а именно просто хочу чтобы был сдвиг на необходимые дни. Изначально...

Восточный календарь
Нужна помощь,ну или кто может написать код программы,про Восточный календарь! Сам текст: В...

Универсальный календарь
Требуется программа &quot;универсальный календарь&quot; для расчета дня недели для заданной даты, отображения...

5
Freelance
Эксперт С++
2880 / 1815 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
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;
}
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
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<<
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11032 / 6984 / 1651
Регистрация: 25.07.2009
Сообщений: 12,738
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);
}
0
asics
13.07.2011, 18:55
  #5

Не по теме:

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

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

Не по теме:

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

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.07.2011, 19:17

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Откомментируйте календарь
Объясните пожалуйста, почему в 18й строке вычитаем 2008? Ещё пожалуйста откомментируйте строки...

Календарь занятий
Володе очень понравились задачи олимпиады по информатике, поэтому он решил ходить на занятия...

Календарь на год
Доброго времени суток, никак не получается решить задачу. Написать программу формирования...

Юлианский календарь
Здаров. Посмотрите пожалуйста задачу И попробуйте решить по разбору. вот что получилось у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.