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

Найти номер N дня с начала года - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
DoctorCyborg
0 / 0 / 0
Регистрация: 03.12.2013
Сообщений: 8
03.12.2013, 20:47     Найти номер N дня с начала года #1
Скоро последний день сдачи очень прошу, помогите (Вы явно сечете в этом).
1. Заданы три числа D, M, Y, которые обозначают число, месяц и год. Найти номер N этого дня с начала года (високосные года учитывать. Високосные года – это те, у которых номер делится на 400, и те, у которых номер делится на 4, но не делится на 100).
2. Решение задачи оформит в виде функции, которая получает в качестве параметров значения D, M, Y. Функция возвращает количество дней.
Заранее благодарен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 20:47     Найти номер N дня с начала года
Посмотрите здесь:

Написать программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели C++
Определить порядковый номер того дня високосного года, который имеет заданую дату и месяц C++
Определить номер дня недели для K дня года C++
C++ 1 января не високосного года-понедельник. Вводится число и месяц этого года. Вывести день недели этого дня
Найти номер дня с начала года C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tsin
 Аватар для Tsin
419 / 395 / 108
Регистрация: 30.12.2012
Сообщений: 1,086
Записей в блоге: 2
Завершенные тесты: 3
03.12.2013, 20:51     Найти номер N дня с начала года #2
DoctorCyborg, своих наработок по этому заданию у вас нет?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
03.12.2013, 21:50     Найти номер N дня с начала года #3
Цитата Сообщение от DoctorCyborg Посмотреть сообщение
даны три числа D, M, Y, которые обозначают число, месяц и год
Которое из них обозначает что?

Цитата Сообщение от DoctorCyborg Посмотреть сообщение
в виде функции, которая получает в качестве параметров значения D, M, Y. Функция возвращает количество дней
C++
1
2
3
4
5
6
int RetDayCountFunc( int D, int M, int G )
{
int CoundDay;
/*Здесь как-то вычисляем*/
return CountDay;
}
FAQEnD
 Аватар для FAQEnD
43 / 43 / 1
Регистрация: 15.12.2012
Сообщений: 88
03.12.2013, 22:26     Найти номер N дня с начала года #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
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <iostream>
using namespace std;
int CountDay(int Day, int Month, int Yeah);
int main()
{
    int Day, Month, Year;
    cout<<"Enter Day, Month, Year"<<endl;
    do
    {
        cin>>Day>>Month>>Year;
    }while(Day >31 || Month >12);
    cout<<CountDay(Day, Month, Year);
    system("Pause");
    return 0;
}
 
int CountDay(int Day, int Month, int Year)
{
    int N;
    if(Year%4 != 0)//Не високосный год
    {
        switch(Month)
        {
        case 1:
            {
                N = Day;
                break;
            }
        case 2:
            {
                N = 31 + Day;//Февраль
                break;
            }
        case 3:
            {
                N = 59 + Day;//Март
                break;
            }
        case 4:
            {
                N = 90 + Day;//Апрель
                break;
            }
        case 5:
            {
                N = 120 + Day;//Май
                break;
            }
        case 6:
            {
                N = 151 + Day;//Июнь
                break;
            }
        case 7:
            {
                N = 181 + Day;//Июль
                break;
            }
        case 8:
            {
                N = 212 + Day;//Август
                break;
            }
        case 9:
            {
                N = 243 + Day;//Сентябръ
                break;
            }
        case 10:
            {
                N = 273 + Day;//Октябръ
                break;
            }
        case 11:
            {
                N = 304 + Day;//Ноябръ
                break;
            }
        case 12:
            {
                N = 334 + Day;//Декабръ
                break;
            }
        }
    }
    else//високосный год
        switch(Month)
        {
        case 1:
            {
                N = Day;
                break;
            }
        case 2:
            {
                N = 31 + Day;//Февраль
                break;
            }
        case 3:
            {
                N = 60 + Day;//Март
                break;
            }
        case 4:
            {
                N = 91 + Day;//Апрель
                break;
            }
        case 5:
            {
                N = 121 + Day;//Май
                break;
            }
        case 6:
            {
                N = 152 + Day;//Июнь
                break;
            }
        case 7:
            {
                N = 182 + Day;//Июль
                break;
            }
        case 8:
            {
                N = 213 + Day;//Август
                break;
            }
        case 9:
            {
                N = 244 + Day;//Сентябръ
                break;
            }
        case 10:
            {
                N = 274 + Day;//Октябръ
                break;
            }
        case 11:
            {
                N = 305 + Day;//Ноябръ
                break;
            }
        case 12:
            {
                N = 335 + Day;//Декабръ
                break;
            }
        }
    return N;
}
Добавлено через 22 минуты
Чуть подумал и оптимизировал код:

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
#include <iostream>
using namespace std;
int CountDay(int Day, int Month, int Yeah);
int main()
{
    int Day, Month, Year;
    cout<<"Enter Day, Month, Year"<<endl;
    do
    {
        cin>>Day>>Month>>Year;
    }while(Day >31 || Month >12);
    cout<<CountDay(Day, Month, Year);
    system("Pause");
    return 0;
}
 
int CountDay(int Day, int Month, int Year)
{
    int N(0), Mounthes[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, i(0);
    int Mounthes_2[12]={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if(Year%4 != 0)//not
    {
        do
        {
            N += Mounthes[i];
            i++;
        }while(i != Month);
    }
    else
        do
        {
            N += Mounthes_2[i];
            i++;
        }while(i != Month);
    return N + Day;
}
iiieoi
Заблокирован
23.08.2015, 16:11     Найти номер N дня с начала года #5
Цитата Сообщение от FAQEnD Посмотреть сообщение
Чуть подумал и оптимизировал код:
Думается вот так будет совсем правильно:
C++
1
2
3
4
5
6
7
8
9
10
11
int CountDay(int Day, int Month, int Year)
{
    int N(0), i(0), Mounthes[12]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        while(i != Month-1)
        {
            N += Mounthes[i];
            i++;
        };
    if ((( Year%4 == 0 && Year%100 != 0 ) || Year%400 == 0) && Month > 2 ) N++;
    return N + Day;
}
MicM
 Аватар для MicM
820 / 487 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
23.08.2015, 16:51     Найти номер N дня с начала года #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
 
namespace dt = boost::gregorian;
 
int main (int argc, char *argv[])
{
    int year, month, day;
    std::cin >> day >> month >> year;
    std::cout << dt::date (year, month, day).day_of_year() << std::endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2015, 17:09     Найти номер N дня с начала года
Еще ссылки по теме:

Заданы два натуральных числа. Вычислить порядковый номер даты, начиная отсчет с начала года C++
C++ Заданы число и месяц невисокосного года. Вычислить порядковый номер даты, начиная отсчет с начала года
C++ Определить номер дня недели для заданного номера дня года

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

Или воспользуйтесь поиском по форуму:
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,693
23.08.2015, 17:09     Найти номер N дня с начала года #7
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
/*
1. Заданы три числа D, M, Y, которые обозначают число, месяц и год. Найти номер N этого дня
с начала года (високосные года учитывать. Високосные года – это те, у которых номер делится
на 400, и те, у которых номер делится на 4, но не делится на 100).
2. Решение задачи оформит в виде функции, которая получает в качестве параметров 
значения D, M, Y. Функция возвращает количество дней.
*/
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
int     days
    (
        int     day,
        int     month,
        int     year
    )
{
    int     a   =   (14 - month) / 12;
    int     y   =   year - a;
    int     m   =   month + 12 * a - 3;
 
    return      day
            +   (153 * m + 2) / 5
            +   365 * y
            +   y / 4
            -   y / 100
            +   y / 400;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     day_index
    (
        int     day,
        int     month,
        int     year
    )
{
    return      days(   day,    month,  year    )
            -   days(   0,      1,      year    );
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        std::cout   <<  "day\t: ";
        int     day     =   0;
        std::cin    >>  day;
 
        std::cout   <<  "month\t: ";
        int     month   =   0;
        std::cin    >>  month;
 
        std::cout   <<  "year\t: ";
        int     year    =   0;
        std::cin    >>  year;
 
        std::cout   <<  day_index   (
                                        day,
                                        month,
                                        year
                                    )
 
                    <<  std::endl;
 
        system("pause");
 
        std::cout   <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }//for
}
Yandex
Объявления
23.08.2015, 17:09     Найти номер N дня с начала года
Ответ Создать тему
Опции темы

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