Turbo Pascal

Оригінал: http://staff.um.edu.mt/jskl1/turbo.html

Вежі Ханої

Помилка виконання 200

Програми Pascal

Установка

Об’єктно-орієнтоване програмування

Проблеми з графікою?

Студентський куточок

Блейз Pascal 

Безкоштовний перекладач Lisp


Вежі Ханої

Гра у Вежі Ханої може бути використана для демонстрації сили динамічного програмування. Детальніше дивіться документ на моїй сторінці, що містить кількість різних рішень для гри. Щоб перевірити формулу, я написав програми в Turbo Pascal 7, які генерують рішення в текстовому файлі, перевірте, чи всі рішення різні, і зімітуйте їх, щоб перевірити, чи правильні вони. Якщо ви хочете, ви можете завантажити ці програми. Все повинно бути зрозумілим з коментарів у вихідних файлах та вищезазначеного документа.

Повернутися до заголовка 

Вихід на головну сторінку


Помилка виконання 200

Програми, що використовують блок CRT, можуть генерувати це повідомлення про помилку під час роботи на дуже швидких машинах (наприклад, Pentium 300). Причиною цієї помилки є цикл синхронізації, який відбувається як частина ініціалізації блоку CRT. Цей цикл синхронізації підраховує, скільки тактів відбувається в циклі, а потім це число ділиться на 55. Результатом цього поділу є надто велике значення, щоб вписатись у ціле число. Повідомлення про помилку “Розділити на 0” – це помилка загальної інформації, яка відображається при виникненні цього виходу за верхню межу.

Borland (зараз називається INPRISE) не пропонує жодних патчів для вирішення цієї проблеми. На щастя, є програмісти, які їх створюють. Я завантажив один, написаний Деннісом Пасмором, і він прекрасно працює. Патч містить програму, яка змінює вихідні файли TURBO.TPL (і TPP.TPL для захищеної цілі) з \BP\BIN. У випадку Turbo Pascal змінюється лише TURBO.TPL з \TP\BIN. Денніс дав мені дозвіл на його використання, тому ви можете завантажити два оновлені файли Pascal New TPP.TPL & TURBO.TPL.

Тож якщо у вас є та сама проблема, завантажте нові файли та дотримуйтесь цих інструкцій:

  • Створіть деякий каталог, скопіюйте NEWTPLS.EXE в цей каталог і запустіть його для розширення.
  • Якщо у вас є Turbo Pascal, зробіть резервну копію TURBO.TPL (він знаходиться в \TP\BIN) і скопіюйте новий TURBO.TPL в \TP\BIN
  • Якщо у вас є Borland Pascal, зробіть резервну копію TURBO.TPL і TPP.TPL (вони знаходяться в \BP\BIN) і скопіюйте нові TURBO.TPL і TPP.TPL в \BP\BIN

Повернутися до заголовка 

Вихід на головну сторінку


Програми Pascal

Turbo Pascal – це не перший вибір системних програмістів, тому що в C і C ++ можна писати в основному більш швидкі та короткі програми. Проте різниця не велика (в основному незначна), тому для більшості з нас насправді немає необхідності залишати зручне програмування Pascal. Компілятор Turbo Pascal надзвичайно швидкий (на моєму старому 486 Dx 33 МГц я будую (перекомпілюю) і зв’язую програму, що складається приблизно з 12000 рядків за 20 секунд). Чітка структура програм Pascal без побічних ефектів та її прямий доступ до всіх комп’ютерних ресурсів роблять її ідеальним інструментом для всього, починаючи від впровадження до програмування, до розширеного системного програмування, де критичні часові розділи можуть бути виражені інструкціями з мовної збірки.

Щоб зробити це ще корисніше, потрібно додати управління мишею та деякі часто використовувані підпрограми, такі як увімкнення/вимкнення текстового курсору, малювання полів у текстовому режимі, перетворення рядків у верхній/нижній регістр тощо.

Якщо у вас є Turbo Pascal 7 Ви можете завантажити ці файли:

exdbase.zip – це простий додаток до бази даних. Дізнайтеся, як працювати з набраними файлами та основним управлінням файлами.

showcloc.zip – містить процедуру, яка відображає час на текстовому екрані під час запуску програми. Це проста багатозадачність (яка, як правило, не підтримується в середовищі MS DOS). Програма показує, як взяти контроль над тимчасовим перериванням і використовувати його для оновлення часу на екрані.

mouse.zip – управління мишкою.

others.zip – різні корисні засоби, такі як загальний кадр для графіки Turbo Pascal, деякі загальні процедури, як перетворення рядків у верхній/нижній регістр, рекурсія (вежі Ханої) тощо.

Приклади datastru.zip для структур даних (обчислення A рівня).

search.zip – приклади пошуку (обчислення A-рівня).

sorting.zip – приклади сортування (обчислення A рівня).

Зауважте, що головною метою при написанні всіх програм була простота та читабельність, а не швидкість та економія пам’яті.

Повернутися до заголовка

Вихід на головну сторінку


Установка

Всі програми Turbo Pascal, які ви завантажуєте з цієї сторінки, – це заархівовані каталоги. Для їх розширення вам потрібна программа pkunzip.exe. Він доступний у більшості безкоштовних бібліотек – спробуйте, наприклад, Гарбо. Щоб розгорнути, скопіюйте завантажений файл (наприклад, файл mouse.zip) та файл pkunzip.exe в якийсь каталог. Тоді у вас є два варіанти їх розширення:

pkunzip -d mouse

створює підкаталог (у цьому прикладі MOUSE) у вашому каталозі з усіма файлами.

pkunzip mouse

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

Не соромтеся зв’язатися зі мною у разі будь-яких проблем.

Повернутися до заголовка 

Вихід на головну сторінку


Об’єктно-орієнтоване програмування

Обчислення A-рівня та подібні навчальні програми базуються на традиційному структурованому програмуванні. Деякі (наприклад, Міжнародна програма бакалаврату та розширеного розміщення) містять вступ до об’єктно-орієнтованого програмування (ООП), що є альтернативою традиційним методам. Цей текст призначений як перший простий вступ до основних принципів ООП для студентів Обчислення A-рівня та подібних курсів.

Ось найбільш поширені функції OOП:

1. Алгоритм або динаміка системи виражається в умовах об’єктів (дійових осіб), які існують паралельно і взаємодіють між собою. Кожен об’єкт представлений:

 – атрибутами (їх також називають внутрішніми атрибутами або атрибутами значень)

 – методами (також називаються атрибутами дій або процедур).

Об’єкти можуть взаємодіяти такими способами:

 – прямий доступ до атрибутів

– взаємний виклик методів.

Простіше кажучи: об’єкт = дані + команди, що називається інкапсуляція. Дуже часто дані об’єкта або його частина приховані, і до них можна отримати доступ та зміни лише за допомогою (чітко визначених) методів. Ця концепція називається Приховування інформації.

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

Примітка: у Turbo Pascal (а також у деяких інших мовах OOП) класи називають “об’єктами”. На щастя це було виправлено в Delphi, який використовує правильний термін “клас” (до речі, цей термін був вперше використаний у цьому контексті мовою Simula 30 років тому).

3. Об’єкти можна класифікувати ієрархічно за допомогою так званого успадкування (це, мабуть, найважливіший принцип ООП, що підтримує створення об’єктних бібліотек на основі повторного використання коду на нижчих рівнях ієрархії). Дуже часто вводиться термін підклас. Підклас Y класу X успадковує всі атрибути та методи з класу X. Його оголошення може додавати будь-яку кількість додаткових атрибутів та методів. Підклас може бути використаний як батьківський клас інших підкласів тощо. Підклас може трактуватися як більш детальне знання, ніж те, яке визначено батьківським класом. Отже, батьківський клас представляє загальні знання, які можуть бути додатково спеціалізовані оголошеннями підкласів у будь-якій кількості кроків. Зазвичай можна оголосити опорні змінні, які можуть посилатися на екземпляр певного класу та на екземпляри всіх його підкласів. Можливо, бажано, щоб певні методи поводилися по-різному відповідно до поточного екземпляра об’єкта, на який посилається, що може динамічно змінюватися під час виконання програми. Ця концепція, що називалася поліморфізм підтримується механізмом, який називається пізнім зв’язуванням, а залучені методи називаються віртуальними методами, які можуть змінюватися на кожному рівні ієрархії.

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

oopwint.zip – Windows у текстовому режимі.

oopwing.zip – Windows у графіці.

Повернутися до заголовка

Вихід на головну сторінку


Проблеми з графікою?

Занадто часто я чув таке запитання: “Моя програма з гарною графікою працює в школі, але на іншому комп’ютері ні. Що не так?”.

Є два випадки:

I. Спочатку припустимо, що на іншому комп’ютері встановлено Turbo Pascal 7 (важлива версія – якщо у вас старі програми, перекомпілюйте їх у середовище TP7). Тут сожуть бути три моменти, що пішли не так:

1. Пошкоджені файли BGI та/або CHR.

2. Неправильний параметр каталогу процедури InitGraph. Зауважте, що Turbo Pascal може бути встановлений в інших, не в каталог\TP-каталог (а наприклад, в\TP7), і врахуйте також різницю між C: \TP і C:TP.

3. Не вистачає пам’яті для завантаження файлів BGI та CHR – переконайтесь, що ємність купи при ініціалізації графіки та завантаженні файлу векторного шрифту достатня.

II. На іншому комп’ютері немає Turbo Pascal. Існує два способи зробити файл EXE з графікою:

1. Перенесіть файл EXE разом з файлом BGI та файлами CHR та переконайтесь, що вони знаходяться у відповідному каталозі – тому ж, що використовується у виклику InitGraph.

2. Перетворіть файл BGI та файли CHR у формат OBJ та зв’яжіть їх зі своєю програмою. Ваш файл EXE буде працювати на будь-якому ПК із графічною картою, сумісною з вашим файлом BGI (практично на всіх ПК у випадку файлу EGAVGA.BGI). Ви можете завантажити файл linkgr.zip, який містить блок із процедурами, які завантажують та ініціалізують графіку разом із усіма необхідними стандартними файлами OBJ, які Вам знадобляться.

Не соромтеся зв’язатися зі мною, якщо вищезазначене все-таки не допоможе.

Повернутися до заголовка

Вихід на головну сторінку


Студентський куточок

Це місце зарезервоване для студентів, які писали цікаві програми та які бажають поділитися своїм досвідом з іншими. Усі програми, включені сюди, – це безкоштовний посуд. Завантажте їх, щоб дізнатися деякі менш тривіальні програми Turbo Pascal. Якщо у вас є цікаві програми, ви готові запропонувати їх іншим, зв’яжіться з автором сторінки. За Ваш внесок будуть дуже вдячні. Так ось студенти, які до цього часу внесли свій внесок у цей “програмний банк”:

Мій друг Тамер Факурі написав підрозділ, який демонструє використання об’єктно-орієнтованого програмування при вирішенні проблем управління растровими зображеннями. Особливості включають у себе наступне:Підтримка стислих/нестиснених растрових зображень WindowsПідтримка 4,8 та 24-бітових растрових зображень WindowsПідтримка вилучення палітри растрових зображеньДифузія помилокОбмеження (незабаром будуть видалені):Розмір зображення повинен бути менше 65 КбЗавантажте файл bitmaps.zip, який містить вихідний файл блоку.
Свен Нейман (KILLROY) – геніальний програміст, зацікавлений особливо у дуже швидкій графіці та анімації (для цього він написав власні підрозділи асемблерною мовою). Тут ви можете завантажити декілька програм, які демонструють приємну анімацію та керування клавіатурою у текстовому режимі (hanoi.pas) та вражаючу швидку тривимірну графічну анімацію на основі прямого доступу до відеопам’яті. (Під час компіляції файлів PAS перевірка діапазону перемикання.) Для отримання додаткової інформації не соромтеся звернутися до Sven.
Під час лабораторних я зібрав кілька програм із приємною графікою. Вони залишаються (деякі без відступів) так, як вони були написані. Під час компіляції залиште діапазон та перевірку переливу. Я не знаю (повних) імен авторів – тому може статися, що ви знайдете тут свою програму. У цьому випадку зв’яжіться зі мною, щоб додати інформацію про автора.

Повернутися до заголовка

Вихід на головну сторінку


Безкоштовний перекладач Lisp

Ендрю Данкан (зараз студент Мальтійського університету) розробив Lisp-інтерпретатора у Turbo Pascal, який називав Quicklisp в якості свого проекту на рівні А, і готовий зробити це безкоштовно. Він вважає – і він правий – що чим більше користувачів, тим швидше виявляються помилки.

Quicklisp – простий перекладач Lisp, який ідеально підходить для вивчення мови Lisp, основ AI, символічних обчислень та функціонального програмування загалом. Наприклад, це може бути підходящим інструментом для викладачів A рівня. До його особливостей належать:

  • Простий у користуванні інтерфейс GUI
  • Управління файлами
  • Онлайн-допомога
  • Підручники та зразкові програми
  • Прості засоби відстеження для налагодження
  • Поруч із стандартною підтримкою Lisp

Включено повний вихідний код з коментарями в Pascal, який буде компілюватися в TP7 (реальний режим) або BP7 (DPMI – дозволяє більші програми). Надішліть опис будь-яких помилок, знайдених на [email protected], щоб їх можна було виправити в наступній версії. Звичайно, зв’яжіться з Дунканом, якщо у вас є якісь проблеми та/або питання.

Ви можете завантажити Quicklisp зараз.

Повернутися до заголовка

Вихід на головну сторінку