Автор работы: Пользователь скрыл имя, 08 Сентября 2015 в 23:37, курсовая работа
Мова програмування Сi була розроблена в 1972 р. Денисом Рiтчi, який є одним з авторів операцiйноi системи UNIX. Мова програмування Сi пізніше була використана для програмування цiєї системи, а також багатої бібліотеки обслуговуючих програм, оскільки, являлася універсальною мовою загального призначення, мова Сi зручна для програмування системних задач. Поява мікрокомп’ютерів закріпила позицiї мови Сi. Було створено близько 30 його нових компіляторів, а після проведення Американським національним інститутом стандартів (American National Standards Institute) робiт по стандартизацii в області програмування почали розроблятися компілятори, що вiдповiдали опублікованому весною 1986 р. проекту стандарту.
Вступ................................................................................................................... 4-5
Теоретична частина..........................................................................................6-13
Практична частина............................................................................................14
Постановка задачі........................................................................................14
Алгорит роботи............................................................................................15
Інструкція використання програми........................................................16-19
Висновок.............................................................................................................20
Список джерел.................................................
Функція, що робить затримку екрану. Для її використання потрібно підключити бібліотеку 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 володіє стандартним набором методів для доступу до елементів, додавання та видалення елементів, а також отримання кількості збережених елементів. Вектор може бути ініціалізований будь-яким типом, що володіє конструктором копіювання і визначеним operator=, що задовольняє наступним умовам:
Вираз |
Тип результату |
Умова |
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.
Вираз |
Тип повернення |
Перевірка межі |
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.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 для того щоб вивести найяскравіші зорі.
Продовжуємо роботу з програмою. Вводимо 3 для виведення зорі у сузір’ї.
Якщо ми неправельно введемо дані нам виведе що незнайдено щодної зорі.
Продовжуєм роботу з програмою. Вводимо 4 для виведення зорі у заданій точці світу і у заданий час.
Якщо користувач увів неправельні дані програма повідомить про це.
Для того щоб завершити роботу потрібно ввести 5.
В ході курсової роботи на практиці застосували свої знання з об’єктно-орієнтованого програмування. Поглибили розуміння основних принципів об’єктно-орієнтованої ідеології програмування. Навчились розробляти ієрархію класів. Набули практичних навиків роботи. Таким чином в курсовому проекті була розглянута програма де треба створити файл, що містить відомості про зірки і сузір’я, за таким зразком: видимі зірки: назва, сузір'я, видима зоряна величина, відстань від Землі, координати на небосхилі: пряме сходження (ч, хв) і схилення (град., хв). Пошук зірок, що входять в дане сузір'я, найяскравішої зірки сузір'я, видимих сузір'їв і зірок в заданій точці земної кулі в заданий час. По бажанню користувача вивести на екран кількість таких зірок. Забезпечити можливість поповнення файлу з клавіатури. Забезпечити можливість відновлення попередньої версії файлу. Програма на курсовий проект успішно виконана та збережена на диску який входити до комплекту курсового проекту.