Псевдографіку

Псевдографіка являє собою можливість зображення звичайних текстових символів і символів особливого виду в довільному місці екрану ВТУ Як мінімум, програма на Бейсике повинна мати можливість зображати всі символи з набору ASCII, а також керувати переміщеннями курсора, але найкраще, якщо крім цього можна зображати деякі символи особливого виду або окремі точки

Подібні можливості псевдографіки надаються багатьма системами за допомогою оператора PRINT При цьому виявляється можливим програмувати функції управління курсором і зображати будь-який символ в будь-якої заданої точці екрану Персональна ЕОМ PET фірми Commodore має дуже хороший набір графічних символів, так що при роботі на ній описаний метод дозволяє домагатися цілком задовільних зображень

Інші системи прагнуть надати більш багаті графічні можливості і дозволяють висвічувати або гасити в довільному місці екрану невеликі області, або точки, або невеликі відрізки прямих ліній, а також зображувати їх у різному кольорі У таких системах передбачаються спеціальні оператори, наприклад PLOT (креслити)

661 ЗАСТОСУВАННЯ ОПЕРАТОРА PRINT

Системи, в яких графічні можливості забезпечуються застосуванням звичайної оператора PRINT (наприклад, персональна ЕОМ PET), дозволяють з його допомогою видавати будь-які символи, у тому числі і керуючі, в результаті чого можна отримати всі ті ефекти, які досягаються натисканнями клавіш на клавіатурі Таким чином, за допомогою оператора PRINT можна домогтися стирання екрану, переміщення курсору в початкову позицію, вліво, вправо, вгору і вниз, вставки і видалення символів Зазвичай для цих цілей використовується функція CHRS (), яка здатна повертати символи з кодом, відповідним натискання будь клавіші Якщо Ваша система забезпечує подібні можливості, то в результаті виконання програми

на екрані повинні відбутися всі види дивних дій, оскільки описана вище програма видає весь репертуар дій, що викликаються при натисканні клавіш Кожна система має свої коди для багатьох керуючих дій, так що для ілюстрацій цих дій виберемо одну із систем, а саме PET У табл 69 зібрані всі види керуючих дій для PET Хоча описи цих дій відносяться до системи PET, тим Проте вони дають загальне уявлення про роботу подібних систем Не забудьте, що в системах, де псевдографіка орієнтована на оператор PRINT, номер поточної позиції курсора після зображення чергового символу збільшується на 1 (або більше число, а залежно від роздільника коми чи крапки з комою) Для проведення звичайним способом (зліва направо) горизонтальної лінії можна використовувати оператори

10   FOR I=1 TO 10

20      PRINT&quot-"

30   NEXT I

Якщо спробувати провести вертикальну лінію за допомогою операторів

10 FOR I = 1 ТО 10

20     PRINT &quotI"CHR$ (17)

30   NEXT I

то в результаті вийде зображення, більш схоже на похилу лінію:

Таблиця 69 Функции управління екраном в персональній ЕОМ PET фірми Commodore

Тому в такій ситуації завжди треба здійснювати зсув курсору вліво оператори

10   FOR I=1 TO 10

20     PRINT &quot1"CHR$(157)CHR$(17)

30   NEXT I

зображують необхідну вертикальну лінію Так як оператор PRINT виводить черговий символ в тому рядку і в тій позиції, де в даний час знаходиться курсор, то таким способом можна пересуватися по позиціях символів При цьому задати нову адресу на екрані не можна і для переміщення від однієї позиції до іншої треба використовувати цикл зразок

100 FOR I = 1 ТО N: PRINT: NEXT I

який переміщує курсор на N рядків вниз, а також функцію TAB для переміщення курсору вздовж рядка Якщо ж потрібне переміщення вгору,

то треба або використовувати CHR $ (145), або перемістити курсор в початкову позицію (лівий верхній кут екрану) і опуститися вниз на М рядків:

200 PRINT CHR $ (19) : FOR I = 1 ТО М: PRINT: NEXT I Наступна програма намалює прямокутник зі сторонами К і L:

10 REM викреслювання прямокутнику на ПЕОМ PET

20 INPUT Введіть СТОРОНИ K І L; K, L

30 PRINT CHR $ (147): REM гасіння екрану

40 PRINT &quotL"

50 FOR I = 1 ТО К: PRINT -;: NEXT I

60 A $ = CHR $ (157) + CHR $ (17): REM КУРСОР ВЛІВО І ВНИЗ

70 PRINT &quotI"A$

80 FOR I = 1 ТО L: PRINT I; А $: NEXT I

90 A $ = CHR $ (157) + CHR $ (157): REM КУРСОР ВЛІВО І ВЛІВО

100 PRINT &quotL"A$

110 FOR I=1 TO K PRINT &quot-"A$: NEXT I

120 A $ = CHR $ (157) + CHR $ (148): REM КУРСОР ВЛІВО І ВГОРУ

130 PRINT &quotL"A$

140 FOR I=1 TO L: PRINT &quotI&quot A$ : NEXT I 150 END

Вона виглядає досить солідно і ілюструє негативні сторони занадто щільної упаковки операторів в кожному рядку Тут це було зроблено для того, щоб кожен рядок виконувала певну логічну функцію Рядок 40 зображує лівий верхній кут, рядок 50 верхню сторону прямокутника, рядок 70 перший верхній кут, а рядок 80 перших бічну сторону

Система PET має особливу властивість, завдяки якому функції управління курсором видно в рядках символів Наприклад, оператор

робить ті ж дії, що й оператор PRINT -; CHR $ (157) CHR $ (157)

оскільки символслужить поданням (тільки в межах рядка

символів) функції, відповідної натискання клавіші переміщення курсору вліво, що, зі свого боку, еквівалентно CHR $ (157) Безсумнівно, користувачі системи PET досить добре знайомі з цим властивістю, так як такі дивні символи несподівано виникають при спробах виправити помилку в рядку символів

Системи, в яких можливості оператора PRINT розширені, передбачають або варіант

PRINT AT рядок, стовпець список виведених даних,

де рядок і стовпчик числа або вирази, що визначають положення будь-якій позиції символу на екрані, або варіант

PRINT @ N, список виведених даних,

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

щий приклад складений для системи ZX81 фірми Sinclair, в якій використовується форма PRINT AT (друк в ..), і являє собою програму, яка зображує той же прямокутник, що й вище:

10 REM викреслювання прямокутнику на ПЕОМ SINCLAIR

20 INPUT Введіть сторону прямокутника К І L

З0 INPUT До

40   INPUT L

50   CLS

60 PRINT AT 21в СНR $ (135)

70   PRINT AT 2,11+KCHR$(4)

80 FOR I = 1 TO До

90   PRINT AT 2,18+1CHR$(131) 100   PRINT AT 3+L,10+I CHR$(3)

110   NEXT I

120   PRINT AT 3+L,ll+KCHR$(l)

130   PRINT AT 3+L,10CHR$(2)

140   FOR I=1 TO L

150   PRINT AT 2+I,ll+KCHR$(5) 160   PRINT AT 2+118CHR$(133)

170   NEXT I

180 REM поміститися Мігай ЗНАК В ЦЕНТРІ

190   LET X=2+K/2

200   LET Y=10+L/2

210   PRINT AT XY&quotOK&quot

220  GOSUB 260

230 PRINT AT ХY CHR $ (180) CHR $ (176)

240 GOSUB 260 250   GOTO 210

260 REM ПІДПРОГРАМА ДЛЯ ПАУЗИ

270 FOR I=1 TO 10

280 NEXT I

290 RETURN

300 END

Як верхня, так і нижня сторона прямокутника зображуються за допомогою одного і того ж циклу в рядках 80 .. 110 Аналогічно бічні сторони прямокутника зображуються за допомогою циклу в рядках 140 .. 170 нижні кути – за допомогою циклу з операторами в рядках 120 і 130 У центрі цього прямокутника, лівий кут якого знаходиться в стовпці 10 рядка 2, зображується що спалахує мітка Цей ефект досягається за допомогою інвертованих символів ОК (чорних літер на білому фоні), рівних CHR $ (180) і CHR $ (176) у системі Sinclair Підпрограма регулює частоту спалахування При акуратному виконанні можна домогтися відомого пожвавлення зображення

У разі якщо потрібно зображати або переміщати по екрану досить складні обєкти, треба використовувати будь зручний спосіб звернення до них Система із звичайним оператором PRINT (без AT або @) дозволяє одним рядком описати закінчений обєкт, наприклад обриси шахової фігури Для цього в рядок треба поміщати символи управління курсором за допомогою функції CHR $ () Таким способом створюються рядки, що визначають закінчені обєкти Для отримання зображення обєкта під час виконання програми досить помістити курсор в необхідну позицію і видати за допомогою оператора PRINT заздалегідь складену рядок По-

добние рядки можна сконструювати і для знищення зображення обєкта, так що переміщення обєкта реалізується за допомогою декількох операторів PRINT Системи з операторами PRINT AT відрізняються від систем, що мають тільки оператор PRINT, і багато в чому наближаються до систем з оператором PLOT Для визначення обєкта потрібно ряд команд PRINT AT, тому останні найкраще згрупувати у вигляді функції або підпрограми, що має кілька вхідних параметрів, задають положення обєкта

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

Деякі мікропроцесорні системи відображають екран ВТУ в певну область своїй памяті таким чином, що кожен байт памяті відповідає одній позиції символу на екрані ВТУ При зміні будь-якого з цих байтів памяті негайно змінюється відповідний символ на екрані Наприклад, екран персональної ЕОМ PET складається з 25 рядків по 40 стовпців, всього 1000 позицій символів, і відображається в область памяті з адресами від 32768 до 33 767 Перехід від номерів рядків і стовпців до адреси комірки памяті здійснюється за допомогою співвідношення

адреса памяті = 32 768 + (стовпець-1) +40 * (рядок-1)

Наведена нижче програма зобразить символ з кодом X в С-м стовпці R-й рядки:

10  INPUT C, R, X

20  POKE(32 768+C-1+40*(R-1)),X

Видача зображення на екран за допомогою Роке відбувається набагато швидше, ніж за допомогою PRINT, але користуватися цим треба обережно (Див коментар до опису команд рейок і Роке в підрозділ 651)

662 Викреслювання ЗОБРАЖЕНЬ

Засоби викреслювання зображень, передбачені в Бейсике, поки ще обмежені в порівнянні з тими, які надаються спеціалізованими пакетами машинної графіки, але мають подібні характеристики Викреслювання зображень забезпечується такими функціями, як PLOT, MOVE, DRAW, і подібними їм Ці функції маніпулюють кращими визначеннями, ніж ті, що доступні на символьному рівні, і дозволяють висвічувати або гасити на екрані елементи зображення символу або дуже маленькі частині екрана (точки) При цьому може бути доступний і вибір кольору зображення

В основу викреслювання зображення покладена концепція пера, що рухається над площиною і залишає на ній позначки Таким чином, якщо поточна позиція має декартові координати (X0, Y0), то в результаті виклику DRAW X1, Y1 перо переміститься в нову позицію (XI, Y1), залишивши слід

у вигляді відрізка прямої лінії Найбільш суттєві примітиви процесу викреслювання такі: (а) Поставити відмітку (точку) в заданій позиції

(Б) Перейти до позиції X, Y, не роблячи ніяких позначок

(В) Перейти до позиції X, Y, залишаючи слід у вигляді прямої лінії

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

Іншою альтернативою є представлення процесу створення зображення як зведення будівлі з цегли, що рівносильно тим же діям, які були описані для оператора PRINT в підрозділ 661 Відповідно до цього підходу діаграми розглядаються побудованими з ряду точок або символів, порядок зображення яких не є суттєвим Тут немає концепції викреслювання безперервної лінії або переміщення пера. У цьому випадку треба створювати підпрограми або функції для визначення графічних обєктів і використовувати їх так, як це було описано у згаданому підрозділі для оператора PRINT

Система ZX81 фірми Sinclair служить прикладом системи, що передбачає найпростіші засоби для викреслювання і дозволяє застосування обох описаних вище підходів Кожна позиція символу на екрані ВТУ розглядається як квадрат, який ділиться на 4 квадрата (рис 62),

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

PLOT X, Y і погашений за допомогою виклику

UNPLOT X, Y

Так як все мається 22 рядки по 32 шпальти, то можливі значення Y (знизу вгору) від 0 до 43, а X (зліва направо) від 0 до 63 Підпрограми, що реалізують переміщення до іншої позиції і зображення відрізка прямої, можуть бути отримані з базових операторів PLOT і UNPLOT 210

Система ВВС служить прикладом системи, що надає повний набір справжніх засобів викреслювання При роботі з нею можна вибирати будь-який з пяти наявних режимів графіки, що відрізняються за визначенням і колірній гамі Всі вони засновані на декартовій системі координат, у якої початок знаходиться в лівому нижньому кутку екрану, а розмір координатної площині складає 1280 одиниць масштабу по горизонталі (По Х-координаті) і 1024 одиниці по вертикалі (по Y-координаті) У табл 610 вказано призначення різних операторів і функцій Таблиця 610

Графічний оператор або функція

Дія

MODE N Встановлює один з восьми можливих режимів зображення даних на екрані (від N = 0 до N = 7), але графіка забезпечується тільки в режимах N = 0, 1, 2, 4, 5

VDU список значень

Забезпечує комплексні можливості управління графікою, кольором ділянок екрана, переміщенням курсору Наприклад, VDU 22, N еквівалентно MODE N

GCOL N, M Встановлює основний колір або колір фону графічного зображення і виробляє деякі дії При N = 0 значення М визначає колір зображення: М = 0-15 основний колір, М

= 128-143 колір фону

CLG Гасить графічне зображення на екрані, зафарбовує екран поточним кольором фону і переміщує курсор у вихідну позицію з координатами (0, 0)

PLOT К, X, Y Може виконувати різні дії в залежності від значення К: К = 0 переміщення на (X, Y) по відношенню до останньої точки К = 4 переміщення в позицію з координатами (X, Y) К = 1,2,3 переміщення на (X, Y) стосовно останньої

точці з зображенням відрізка заданого кольору К = 5,6,7 переміщення в позицію з координатами (X, Y) із зображенням відрізка заданого кольору

К = 16-23 зображення пунктирного відрізка К = 64-71 зображення точки К = 80-87 зображення трикутника з вершинами в точці (X, Y) і в двох останніх використаних точках

DRAW X, Y

MOVE X, Y

Діє як PLOT 5, X, Y Діє як PLOT 4, X, Y

Система ВВС передбачає три типи операторів: вибір режиму та інших параметрів за допомогою оператора MODE або більш складного оператора

VDU, вибір основних кольорів і ініціація екрана за допомогою операторів GCOL і CLG, а також повний набір засобів викреслювання, що надається оператором PLOT Оператори DRAW і

MOVE можна розглядати як окремі випадки оператора PLOT Наступні розширення оператора PLOT зможуть включати викреслювання кривих

В системі ВВС команди COLOUR і CLS еквівалентні GCOL і CLG, але діють тільки в текстовому режимі

Трикутник для ілюстрації застосування цих функцій викреслює наступна проста програма:

10 REM викреслювання ТРИКУТНИКА НА ПЕОМ ВВС

20 REM присвоювання ПОЧАТКОВИХ ЗНАЧЕНЬ

30 ANGLE = 2094395: REM 120 ГРАДУСІВ

40 CENTREX = 640: REM ЦЕНТР ТРИКУТНИКА

50 CENTREY=512

60 R = 400: REM РАДИУС описаного кола

70 REM ПОЧАТКОВІ УСТАНОВКИ для викреслювання

80 MODE 5

90 GCOL 0,129: REM ЧЕРВОНИЙ ФОН

100 GCOL 0,2: REM ЖОВТІ ЛІНІЇ

110 CLG: REM гасіння екрану

120 REM

130 FOR THETA = 0 TO 2 STEP 1: REM ОБЕРТАННЯ ТРИКУТНИКА

140   X0=CENTREX+R*COS(THETA)

150   Y0=CENTREY+R*SIN(THETA)

160 MOVE Х0Y0

170 X=CENTREX+R*COS(THETA+ANGLE)

180 Y=CENTREY+B*SIN(THETA+ANGLE)

190   DRAW X,Y

200   X=CENTREX+R*COS(THETA+2*ANGLE)

210   Y=CENTREY+R*SIN(THETA+2*ANGLE)

220   DRAW X,Y

230   DRAW X0Y0

240 NEXT THETA

250 END

67 У ЩО ПЕРЕТВОРЮЄТЬСЯ БЕЙСІК

He всі версії Бейсика мають розширення, описані в попередніх розділах цієї глави Повідомимо, відбувається так, що зявляється на ринку нову обчислювальну систему намагаються постачати версією Бейсика, володіє кілька бс5льшімі можливостями, ніж у конкурентів Внаслідок цього з роками мова розростається, так як раніше зроблені розширення визнаються більшістю розробників компіляторів як стандартні властивості мови Хоча багато з розширень мають ідентичне призначення, способи їх запису значно варіюються Насправді існують стандарт мінімального підмножини Бейсика, розроблений Американським національним інститутом стандартів (ANSI) в 1976 році і прийнятий в 1978 році як стандарт ЕСМА-55 Європейською асоціацією виробників ЕОМ, і останній стандарт ANSI, прийнятий в 1982 році і включає в себе розширені можливості

Складається враження, що розширення Бейсика виникають самим безладним чином Так,

версія Бейсика Microsoft має тільки цикли

WHILE-WEND, а в Бейсике ВВС цикли організовані за принципом REPEAT-UNTIL Але якби розробники цих компіляторів поговорили з кількома користувачами своїх систем, то,

напевно, почули б побажання мати відразу обидва типи структури циклів Це зумовило б незначне збільшення памяті, займаної компілятором / інтерпретатором, і трохи уповільнило б його роботу Очевидно, фірма Microsoft вирішила реалізувати цикл WHILE-WEND тому, що він схожий на її реалізацію циклу FOR-NEXT, в якій перевірка виконується на початку циклу і, отже, компілятор / інтерпретатор може обробляти ці цикли аналогічним чином А у версії ВВС перевірка виконується в кінці циклів FOR-NEXT, чому добре відповідає конструкція REPEAT-UNTIL

Одним з заслуговують уваги етапів у розвитку Бейсика є створення мови COMAL Він був розроблений в 1974 році в Данії Б Кристенсеном і Б Лофштедтом як розширення Бейсика В даний час закінчена робота над стандартом мови COMAL 80 Він передбачає велику кількість розширень Бейсика і розроблений з урахуванням сучасних ідей побудови мов програмування і методів структурного програмування і структурного проектування Ця мова прекрасно розроблений, і деякі з його властивостей побіжно описані в наступному підрозділі Однак в останні роки було розроблено чимало хороших мов програмування, які так і не набули широкого поширення не через яких недоліків, а просто тому, що вони не були підтримані великими виробниками ЕОМ Треба сподіватися, що COMAL чи не спіткає ця доля Більш докладні відомості про цю мову можна знайти в книзі Roy Atherton Structured Programming with COMAL, випущену видавництвом Ellis Horwood в 1982 році

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*