КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Побудова елементарних зображень
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, то звук буде чутний навіть після виходу з програми на Паскалі. Графіка в Турбо Паскалі На відміну від уже знайомого текстового режиму, екран у графічному режимі розбитий на велику кількість точок, кожна з який може мати визначений колір. точки вважаються однаковими і прямокутними, усі вони щільно «покладені» на екрані, тобто для будь-якої точки можна вказати, у якому рядку й у якому стовпці вона знаходиться. Номера рядків і стовпців у графічному режимі використовуються як координати точки, отже, координати завжди цілочисельні. У графічному режимі початок координат знаходиться в лівому верхньому куті екрана, вісь x спрямована вправо, вісь y спрямована вниз. Помітимо, що існують різні графічні режими, вони відрізняються кількістю точок по горизонталі і вертикалі (роздільною здатністю), а також кількістю можливих кольорів, наприклад: 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)) у лівому верхньому куті екрана. Вісь x спрямована вправо, вісь y униз. Очевидно, що всі точки екрана мають цілочисельні додатні координати. При побудові найпростіших елементів зображень використовуються наступні процедури і функції:
Усі приведені вище процедури для малювання виконують тільки контурні малюнки (не зафарбовуючи прямокутник, коло чи еліпс усередині). За замовчуванням малювання відбувається з використанням тонкої суцільної лінії, однак товщину і вид лінії можна змінювати за допомогою процедури 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. Нижче приводяться процедури малювання зафарбованих фігур.
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 Pascale. По-перше, необхідно відзначити, що, на відміну від змінних інших типів, мова не містить вбудованих операцій над файловими змінними. Операції з файлами цілком реалізовані у виді стандартних процедур і функцій. Цей підхід відповідає прийнятим у більшості мов програмування принципам, згідно яким ядро мови не містить вбудованих файлових операцій. Операції з файловими змінними в 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.
Дата добавления: 2014-12-16; Просмотров: 507; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |