Метод_ОТтаП_Ч3
.pdfVar TBL: array[1..25] of STR;
I: integer;
Begin
For i:= 1 to 25 do begin {цикл для вводу прізвищ 25 студентів та їх оцінок по 5 дисциплінам }
Readln(TBL[i].FAM);
Readln(TBL[i].B1);
Readln(TBL[i].B2);
Readln(TBL[i].B3);
Readln(TBL[i].B4);
End;Readln(TBL[i].B5);
For i:= 1 to 25 do begin { цикл для розрахунку і виводу середнього балу }
TBL[i].SB := (TBL[i].B1 + TBL[i].B2 + TBL[i].B3 + TBL[i].B4 + TBL[i].B5) / 5;
Writeln(TBL[i].SB);
End.End;
При зверненні до компонентів запису ми стикаємося з необхідністю вказати в окремих операторів складових імен, що призводить до подовження програми і зайвої громіздкість. Для усунення цього незручності в мові Паскаль використовується оператор WITH, який дозволяє здійснювати доступ до компонентів запису, так, якбт вони були звичайними змунними. Загальний вигляд оператора: WITH <ім’я запису> DO
<оператор>;
Усередині оператора до компонентів запису можна звертатися тільки за допомогою імені компоненти. Наприклад, ввод вихідних даних для окремих компонент запису TBL в попередній программі може бути організований наступним чином:
For i:=1 to 25 do
With TBL[i] do
Read(FAM,B1,B2,B3,B4,B5);
21
12.2. Сортування записів
Розглянемо більш складну задачу, в якій потрібно не тільки визначити середній бал, але і упорядкувати список студентів за спаданням середнього балу. Ідея алгоритму полягає в тому, що в циклі береться кожен i-тий компонент масиву (по якому здійснюється впорядкування) і його номер. Далі відбувається порівняння цього елемента з усіма наступними елементами масиву. Якщо черговий елемент менше обраного то цикл повторюється, в іншому випадку міняються значення змінних K і X, X отримує більше з порівнюваних значення, а K - його номер. Таким чином, після закінчення його циклу мінлива X містить найбільшу з переглянутих значень, а мінлива K - його номер. Далі здійснюється заміна чергового i-го елемента на знайдений максимальний, а i-ий елемент займає місце максимальної і процес повторюється.
Program SBAL;
Type STR = Record
FAM: string[20];
B1,B2,B3,B4,B5: 1..5;
End;SB: real;
Var TBL : array[1..25] of STR;
Y: STR;
i,y,k,m: integer; x: real;
Begin
Readln(m); {Ввод числа записів в масиві}
For i:=1 to m do
With TBL[i] do begin
Readln(FAM);
End;Readln(B1,B2,B3,B4,B5);
For i:=1 to m do
With TBL[i] do
SB:= (B1+B2+B3+B4+B5)/5; {середній бал}For i:=1 to m-1 do begin
K:=1;
22
X:=TBL[i].SB;
For j:=i+1 to m do
If TBL[j].SB > x then begin k:=j;
End;x:=TBL[j].SB;
Y:= TBL[k];
TBL[k]:=TBL[i];
End;TBL[i]:= Y;
For i:=1 to m do
With TBL[i] do
Writeln(FAM,’ ’,SB);
End.Readln;
12.3.Порядок виконання роботи
1.Вибрати індивідуальне завдання. Номер варіанту відповідає номеру студента у списку групи.
2.Ознайомитись із теоретичним матеріалом.
3.Скласти докладний алгоритм роботи програмами
4.Скласти і відлагодити програму на мові Pascal, яка реалізує введення вхідних даних, розв’язання поставленої задачі, виведення результатів у зручній формі на екран і в файл. Основні фрагменти програми оформити як процедури і функції. Описати алгоритм і програму (змінні, масиви, процедури і функції, особливості програмами, тощо)
5.Виконати індивідуальне завдання за допомогою розробленої програми
6.Підготувати висновки по роботі.
12.4.Індивідуальні завдання
Скласти алгоритм i програму розв’язання задач
1.Складіть список групи спортсменів, що брали участь в гонках на спортивних машинах, який включає N чоловік. Для кожного гонщика вкажіть прізвище, ім'я, назву країни, номер
23
автомашини, наявність нагород на попередніх змаганнях, результати гонки. Інформацію про кожного спортсмена опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетні дані спортсменів тих, що не одержали жодного призового місця.
2.Складіть прас - лист магазина "Техніка", що включає найменування товару, марку підприємства-виробника, країну-виробника, його ціну, кількість одиниць товару на складі. Інформацію про кожен вид товару опишіть в програмі
увигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці. Виведіть на екран інформацію про товар залежно від запиту покупця.
3.Скласти список учбової групи, що містить N чоловік. Для кожного учня вказати дату народження, рік вступу до технікуму, курс, групу, оцінки кожного року навчання. Інформацію по кожному учню опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Скласти програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування список студентів, прізвища яких починаються на букви Б і В, і їх оцінки за останню сесію.
4.Складіть список учбової групи, що містить N чоловік. Для кожного учня вкажіть прізвище, ім'я, по батькові, дату народження, рік вступу до ВУЗу, факультет, відділення, курс, групу. Інформацію по кожному студенту опишіть в програмі
увигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування по вибору користувача анкетні дані студента потрібного курсу.
5.Складіть список учбової групи, що містить N чоловік. Для кожного учня вкажіть прізвище, ім'я, по батькові, дату
24
народження, рік вступу до ВУЗу, факультет, відділення, курс, групу. Інформацію по кожному студенту опишіть в програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування по вибору користувача анкетні дані студентів потрібного факультету.
6. Складіть список учбової групи школи юного програміста, що містить N чоловік. Для кожного учня вкажіть прізвище, ім'я, по батькові, назву загальноосвітньої школи, клас, рік вступу до школи, кількість зданих заліків. Інформацію по кожному учню опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування по вибору користувача анкетні дані учнів, що отримали потрібну кількість заліків.
7. Складіть список учбової групи школи юного програміста, що містить N чоловік. Для кожного учня вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, кількість зданих іспитів, оцінку за підсумковий іспит. Інформацію об що кожному вчиться опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетні дані учнів, що успішно склали іспит.
8. Складіть список групи з N спортсменів, що займаються легкою атлетикою. Для кожного спортсмена вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних дисциплінах:
• біг 100м;
• біг 3000м;
• стрибки у висоту;
• стрибки в довжину; Інформацію про кожного спортсмена оформити в програмі у
вигляді запису. Сукупність записів об'єднати у файл. Скласти програму, яка забезпечує введення одержаної інформації,
25
роздрукування її у вигляді таблиці, а також роздрукування анкетні дані спортсменів, що зайняли 1 місце по кожній дисципліні.
9. Складіть список групи з N спортсменів, що брали участь в змаганнях по плаванню. Для кожного плавця вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних дисциплінах:
• кроль на грудях;
• кроль на спині;
• батерфляй;
• комплексне плавання.
Інформацію про кожного спортсмена опишіть в програмі у вигляді запису. Сукупність записів об'єднаєте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетні дані спортсменів тих, що показали кращий час по всіх видах плавання;
10.Складіть список групи з N спортсменів, що брали участь в змаганнях по спортивній гімнастиці. Для кожного гімнаста вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних видах:
• кільця;
• бруси;
• щаблина; Інформацію про кожного спортсмена оформити в програмі у
вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетні дані спортсменів, що показали кращий результат по кожному виду.
11.Складіть список учбової групи кружка юного техніка, що містить N чоловік. Для кожного учня вкажіть прізвище, ім'я, клас, рік вступу до кружка, кількість виготовлених моделей літаків, танків і кораблів. Інформацію про кожного члена кружка опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує
26
введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування по вибору користувача анкетних даних учнів, що зробили своїми руками більше 10 різних моделей.
12.Складіть список учбової групи секції бальних танців, що містить N чоловік. Для кожного учасника секції вкажіть прізвище, ім'я, рік народження, ім'я напарника і види танців якими володіє. Для кожної танцювальної пари вкажіть результати виступу на міжнародному конкурсі бальних танців по 10-и бальній шкалі по наступних видах танців:
• Вальс;
• Танго;
• Фокстрот;
• Степ;
• Рокенрол.
Інформацію про кожного учасника секції опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування по вибору користувача анкетних даних тих танцювальних пар, які перемогли на міжнародному конкурсі по всіх видах танців.
13.Складіть список учбової групи секції бальних танців, що |
|
містить N чоловік. Для кожного учасника секції вкажіть |
|
прізвище, ім'я, рік народження, ім'я напарника і види танців |
|
якими володіє. Для кожної танцювальної пари вкажіть |
|
результати виступу на міжнародному конкурсі бальних |
|
танців по 10-і бальній шкалі по наступних видах танців: |
|
• |
Вальс; |
• |
Танго; |
• |
Фокстрот; |
• |
Степ; |
• |
Рокенрол. |
Інформацію про кожного учасника секції опишіть в програмі |
|
у вигляді |
запису. Сукупність записів об'єднати у файл. |
Складіть |
програму, яка забезпечує введення одержаної |
|
27 |
інформації, роздрукування її у вигляді таблиці, а також видає по введеному прізвищу учасника конкурсу бальних танців анкетні дані напарника по танцювальній парі.
14.Складіть список групи з N спортсменів, що брали участь в гонках на спортивних машинах. Для кожного гонщика вкажіть прізвище, ім'я, назву країни, номер автомашини, наявність нагород на попередніх змаганнях, результати гонки. Інформацію про кожного спортсмена опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також сортування анкетних даних спортсменів:
• по ФІО;
• по марці автомобіля
15.Складіть прас - лист магазина "Фокстрот", що включає найменування товару, марку підприємства-виробника, країну-виробника, його ціну, кількість одиниць товару на складі. Інформацію про кожен вид товару опишіть в програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці і дозволяє сортувати товар за його ціною, маркою, підприємстві виробнику і по кількості одиниць на складі.
16.Скласти список успішності вашої групи за наслідками контрольних робіт по наступних дисциплінах:
• Інформатика і обчислювальна техніка;
• Нарисна геометрія Інформацію про успішність кожного студента опишіть в
програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці і дозволяє відображати список студентів, середній бал яких по всіх перерахованих дисциплінах вище введеного користувачем.
17.Скласти список учбової групи, що містить N чоловік. Для кожного учня вказати дату народження, рік вступу до технікуму, курс, групу, оцінки кожного року навчання.
28
Інформацію по кожному учню оформити в програмі у вигляді запису. Сукупність записів об'єднати у файл. Скласти програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці і вибірку із списку учнів по введеному користувачем курсу або групі.
18.Складіть список групи з N спортсменів, що брали участь в змаганнях по спортивній гімнастиці. Для кожного гімнаста вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних видах:
• вільні вправи;
• стрибки на доріжці;
• стрибки через коня.
Інформацію про кожного спортсмена оформити в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів тих, що не одержали жодного призового місця.
19.Скласти список успішності вашої групи за наслідками контрольних робіт по наступних дисциплінах:
• Вища математика
• Нарисна геометрія Інформацію про успішність кожного студента опишіть в
програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці і виводить на екран інформацію про студентів середній бал яких по всіх перерахованих дисциплінах рівний балу, введеного користувачем.
20.Складіть прас - лист магазину "М’явкало", що включає найменування товару, марку підприємства-виробника, країни-виробника, його ціну, кількість одиниць товару на складі. Інформацію про кожен вид товару опишіть в програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної
29
інформації, роздрукування її у вигляді таблиці і здійснює вибірку товару за введеною користувачем ціною.
21.Складіть список учбової групи, який включає N чоловік. Для кожного студента вкажіть прізвище, ім'я, по батькові, дату народження, рік вступу до ВУЗу, факультет, відділення, курс, групу. Інформацію по кожному студенту опишіть в програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці впорядкованій за абеткою, а також дозволяла додавати інформацію по новим студентам до існуючого списку учбової групи.
22.Складіть список групи з N спортсменів, що брали участь в змаганнях по плаванню. Для кожного плавця вкажіть прізвище, ім'я, клас, результати по наступних дисциплінах:
• кріль;
• брас;
• батерфляй;
• вільним стилем.
Інформацію про кожного спортсмена опишіть в програмі у вигляді запису. Сукупність записів об'єднайте у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів тих, що не одержали жодного призового місця.
23.Складіть список групи з N спортсменів, що займаються легкою атлетикою. Для кожного спортсмена вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних дисциплінах:
• стрибки з жердиною;
• метання ядра;
• метання списа;
• метання диска.
Інформацію про кожного спортсмена оформити в програмі у вигляді запису. Сукупність записів об'єднати у файл. Скласти програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування
30
анкетних даних спортсменів, що зайняли 1 місце по метанню ядра і 2-е по метанню диска.
24.Складіть список групи з N спортсменів, що займаються легкою атлетикою. Для кожного спортсмена вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних дисциплінах:
• стрибки з жердиною;
• метання ядра;
• метання списа;
• метання диска.
Інформацію про кожного спортсмена оформити в програмі у вигляді запису. Сукупність записів об'єднати у файл. Скласти програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів, що не зайняли жодного призового у всіх перерахованих змаганнях.
25.Складіть список групи з N спортсменів, що займаються легкою атлетикою. Для кожного спортсмена вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних дисциплінах:
• біг 100м;
• біг 3000м;
• стрибки у висоту;
• стрибки в довжину; Інформацію про кожного спортсмена оформити в програмі у
вигляді запису. Сукупність записів об'єднати у файл. Скласти програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів, що зайняли 3 місце по стрибках у висоту для кожної із загальноосвітніх шкіл.
26.Складіть список групи з N спортсменів, що брали участь в гонках на спортивних машинах. Для кожного гонщика вкажіть прізвище, ім'я, назву країни, номер автомашини, наявність нагород на попередніх змаганнях, результати гонки. Інформацію про кожного спортсмена опишіть в програмі у вигляді запису.31Сукупність записів об'єднати у
файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також сортування анкетних даних спортсменів:
• а) по ПІБ;
• б) за наслідками гонки.
27.Складіть список групи з N спортсменів, що брали участь в гонках на спортивних машинах. Для кожного гонщика вкажіть прізвище, ім'я, назву країни, номер автомашини, наявність нагород на попередніх змаганнях, результати гонки. Інформацію про кожного спортсмена опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів тих, що показали кращий результат.
28.Складіть список групи з N спортсменів, що брали участь в гонках на спортивних машинах. Для кожного гонщика вкажіть прізвище, ім'я, назву країни, номер автомашини, наявність нагород на попередніх змаганнях, результати гонки. Інформацію про кожного спортсмена опишіть в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів тих, що одержали три призові місця підряд в різних гонках.
29.Складіть список групи з N спортсменів, що брали участь в змаганнях по спортивній гімнастиці. Для кожного гімнаста вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних видах:
• вільні вправи;
• стрибки на доріжці;
• вправи на брусах.
Інформацію про кожного спортсмена оформити в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також
32
роздрукування анкетних даних спортсменів тих, що показали кращий результат по всіх видах багатоборства.
30.Складіть список групи з N спортсменів, що брали участь в змаганнях по спортивній гімнастиці. Для кожного гімнаста вкажіть прізвище, ім'я, назву загальноосвітньої школи, клас, результати по наступних видах:
• вольні вправи;
• стрибки у висоту;
• стрибки через коня.
Інформацію про кожного спортсмена оформити в програмі у вигляді запису. Сукупність записів об'єднати у файл. Складіть програму, яка забезпечує введення одержаної інформації, роздрукування її у вигляді таблиці, а також роздрукування анкетних даних спортсменів тих, що зайняли 1-е місце по вольних вправах і 2-е по стрибках у висоту.
12.5.Контрольні запитання
1.Який синтаксис запису в мові Паскаль?
2.Як організувати масив записів в мові Паскаль?
3.Як організувати масив типу запис в мові Паскаль?
4.Який синтаксис оператору WITH, і його призначення?
5.Як організувати сортування масивів записів?
6.Який порядок виконання роботи?
33
13. Заняття №13. Графічний режим.
Мета роботи – Знайомство з можливостями графічного режиму екрану в мові Pascal. Робота з бібліотеками.
|
13.1. |
Теоретичні відомості |
|
|
|||
|
11.1.1. |
Графічний режим. |
|
|
|||
Графічний відеорежим – відрізняється від текстового тим, |
|||||||
що за одиницю відображення обирається не символ, а крапка (або |
|||||||
піксель), яка має свій колір та координати на екрані. Для роботи в |
|||||||
графічному режимі в Турбо Паскалі створена бібліотека |
|||||||
процедур та функцій – Graph. До складу бібліотеки входять |
|||||||
понад п’ятдесят різноманітних процедур та функцій. |
|
||||||
Одразу |
після включення, комп’ютер знаходиться в |
||||||
текстовому режимі, щоб перейти до графічного режиму, зазвичай |
|||||||
користуються допоміжними програмами для роботи з адаптером |
|||||||
відео дисплею. Такого типу програми називаються – графічними |
|||||||
драйверами. Взагалі, драйвером – називають спеціальні програми |
|||||||
для роботи |
з тими |
чи |
іншими технічними |
складовими |
|||
комп’ютера. |
|
|
|
|
|
|
|
• Для запуску графічного драйверу в бібліотеці Graph – |
|||||||
використовується |
процедура |
- |
InitGraph(Var |
||||
GraphDriver, |
GraphMode: integer, |
Path: |
string), де |
||||
GraphDriver – змінна, що визначає тип графічного |
|||||||
драйверу, і приймає значення однієї з констант: |
|||||||
Const |
|
|
|
|
|
|
|
|
Detect |
=0; {Режим авто визначення типу} |
|||||
|
CGA |
|
=1; |
|
|
|
|
|
MCGA |
=2; |
|
|
|
|
|
|
EGA |
=3; |
|
|
|
|
|
|
……. |
|
|
|
|
|
|
|
VGA |
=9; |
|
|
|
Detect або VGA |
|
Серед яких нам можуть знадобитися |
|||||||
які |
підтримуються |
майже |
всіма |
сучасними |
|||
відеоадаптерами; |
|
|
|
|
|
||
|
|
|
34 |
|
|
|
|
GraphMode- додаткова змінна, яка визначає режим |
|
роботи графічного адаптеру, для VGA приймає |
|
наступні значення: |
|
Const |
|
VGALo |
=0; {640x200 – крапок на екрані} |
VGAMed =1; {640x350 – крапок на екрані} |
|
VGAHi |
=2; {640x480 – крапок на екрані} |
Path- вказує шлях, де знаходиться графічний драйвер, при стандартній установці Турбо Паскалю, всі графічні драйвери знаходяться в папці TP\BGI, на диску С.
Наприклад для встановлення режиму VGА високої якості зображення, можна використати наступний код:
Program Name_101;
Uses Graph;
Var
BeginDiver, Mode : integer;
Diver := VGA;
Mode := VGAHi;
InitGraph(Diver, Mode, ’C:\TP\BGI’); end. {…}
Або скористатися можливостями авто визначення:
Program Name_102;
Uses Graph;
Var
BeginDiver, Mode : integer;
Diver := Detect;
InitGraph(Diver, Mode, ’C:\TP\BGI’); end. {…}
в цьому випадку, після встановлення графічного режиму змінні Driver і Mode отримають підібрані програмою значення типу драйверу та його режиму.
• Функція GraphResult – повертає значення типу integer, в якому закодовано результат останнього звернення до графічних процедур. Якщо не виявлено помилку, то
35
функція поверне нуль, у випадку помилки – від’ємне число.
• По завершені роботи в графічному режимі, необхідно повернутися до текстового режиму за допомогою процедури CloseGraph.
Program Name_103;
Uses Graph;
VarBeginDiver, Mode: integer;
Diver := Detect;
InitGraph(Diver, Mode, ’C:\TP\BGI’);{відкриваємо граф. режим}
{тепер можна працювати з графічними процедурами} {та фукціями …}
end. CloseGraph;{закриваємо графічний режим}
11.1.2. Система координат. Лінії та крапки.
Як вже згадувалося, будь-яка інформація на екрані монітора в графічному режимі є сукупністю точок – пікселей, вони вирізняються кольором, яскравістю та координатами - положенням відносно лівого верхнього кута екрана, який має координати (0, 0).
Дисплей може працювати в декількох графічних відеорежимах, які вирізняються між собою роздільною здатністю, тобто кількістю пікселей по ширині та висоті екрану.
• Для визначення максимальних координат екрану в поточному графічному режимі використовуються функції GetMaxX і GetMaxY, які повертають максимальні значення висоти та ширини, відповідно. Наприклад для режиму VGА високої якості зображення (640x480), GetMaxX – поверне значення 639, а GetMaxY – 479(обидва значення беруться на
36
одиницю менше, бо нумерація координат починається з 0).
Слід зазначити, що в графічному режимі не видно курсору, проте він існує і одразу ж після ініціалізації знаходиться в точці з координатами (0, 0). Для роботи з курсором використовуються наступні процедури та функції:
• MoveTo (X, Y : integer) – переводить курсор в точку з координатами (X, Y).
• MoveRel (dX, dY : integer) – змінює поточне положення курсору на відстань рівну dX піксклям по горизонталі, та dY – по вертикалі, причому dX та dY можуть приймати, як додатні так і від’ємні значення.
• GetX, GetY – функції, які визначають поточне положення графічного курсору.
Процедури для відображення точок та ліній:
• PutPixel(X, Y: integer; Color : Word) – виводить крапку заданого кольору Color в точку з координатами X та Y. Параметр Color може приймати одне з значень:
Const
Black =0; {Чорний}
Blue =1; {Синій}
Green =2; {Зелений}
Cyan =3; {Синьо-зелений}
Red =4; {Червоний}
Magenta =5; {Фіолетовий}
Brown =6; {Коричньовий}
LightGray =7; {Сірий}
DarkGray =8; {Темно-сірий}
LightBlue =9; {Яскраво-синій}
LightGreen =10; {Яскраво-зелений}
LightCyan =11; {Яскраво-синьо-зелений}
LightRed =12; {Яскраво-червоний}
LightMagenta =13; {Малиновий}
Yellow =14; {Жовтий}
White =15; {Білий}
37
•Line (X1, Y1, X2, Y2: integer) – малює лінію від точки з координатами (X1, Y1) до точки з координатами (X2, Y2).
•LineTo (X, Y: integer) – малює лінію від точки в якій знаходиться курсор до точки з координатами (X, Y), і переміщує курсор в цю точку.
•LineRel (dX, dY: integer) – малює лінію від точки в якій знаходиться курсор до точки зміщеної відносно поточного положення курсору на dX та dY, та переносить курсор у цю точку.
•SetColor (Color : Word) – встановлює значення кольору, яким будуть виводитися прямі та символи.
•SetLineStyle(Type, Pattern, Thick: Word) – встановлює зовнішній вигляд ліній. Параметр Type задає тип лінії, може приймати одне з значень:
Const
SolidLn =0; {Проста лінія} DottedLn =1; {Лінія з точок}
CenterLn =2; {Штрих-пунктирна лінія} DashedLn =3; {Пунктирна лінія}
UserBitLn =4; {Вигляд визначається користувачем}
Параметр Pattern враховується тільки для ліній, вигляд |
||
яких задається користувачем. При цьому два байта |
||
параметру Pattern визначають вигляд лінії: кожен |
||
встановлений в одиницю біт, цього слова відповідає |
||
пікселю, що буде зафарбовано основним кольором, а |
||
нульовий біт – не зафарбованому пікселю. |
||
Параметр Thick може приймати одне з двох значень: |
||
Const |
|
|
|
NormWidth =1; |
{товщина лінії – один |
піксель} |
|
|
} |
ThickWidth =1; |
{ товщина лінії – три пікселі |
|
|
Слід зазначити, що встановлений процедурою стиль ліній використовується також для побудови прямокутників, багатокутників та інших фігур.
38
Приклад: |
|
|
Program Name_104; |
|
|
Uses Crt, Graph; |
|
|
Var Diver, Mode : integer; |
|
|
Begin |
|
|
Diver := Detect; |
|
|
InitGraph(Diver, Mode, ’C:\TP\BGI’);{відкриваємо граф. |
||
режим} |
|
|
PutPixel(10, 10, Green); {малює зелену крапку} |
||
SetColor(Red); |
{встановлює червоний колір} |
|
Line(0, 0, GetMaxX, GetMaxY); {малює червоним |
||
головну діагональ екрану} |
|
|
ReadKey; |
{очікує натискання клавіші} |
|
CloseGraph; |
{закриваємо |
графічний |
режим} |
|
|
end. |
|
|
11.1.3. Багатокутники, дуги, кола та еліпси.
Для побудови більш складних геометричних фігур можуть використовуватись наступні процедури:
• Rectangle(X1, Y1, X2, Y2: integer) – малює прямокутник. Тут (X1,Y1) – координати лівого верхнього кута, (X2,Y2) – правого нижнього кута прямокутника.
• DrawPoly(N: Word, var Points) – малює довільну ламану лінію, задану координатами точок зламу. Де N
– кількість точок зламу, включаючи обидві крайні точки; Points – змінна масиву типу PointType, що містить координати точок зламу.
Координати точок зламу задаються парою значень типу Word об’єнані в один тип за допомогою оголошення:
Type
39
PiontType = record end; x, y : Word
Наприклад, розглянемо програму побудови п’ятикутника:
Program Name_105; Uses Crt, Graph;
Var Diver, Mode : integer;
Beginm : array [1..6] of PointType;
Diver := Detect;
InitGraph(Diver, Mode, ’C:\TP\BGI’);{відкриваємо граф. режим}
m[1].x := 40; m[1].y := 40; {точка з координатами |
|
(40,40)} |
|
m[2].x := 50; m[2].y := 35; {точка з координатами |
|
(50,35)} |
|
m[3].x := 60; m[3].y := 40; {точка з координатами |
|
(60,40)} |
|
m[4].x := 55; m[4].y := 50; {точка з координатами |
|
(55,50)} |
|
m[5].x := 45; m[5].y := 50; {точка з координатами |
|
(45,50)} |
|
m[6].x := m[1].x; m[6].y := m[1].y; {замикаємо |
|
ламану} |
|
DrawPoly(6, m); |
{малюємо п’ятикутник} |
ReadKey; |
{очікує натискання клавіші} |
CloseGraph; |
{закриваємо графічний |
режим} |
|
end. |
|
• Circle(X,Y: integer; |
R: Word) – малює коло, (X,Y) – |
координати центру, R – радіус кола в пікселях.
• Arc(X,Y: integer; BegA, EndA, R: Word) – малює дугу кола, тут (X,Y) – координати центру, BegA, EndA-
40