Мета роботи: Вивчити основні типи даних, що використовуються у середовищі Microsoft Visual Studio, ознайомитись операторами мови C#. Отримати практичні навики використання базових компонентів.
Найбільш фундаментальна із усіх концепцій програмування – концепція змінної. Змінними можна назвати іменовані області пам’яті для зберігання даних. Значення змінної не є постійним і може з часом змінюватись. Змінні здатні зберігати дані довільного типу. Для кожної змінної встановлюється визначений тип, який указується при оголошенні змінної. Тип змінної відіграє дуже важливе значення, особливо в типізованих мовах програмування, таких як C#. На основі типу визначається набір дій, які можуть виконуватись по відношенню до даних, що зберігаються у змінній.
Перед виконанням будь-яких дій над змінною її необхідно оголосити. Для оголошення змінної потрібно спочатку вказати її тип і через пробіл ім’я. Наприклад:
int student;
де int – цілочисельний тип даних, а student – ім’я змінної. Можна також одночасно оголошувати декілька змінних:
int a, b, c;
Перед використанням змінні необхідно ініціалізувати. Термін ініціалізація означає присвоєння змінній початкового значення. Це можна зробити за допомогою інструкції присвоєння. Можна також присвоїти змінній початкове значення одночасно з її оголошенням. Для цього досить після ім’я змінної вказати знак «=» і її значення. Загальний формат ініціалізації змінної має такий вигляд:
int a = 2;
int b;
b = 1;
C# дозволяє налаштовувати цілий тип даних для конкретних випадків. Усі цілочисельні типи C# показані в табл. 2.1.

Цілих чисел достатньо для більшості обчислень, проте для деякої множини розрахунків необхідні дробові числа. Список типів, що підтримують цю множину значень, перераховано в табл. 2.2.
Таблиця 2.2. Розміри та діапазони представлень типів
змінних з плаваючою крапкою
Тип
| Системний тип
| Роз-мір, байт
| Діапазон значень
| Точ-
ність, цифр
| Приклад використання
|
float
| System.Single
|
| Від 1.5∙10-45 до 3.4∙1038
| 6-7
| float f =
-1.2F;
|
double
| System.Double
|
| Від 5.0∙10-324 до 1.7∙10308
| 15-16
| double d = 1.2;
|
Зауважимо, що змінним з плаваючою крапкою притаманні проблеми, пов’язані з округленням через недостатню точність, а цілі змінні не можуть представити числа з дробовою частиною. Тому в C# є ще один тип decimal, що використовується для обчислень, у яких неприпустимо округлення результату. Розрахунки з використанням типу decimal більш точні, ніж при використанні типів з плаваючою крапкою, проте допустимі значення мають менший діапазон.
Таблиця 2.3. Розмір і діапазон представлень
типу з фіксованою крапкою
Тип
| Системний тип
| Діапазон значень
| Точність, цифр
| Приклад
|
Decimal
| System.Decimal
| Від 1.0∙10-28 до 7.9∙1028
| 28-29
| decimal dm = 100M;
|
Важливу роль у програмуванні відіграє логічний тип bool. Змінні цього типу можуть набувати лише двох значень – true або false. Дані цього типу дуже зручні при написанні конструкцій для прийняття рішень. Зауважимо, що не існує жодного способу перетворення змінних типу bool у змінні іншого типу. Тобто не можна перетворити bool у int (наприклад, щоб false перетворилось у 0)
Таблиця 2.4. Логічний тип
Тип
| Системний тип
| Розмір, байт
| Діапазон значень
| Приклад використання
|
Bool
| System.Boolean
|
| true або false
| bool yn = false;
|
Програми можуть працювати як з цифрами, так і з символьними даними. Мова C# розглядає літери як окремі символи типу char і рядки символів типу string.
Оператором називають певну інструкцію, написану мовою програмування, яка інформує комп’ютер про необхідність виконання певної дії. Усю множину арифметичних операторів можна поділити на кілька груп:
- прості арифметичні оператори;
- оператори присвоєння;
- спеціальні оператори, притаманні лише мовам програмування.
Оператор присвоєння бінарний, тобто він спершу обчислює значення виразу в правій частині, і записує його в змінну, що знаходиться в лівій частині. Наприклад:
n = 10;
m = n = 11;
Якщо вказано кілька операторів присвоєння, то вони виконуються справа наліво, тобто в наведеному прикладі правий оператор присвоєння збереже значення 11 у змінній n, після чого лівий оператор присвоєння зберігає значення n у змінній m.
Таблиця 2.5. Прості оператори
Оператор
| Значення
|
-(унарний)
| Зміна знаку
|
*
| Множення
|
/
| Ділення
|
+
| Додавання
|
-(бінарний)
| Віднімання
|
%
| Залишок від ділення
|
Більшість вищевказаних операторів називаються бінарними, оскільки вони виконуються над двома значеннями: одне з них знаходиться зліва від оператора, а інше – справа. Окремим випадком є лише унарний мінус, наприклад:
int a = 5;
int c = -a;
Оператор інкременту. Серед усіх виконуваних у додатках додавань, найбільш розповсюджене є додавання 1 до змінної.
a = a + 1;
Проте мова C# має скорочений варіант цієї операції:
a++;
Даний оператор має два види використання: префіксний (++a) та постфіксний (a++), між якими є певна різниця. У префіксній формі спочатку змінюється операнд, а потім його значення стає результуючим значенням виразу, а в постфіксній формі значенням виразу є вихідне значення операнда, після чого він змінюється. Наприклад:
int i = 1;
int j = ++i;
i = 1;
int z = i++;
У даному прикладі значення j буде дорівнювати 2, а z = 1. У мові C# аналогічно існують оператори декрименту (a-- та -–a), які використовуються для заміни виразу a = a - 1. Вони працюють за такою ж схемою, як і оператори інкременту.
Математичні функції, які часто використовуються у виразах, реалізовані у класі Math, який визначений у просторі імен System. Перелік математичних функцій та їхній синтаксис наведено в таблиці 2.6.
Таблиця 2.6. Основні поля та методи класу Math
Ім’я
| Синтаксис
| Результат
| Опис
|
|
|
|
|
Abs
| Abs(x)
| Переван-тажений
| Модуль числа х
|
Acos
| Acos(double x)
| double
| Повертає кут, косинус якого дорівнює х
|
Asin
| Asin (double x)
| double
| Повертає кут, синус якого дорівнює х
|
Atan
| Atan (double x)
| double
| Повертає кут, тангенс якого дорівнює х
|
Atan2
| Atan2 (double x, double y)
| double
| Кут, тангенс кута якого є результатом ділення x на y
|
BigMul
| BigMul (int x, int y)
| long
| Добуток двох 32-бітних чисел x на y
|
Ceiling
| Ceiling (double x)
| double
| Округлення до більшого цілого
|
Cos
| Cos (double x)
| double
| Косинус кута х
|
Cosh
| Cosh (double x)
| double
| Гіперболічний косинус
|
DivRem
| DivRem (double x, double y, out rem)
| Переван-тажений
| Ділення x на y, остача від ділення яких записується у вихідний параметр rem
|
E
| E
| double
| Число Ейлера (база натурального логарифму число е)
|
Exp
| Exp (double x)
| double
| Обчислення
|
Floor
| Floor (double x)
| double
| Округлення до меншого цілого
|
IEEERemainder
| IEEERemainder (double x, double y)
| double
| Остача від ділення x на y
|
Log
| Log (double x)
| double
| Натуральний логарифм ( )
|
Log10
| Log10 (double x)
| double
| Десятковий логарифм
|
Max
| Max (x, y)
| Переван-тажений
| Максимум з чисел x та y
|
Min
| Min (x, y)
| Переван-тажений
| Мінімум з чисел x та y
|
PI
| PI
| double
| Значення числа
|
Pow
| Pow (double x, double y)
| double
| Піднесення числа x в степінь y
|
Round
| Round (x)
| Переван-тажений
| Проводить округлення числа х до найближчого цілого або вказаної кількості десяткових знаків
|
Sign
| Sign
| Переван-тажений
| Повертає значення, яке визначає знак числа
|
Sin
| Sin (double x)
| double
| Синус кута x
|
Sinh
| Sinh (double x)
| double
| Гіперболічний синус
|
Sqrt
| Sqrt (double x)
| double
| Квадратний корінь числа x
|
Tan
| Tan (double x)
| double
| Тангенс числа х
|
Tanh
| Tanh (double x)
| double
| Гіперболічний тангенс
|
Truncate
| Truncate (x)
| Переван-тажений
| Ціла частина числа
|
Зауваження.
1. Значення кутів задаються в радіанах.
2. Якщо метод перевантажений, то це значить, що існує кілька версій методу для різноманітних типів даних.
Розглянемо одні з найбільш використовуваних компонентів при розробці Windows-додатків у C#:
1) Button 
2) TextBox 
3) Label 
Елемент Button являє собою звичний для користувача елемент інтерфейсу – кнопку. При натисканні користувачем на неї виконується визначена наперед дія. У таблиці 2.7 наведені основні властивості компонента Button.
Таблиця 2.7. Властивості компонента Button
|
|
Name
| Ім’я компонента. Використовується у програмі для доступу до властивості компонента
|
Text
| Напис на кнопці
|
TextAlign
| Положення напису на кнопці. Напис може розміщуватись по центру (MiddleCenter), по лівому краю (MiddleLeft) та по правому краю (MiddleRight)
|
Font
| Установлює розмір шрифта для тексту, що відображається на кнопці.
|
FlatStyle
| Кнопка може бути стандартною (Standart), плоскою (Flat) або спливаючою (Popup)
|
Enabled
| Ознака доступності кнопки. Кнопка доступна, якщо значення властивості дорівнює True, та недоступна, якщо значення властивості дорівнює False
|
Visible
| Дозволяє заховати кнопку (False) або зробити її видимою (True)
|
Cursor
| Вид вказівника миші при позиціюванні вказівника на кнопці
|
Image
| Зображення на поверхні форми
|
ImageList
| Набір зображень, з яких можна обрати те, яке буде відображатись на поверхні кнопки. Для вказування значення властивості у форму додатка потрібно додати компонент ImageList
|
ImageIndex
| Номер (індекс) зображення з набору ImageList, яке відображається на кнопці
|
ToolTip
| Підказка, що з’являється поряд з вказівником миші при наведенні на кнопку. Щоб ця властивість була доступною, на форму потрібно додати властивість ToolTip
|
Елемент управління TextBox використовується для введення та відображення текстової інформації. У таблиці 2.8 перераховані його основні властивості:
Таблиця 2.8. Властивості компонента TextBox
|
|
Name
| Ім’я компонента
|
Text
| Текст, який знаходиться в полі редагування
|
BorderStyle
| Вид рамки компонента. Межа компонента може бути звичайною (Fixed3D), тонкою (FixedSingle) або відсутньою (None)
|
MaxLength
| Максимальна кількість символів, яку можна ввести в поле компонента
|
PasswordChar
| Визначає символ, що буде відображатися при введені пароля
|
Multiline
| Дозволяє (True) або забороняє (False) введення кількох рядків тексту
|
WordWrap
| Дозволяє автоматично переносити слова на новий рядок у багаторядковому текстовому полі
|
ReadOnly
| Дозволяє (True) або забороняє (False) редагування тексту
|
Lines
| Масив рядків, елементи якого містять текст, що знаходиться в полі редагування, якщо компонент знаходиться в режимі Multiline. Доступ до рядка здійснюється за номером. Рядки нумеруються з нуля
|
ScrollBars
| Задає видимі смуги прокрутки: Horizontal – горизонтальна; Vertical – вертикальна; Both – горизонтальна та вертикальна; None – жодної
|
Елемент управління Label використовується тільки для відображення вказаного тексту і не пристосований для отримання даних від користувача. Як правило, він використовується для виведення назв інших елементів керування. У таблиці 2.9 перераховані його властивості.
Таблиця 2.9. Властивості компонента Label
Властивість
| Опис
|
Name
| Ім’я компонента
|
Text
| Текст, що відображається
|
TextAlign
| Використовується для вирівнювання тексту
|
AutoSize
| Автоматично змінює розмір елемента, відповідно до довжини тексту, що відображається.
|
Розглянемо роботу з даними компонентами на прикладі. Нехай необхідно розробити додаток, який буде здійснювати операції додавання, віднімання, множення та ділення над двома числами та розраховувати результат.
Розпочнемо зі створення інтерфейсу. Для додавання елементу управління на форму, необхідно:
- Відкрити «Панель элементов»(CTRL+W,X).
- Обрати категорію (Наприклад «Стандартные элементы управления»).
- Обрати необхідний компонент і перетягнути його на форму.
Для реалізації поставленого завдання, додамо такі елементи:
- Поля для введення (елемент TextBox).
- Кнопки відповідно для виконання операцій.
- Декілька написів (елемент Label).
Після додавання відповідних елементів і здійснення форматування зовнішній вигляд форми набуде такого вигляду (рис. 2.1).

Рис. 2.1. Зовнішній вигляд форми
Після побудови інтерфейсу можна перейти до написання програмного коду. Для початку потрібно оголосити необхідні для роботи змінні, визначивши їх тип. Для реалізації поставленого завдання потрібні 3 змінні, перші дві з яких будуть зберігати значення, введені в поля «Число А» та «Число Б», а третя – результат обчислення. Отже, в коді програми (F7) до класу Form1 необхідно додати:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
double Result;
double Num1,Num2;
...
Після оголошення змінних можна перейти до реалізації операцій над числами. При натисканні на кнопку виникає подія Click. Для додавання коду обробки цієї події можна:
1. У режимі конструктора, двічі клікнути відповідний елемент Button.
2. В режимі конструктора виділити необхідний об’єкт. У вікні «Свойства» обрати пункт «События»
. Далі обрати потрібну подію (в нашому випадку Click) і двічі клікнути в полі поруч з назвою події. Зауважимо, що при використанні другого способу, для обробки події можна обрати зі спадного списку вже існуючий метод. Після додавання обробника виконання події до програми додасться наступний код, у який можна додавати різні оператори, що будуть виконуватися при натисканні на кнопку:
private void btnSum_Click (object sender, EventArgs e)
{
}
Після того, як користувач введе значення чисел, їх необхідно записати в змінні. Зауважимо, що напряму записати значення з TextBox у змінну числового типу неможливо, оскільки тип значення в TextBox завжди текстовий. У C# є спеціальний клас Convert, який дозволяє конвертувати значення з одного типу в інший. Його можна використовувати так:
double zminna = Convert.ToDouble(textBox1.Text);
У нашому випадку треба додати:
private void btnSum_Click (object sender, EventArgs e)
{
Num1 = Convert.ToDouble(textBox1.Text);
// Запис 1 числа в змінну
Num2 = Convert.ToDouble(textBox2.Text);
// Запис 2 числа в змінну }
У таблиці 2.10 наведено перелік деяких методів класу Convert, які можуть бути використані для конвертування типів.
Таблиця 2.10. Методи класу Convert
ToByte
| Перетворює значення вказаного аргументу в еквівалентне 8-бітове ціле число без знака
|
ToDateTime
| Перетворює задане рядкове представлення дати в еквівалентне значення типу дати і часу
|
ToDouble
| Перетворює значення вказаного аргументу в еквівалентне число з плаваючою крапкою
|
ToString
| Перетворює вказане значення в його еквівалентне текстове представлення
|
Після зчитування даних, уведених користувачем, перейдемо до знаходження результату відповідної операції. Наприклад, для знаходження суми доданків додамо такий код:
Result = Num1 + Num2;
Після обчислення необхідно вивести дане значення в поле з результатом:
textBox3.Text = Convert.ToString(Result);
У результаті код для знаходження суми двох чисел буде мати такий вигляд:
private void btnSum_Click(object sender, EventArgs e)
{
Num1 = Convert.ToDouble(textBox1.Text);
// Запис 1 числа в змінну
Num2 = Convert.ToDouble(textBox2.Text);
// Запис 2 числа в змінну
Result = Num1 + Num2;
textBox3.Text = Convert.ToString(Result);
}
Аналогічно можна запрограмувати інші операції.
Завдання для самостійної роботи
Розробити форму для перерахунку валют. Вхідними параметрами є такі величини:
· Кількість доларів, яку клієнт хоче обміняти.
· Курс долара відносно гривні.
Вихідним результатом повинна бути сума гривень, яку має отримати клієнт.
Додатково необхідно реалізувати кнопку очищення всіх полів.