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

По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
ZarinZomanu4
 Аватар для ZarinZomanu4
5 / 5 / 0
Регистрация: 27.05.2013
Сообщений: 60
21.06.2014, 13:48     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #1
Здравствуйте!Написал программу, но как то коряво получилось помогите пожалуйста привести к удобоваримому виду.
Задание:
Напишите программу, которая вводит с клавиатуры номер месяца и день, и определяет, сколько дней осталось до Нового года. При вводе неверных данных должно быть выведено сообщение об ошибке. Считается, что год невысокосный.
Входные данные
Входная строка содержит два целых числа: номер месяца и номер дня в этом месяце.
Выходные данные
Программа должна вывести количество дней, оставшихся до Нового года. Если введены неверные данные, нужно вывести число -1.
Собственно код
C++ (Qt)
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
#include <iostream>
using namespace std;
int main ()
{
    int a ,b;
    cin>>a>>b;
    if (b<32 && b>0)
    {
    switch (a)
    {case 1:
    cout<<365-((a*31)-(31-b))<<endl;
            break;
    case 3:
        cout<<365-((2*31+28)-(31-b))<<endl;
            break;
    case 5:
        cout<<365-((3*31+28+30)-(31-b))<<endl;
            break;
    case 7:
        cout<<365-((4*31+28+60)-(31-b))<<endl;
            break;
    case 8:
        cout<<365-((5*31+28)-(31-b))<<endl;
            break;
    case 10:
        cout<<365-((6*31+28+90)-(31-b))<<endl;
            break;
    case 12:
            cout<<365-((7*31+28+120)-(31-b))<<endl;
            break;
    case 4:
            cout<<365-((30+31*2+28)-(30-b))<<endl;
            break;
    case 6:
            cout<<365-((2*30+31*3+28)-(30-b))<<endl;
            break;
    case 9:
            cout<<365-((3*30+31*5+28)-(30-b))<<endl;
            break;
    case 11:
            cout<<365-((4*30+31*6+28)-(30-b))<<endl;
            break;
    case 2:
        if (b<29)
            {cout<<365-((31+28)-(28-b))<<endl;
        break;}
        else
            {cout<<"-1"<<endl;
        break;}
    default:
        cout<<"-1"<<endl;
        break;}
    }
    else 
    cout<<"-1"<<endl;
        return 0;
}
p.s Задача должна решатся через ветвления, но приму любые советы в практике пригодится)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2014, 13:48     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года
Посмотрите здесь:

C++ Вывести на экран монитора сколько прошло дней с нового года.
дата следующего дня, последний день месяца и сколько дней осталось до конца месяца C++
C++ сколько дней осталось до конца года
Сколько дней осталось до конца года C++
Составить программу, которая по введенному номеру месяца и номеру года выводит количество дней в этом месяце(использовать операторы printf и scanf) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
21.06.2014, 16:31     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #2
Мне было лень делать дополнительные условия для кол-ва дней в каждом месяце, надеюсь у тебя руки до этого дотянутся = D. Используются фичи C++11.

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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main(void)
{
    vector<int> months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int day = 0;
    int month = 0;
 
    cout << "Input day: "; cin >> day;
    cout << "Input month: "; cin >> month;
 
    if ((day < 0 || day > 31) || (month < 0 || month > 12))
    {
        cout << "-1" << endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
 
    int sum = day;
 
    for_each(months.begin(), months.begin() + month - 1, [&sum](int x){ sum += x; });
 
    cout << "Do novogo goda stalosi " << 365 - sum << " dnei(dnea)." << endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 10 минут
Всё, все же сделал правильную проверку, совесть проснулась = D

Используй этот кусок кода, замени тот что в коде на этот, ибо редактировать сообщение уже не могу . . .
C++
1
2
3
4
5
6
    if ((day < 0 || day > months[month - 1]) || (month < 0 || month > 12))
    {
        cout << "-1" << endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
P.S. Ветвления, значит через if,else конструкции, зачем такое извращение? Индийский программистов и так много в мире, больше не надо )
ZarinZomanu4
 Аватар для ZarinZomanu4
5 / 5 / 0
Регистрация: 27.05.2013
Сообщений: 60
21.06.2014, 16:37  [ТС]     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #3
Цитата Сообщение от NanoBreaker Посмотреть сообщение
for_each(months.begin(), months.begin() + month - 1, [&sum](int x){ sum += x; });
а можете это место объяснить?или хотя бы тыкнуть носом где почитать?
NanoBreaker
 Аватар для NanoBreaker
23 / 23 / 7
Регистрация: 11.07.2013
Сообщений: 82
21.06.2014, 16:38     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #4
Это лямбда-функция, нововведение в C++11. Очень интересная конструкция, советую использовать и в дальнейшем )
ZarinZomanu4
 Аватар для ZarinZomanu4
5 / 5 / 0
Регистрация: 27.05.2013
Сообщений: 60
21.06.2014, 16:40  [ТС]     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #5
Цитата Сообщение от NanoBreaker Посмотреть сообщение
P.S. Ветвления, значит через if,else конструкции, зачем такое извращение? Индийский программистов и так много в мире, больше не надо )
Да учусь по сайту дистанционной подготовки.Поэтому вот так и получается в условии сказано так, так и делаею, а заодно и узнаю тут как можно сделать по другому и пытаюсь разобраться.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.06.2014, 17:25     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #6
Вариант на Boost.Date_Time
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
 
int main()
{
    using namespace boost::gregorian;
 
    int day;
    int month;
    std::cout << "Input day: ->"; std::cin >> day;
    std::cout << "Input month: ->"; std::cin >> month;
 
    partial_date pd(day, month);
    date today = day_clock::local_day();
    date d = pd.get_date(today.year());
 
    partial_date new_years_day(1, Jan);
    days days_until_year_start = new_years_day.get_date(today.year()+1) - d;
    std::cout << "Days until next Jan 1: " << days_until_year_start.days()
              << std::endl;
 
    return 0;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.06.2014, 18:18     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #7
DiffEreD, оооочень сомневаюсь, что ТС будет (сможет) использовать boost. Да и не нужен он для такой простой задачи. Можно конечно заморочиться и посчитать всё вручную (високосные года учесть), но, имхо, достаточно изучить стандартные функции и типы из ctime, чтобы решать подобные задачи.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
21.06.2014, 18:48     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно конечно заморочиться и посчитать всё вручную (високосные года учесть), но, имхо, достаточно изучить стандартные функции и типы из ctime
так вроде time() учитывает високосные из коробки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2014, 19:10     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года
Еще ссылки по теме:

C++ Определить дату по порядковому номеру дня года
C++ Программа определяет сколько дней от текущей даты осталось до нового года и дня рождения
C++ По номеру месяца определить название времени года

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.06.2014, 19:10     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года #9
gromo, так я обратного и не утверждал. Просто по коду ТС и NanoBreaker вообще стандартные функции для работы с датами не используются. И високосность не учитывается. Хотя можно было бы.
Yandex
Объявления
21.06.2014, 19:10     По введенным с клавиатуры номеру месяца и дня определить, сколько дней осталось до Нового Года
Ответ Создать тему
Опции темы

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