
- •Базовий курс програмування у середовищі Turbo Pascal Методичні вказівки
- •Базовий курс програмування у середовищі Turbo Pascal Методичні вказівки
- •Практична робота №1
- •Організація вводу та виводу даних
- •Мета роботи: ознайомитись з конструкціями мови Turbo Pascal, структурою програм, стандартними типами даних і процедурами вводу та виводу.
- •Теоретичні відомості
- •1 Особливості мови Turbo Pascal
- •1.1 Спеціальні символи
- •1.2 Зарезервовані (ключові) слова
- •1.3 Ідентифікатори
- •1.5 Числа
- •1.6Рядки
- •1.7 Коментарі
- •2 Структура програми
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №2
- •Логічні та циклічні структури
- •Теоретичні відомості
- •1 Логічні структури
- •1.1 Команда розгалуження if (умовна команда)
- •1.2 Команда goto
- •1.3 Команда вибору (сase)
- •2 Циклічні структури
- •2.1 Команда циклу з параметром (for)
- •2.2 Команда циклу з передумовою (while)
- •2.3 Команда циклу з постумовою (repeat)
- •2.4 Порівняння роботи команд циклу while, repeat та for
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №3
- •Одновимірні масиви. Сортування
- •Мета роботи: ознайомитись з поняттям одновимірних масивів та діями над ними, навчитися застосовувати різні методи сортування для розв’язку математичних і технічних задач.
- •Теоретичні відомості
- •1 Одновимірні масиви
- •1.1 Додавання елементів масиву
- •1.2 Лічильник
- •1.3 Екстремуми
- •2 Методи сортування
- •2.1 Метод лінійного сортування
- •2.2 Сортування методом «бульбашки»
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №4
- •Багатовимірні масиви
- •Мета роботи: вивчити технологію роботи з багатовимірними масивами.
- •Теоретичні відомості
- •1 Опис багатовимірних масивів
- •2 Доступ до елементів масивів
- •3 Масиви ідентичного типу
- •4 Головна та побічна діагоналі
- •6 Ввід матриці
- •7 Виведення матриці
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №5
- •Підпрограми
- •Мета роботи: ознайомитись з правилами використання підпрограм, вивчити відмінності між процедурами та функціями.
- •Теоретичні відомості
- •1 Процедури та функції
- •1.1 Опис процедури
- •1.2 Опис функції
- •1.3 Формальні та фактичні параметри
- •1.3.1 Передача параметрів у підпрограмах
- •1.3.2 Виклик підпрограм
- •1.4 Глобальні та локальні змінні
- •1.5 Основні відмінності між функціями і процедурами
- •2 Рекурсивні функції
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №6
- •Символьні та рядкові змінні
- •Мета роботи: ознайомитись з прийомами роботи із символьними та рядковими змінними.
- •Теоретичні відомості
- •1 Символьні змінні
- •2 Множини
- •3 Рядкові змінні
- •3.1 Оголошення рядкових змінних
- •3.2 Доступ до окремих елементів рядка
- •3.3 Зміна поточної довжини рядка
- •3.4 Злиття рядків
- •3.5 Порівняння рядків
- •3.6 Порожній рядок
- •3.7 Рядки і символи
- •3.8 Масиви символів і рядка
- •3.9 Стандартні підпрограми для обробки рядків.
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №7
- •Записи. Записи з варіантами
- •Мета роботи: навчитись створювати прості бази даних за допомогою записів та записів з варіантами.
- •Теоретичні відомості
- •1 Записи
- •2 Записи з варіантами.
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №8
- •Файли: текстові, типізовані, нетипізовані
- •Мета роботи: ознайомитись з випадками використання файлів, типами файлів та методами обробки елементів файлів.
- •Теоретичні відомості
- •1 Текстові файли
- •2 Типізовані файли. Мітки
- •3 Нетипізовані файли
- •Приклад 4:
- •Приклад 5:
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №9
- •Мета роботи: вивчити структуру та особливості роботи з модулями в Turbo Pascal.
- •Теоретичні відомості
- •1 Структура модуля
- •1.1 Заголовок модуля
- •1.2 Інтерфейс модуля
- •1.3 Виконавча частина модуля
- •1.4 Розділ ініціалізації.
- •2 Етапи розробки модуля
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №10
- •Графіка
- •Мета роботи: ознайомитись з принципами побудови графіків функцій та інших графічних об’єктів за допомогою засобів TurboPascal.
- •Теоретичні відомості
- •1 Основні процедури і функції модуля Graph
- •2 Робота із зображеннями.
- •3 Побудова і масштабування графіків
- •Індивідуальні завдання
- •Контрольні питання
- •1 Дані динамічної структури
- •2 Вказівник
- •3 Списки
- •4 Стек. Черга
- •4.1 Алгоритм побудови стека
- •4.2 Алгоритм побудови черги
- •Індивідуальні завдання
- •Контрольні питання
- •Практична робота №12
- •Об’єктно-орієнтоване програмування
- •Мета роботи: засвоїти матеріал щодо можливостей TurboPascal при створенні об’єктів.
- •Теоретичні відомості
- •1 Поняття «об'єкт»
- •2 Спадкування
- •Індивідуальні завдання
- •Контрольні питання
- •Список літератури
- •Зразок оформлення результатів виконання практичного завдання
2 Спадкування
Найважливішим елементом об'єктно-орієнтованого стилю є успадкування. Якщо пригадати вже приклад, що наводився, з телевізором, то спадковість можна проілюструвати, розглянувши новий «об'єкт» – відеодвійку, яка успадковує від телевізора всі його властивості, але в ній також є і нові. Також успадковуються і методи (хоча, деякі з них змінюються: при включенні, наприклад, треба активувати не тільки телевізор, але і плеєр). Для відеодвійки характерні і свої власні методи.
Приклад класу CWindow можна розширити, створивши новий клас CWindowText, який відповідатиме вікну з текстом, що складається рівно з одного рядка. В цьому випадку треба буде змінити методи. Ситуацію введення нового методу, який матиме ту ж назву, що і успадкований називають перевизначенням.
Опис нового об'єкту:
type CWindowText=object(CWindow);
str:string;
procedure Init(x,y,lenx:integer, str:string);
procedure Show;
end;
procedure CWindowText.Init (x,y,lenx:integer, str:string);
begin
CWindow.Init(x,y,lenx,3);
Self.str:=str;
end;
procedure CWindowText.Show;
begin
CWindow.Show;
gotoxy(x+1,y+1);
write(str);
end;
Успадкування відображається в тексті програми вказівкою в дужках батьківського об'єкту після слова object. При цьому методи батьківського об'єкту можна викликати, вказуючи явно ім'я об'єкту, якому належить метод.
В середині опису полів один раз можна використовувати слово private, яке розділятиме поля на два типи. До полів, описаних вище за слова private, можна звертатися з будь-якого місця програми, а нижче – тільки з поточного модуля (такі поля називають прихованими).
При описі об'єктів намагаються якомога більше полів зробити прихованими. Це підкреслює самостійність об'єкту, робота з яким відбувається тільки за допомогою неприхованих полів і методів. Навіть просте присвоєння полю значення часто роблять за допомогою методу. Адже, в майбутньому в доповненні до цього присвоєння можуть використовуватися інші операції.
Індивідуальні завдання
Варіанти.
Побудувати систему класів для опису пласких геометричних фігур: кола, квадрата, прямокутника. Передбачити методи для створення об'єктів, переміщення на площині, зміни розмірів і повороту на заданий кут.
Побудувати опис класу, що містить інформацію про поштову адресу організації. Передбачити можливість роздільної зміни складових частин адреси, створення і знищення об'єктів цього класу.
Скласти опис класу для представлення комплексних чисел з можливістю завдання дійсної і уявної частин як числами типу double, так і цілими числами. Забезпечити виконання операцій додавання, віднімання та множення комплексних чисел.
Скласти опис класу для роботи з ланцюговими списками рядків (рядки довільної довжини) з операціями включення в список, видалення із списку елемента із заданим значенням даного, видалення всього списку або кінця списку, починаючи з заданого елемента.
Скласти опис класу для об'єктів-векторів, що задаються координатами кінців в тривимірному просторі. Забезпечити операції додавання і віднімання векторів з отриманням нового вектора (суми або різниці), обчислення скалярного добутку двох векторів, довжини вектора, косинуса кута між векторами.
Скласти опис класу прямокутників зі сторонами, паралельними осям координат. Передбачити можливість переміщення прямокутників на площині, зміни розмірів, побудови найменшого прямокутника, що містить два заданих прямокутника, і прямокутника, що є спільною частиною (перетином) двох прямокутників.
Скласти опис класу для визначення одновимірних масивів цілих чисел (векторів). Передбачити можливість звернення до окремого елементу масиву з контролем виходу за межі індексів, можливість завдання довільних границь індексів при створенні об'єкта і виконання операцій поелементного додавання і віднімання масивів з однаковими границями індексів, множення і ділення всіх елементів масиву на скаляр, друку (виведення на екран) елементів масиву за індексами і всього масиву.
Скласти опис класу для визначення одновимірних масивів рядків фіксованої довжини. Передбачити можливість звернення до окремих рядків масиву за індексами, контроль виходу за границі індексів, виконання операцій поелементного зчеплення двох масивів з утворенням нового масиву, злиття двох масивів з виключенням елементів, що повторюються, друк (вивід на екран) елементів масиву і всього масиву.
Скласти опис класу поліномів від однієї змінної, що задаються ступенем поліному і масивом коефіцієнтів. Передбачити методи для обчислення значення полінома для заданого аргументу, операції додавання, віднімання і множення поліномів з отриманням нового об'єкта-полінома, друк (вивід на екран) опису полінома.
Скласти опис класу одновимірних масивів рядків, кожен рядок яких задається довжиною і вказівником на виділену для нього пам'ять. Передбачити можливість звернення до окремих рядків масиву за індексами, контроль виходу за границі індексів, виконання операцій поелементного зчеплення двох масивів з утворенням нового масиву, злиття двох масивів з виключенням елементів, що повторюються, друк (вивід на екран) елементів масиву і всього масиву.
Скласти опис об'єктного типу TMatr, що забезпечує розміщення матриці довільного розміру з можливістю зміни числа рядків і стовпців, виведення на екран підматриці будь-якого розміру і всієї матриці.
Спроектувати просте меню в одному рядку екрану. Меню забезпечує перебір пунктів в результаті натискання на клавішу пробіл, дозволяє зафіксувати вибір натисканням на клавішу Enter або відмовитися від вибору натисненням на клавішу Esc. Після вибору одного з пунктів в програму повертається деяке значення, пов'язане з вибраним пунктом, наприклад символ. При відмові від вибору в програму повертається # 27.
Перед початком роботи меню йому треба передати назви пунктів і символи, які повертаються (ними можуть бути перші літери пунктів або якісь спеціальні символи). Все це можна зробити у формі рядка виду:
«Перше Друге Третє»
або
«Перше (а) Друге (b) Третє (с)»
(тут за назвою пункту слідує в дужках символ, що повертається).
Стан меню характеризується координатами меню на екрані, номером зазначеного пункту, загальною кількістю пунктів, переліком назв пунктів і символів, що повертаються (у другому варіанті надання).
Методами об'єкта є:
Init – заповнює поле назв пунктів, підраховує кількість пунктів, робить обраним перший пункт;
Select – дозволяє вибрати пункт меню і повертає символ вибраного пункту, при відмові від вибору повертає # 27;
Draw – малює меню, виділяючи обраний пункт кольором;
LeftBoard – повертає початок назви даного пункту;
Len – повертає довжину назви пункту;
WhatSel – повертає символ вибраного пункту.
Створити новий об'єкт TNeatMenu, що наслідує TMenu з варіанту № 12, який, на відміну від свого предка, буде відновлювати вигляд екрану. Для цього потрібно додати нове поле Store, де буде зберігатися колишній екран під час дії меню, перекрити метод Init і додати метод Done, який відновлює стан екрану.
Створити меню на основі варіанту № 12, яке зображує себе у формі стовпчика. Для цього раціонально скористатися віртуальними методами. Достатньо змінити метод Draw об'єкта TNeatMenu і оголосити однойменні методи віртуальними.
Користуючись завданням варіанту № 12, розмістити об'єкти в динамічній пам'яті, для цього достатньо описати вказівники на них.
Користуючись завданням варіанту № 12, побудувати складне ієрархічне меню: пробіл буде відкривати головне меню, послідовне натискання на клавіші Enter і пробіл буде розгортати підсвічений пункт у підменю або, якщо пункт знаходиться на нижньому рівні, клавіша Enter буде згортати підменю. Натискання на клавішу Esc закінчує роботу програми.
Користуючись завданням варіанту № 12, побудувати ієрархічне меню: пробіл буде відкривати головне меню, натискання на клавішу Enter буде розгортати підсвічений пункт в меню або, якщо пункт знаходиться на самому нижньому рівні, клавіша Enter згортає підменю. Натискання на клавішу Esc закінчує роботу програми. Нижній рівень – вертикальний.
Скласти програму, що працює зі зв'язаними списками. Слід розглядати зв'язаний список як об'єкт, що містить зв'язаний список даних і операцій (методів), які можна з ними виконувати. Зв'язаний список даних складається з вказівників на початок («голову») і кінець («хвіст») зв'язаного списку. Кожен елемент зв'язаного списку є реалізацією окремого об'єкта. Можливості, необхідні для використання зв'язаного списку, надають наступні операції:
створення зв'язаного списку (виділення для нього пам'яті);
знищення зв'язаного списку (звільнення пам'яті, яка використовувалась);
ініціалізація зв'язаного списку;
деініціалізація зв'язаного списку;
вставка елемента в середину списку перед існуючим елементом;
приєднання елемента до кінця зв'язаного списку;
видалення елемента із зв'язаного списку;
повернення першого елемента зв'язаного списку;
повернення останнього елемента зв'язаного списку.
Необхідно мати на увазі, що створення і ініціалізація, а також знищення і деініціалізація методів – це не синоніми. При створенні і знищенні методи create та destroy виділяють і звільняють пам'ять для об'єкта (пов'язаного списку), а методи ініціалізації і деініціалізації initialize і deinitialize тільки ініціалізували і деініціалізували раніше виділені екземпляри об'єкта. Можна побачити, як об'єкт зв'язаного списку успадковується об'єктами стека або черги, оскільки чергу і стек можна реалізувати як зв'язаний список з обмеженим числом операцій. Наприклад, можна реалізувати чергу у вигляді зв'язаного списку, в якому елементи можуть додаватися в кінці і вилучатись з початку. Якщо таким чином реалізовувати чергу, то потрібно заборонити успадковані методи зв'язаного списку, які для черги неприпустимі (наприклад, вставку в середину списку).
Визначити об'єкт TFish – акваріумна рибка. Рибка має координати, швидкість, розмір, колір, напрямок руху. Методами об'єкта є:
Init – встановлює значення полів об'єкта і малює рибу на екрані методом Draw.
Draw – малює рибу у вигляді куточка з вістрям в точці Coord і спрямованого вістрям по ходу руху риби.
Look – перевіряє кілька точок на лінії руху риби. Якщо хоч одна з них відрізняється за кольором від води, повертаються її колір і відстань до риби.
Run – переміщує рибу в поточному напрямі на відстань, що залежить від поточної швидкості риби. Іноді випадковим чином міняє напрям руху риби. Якщо риба бачить перешкоду, напрямок руху змінюється, поки перешкода не зникне з поля зору риби.
Визначити об'єкт TAquarium, який є місцем проживання риб (див. варіант № 19). Він є областю екрану, яка наповнена водою. Риби живуть в акваріумі, тому екземпляри об'єкта TFish повинні бути полями об'єкта TAquarium.
Методи:
Init – включає графічний режим, заповнює акваріум водою, камінням і рибами.
Run – організовує нескінченний цикл, в якому виконується метод Run всіх мешканців акваріума.
Done – вимикає графічний режим.
Визначити два об'єкти TPike і TKаrр, які успадковують об'єкт Tfish (див. задачу 19). Обидва вони відрізняються від TFish тим, що по-різному зображують себе на екрані: TPike – у вигляді зеленої стрілки, а ТКаrр – у вигляді червоного трикутника. Необхідно скористатися віртуальними методами. Для цього треба повернутися до визначення TFish і відкоригувати його, зробивши Draw порожнім і віртуальним.
Об'єднати коропів і щук (див. варіант № 20) у дві зграї. Зграя – це зв'язаний список риб в динамічній пам'яті. Для зв'язку необхідно додати в об'єкти TPike і ТКаrр поле Next – вказівник на наступну рибу в зграї. Необхідно зробіть акваріум власником не окремих риб, а двох зграй і дозволити користувачеві поповнювати зграї, вводячи риб з клавіатури.
Дозволити щукам (див. варіант № 20) проявити свій поганий характер і поїдати коропів, як тільки вони їх побачать. Тут виникне проблема – встановити, якого саме коропа бачить щука. Вона вирішується шляхом перегляду всієї зграї коропів і пошуку того, чиї координати близькі до координат даної щуки. Знайдений короп видаляється зі зграї.
Реалізувати у вигляді класу набір методів для виконання наступних операцій над комплексними числами: додавання; віднімання; множення; ділення; визначення модуля комплексного числа; піднесення комплексного числа до ступеня n (n – натуральне число).
Комплексне число представити наступним чином:
Type Complex = Record
R: Real;
M: Real;
End;
Використовуючи цей клас, вирішити наступне завдання. Задано масив А – масив комплексних чисел. Отримати масив С, елементами якого будуть модулі сум розміщених поруч комплексних чисел.
Реалізувати у вигляді класу набір методів для виконання наступних операцій над комплексними числами: додавання; віднімання; множення; ділення; визначення модуля комплексного числа; піднесення комплексного числа до ступеня n (n – натуральне число).
Комплексне число представити наступним чином:
Type Complex = Record
R: Real;
M: Real;
End;
Використовуючи цей клас, вирішити наступне завдання. Задано масив А [М] – масив комплексних чисел. Отримати матрицю B[N×M], кожен рядок якої виходить зведенням у ступінь, що дорівнює номеру цього рядка заданого масиву А.
Реалізувати у вигляді класу набір методів для виконання наступних операцій над звичайними дробами виду (Р – ціле, Q – натуральне): додавання; віднімання; множення; ділення; скорочення дробу; піднесення дробу до ступеня n (n – натуральне число); функцій, що реалізують операції відношення (дорівнює, не дорівнює, більше або дорівнює, менше або дорівнює, більше, менше).
Дріб представити наступним чином:
Type Frac = Record
Р: Integer;
Q: 1 .. 32767;
End;
Використовуючи цей клас, вирішити наступне завдання. Задано масив А – масив звичайних дробів. Знайти суму всіх дробів, результат представити у вигляді нескоротного дробу. Обчислити середнє арифметичне всіх дробів, результат представити у вигляді нескоротного дробу.
Реалізувати у вигляді класу набір методів для виконання наступних операцій над звичайними дробами виду (Р – ціле, Q – натуральне): додавання; віднімання; множення; ділення; скорочення дробу; піднесення дробу до ступеня n (n – натуральне число); функцій, що реалізують операції відношення (дорівнює, не дорівнює, більше або дорівнює, менше або дорівнює, більше, менше).
Дріб представити наступним чином:
Type Frac = Record
Р: Integer;
Q: 1 .. 32767;
End;
Використовуючи цей клас, вирішити наступне завдання. Задано масив А – масив звичайних дробів. Відсортувати його за зростанням.
Реалізувати у вигляді класу набір методів для виконання наступних операцій з квадратними матрицями: додавання двох матриць; множення однієї матриці на іншу; знаходження транспонованої матриці; обчислення визначника матриці.
Матрицю описати наступним чином:
const NMax = 10;
type Matrica = Array [l .. NMax,1 .. NMax] оf Real;
Використовуючи цей клас, вирішити наступне завдання. Розв’язати систему лінійних рівнянь N-го порядку (2 ≤ N ≤ 10) методом Крамера.
В правильній шестикутній призмі провести перетин, що проходить через одну із сторін нижньої основи і протилежну їй сторону верхньої основи. При розв’язанні задачі використати принципи ООП.
У прямокутному паралелепіпеді побудувати перетин, що проходить через одну із сторін нижньої основи й одну з вершин верхньої. При розв’язанні задачі використати принципи ООП.
У прямокутному паралелепіпеді побудувати перетин, що проходить через одне з його ребер і точку перетину діагоналей протилежної цьому ребру грані. При розв’язанні задачі використати принципи ООП.
В правильній шестикутній піраміді побудувати перетин, що проходить через вершину і велику діагональ основи. При розв’язанні задачі використати принципи ООП.
Скласти програму для гри в шашки. Шашка кожного нового кольору виступає в якості окремого об'єкта. Характеристики шашки – колір і позиція на дошці. Методи – переміщення. Потрібно не забути про такі об'єкти, як «дамки».
Скласти програму для гри в доміно. В якості об'єктів виступають кістки доміно. Методи – способи виставлення тієї чи іншої кістки.
Скласти програму для гри в шахи. Кожна унікальна шахова фігура виступає в якості окремого об'єкта. Вона характеризується кольором, положенням на дошці, способом переміщення. Передбачити можливість перетворення пішака на ферзя.