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

Cчетчик дней с рождения Христа - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
01.12.2010, 18:00     Cчетчик дней с рождения Христа #1
Здраствуйте, есть такая задача.
Надо написать счетчик дней с рождения Христоса.
пример.
02010001
вывод 2
02010002
вывод
366
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2010, 18:00     Cчетчик дней с рождения Христа
Посмотрите здесь:

Задача о совпадении дней рождения C++
Расчет количество дней прожитых со дня рождения C++
Вывести число дней в заданном году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней C++
C++ Программа определяет сколько дней от текущей даты осталось до нового года и дня рождения
C++ Составить программу, которая по дате рождения человека (день, месяц, год в числовой форме) вычисляет, сколько лет, недель и дней прожил человек
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
01.12.2010, 20:26  [ТС]     Cчетчик дней с рождения Христа #21
у меня в контесторе выводит ошибку тест 6.

Kastaneda, ты все условия учел? может что-то забыл?
компилятор с++ 2010.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
01.12.2010, 20:30     Cчетчик дней с рождения Христа #22
Цитата Сообщение от Hardcore Посмотреть сообщение
в контесторе выводит ошибку тест 6
мне вот это вообще не о чем не говорит.


Цитата Сообщение от Hardcore Посмотреть сообщение
ты все условия учел? может что-то забыл?
перед тем, как код сюда выложить я реально с калькулятором ответы проверял. Все работает!!!

Давай разбираться - какая ошибка ?
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
01.12.2010, 20:34  [ТС]     Cчетчик дней с рождения Христа #23
Нам просто тесты вообще не дают и я не знаю даже в чем проблема.
я тоже посчитал там всё правильно. )
ладно скорее всего препад не так тесты вбил. спасибо) очень помог)
Kastaneda
01.12.2010, 20:45
  #24

Не по теме:

Цитата Сообщение от Hardcore Посмотреть сообщение
скорее всего препад не так тесты вбил
может препод чего-то не учел)))

ugosdaryn
 Аватар для ugosdaryn
2 / 2 / 1
Регистрация: 17.12.2009
Сообщений: 77
01.12.2010, 22:11     Cчетчик дней с рождения Христа #25
http://www.cyberforum.ru/cpp-beginne...ead176180.html
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
01.12.2010, 22:53     Cчетчик дней с рождения Христа #26
Kastaneda, я кажется нашел твою ошибку, Вы расчтили условие высокосного года, а при высокосном годе мы учитываем не только 365 или 366 дней, но мы ведь еще учитываем условие февраля, что он может быть как 28 и 29 февраля...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.12.2010, 14:05     Cчетчик дней с рождения Христа #27
Цитата Сообщение от jambas92 Посмотреть сообщение
но мы ведь еще учитываем условие февраля, что он может быть как 28 и 29 февраля...
Все верно, я и это учел:
C++
1
2
3
4
5
6
if(year%4==0&&year%100!=0||year%400==0){
                if(month>=2)
                        days-=1;
                }
        else if(month>=2)
                        days-=2;
а с чего вы взяли, что в коде ошибка?

Добавлено через 1 час 31 минуту
Может кто-то не знает, то вот:
из википедии:
блаблабла... На будущее же была введена поправка, обеспечивающая более точное соответствие с солнечным исчислением, которая заключается в том, что из каждых 400 лет должны были быть исключены три високосных года. Таким образом, ошибка в один день накапливается лишь через 3333 года. Исключение трёх високосных лет за четыре века достигалось следующим правилом. Если номер года заканчивается не на два нуля, то он считается високосным тогда, когда номер года кратен четырём (например, 1996, 2004, 2008 годы). Если год заканчивается на два нуля, то он високосный только тогда, когда число сотен в нём также кратно четырём (например, 1600, 2000, 2400 годы). Во всех остальных случаях год считается невисокосным (например, 1900 и 2100 годы).
Добавлено через 2 часа 51 минуту
Я нашел ошибку))) Вообще случайно, пишу код в другую тему (там тоже работа с датами) и тут меня осенило))) Попозже код подправлю, сейчас занят.

Добавлено через 12 минут
строку:
C++
1
if((month-1)%2)
заменить на:
C++
1
if((month-1)==1||(month-1)==3||(month-1)==5||(month-1)==7||(month-1)==8||(month-1)==10||(month-1)==12)
можно эту проверку короче придумать, но пока так...

Добавлено через 11 минут
да, можно сделать так:
C++
1
if((month-1)<8 ? (month-1)%2 : !((month-1)%2))
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
02.12.2010, 14:53     Cчетчик дней с рождения Христа #28
Kastaneda, я пробовал вместо
C++
1
2
3
    
 
if((month-1)%2)
подставлять и
C++
1
if((month-1)==1||(month-1)==3||(month-1)==5||(month-1)==7||(month-1)==8||(month-1)==10||(month-1)==12)
и
C++
1
2
3
    
 
if((month-1)<8 ? (month-1)%2 : !((month-1)%2))
код работает хуже чем предыдущии....
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.12.2010, 15:34     Cчетчик дней с рождения Христа #29
Цитата Сообщение от jambas92 Посмотреть сообщение
код работает хуже чем предыдущии....
ЭЭ, предыдущий не плохо работал, просто считал не точно)))

Давайте разбираться, мне самому уже интересно. Что не так? Считает не правильно? Или что?

Добавлено через 10 минут
Да, всязи с изменившимя условием, вот эти строчки неправильные:
C++
1
2
3
4
if((month-1)%2)
                days+=(month-1)/2+1;
        else
                days+=(month-1)/2;
надо переделать...

Добавлено через 27 минут
А теперь:
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
#include<iostream>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int month_to_days(int,int);
int leap_years(int y);
int main(){
        int day,month,year,days;
        string Date;
        cout<<"Enter date (day/month/year) : ";
        getline(cin,Date);
        day=(Date.at(0)-'0')*10+Date.at(1)-'0';
        month=(Date.at(2)-'0')*10+Date.at(3)-'0';
        year=(Date.at(4)-'0')*1000+(Date.at(5)-'0')*100+(Date.at(6)-'0')*10+Date.at(7)-'0';
        days=(year-1)*365+leap_years(year);
        days+=month_to_days(month-1,year);
        days+=day;
        if(year%4==0&&year%100!=0||year%400==0){
                if(month>=2)
                        days-=1;
                }
        else if(month>=2)
                        days-=2;
        cout<<"Number days "<<days<<endl;
        cin.get();
        return 0;
}
int leap_years(int y){
        int ly=0;
        for(int i=1;i<y;i++)
                if(i%4==0&&i%100!=0||i%400==0)
                        ++ly;
        return ly;
}
int month_to_days(int m,int y){
    int day=0;
    for(int i=1;i<=m;i++){
                if((i==2)&&(y%4==0&&y%100!=0||y%400==0))
                     day+=29;
                else if(i==2)
                        day+=28;
                else if(i<8 ? i%2 : !(i%2))
                        day+=31;
                else day+=30;
    }
    return day;
}
Мне лень большие даты на калькуляторе считать, но вроде правильно.
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
02.12.2010, 19:00     Cчетчик дней с рождения Христа #30
он опять не может пройти тот же тест...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.12.2010, 19:09     Cчетчик дней с рождения Христа #31
Блин, а есть какая-нибудь большая дата, переведенная в дни, чтоб можно было результат сравнивать? А то так сложно сказать - правильный ответ или нет. Я вот небольшие даты смотрел, там все правильно. А как у вас этот тест проходится? Просто, чтоб понять.

Добавлено через 4 минуты
вот это:
C++
1
2
3
4
5
6
 if(year%4==0&&year%100!=0||year%400==0){
                if(month>=2)
                        days-=1;
                }
        else if(month>=2)
                        days-=2;
уберите из кода, я же ф-цию для месяцев написал, а это просто забыл убрать.

Добавлено через 2 минуты
день программиста правильно считает)))
jambas92
 Аватар для jambas92
58 / 57 / 3
Регистрация: 18.11.2010
Сообщений: 315
02.12.2010, 19:11     Cчетчик дней с рождения Христа #32
Наконецто!!! Ура!!! Задача теперь решена!!! Классный код!!!:dance3:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
02.12.2010, 19:13     Cчетчик дней с рождения Христа #33
Тест пройден? (или что там у вас)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2010, 19:24     Cчетчик дней с рождения Христа
Еще ссылки по теме:

Найти количество дней до дня рождения C++
C++ Создать функцию, которая принимает на вход дат рождения и текущую дату и вычисляет кол-во дней до дня рождения
На основе введенной даты рождения и текущей даты сообщить пользователю, сколько он прожил дней C++

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

Или воспользуйтесь поиском по форуму:
Hardcore
4 / 4 / 0
Регистрация: 24.10.2010
Сообщений: 200
02.12.2010, 19:24  [ТС]     Cчетчик дней с рождения Христа #34
Жамбасс, как ты прошел 5-ый тест?
Yandex
Объявления
02.12.2010, 19:24     Cчетчик дней с рождения Христа
Ответ Создать тему
Опции темы

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