Виведення грецьких букв, символів математичних операторів. Кодова таблиця Unicode

Напишемо програму, яка запрошує користувача ввести радіус R, щоб обчислити довжину кола. При програмуванні цього завдання довжину кола в мітці Label назвемо грецькою буквою β, наведемо формулу для обчислень з грецької буквою π = 3,14. Результат обчислень виведемо в діалогове вікно MessageBox також з грецькою буквою.

Після традиційного запуску Visual Studio 2010 і вибору дизайну Windows Forms Application  перетягнемо в форму дві мітки Label, текстове поле TextBox і командну кнопку Button. Подивіться на рисунок - так повинна виглядати форма після виконання цього завдання.

 

Примітка

Зберігання текстових даних в пам'яті ЕОМ передбачає кодування символів за деяким принципом. Таких кодувань кілька. Кожному кодуванню відповідає своя таблиця символів. У таких таблицях кожному осередку відповідають номер в таблиці і символ. Ми згадаємо кодові таблиці: ASCII, ANSI Cyrillic (інша назва цієї таблиці - Windows-1251), а також Unicode.

Перші дві таблиці є однобайтовими, тобто кожному символу відповідає 1 байт даних. Оскільки в 1 байті - 8 бітів, байт може приймати 256 різних станів, цим станам можна поставити у відповідність 256 різних символів. Так, в таблиці ASCII символи від 0 до 127 (базова таблиця) кодують англійські букви, цифри, розділові знаки, символи керування. Символи від 128 до 255 (розширена таблиця) кодують російські букви і символи псевдографіки. Деякі з цих символів відповідають клавішам IBM-сумісних комп'ютерів.

Цю таблицю ще називають "ДОСівскою" за іменем операційної системи MS-DOS, де вона застосовується. Таке кодування зустрічається також іноді у деяких веб-сторінок.

В операційній системі Windows використовується переважно таблиця ANSI (Windows-1251). Базові символи з кодами від 0 до 127 в таблицях ANSI і ASCII збігаються, а розширені - ні. Тобто українські літери в цих таблицях знаходяться в різних місцях. Через це виникають непорозуміння. В ANSI немає символів псевдографіки. ANSI Cyrillic - інша назва кодової таблиці Windows 1251.

Існує також багатобайтових стандарт Unicode. Тут один символ кодується двома байтами. Розмір такої таблиці кодування  65 536 символів. Кодова таблиця Unicode включає в себе практично всі сучасні писемності. Хіба що, тут немає старослов'янських літер. Коли в текстовому редакторі MS Word ми виконуємо команду Вставка | Символ, то вставляємо символ з таблиці Unicode. Також в Блокноті можна зберігати файли в кодуванні Unicode: Зберегти як | Кодування Юнікод. Розмір файлу при збереженні в Блокноті текстів, що містять символи Unicode, виявиться рівно в два рази більшим.

 Виведення грецьких букв в мітку Label1 і в діалогове вікно MessageBox можна здійснити, наприклад, таким шляхом. В текст програми через буфер обміну вставляємо грецькі літери з текстового редактора MS Word. Оскільки за замовчуванням Visual Studio 2010 зберігає VB-файли в форматі Unicode, в принципі таким чином можна програмувати виведення грецьких букв і інших символів на форму і на інші елементи управління.

Більш технологічно піти іншим шляхом, а саме - вставляти подібні символи за допомогою функції Convert.ToChar, а на вхід цієї функції подавати номер символу в таблиці Unicode. В цьому випадку, навіть якщо H-файл буде збережений в традиційній для Блокнота кодуванні ANSI, програма відпрацює коректно.

Порада

Номер символу в таблиці Unicode легко з'ясувати, вибравши в редакторі MS Word меню Вставка | Символ. У таблиці, слід знайти цей символ і відповідний йому код в шістнадцятковому представленні.

Щоб перевести шістнадцяткове подання в десяткове, слід перед шістнадцятковим числом поставити &H. Наприклад, після виконання оператора n = &H3B2 в змінну n буде записано десяткове число 946. На цьому місці в таблиці Unicode розташована грецька буква β. Саме таким чином запрограмована дана задача:

 Public Class Form1

    'Програма знаходить довжину кола за його радіусом

    'та виводить його значення використовуючи грецькі літери

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                            Handles MyBase.Load

        Me.Text = "Грецькі літери"

        Me.Font = New Font("Times New Roman", 12.0F)

        Button1.Text = "Обчислити"

        Label1.Text = String.Format("Знайдемо довжину кола: " + vbCrLf + _

                                     "{0} = 2{1}{2}{1}R," + vbCrLf + _

                                     " де {2}={3}", Convert.ToChar(&H3B2), _

                                     Convert.ToChar(&H2219), Convert.ToChar(&H3C0), Math.PI)

        ' Тут: 0=бета, 1 — точка, 2 — Пі, 3 — число Пі

        Label2.Text = "Введіть радіус R: "

        TextBox1.Clear()

    End Sub

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                                Handles Button1.Click

        'Оголосимо змінну для радіусу кола

        Dim R As Single

        'Перевіримо чи є введене значення числом

        Dim число = Single.TryParse(TextBox1.Text, System.Globalization.NumberStyles.Number, _

                                 System.Globalization.NumberFormatInfo.CurrentInfo, R)

        'Якщо введене не число, виводимо повідомлення та виходимо з процедури

        If число = False Then

            MessageBox.Show("Потрібно вводити числа!", "Помилка введення", _

                              MessageBoxButtons.OK, MessageBoxIcon.Error)

            Exit Sub

        End If

        'Обчислимо довжину кола

        Dim beta = 2 * Math.PI * R

        'Виведемо знайдене значення у вікно виведення:

        MessageBox.Show(String.Format("Довжина кола {0}={1:F4}", Convert.ToChar(&H3B2), beta), _

                        "Грецька літера")

        ' &H3B2 — грецька літера бета

    End Sub

End Class

 Як видно з програмного коду, при обробці події завантаження форми ми задали для форми шрифт Times New Roman, 12 пунктів - цей шрифт буде поширюватися на всі елементи управління на формі, тобто на текстове поле, мітку і командну кнопку. Далі, використовуючи метод String.Format, ініціалізували властивість Text мітки Label1. Різні шістнадцяткові номера відповідають грецьким буквам і арифметичній операції "помножити", в ініціалізації рядка бере участь також константа π = 3,14. Її більш точне значення отримуємо з Math.PI. Константу vbCrLf використовуємо для перенесення тексту на новий рядок.

Обробляючи подію button1_Click (клацання на кнопці), ми перевіряємо за допомогою методу TryParse, чи число введено в текстове поле. Якщо користувач ввів число (true), то метод TryParse повертає значення радіуса R. При обчисленні довжини кола beta переводимо значення константи Math.PI з типу Double до типу Single за допомогою неявного перетворення.

Після обчислення довжини кола beta виводимо її значення разом з грецькою буквою - Convert.ToChar (&H3B2) в діалогове вікно MessageBox. Тут використовуємо метод String.Format. Вираз "{0: F4}" означає, що значення змінної beta слід виводити за фіксованим форматом з чотирма знаками після коми.

Дана програма буде коректно відображати грецькі літери, навіть якщо відкрити файл Form1.h текстовим редактором Блокнот і зберегти його в кодуванні ANSI.