Приклад використання делегату для виклику анонімного методу. Розробка програми знаходження площі трикутника за формулою Герона
Зміст
- Умова задачі
- Математична постановка задачі
- Виконання
- Зв’язані теми
Пошук на інших ресурсах:
Умова задачі
Розробити додаток, що знаходить площу трикутника за формулою Герона. В додатку реалізувати виклик анонімного методу з допомогою делегату. Метод повинен здійснювати обчислення площі трикутника. Додаток реалізувати в Microsoft Visual Studio за шаблоном Windows Forms Application.
⇑
Математична постановка задачі
Формула Герона має вигляд:
де
- S – площа трикутника;
- a, b, c – довжини сторін трикутника;
- p – півпериметр, який обчислюється за формулою:
⇑
Виконання
1. Створення проекту
Завантажити систему Microsoft Visual Studio. Створити проект за шаблоном Windows Forms Application. Зберегти проект в довільній папці, наприклад:
D:\Programs\C_Sharp\TrainDelegates03
Більш детальний приклад створення та збереження проекту за шаблоном Windows Forms Application описується в темі:
У результаті буде створена нова форма додатку, як показано на рисунку 1.
Рис. 1. Форма додатку після створення проекту
⇑
2. Розробка форми додатку
2.1. Розміщення елементів управління на формі
Розмістити на формі такі елементи управління:
- 4 елементи управління типу Label. У результаті буде створено 4 об’єкти (змінні) з іменами label1, label2, label3, label4;
- 1 елемент управління типу Button. Буде створено об’єкт з іменем button1;
- 3 елементи управління типу TextBox. У результаті буде створено 3 об’єкти з іменами textBox1, textBox2, textBox3.
Після розміщення елементів управління, форма додатку матиме приблизний вигляд, як показано на рисунку 2.
Рис. 2. Форма додатку після розміщення елементів управління
⇑
2.2. Налаштування елементів управління
Більш детальний приклад того, як здійснюється налаштування елементів управління типів Button, Label, TextBox описано в темі:
Налаштувати такі властивості елементів управління:
- в елементі управління label1 властивість Text = “a = “ (label1.Text = “a = “);
- label2.Text = “b = “;
- label3.Text = “c = “;
- в елементі управління button1 властивість Text = “Обчислити” (button1.Text = “b = “);
- в об’єкті, що відповідає формі Form1, властивість Text = “Площа трикутника”.
Рис. 3. Головна форма додатку після налаштування
⇑
3. Написання програмного коду
Для написання програмного коду потрібно перейти у файл Form1.cs, що відповідає головній формі додатку (програми).
3.1. Оголошення типу делегату
У тілі класу форми Form1 оголосити тип делегату:
// оголошення типу делегату delegate float SquareTriangle(float a, float b, float c);
Про оголошений тип делегату можна сказати наступне:
- тип делегату має ім’я SquareTriangle;
- делегат цього типу буде отримувати три параметри типу float і повертати значення типу float.
Після оголошення типу, текст модуля “Form1.cs” наступний:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TrainDelegates03 { public partial class Form1 : Form { // оголошення типу делегату delegate float SquareTriangle(float a, float b, float c); public Form1() { InitializeComponent(); } } }
⇑
3.2. Програмування обробника події кліку на кнопці “Обчислити”
Детальний приклад програмування події кліку на кнопці описано в темі:
Текст обробника події кліку на кнопці button1:
private void button1_Click(object sender, EventArgs e) { // Оголошення делегату з іменем ST, що обчислює площу трикутника SquareTriangle ST; ST = delegate(float a, float b, float c) { float s, p, d; p = (a + b + c) / 2.0f; d = p * (p - a) * (p - b) * (p - c); if (d < 0) return -1.0f; s = (float)Math.Sqrt(p * (p - a) * (p - b) * (p - c)); return (float)s; }; // взяти значення довжин a, b, c float aa, bb, cc; aa = (float)Convert.ToDouble(textBox1.Text); bb = (float)Convert.ToDouble(textBox2.Text); cc = (float)Double.Parse(textBox3.Text); // і так можна конвертувати // виклик делегату float area; area = (float)ST(aa, bb, cc); // вивід результату на форму label4.Text = "S = " + area.ToString(); }
Пояснимо деякі фрагменти коду. В обробнику події оголошується делегат з іменем ST типу SquareTriangle. Делегат ST посилається на анонімний метод, який отримує вхідними 3 параметри типу float. В анонімному методі здійснюється обчислення площі трикутника за формулою Герона. Результат (площа) повертається з допомогою оператора return.
Довжини сторін, які вводяться з клавіатури (елементи управління textBox1, textBox2, textBox3) розміщуються у змінних aa, bb, cc. Згідно синтаксису С#, змінні, що оголошені в анонімному методі мають видимість на весь блок коду обробника події button1_Click(). Тому, не може бути однакових імен в обробнику події та анонімному методі, що описаний в цьому обробнику. Тобто, оголошення
float aa, bb, cc;
є вірним. Якщо в тексті обробника події спробувати написати
float a, b, c;
то вийде помилка компіляції. Тому що такі імена вже використовуються в анонімному методі.
⇑
3.3. Текст модуля Form1.cs
Весь програмний код модуля Form1.cs має вигляд:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace TrainDelegates03 { public partial class Form1 : Form { // оголошення типу делегату delegate float SquareTriangle(float a, float b, float c); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Оголошення делегату з іменем ST, що обчислює площу трикутника SquareTriangle ST; ST = delegate(float a, float b, float c) { float s, p, d; p = (a + b + c) / 2.0f; d = p * (p - a) * (p - b) * (p - c); if (d < 0) return -1.0f; s = (float)Math.Sqrt(p * (p - a) * (p - b) * (p - c)); return (float)s; }; // взяти значення довжин a, b, c float aa, bb, cc; aa = (float)Convert.ToDouble(textBox1.Text); bb = (float)Convert.ToDouble(textBox2.Text); cc = (float)Double.Parse(textBox3.Text); // і так можна конвертувати // виклик делегату float area; area = (float)ST(aa, bb, cc); // вивід результату на форму label4.Text = "S = " + area.ToString(); } } }
⇑
4. Запуск програми на виконання
Після цього можна запускати програму на виконання та тестувати її роботу.
⇑
Зв’язані теми
- Поняття делегату. Оголошення типу делегату. Використання делегатів у програмі. Групове перетворення методів
- Анонімні функції. Анонімні методи. Повернення значення. Передача параметрів
- Приклади передачі масивів, структур, класів анонімному методу
⇑