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

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



НазваниеТригонометричні ефемериди планет Сонячної системи
Дата конвертации03.08.2012
Размер168,14 Kb.
ТипРеферат
Тригонометричні ефемериди планет Сонячної системи


МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ ТЕРНОПІЛЬСЬКИЙ ДЕРЖАВНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ імені Івана Пулюя КУРСОВА РОБОТА з об’єктно - орієнтованого програмування на тему: “Тригонометричні ефемериди планет Сонячної системи” Зміст стор.Вступ. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _51.Теоретична частина._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ 62.Розробка алгоритму і структури програми._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _163.Програма на мові програмування Delphi._ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _194.Тестування програми і результати її виконання. _ _ _ _ _ _ _ _ _ _ _ _ __ 455.Висновки. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ 466.Список літератури. _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ 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 тільки посувають номера всіх дат на одне і тежчисло,то в розрахунках їх можна не враховувати. Щоб номера дат для (( і ((( ст.небули занадто великими з номера року віднімемо 1900, тоді: N:= int ( 365.25 * ( G – 1900 ) + int ( 30.59* M ) + D ; (1)Оскільки за цією формулою 9 січня 1990 р. Має значення N:=32852, то мивводи-мо його як константу точки відліку часу. Тепер розберемося з простором. Просторове положення планети відносноСонця задається елементами орбіти. Елементи орбіти – величини, якіхарактеризують розміщення орбіти небесного тіла в просторі, її розміри,форму, а також положення тіла на орбіті. За початок відліку координатберуть точку весняного рівнодення - точку небесного екватора, через якуцентр диска Сонця 20(21) березня переходить з Південної півкулі неба вПівнічну. Якщо дивитися з полюса орбіти, з якого рух тіла відбувається проти рухустрілки годинника, то точку перетину площини орбіти з площиною екліптики (площина орбіти Землі ), в якій орбіта піднімається над площиною екліптики –називають висхідним вузлом. Дугу від точки весняного рівнодення по великомуколі екліптики до вузла – називають довготою висхідного вузла ((, Aie ). Дугу від точки весняного рівнодення до точки перигелію планети (найменшавідстань до Сонця ) – називають довготою перигелію Aap.Розміри і форму орбіти визначають за рівнянням орбіти в полярнихкоординатах [pic] де:r – відстань від точки на орбіті, де знаходиться планета до Сонця в а.о. )AR ,e – ексцентриситет орбіти ( геометрична властивість еліпса орбіти) Aeo ,a – велика піввісь орбіти (середня відстань від планети до Сонця в а.о. )Aao ,v – кут справжньої аномалії ( кут у площині орбіти від перигелію до точкина орбіті, де перебуває планета), оскільки v = ( - Aap де:( - геліоцентрична довгота планети ( кут між точкою весняного рівнодення іточкою на орбіті де перебуває планета ) AG, отже: [pic] або [pic] ( 2 ) Це головна формула, яка визначає рух планети по еліптичній орбіті.Невідоми-ми величинами тут є AG і AR: геліоцентрична довгота і радіус-вектор – основ-ні ефемериди планети з яких в подальшому будуть визначатися інші. Отже перед початком роботи програми нам відомі елементи орбіти, що єконс-тантами, номер дати спостереження , початкові координати планети:геліоцентри-чна довгота і радіус-вектор в початковий момент часу 9 січня 1990р.Використає-мо 2 закон Кеплера для опису руху планети. Він говорить, що площа секторівеліпса орбіти за одинаків проміжок часу однакова. Оскільки швидкість рухупланети по орбіті незмінна, то дуги цих секторів будуть також однакові . S1 = S2 ; R1 = R2 Знаючи елементи орбіти можемо визначити площу всього еліпса орбіти іподіливши на період обертання визначити площу еліпса за один день (n=1),абоза одну годину чи одну хвилину ( відповідно n=1/24, n=1/1440). [pic] ( в а.о.2 ) ( 3 )Знаючи орбітальну швидкість (км/с) можемо визначити лінійну довжину дугиеліпса орбіти за один день ( відповідно за 1 год., за 1 хв. ) R:= vорб * 86400 / AO ( * n ) ( в а.о.) ( 4 )де:86400 – кількість секунд у дні ( 60*60*24 )AO – астрономічна одиниця (середня відстань від Землі до Сонця) Нам необхідно знайти ( - кут переміщення планети за n-днів.[pic][pic] [pic] [pic] [pic] [pic] [pic] ( 5 ) [pic] [pic] ( 6 )Знайдемо довготу на 10 січня 1990р. : ( = (поч + ( . За формулою ( 2 )визначимоточніше r2 радіус-вектор на 10 січня 1990р. На початку циклу обчислень ми посуваємо початковий момент на 1 день (абоn-днів). В кінці циклу ми прирівнюємо r1:=r2 і перевіряємо чи початковий мо-мент часу став рівним моменту спостереження. Другим кроком програми буде знаходження видимих екваторіальних координатпланети: пряме піднесення ( і схилення (. Пряме піднесення ( - вимірюєтьсявід точки весняного рівнодення вздовж небесного екватора назустріч видимомудобовому обертанню небесної сфери до кола схилень світила і вимірюється вгодинній мірі від 0 до 24h ( Aа). Схилення ( - вимірюється в градусах віднебесного екватора вздовж кола схилень до світила (від–900 до+900 ) ( AB ).Здавалось пряме піднесення ( легко визначити розділивши довготу AG на 15 (150 = 1 год. ). Однак це було б правильно, якби Земля і планета рухалися наодній прямій від Сонця. Насправді нам необхідно розрахувати зміщення ((скорегувавши таким чином значення AG/15. [pic][pic] [pic] [pic] [pic] ( 7 )тоді AA:=( + ((/15 Схилення планет однозначно визначити не можна . Оскільки площина орбітипланети нахилена до площини екліптики під кутом і ( Aei ) , то знаючипіднесенняАА визначимо, яке б було схилення планети якби вона рухалася поекліптиці, а потім скорегуємо його відповідно до нахилу і на ((. Схилення ( точки екліптики, знаючи його піднесення (, можна визначити заформулою: [pic]де ( - кут нахилу екліптики до небесного екватора ( 23,50 ). Зміщення (( можна знайти розв’язавши задачу стереометрії. Виведеннякінце-вої формули досить велике, тому дамо остаточний результат: [pic][pic] ( 8 )де: ( = ( - ( ( = ( - ( ( = arcsin ( sin( * sin( )тоді: AB= ( + (( Знаючи Z і R з формули ( 8 ) можемо визначити лінійну відстань міжЗемлеюі планетою [pic] ( 9 )Знаючи AV і екваторіальний радіус планети можемо визначити видимий кутовийдіаметр планети.[pic] [pic] ( 10 )Фазу планети визначають так:[pic][pic] [pic] [pic] [pic] [pic] [pic] Фаза планети – це її форма, що її бачить спостерігач із Землі. Воназумовленазмінами в умовах освітленості планети Сонцем під час руху навколо нього. Вас-трономії фазу описують числом – це відношення найбільшої ширини освітленоїчастини диска планети до його діаметра. Важливими ефемеридами планети є умови її видимості, тобто час сходу ізаходу азимути точок сходу і заходу на горизонті. Сходом і заходом світила – називають момент перетину світиломматематичного горизонту, коли воно переходить з невидимої півкулі в видимуі навпаки. Годинний кут t сходу і заходу світила з координатами ( і ( нагеографічній широті ( визначають з виразу: [pic] (12) де: ( - рефракція на горизонті (0,590), R – кутовий радіус світила (AYD/2), p – горизонтальний паралакс (RЗ/(AV*AO)) Азимут А світила при сході і заході можна знайти з виразу: [pic] (13) Отже, нам потрібно знайти годинний кут. Годинний кут –це час, що минув з мо-менту верхньої кульмінації. Годинний кут t визначають за місцевим зорянимча-сом спостерігача s і прямим піднесенням (: t=s-(. Звідси час верхньоїкульмінаціїможна знайти за умовою s=(. оскільки: s = s0 + T0 + 0.0027*T0; то: ( = s0 + T0 * (1.0027); T0 * (1.0027) = ( - s0; T0 = ( - s0 / 1.0027 (14)де: s0 – місцевий зоряний час в 0h по всесвітньому часу, T0 – час кульмінації. Знаючи час кульмінації, додавши і віднявши від нього годинний кут сходуізаходу отримуємо відповідно час сходу і заходу, а далі за формулою (13)азимутиточок сходу і заходу. Програма містить алгоритми, які враховують особливості додавання івіднімання годинних величин, адже: 23h + 2h ( 25h 23h + 2h = 1h ( 25h – 24h ) 2h - 3h ( -1h 2h - 3h =23h ( -1h + 24h ) Оскільки початкові координати планет взяті в 0h за всесвітнім часом токінцевірезультати також будуть відповідати йому. Щоб привести результати часовихвимірів до місцевого часу спостерігача треба врахувати географічну довготу(місця спостереження: Тм = Т0 - (/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. [pic]unit Unit1;interfaceuses 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 *.dfmprocedure 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);beginclose;end;procedure TForm1.FormCreate(Sender: TObject);begin Image1.Picture.LoadFromFile('star.jpg'); Image2.Picture.LoadFromFile('star2.jpg');end;end.[pic]unit Unit2;interfaceuses 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 *.dfmprocedure 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);beginclose;end;procedure TForm2.RadioButton1Click(Sender: TObject);beginPLN:=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);beginButton2.Enabled:=false;Label4.Visible:=false;------------------------Label46.Visible:=false; if PLN=0 then //захист від помилки begin if MessageDlg(' Ви забули вибрати планету!'+#13+'По замовчуваннюбуде вибрана Земля.' ,mtError,[mbOK],0)=mrOK then 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)=mrOK then 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)=mrOK then 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)>90 then //захист від помилки 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 or 2008 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: begin Eagth1(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: begin Eagth1(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: begin Eagth1(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: begin Eagth1(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: begin Eagth1(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: begin Eagth1(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: begin Eagth1(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: begin Eagth1(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))<=5 then 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;interfaceConst 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;//нахил орбіти доекліптикиimplementationbeginend.unit Eagth;interface Uses Math,KonstPLN; Const ED5=9; EG5=108.6; ER5=0.9833; // початкові координати Землі 9січня 1990р. Procedure Eagth1(var EG,ER,ER0,ESD,EH,ER1,EGD,ED:real;varDR: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; Until DR<=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р. Procedure Mars1(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(varAT1,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;varn: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 дні While AG>=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; //місцевий час кульмінації if ATKL<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<=0 then //формула 12 begin AT3:=AT3+180; end; ATG:=AT3/15; ATS:=ATK-ATG; //час сходу Марса if ATS<0 then begin ATS:=ATS+24; end; ATSL:=ATS-LB/15+n; //місцевий час сходу if ATSL<0 then begin ATSL:=ATSL+24; end; ATSLH:=int(ATSL); ATSLM:=frac(ATSL)*60; ATZ:=ATK+ATG; //час заходу Марса if ATZ>=24 then begin ATZ:=ATZ-24; end; ATZL:=ATZ-LB/15+n; //місцевий час заходу if ATZL<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>0 then //формула 13 begin AZ:=180-AZ; end; end;//Mars3end.unit Common;interfacevar ZPL,ZD,ZM,ZR,ZPL1,ZD1,ZM1,ZR1 : integer; ZAA,ZAB,ZAA1,ZAB1 :real;implementationend.[pic]unit Unit3;interfaceuses 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 *.dfmprocedure TForm3.FormCreate(Sender: TObject); var i:integer;beginSpeedButton2.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);//ruscuImage1.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);//ruscuImage1.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);//AndZA[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 dobeginZAG:=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);beginclose;end;procedure TForm3.SpeedButton1Click(Sender: TObject);beginSpeedButton2.visible:=true;Label1.Visible:=true;Label2.Visible:=true;Label3.Visible:=true;Label4.Visible:=true;Label5.Visible:=true;Label6.Visible:=true;case ZPL of1: 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);beginForm4:=TForm4.Create(Application); Form4.ShowModal; Form4.Free; SpeedButton2.visible:=false;end;end.[pic] unit Unit4;interfaceuses 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 *.dfmprocedure TForm4.FormCreate(Sender: TObject); var i : integer;beginTimer1.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);//ruscuImage1.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);//ruscuImage1.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');//AndZA[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 dobeginZAG:=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 of1: 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);beginTimer1.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р. Результати, які видала програма на цю да-ту приведенні в таблиці ( ( = 0h, ( = 560 ): [pic]|31.10.1|1 |2 |3 |4 |5 |6 |7 |8 |9 |10 ||990р. | | | | | | | | | | ||істинне| | | | | | | | | | || |50.3|1.474 |04h49.|+22031|17.0’’|0.96 |17h32m|02h13m|10h4|( ||значенн| | |7m |’ | | | | |9m |(1350 ||я | | | | | | | | | | ||програм| | | | | | | | | | ||не |50.3|1.474 |04h55.|+22032|16.9’’|0.96 |17h41m|02h18m|10h5|( ||значенн| | |8m |’ | | | | |6m |(134.5||я | | | | | | | | | |0 ||відносн| | | | | | | | | | ||а |0.14|0.14% |0.5% |0.05% |0.6% |0% |0.5% |0.3% |0.5%|0.2% ||похибка|( | | | | | | | | | | 5.Висновки. Отже повернімося до першого питання простої людини:” Куди направитисвій погляд, щоб побачити якусь планету?” Найпростіша відповідь: ”В часкульмінації планети стати обличчям на південь ( напрям небесного меридіану) і знаючи координату схилення ( (AB) обчислити кут ( між горизонтом іпланетою за виразом: ( = ( + ( ( )де: ( - (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 , я з задоволенням вишлю її вам на шару.-----------------------[pic]




Нажми чтобы узнать.

Похожие:

Тригонометричні ефемериди планет Сонячної системи icon“Тригонометричні ефемериди планет Сонячної системи”
Висновки. 46
Тригонометричні ефемериди планет Сонячної системи iconПрирода Сонця. Планети. Малі тіла Сонячної системи”
Це випромінювання дуже впливає на всі тіла Сонячної системи: нагріває їх, позна­чається на атмосферах планет, дає світло й тепло,...
Тригонометричні ефемериди планет Сонячної системи icon“загальний огляд
Меркурій, Венера і Марс, вона є найбільшою. Найважливішою відмінністю Землі від інших планет Сонячної системи є існування на ній...
Тригонометричні ефемериди планет Сонячної системи iconУран сьома планета Сонячної системи
Уран, сьома від Сонця велика планета Сонячної системи, належитьдо планет-гігантів
Тригонометричні ефемериди планет Сонячної системи iconРозміри І форми Землі. Маса І густина Землі
Меркурій, Венера І марс, вона є найбільшою. Найважливішою відмінністю Землі від інших планет Сонячної системи є існування на ній...
Тригонометричні ефемериди планет Сонячної системи iconСклад І масштаби сонячної системи. Конфігурації та умови видимості планет
Найвіддаленіша від нас з відомих планет — Плутон знаходиться від Землі майже в 40 раз далі, ніж Сон­це. Та навіть найближча до Сонця...
Тригонометричні ефемериди планет Сонячної системи iconСклад І масштаби сонячної системи. Конфігурації та умови видимості планет
Найвіддаленіша від нас з відомих планет — Плутон знаходиться від Землі майже в 40 раз далі, ніж Сон­це. Та навіть найближча до Сонця...
Тригонометричні ефемериди планет Сонячної системи icon"У чому полягає відмінність між планетами внутрішньої І зовнішньої групи? Замалювати рух планет Сонячної системи"
У чому полягає відмінність між планетами внутрішньої І зовнішньої групи? Замалювати рух планет Сонячної системи”
Тригонометричні ефемериди планет Сонячної системи iconРух, розміри, маса
Уран, сьома від Сонця велика планета Сонячної системи, належитьдо планет-гігантів
Тригонометричні ефемериди планет Сонячної системи iconСклад І масштаби сонячної системи
Найвіддаленіша від нас з відомих планет — Плутон знаходиться від Землі майже в 40 раз далі, ніж Сон­це. Та навіть найближча до Сонця...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©rushkolnik.ru 2000-2015
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы