Довідник астронома

Використання комп'ютерних навчальних систем. Розуміння основних принципів об’єктно-орієнтованої ідеології програмування. Закріплення теоретичних знань та практичних навичок програмування мовою С/С++. Створення файлу, поповнення його з клавіатури.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 09.09.2015
Размер файла 229,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ «ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ» ЧЕРНІВЕЦЬКИЙ ФАКУЛЬТЕТ

Кафедра інформаційних систем

Курсова робота

з дисципліни “Програмування”

Тема: “Довідник астронома ”

Виконавець:

Козубовська Андріяна

Чернівці 2015

Зміст

Вступ

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

2. Практична частина

2.1 Постановка задачі

2.2 Алгоритм роботи

2.3 Інструкція використання програми

Висновок

Список джерел

Додатки

Вступ

Мова програмування Сi була розроблена в 1972 р. Денисом Рiтчi, який є одним з авторів операцiйної системи UNIX. Мова програмування Сi пізніше була використана для програмування цiєї системи, а також багатої бібліотеки обслуговуючих програм, оскільки, являлася універсальною мовою загального призначення, мова Сi зручна для програмування системних задач. Поява мікрокомп'ютерів закріпила позиції мови Сi. Було створено близько 30 його нових компіляторів, а після проведення Американським національним інститутом стандартів (American National Standards Institute) робіт по стандартизацiї в області програмування почали розроблятися компілятори, що вiдповiдали опублікованому весною 1986 р. проекту стандарту.

Першим компілятором по стандарту ANSI являлась система Турбо Сi версiї 1.0 фiрми Borland International. Ця система, що складається з компілятора мови Сi, пов'язаного з ним редактора, компоновщика i бібліотек, забезпечила користувачам зручну інтегровану операційну оболонку, а також суттєво полегшувала професійне програмування, в якому визначальними параметрами є висока швидкість компiляцiї, висока якість згенерованого коду та невеликий об'єм оперативної пам'ять. Мова Сі серед сучасних мов програмування є однією iз найбільш поширених. Вона універсальна, але найбільш ефективне її використання в задачах системного програмування - розробки трансляторів, операційних систем, інструментальних засобів. Мова Сі добре зарекомендувала себе ефективністю, лаконічністю запису алгоритмів, логічною стрункістю програм. У багатьох випадках програми, написані на мові Сі, можна порівняти по швидкості з програмами, написаними на мові Асемблера, при цьому вони більш наглядні i прості у супроводі.

Основними перевагами мови Сі вважаться висока переча написаних на нiй програм мiж комп'ютерами з різною архітектурою, мiж різними операційними середовищами. Транслятори мови Сі дiять практично на всiх персональних комп'ютерах, які використовуються в наш час. Перечислимо окремі особливості мови С:

- в мові Сі реалізовані окремі операцiї низького рівня (а саме операцiї над бітами). Окремі з таких операцій напряму вiдповiдають машинним командам;

- мова Сі підтримує механізм показчикiв на змiннi i функцiї;

- базовi типи даних мови Сі відображають тi ж об'єкти, з якими потрібно мати справу програмі на мові Асемблера,- байти, машинні слова, символи, строки;

- як в нiякiй iншiй мові програмування високого рівня в мові Сі накладаються лише незначні обмеження на перетворення типів даних;

- не дивлячись на ефективність і потужність конструкції мови Сі, він відносно малий по об'єму, але в системне оточення мови Сі входить бібліотека стандартних функцій, в який реалізовані встроенi оператори введення - виведення, динамічного розподілу пам'ять, управління процесами i т.д. Народження комп'ютерних навчальних систем пов'язане з поширенням персональних комп'ютерів, забезпечених призначеним для користувача графічним інтерфейсом і здатних сприймати і відтворювати мультимедійні дані в різних форматах. Ширші можливості по використанню комп'ютерних навчальних систем відкрилися завдяки Інтернету. Саме завдяки «виходу» навчальних програм в Інтернет з'явився термін eLearning - «електроне навчання». Основним завданням курсової роботи це закріплення теоретичних знань та практичних навичок програмування мовою С/С++, набутих під час вивчення дисциплін “Проблемно-орієнтовані мови програмування ”.

У процесі виконання курсової роботи студент повинен навчитися самостійно працювати з літературою, розробляти алгоритми, здійснювати їх програмну реалізацію та від лагодження на сучасних обчислювальних системах. Ціль курсової роботи - створення програмного забезпечення, яке працює із текстовим файлом, структурами даних, має зв'язок між класами та функціями.

Об'єктом курсової роботи є розробка програми, яка виконує функції бази даних.

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

Сі - це мова програмування високого рівня, який більш популярний, ніж Паскаль і Асемблер. Сі, дозволяє писати програми під Windows. Адже перші Операційні системи були написані саме на мові Сі. Програмування під Windows зараз дуже поширене в світі, але для цього необхідно багато праці і зусилля. В даному курсі ми пройдемо не один десяток уроків, щоб спочатку навчитися програмувати на мові С. В них ви знайдете приклади програмування на Си. Після чого ви можете вивчати програмування під windows. Щоб писати програми на мові Сі, необхідно увійти в середу програмування. Якщо у вас немає цієї програми, то ви можете завантажити її на будь-якому сайті, це: Borland C, Visual C++, Visual Studio 2005, Visual Studio 2008 і вже виходить Visual Studio 2010 якщо ж вона у вас є, то приступимо до процесу навчання.

Частиною стандартної бібліотеки C++ є бібліотека iostream - об'єктно-орієнтована ієрархія класів, де використовується і множинне, і віртуальне спадкоємство. У ній реалізована підтримка для файлового введення/виводу цих вбудованих типів. Крім того, розробники класів можуть розширювати цю бібліотеку для читання і запису нових типів даних. Для використання бібліотеки iostream в програмі необхідно включити заголовний файл #include <iostream>.

Операції введення/виводу виконуються за допомогою класів istream (потокове введення) і ostream (потоковий вивід). Третій клас, iostream, являється похідним від них і підтримує двонаправлене введення/вивід. Для зручності в бібліотеці визначено три стандартні об'єкт-потоки:

cin - об'єкт класу istream, відповідний стандартному введенню. У загальному випадку він дозволяє читати дані з терміналу користувача;

cout - об'єкт класу ostream, відповідний стандартному виводу. У загальному випадку він дозволяє виводити дані на термінал користувача;

cerr - об'єкт класу ostream, відповідний стандартному виводу для помилок. У цей потік ми направляємо повідомлення про помилки програми. Висновок здійснюється, як правило, за допомогою переобтяженого оператора зрушення вліво (<<), а введення - за допомогою оператора зрушення управо (>>): Окрім читання з терміналу і запису на нього, бібліотека iostream підтримує читання і запис у файли. Для цього призначені наступні класи:

ifstream, похідний від istream, зв'язує введення програми з файлом;

ofstream, похідний від ostream, зв'язує виведення програми з файлом;

fstream, похідний від iostream, зв'язує як введення, так і виведення програми з файлом. Щоб використовувати частину бібліотеки iostream, пов'язану з файловим введенням/виводом, необхідно включити в програму заголовний файл

#include <fstream>

Бібліотека iostream підтримує також введення/вивід в область пам'яті, при цьому потік зв'язується з рядком в пам'яті програми. За допомогою потокових операторів введення/виводу ми можемо записувати дані в цей рядок і читати їх звідти. Об'єкт для строкового введення/виводу визначається як екземпляр одного з наступних класів:

istringstream, похідний від istream, читає з рядка;

ostringstream, похідний від ostream, пише в рядок;

stringstream, похідний від iostream, виконує як читання, так і запис.

Для використання будь-якого з цих класів в програму треба включити заголовний файл #include <sstream>

В мові C++ для представлення і обробки рядків є дві можливості. По-перше, можна використовувати символьний масив, що закінчується нулем і є рядком в стилі мови C, як це й робилося практично у всіх прикладах даної книги. По-друге, для роботи з рядками можна використовувати об'єкти бібліотечного класу string з бібліотеки <string>. В цій бібліотеці ім'я string оголошено в просторі імен std і є коротким ім'ям конкретизації більш загального класу-шаблону basic_string: typedef basic_string<char> string; Додавання в C++ класу string на перший погляд здається зайвим, оскільки в C++ як рядки вже підтримуються масиви символів, що закінчуються нулем. Але ці рядки не можна обробляти за допомогою стандартних операторів C++ і вони не можуть бути частиною звичайних виразів C++. Як демонстрація цього розглянемо наступний фрагмент програми: Для символьного рядка в стилі C не можна використовувати оператор “=” для присвоювання нового значення, за винятком ініціалізації, а для конкатенації двох рядків не можна використовувати оператор складання. Окрім цього, для обробки рядків є додаткові можливості. Щоб дістати доступ до класу string, в програму слід включити директиву:#include <string>В класі string є декілька конструкторів. Нижче представлені прототипи трьох з них, які частіше за все використовуються в програмах:

string();

string(const char *str);

string(const string &str);

В першому варіанті за допомогою конструктора створюється порожній об'єкт типу string. В другому варіанті об'єкт типу string створюється з рядка в стилі C, що закінчується нулем, заданого вказівником на його перший символ; цей конструктор є конструктором приведення рядка, що закінчується нулем, до об'єкту типу string. В третьому варіанті об'єкт типу string створюється з іншого об'єкту типу string, тобто цей варіант конструктора є конструктором копіювання.

За замовчуванням усі значення, що виводяться, вирівнюються по правому краю: якщо ширина поля більше від значення, що виводиться, його буде вирівняно по правому краю поля. Щоб встановити вирівнювання по лівому краю, поставте знак "мінус" відразу після знаку %. Наприклад, рядок форматування %-10.2f забезпечить вирівнювання дійсного числа (з двома десятковими знаками у 10-символьному полі) по лівому краю. Розглянемо програму, у якій продемонстровано механізм використання специфікаторів ширини поля і вирівнювання по лівому краю.

#include <stdio.h>// Для введення/виведення.

Крім додавання покажчика з цілочисельним значенням і віднімання його від покажчика, а також обчислення різниці двох покажчиків, над покажчиками жодні інші арифметичні операції не виконуються. Наприклад, до покажчиків не можна додавати float - абоdouble - значення.

Щоб зрозуміти, як формується результат виконання арифметичних операцій над покажчиками, виконаємо таку коротку програму. Вона виводить реальні фізичні адреси, які містять покажчик наint - значення (izm) і покажчик наfloat - значення (f). Звернемо Вашу увагу на кожну зміну адреси (залежну від базового типу покажчика), яка відбувається під час повторення циклу [21]. Зверніть увагу також на те, що під час використання покажчика в cout - настанові його адреса автоматично відображається у форматі адресації, що вживається для поточного процесора і середовища виконання. #include <conio>// Для консольного режиму роботи

Стандарт мови програмування C++ визначає всю свою бібліотеку у власному просторі імен, який іменується std. Саме з цієї причини більшість програм у цьому навчальному посібнику містять таку настанову:

using namespace std;// Використання стандартного простору імен.

іnt main ( ) {

Це означає, що розпочинаєм писати головну функцію main. Саме з цієї функції консольна програма розпочинає свою роботу. Intо значає, що функція повертає значення типу int, тобто цілого. В С++ є де-які типи даних, про них пізніше. Після int йде назва функції (в нашому випадку main). Потім у дужках передаються аргументи функції, зараз їх намає, отже, поки не звертаємо уваги. Потім йде символ{,який означає початок тіла функції.

Функція, що робить затримку екрану. Для її використання потрібно підключити бібліотеку conio.h.

Логічна настанова if:

Настанова if у мові програмування C++ діє подібно до настанови if, визначеної в будь-якій іншій мові програмування. Її простий формат є таким: if(умова) настанова; У цьому записі елемент умова- вираз, який під час обчислення можевиявитися значенням, що дорівнює ІСТИНІ або ФАЛЬШІ. У мові програмування C++ ІСТИНА представляється ненульовим значенням, а ФАЛЬШ - нулем. Якщо умова, або умовний вираз, є істинним, елемент настановави-конається, інакше - ні.

Циклічна настанова for:

Цикл for повторює вказану настанову задану кількість разів. Настанова for у мові програмування C++ діє практично так само, як настанова for, визначена в таких мовах програмування, як Java С#,Pascal і VisualBasic. Її простий формат є таким: for (ініціалізація; умова; інкремент) настанова; У цьому записі елемент ініціалізація є настанова присвоєння, яка встановлює керівній змінній циклу початкове значення. Ця змінна діє як лічильник, який керує роботою циклу. Елемент умова є виразом, у якому тестується значення керівної змінної циклу. Результат цього тестування визначає, виконається цикл for ще раз чи ні. Елемент інкремент - вираз, який визначає, як змінюється значення керівної змінної циклу після кожної ітерації. Цикл for виконуватиметься доти, доки обчислення елемента умова дає істинний результат. Як тільки умова стане помилковою, виконання програми продовжиться з настанови, що знаходиться наступною за циклом for.

Ключове слово class показує компіляторові, що все у фігурних дужках ({}) належить оголошенню класу. (Не зі ставити крапку з коми наприкінці оголошення.) Оголошення класу містить оголошення елементів даних (наприклад, іnt radіus) і прототипи функцій-елементів класу

* Кожне оголошення класу повинне включати прототип функції конструктора.

* Ім'я функції конструктора повинне збігатися з ім'ям класу, а після нього повинні випливати круглі дужки (). Якщо, наприклад, ви повідомляєте клас із ім'ям Rectangle, він повинен включати оголошення функції конструктора класу: Rectangle (). Отже, оголошення класу Rectangle повинне виглядати так:

* Не згадуйте ніякого значення, що повертає, для функції конструктора. (Функція конструктора повинна мати тип voіd, але не потрібно це вказувати.)

* Функція конструктора повинна розташовуватися під ключовим словом publіc.

Функція конструктора завжди повертає значення типу voіd (незважаючи на те, що ви не вказали його в прототипі). Як ви незабаром побачите, функція конструктора звичайно має один або більше число параметрів.

* Ім'я функції деструктора повинне збігатися з ім'ям класу і йому повинен передувати символ ~. Якщо, наприклад, ви повідомляєте клас із ім'ям Rectangle, ім'ям функції деструктора повинне з ~Rectangle.

* Не вказуйте ніякого значення, що повертає, для функції деструктора. (Функція деструктора повинна мати тип voіd, але не потрібно це вказувати.)

* Функція деструктора не має ніяких параметрів.

Шаблон vector розміщений у заголовковому файлі<vector>. Як і всі стандартні компоненти, він розміщений у просторі імен std. Даний інтерфейс емалює роботу стандартного масив умови C(наприклад швидкий довільний доступ до елементів), а також деякі додаткові можливості, такі, як автоматична зміни розміру вектора при вставці або видаленні елемента. Всі елементи класу мають належати одному типові. Наприклад, не можна одночасно зберігати дані типів charіintу одному векторі. Клас vector володіє стандартним набором методів для доступу до елементів, додавання та видалення елементів, а також отримання кількості збережених елементів. Вектор може бути ініціалізований будь-яким типом, що володіє конструктором копіювання і визначенимo perator=, що задовольняє наступним умовам:

Таблиця 1

Вираз

Тип результату

Умова

t = u

T&

Tе еквівалентне u

T(t)

Tе еквівалентне T(t)

T(u)

Uе еквівалентне T(u)

&u

const T*

показує адресу u

t.~T()

Тут T -- тип, яким ініціалізований vector, t -- змінна типу T, u -- змінна типу (можливо const) T. Доступ до окремого елемента вектора можна отримати, використовуючи операції, описані нижче у таблиці. Згідно з домовленістю CіC++, перший елемент має індекс0, останній size() - 1.

Таблиця 2

Вираз

Тип повернення

Перевірка межі

v.at(i)

T& або const T&для елемента i

Можливий викид винятку out_of_range

v[i]

T& або const T&для елемента i

Невизначена поведінка для i >= v.size()

v.front()

T& або const T&для першого елемента

Невизначена поведінка для v.empty() == true

v.back()

T& або const T&для останнього елемента

Невизначена поведінка для v.empty() == true

Де v елемент (можливо const) типу vector<T>, аi-- індекс потрібного елемента вектора.

Типова реалізація вектора-- це вказівник на динамічний масив. Розмір вектора-- це кількість елементів, а об'єм-- кількість використаної ним пам'яті.

Якщо при вставці в вектор нових елементів, його розмір стає більше його об'єму, відбувається перерозподіл пам'яті. Як правило, це призводить до того, що вектор виділяє нову область збереження, переміщуючи елементи і вільні старі області у нову комірку пам'яті. Оскільки адреси елементів при цьому змінюються, будь-які посилання, або ітератори елементів у векторі можуть стати недійсними. Використання недійсних посилань призводить до невизначеної поведінки. Вектор зберігає певний порядок його елементів, так, що при вставці нового елемента на початок або в середину вектора, наступні елементи переміщуються в протилежному напрямі з точки зору їх оператора присвоєння і конструктора копіювання. Отже, посилання і ітератори елементів після місця вставки стають недійсними.

Файли бувають двох типів: текстовими та бінарними (binary).Дані у типованих файлах, описаних вище, певним чином кодуються комп'ютером. Ці файли не можна редагувати або переглядати за допомогою звичайного текстового редактора. Тому, окрім типованих, використовують текстові файли, які не мають такого недоліку. Елементами текстових файлів є рядки (послідовності символів: букв, цифр, знаків та пропусків). Такий файл можна створювати та редагувати за допомогою текстового редактора. Розмежовувачем між елементами файлу є пропуск. Уведення кожного рядка закінчується натисканням на клавішу вводу. Для перевірки чи є символи у рядку викор. функцію eoln(<ім'я файлу>). Текстові файли опис. у розділі опису змінних так: var <список імен змінних>: text; Дані з рядка текстового файлу можна зчитати за допомогою команд:read(<ім'я файлу>, <список парам.>); readln(<ім'я файлу>, <список парам.>); дія яких була описана вище. Різниця між цими командами така: під час виконання команди readln зайві дані у рядку ігноруються і наступна команда read чи readln буде зчитувати дані з наступного рядка. Рядок текстового файлу можна створити за допомогою звичайного текстового редактора або програмним способом за допомогою команд: write(<ім'я файлу>, <список виразів>); writeln(<ім'я файлу>, <список виразів>);На відміну від звичайних файлів у текстовий файл можна додавати (дописувати) дані. Для цього замість процедури rewrite використовують процедуру append(<ім'я файлу>);

Для запису у файл:

ofstreamfout(“text.txt”);//створення об'єкта і файлу

fout<< “text”;//запис у файл

fout. close();//закриття файлу

Для зчитування з файлу:

stringbuff;//тимчасова змінна для запису

ifstreamfin(“text.txt”);

getline(fin, buff);//зчитування першого рядка файлу

cout<<buff;//вивід першого рядка файлу

fin.close();

return 0;

Означає, що функція повертає значення типу, якого ми вказали вище (int), яке дорівнює 0, тобто програма завершилася вдало.

Ну і кінець функції (і в даному випадку програми)}.

2. Практична частина

2.1 Постановка задачі

Розробити програму «Довідник астронома» для більш простої та оптимальної обробки інформації по сузір'я і зірок. В програмі має бути передбачена можливість введення нових даних в разі відсутності бази даних, тобто створення нової бази даних. Якщо файл з таким іменем існує то його коректування не робити.

База даних повинна мати таку структуру запису:

· Назва найяскравіших видимих зірок;

· Назва сузір'я;

· Видима зоряна величина;

· Відстань від Землі;

· Координати на небосхилі: пряме сходження (ч, хв.) і схилення (град., хв..);

· Пошук зірок, що входять в дане сузір'я, найяскравішої зірки сузір'я, видимих сузір'їв і зірок в заданій точці земної кулі в заданий час.

2.2 Алгоритм роботи

Обнулення кількості зірок, виклик методу читання зірок з каталога, запуск меню, чекання введення, функція меню:

1. ввод даних про нову зірку виклик функції додавання зірки;

2. запрос на пошук найяскравіших зірок виведення результату;

3. ввод імені сузір'я запит на пошук зірок в сузір'ї, виведення результату;

4. ввод даних по розташуванню, запит на пошук за даними, виведення результату;

5. вихід;

void readInfoAboutStar ()перевірка наявності файлу каталогу, якщо є тоді читає і додаємо його у вектор викликом методу addstar, якщо файлу немає то читаємо дані за умовчанням і додаємо зірки у вектор. Клас астрономКонтрол адд Стар: збільшуємо число зірок на одиницю, записуємо інформацію про зірку в стек,записуємо інформацію у файл. Метод гет СтарБайПлдейс: обнуляємо початкові дані, обчисляєм зміщення землі по орбіті до сонця відносно 22 березня перевірка чи більше вийшло 24, якщо да тоді віднімаємо 24, визначуваний видимий кут обзора по широті, пошук в стеку зірок що відповідають вимогам що знайшли вище. Метод поіска самих яскравих зірок: обнуляємо початкові дані, переходим циклом по усіх зірках, якщо яскравість менше 0.5 тоді додаємо в рузультат, повертаємо результат туди звідки був запит. Аналогічно так само пошук по сузір'ях: обнуляємо початкові дані, переходим циклом по усіх зірках, якщо яскравість менше 0.5 тоді додаємо в результат, повертаємо результат туди звідки був запит.

2.3 Інструкція використання програми

Відкриваєм файл з програмою. Наступний крок нажимаємо f9 (компелюємо і виконуємо. Відкривається консоль з меню “довідника астронома”. Користува може ознайомитись і вибрати потрібний пункт.

Рисунок 1.1

Вводимо 1 і вводимо певні дані щоб додати зорю в файл, нажимаємо Enter для продовження роботи.

Рисунок 1.2

Провіряємо чи зоря записана у файлі. Відкриваємо файл:

Sirius 6.45 -16.42 BigDog -1.46 8.6

Canopus 6.23 -52.41 Keel -0.72 310

Toliman 14.39 -60.5 Centauri -0.27 4.3

Arcturus 14.15 19.1 Bootesа -0.04 34

Vega 18.36 38.47 Lira 0.03 25

Chapel 5.16 45.59 Charioteer 0.08 41

Rigel 5.14 -8.12 Orionа 0.12 870

Procyon 7.39 5.13 Malagos 0.38 11.4

Achernar 1.37 -57.14 Eridan 0.46 69

Betelgeuse 5.55 7.24 Orion 0.5 530

Hadar 14.03 -60.22 Centauri 0.61 400

Acrux 12.26 -63.05 Southern_Cross 0.76 330

Altair 19.5 8.52 Eagle 0.77 16

Aldebaran 4.35 16.3 Taurus 0.85 60

Antares 16.29 -26.25 Scorpio 0.96 610

Spica 13.25 -11.09 Virgin 0.98 250

Pollux 7.45 28.01 Twins 1.14 40

Formalhaut 22.57 -29.37 Southern_Fish 1.16 22

Becrux 12.47 -59.41 Southern_Cross 1.25 290

Deneb 20.41 45.16 Swan 1.25 1500

Regul 10.08 11.58 Lion 1.35 69

Adar 6.58 -28.58 BigDog 1.5 400

Castor 7.34 31.53 Twins 1.57 49

Gacrux 12.31 -57.06 Southern_Cross 1.63 120

Shaul 17.33 -37.06 Scorpio 1.63 330

Andriana 12.4 3.7 Scorpio 54.2 0.7

Бачим що наша зірка записана у файлі. Продовжуєм працювати з програмою. Вводимо 2 для того щоб вивести найяскравіші зорі.

Рисунок 1.3. Продовжуємо роботу з програмою. Вводимо 3 для виведення зорі у сузір'ї.

Рисунок 1.4

Якщо ми неправельно введемо дані нам виведе що незнайдено щодної зорі.

Рисунок 1.5

Продовжуємо роботу з програмою. Вводимо 4 для виведення зорі у заданій точці світу і у заданий час.

Рисунок 1.6

Якщо користувач увів неправельні дані програма повідомить про це.

Рисунок 1.7

Для того щоб завершити роботу потрібно ввести 5.

Висновок

В ході курсової роботи на практиці застосували свої знання з об'єктно-орієнтованого програмування. Поглибили розуміння основних принципів об'єктно-орієнтованої ідеології програмування. Навчились розробляти ієрархію класів. Набули практичних навиків роботи. Таким чином в курсовому проекті була розглянута програма де треба створити файл, що містить відомості про зірки і сузір'я, за таким зразком: видимі зірки: назва, сузір'я, видима зоряна величина, відстань від Землі, координати на небосхилі: пряме сходження (ч, хв..) і схилення (град., хв..). Пошук зірок, що входять в дане сузір'я, найяскравішої зірки сузір'я, видимих сузір'їв і зірок в заданій точці земної кулі в заданий час. По бажанню користувача вивести на екран кількість таких зірок. Забезпечити можливість поповнення файлу з клавіатури. Забезпечити можливість відновлення попередньої версії файлу. Програма на курсовий проект успішно виконана та збережена на диску який входити до комплекту курсового проекту.

комп'ютерний програмування файл навчальний

Список джерел

1. Страуструп Б. Язык программирования С++. Специальное издание. - М., СПб.:”Издательство БИНОМ” - „Невский Диалект”, 2001г. - 1099 с.

2. Дейтел Х., Дейтел П. Как программировать на С++. Третье издание.-М.: ЗАО „Издательство БИНОМ”, 2001г. - 1152с.

3. Эндрю Троельсен. C# и платформа.NET. Библиотека программиста. - СПб.: Питер, 2005. - 796 с.

4. Бондарев В.М., Объектно-ориентированное программирование на С#. Учебное пособие. - Харьков: СМИТ, 2009г. - 224 с.

5. Бондарев В.М., Программирование на С++. Учебное пособие. - Харьков: СМИТ, 2004г. - 294 с.

Додаток А

ЛІСТИНГ ПРОГРАМИ

#include <iostream>

#include <vector>

#include <string>

#include <fstream>

#include <stdio.h>

#include <conio.h>

#include <windows.h>

#include <sstream>

using namespace std;

int kolStar; //зберігає кількість зірок, що занесені до довідника

class Time

{

public:

int minute;

int hour;

int date;

int month;

Time() //конструктор класу

{

//встановлення дати та часу на

//15 травня 12:00

month = 5;

date = 15;

hour = 12;

minute = 0;

}

//метод встановлення дати

void setDate(int setMonth, int setDate)

{

month = setMonth;

date = setDate;

}

//метод встановлення часу

void setTime(int setHour, int setMinute)

{

hour = setHour;

minute = setMinute;

};

class Star

{

public:

float xKor; //схилення зорі

float yKor; //пряме сходження зорі

float starBright; //видима яскравість зорі

float trek; //відставнь до зорі

string constellation; //назва сузіря до якого зоря входить

string name; //назва зорі

//конструктор класу

Star(string nameOfStar, float x, float y, string constel,

float bright, float setTrek)

{

//заповнення інформації про зорю, що створюється

name = nameOfStar;

trek = setTrek;

xKor = x;

yKor = y;

constellation = constel;

starBright = bright;

};

class AstronomControl

{

public:

int lastDoKol; //зберігає довжину останнього списку зірок, котрі були запрошені

vector <Star*> star; //вектор зірок

//конструктор класу

AstronomControl()

{

//обнулення змінних

star.clear();

kolStar = 0;

lastDoKol = 0;

}

//метод додавання до каталогу нової зорі

void addStar(string nameOfStar, float x, float y,

string zod, float bright, float setTrek)

{

kolStar++; //оновлення кількості зорей у каталозі

//створення нового обьекта класу Зоря та занесення її до вектору

star.push_back (new Star(nameOfStar, x, y, zod, bright, setTrek));

ofstream inFile("AstronomBook.txt", ios_base::app);

inFile << nameOfStar << endl;

inFile << x << endl;

inFile << y << endl;

inFile << zod << endl;

inFile << bright << endl;

inFile << setTrek << endl;

inFile.close();

}

//метод, що повертає зорі, на небосхилі у заданій широті та у заданий час

vector <string> getStarsByPlace(float xKor, Time time){

//створення тимчасових змінних та

//обнулення інформації про кількість поточних зірок у векторі

vector <string> ret;

ret.clear();

lastDoKol = 0;

float minZnach;

float maxZnach;

//вираховуємо змішення Землі від лінії весеннього рівнодення

float shiftTime = 24 * ((time.month - 1) * 30 + time.date - 81) / 365;

time.hour = time.hour + (int)shiftTime;

time.minute = time.minute + (shiftTime - ((int)shiftTime));

//якщо зміщення віходить за діапазон, виправляємо цю неточність

if (time.hour > 24)

time.hour = time.hour - 24;

//розрахунок зірок у північній півкулі

if (xKor >= 0)

{

//знахождення максиального огляду за данної широти

minZnach = xKor - 90;

maxZnach = 90 - xKor;

}

else //розрахунок зірок у південні півкулі

{

//знахождення максиального огляду за данної широти

maxZnach = xKor + 90;

minZnach = -90 - xKor;

}

//шукаємо зорі, які видно у будь яку пору року

for (int i = 0; i < kolStar; i++)

if (star[i]->starBright >= maxZnach)

{

//заносимо її до ветору

string str = "";

str += star[i]->name;

str += ", що знаходится в сузiр'ї ";

str += star[i]->constellation;

ret.push_back(str);

lastDoKol++;

}

//шукаємо зорі що видно лише в певну пору року

for (int i = 0; i < kolStar; i++)

{

if ((star[i]->starBright > minZnach) && (star[i]->starBright < maxZnach))

{

if (time.hour < 6)

{

if ((star[i]->xKor < time.hour) || (star[i]->xKor < 24 - 6 + time.hour))

{

string str = "";

str += star[i]->name;

str += ", що знаходится в сузiр'ї ";

str += star[i]->constellation;

ret.push_back(str);

lastDoKol++;

}

}

else if (time.hour > 18)

{

if ((star[i]->xKor > time.hour) || (star[i]->xKor < 6 - 24 + time.hour))

{

string str = "";

str += star[i]->name;

str += ", що знаходится в сузiр'ї ";

str += star[i]->constellation;

ret.push_back(str);

lastDoKol++;

}

else

{

if ((star[i]->xKor > time.hour - 6) && (star[i]->xKor < time.hour + 6)){

string str = "";

str += star[i]->name;

str += ", що знаходится в сузiр'ї ";

str += star[i]->constellation;

ret.push_back(str);

lastDoKol++;

}

return ret;

}

//метод виведення найяскравіших зірок

vector <string> getBrightersStars(){

vector <string> ret; //змінна збереження списку найяскравіших зорей

ret.clear(); //спорожнюємо вектор перед використанням

lastDoKol = 0; //обнулення кількості єлементів у векторі

//перевірка всіх зорей на яскравість та при визначенні яскравості

//додавання до вектору цієї зорі

for (int i = 0; i < kolStar; i++)

if (star[i]->starBright < 0.5){

ret.push_back(star[i]->name);

lastDoKol++;

}

return ret;

}

\

//метод, що повертає вектор зорей, що знаходятся у заданному сузірї

vector <string> getStartByConstellation(string searchConstellation)

{

//свторюємо вектор для запису зорей та обнулюєто змінні

vector <string> ret;

ret.clear();

lastDoKol = 0;

//пошук зорей та додавання їх до ветора

for (int i = 0; i < kolStar; i++)

if (star[i]->constellation == searchConstellation)

{

ret.push_back(star[i]->name);

lastDoKol++;

}

return ret;

}

};

//свторення обьекту керування довідником

AstronomControl astronom;

void readInfoAboutStar()

{

ifstream read("AstronomBook.txt"/*, ios_base::in*/);

if (read.is_open())

{

bool isEnd = false;

while (!isEnd)

{

string name = "";

string sozvezdiye = "";

float x, y, bright, trek;

read >> name;

read >> x;

read >> y;

read >> sozvezdiye;

read >> bright;

read >> trek;

for (int i = 0; i < kolStar; i++)

if (name == astronom.star[i]->name)

isEnd = true;

if (!isEnd)

astronom.addStar(name, x, y, sozvezdiye, bright, trek);

//addStar("Сіріус", 6.45, -16.42, "Великого Пса", -1.46, 8.6);

}

else

{

//у вигляді [назва] [пряме сходження][схилення][сузірье][яскравість][відстань]

astronom.addStar("Sirius", 6.45, -16.42, "BigDog", -1.46, 8.6);

astronom.addStar("Canopus", 6.23, -52.41, "Keel", -0.72, 310);

astronom.addStar("Toliman", 14.39, -60.50, "Centauri", -0.27, 4.3);

astronom.addStar("Arcturus", 14.15, 19.10, "Bootesа", -0.04, 34);

astronom.addStar("Vega", 18.36, 38.47, "Lira", 0.03, 25);

astronom.addStar("Chapel", 5.16, 45.59, "charioteer",0.08, 41);

astronom.addStar("Rigel", 5.14, -8.12, "Orionа", 0.12, 870);

astronom.addStar("Procyon", 7.39, 5.13, "Malagos", 0.38, 11.4);

astronom.addStar("Achernar", 1.37, -57.14, "Eridan", 0.46, 69);

astronom.addStar("Betelgeuse", 5.55, 7.24, "Orion", 0.5, 530);

astronom.addStar("Hadar", 14.03, -60.22, "Centauri", 0.61, 400);

astronom.addStar("Acrux", 12.26, -63.05, "Southern_Cross", 0.76, 330);

astronom.addStar("Altair", 19.50, 8.52, "Eagle", 0.77, 16);

astronom.addStar("Aldebaran", 4.35, 16.30, "Taurus", 0.85, 60);

astronom.addStar("Antares", 16.29, -26.25, "Scorpio", 0.96, 610);

astronom.addStar("Spica", 13.25, -11.09, "Virgin", 0.98, 250);

astronom.addStar("Pollux", 7.45, 28.01, "Twins", 1.14, 40);

astronom.addStar("Formalhaut", 22.57, -29.37, "Southern_Fish", 1.16, 22);

astronom.addStar("Becrux", 12.47, -59.41, "Southern_Cross", 1.25, 290);

astronom.addStar("Deneb", 20.41, 45.16, "Swan", 1.25, 1500);

astronom.addStar("Regul", 10.08, 11.58, "Lion", 1.35, 69);

astronom.addStar("Adar", 6.58, -28.58, "BigDog", 1.5, 400);

astronom.addStar("Castor", 7.34, 31.53, "Twins", 1.57, 49);

astronom.addStar("Gacrux", 12.31, -57.06, "Southern_Cross", 1.63, 120);

astronom.addStar("Shaul", 17.33, -37.06, "Scorpio", 1.63, 330);

}

read.close();

}

void Menu()

{

//параметр виходу встановлюємо як хибу

bool isExit = false;

int chooseNum;

//меню програми

do

{

cout<<"\t\t\tДовiдник астронома";

cout << endl<<endl;

cout << "1.Додати зорю" << endl;

cout << "2.Вивести найяскравiшi зорi" << endl;

cout << "3.Вивести зорi у заданому сузiр\"ї" << endl;

cout << "4.Вивести зорi у заданiй точцi свiту i у заданий час" << endl;

cout << "5.Вихiд" << endl;

//считування результату

cin >> chooseNum;

//вибір результату

switch(chooseNum)

{

//свторення нової зірки

case 1:

{

string name = "";

string zodiak = "";

float x = 0;

float y = 0;

float velichina = 0;

float bright = 0;

system("cls");

cout << "Введiть назву зорi" << endl;

cin >> name;

cout << "Введiть пряме пiднесення зорi у виглядi години.хвилини" << endl;

cin >> x;

cout << "Введiть схилення зорi у виглядi градуси.хвилини" << endl;

cin >> y;

cout << "Введiть вiдстань до зорi" << endl;

cin >> velichina;

cout << "Введiть видиму зоряну величину" << endl;

cin >> bright;

cout << "Оберiть сузiр\"я до якого вiдносится зоря" << endl;

cin >> zodiak;

cout<<"Нажмiть Enter для повернення в головне меню...";

_getch();

system("cls");

//додавання нової зірки до каталогу

astronom.addStar(name, x, y, zodiak, bright, velichina);

}

break;

case 2:

{

system("cls");

//виведння найяскравіших зірок

vector <string> brithtersStar = astronom.getBrightersStars();

for (int i = 0; i < astronom.lastDoKol; i++)

cout << brithtersStar[i] << endl;

cout<<"\n\nНажмiть Enter для повернення в головне меню...";

_getch();

system("cls");

}

break;

case 3:

{

system("cls");

//виведення зірок що знаходятся в введеному сузірї

string nameOfConstellation = "";

vector<string> starsVector;

starsVector.clear();

cout << "Введiть iм'я сузiр\"я" << endl;

cin >> nameOfConstellation;

starsVector = astronom.getStartByConstellation(nameOfConstellation);

cout << "Результати пошуку зiрок у сузiр\"ї " << nameOfConstellation << endl;

for (int i = 0; i < astronom.lastDoKol; i++)

cout << starsVector[i] << endl;

cout << endl;

cout<<"\n\nНажмiть Enter для повернення в головне меню...";

_getch();

system("cls");

}

break;

case 4:

{

system("cls");

//виведення видимих зорей у заданій широті та часі

bool isTrueEnter = true;

int xKoord = 0;

int timeTemperOne;

int timeTemperTwo;

Time time;

cout << "Введiть широту потрiбного мiсця(+ якщо пiвнiчного, - якщо пiвденного)" << endl;

cin >> xKoord;

cout << "Введiть потрiбну годину" << endl;

cin >> timeTemperOne;

cout << "Введiть потрiбну хвилину" << endl;

cin >> timeTemperTwo;

if ((xKoord > 90) || (xKoord < -90) || (timeTemperOne > 23) || (timeTemperOne < 0)

|| (timeTemperTwo > 59) || (timeTemperTwo < 0))

isTrueEnter = false;

if (isTrueEnter)

time.setTime(timeTemperOne, timeTemperTwo);

cout << "Введiть потрiбний мiсяць (1-12)" << endl;

cin >> timeTemperOne;

cout << "Введiть потрiбний день" << endl;

cin >> timeTemperTwo;

if ((timeTemperOne > 12) || (timeTemperOne < 0)

|| (timeTemperTwo > 31) || (timeTemperTwo < 0))

isTrueEnter = false;

if (isTrueEnter){

//заповнення даних для подальшого використанні при пошуку зорей

time.setDate(timeTemperOne, timeTemperTwo);

vector<string> starsVector;

starsVector.clear();

//обробка отриманих результатів про зорі та виведння отриманної інформації

starsVector = astronom.getStarsByPlace(xKoord, time);

for (int i = 0; i < astronom.lastDoKol; i++)

cout << starsVector[i] << endl;

if (astronom.lastDoKol == 0)

cout << "не знайдено жодної зорi" << endl;

cout << endl;

}

else

cout << "Ви ввели некоректнi даннi";

cout<<"\n\nНажмiть Enter для повернення в головне меню...";

_getch();

system("cls");

}

break;

case 5:

//вихід з програми

isExit = true;

break;

//реакція на введення некоректної цифри

default:

system("cls");

cout << "Ви зробили некоректний вибiр" << endl;

cout<<"Нажмiть Enter для повернення...";

_getch();

system("cls");

}

} while(! isExit); //Поки не натиснути "5" програма буде правцювати

}

int main(){

setlocale(LC_ALL,"russian");

kolStar = 0;

//заповнення каталогу про зорі інформацією

readInfoAboutStar();

Menu();

return 0;

}

Додаток Б

ФАЙЛ ПРОГРАМИ:

Sirius 6.45 -16.42 BigDog -1.46 8.6

Canopus 6.23 -52.41 Keel -0.72 310

Toliman 14.39 -60.5 Centauri -0.27 4.3

Arcturus 14.15 19.1 Bootesа -0.04 34

Vega 18.36 38.47 Lira 0.03 25

Chapel 5.16 45.59 Charioteer 0.08 41

Rigel 5.14 -8.12 Orionа 0.12 870

Procyon 7.39 5.13 Malagos 0.38 11.4

Achernar 1.37 -57.14 Eridan 0.46 69

Betelgeuse 5.55 7.24 Orion 0.5 530

Hadar 14.03 -60.22 Centauri 0.61 400

Acrux 12.26 -63.05 Southern_Cross 0.76 330

Altair 19.5 8.52 Eagle 0.77 16

Aldebaran 4.35 16.3 Taurus 0.85 60

Antares 16.29 -26.25 Scorpio 0.96 610

Spica 13.25 -11.09 Virgin 0.98 250

Pollux 7.45 28.01 Twins 1.14 40

Formalhaut 22.57 -29.37 Southern_Fish 1.16 22

Becrux 12.47 -59.41 Southern_Cross 1.25 290

Deneb 20.41 45.16 Swan 1.25 1500

Regul 10.08 11.58 Lion 1.35 69

Adar 6.58 -28.58 BigDog 1.5 400

Castor 7.34 31.53 Twins 1.57 49

Gacrux 12.31 -57.06 Southern_Cross 1.63 120

Shaul 17.33 -37.06 Scorpio 1.63 330

Andriana 12.4 3.7 Scorpio 54.2 0.7

Размещено на Allbest.ru


Подобные документы

  • Вивчення базових засобів об'єктно-орієнтованих мов програмування і отримання навичок постановки і вирішення різних завдань за допомогою ПЕОМ. Дослідження практичних навичок використання науково-технічної та нормативної літератури. Вибір електродвигунів.

    курсовая работа [3,6 M], добавлен 29.03.2023

  • Особливості редагування за допомогою текстового редактора NotePad вхідного файлу. C++ як універсальна мова програмування, знайомство с функціями. Характеристика графічних засобів мови С. Аналіз основних понять об’єктно-орієнтованого програмування.

    курсовая работа [123,3 K], добавлен 14.03.2013

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

  • Фундаментальні поняття об'єктно-орієнтованого програмування. Система лінійних нерівностей та опуклі багатогранники. Системи лінійних рівнянь лінійної алгебри як частковий випадок систем лінійних обмежень. Використання середовища програмування Delphi7.

    курсовая работа [222,7 K], добавлен 20.05.2015

  • Концепції об'єктно-орієнтованого програмування. Спеціалізовані засоби розробки програмного забезпечення мовою Delphi. Загальні питання побудови та використання сучасних систем об’єктно-орієнтованного та візуального проектування програмних засобів.

    курсовая работа [201,4 K], добавлен 01.04.2016

  • Модель в об’єктно-орієнтованих мовах програмування. Програмна модель створена на мові програмування С++, в середовищі програмування Borland С++ Builder 6.0. Вибір засобів реалізації програми. Види інструментів для об'єктно-орієнтованої розробки.

    курсовая работа [116,9 K], добавлен 06.06.2010

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Широкі можливості по використанню комп'ютерних навчальних систем. Розробка навчальної системи мультимедійного посібника з дисципліни "Інформатика і ОТ" на тему "Особливості мови програмування С++. Вказівники". Вимоги до розробки навчальної програми.

    курсовая работа [2,9 M], добавлен 23.11.2010

  • Зчитування числової інформації з файлу DATA.txt, аналізування, обробка та виконання графічного відображення. Редагування файлу тексту програми. Метод відображення кнопки з надписом на екрані. Створення нових класів на основі інших, вже створених.

    курсовая работа [196,2 K], добавлен 14.03.2013

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.