Представление чисел с плавающей точкой
Санкт-Петербургский
государственный
(технический университет)
Факультет Информатики и Управления
Кафедра САПРиУ,
II курс, гр.823
Дисциплина:
Организация ЭВМ и систем
Пояснительная записка к курсовому проекту.
Тема: ‘Представление
чисел с плавающей точкой’.
Студент: Сопыгин А.И.
Санкт-Петербург, 2003г.
Содержание
стр.
Введение…...……………………………………
Аналитический
обзор….……………………………………………………………
Описание
выбранной программы-эмулятора……………………………
Практическая
разработка……………………………………………………
Описание использованных средств вычислительной техники………………13
Выводы……………………………………………………
Использованная
литература…………………………………………………… …14
Введение.
В ячейках памяти 5000-5003h хранится число с плавающей точкой в формате (1+8+23). Восьмиразрядный порядок имеет смещение pсм=12810. Двоичная двадцатитрёхразрядная мантисса не содержит старшей единицы, получаемой в результате нормализации.
Требуется составить программу, расположенную в памяти с ячейки 400016, формирующую следующие четыре числа:
- «Знак числа» в ячейке 600016 (однобайтное целое число «+» - 00 и «-» - 01),
- «Знак порядка» в ячейке 600116 (однобайтное целое число «+» - 00 и «-» - 01),
- Модуль порядка в ячейке 600216 (однобайтное целое число),
- Мантисса как трёхбайтное целое число в ячейках 600316-600516.
Аналитический обзор.
Системой счисления называется совокупность приемов наименования и записи чисел. В любой системе счисления для представления чисел выбираются некоторые символы (их называют цифрами), а остальные числа получаются в результате каких-либо операций над цифрами данной системы счисления.
Существуют позиционные и непозиционные системы счисления.
В непозиционных системах вес цифры (т.е. тот вклад, который она вносит в значение числа) не зависит от ее позиции в записи числа. Так, в римской системе счисления в числе ХХХII (тридцать два) вес цифры Х в любой позиции равен просто десяти.
В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее положения (позиции) в последовательности цифр, изображающих число. Например, в числе 757,7 первая семерка означает 7 сотен, вторая – 7 единиц, а третья – 7 десятых долей единицы. Сама же запись числа 757,7 означает сокращенную запись выражения
700 + 50 + 7 + 0,7 = 7∙102 + 5∙101 + 7∙100 + 7∙10-1 = 757,7.
Любая позиционная система счисления характеризуется своим основанием. Основание позиционной системы счисления — это количество различных знаков или символов, используемых для изображения цифр в данной системе.
За
основание системы можно
an-1 qn-1 + an-2 qn-2+ ... + a1 q1 + a0 q0 + a-1 q-1 + ... + a-m q-m,
где
ai – цифры системы счисления; n и
m – число целых и дробных разрядов, соответственно.
Десятичная система счисления. Использует десять обычных цифр – 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9, а также символы «+» и «–» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. Существует массовое заблуждение, будто именно десятичная система счисления является наиболее употребительным способом записи чисел. Между тем, более внимательный анализ правил чтения и записи чисел приводит к другому выводу: система счисления, которой мы обычно пользуемся, фактически является двойной, так как имеет основания – 10 и 1000. В частности, в русском языке известны названия только для первых семи разрядов десятичной системы счисления (1 – единица, 10 – десяток, 100 – сотня, 1000 – тысяча, 10000 – тьма, 100000 – легион, 1000000 – миллион), но предпоследние два из них (легион и тьма) давно вышли из употребления, а соседние с ними (миллион и тысяча) – названия классов, а не только разрядов. Итак, фактически в русском языке остались лишь два самостоятельных названия для десятичных разрядов: десяток и сотня. В других языках – аналогичная ситуация.
Двоичная система счисления. В настоящий момент – наиболее употребительная в информатике, вычислительной технике и смежных отраслях система счисления. Использует две цифры – 0 и 1, а также символы «+» и «–» для обозначения знака числа и запятую (точку) для разделения целой и дробной части.
Восьмеричная система счисления. Использует восемь цифр – 0, 1, 2, 3, 4, 5, 6, и 7, а также символы «+» и «–» для обозначения знака числа и запятую (точку) для разделения целой и дробной частей числа. Широко использовалась в программировании в 1950-70-ые гг. К настоящему времени практически полностью вытеснена шестнадцатеричной системой счисления, однако функции перевода числа из десятичной системы в восьмеричную и обратно сохраняются в микрокалькуляторах и многих языках программирования.
Шестнадцатеричная
система счисления. Использует шестнадцать
цифр – 0, 1, 2, 3, 4, 5, 6, 7, 8 и 9 в их обычном смысле,
а затем A=10, B=11 , C=12 , D=13 , E=14 , F=15 . Также использует
символы «+» и «–» для обозначения знака
числа и запятую (точку) для разделения
целой и дробной частей числа. Внедрена
американской корпорацией IBM. Широко используется
в программировании для IBM-совместимых
компьютеров. С другой стороны, в некоторых
языках сохранились и следы использования
этой системы счисления в прошлом. Например,
в романских языках (испанском, французском
и др.) числительные от 11 до 16 образуются
по одному правилу, а от 17 до 19 – по другому.
А в русском языке известен пуд, равный
16 килограммам.
Перевод восьмеричных и шестнадцатеричных чисел в двоичную систему очень прост: достаточно каждую цифру заменить эквивалентной ей двоичной триадой (тройкой цифр) или тетрадой (четверкой цифр).
Например:
Чтобы перевести число из двоичной системы в восьмеричную или шестнадцатеричную, его нужно разбить влево и вправо от запятой на триады (для восьмеричной) или тетрады (для шестнадцатеричной) и каждую такую группу заменить соответствующей восьмеричной (шестнадцатеричной) цифрой.
Например,
При переводе числа из двоичной (восьмеричной, шестнадцатеричной) системы в десятичную надо это число представить в виде суммы степеней основания его системы счисления.
Примеры:
При
переводе целого десятичного числа в систему
с основанием q его необходимо последовательно
делить на q до тех пор, пока не останется
остаток, меньший или равный q–1. Число
в системе с основанием q записывается
как последовательность остатков от деления,
записанных в обратном порядке, начиная
с последнего.
Пример: Перевести число 75 из десятичной системы в двоичную, восьмеричную и шестнадцатеричную:
Ответ:
7510 = 1 001 0112 = 1138 = 4B16.
При переводе правильной десятичной дроби в систему счисления с основанием q необходимо сначала саму дробь, а затем дробные части всех последующих произведений последовательно умножать на q, отделяя после каждого умножения целую часть произведения. Число в новой системе счисления записывается как последовательность полученных целых частей произведения. Умножение производится до тех пор, пока дробная часть произведения не станет равной нулю. Это значит, что сделан точный перевод. В противном случае перевод осуществляется до заданной точности. Достаточно того количества цифр в pезультате, котоpое поместится в ячейку.
Пример: Перевести число 0,35 из десятичной системы в двоичную, восьмеричную и шестнадцатеричную:
Ответ:
0,3510 = 0,010112 = 0,2638 = 0,5916.
Представление данных с плавающей точкой.
Для унификации формата представления чисел с плавающей точкой Институтом инженеров по электротехнике и радиоэлектронике (IEEE) разработан стандарт 754.
Стандарт специфицируется на два формата: 32-битовый – обычной точности представления и 64-битовый – удвоенной точности представления.
В
первом формате поле порядка занимает
8 бит, во втором – 11 бит. Стандарт регламентирует
использование числа 2 в качестве
неявно заданного значения основания
характеристики. Помимо основных, в стандарте
предусмотрены два расширенных варианта
форматов обычной и удвоенной точности,
конкретная спецификация которых зависит
от реализации вычислительной системы.
Расширенные форматы позволяют включать
дополнительные биты и в поле порядка
(расширение диапазона представления)
и в поле мантиссы (повышение точности
представления). Расширенные форматы предназначаются
для промежуточных вычислений. За счёт
повышения точности снижается вероятность
появления слишком больших ошибок округления,
а при расширении диапазона снижается
вероятность появления ошибки переполнения,
которая, как правило, приводит к аварийному
завершению программы. Ещё одно достоинство
расширенного формата обычной точности
состоит в том, что он позволяет использовать
некоторые свойства формата с удвоенной
точностью, но при этом не требует соответствующего
увеличения времени выполнения арифметических
операций.
Параметры форматов, регламентированные стандартом IEEE 754.
| Параметр | Формат | |||
| Обычная точность | Расширенный
обычной точности |
Удвоенная
точность |
Расширенный
удвоенной точности | |
| Размер
слова (бит) Поле порядка
(бит) Смещение порядка Максимальное
значение порядка Минимальное значение
порядка Диапазон представления
(по основанию 10) Поле мантиссы
(бит) Количество значений
порядка Количество значений
мантиссы Количество отличающихся представимых величин |
32 8 127 127 -126 10-38,
10+38 23 254 223 1.98∙231 |
≥43 ≥11 Не регламентируется ≥1023 ≤-1022 Не регламентируется ≥31 Не регламентируется Не регламентируется Не регламентируется |
64 11 1023 1023 -1022 10-308,
10+308 52 2046 252 1.99∙263 |
≥79 ≥15 Не регламентируется ≥16383 ≤-16382 Не регламентируется ≥63 Не регламентируется Не регламентируется Не регламентируется |
Не все двоичные комбинации в форматах, регламентированных стандартом, интерпретируются обычным способом. Крайние значения порядка – все нули (значение 0) и все единицы (значение 255 в формате обычной точности и 2047 в формате удвоенной точности) – представляют особые величины. Стандартом предусматривается представление в заданном формате следующих классов величин.
- При значениях кода в поле порядка в интервале от 1 до 254 в формате обычной точности и от 1 до 2046 в формате удвоенной точности представляются нормализованные вещественные числа. Используется смещённый формат представления порядка и, следовательно, интервал возможных значений порядка простирается от -126 до +127 в формате обычной точности и от -1022 до +1023 – формате удвоенной точности. Нормализованная мантисса включает бит, равный 1, слева от разделительной точки, который не хранится в поле мантиссы. Следовательно, в формате обычной точности представляется 24-разрядная мантисса, а в формате удвоенной точности – 53-разрядная.
- Нулевое значение в поле порядка совместно с нулевым значением в поле мантиссы представляет значение +0 или -0 в зависимости от кода в бите знака мантиссы.
- Заполнение поля порядка кодом 1 совместно с нулевым значением в поле мантиссы представляет значение +∞ и -∞ в зависимости от кода в бите знака мантиссы. Таким образом, формат позволяет представить на ограниченной разрядной сетке неограниченно большую числовую величину. Пользователь должен решить, трактовать ли переполнение как ошибку или обрабатывать в программе бесконечно большие величины.
- Нулевое значение в поле порядка совместно с ненулевым значением в поле мантиссы представляет ненормализованные числа. В этом случае считается, что неявный старший разряд мантиссы равен 0, и значение порядка равно – 126 в формате обычной точности или -1022 – в формате удвоенной точности. Код в знаковом бите мантиссы по-прежнему определяет знак числа.
- Заполнение поля порядка кодом 1 совместно с ненулевым кодом в поле мантиссы представляет так называемые необычные числовые величины (значения типа NaN – Not a Number). Включение в регламентируемые стандартом форматы возможности представлять подобные величины позволяет программисту сигнализировать посредством результата арифметической операции о различных исключительных ситуациях.
Представление величин в формате с плавающей точкой в соответствии со стандартом IEEE 754.
| Обычная точность (32 бит) | Удвоенная точность (64 бит) | |||||||
| Знак мантиссы | Смещённый порядок | Мантисса | Значение | Знак мантиссы | Смещённый порядок | Мантисса | Значение | |
| Положительный ноль | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Отрицательный ноль | 1 | 0 | 0 | -0 | 1 | 0 | 0 | -0 |
| Плюс бесконеч-ность | 0 | 255 | 0 | +∞ | 0 | 2047 | 0 | +∞ |
| Минус бесконечность | 1 | 255 | 0 | -∞ | 1 | 2047 | 0 | -∞ |
| Простое значение типа NaN | 0 или 1 | 255 | ≠0 | NaN | 0 или 1 | 2047 | ≠0 | NaN |
| Сигнализиру-ющее значение типа NaN | 0 или 1 | 255 | ≠0 | NaN | 0 или 1 | 2047 | ≠0 | NaN |
| Положительное нормализован-ное число | 0 | 0<e<255 | f | 2e-127∙(1.f) | 0 | 0<e<2047 | f | 2e-1023∙(1.f) |
| Отрицательное нормализован-ное число | 1 | 0<e<255 | f | -2e-127∙(1.f) | 1 | 0<e<2047 | f | -2e-1023∙(1.f) |
| Положительное ненормализо-ванное число | 0 | 0 | f≠0 | 2e-126∙(0.f) | 0 | 0 | f≠0 | 2e-1022∙(1.f) |
| Отрицательное ненормализо-ванное число | 1 | 0 | f≠0 | -2e-126∙(0.f) | 1 | 0 | f≠0 | -2e-1022∙(1.f) |
Описание выбранной программы-эмулятора.
Для решения поставленной задачи воспользуемся эмулятором Смирнова.
Основной
причиной выбора этого эмулятора
было то, что из-за некорректного отображения
обоих эмуляторов на ПК с процессором
Intel Pentium–IV их размеры окон эмуляторов
превышают разрешение монитора пользователя
и работа с ними просто невозможна. К тому
же у эмулятора Дёмина-Пушкина как бы «срезается»
правая часть главного окна программы,
и доступ к кнопкам становится невозможен.
Отображение эмуляторов Дёмина-Пушкина и Смирнова на ПК с процессором P-IV.
Однако,
из-за того, что эмулятор Смирнова состоит
из нескольких окон, «привязанных» друг
к другу, и на них доступны все необходимые
кнопки управления, то, отменив привязку
и удалив окно клавиатуры, можно более-менее
комфортно работать с эмулятором.
Работа
с Эмулятором Смирнова.
Практическая разработка программы.
Для решения поставленной задачи необходимо представить число с плавающей точкой в виде четырёх байт, хранящихся в обратном порядке.
В 4-м байте, хранящемся по адресу 5003h, находится бит знака числа и 6 бит смещённого порядка числа, а последний (младший) бит смещённого порядка хранится в предыдущем, третьем байте, располагающемся в ячейке 5002h.
Следовательно, сначала необходимо загрузить в аккумулятор третий байт числа, а затем, сдвинув байт, записать в аккумулятор 4-й байт числа, содержащий бит знака числа. При этом младший бит смещённого порядка будет располагаться в результате сдвига во флажковом регистре в бите, отвечающем за переполнение.
Сдвинув 4-й байт числа, скопированный в аккумулятор, в аккумуляторе мы получим значение смещённого порядка, а во флажке CY – бит знака числа. В зависимости от состояния CY в ячейку 6000h записываем 0h (знак числа – «+») или 1h (знак числа – «-»).
Далее необходимо получить значение порядка числа. Так как смещённый порядок в нашем случае равен 12810 и порядок числа лежит на отрезке [-128; 127], то из полученного значения в аккумуляторе необходимо вычесть это смещение, равно 8016. Однако, если порядок отрицателен, мы не получим нужного нам значения в результате заёма в аккумуляторе при вычитании (значение CY равно 1).
Например:
–
То есть полученное значение даже больше возможного!
Следовательно, если после вычитания значение CY равно 1, необходимо записать в ячейку 6001h значение 1h (знак порядка – «-») из числа 80h вычесть значение смещённого порядка:
–
Таким образом, после получения смещённого порядка в аккумуляторе после второго сдвига необходимо сохранить это значение для последующих вычислений, например, в регистре B.
После
определения знака числа, знака порядка
числа и значения самого порядка, сохраняемого
в ячейке по адресу 6002h, необходимо проверить,
нужно ли восстанавливать старшую единицу
мантиссы в третьем байте числа. Если число
больше, чем 80h, то старшую единицу восстанавливать
не надо, иначе – нужно прибавить к этому
байту значение 80h (восстановление старшей
единицы). Полученное значение сохраняем
по адресу 6005h, а второй и первый байты
числа необходимо сохранить по адресу
6004h и 6003h, так как мантисса числа должна
храниться в обратном порядке.
Перед началом выполнения алгоритма в ячейки 6000h и 6001h записываются значения 00h для того, чтобы упростить алгоритм программы.
Для
организации диалога с
Блок-схема программы.
Листинг
программы.
| Ячейка
4000 4003 4006 4009 400C 400E 4011 4013 4016 4018 401B 401D 4020 4021 4024 4025 4026 4027 402A 402D 4030 4033 4034 4037 4038 4039 403C 403D 403E 4041 4042 4043 4044 4045 4046 4047 4048 4049 404A 404D 404F 4052 4053 4055 4058 405A 405D 405F 4060 4063 4064 4065 4067 406A 406C 406F 4070 4071 4074 4075 4076 4079 407C 407F 4082 4085 4086 4089 408A 408B 408E 408F 4090 4093 4094 4097 4098 4099 409A 409D 409E 409F 40A2 40A5 40A8 40AB 40AE 40B0 40B3 |
16-й
код.
31 00 50 01 00 41 CD 4C 00 CD 52 00 3E 1B CD 58 00 3E 48 CD 58 00 3E 1B CD 58 00 3E 4A CD 58 00 AF 21 00 60 77 2C 77 01 00 46 CD 4C 00 21 00 50 CD 67 00 77 CD 67 00 2C 77 CD 67 00 2C 77 CD 67 00 2C 77 2D 7E 17 2С 7E 17 47 D2 53 40 3E 01 32 00 60 78 D6 80 D2 60 40 3E 01 32 01 60 3E 80 90 32 02 60 2D 7E FE 80 D2 6C 40 C6 80 32 05 60 2D 7E 32 04 60 2D 7E 32 03 60 CD 49 00 01 20 46 CD 4C 00 21 00 60 7E CD 61 00 2C 7E CD 61 00 2C 7E CD 61 00 2C 7E CD 61 00 2C 7E CD 61 00 2C 7E CD 61 00 CD 49 00 01 40 46 CD 4C 00 CD 55 00 FE 59 CA 0C 40 C3 40 00 |
Код
ассемблера.
LXI SP, 5000h; LXI B, 4100h; CALL 4Ch; CALL 52h; MVI A, 1Bh; CALL 58h; MVI A, 48h; CALL 58h; MVI A, 1Bh; CALL 58h; MVI A, 4A; CALL 58h; XRA A; LXI H, 6000h; MOV M, A; INR L; MOV M, A; LXI B, 4600h; CALL 4Ch; LXI H, 5000h; CALL 67h; MOV M, A; CALL 67h; INR L; MOV M, A; CALL 67h; INR L; MOV M, A; CALL 67h; INR L; MOV M, A; DCR L; MOV A, M; RAL; INR L; MOV A, M; RAL; MOV B, A; JNC 4053h; MVI A, 1h; STA 6000; MOV A, B; SUI 80h; JNC 4060h; MVI A, 1h; STA 6001h; MVI A, 80h; SUB B; STA 6002; DCR L; MOV A, M; CPI 80h; JNC 406Ch; ADI 80h; STA 6005h; DCR L; MOV A, M; STA 6004h; DCR L; MOV A, M; STA 6003h; CALL 49h; LXI B, 4620h; CALL 4Ch; LXI H, 6000h; MOV A, M; CALL 61h; INR L; MOV A, M; CALL 61h; INR L; MOV A, M; CALL 61h; INR L; MOV A, M; CALL 61h; INR L; MOV A, M; CALL 61h; INR L; MOV A, M; CALL 61h; CALL 49h; LXI B, 4640h; CALL 4Ch; CALL 55h; CPI 59h; JZ 400Ch; CALL 40h; |
Комментарий
к команде.
Создание стека программы по адресу 5000h; Вывод заставки
на ВТА; Очистка экрана
и перевод курсора в начало
экрана; Очистка аккумулятора; Получение адреса знака числа; Засылка в память значения 0h; Получение адреса
знака порядка числа; Вывод приглашения
для ввода 16-го числа; Ввод 1-го байта числа; Сохранение 1-го байта по адресу 5000h; Ввод 2-го байта
числа; Сохранение 2-го байта по адресу 5001h; Ввод 3-го байта
числа; Сохранение 3-го байта по адресу 5002h; Ввод 4-го байта
числа; Сохранение 4-го байта по адресу 5003h; Получение адреса 3-го байта (5002h); Копирование 3-го байта в аккумулятор; Высвобождение младшего бита порядка числа в CY; Получение адреса 4-го байта; Копирование 4-го байта в аккумулятор; Сдвиг 4-го байта (получение знака числа в CY, порядка числа в аккумуляторе); Сохранение значения смещённого порядка в регистре B; Переход на 4053h, если CY=0 (знак числа - плюс); Запись в аккумулятор 1h (минус числа); Сохранение минуса числа в ячейку 6000h; Восстановление значения смещённого порядка числа; Вычитание из аккумулятора порядка смещения (80h); Переход на 4060h, если CY=0 (знак порядка - плюс); Запись в аккумулятор1h (минус порядка); Сохранение 1h в ячейке 6001 (сохранение знака числа «-»); Запись в аккумулятор порядка смещения (80h); Вычитание значения смещённого порядка, хранящегося в B; Сохранение порядка числа в ячейке 6002; Получение адреса 3-го байта (5002h); Копирование 3-го байта в аккумулятор; Сравнение 3-го байта с 80h (проверка старшего бита на единицу); Переход на 406Ch, если результат больше нуля (единицу восстанавливать не надо); Добавление 80h (восстановление старшей единицы мантиссы); Сохранение 3-го байта числа с восстановленной единицей; Получение адреса 2-го байта числа (5001h); Копирование 2-го байта в аккумулятор; Сохранение 2-го байта числа в ячейке 6004h; Получение адреса 1-го байта числа (5000h); Копирование 1-го байта числа в аккумулятор; Сохранение 1-го байта числа в ячейке 6003h; Перевод курсора на новую строку ВТА; Вывод строки результата
преобразования; Получение адреса знака числа; Вывод знака
числа на дисплей; Получение адреса знака порядка числа; Вывод знака
числа на дисплей; Получение адреса порядка числа; Вывод порядка
числа на дисплей; Получение адреса 3-го байта мантиссы; Вывод 3-го байта
мантиссы на дисплей; Получение адреса 2-го байта мантиссы; Вывод 2-го байта
мантиссы на дисплей; Получение адреса 1-го байта мантиссы; Вывод 1-го байта
мантиссы на дисплей; Перевод курсора на новую строку ВТА; Вывод строки подтверждения
повтора программы; Ожидание нажатия клавиши; Сравнение нажатой клавиши с “Y”; Переход на 400Ch если нажата клавиша “Y” (повтор программы); Выход в монитор, ожидание команды; |
Контрольный пример.
Для проверки правильности работы программы приведём контрольный пример.
В диалоге ввода числа наберём константу 79A35E71. Представим это шестнадцатеричное число в двоичном виде:
Содержимое памяти: 01111001b 10100011b 01011110b 01110001b
Ячейка памяти: 5000h 5001h 5002h 5003h
Так как число хранится в обратном порядке, то бит, отвечающий за знак числа – старший бит в ячейке 5003h. Это «0», следовательно, знак числа – «+».
Следующие семь бит и старший бит в ячейке 5002h составляют значение смещённого порядка. В данном случае это 11100010b. При вычитании из этого значения порядка смещения мы получим: – = 01100010b=62h. Знак порядка числа – «+».
В ячейке 5002h хранится первый байт мантиссы числа. Так как его старший бит не содержит старшей единицы, необходимо восстановить её. При этом мы получим значение 11011110b=DEh.
Два
оставшихся байта должны быть скопированы
без изменения.
В результате выполнения программы получим следующий результат:
Содержимое памяти: 00h 00h 62h 79h A3h DEh
Ячейка
памяти:
6000h 6001h 6002h 6003h 6004h 6005h
Чего
и следовало ожидать. Следовательно,
программа работает верно.
Использованные средства вычислительной техники.
При
разработке программы был использован
персональный компьютер со следующими
техническими характеристиками.
Процессор: Intel Pentium IV, 1.5 GHz.
Оперативная память: 256 MB.
Жёсткий диск: 40GB.
Видеокарта: 1024x768, 32-Bit Color, Radeon 7500/7500LE.
Операционная
система: Windows
Millennium Edition.
Выводы по работе.
В
результате разработки создана программа,
позволяющая наиболее быстро решить
поставленную задачу. Данный алгоритм
преобразования числа с плавающей точкой,
по моему мнению, является самым быстрым
в работе, несмотря на то, что дополнительно
используется регистр B. Единственным
недостатком программы можно считать
большой размер текстовых констант, использованных
в программе. Однако использование диалога
значительно упрощает работу с программой,
она становится понятной на интуитивном
уровне, а анализ результата на ошибки
происходит гораздо быстрее.