Реферат: Тригонометричні ефемериди планет Сонячної системи

МІНІСТЕРСТВО  ОСВІТИ ІНАУКИ УКРАЇНИ

ТЕРНОПІЛЬСЬКИЙ ДЕРЖАВНИЙ  ТЕХНІЧНИЙ  УНІВЕРСИТЕТ
 імені ІванаПулюя

КУРСОВА  РОБОТА
з об’єктно — орієнтованого програмування на тему:“Тригонометричні  ефемериди   планет  Сонячної системи”

                                                                      

Зміст

                                                                                                                             стор.      

Вступ. _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __5                                                                                                     

1.Теоретична частина._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ 6

2.Розробка алгоритму і структури програми._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 16

3.Програма на мові програмування Delphi._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 19

4.Тестування програми і результати її виконання. _ _ _ _ _ _ _ _ _ _ _ _ _ _ 45

5.Висновки. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _  46

6.Список літератури. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 47


Вступ

З давніх часів люди захоплено дивилися в нічне зоряне небо.Ще нічого не знаючи  про будовуВсесвіту, вони з ночі в ніч вели спостереження за зорями і Місяцем. Особливоїх зацікавив небесний рух 5 яскравих зірок, які на відміну від інших мінялисвоє положення і отримали за це назву – планети (aster planetes – (лат.)блукаюча зоря).

Спостерігачі древніх цивілізацій намагалися розгадатизакони руху цих
зірок по небу. Древній грек Птоломей описав їх рух, виходячи із своєї гео-
центричної системи світу. Корінний перелом у вивченні небесної механіки
наступив в середньовіччі, коли Копернік поставив у центр світу Сонце, Кеп-
лер на основі спостережень сформулював  закони руху планет по своїх орбі-
тах, а Ньютон вивів закон всесвітнього тяжіння. З тих пір астрономи почали
детально порівнювати результати спостережень із результатами обчислень.
Розвиток оптичних приладів і математичного апарату обчислень дав поштовх
до того, що результати набули високої точності. Ті незначні невідповідності
в обчисленнях заставили астрономів задуматись над їх причинами, що дало
змогу відкрити нерівномірності в русі планет, так наприклад зміщення пери-
гелію Меркурія було пояснено лише з приходом теорії відносності.

    Людина завжди прагнула побачити своє майбутнє,астрономам вдалося зазирнути у майбутнє планет. Знаючи їх початкове положення і те, як вони ру-
хаються, вчені можуть прогнозувати їх місцезнаходження на століття вперед.Однак вирішення цієї задачі складне, оскільки потрібно враховувати дуже ба-
гато чинників: вплив Сонця, вплив планет одна на одну, зміна елементів їхорбіт з плином часу. До появи ЕОМ ці завдання вирішувались на папері мак-
симум з логарифмічною лінійкою, що займало місяці тяжкої праці. Навітьнезначна помилка, особливо на початку роботи, зводила всю її нанівець. Тепер
же, астрономи, за допомогою потужних ЕОМ можуть за лічені секунди обраху-
вати траєкторії руху планет, комет, астероїдів.


1. Теоретична частина

Планети Сонячної системи – це небесні тіла, які рухаються в політяжіння Сонця по еліптичних орбітах і світяться відбитим сонячним промінням.Основна відмінність планет від зірок у тому, що температури всередині планетнедостатні для перебігу там термоядерних реакцій, що в свою чергу зумовлене їхмалою масою.Крім великих планет до складу Сонячної системи входять малі планети– астероїди. Великі планети за їх фізичними характеристиками поділяють на двігрупи: планети земної групи – Меркурій, Венера, Земля, Марс, та планети-гіганти– Юпітер, Сатурн, Уран, Нептун. Плутон швидше належить до малих планет. Ос-
новна відмінність між цими групами в тому, що до складу планет першої групи
входять в основному важкі хімічні елементи тоді як планети-гіганти складаються
переважно з водню і гелію.

Отже уявімо, що проста людина, озброївшисьпідзорною трубою чи навіть біноклем, захоче подивитися на ці планети. Першепитання, яке в неї виникне – це куда, в яку точку неба направити свій погляд,адже без спеціальних знань зоряних атласів  виокремити  планети на  фонітисячі  зірок  неможливо. Для  любителів астрономії і професіоналів астрономівважливо буде знати точні координати планети, відстань до неї, кутовий діаметр,фазу диска, видиму зоряну величину – тобто знати астрономічні ефемериди планети.

В даній курсовій роботі складена програма намові Delphi, яка використовуючизакони тригонометрії приблизно обчислює ефемериди планет і дозволяє наочнозобразити планети на фоні зоряного неба. Слово “приблизно” означає, що існуєдеяка похибка, пов’язана з слабким математичним апаратом обчислення, і цяпохибка для професіоналів була б просто катастрофічною. Адже сучасні теоріїруху планет з використанням диференціального і інтегрального обчислення, атакож сучасні обчислювальні машини дозволяють нівелювати похибку обчислення допохибки роздільної здатності сучасних телескопів. Але хочу звернути увагу, щокінцевими користувачами програми можуть бути прості люди і любителі астрономії,для яких ця похибка не дуже важлива.

Отже, що таке ефемериди? Ефемериди –це астрономічні дані про положення на небі  та умови спостереження світил дляокремих або послідовних моментів часу. Ефемериди публікують у спеціальнихвиданнях. Астрономічні ефемериди містять головним чином дані про координати,відстані, фази планет.

Архімед сказав: “Дайте мені точкуопори і я переверну Землю”. Для астрономії точкою опори, здатною перевернути усю Сонячну систему, є час, а точнішепочаткова точка відліку часу.

  У програмі точкою відліку часу є 9 січня 1990р. Чим особлива ця дата? Ані чим, просто у автора програми під рукою був лише “Астрономічний календар на
1990р. “ і він з нього дізнався про точні координати планет Сонячної системисаме на цю дату. Другою проблемою, яку слід вирішити – є система відліку часу.
Те, що творилося з нашим календарем в історії для астрономів інакше як жахом
не назвеш. То спочатку був Юліанський календар потім Григоріанський, під час
переходу було втрачено 13 днів, як наслідок ми св’яткуємо старий Новий рік. Ви-
сокосні роки, 29 лютого, декретний час – все це призводить до плутанини.

В астрономії прийнято нумерувати дні.Нумеровані дні в астрономії мають назву юліанські дні. Якщо дні нумеровані, тоспрощуються всі календарні розрахунки. Наприклад, число днів між двома датамирівне різниці відповідних номерів дат. Це визначення і покладено в основусистеми відліку часу в нашій програмі. Єдина проблема – це розробити методнумерації днів в рамках нашого Григоріанського календаря.

Нумерація днів всучасному календарі затруднена  через його неперіодичність: одні місяці мають30 днів, інші 31, в лютому то 28, то 29 в високосному році. Як-
би в кожному місяці  було 30 днів, а високосних років не було, то номер дати
можна було б визначити по формулі:
                           N=365* G + 30 * (M-1) + D
де – G, M, D – рік, місяць, день дати.

Найбільшіскладності в удосконалені цієї формули створює лютий. Для високосних років,починаючи з 1 березня, потрібно враховувати додатковий день. Якби лютий був останніммісяцем року, то по крайній мірі, ця складність зникла б. Тому в календарнихрозрахунках місяць і рік доцільно перенумерувати: березень буде першим місяцемроку і т.д., а січень і лютий одинадцятим і дванадцятим місяцями попередньогороку.   
 Алгоритм присвоєння номера дня в рамках Григоріанського календаря буде
таким:
         S:= int ( 12 – M /10 );
        M:= 12 * S + M – 2 ;
        G:= G – S ;
  N:= 365 * G + int (G/4) – int (G/100) + int (G/400) + int (30.59 * M ) + D – 30 ;
спростимо: об’єднаємо перші два члена до int ( 365.25 * G ).
Для дат з 1900 по 2099 роки вираз N спрощується за рахунок того, що сума тре-
тього і четвертого членів за цей час не міняється і дорівнює –15. Так як внуме-
рації дат числа –15 і –30 тільки посувають номера всіх дат на одне і теж число,
то в розрахунках їх можна не враховувати. Щоб номера дат для CC і CCI ст. не
були занадто великими з номера року віднімемо 1900, тоді:
    N:= int ( 365.25 * ( G – 1900 ) + int (30.59* M ) + D ;    (1)
Оскільки за цієюформулою 9 січня 1990 р. Має значення N:=32852,то ми вводи-
мо його як константу точки відліку часу.

Тепер розберемося з простором.Просторове положення планети відносно Сонця задається елементами орбіти.Елементи орбіти – величини, які характеризують розміщення орбіти небесного тілав просторі, її розміри, форму, а також положення тіла на орбіті. За початоквідліку координат беруть точку весняного рівнодення — точку небесного екватора,через яку центр диска Сонця 20(21) березня переходить з Південної півкулі небав Північну.

Якщо дивитися з полюса орбіти, з якого рух тіла відбувається проти рухустрілки годинника, то точку перетину площини орбіти з площиною екліптики (площина орбіти Землі ), в якій орбіта піднімається над площиною екліптики –називають висхідним вузлом. Дугу від точки весняного рівнодення по великомуколі екліптики до вузла – називають довготою висхідного вузла (W, Aie ).

Дугу від точкивесняного рівнодення до точки перигелію планети ( найменша
відстань до Сонця ) – називають довготою перигелію Aap.

Розміри і форму орбіти визначають за рівнянням орбіти в полярнихкоординатах


                             />               де:
r – відстань від точки наорбіті, де знаходиться планета до Сонця  в а.о. ) AR ,
e – ексцентриситет орбіти (геометрична властивість еліпса орбіти) Aeo ,
a – велика піввісь орбіти(середня відстань від планети до Сонця  в а.о. ) Aao ,
v – кут справжньої аномалії (кут у площині орбіти від перигелію до точки на
      орбіті, де перебуває планета),
    оскільки    v = b — Aap                        де:
b — геліоцентрична довготапланети ( кут між точкою весняного рівнодення і точкою на орбіті де перебуваєпланета ) AG,
                 отже:
   />         або        />        ( 2 )

Це головна формула, яка визначає рух планети по еліптичній орбіті.Невідоми-
ми величинами тут є AG і AR: геліоцентрична довгота ірадіус-вектор – основ-
ні ефемериди планети з яких в подальшому будуть визначатися інші.

Отже перед початком роботи програми нам відомі елементи орбіти, що єконс-
тантами, номер дати спостереження, початкові координати планети: геліоцентри-
чна довгота і радіус-вектор в початковий момент часу 9 січня 1990р. Використає-
мо 2 закон Кеплера для опису руху планети. Він говорить, що площа секторів
еліпса орбіти за одинаків проміжок часу однакова. Оскільки швидкість рухупланети по орбіті незмінна, то дуги цих секторів будуть також однакові .

/>S1 = S2 ;   R1 = R2

Знаючи елементи орбіти можемо визначити площу всього еліпса орбіти іподіливши на період обертання визначити площу еліпса за один день (n=1), або
за одну годину чи одну хвилину ( відповідно n=1/24, n=1/1440).


                                     />            (в а.о.2 )               ( 3 )            
Знаючи орбітальну швидкість (км/с) можемо визначити лінійну довжину дуги
еліпса орбіти за один день ( відповідно за 1 год., за 1 хв. )

                            R:= vорб * 86400 / AO ( * n )         ( в а.о. )      ( 4 )
де:
86400 – кількість секунд у дні ( 60*60*24  )
AO – астрономічна одиниця(середня відстань від Землі до Сонця)

Нам необхідно знайти j — кут переміщення планети заn-днів.

/>/>         /> 
                                          />
      />            />
      />                ( 5 )
                                         />
                                         />                                         (6 )
Знайдемо довготуна 10 січня 1990р. :  b = bпоч + j. За формулою ( 2 ) визначимо
точніше r2 радіус-вектор на 10 січня 1990р.

На початку циклу обчислень ми посуваємо початковий момент на 1 день ( або
n-днів). В кінці циклу ми прирівнюємо r1:=r2 і перевіряємо чи початковий мо-
мент часу став рівним моменту спостереження.

Другим кроком програми буде знаходження видимих екваторіальних координатпланети: пряме піднесення a і схилення d. Пряме піднесення a — вимірюється від точкивесняного рівнодення вздовж небесного екватора назустріч видимому добовомуобертанню небесної сфери до кола схилень світила і вимірюється в годинній мірівід 0 до 24h  (AA ). Схилення d — вимірюється в градусах віднебесного екватора вздовж кола схилень до світила (від–900до+900) ( AB ). Здавалось прямепіднесення a легко визначити розділивши довготу AG на 15 ( 150= 1 год. ).Однак це було б правильно, якби Земля і планета рухалися на одній прямій відСонця. Насправді нам необхідно розрахувати зміщення Da  скорегувавши таким чиномзначення AG/15.

/>/>
                                                                                 />
                                                                                 />
                                                             />                           (7 )
тоді AA:=a + Da/15

Схилення планет однозначно визначити не можна. Оскільки площина орбіти
планети нахилена до площини екліптики під кутом і ( Aei ), то знаючи піднесення
АА визначимо, яке б було схилення планети якби вона рухалася  по  екліптиці, апотім скорегуємо його відповідно до нахилу і на Dd.

Схилення d точки екліптики, знаючи йогопіднесення a, можна визначити за формулою:
                            />
де e — кутнахилу екліптики до небесного екватора ( 23,50).

Зміщення Dd можна знайти розв’язавши задачу стереометрії. Виведеннякінце-
вої формули досить велике, тому дамо остаточний результат:

/>/>       ( 8 )
де:  a = b -  W
       t = l — b
        g = arcsin( sina * sini )
тоді: AB= d + Dd

Знаючи Z і R з формули ( 8 ) можемо визначитилінійну відстань між Землею
і планетою
                        />            ( 9 )
Знаючи AV і екваторіальний радіус планетиможемо визначити видимий кутовий
діаметр планети.
/>     />              (10 )
Фазу планетивизначають так:
/>/>   
                                                    />     
                                                    /> 
                                                    />  /> 
                                                    />

Фаза планети – це її форма, що їїбачить спостерігач із Землі. Вона зумовлена
змінами в умовах освітленості планети Сонцем під час руху навколо нього. В ас-
трономії фазу описують числом – це відношення найбільшої ширини освітленої
частини диска планети до його діаметра.

Важливими ефемеридами планетиє умови її видимості, тобто час сходу і заходу азимути точок сходу і заходу нагоризонті.

Сходом і заходом світила – називають момент перетину світиломматематичного горизонту, коли воно переходить з невидимої півкулі в видиму інавпаки. Годинний кут t сходу і заходу світила з координатами a і d на географічній широті j визначають з виразу:

                              />                         (12)

де:
    r — рефракція на горизонті (0,590),
    R – кутовий радіус світила (AYD/2),
    p – горизонтальний паралакс (RЗ/(AV*AO))

Азимут А світила при сході і заході можна знайти з виразу:
                                                            /> (13)                          

Отже, нам потрібно знайти годинний кут. Годинний кут – це час, що минув з мо-
менту верхньої кульмінації. Годинний кут t визначають за місцевим зоряним ча-
сом спостерігача s і прямимпіднесенням a: t=s-a. Звідси час верхньоїкульмінації
можна знайти за умовою s=a.

 оскільки:                  s = s0 + T0 + 0.0027*T0;
           то:                  a = s0+ T0* (1.0027);
                                  T0 * (1.0027) = a — s0;
                                  T0= a — s0/ 1.0027                                         (14)
де:
      s0– місцевий зоряний час в 0h<sup/>по всесвітньому часу,
     T0– час кульмінації.

Знаючи час кульмінації, додавши івіднявши від нього годинний кут сходу і
заходу отримуємо відповідно час сходу і заходу, а далі за формулою (13) азимути
точок сходу і заходу.

Програма містить алгоритми,які враховують особливості додавання і віднімання годинних величин, адже:
                                23h<sup/>+ 2h<sup/>¹ 25h
                                23h + 2h = 1h     ( 25h – 24h )
                                  2h -  3h ¹ -1h  

                            2h -  3h =23h    ( -1h<sup/> + 24h )

Оскільки початкові координати планет взяті в 0h за всесвітнім часом токінцеві
результати також будуть відповідати йому. Щоб привести результати часових
вимірів до місцевого часу спостерігача треба врахувати географічну довготу l
місця спостереження:

                                  Тм = Т0 — l/15 + n
Літній час зумовлює додавання ще однієї години ( n=1 літо, n=0 зима).
 


          
                     

                   2. Розробка алгоритму таструктури програми.

  Нижчеописана програма на мові Delphi є лише інструментом приблизного
обчислення руху планет Сонячної системи. Програма розбита на кілька структурниxчастин: Form1 ’Ефемериди планет Сонячноїсистеми’, Form2 ‘Обчислення ефемерид планетСонячної системи’, Form3‘Огляд зоряного неба’, Form4 ‘Детальний огляд зоряного неба’.

 У Form1 відображена загальнаінформація про курсову роботу. В полі Edit1 ми вводимо пароль і нажимаємо кнопку “Старт”(Button1) для запуску програми. У програмі процедураTForm1.Button1Click порівнює правильність паролю. Якщо пароль вірний сворюєтьсяForm2, в протилежному випадкувидається повідомлення про невірний пароль. Кнопка “Фініш”( Button2) закриваєпрограму.

У Form2 відбувається процесобчислення. Першим кроком необхідно вибрати планету. Для цього у GroupBox1 зібрано 9 RadioButton. ПроцедуриTForm2.RadioButton1..9Click відповідають за вибір міток планет, які будуть вподальшому використовуватись програмою в інших формах. Другим кроком мивибираємо дату моменту спостереження у формі день.місяць.рік.  з трьох ComboBox, що зібрані в GroupBox2. Третім кроком вводимокоординати місця спостереження – широту в  поле Edit1, довготу в поле Edit2, що зібрані у GroupBox3. При натискані кнопки “Help” запускається процедураTForm2.Button4Click, яка створює інформаційне вікно про географічні координатидеяких міст України і світу. Слід врахувати що програма працює в межах від 8січня 1990 року до 31 грудня 2099 року. Задання дат поза межами робочої зони,не введення мітки планети, неправильне введення номера дня місяця,  місяця,географічної широти місця спостереження вважається за помилку і виводитьпрограму на автоматичний вибір початкових даних.

 При натисканні кнопки “Обчислити”(Button1)запускається весь процес обчислення.  Запускається  процедура Eagth1 з модуля Eagth. Необхідність введення модуля Eagth, де ми знаходимо координати Землівідносно Сонця, зумовлена тим, що ми ведемо спостереження із Землі, внаслідок чогоми спостерігаємо нерівномірний рух планети по небу, то він рухається, то раптомстає і починає рухатись назад. Після цього запускається модуль Mars(для прикладу), де виконуються трипроцедури.

  В першій процедурі визначають геліоцентричну довготу і радіус векторМарса у циклі з кроком N4 днів з моменту 9.01.1990р. дозаданого моменту спостереження. Обчислення проводяться на основі 2 законуКеплера  про рівність площ секторів еліпса орбіти за одинаків проміжок часу.

   У другій процедурі визначають видимі координати Марса в заданий момент
на зоряному небі в екваторіальній системі координат. Для цього використовую-
чи дані з модуля Eagth іпроцедури Mars1 розв’язують задачустереометрії: виз-
начають кутове зміщення Марса по прямому піднесенню від істинного і відхи-
лення схилення від площини екліптики. В процесі обчислення ми можемо виз-
начити лінійну відстань від Землі до Марса і знаючи лінійний радіус Марса мо-
жемо визначити видимий кутовий діаметр і фазу диска планети.

   Третя процедура модуля Mars має більш зрозуміле значення для простого користувача програми оскількивизначає час сходу, заходу і кульмінації Марса.
Кульмінація – це момент проходження небесного меридіана, коли планета зна-
ходиться в найвищій точці над горизонтом і має найкращі умови для спостере-
ження. Також визначається азимут точок сходу і заходу планети на горизонті.

Результати обчислення виводяться на форму як множина Label, що зібрані у GroupBox4. Кнопка Button3 запускає процедуру створення Form3.

У Form 3 на фоні зоряного неба відображається вибрана планета. У процедурі

 procedure TForm3.FormCreate(Sender:TObject); створюється фон зоряного неба через елемент Image1. Вводиться Canvas.Rectangle відовідного розміру заповняється  Canvas.Brush чорним кольором і через масив координат і зоряних величин заповняєтьсязорями через побудову  Image1.Canvas.Ellipse(x1,y1,x2,y2);

 Через кнопку“Показати” procedure SpeedButton1Click(Sender: TObject); відбувається перетворення зорянихкоординат планети на пікселі  відповідно масштабу Image1 і зображається сама планета відповідним кольором через

Image1.Canvas.Pen.Color і Image1.Canvas.Ellipse(x4,y4,x5,y5);

 

Через кнопку“Закрити” procedure TForm3.Button1Click(Sender: TObject); відбувається закриття форми.

Через кнопку“Детальніше” procedure TForm3.SpeedButton2Click(Sender:TObject); створюється Form4.

У Form4 зображається більшдетальніше фон зоряного неба. Завдяки збільшенню розмірів Image1, ми змушені використати  полосупрокрутки. Створення форми відбувається аналогічно Form3. Відмінність полягає у тому, що зображення планети миготить. Цедозволяє наочно відрізнити планету від зірок. Досягається це в procedure TForm4.Timer1Timer(Sender: TObject);, де ми вводиморахівник і через порівняння чи він парний чи непарний зображення планети проявляєтьсято замальовується чорним кольором  під колір фону.


  


 

3.Програма на мові програмування Delphi.

 

/>


unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls,Unit2, jpeg;

 

type

  TForm1 = class(TForm)

    Panel1: TPanel;

    Image1: TImage;

    StaticText1: TStaticText;

    StaticText2: TStaticText;

    StaticText3: TStaticText;

    StaticText4: TStaticText;

    StaticText5: TStaticText;

    GroupBox1: TGroupBox;

    Button1: TButton;

    Button2: TButton;

    Edit1: TEdit;

    StaticText6: TStaticText;

    Image2: TImage;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

  

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  Form2: TForm2;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender:TObject);

var PAR: string;

begin

 PAR:=Edit1.Text;

  If PAR='orion 17' Then

  begin

    Form2:=TForm2.Create(Application);

    Form2.ShowModal;

    Form2.Free;

    Edit1.Clear;

    end

                   else

                     begin

                       if MessageDlg('Парольневірний! Значення " '+Edit1.Text+' " не єпаролем! Зверніться до розробника',

                       mtError,[mbOK],0)=mrOK then

                         Edit1.Clear;

                     end;

end;

procedure TForm1.Button2Click(Sender:TObject);

begin

close;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 Image1.Picture.LoadFromFile('star.jpg');

 Image2.Picture.LoadFromFile('star2.jpg');

end;

 

end.


/>

unit Unit2;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms,Math,

  Dialogs, StdCtrls,ExtCtrls,Unit3,KonstPLN,Eagth,Mars,Jupiter,Saturn,Mercury,

  Venus,Uran,Neptun,Pluton, Common,Unit4;

 

type

  TForm2 = class(TForm)

    Panel1: TPanel;

    GroupBox1: TGroupBox;

    GroupBox2: TGroupBox;

    GroupBox3: TGroupBox;

    GroupBox4: TGroupBox;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;   

    Image1: TImage;

    Image2: TImage;

    RadioButton1: TRadioButton;

    ---------------------------

    RadioButton9: TRadioButton;   

    StaticText1: TStaticText;

    ----------------------------

    StaticText5: TStaticText;

    ComboBox1: TComboBox;

    ComboBox2: TComboBox;

    ComboBox3: TComboBox;   

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;   

    ---------------------------

    Label46: TLabel;

    procedure RadioButton1Click(Sender:TObject);

   ----------------------------------------------

    procedure RadioButton9Click(Sender:TObject);

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

 

  Form2: TForm2;

  Form3: TForm3;

   PLN,D0,M0,R0,i,DR,n: integer;

  FI,LB,k,S0,P0,RM,ED,EG,ER,ER0,ESD,EH,ER1,EGD,

  AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,AAD1,ARS,AZE,AZP,

 ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF, AT1,ATK,ATKL,

 ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AAH,ABG,ATKLH,

  ATSLH,ATZLH :real;

implementation

  

{$R *.dfm}

 

procedure TForm2.Button4Click(Sender:TObject);

begin

 MessageDlg('Інформація! Деякігеографічнікоординати:'+#13+'ЧортківFI=49.03, LB=25.83'+#13+'ТернопільFI=49.6, LB=25.6'+#13+'ЛьвівFI=49.8, LB=24'+#13+'КиївFI=50.5, LB=30.5'+#13+'Лондон(Грінвіч) FI=51.6, LB=0'

 ,mtInformation,[mbOK],0);

end;

 

procedure TForm2.Button3Click(Sender:TObject);

begin

close;

end;


procedure TForm2.RadioButton1Click(Sender:TObject);

begin

PLN:=1;ZPL:=1; ZPL1:=1;

Image1.Picture.LoadFromFile('mercury.jpg');

end;

 

------------------------------------------------------

 

procedure TForm2.RadioButton9Click(Sender:TObject);

begin

 PLN:=9; ZPL:=9; ZPL1:=9;

Image1.Picture.LoadFromFile('pluton.jpg');

end;

 

 procedure TForm2.FormCreate(Sender:TObject);

begin

 Image1.Picture.LoadFromFile('star1.jpg');

 Image2.Picture.LoadFromFile('sun.bmp');

ComboBox1.ItemIndex:=8;

ComboBox2.ItemIndex:=0;

ComboBox3.ItemIndex:=0;

Label4.Visible:=false;

----------------------

Label46.Visible:=false;

Button2.Enabled:=false;

 end;

 

procedure TForm2.Button1Click(Sender:TObject);

begin

Button2.Enabled:=false;

Label4.Visible:=false;

------------------------

Label46.Visible:=false;

 if PLN=0 then                             //захиствідпомилки

     begin

  if MessageDlg('     Ви забули вибрати планету!'+#13+'Позамовчуванню буде вибрана Земля.'

   ,mtError,[mbOK],0)=mrOKthen

        begin

          RadioButton3.Checked:=true;

          PLN:=3;

          Image1.Picture.LoadFromFile('eath.jpg');

        end;

    end;

 D0:=StrToInt(ComboBox1.Text);

 ZD:=StrToInt(ComboBox1.Text);

 ZD1:=StrToInt(ComboBox1.Text);

  if (D0<=0) or( D0>31)then             //захиствіддурня

  begin

  if MessageDlg('Помилка введення номера дня місяця!'

   ,mtError,[mbOK],0)=mrOKthen

    begin

    ComboBox1.ItemIndex:=8;

    D0:=StrToInt(ComboBox1.Text);

    ZD:=StrToInt(ComboBox1.Text);

    ZD1:=StrToInt(ComboBox1.Text);

    end;

  end;

     if ComboBox2.ItemIndex=0 then

     begin

    M0:=1;ZM:=1; ZM1:=1;

     end;

     -----------------------------------

    

     if ComboBox2.ItemIndex=11 then

     begin

    M0:=12;ZM:=12; ZM1:=12;

    end;

    if M0=0 then                          //захиствідпомилки

    begin

    if MessageDlg('Введеннязначеннямісяцяцифроюнедопустиме!',

    mtError,[mbOK],0)=mrOK then

      begin

      ComboBox2.ItemIndex:=0;

      M0:=1;

      ZM:=1;

      ZM1:=1;

      end;

    end;

    R0:=StrToInt(ComboBox3.Text);

    ZR:=StrToInt(ComboBox3.Text);

    ZR1:=StrToInt(ComboBox3.Text);

    if (R0<1990) or (R0>2100)then          //захиствідпомилки

       begin

        if MessageDlg('Помилка граничних меж дат спостереження1990-2100 рр.'

        ,mtError,[mbOK],0)=mrOKthen

          begin

          ComboBox3.ItemIndex:=0;

          R0:=StrToInt(ComboBox3.Text);

          ZR:=StrToInt(ComboBox3.Text);

          ZR1:=StrToInt(ComboBox3.Text);

          end;

       end;

    FI:=StrToFloat(Edit1.Text);

    if abs(FI)>90then                        //захиствідпомилки

    begin

     if  MessageDlg('Помилкавведеннягеографічноїширотимісцяспостереження!'+#13+'                Маєбутивмежах+-90 градусів',

       mtError,[mbOK],0)=mrOK then

         begin

         Edit1.Text:='56';

         FI:=StrToFloat(Edit1.Text);

         end;

     end;

    LB:=StrToFloat(Edit2.Text);

    if LB<0 then

     begin

     LB:=360+LB;

     end;

     i:=0;

        if R0=1992 or 1996 or 2000 or 2004 or2008 or 2012 then   //високосніроки

           begin

            i:=1                                 //29 лютого

           end;

        case M0 of                                //DR  номер днямоменту спостереження

        1: begin DR:=D0; n:=0;k:=-0.040;end;                   //з початку року

        2:begin DR:=31+D0; n:=0;k:=-0.094;end;

        3: begin DR:=59+i+D0;n:=0;k:=-0.13;end;            //n  міткапорироку0-зима,1-літо

        4: begin DR:=59+i+31+D0;n:=1;k:=-0.131;end;

        5: begin DR:=59+i+61+D0; n:=1;k:=-0.103;end;        //k  середняпоправка зоряного часу

        6:begin DR:=59+i+92+D0; n:=1;k:=-0.051;end;

        7: begin DR:=59+i+122+D0;n:=1;k:=0.013;end;

        8: begin DR:=59+i+153+D0;n:=1;k:=0.073;end;

        9: begin DR:=59+i+184+D0;n:=1;k:=0.107;end;

       10: begin DR:=59+i+214+D0;n:=0;k:=0.114;end;

       11: begin DR:=59+i+245+D0;n:=0;k:=0.083;end;

       12: begin DR:=59+i+275+D0;n:=0;k:=0.028;end;

       end;

 

       S0:=int((12-M0)/10);                   //формула1

        P0:=int((S0*12+M0-2)*30.59+D0);

        RM:=int((R0-S0-1900)*365.25+P0);       //номер датиспостереження з 1 березня 1900р.

          if RM<=32851 then                    //захиствідпомилки

            begin

             if  MessageDlg('Помилка введення датиспостереження!'+#13+'  Має бути не раніше 9 січня 1990р.',

             mtError,[mbOK],0)=mrOK then

              begin

               ComboBox1.ItemIndex:=8;

               D0:=StrToInt(ComboBox1.Text);

               ComboBox2.ItemIndex:=0;

               M0:=1;

               ComboBox3.ItemIndex:=0;

               R0:=StrToInt(ComboBox3.Text);

              end;

            end;

          case PLN of

          1:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

          Mercury1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

           Mercury2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Mercury3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;           //запускпроцедурвмодулях

          2:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

          Venus1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

          Venus2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Venus3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;

          3: Eagth1(EG,ER,ER0,ESD,EH,ER1,EGD,ED,DR);

          4: beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

          Mars1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

          Mars2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

           Mars3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;

          5:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

          Jupiter1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

           Jupiter2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Jupiter3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB, ATKLH,ATSLH,ATZLH,n);end;

           6:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

          Saturn1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

          Saturn2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Saturn3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;

           7:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

           Uran1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

          Uran2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Uran3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;

           8:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

          Neptun1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

          Neptun2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Neptun3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;

           9:  beginEagth1(EG,ER,ER0,ESD,EH,ER1,EGD, ED,DR);

           Pluton1(AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG);

          Pluton2(AAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,ABM,AF,

           ER,AG,EG,AR, AAH,ABG,R0);

          Pluton3(AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,AA,EG,k,LB,

           AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH,n);end;

          end;

       if PLN=3 then

       begin

       Label4.Visible:=true;

       Label14.Visible:=true;

       Label27.Visible:=true;

       Label27.Caption:=FloatToStrF(EG,ffGeneral,7,3);

       Label5.Visible:=true;

       Label15.Visible:=true;

       Label28.Visible:=true;

      Label28.Caption:=FloatToStrF(ER,ffGeneral,6,3);

       D0:=0;

       M0:=0;

       R0:=0;

       end

               else

               begin

                 Label4.Visible:=true;

                 Label14.Visible:=true;

                 Label27.Visible:=true;

                Label27.Caption:=FloatToStrF(AG,ffGeneral,7,3);

                 Label5.Visible:=true;

                 Label15.Visible:=true;

                 Label28.Visible:=true;

                Label28.Caption:=FloatToStrF(AR,ffGeneral,6,3);

                 Label6.Visible:=true;

                 Label29.Visible:=true;

                 Label16.Visible:=true;

                 Label30.Visible:=true;

                 Label17.Visible:=true;

                Label29.Caption:=FloatToStrF(AAH,ffGeneral,2,0);

                Label30.Caption:=FloatToStrF(AAM,ffGeneral,4,2);

                 Label7.Visible:=true;

                 Label31.Visible:=true;

                 Label18.Visible:=true;

                 Label41.Visible:=true;

                 Label42.Visible:=true;

                Label31.Caption:=FloatToStrF(ABG,ffGeneral,2,0);

                Label41.Caption:=FloatToStrF(ABM,ffGeneral,4,2);

                 Label8.Visible:=true;

                 Label32.Visible:=true;

                 Label19.Visible:=true;

                Label32.Caption:=FloatToStrF(AYDS,ffGeneral,3,1);

                 Label9.Visible:=true;

                 Label33.Visible:=true;

                Label33.Caption:=FloatToStrF(AF,ffGeneral,3,2);

                 Label10.Visible:=true;

                 Label34.Visible:=true;

                 Label21.Visible:=true;

                 Label35.Visible:=true;

                 Label23.Visible:=true;

                Label34.Caption:=FloatToStrF(ATSLH,ffGeneral,2,0);

                Label35.Caption:=FloatToStrF(ATSLM,ffGeneral,4,2);

                 Label11.Visible:=true;

                 Label36.Visible:=true;

                 Label20.Visible:=true;

                 Label37.Visible:=true;

                 Label24.Visible:=true;

                Label36.Caption:=FloatToStrF(ATKLH,ffGeneral,2,0);

                Label37.Caption:=FloatToStrF(ATKLM,ffGeneral,4,2);

                 Label12.Visible:=true;

                 Label38.Visible:=true;

                 Label22.Visible:=true;

                 Label39.Visible:=true;

                 Label25.Visible:=true;

                Label38.Caption:=FloatToStrF(ATZLH,ffGeneral,2,0);

                 Label39.Caption:=FloatToStrF(ATZLM,ffGeneral,4,2);

                 Label13.Visible:=true;

                 Label40.Visible:=true;

                 Label26.Visible:=true;

                Label40.Caption:=FloatToStrF(AZ,ffGeneral,4,2);

                 if abs(int(AG-EG))<=5then

                   begin

                     Label43.Visible:=true;

                   end;

                   Label44.Visible:=true;

                   Label45.Visible:=true;

                   Label46.Visible:=true;

                   Label45.Caption:=FloatToStrF(AV,ffGeneral,6,3);

                 ZAA:=AA;

                 ZAB:=AB;

                 ZAA1:=AA;

                 ZAB1:=AB;

                 D0:=0;

                 M0:=0;

                 R0:=0;

                 Button2.Enabled:=true;

               end; 

end;

procedure TForm2.Button2Click(Sender:TObject);

begin

 Form3:=TForm3.Create(Application);

 Form3.ShowModal;

 Form3.Free;

 Button2.Enabled:=false;

end;

end.

 

unit KonstPLN;

 

interface

Const AO=149597870; N0=0.01;         //астрономічнаодиницякм

        Eri=23.452295;Ari=25.2;Jri=3.1;Mri=7;Vri=3.4;Sri=26.8;

         Uri=98;Nri=29;Pri=1;//нахил екватора доекліптики

         Eao=1;Aao=1.523688;Jao=5.202803;Mao=0.387099;Vao=0.723322;Sao=9.538843;

         Uao=19.190978;Nao=30.070672;Pao=39.51774;//великапіввісьорбіти

        Eeo=0.016738;Aeo=0.09334;Jeo=0.048387;Meo=0.20562;Veo=0.006806;Seo=0.056;

         Ueo=0.0472;Neo=0.008553;Peo=0.253;//ексцентриситеторбіти

        Eap=104.24375;Aap=335.7197;Jap=15.2;Map=77.31552;Vap=131.53526;Sap=86.25;

         Uap=171.14;Nap=45.5;Pap=225;//довготаперигеліюорбіти

        Etd=365.24219;Atd=686.9797;Jtd=4332.5879;Mtd=87.9693;Vtd=224.7008;Std=10759.201;

         Utd=30685.93;Ntd=60187.65;Ptd=90731.2;//періодобертання навколо Сонця дн.

         Ere=6378.14;Are=3390;Jre=71492;Mre=2440;Vre=6052;Sre=60268;

         Ure=24300;Nre=25000;Pre=1500;//екваторіальнийрадіуспланетикм.

        Evo=29.77;Avo=24.22;Jvo=13.07;Mvo=48.89;Vvo=35;Svo=9.65;

         Uvo=6.8;Nvo=5.43;Pvo=4.74;//орбітальнашвидкість планети км/с

         Avy=49.966942;Jvy=40.690276;Mvy=48.450552;Vvy=76.998886;Svy=113.99442;

        Uvy=74.590276;Nvy=131.95776;Pvy=109.9036;//довготависхідноговузлаорбіти

        Aie=1.85;Jie=1.3069442;Mie=7.0033332;Vie=3.3938886;Sie=2.491111;

        Uie=0.772777;Nie=1.7763886;Pie=17.313332;//нахилорбітидоекліптики

implementation

begin

end.

 

unit Eagth;

 

interface

  Uses Math,KonstPLN;

  Const ED5=9;  EG5=108.6; ER5=0.9833; // початковікоординатиЗемлі9 січня1990р.

    Procedure Eagth1(varEG,ER,ER0,ESD,EH,ER1,EGD,ED:real;var  DR:integer);


implementation

 Procedure Eagth1;

 

      begin

           ED:=ED5; EG:=EG5; ER:=ER5;

 

           ER0:=Evo*86400/AO*N0;        {формула4}        //шляхпроходженнязаN3 дні

           ESD:=(PI*sqr(Eao)*sqrt(1-sqr(Eeo))/Etd)*N0;//формула3 площаеліпсаорбітизаN3дні

 

        Repeat

         ED:=ED+N0;                                        //2 законКеплера

          EH:=2*ESD/ER;                                    //радіус-вектор через N3 днів

         ER1:=sqrt(sqr(EH)+sqr(ER-sqrt(abs(sqr(ER0)-sqr(EH)))));//формула 5

          EGD:=arctan((1/ER1*EH)/sqrt(1-sqr(1/ER1*EH)))*180/PI; //формула 6

         EG:=EG+EGD;                                             //кут проходу за N3 дні

          while EG>=360 do

            begin

              EG:=EG-360

            end;

         ER1:=(Eao*(1-sqr(Eeo)))/(1+Eeo*cos((EG-Eap)*PI/180)); //формула2

          ER:=ER1;

       UntilDR<=ED;                                           //обчислення до моментуспостереження

      end;

end.

 

unit Mars;

 

interface

 Uses KonstPLN,Eagth,Math;


  Const AD5=32852;              //номер дня 9 січня 1990р. з 1березня 1900р.

         AG5=235.0; AR5=1.538;  //початкове положення Марса 9січня 1990р.


  ProcedureMars1(var AD,AG,AR,x,AR0,ASD,AH,AR1,AGD,RM,EG:real);

 

  Procedure Mars2(varAAD1,ARS,AZE,AZP,ABD,AV,AYD,AYDS,AAD0,AAD,AA,AAM,AAS,AID1,AID2,AID,AB,

                  ABM,AF,ER,AG,EG,AR,AAH,ABG:real;var  R0:integer);

 

  Procedure Mars3(var AT1,ATK,ATKL,ATKLM,AP,AT2,AT3,ATG,ATS,ATSL,ATSLM,ATZ,ATZL,ATZLM,AZ,

                 AA,EG,k,LB,AYD,AV,FI,AB,ATKLH,ATSLH,ATZLH:real;var n:integer);

 

implementation

 

  Procedure Mars1;

  begin

       AD:=AD5; AG:=AG5; AR:=AR5; x:=0;

       AR0:=Avo*86400/AO*N0;            //формула 4  шлях проходженняза N4 дні

       ASD:=(PI*sqr(Aao)*sqrt(1-sqr(Aeo))/Atd)*N0;//формула 3 площа еліпса орбіти за N4 дні

     Repeat

      AD:=AD+N0;                                 //2 законКеплера

       AH:=2*ASD/AR;                              //радіус-векторчерезN4 дні

      AR1:=sqrt(sqr(AH)+sqr(AR-sqrt(abs(sqr(AR0)-sqr(AH)))));//формула5

      AGD:=arctan((1/AR1*AH)/sqrt(1-sqr(1/AR1*AH)))*180/PI;//формула6

       AG:=AG+AGD;                                          //кут проходуза N4 дні

       WhileAG>=360 do

         begin

           AG:=AG-360

         end;

      AR1:=(Aao*(1-sqr(Aeo)))/(1+Aeo*cos((AG-Aap)*PI/180));//формула2

       AR:=AR1;

      x:=x+1                                               //кількістьциклівобчислення

     Until RM<=AD;                                         //обчислення до моменту спостереження

 

  end;//Mars1

 

  Procedure Mars2;

   begin

    AAD1:=arctan((ER*sin((AG-EG)*PI/180))/(AR-ER*cos((AG-EG)*PI/180)))*180/PI;//зміщенняпрямого

     ARS:=sin((AG-Avy)*PI/180)*sin(Aie*PI/180);                     //піднесення, формула7

     AZE:=AR*ARS;

    AZP:=sqrt(sqr(ER*sin((EG-AG)*PI/180))+sqr(AR*sqrt(1-sqr(ARS))-ER*cos((EG-AG)*PI/180)));

    ABD:=arctan(AZE/AZP)*180/PI;                 //зміщеннясхилення, формула8

     AV:=sqrt(sqr(AZE)+sqr(AZP));//лінійнавідстаньміжЗемлеюіМарсом, формула9

     AYD:=2*arctan(Are/(AV*AO))*180/PI;//кутовийдіаметрМарса, формула10

     AYDS:=AYD*3600;

    AAD0:=arctan(sqrt(1-sqr((sqr(AV)+sqr(AR)-sqr(ER))/(2*AV*AR)))/((sqr(AV)+sqr(AR)-sqr(ER))/

     (2*AV*AR)))*180/PI;

     AAD:=sqrt(abs(sqr(AAD0)-sqr(ABD)));

       If AAD1<0 then

          begin

            AAD:=-AAD;

          end;

     AA:=(AG+AAD)/15;           //прямепіднесенняМарса

       If AA>=24 then

          begin

            AA:=AA-24;

          end;

       If AA<0 then

          begin

            AA:=AA+24;

          end;

      AAH:=int(AA);

      AAM:=frac(AA)*60;

      AAS:=frac(AAM)*60;

    AID1:=sin((AA*15)*PI/180)*(Eri-0.00013011111*(R0-1900));//схиленняточкиекліптики

    AID2:=arctan((sin((180-AA*15)*PI/180)*sin((Eri-0.00013011111*(R0-1900))*PI/180))/

   (sqrt(1-sqr(sin((180-AA*15)*PI/180)*sin((Eri-0.00013011111*(R0-1900))*PI/180)))))*

    180/PI;                                          //те самедругим методом

    AID:=(AID1+AID2)/2;                              //їхсереднє значення

    AB:=AID+ABD;              //Схилення Марса

    ABG:=int(AB);

    ABM:=frac(AB)*60;

    AF:=(1/2)+(cos(AAD0*PI/180)/2);         //фаза диска Марса,формула 11

    end;//Mars2

  Procedure Mars3;

    begin

      AT1:=AA-(EG/15+k);

        If AT1<0 then

         begin

           AT1:=AT1+24;

         end;

      ATK:=AT1/1.002738;       //час кульмінації Марса, формула 14

      ATKL:=ATK-LB/15+n;       //місцевий час кульмінації

        ifATKL<0 then

         begin

           ATKL:=ATKL+24;

         end;

    ATKLH:=int(ATKL); ATKLM:=frac(ATKL)*60;

   AP:=90+0.59+(AYD/2)-(arctan(Ere/(AV*AO))*180/PI);

   AT2:=(cos(AP*PI/180)-sin(FI*PI/180)*sin(AB*PI/180))/(cos(FI*PI/180)*cos(AB*PI/180));

   AT3:=arctan(sqrt(1-sqr(AT2))/AT2)*180/PI;//годиннийкутсходуізаходуМарса

        if AT3<=0then                            //формула12

         begin

           AT3:=AT3+180;

         end;

      ATG:=AT3/15;

      ATS:=ATK-ATG;         //час сходу Марса

        ifATS<0 then

         begin

           ATS:=ATS+24;

         end;

      ATSL:=ATS-LB/15+n;    //місцевий час сходу

        ifATSL<0 then

         begin

           ATSL:=ATSL+24;

         end;

      ATSLH:=int(ATSL); ATSLM:=frac(ATSL)*60;

      ATZ:=ATK+ATG;         //час заходу Марса

        ifATZ>=24 then

         begin

           ATZ:=ATZ-24;

         end;

      ATZL:=ATZ-LB/15+n;    //місцевий час заходу

        ifATZL<0 then

         begin

           ATZL:=ATZL+24;

         end;

      ATZLH:=int(ATZL); ATZLM:=frac(ATZL)*60;

     AZ:=arctan((cos(AB*PI/180)*sin(AT3*PI/180)/sin(AP*PI/180))/sqrt(1-sqr((cos(AB*PI/180)*

     sin(AT3*PI/180))/sin(AP*PI/180))))*180/PI; //азимутМарсаприсходіізаході

        if AB>0then                                   //формула13

         begin

           AZ:=180-AZ;

         end;

      end;//Mars3

 

end.

 

unit Common;

 

interface

 

var

  ZPL,ZD,ZM,ZR,ZPL1,ZD1,ZM1,ZR1: integer;

  ZAA,ZAB,ZAA1,ZAB1 :real;

 

implementation

 

end.

 

/>

 

unit Unit3;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, Buttons,Common,Math,Unit4;

 

type

  TForm3 = class(TForm)

    Image1: TImage;

    SpeedButton1: TSpeedButton;

    SpeedButton2: TSpeedButton;

    Button1: TButton;

    Label1: TLabel;   

    -----------------------

    Label31: TLabel;

    StaticText1: TStaticText;

 

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure SpeedButton1Click(Sender:TObject);

    procedure SpeedButton2Click(Sender:TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

  Mas = array[1..311] of real;

 

var

  Form3: TForm3;

   ZA,ZB,ZP: Mas;

   ZAG,ZBG: integer;

   ZAM,ZBM,x,y,x3,y3: real;

    x4,y4,x5,y5,x0,y0,x1,y1,x2,y2 :variant;

implementation

 

{$R *.dfm}

 

procedure TForm3.FormCreate(Sender: TObject);

 var  i:integer;

begin

SpeedButton2.visible:=false;

Label1.Visible:=false;

Label2.Visible:=false;

Label3.Visible:=false;

Label4.Visible:=false;

Label5.Visible:=false;

Label6.Visible:=false;

Image1.Canvas.Brush.Color:=clBlack;

Image1.Canvas.Brush.Style:=bsSolid;

Image1.Canvas.Rectangle(0,0,1010,255);

Image1.Canvas.pen.color:=clWhite;

Image1.Canvas.Moveto (0,0);

Image1.Canvas.LineTo (1000,0);

Image1.Canvas.LineTo (1000,250);

Image1.Canvas.LineTo (0,250);

Image1.Canvas.LineTo (0,0);

Image1.Canvas.MoveTo(0,139);

Image1.Canvas.LineTo (1000,139);

//ruscu

Image1.Canvas.MoveTo(1000,0);

Image1.Canvas.LineTo (1005,0);

Image1.Canvas.MoveTo(1000,28);

Image1.Canvas.LineTo (1005,28);

Image1.Canvas.MoveTo(1000,56);

Image1.Canvas.LineTo (1005,56);

Image1.Canvas.MoveTo(1000,83);

Image1.Canvas.LineTo (1005,83);

Image1.Canvas.MoveTo(1000,111);

Image1.Canvas.LineTo (1005,111);

Image1.Canvas.MoveTo(1000,139);

Image1.Canvas.LineTo (1005,139);

Image1.Canvas.MoveTo(1000,167);

Image1.Canvas.LineTo (1005,167);

Image1.Canvas.MoveTo(1000,194);

Image1.Canvas.LineTo (1005,194);

Image1.Canvas.MoveTo(1000,222);

Image1.Canvas.LineTo (1005,222);

Image1.Canvas.MoveTo(1000,250);

Image1.Canvas.LineTo (1005,250);

//ruscu

Image1.Canvas.MoveTo(1000,250);

Image1.Canvas.LineTo (1000,255);

Image1.Canvas.MoveTo(958,250);

Image1.Canvas.LineTo (958,255);

Image1.Canvas.MoveTo(917,250);

Image1.Canvas.LineTo (917,255);

Image1.Canvas.MoveTo(875,250);

Image1.Canvas.LineTo (875,255);

Image1.Canvas.MoveTo(833,250);

Image1.Canvas.LineTo (833,255);

Image1.Canvas.MoveTo(792,250);

Image1.Canvas.LineTo (792,255);

Image1.Canvas.MoveTo(750,250);

Image1.Canvas.LineTo (750,255);

Image1.Canvas.MoveTo(708,250);

Image1.Canvas.LineTo (708,255);

Image1.Canvas.MoveTo(667,250);

Image1.Canvas.LineTo (667,255);

Image1.Canvas.MoveTo(625,250);

Image1.Canvas.LineTo (625,255);

Image1.Canvas.MoveTo(583,250);

Image1.Canvas.LineTo (583,255);

Image1.Canvas.MoveTo(542,250);

Image1.Canvas.LineTo (542,255);

Image1.Canvas.MoveTo(500,250);

Image1.Canvas.LineTo (500,255);

Image1.Canvas.MoveTo(458,250);

Image1.Canvas.LineTo (458,255);

Image1.Canvas.MoveTo(417,250);

Image1.Canvas.LineTo (417,255);

Image1.Canvas.MoveTo(375,250);

Image1.Canvas.LineTo (375,255);

Image1.Canvas.MoveTo(333,250);

Image1.Canvas.LineTo (333,255);

Image1.Canvas.MoveTo(292,250);

Image1.Canvas.LineTo (292,255);

Image1.Canvas.MoveTo(250,250);

Image1.Canvas.LineTo (250,255);

Image1.Canvas.MoveTo(208,250);

Image1.Canvas.LineTo (208,255);

Image1.Canvas.MoveTo(167,250);

Image1.Canvas.LineTo (167,255);

Image1.Canvas.MoveTo(125,250);

Image1.Canvas.LineTo (125,255);

Image1.Canvas.MoveTo(83,250);

Image1.Canvas.LineTo (83,255);

Image1.Canvas.MoveTo(42,250);

Image1.Canvas.LineTo (42,255);

Image1.Canvas.MoveTo(0,250);

Image1.Canvas.LineTo (0,255);

 

//And

ZA[1]:=0.07; ZB[1]:=29.02; ZP[1]:=1;

ZA[2]:=1.09; ZB[2]:=35.34; ZP[2]:=1;

ZA[3]:=2.03; ZB[3]:=42.17; ZP[3]:=1;

ZA[4]:=0.38; ZB[4]:=30.48; ZP[4]:=0.5;

ZA[5]:=0.56; ZB[5]:=38.26; ZP[5]:=0.5;

ZA[6]:=1.37; ZB[6]:=48.34; ZP[6]:=0.5;

ZA[7]:=23.01; ZB[7]:=42.16; ZP[7]:=0.5;

ZA[8]:=23.47; ZB[8]:=46.24; ZP[8]:=0.5;

--------------------------------------------

 

 //Lup

 ZA[311]:=15.21; ZB[311]:=-36.13; ZP[311]:=0.5;

 //ZA[]:=; ZB[]:=; ZP[]:=;

for i:=1 to 311 do

begin

ZAG:=Trunc(ZA[i]);ZAM:=frac(ZA[i])/0.6;

 ZA[i]:=ZAG+ZAM;

ZBG:=Trunc(ZB[i]);ZBM:=frac(ZB[i])/0.6;

 ZB[i]:=ZBG+ZBM;

  if ZB[i]<=0 then

     ZB[i]:=abs(ZB[i])+50

        else  ZB[i]:=50-ZB[i];

  y:=250-(((90-ZB[i])/90)*250);

  x:=((24-ZA[i])/24)*1000;

  x0:=int(x);

  y0:=int(y);

     if ZP[i]=0.5 then

        Image1.Canvas.Pixels[x0,y0]:=clWhite

          else begin

            Image1.Canvas.Pen.Color:=clWhite;

            Image1.Canvas.Brush.Style:=bsSolid;

           Image1.Canvas.Brush.Color:=clWhite;

            x1:=int(x-ZP[i]);

            y1:=int(y-ZP[i]);

            x2:=int(x+ZP[i]);

            y2:=int(y+ZP[i]);

           Image1.Canvas.Ellipse(x1,y1,x2,y2);

          end;

     end;

end;


procedure TForm3.Button1Click(Sender:TObject);

begin

close;

end;

 

procedure TForm3.SpeedButton1Click(Sender:TObject);

begin

SpeedButton2.visible:=true;

Label1.Visible:=true;

Label2.Visible:=true;

Label3.Visible:=true;

Label4.Visible:=true;

Label5.Visible:=true;

Label6.Visible:=true;

case ZPL of

1: Label1.Caption:='Меркурій';

2: Label1.Caption:='Венеру';

4: Label1.Caption:='Марс';

5: Label1.Caption:='Юпітер';

6: Label1.Caption:='Сатурн';

7: Label1.Caption:='Уран';

8: Label1.Caption:='Нептун';

9: Label1.Caption:='Плутон';

end;

Label3.Caption:=IntToStr(ZD);

Label5.Caption:=IntToStr(ZR);

case ZM of

 1: Label4.Caption:='січня';

 2: Label4.Caption:='лютого';

 3: Label4.Caption:='березня';

 4: Label4.Caption:='квітня';

 5: Label4.Caption:='травня';

 6: Label4.Caption:='червня';

 7: Label4.Caption:='липня';

 8: Label4.Caption:='серпня';

 9: Label4.Caption:='вересня';

10: Label4.Caption:='жовтня';

11: Label4.Caption:='листопада';

12: Label4.Caption:='грудня';

end;

  if ZAB<=0 then

   ZAB:=abs(ZAB)+50

     else ZAB:=50-ZAB;

  y3:=250-(((90-ZAB)/90)*250);

  x3:=((24-ZAA)/24)*1000;

  x4:=int(x3-2);

  y4:=int(y3-2);

  x5:=int(x3+2);

  y5:=int(y3+2);

    case ZPL of

    1:Image1.Canvas.Pen.Color:=clRed;

    2:Image1.Canvas.Pen.Color:=clAqua;

    4:Image1.Canvas.Pen.Color:=clRed;

    5:Image1.Canvas.Pen.Color:=clYellow;

    6:Image1.Canvas.Pen.Color:=clLime;

    7:Image1.Canvas.Pen.Color:=clGreen;

    8:Image1.Canvas.Pen.Color:=clBlue;

    9:Image1.Canvas.Pen.Color:=clFuchsia;

    end;

    Image1.Canvas.Ellipse(x4,y4,x5,y5);

end;

 

procedure TForm3.SpeedButton2Click(Sender:TObject);

begin

Form4:=TForm4.Create(Application);

 Form4.ShowModal;

 Form4.Free;

 SpeedButton2.visible:=false;

end;

 

end.

 

/>


 unit Unit4;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes,Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, Buttons,Common,Math;

 

type

  TForm4 = class(TForm)

    Image1: TImage;

    Timer1: TTimer;

    Button1: TButton;

    Label1: TLabel;   

    -----------------------

    Label32: TLabel;

 

    procedure FormCreate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

  Mas = array[1..311] of real;

 

var

  Form4: TForm4;

   ZA,ZB,ZP: Mas;

   ZAG,ZBG: integer;

   ZAM,ZBM,x,y,x3,y3: real;

    x4,y4,x5,y5,x0,y0,x1,y1,x2,y2,g :variant;

implementation

 

{$R *.dfm}

 

procedure TForm4.FormCreate(Sender: TObject);

 var i: integer;

begin

Timer1.Enabled:=true;

Image1.Canvas.Brush.Color:=clBlack;

Image1.Canvas.Brush.Style:=bsSolid;

Image1.Canvas.Rectangle(0,0,2020,505);

Image1.Canvas.pen.color:=clWhite;

Image1.Canvas.Moveto (0,0);

Image1.Canvas.LineTo (2000,0);

Image1.Canvas.LineTo (2000,500);

Image1.Canvas.LineTo (0,500);

Image1.Canvas.LineTo (0,0);

Image1.Canvas.MoveTo(0,278);

Image1.Canvas.LineTo (2000,278);

//ruscu

Image1.Canvas.MoveTo(2000,0);

Image1.Canvas.LineTo (2005,0);

Image1.Canvas.MoveTo(2000,56);

Image1.Canvas.LineTo (2005,56);

Image1.Canvas.MoveTo(2000,111);

Image1.Canvas.LineTo (2005,111);

Image1.Canvas.MoveTo(2000,167);

Image1.Canvas.LineTo (2005,167);

Image1.Canvas.MoveTo(2000,222);

Image1.Canvas.LineTo (2005,222);

Image1.Canvas.MoveTo(2000,278);

Image1.Canvas.LineTo (2005,278);

Image1.Canvas.MoveTo(2000,334);

Image1.Canvas.LineTo (2005,334);

Image1.Canvas.MoveTo(2000,388);

Image1.Canvas.LineTo (2005,388);

Image1.Canvas.MoveTo(2000,444);

Image1.Canvas.LineTo (2005,444);

Image1.Canvas.MoveTo(2000,500);

Image1.Canvas.LineTo (2005,500);

//ruscu

Image1.Canvas.MoveTo(2000,500);

Image1.Canvas.LineTo (2000,505);

Image1.Canvas.MoveTo(1916,500);

Image1.Canvas.LineTo (1916,505);

Image1.Canvas.MoveTo(1834,500);

Image1.Canvas.LineTo (1834,505);

Image1.Canvas.MoveTo(1750,500);

Image1.Canvas.LineTo (1750,505);

Image1.Canvas.MoveTo(1666,500);

Image1.Canvas.LineTo (1666,505);

Image1.Canvas.MoveTo(1584,500);

Image1.Canvas.LineTo (1584,505);

Image1.Canvas.MoveTo(1500,500);

Image1.Canvas.LineTo (1500,505);

Image1.Canvas.MoveTo(1416,500);

Image1.Canvas.LineTo (1416,505);

Image1.Canvas.MoveTo(1334,500);

Image1.Canvas.LineTo (1334,505);

Image1.Canvas.MoveTo(1250,500);

Image1.Canvas.LineTo (1250,505);

Image1.Canvas.MoveTo(1166,500);

Image1.Canvas.LineTo (1166,505);

Image1.Canvas.MoveTo(1084,500);

Image1.Canvas.LineTo (1084,505);

Image1.Canvas.MoveTo(1000,500);

Image1.Canvas.LineTo (1000,505);

Image1.Canvas.MoveTo(916,500);

Image1.Canvas.LineTo (916,505);

Image1.Canvas.MoveTo(834,500);

Image1.Canvas.LineTo (834,505);

Image1.Canvas.MoveTo(750,500);

Image1.Canvas.LineTo (750,505);

Image1.Canvas.MoveTo(666,500);

Image1.Canvas.LineTo (666,505);

Image1.Canvas.MoveTo(584,500);

Image1.Canvas.LineTo (584,505);

Image1.Canvas.MoveTo(500,500);

Image1.Canvas.LineTo (500,505);

Image1.Canvas.MoveTo(416,500);

Image1.Canvas.LineTo (416,505);

Image1.Canvas.MoveTo(334,500);

Image1.Canvas.LineTo (334,505);

Image1.Canvas.MoveTo(250,500);

Image1.Canvas.LineTo (250,505);

Image1.Canvas.MoveTo(166,500);

Image1.Canvas.LineTo (166,505);

Image1.Canvas.MoveTo(84,500);

Image1.Canvas.LineTo (84,505);

Image1.Canvas.MoveTo(0,500);

Image1.Canvas.LineTo (0,505);

//Image1.Canvas.TextOut(10,30,'Boo');

//And

ZA[1]:=0.07; ZB[1]:=29.02; ZP[1]:=1.5;

ZA[2]:=1.09; ZB[2]:=35.34; ZP[2]:=1.5;

ZA[3]:=2.03; ZB[3]:=42.17; ZP[3]:=1.5;

ZA[4]:=0.38; ZB[4]:=30.48; ZP[4]:=0.5;

ZA[5]:=0.56; ZB[5]:=38.26; ZP[5]:=0.5;

ZA[6]:=1.37; ZB[6]:=48.34; ZP[6]:=0.5;

ZA[7]:=23.01; ZB[7]:=42.16; ZP[7]:=0.5;

ZA[8]:=23.47; ZB[8]:=46.24; ZP[8]:=0.5;

---------------------------------------------

 

 //Lup

 ZA[311]:=15.21; ZB[311]:=-36.13;ZP[311]:=0.5;

 //ZA[]:=; ZB[]:=; ZP[]:=;

for i:=1 to 311 do

begin

ZAG:=Trunc(ZA[i]);ZAM:=frac(ZA[i])/0.6;

 ZA[i]:=ZAG+ZAM;

ZBG:=Trunc(ZB[i]);ZBM:=frac(ZB[i])/0.6;

 ZB[i]:=ZBG+ZBM;

  if ZB[i]<=0 then

     ZB[i]:=abs(ZB[i])+50

        else  ZB[i]:=50-ZB[i];

  y:=500-(((90-ZB[i])/90)*500);

  x:=((24-ZA[i])/24)*2000;

  x0:=int(x);

  y0:=int(y);

     if ZP[i]=0.5 then

        Image1.Canvas.Pixels[x0,y0]:=clWhite

          else begin

            Image1.Canvas.Pen.Color:=clWhite;

           Image1.Canvas.Brush.Style:=bsSolid;

            Image1.Canvas.Brush.Color:=clWhite;

            x1:=int(x-ZP[i]);

            y1:=int(y-ZP[i]);

            x2:=int(x+ZP[i]);

            y2:=int(y+ZP[i]);

           Image1.Canvas.Ellipse(x1,y1,x2,y2);

          end;

     end;

case ZPL1 of

1: Label1.Caption:='Меркурій';

2: Label1.Caption:='Венеру';

4: Label1.Caption:='Марс';

5: Label1.Caption:='Юпітер';

6: Label1.Caption:='Сатурн';

7: Label1.Caption:='Уран';

8: Label1.Caption:='Нептун';

9: Label1.Caption:='Плутон';

end;

Label3.Caption:=IntToStr(ZD1);

Label5.Caption:=IntToStr(ZR1);

case ZM1 of

 1: Label4.Caption:='січня';

 2: Label4.Caption:='лютого';

 3: Label4.Caption:='березня';

 4: Label4.Caption:='квітня';

 5: Label4.Caption:='травня';

 6: Label4.Caption:='червня';

 7: Label4.Caption:='липня';

 8: Label4.Caption:='серпня';

 9: Label4.Caption:='вересня';

10: Label4.Caption:='жовтня';

11: Label4.Caption:='листопада';

12: Label4.Caption:='грудня';

end;

 

  if ZAB1<=0 then

   ZAB1:=abs(ZAB1)+50

     else ZAB1:=50-ZAB1;

  y3:=500-(((90-ZAB1)/90)*500);

  x3:=((24-ZAA1)/24)*2000;

  x4:=int(x3-2.5);

  y4:=int(y3-2.5);

  x5:=int(x3+2.5);

  y5:=int(y3+2.5);

    case ZPL1 of

    1:Image1.Canvas.Pen.Color:=clRed;

    2:Image1.Canvas.Pen.Color:=clAqua;

    4:Image1.Canvas.Pen.Color:=clRed;

    5:Image1.Canvas.Pen.Color:=clYellow;

    6:Image1.Canvas.Pen.Color:=clLime;

    7:Image1.Canvas.Pen.Color:=clGreen;

    8:Image1.Canvas.Pen.Color:=clBlue;

    9:Image1.Canvas.Pen.Color:=clFuchsia;

    end;

    Image1.Canvas.Ellipse(x4,y4,x5,y5);

    g:=0;

   

end;


procedure TForm4.Button1Click(Sender:TObject);

begin

Timer1.Enabled:=false;

close;

end;


procedure TForm4.Timer1Timer(Sender:TObject);

begin

 begin

 g:=g+1;

if g div 2=5 then

    begin

 

      Image1.Canvas.Pen.Color:=clBlack;

      Image1.Canvas.Brush.Style:=bsSolid;

      Image1.Canvas.Brush.Color:=clBlack;

      Image1.Canvas.Ellipse(x4,y4,x5,y5);

      g:=0;

    end

      else

          begin

         

           Image1.Canvas.Brush.Style:=bsSolid;

           Image1.Canvas.Brush.Color:=clWhite;

            case ZPL1 of

            1:Image1.Canvas.Pen.Color:=clRed;

           2:Image1.Canvas.Pen.Color:=clAqua;

            4:Image1.Canvas.Pen.Color:=clRed;

           5:Image1.Canvas.Pen.Color:=clYellow;

           6:Image1.Canvas.Pen.Color:=clLime;

            7:Image1.Canvas.Pen.Color:=clGreen;

           8:Image1.Canvas.Pen.Color:=clBlue;

           9:Image1.Canvas.Pen.Color:=clFuchsia;

            end;

            Image1.Canvas.Ellipse(x4,y4,x5,y5);

          end;

       end;  

end;

 

end.
4. Тестування програми ірезультати її виконання.

Здійснимотестування програми на предмет похибки результатів від істинних
значень. Для цього візьмемо з “Астрономического календаря за 1990 г.” ефе-
мериди Марса на 31 жовтня 1990р. Результати, які видала програма на цю да-
ту приведенні в таблиці ( l = 0h, j = 560):

/>

31.10.1990р. 1 2 3 4 5 6 7 8 9 10

істинне

значення

50.3 1.474

04h49.7m

+22031’

17.0’’ 0.96

17h32m

02h13m

10h49m

+ -1350

програмне

значення

50.3 1.474

04h55.8m

+22032’

16.9’’ 0.96

17h41m

02h18m

10h56m

+ -134.50

відносна

похибка

0.14% 0.14% 0.5% 0.05% 0.6% 0% 0.5% 0.3% 0.5% 0.2%

5.Висновки.

Отже повернімося до першого питання простої людини:” Куди направити свій погляд, щобпобачити якусь планету?” Найпростіша відповідь: ”Вчас кульмінації планети стати обличчям на південь ( напрям небесного меридіану) і знаючи координату схилення d (AB) обчислити кут e між горизонтом і планетою за виразом:

                                        e = j  + ( d )
де: j — (FI) географічна широта місцяспостереження, яку приблизно можна виз-
начити за атласом світу.

Програма явно “сира” – що називається  “demo-версія”. Середовище Delphi дозволило спроститизовнішній інтерфейс програми, ввід-вивід інформації. Введення графічнихкомпонент дозволило наочно зобразити розміщення планет на фоні зоряного неба.

Використання принципово іншого обчислювального “ ядра “ дозволить не тільки досягти більш точних результатів, але йвизначити ефемериди для інших тіл Сонячної системи: астероїдів і комет.


6.Список літератури.

 

1.Астрономический календарь на 1990г. / Под. Ред. Д.Н.Пономарева. – М.:
Наука. Гл. ред.  физ-мат. лит.  1989. – 336с.

2.Бронштейн В.А.  Как движется Луна?– М.: Наука. Гл. ред. физ-мат. лит.,
1990 – 208с.

3.Климишин И.А. Жемчужины звездного неба. – К.: Рад.шк., 1988. – 206с.

4.Климишин І.А., Тельнюк-Адамчук В.В.Шкільний астрономічний довідник
Кн. Для вчителя. – К.: Рад. шк., 1990. – 287с.

5.Романовський Т.Б. Микрокалькуляторы в рассказах и играх– К.: Рад. шк.,
1989. – 223с.

6.Хоровитц Н. Поиски жизни вСолнечной системе: Пер. с англ./ Под ред. и
с предисл. М.С. Крихкого. – М.: Мир, 1988. – 187с.


P.S. Не судіть надто мою необізненість всправах астрономії, тому що формули з цієї програми виводились мною будучи 15-літнім хлопцем, коли в школі розпочинають вчити тригонометрію. Хто зацікавивсяданою програмою може звернутися на vetoo@mail.ru, я ззадоволенням вишлю її вам на шару.

еще рефераты
Еще работы по информатике, программированию