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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2019, 10:41   #11
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

C C++ знаком "вприглядку", никогда на нем не писал, только на "чистом С" и то давно. Так что это моё IMHO
А ответ ViktorR, по-моему, шире, чем вопрос: спрашивалось всего-то сколько всего дней в этом году, а не какой сегодня день от Рождества Христова. Так что мой простой ответ закрывает вопрос, я думаю.
digitalis вне форума Ответить с цитированием
Старый 10.12.2019, 12:05   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

В Си былево выражение в случае истинности дает 1, а ложности - 0. Дальше их можешь использовать в арифметическом выражении.
Arigato вне форума Ответить с цитированием
Старый 10.12.2019, 12:16   #13
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Я точно не помню, но вроде бы в стандарте языка (или у K&R) это не прописано и зависит от компилятора - может быть 0 и любое ненулевое; но врать не буду, не шибко в курсе.
А в С++ введен тип bool, и как он совместится с арифметическим выражением - я не знаю

Последний раз редактировалось digitalis; 10.12.2019 в 12:21.
digitalis вне форума Ответить с цитированием
Старый 10.12.2019, 14:31   #14
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Да, все, что не 0 будет считаться истинный в логическом выражении. Но само логическое выражение возвращает 0 или 1.
Arigato вне форума Ответить с цитированием
Старый 10.12.2019, 18:41   #15
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

digitalis
Цитата:
А ответ ViktorR, по-моему, шире, чем вопрос: спрашивалось всего-то сколько всего дней в этом году, а не какой сегодня день от Рождества Христова.
Вот постановка вопроса:
Цитата:
Написать программу для консоли windows
пользователь вводит год и программа выдает количество дней в году.
Есть условие , не использование операторов ветвления.
решение должно быть линейным.
1 января 4713 до н. э. - это не "от Рождества Христова."
В вопросе нет требований к алгоритму кроме выделенного.
Алгоритм полностью удовлетворяет заданию.

Ваш алгоритм красив, но не учитывает того, что каждое четвёртое столетие - тоже бывает високосным.
Это выдержка из Википедии:
Цитата:
Распределение високосных годов:
- год, номер которого кратен 400, — високосный;
- остальные годы, номер которых кратен 100, — невисокосные;
- остальные годы, номер которых кратен 4, — високосные.
Таким образом, 1600 и 2000 годы были високосными, а 1700, 1800 и 1900 годы високосными не были.
Для 2100 года Ваш алгоритм так же выдаст ошибочное решение.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.12.2019, 19:30   #16
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Развезли обсуждение... Задача-то в одну строчку:

Код:
int days = 365 + (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
Arigato вне форума Ответить с цитированием
Старый 10.12.2019, 19:34   #17
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Красиво !
digitalis вне форума Ответить с цитированием
Старый 10.12.2019, 19:44   #18
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Arigato
Цитата:
Развезли обсуждение...
Уж и поговорить нельзя

Согласен, решение красивое.
Спасибо.

Обнаружил, что в моём посте выше ошибка. Там вёлся расчёт номера дня по Юлианскому календарю, а должен быть по Григорианскому.
Исправляюсь, а заодно и добавил от Arigato
Код:
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 - y // 100 + y // 400 - 32045
    return JDN

yyyy = 1
while yyyy > 0:
    yyyy = int(input('Введите год: '))
    DinYYYY = Get_JDN(1,1,yyyy + 1) - Get_JDN(1,1,yyyy)
    print(DinYYYY)

# Решение от Arigato
    days = 365 + ((yyyy % 400 == 0) or ((yyyy % 4 == 0) and (yyyy % 100 != 0)));
    print(days)
Как-то так, ...

Последний раз редактировалось ViktorR; 10.12.2019 в 20:27.
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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