Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Побудова елементарних зображень

Begin

Repeat

Begin

c:=ReadKey;

writeln(ord(c));

until c=#27 {клавіша Escape};

end.

При натисканні перерахованих вище спеціальних клавіш ця програма буде виводити по два коди відразу.

3. Інші можливості

При необхідності організації затримки у програмі можна використовувати процедуру Delay(time: word). Параметр time — час у мілісекундах, на який потрібно призупинити програму.

Ще одна можливість модуля CRT — робота із системним динаміком. Для включення звуку потрібна процедура Sound(f: word) (f — частота в герцах). Після включення потрібна затримка (Delay) на необхідний час звучання, потім — вимикання за допомогою NoSound. Якщо не скористатися NoSound, то звук буде чутний навіть після виходу з програми на Паскалі.


Графіка в Турбо Паскалі

На відміну від уже знайомого текстового режиму, екран у графічному режимі розбитий на велику кількість точок, кожна з який може мати визначений колір. Точки вважаються однаковими і прямокутними, усі вони щільно «покладені» на екрані, тобто для будь-якої точки можна вказати, у якому рядку й у якому стовпці вона знаходиться. Номера рядків і стовпців у графічному режимі використовуються як координати точки, отже, координати завжди цілочисельні. У графічному режимі початок координат знаходиться в лівому верхньому куті екрана, вісь Х спрямована вправо, вісь У спрямована вниз.

Помітимо, що існують різні графічні режими, вони відрізняються кількістю точок по горизонталі і вертикалі (роздільною здатністю), а також кількістю можливих кольорів, наприклад: 320x200x16, 640x480x16, 640x200x16, 800x600x256 і т.п.

Усі засоби для роботи з графікою міститися в стандартному модулі Graph, тому його потрібно вказати після слова uses.

1. Включення і вимикання графічного режиму.

Для включення графічного режиму використовується процедура InitGraph(driver,mode,path) опишемо призначення її параметрів:

driver – змінна типу integer, у якій задається тип відеоадаптера, встановленого в комп'ютері. У модулі визначені константи для різних адаптерів, що звільняють нас від необхідності запам'ятовувати числа. Маються такі константи: CGA, EGA, EGA64, EGAMono, VGA, MCGA, IBM8514 і т.п. Для нас найбільш важливої буде константа detect, при вказівці якої InitGraph сама підшукає найбільш потужний тип адаптера, сумісний з тим адаптером, що встановлений на комп'ютері.

mode – також змінна типу integer, задає режим, у якому працює обраний відеоадаптер (тут також визначені константи). Майже кожен відеоадаптер може працювати в декількох режимах, наприклад, у VGA є 640x200x16 (VGALo), 640x350x16 (VGAMed), 640x480x16 (VGAHi). Якщо в першому параметрі було зазначене значення detect, то InitGraph не звертає уваги на mode, а встановлює найкращий, на її погляд, режим.

path – рядковийй параметр. Для кожного відеоадаптера (чи для групи подібних відеоадаптерів) існує програма-драйвер, за допомогою якої модуль Graph спілкується з відеоадаптером. Такі драйвери зберігаються у файлах з розширенням «bgi». У параметрі path указується каталог, у якому зберігаються драйвери. Якщо вони знаходяться в поточному каталозі, то цей параметр дорівнює порожньому рядку.

Звичайно для включення графіки ми будемо використовувати InitGraph у такому виді:

 

const gpath = ‘Y:\WIN_APPS\BP\BGI’

var gd,gm: integer;

...

...

gd:=Detect;

InitGraph(gd,gm,gpath);

...

 

Для завершення роботи з графікою і виходу в текстовий режим використовується процедура CloseGraph.

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

При побудові найпростіших елементів зображень використовуються наступні процедури і функції:

Назва Призначення
PutPixel(x,y: integer; c: word); Поставити точку (x,y), використовуючи колір c. Значення кольору звичайно міняється від 0 до 15, замість номера кольору можна вживати колірні константи модуля Graph.
SetColor(c: word); Установити поточний колір для малювання відрізків, кіл і т.п. Усі лінії після вживання цього оператора будуть малюватися встановленим кольором.
SetBkColor(c: word); Установити поточний колір для фону (тобто колір всього екрана).
GetMax; GetMax; Ці функції повертають максимальні припустимі значення координат x і y, відповідно.
Line(x1,y1,x2,y2: integer); Малює відрізок з (x1,y1) до (x2,y2) поточним кольором.
Rectangle(x1,y1,x2,y2: integer); Малює поточним кольором прямокутник, лівий верхній кут якого – (x1,y1), а правий нижній – (x2,y2).
Circle(x,y: integer; r: word); Малює поточним кольором коло з центром у точці (x,y) радіусом r.
Arc (x,y: integer; a1,a2,r: word); Малює дугу кола a1 і a2 – початковий і кінцевий кути (у градусах), відповідно. Кут відраховується традиційно, проти годинникової стрілки, кут величиною 0° відповідає променю y=0, x>0.
Ellipse(x,y: integer; a1,a2,xr,yr: word); Малює дугу еліпса з півосями xr і yr від кута a1 до a2.
DrawPoly(n: word; P); Малює багатокутник, кількість сторін у якого – n, а інформація про вершини зберігається в нетипізованому параметрі P. У якості P зручніше за усе використовувати масив із записів, кожна з який містить поля x,y: integer;
MoveTo(x,y: integer); Ця процедура спирається на поняття поточної позиції. Вона «запам'ятовує» позицію (x,y) на екрані, а надалі з цієї позиції можна малювати відрізки.
LineTo(x,y: integer); Малює відрізок з поточної позиції в точку (x,y). При цьому поточна позиція переміщується в кінець намальованого відрізка.
MoveRel(dx,dy: integer); Переміщує поточний покажчик з колишнього положення (x,y) у точку (x+dx,y+dy).
LineRel(dx,dy: integer); Те ж, що і попередня процедура, але при переміщенні малює відрізок від (x,y) до (x+dx,y+dy).
Get; Get; Повертають координати поточного покажчика (окремо).
ClearDevice; Очищує екран.

Усі приведені вище процедури для малювання виконують тільки контурні малюнки (не зафарбовуючи прямокутник, коло чи еліпс усередині). За замовчуванням малювання відбувається з використанням тонкої суцільної лінії, однак товщину і вид лінії можна змінювати за допомогою процедури SetLineStyle(style,pattern,width: word). Розглянемо призначення параметрів цієї процедури.

1. style ( вид лінії). Тут зручно задавати не конкретні числа, а константи: SolidLn, DottedLn, CenterLn, DashedLn, UserBitLn. Перша позначає суцільну лінію, три наступні – різні види переривчастих ліній, остання — лінію, вид якої визначається користувачем (див. нижче).

2. pattern – зразок для виду лінії, обумовленого користувачем. Цей параметр вступає в дію лише тоді, коли в попередньому зазначене UserBitLn. Зразок – це фрагмент лінії, заданий у виді числа. Перехід від конкретного фрагмента до числа виконується, наприклад, так:

Зручніше за все переводити отримане число в шістнадцятьковий код, у нашому прикладі вийде $999C. При зображенні лінії закодований нами фрагмент буде повторюватися стільки разів, скільки потрібно.

3. width ( товщина лінії. Можна використовувати числа, однак визначені 2 константи: NormWidth і ThickWidth (нормальна і товста лінії).

Перейдемо тепер до малювання зафарбованих фігур. За замовчуванням внутрішня область фігури буде зафарбовуватися білим кольором, причому зафарбування буде суцільним. Для керування кольором і видом зафарбування використовується процедура SetFillStyle(style, color: word); Також як і для стилю лінії, для style передбачені константи: EmptyFill, SolidFill, LineFill, LtSlashFill, SlashFill, BkSlashFill, LtBkSlashFill, HatchFill, XHatchFill, InterleaveFill, WideDotFill, CloseDotFill, UserFill. Перша позначає відсутність зафарбування, друга — суцільне, наступні — різні специфічні види зафарбування, сама остання — афарбування, що задається користувачем. Щоб задати користувальницький зразок зафарбування, потрібно використовувати процедуру SetFillPattern(Pattern: FillPatternType; Color: Word); FillPatternType визначається як array[1..8] of byte, кожен елемент масиву кодує один рядок зразка зафарбування (як і для ліній), а всього таких рядків 8. У результаті зафарбування виконується за допомогою однакових квадратиків 8x8.

Нижче приводяться процедури малювання зафарбованих фігур.

Назва Призначення
Bar(x1,y1,x2,y2: integer); Малює зафарбований прямокутник.
FillEllipse(x,y: integer; xr,yr: word); Зафарбований еліпс.
FillPoly(n: word; P); Зафарбований багатокутник.
PieSlice(x,y: integer; a1,a2,r: word); Зафарбований круговий сектор.
Sector (x,y: integer; a1,a2,xr,yr: word); Зафарбовує еліптичний сектор.
FloodFill(x,y: integer; Cborder: word); Виливає фарбу в точку (х,у), звідки вона розтікається в усі сторони, поки не досягне границі кольору Cborder. Якщо такої границі немає чи вона незамкнута, то фарба може залити весь екран.

 

3. Виведення текстової інформації.

Для виведення тексту на екран використовуються дві процедури:

1. OutText(s: string). Ця процедура виводить рядок s починаючи з поточної позиції, тобто лівий верхній кут виведеного рядка знаходиться в поточній позиції (це так за замовчуванням). Поточна позиція задається, наприклад, за допомогою MoveTo.

2. OutTextXY(x,y: integer; s: string). Використовується для виведення рядка в конкретній позиції.

Якщо потрібно вивести якісь числа, то попередньо потрібно перетворити їх у рядок, наприклад, за допомогою процедури Str.

Приклад:

var r: integer;

s: string;

...............

Str(r,s);

OutTextXY(100,200,’Результат=’+s);

 

Турбо Паскаль дозволяє використовувати декілька різних шрифтів для виведення тексту. Крім того, можна змінювати напрямок виведення тексту, а також розмір символів. У цих цілях використовується процедура SetTextStyle(Font, Direction, CharSize : word). Перелічимо можливі константи і значення для параметрів цієї процедури.

Font(шрифт):

DefaultFont ( шрифт 8x8 (за замовчуванням)

TriplexFont ( напівжирний шрифт)

SmallFont ( тонкий шрифт)

SansSerifFont ( шрифт без зарубок)

GothicFont ( готичний шрифт)

Direction (орієнтація і напрямок виведення символів):

0 – звичне виведення (зліва на право)

1 – знизу вгору (напис «покладений на бік»)

2 – зліва на право, але «лежачими» буквами.

Size ( розмір шрифту (цілі числа від 0 до 10).

Інша можливість при роботі з текстом ( це вирівнювання його щодо координат виведення, які задаються. Для цього використовується процедура SetTextJustify(horiz,wert: word). Horiz вказує як текст розташований щодо заданої позиції по горизонталі, а vert по вертикалі. Можливі константи:

для horiz:

· LeftText ( зазначена позиція є лівим краєм рядка)

· CenterText ( позиція є серединою виведеного рядка)

· RightText ( правим краєм рядка);

для vert:

· BottomText позиція знаходиться на нижньому краї зображення

· CenterText – по центру

· TopText – позиція є верхнім краєм зображення.


Файли в мові програмування Pascal

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

Авторський варіант мови Pascal містить мінімальний набір припустимих дій з файлами, що лише частково збігається з операціями, реалізованими в Turbo Pascalі.

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

Операції з файловими змінними в Turbo Pascale можна розбити на чотири основні групи:

• установчі і завершальні операції;

• власне введення-виведення;

• переміщення по файлу;

• спеціальні операції.

Установчі і завершальні операції

У цю групу входять чотири операції, реалізовані у виді стандартних процедур з наступними іменами:

· Assign

· Reset

· Rewrite

· Flush

· Close

Розглянемо ці операції.

а) Процедура Assign призначена для встановлення зв'язку між конкретним фізичним файлом на магнітному носії і змінної файлового типу, що буде представником цього файлу в програмі.

Ця процедура має два параметри. Перший параметр — ім'я файлової змінної, другий параметр - рядок, що утворить літеральне ім'я файлу. Ім'я файлу будується за правилами, прийнятим в операційній системі MS-DOS для іменування файлів, і може містити в собі позначення дисковода, ланцюжок каталогів, що приводить до потрібного файлу, власне ім'я файлу.

Приклад:

Assign(F,'d:\mydir\myfile.dta') ;

Після виконання даного виклику файлова змінна F буде зв'язана з дисковим файлом myfile.dta, розташованим у каталозі mydir з кореневого каталогу диска d.

Другий параметр процедури Assign може бути також рядком, що містить умовну позначку "псевдофайлів" MS-DOS, тобто файлів, зв'язаних із конкретним фізичним пристроєм. Допускаються наступні імена, які в основному співпадають з прийнятими в MS-DOS позначеннями:

• con - консоль, тобто для випадку виведення інформація міститься на екрані дисплея, а у випадку введення інформація зчитується з клавіатури;

• lpti, LPT2, LPT3 - друкувальні пристрої (допускається одночасно до трьох пристроїв). Ці пристрої призначені тільки для виведення інформації;

• prn- синонім LPTI;

• СОМ1, COM2 - послідовні комунікаційні порти. Зміст цих псевдофайлів визначається конкретними пристроями, підключеними до цих портів;

• AUX - синонім СОМ1;

• nul - фіктивний (неіснуючий) пристрій. Може використовуватися для виведення інформації "у нікуди", коли в програмі або потрібно вказати ім'я вихідного файлу, або інформація, записувана в нього, не потрібна.

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

Різниця між цими двома процедурами полягає в початкових діях з файлом. Процедура Reset припускає, що дисковий файл, що відкривається, вже існує, у противному випадку виникає помилка. Процедура Rewrite допускає, що файл, що відкривається, може ще не існувати; у цьому випадку вона створює заданий файл. Якщо ж файл існує, то Rewrite ОЧИЩАЄ його. Повторимо, що в обох випадках поточний покажчик файлу встановлюється на його нульовий елемент.

в) Процедура Flush (параметр - файлова змінна) використовується для завершення обмінів з файлом без його закриття. Обміни з файлами завжди реалізуються через деякий буфер в оперативній пам'яті, тому в процесі запису на файл останні записувані елементи можуть ще знаходитися ("застрягти") у буфері. Процедура Flush викликає примусове скидання цих елементів у файл. Ця процедура має сенс у тому випадку, якщо з файлом проводилися операції запису, і використовується рідко, тому що процедура Close робить такі ж дії.

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

Операції введення-виведення

У цю групу входять дві операції (процедури), що власне, і реалізують дії по читанню інформації з файлу і запису інформації в файл:

Read

Write

На відміну від багатьох інших процедур, Read і Write можуть викликатися з РІЗНИМ ЧИСЛОМ ПАРАМЕТЮВ, і ці параметри можуть мати РІЗНІ ТИПИ.

Процедура Read призначена для читання значень з файлу в програму. Першим параметром повинно бути ім'я файлової змінної, до якої була застосована одна з операцій відкриття (Reset чи Rewrite). Далі повинні визначатись змінні, у які будуть розташовуватись значення, що читаються з файлу. Тип цих змінних повинний збігатися з базовим типом файлу з першого параметра.

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

Якщо в процесі виконання процедури Read поточний покажчик файлу буде встановлений на позицію, що не містить інформації (тобто буде досягнутий кінець файлу), то читання буде припинено, процедура Read завершиться передчасно, і виникне ситуація “кінець файлу". Виникнення цієї ситуації можна перевірити за допомогою вбудованої функції eof.

Процедура Write має зворотний сенс, дозволяючи записувати у файл інформацію з програми. Першим параметром цієї процедури повинно бути ім’я файловою змінною, відкритої процедурою Reset чи Rewrite. Далі повинний йти список виразів, тип яких збігається з базовим типом файлу з першого параметра.

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


Читайте також:

  1. АСОЦІАЦІЯ. ПОБУДОВА АСОЦІАТИВНОГО КУЩА
  2. Бюджетний устрійпоказує, в який спосіб побудована бюджетна система. Іншими словами,він відображає організацію вертикальної структури бюджету держави за рівнями влади.
  3. ГЕОМЕТРИЧНІ ПОБУДОВИ АКСОНОМЕТРИЧНИХ ЗОБРАЖЕНЬ
  4. Д80.Парламент в ЗК.ознаки 81.Побудова та основні ознаки парламенту в ЗК.
  5. Загальна побудова організації контрольного процесу в умовах автоматизованої обробки інформації
  6. Зони ризику. Побудова кривої ризику.
  7. Ієрархічність засобів діагностики та контролю процесорів та систем опрацювання сигналів та зображень
  8. Колекції зображень, звуків і фонів в Інтернеті
  9. Контроль якості здійснюється і на стадії підтримки досягнутого рівня якості, тобто контролюється також якість технічної експлуатації і ремонту побудованих об'єктів.
  10. Методи реставрації фотозображень
  11. Навчальна програма з фізичної культури: поняття, задачі, види, побудова
  12. Написання формул і побудова діаграм.




Переглядів: 617

<== попередня сторінка | наступна сторінка ==>
Керування екраном | Обробка помилок введення-виведення

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.139 сек.