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

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

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

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

08.09.2009, 16:01. Просмотров 1020. Ответов 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 минуты
Тему в хлам. Ошибка найдена.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2009, 16:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пересчёт даты из Григорианской в Юлианскую (C++):

Функции преобразования Григорианской даты в Юлианскую - C++
Всем привет. Возникла проблема преобразования Григорианской даты дд.мм.гггг (обычной даты которой мы постоянно пользуемся) в Юлианскую...

Вычисление интеграла методом Рунге(двойной пересчёт) - C++
Доброго времени суток! Задача следующая вычислить интеграл при заданной погрешности eps = 10^-3. методом Рунге. Вот интеграл вот...

На основе введенной даты рождения и текущей даты сообщить пользователю, сколько он прожил дней - C++
3. Написать программу, которая на основе введенной даты рождения и текущей даты сообщает пользователю, сколько он прожил дней. Принять во...

Перевод григорианской даты в юлианскую - Turbo Pascal
Программа перевода из Григорианского календаря в Юлианский. У меня нет никаких идей по этому поводу, нужна помощь.

пересчёт при удалении - SQL Server
такой вот есть вопрос вазможно ли сделать так что бы при удалении строки из таблицы б.д. оставшие порядковые номера строк были...

Пересчёт масштаба и координат - C#
Ребят, такая ситуация, очень скоро нужно сдать курсовую, а я в программировании полный ноль :( вообще ничего не понимаю, нужен программный...

7
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 ничего не присвоил
0
valeriikozlov
Эксперт С++
4670 / 2496 / 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;
}
1
Artemis
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 11
08.09.2009, 17:11  [ТС] #4
Спасибо за || ), про переменную D уже с ней разобрался, но всё равно спасибо.
ещё такой вопром как вывести полученный результат в нормальном виде т.е. без "е"???
0
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
08.09.2009, 17:30 #5
Вроде setprecision(точность) - устанавливает количество знаков после плавающей запятой.

Код
cout <<"Julian Day's = " << setprecision(20) << JD << endl;
Но я точно не уверен
0
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;
}
0
valeriikozlov
Эксперт С++
4670 / 2496 / 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;
1
Artemis
0 / 0 / 0
Регистрация: 06.09.2009
Сообщений: 11
09.09.2009, 13:11  [ТС] #8
В первом варианте результат получаеться верным. Во втором сейчас буду смотреть....

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

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

Добавлено через 14 минут
Скажите как окрасить текст, но не полностью, а лишь тот который вводиться пользователем. Попробывал system("color 0e"), но он полностью окрашивает текст.
0
09.09.2009, 13:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2009, 13:11
Привет! Вот еще темы с ответами:

Пересчёт веса из фунтов в килограммы - Pascal
Program ves; var vesF,vesG:real;//вес в фунтах и граммах begin writeln('Пересчёт веса из фунтов в килограммы.'); writeln('Введите...

Пересчёт расстояния из метров в ярды и футы - Delphi
если 1 ярд = 914,4 мм; 1 фут = 304,8 мм.

пересчёт расстояния из метров в ярды и футы - Pascal ABC
если 1 ярд = 914,4 мм; 1 фут = 304,8 мм.

пересчёт расстояния из вёрст в километры и метры - Delphi
Которая производит пересчёт расстояния из вёрст в километры и метры (1верста= 1066,8м).


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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