Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/104: Рейтинг темы: голосов - 104, средняя оценка - 4.87
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 93

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

21.06.2014, 13:48. Показов 19517. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!Написал программу, но как то коряво получилось помогите пожалуйста привести к удобоваримому виду.
Задание:
Напишите программу, которая вводит с клавиатуры номер месяца и день, и определяет, сколько дней осталось до Нового года. При вводе неверных данных должно быть выведено сообщение об ошибке. Считается, что год невысокосный.
Входные данные
Входная строка содержит два целых числа: номер месяца и номер дня в этом месяце.
Выходные данные
Программа должна вывести количество дней, оставшихся до Нового года. Если введены неверные данные, нужно вывести число -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 Задача должна решатся через ветвления, но приму любые советы в практике пригодится)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2014, 13:48
Ответы с готовыми решениями:

По номеру дня и месяца определить, сколько дней осталось до Нового года
Напишите программу, которая вводит с клавиатуры номер месяца и день, и определяет, сколько дней осталось до Нового года. При вводе неверных...

Ввести с клавиатуры номер месяца и день и определить, сколько дней осталось до Нового Года
Напишите программу, которая вводит с клавиатуры номер месяца и день и определяет, сколько дней осталось до Нового Года. При вводе неверных...

Ввести с клавиатуры номер месяца и день и определить, сколько дней осталось до Нового Года
Напишите программу, которая вводит с клавиатуры номер месяца и день и определяет, сколько дней осталось до Нового Года На Cи,желательно с...

8
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
21.06.2014, 16:31
Мне было лень делать дополнительные условия для кол-ва дней в каждом месяце, надеюсь у тебя руки до этого дотянутся = 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 конструкции, зачем такое извращение? Индийский программистов и так много в мире, больше не надо )
0
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 93
21.06.2014, 16:37  [ТС]
Цитата Сообщение от NanoBreaker Посмотреть сообщение
for_each(months.begin(), months.begin() + month - 1, [&sum](int x){ sum += x; });
а можете это место объяснить?или хотя бы тыкнуть носом где почитать?
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
21.06.2014, 16:38
Это лямбда-функция, нововведение в C++11. Очень интересная конструкция, советую использовать и в дальнейшем )
0
 Аватар для ZarinZomanu4
10 / 10 / 0
Регистрация: 27.05.2013
Сообщений: 93
21.06.2014, 16:40  [ТС]
Цитата Сообщение от NanoBreaker Посмотреть сообщение
P.S. Ветвления, значит через if,else конструкции, зачем такое извращение? Индийский программистов и так много в мире, больше не надо )
Да учусь по сайту дистанционной подготовки.Поэтому вот так и получается в условии сказано так, так и делаею, а заодно и узнаю тут как можно сделать по другому и пытаюсь разобраться.
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.06.2014, 17:25
Вариант на 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;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.06.2014, 18:18
DiffEreD, оооочень сомневаюсь, что ТС будет (сможет) использовать boost. Да и не нужен он для такой простой задачи. Можно конечно заморочиться и посчитать всё вручную (високосные года учесть), но, имхо, достаточно изучить стандартные функции и типы из ctime, чтобы решать подобные задачи.
0
 Аватар для gromo
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
21.06.2014, 18:48
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно конечно заморочиться и посчитать всё вручную (високосные года учесть), но, имхо, достаточно изучить стандартные функции и типы из ctime
так вроде time() учитывает високосные из коробки
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.06.2014, 19:10
gromo, так я обратного и не утверждал. Просто по коду ТС и NanoBreaker вообще стандартные функции для работы с датами не используются. И високосность не учитывается. Хотя можно было бы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2014, 19:10
Помогаю со студенческими работами здесь

Определить, сколько дней осталось от заданного дня до нового года. Проверить программу
Всем здарова! Нужно было написать программу, которая вводит с клавиатуры номер месяца и день, и определяет, сколько дней осталось до Нового...

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

По заданным номеру месяца и дню определить, сколько дней до Нового Года
Напишите программу, которая вводит с клавиатуры номер месяца и день, и определяет, сколько дней осталось до Нового года. При вводе неверных...

Программа определяет сколько дней от текущей даты осталось до нового года и дня рождения
Программа определяет сколько дней от текущей даты осталось до нового года и дня рождения ,текущую дату и день рождения вводится с...

Определить, сколько дней осталось до Нового года
Напишите программу, в которую передается номер месяца и день. Она должна определить сколько дней осталось до Нового года.


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru