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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Artemis
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 11
#1

Пересчёт даты из Григорианской в Юлианскую - C++

08.09.2009, 16:01. Просмотров 905. Ответов 7
Метки нет (Все метки)

Пишу программу по астрономии, необходимо пересчитать Григорианскую дату в Юлианскую. Вот что навоял:
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int Month, M, Day, D, Year, Y;
    cout << "Enter Month:"; cin >> Month;
    cout << "Enter Day:"; cin >> Day;
    cout << "Enter Year:"; cin >> Year;
 
    if (Month>2)
    {
        Y=Year;
        M=Month;
        if (M==1 or M==2)
        {
        Y=Year-1;
        M=Month+12;
        }
    }
        int A=(Y/100); int B=2-A+(A/4);
        double JD=int(365.25*(Y+4716))+int(30.6001*(M+1))+D+B-1524.5;
        cout <<"Julian Day's = " << JD << endl;
        system("PAUSE");
    return 0;
}
Ошибок в формуле нет проверял, но результат не верный. Помогите разобраться.

Добавлено через 2 минуты
Тему в хлам. Ошибка найдена.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2009, 16:01     Пересчёт даты из Григорианской в Юлианскую
Посмотрите здесь:

C++ Ввод даты
C++ даты в реестре
Разложение даты C++
Вывод даты С++. C++
Класс даты C++
C++ Вычисление интеграла методом Рунге(двойной пересчёт)
преобразование даты C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
08.09.2009, 16:47     Пересчёт даты из Григорианской в Юлианскую #2
Код
16   [B]if (M==1 or M==2)[/B]
В C++ нету такого как or есть if (M==1 || M==2)

Код
23     [B]double JD=int(365.25*(Y+4716))+int(30.6001*(M+1))+D+B-1524.5;[/B]
ты переменной D ничего не присвоил
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.09.2009, 16:59     Пересчёт даты из Григорианской в Юлианскую #3
Пoпрoбуй так:
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int Month, M, Day, Year, Y;
    cout << "Enter Month:"; cin >> Month;
    cout << "Enter Day:"; cin >> Day;
    cout << "Enter Year:"; cin >> Year;
 
    if (Month>2)
    {
        Y=Year;
        M=Month;
    }
    if (M==1 || M==2)
        {
        Y=Year-1;
        M=Month+12;
        }
  
        int A=(Y/100); int B=2-A+(A/4);
        double JD=int(365.25*(Y+4716))+int(30.6001*(M+1))+D+B-1524.5;
        cout <<"Julian Day's = " << JD << endl;
        system("PAUSE");
    return 0;
}
Artemis
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 11
08.09.2009, 17:11  [ТС]     Пересчёт даты из Григорианской в Юлианскую #4
Спасибо за || ), про переменную D уже с ней разобрался, но всё равно спасибо.
ещё такой вопром как вывести полученный результат в нормальном виде т.е. без "е"???
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
08.09.2009, 17:30     Пересчёт даты из Григорианской в Юлианскую #5
Вроде setprecision(точность) - устанавливает количество знаков после плавающей запятой.

Код
cout <<"Julian Day's = " << setprecision(20) << JD << endl;
Но я точно не уверен
Artemis
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 11
08.09.2009, 18:00  [ТС]     Пересчёт даты из Григорианской в Юлианскую #6
Опять проблема!!! попытался вычислить Юлианскую дату немножко по другому, но опять результат не верный...
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main() {
    //Объявляем переменные.
    int Year, Y, Month, M, A, B;
    float Day, N;
   //Вводим Год, Месяц, Ltym.
   cout << "Enter Year="; cin >> Year;
   cout << "Enter Month="; cin >> Month;
   cout << "Enter Day="; cin >> Day;
   //Проверяем условие Month>2
   if (Month>2) {
       Y=Year; M=Month;
    }
   else {
        Y=Year-1; M=Month+12;
    }
    //Вычисляем N по формуле.
    N=(Year+Month/100+Day/10000);
    //Проверяем условие N>=1582.1015
    if (N>=1582.1015) {
        A=int(Y/100);  B=2-A+int(A/4);
    }
    else {
        A=0; B=0;
    }
    //Вычисляем Юлианскую дату.
    float JD=int(365.25*Y)+int(30.6001*(M+1))+Day+B+1720994.5+1720994.5;
    //Выводим JD.
    cout << "Julian's Day = " << JD <<endl;
   system("PAUSE");
    return 0;
}
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.09.2009, 20:13     Пересчёт даты из Григорианской в Юлианскую #7
Тут небoльшая прoблемма в самих фoрмулах. Напиши пожалуйста в первом варианте результат получился правильный?

Добавлено через 20 минут
В общем если провести небольше математическое вычисление, то получается различие в формулах из Вашего первого кода и второго:
C++
1
2
    double JD=int(365.25*(Y+4716))+int(30.6001*(M+1))+D+B-1524.5;
    float JD=int(365.25*Y)+int(30.6001*(M+1))+Day+B+1720994.5+1720994.5;
ровно на 1720994.5
Я думаю что во втором варианте просто опечатка. Наверняка автор написал бы не "+1720994.5+1720994.5", а просто "+3441989".
В общем если первый код работает правильно, то во втором коде 30 строку надо переписать так:
C++
1
  float JD=int(365.25*Y)+int(30.6001*(M+1))+Day+B+1720994.5;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2009, 13:11     Пересчёт даты из Григорианской в Юлианскую
Еще ссылки по теме:

C++ Подсчет даты
На основе введенной даты рождения и текущей даты сообщить пользователю, сколько он прожил дней C++
C++ Функции преобразования Григорианской даты в Юлианскую
Инициализация даты C++
Преобразование даты C++ C++

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

Или воспользуйтесь поиском по форуму:
Artemis
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 11
09.09.2009, 13:11  [ТС]     Пересчёт даты из Григорианской в Юлианскую #8
В первом варианте результат получаеться верным. Во втором сейчас буду смотреть....

Добавлено через 29 минут
В первом варианте результат получаеться верным. Во втором сейчас буду смотреть....
Всё верно видимо там опечатка. Спасибо за помощь.

Добавлено через 36 минут
снова вопрос, можно ли как нибудь ввести своё время в формате HH:MM:SS и потом произвести вычисления над ним.

Добавлено через 14 минут
Скажите как окрасить текст, но не полностью, а лишь тот который вводиться пользователем. Попробывал system("color 0e"), но он полностью окрашивает текст.
Yandex
Объявления
09.09.2009, 13:11     Пересчёт даты из Григорианской в Юлианскую
Ответ Создать тему
Опции темы

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