Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2019, 23:08   #1
SMS80
 
Регистрация: 08.12.2019
Сообщений: 5
По умолчанию пользователь вводит год и программа выдает количество дней в году.

Начинаю изучать СИ++
Нужна помощь людей с опытом.

Есть задачка:

Написать программу для консоли windows
пользователь вводит год и программа выдает количество дней в году.
Есть условие , не использование операторов ветвления.
решение должно быть линейным.
Может кто помочь с идеей?
SMS80 вне форума Ответить с цитированием
Старый 08.12.2019, 23:25   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,220
По умолчанию

Идея такая. Количество дней в високосном году отличается на 1 от обычного года. Следовательно если составить условие проверки на високосность (делится на 4 и так далее, там еще есть дополнительные требования), то в случае его истинности как раз получаем нужную нам 1, которую добавляем к 365. А если будет ложь, то бишь 0, то на выходе так и останется 365.
Arigato вне форума Ответить с цитированием
Старый 09.12.2019, 07:20   #3
SMS80
 
Регистрация: 08.12.2019
Сообщений: 5
По умолчанию

Да, если идти через проверку на истину или ложь то по идее , это уже ветвление же. Вот я и пытаюсь понять как составить линейный алгоритм.
обычно все решается проверкой остатка на деление на 100
year%100!=0&&year%4==0

и year%100==0&&year%400==0
но как я понял , это уже не линейное решение.
SMS80 вне форума Ответить с цитированием
Старый 09.12.2019, 09:27   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

как-то линейным перебором дни проверить на делимость на 4 и на 400. да и процедуру очистки экрана надо бы как-то использовать, чтоб напечатать новое значение года и затереть старое...
хотя, любая проверка - это уже хотя бы 1 условие.... от вас точно не пытаются на факультете избавиться?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 09.12.2019 в 09:30.
NetSpace вне форума Ответить с цитированием
Старый 09.12.2019, 10:57   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,220
По умолчанию

Цитата:
Сообщение от SMS80 Посмотреть сообщение
если идти через проверку на истину или ложь то по идее , это уже ветвление же
Ветвление это условный оператор. А я предлагаю простое логическое выражение, которое в ответе дает 0 или 1. Или непонятно?
Arigato вне форума Ответить с цитированием
Старый 09.12.2019, 14:30   #6
SMS80
 
Регистрация: 08.12.2019
Сообщений: 5
По умолчанию

Спасибо, вроде понял, это если вместо if использовать ? И :
Это будет считаться как последлыательное выполнение операторов?
SMS80 вне форума Ответить с цитированием
Старый 09.12.2019, 15:16   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,220
По умолчанию

Нет, не использовать "? :", а использовать булевы выражения.
Arigato вне форума Ответить с цитированием
Старый 09.12.2019, 20:11   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Но результат булева выражения в арифметический оператор не вставишь, он только как аргумент для if будет - хошь-не-хошь? Хотя можно, но как-то через-опно. И какие только идиоты задают эти ограничения? "Сыграй нам мазурку, но черные клавиши и первую октаву не используй".
Легко. Создаем массив констант
Код:
const int a[] = {366,365,365,365};
Остаток от деления года на 4 будет индексом массива.
Но на 1900-м, 2100-м и т.д. будет буксовать. Тут уж без if трудновато, но можно извернуться.

Последний раз редактировалось digitalis; 09.12.2019 в 20:23.
digitalis вне форума Ответить с цитированием
Старый 09.12.2019, 20:18   #9
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Вот тут описано как вычислить номер дня по Юлианскому календарю
https://ru.wikipedia.org/wiki/%D0%AE...B0%D1%82%D0%B0
1. Вводится год - YYYY
2. Вычисляется номер первого дня этого года: N(YYYY)
3. Вычисляется номер первого дня следующего года: M(YYYY+1)
4. Вычисляем количество дней в году: M(YYYY+1) - N(YYYY)

Вот код на Python:
Код:
def Get_JDN(dd, mm, yyyy):
    a = (14 - mm) // 12
    y = yyyy + 4800 - a
    m = mm + 12*a - 3
    JDN = dd + (153 * mm + 2) // 5 + 365 * y + y // 4 - 32083
    return JDN
yyyy = 1
while yyyy > 0:
    yyyy = int(input('Введите год: '))
    DinYYYY = Get_JDN(1,1,yyyy + 1) - Get_JDN(1,1,yyyy)
    print(DinYYYY)
Как-то так, ...

Последний раз редактировалось ViktorR; 09.12.2019 в 20:52.
ViktorR вне форума Ответить с цитированием
Старый 09.12.2019, 20:30   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,220
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Но результат булева выражения в арифметический оператор не вставишь, он только как аргумент для if будет - хошь-не-хошь?
Вы точно с C++ знакомы?
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача: Пользователь вводит число М. Далее программа предлагает пользователю последовательно ввести 10 чисел Andarang JavaScript, Ajax 5 06.06.2017 09:27
аналог целочисленной таблицы умножения для дробей. Пользователь вводит знаменатель, а программа должна подобрать всевозможные целые значения числителя KAMLS Общие вопросы C/C++ 6 05.05.2017 14:45
Программа на C++ для работы со структурой. Помогите найти ошибку: вместо значения, которое вводит пользователь, выводит мусор alinka--- Помощь студентам 2 18.12.2015 18:38
Заполнение массива. Первый элемент вводит пользователь, а дальше рассчитывает программа НаташенькаRu Помощь студентам 8 25.10.2010 21:03
Как подсчитать количество дней недели в году? delphiboy Microsoft Office Excel 6 28.02.2010 04:39