Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Приклад 2






Розробка навчальної програми побудови ділення відрізка навпіл.

 

Написання навчальної програми почнемо зі створення нового проекту (File => New Application). Для форми встановимо властивості, наведені в табл. 2.1.

 

Таблиця 2.1. Властивості форми Form1

Властивість Значення Коментар
Caption Ділення відрізку навпіл Заголовок вікна форми
Height   Висота вікна в пікселях екрана
Position poScreenCenter Розташування вікна в центрі екрана з встановленими розмірами
Width   Ширина вікна в пікселях екрана

 

Із закладки Standard у будь-яке місце створеної форми розташуємо три компоненти TPanel (панель), що розділять форму на три частини: область введення даних і управління, область побудови зображення й область виводу коментарів до побудови. В інспекторі об'єктів установимо наведені у табл. 2.2 значення властивостей панелей.

 

Таблиця 2.2. Значення властивостей панелей

Властивість Значення
Panel1 Panel2 Panel3
Align alRight (праворуч) alBottom (унизу) alClient (все місце, що залишилося)
Caption      
Height не змінюється   не змінюється
Width   не змінюється не змінюється

 

На праву панель області вводу даних і управління помістимо наступні компоненти:

 

1. Label1 (мітка) із закладки Standard для виводу на формі пояснювального текстового напису до нижченаведеного поля вводу даних. Для неї властивість Caption змінимо на Довжина відрізка. Щоб урізноманітити вид напису Label1, можливі зміни розміру, кольору і стилю шрифту за допомогою модифікації властивості Font;

 

2. SpinEdit1 (редактор для введення цілого числа) із закладки Samples. В інспекторі об'єктів змінимо нижню межу діапазону можливих значень MinValue (мінімальне значення) на 1, тому що довжина відрізка не може бути від’ємною і дорівнювати нулю, а також верхню межу діапазону можливих значень MахValue на 20, тому що зображення відрізка більшої довжини вийде за межі області Image1. Також можливі зміни шрифту (властивість Font);

 

3. Дві кнопки із зображенням класу TВitBtn із закладки Additional для управління роботою створеної програми. Очистимо властивість Caption. Відмінна риса піктографічної кнопки – властивість Glуph, за допомогою якої визначається растрове зображення, що малюється на поверхні кнопки. До складу постачання Delphi входить безліч малюнків, розроблених спеціально для розміщення в цих кнопках (для версій Delphi 4 і 5 ці малюнки розташовані в папці Program Files \ Common Files \ Borland Share \ Images \ Buttons, для інших версій – у папці Images \ Buttons каталогу розміщення Delphi). Для кнопки з покажчиком «назад» змінимо значення властивості Enabled на False, чим заборонимо компонент для вибору;

 

4. Button1 (кнопка) із закладки Standard для здійснення завершення роботи програми. Для неї змінимо заголовок (властивість Caption) на Вихід. Шрифт напису на кнопці може змінювати свій стиль і розмір, але компонент ігнорує зміну його кольору.

 

На нижній панелі області виводу коментарів до побудови із закладки Standard помістимо компонент класу TMemo, призначений для відображення значного за розмірами тексту. Його властивості змінимо відповідно до наведеної нижче табл. 2.3.


Таблиця 2.3. Властивості багаторядкового редактора Memo1

Властивість Значення Коментар
Align alClient Заповнення всієї області панелі
Font.Name Garamond Тип шрифту
Font.Size   Розмір шрифту
Lines   Містить рядки тексту
ReadOnly True Тільки читання (заборона зміни тексту в працюючій програмі)

 

Усю панель області побудови зображення займе компонент класу TImage із закладки Additional, коли для його властивості Align буде встановлене значення alClient.

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

 

Var a, i: Integer; // оголошення змінних цілого типу

x, y: Integer;

 

Повернемося у вікно форми і створимо процедуру реагування редактора числа SpinEdit1 на подію зміни його значення, двічі клацнувши на ньому. На екрані з’явиться вікно програмного коду з заготовкою процедури SpinEdit1Change, куди введемо наступний фрагмент програми:

 

procedure TForm1.SpinEdit1Change(Sender: TObject);

Begin

i: =0; // обнуління ключа вибору

BitBtn2.Enabled: =False; // заборона компонента “назад” для // вибору

BitBtn1.Enabled: =True; //дозвіл компонента “уперед” для вибору

End;

Демонстрацію розподілу відрізка навпіл розбито на кілька етапів, які по черзі буде викликати кнопка «Уперед» (BitBtn1) на формі. Тому необхідно створити відповідну кількість підпрограм, кожна з яких буде реалізувати окремий етап.

Перший етап побудови – відкладання відрізка на площині. Для реалізації цієї частини введемо наступний фрагмент програми:

procedure Vidrizok;

Begin

a: =Form1.SpinEdit1.Value; // встановлюємо довжину відрізка

a: =10*a; // масштабування довжини відрізка для одержання

// більш великого зображення елементів малюнка

x: =Form1.Image1.Width div 2;

y: =Form1.Image1.Height div 2; // встановлюємо координати точки,

//що розташована у центрі малюнка, від якої будемо будувати

With Form1.Image1.Canvas do begin

pen.Width: =3; // зміна товщини пера

pen.Style: =psSolid; // стиль пера – суцільна лінія

Brush.Color: =clWhite; // колір пензля - білий

FillRect(ClipRect); // очищення картинки

MoveTo(x-a, y); // переміщення пера в початок відрізка

LineTo(x+a, y); // малювання відрізка

 

Font.Size: =22; // зміна розміру шрифту

TextOut(x-a-15, y+2, 'A'); // вивід букви А

TextOut(x+a+3, y+2, 'B'); // вивід букви В

pen.Width: =1; // зміна товщини пера

End;

Form1.Memo1.Text: ='За допомогою лінійки відкладемо відрізок ='+ IntToStr(Form1.SpinEdit1.Value)+'см.'; // вивід коментарю

// в поле Memo1.

end;

Результатом роботи підпрограми procedure Vidrizok буде екранна форма (рис. 2.2).

 

Рис. 2.2. Етап 1: побудова відрізка

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

procedure Zarubka1;

Begin

Form1.Image1.Canvas.pen.Style: =psDot; // стиль пера - пунктир

Form1.Image1.Canvas.Arc(round(x-7*a/3), round(y-4*a/3),

round(x+a/3), round(y+4*a/3), round(x-a), round(y+4*a/3),

round(x-a), round(y-4*a/3)); // дуга

Form1.Memo1.Text: ='Iз точки А розхилом циркуля завбільшки за '+

'половину відрізка зробимо першу зарубку'; // вивід коментаря

end;

Слід відзначити, що в даному випадку замість функції заокруглення round можна використати операцію цілочислового ділення div, оскільки результати ділення числа на 3 будуть еквівалентні. Так, наприклад, замість round(x-7*a/3) можна записати x-7*a div 3, і так далі.

Результат роботи двох підпрограм Vidrizok і Zarubka1 представлений на рис. 2.3.

 

Рис. 2.3. Етап 2: побудова першої зарубки

Для реалізації побудови другої зарубки використовується наступна підпрограма, яка за заданими координатами викреслює дугу на канві об’єкта Image1 і виводить коментар до побудови у вікно текстового редактора Memo1:

procedure Zarubka2;

Begin

Form1.Image1.Canvas.Arc(x-a div 3, y-4*a div 3,

x+7*a div 3, y+4*a div 3, x+a, y-4*a div 3,

x+a, y+4*a div 3); // дуга

 

Form1.Memo1.Text: ='Аналогічно з точки В розхилом циркуля '+ 'завбільшки за половину відрізка зробимо другу зарубку';

// вивід коментарю

end;


В результаті послідовної роботи трьох вищенаведених процедур отримаємо екранну форму (рис. 2.4).

 

Рис. 2.4. Етап 3: побудова другої зарубки

На четвертому етапі побудуємо пряму лінію, що проходить через точки перетинання двох створених дуг та перетинає відрізок АВ. Варто відзначити, що ця лінія є перпендикуляром до відрізку. Це можна використати для створення інших програм реалізації задач на побудову. Отже, програмний код четвертого етапу побудови буде мати такий вигляд:

procedure Linija;

Begin

Form1.Image1.Canvas.MoveTo(x, y-2*a); // зміна положення пера

Form1.Image1.Canvas.LineTo(x, y+2*a); // малювання лінії

 

Form1.Memo1.Text: ='Поєднаємо прямою точки перетину двох дуг'; // коментар до зображення

end;

Таким чином, на канві об’єкта Image1 прорисується лінія за заданими координатами, яка точкою перетину ділить відрізок навпіл, а у багаторядковому полі Memo1 виведеться коментар до побудови.

Рисунок 2.5 відображає результат спільної роботи чотирьох наведених підпрограм.

Рис. 2.5. Етап 4: побудова прямої лінії

 

На останньому, п'ятому етапі, точкою позначимо середину відрізка, закінчивши, таким чином, розподіл відрізка навпіл. Але точка в один піксель є замалою, щоб її побачити, тому для позначення середини відрізка викреслимо на канві об’єкта Image1 зафарбоване (у даному випадку червоним) коло, центр якого співпадає з точкою перетину відрізка та прямої лінії. Для цього введемо наступну частину програмного коду:

procedure Tochka;

Begin

Form1.Image1.Canvas.Pen.Style: =psSolid; // стиль пера – // суцільна лінія

Form1.Image1.Canvas.Brush.Color: =clRed; //колір пензля -червоний

Form1.Image1.Canvas.Ellipse(x-5, y-5, x+5, y+5); // малювання точки

// у вигляді зафарбованого кола

Form1.Memo1.Text: ='Точка перетину отриманої прямої і даного '+ 'відрізка є його серединою'; // коментар

end;

На рис. 2.6 маємо результат повної побудови розподілу відрізка навпіл.

 

Рис. 2.6. Етап 5: промальовування точки, що є серединою даного відрізка

 

Повернемося до вікна форми і двічі клацнемо кнопкою з позначенням «уперед», у результаті чого на екрані з'явиться вікно програмного коду зі створеною процедурою BitBtn1Click. Дана кнопка повинна здійснювати виклик підпрограм малювання окремих елементів малюнка та виводу коментарів до них, наведених вище. При цьому елементи малюнка будуть накладатися, а коментарі змінюватися відповідно етапу. Це реалізується за допомогою оператора вибору Case. Далі введемо наступний фрагмент програмного коду:

 

procedure TForm1.BitBtn1Click(Sender: TObject);

Begin

i: =i+1; // обчислення значення ключа вибору

Case i of

1: Vidrizok; // виклик підпрограми малювання відрізка

2: Begin BitBtn2.Enabled: =True; // дозвіл компонента “назад” // для вибору

Zarubka1; // виклик підпрограми малювання першої зарубки

end;

3: Zarubka2; // виклик підпрограми малювання другої зарубки

4: Linija; // виклик підпрограми малювання прямої лінії

5: begin Tochka; // виклик підпрограми малювання точки

BitBtn1.Enabled: =False; // заборона компонента “уперед” // для вибору

end;

end;

end;

 

Далі повернемося до вікна форми і двічі клацнемо кнопкою з позначенням «назад», у результаті чого на екрані з'явиться вікно програмного коду зі створеною процедурою BitBtn2Click. Ця кнопка повинна здійснювати виклик підпрограм малювання окремих елементів малюнка, але щораз заново промальовуючи всі елементи, крім останнього, що також реалізується за допомогою оператора вибору Case. Коментарі також будуть змінюватися відповідно до етапу побудови. Введемо наступний фрагмент програми:

procedure TForm1.BitBtn2Click(Sender: TObject);

Begin

i: =і-1; // обчислення значення ключа вибору

Case i of

1: begin Vidrizok; // виклик підпрограми малювання відрізка

BitBtn2.Enabled: =False; // заборона компонента “назад” // для вибору

end;

2: begin Vidrizok; // виклик підпрограми малювання відрізка

Zarubka1; // виклик підпрограми малювання першої зарубки

end;

3: begin Vidrizok; // виклик підпрограми малювання відрізка

Zarubka1; // виклик підпрограми малювання першої зарубки

Zarubka2; // виклик підпрограми малювання другої зарубки

end;

 

4: begin Vidrizok; // виклик підпрограми малювання відрізка

Zarubka1; // виклик підпрограми малювання першої зарубки

Zarubka2; // виклик підпрограми малювання другої зарубки

Linija; // виклик підпрограми малювання прямої лінії

BitBtn1.Enabled: =True; // дозвіл компонента “уперед” // для вибору

end;

End;

End;

 

Наступна процедура створена шляхом подвійного натискання на кнопку Вихід і реалізує закриття програми:

 

procedure TForm1.Button2Click(Sender: TObject);

Begin

close;

end;

end.

 

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

Далі наведено варіанти індивідуальних завдань, при виконанні яких стане у нагоді розглянутий приклад побудови ділення відрізка навпіл.


 

2.4. Варіанти індивідуальних завдань

 

1. Розробити навчальну програму побудови трикутника за двома сторонами й кутом між ними.

2. Розробити навчальну програму побудови трикутника за стороною й двома прилеглими кутами.

3. Розробити навчальну програму побудови трикутника із заданими сторонами.

4. Розробити навчальну програму побудови трапеції із заданими сторонами.

5. Розробити навчальну програму побудови рівнобічної трапеції за основою, бічною стороною і кутом між ними.

6. Розробити навчальну програму побудови ромба із заданою стороною й радіусом вписаного кола.

7. Розробити навчальну програму побудови трикутника за двома відрізками, на які висота трикутника розділила основу, і за медіаною до бічної сторони.

8. Розробити навчальну програму побудови паралелограма за сторонами й діагоналлю.

9. Розробити навчальну програму побудови паралелограма за сторонами й кутом між ними.

10. Розробити навчальну програму побудови описаного кола для рівностороннього трикутника за заданою стороною.

11. Розробити навчальну програму побудови ромба за стороною й кутом.

12. Розробити навчальну програму побудови вписаного кола для рівностороннього трикутника за заданою стороною.


 

СПИСОК ЛІТЕРАТУРИ

 

1. Андриенко В.Н., Мичкивский С.Н. Проектирование задач в среде разработки программного обеспечения Delphi: Учебное пособие / Донецкий национальный университет.– Донецк: ООО «Юго-Восток, Лтд», 2003.–222с.

2. Архангельский А.Я. Программирование в Delphi 4. – М.: ЗАО «Издательство БИНОМ», 1999. – 768 с.

3. Бежанова М.М., Москвина Л.А., Потосин И.В. Практическое программирование: Визуальное программирование в среде Delphi. – М.: Логос, 2001. – 224 с.

4. Бобровский С.И. Delphi 5: Начальный курс. – М.: ДЕСС: Инфорком-Пресс, 1999. – 272 с.

5. Калверт Ч. Delphi 4. Энциклопедия пользователя: Пер. с англ. / Чарлз Калверт. – К.: ДиаСофт, 1998. – 800с.

6. Орлик С.В. Секреты Delphi на примерах. – М.: БИНОМ, 1996. – 316 с.

7. Фаронов В.В. Delphi 4: Учебный курс. – М.: Нолидж, 1999. – 464 с.

8. Фаронов В.В. Delphi 5: Учебный курс. – М.: Нолидж, 2000. – 464 с.

9. Фаронов В.В. Delphi 6: Учебный курс. – СПб.: Питер, 2002. – 512 с.


 

Навчальне видання

МЕТОДИЧНІ ВКАЗІВКИ ТА ВАРІАНТИ ІНДИВІДУАЛЬНИХ ЗАВДАНЬ

за темою “Графічний інструментарій Delphi”

курсу “Інформатика та програмування”

для студентів спеціальності “Математика”

Укладачі Рибалко Леонід Олексійович

Шевцов Дмитро Валерійович

Шевцова Олена Володимирівна

 

 

Редактор Л.Х.Соловйова

 

 

 

Планова позиція № 51

 

 

Підписано до друку 01.01.2006 р.

Формат 60´ 90/ 1/16. Папір друкарський.

Офсетний друк.

Умовн.-друк. арк. 2, 3.

Тираж 100 прим. Замовлення № ___

 

 

Видавництво Донецького національного університету,

83055, м. Донецьк, вул. Університетська, 24

 

Надруковано: Лабораторія комп’ютерних технологій

Донецького національного університету,

83055, м. Донецьк, вул. Університетська, 24






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.