Студопедия

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

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

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






Работа с вещественными числами






Следует упомянуть и о дробных числах, ведь иногда без них не обойтись. В целом, их ввод и вывод практически такой же, как и целых чисел, только используются функции StrToFloat() и FloatToStr(). Всё просто. Однако с вещественными числами есть одна проблема - разделитель целой и дробной части. Дело в том, что нет определённости, какой символ считать разделителем - точку или запятую. Какой символ выбирается - зависит от настроек операционной системы (в Windows этот знак определяется в Панели управления в разделе Язык и региональные стандарты). Таким образом, если заточить программу под запятую, то на системах, где установлена точка, работать ничего не будет и будут возникать ошибки во время работы. В то же время, под точку тоже нельзя затачивать программу, ведь может стоять и запятая. К счастью, решение есть. Есть переменная, которую нигде не нужно объявлять, но значение которой можно менять - это переменная DecimalSeparator. Она объявлена в модуле SysUtils и хранит тот символ, который будет считаться разделителем. Установить нужное значение достаточно один раз - например при запуске программы. Вот так можно установить разделителем точку:

procedure TForm1.FormCreate(Sender: TObject); begin DecimalSeparator: ='.'; end;

Помимо вывода в объекты (например, в TLabel) иногда удобно выводить данные в виде маленьких отдельных окон. Для этой цели существуют стандартные команды. В предыдущих уроках мы с ними уже встречались, но не разбирали их подробно.

1. Простое окно с сообщением - ShowMessage()

Самое примитивное окно содержит указанный текст и кнопку OK для закрытия окна. Вызвать такое окно можно процедурой ShowMessage(), параметром которой является текст - он и будет отображён в окне. Модифицируем нашу мини-программу, убрав TLabel и заменив строку вывода:

procedure TForm1.Button1Click(Sender: TObject); var A: Integer; begin A: =StrToInt(Edit1.Text); A: =Sqr(A); ShowMessage(IntToStr(A)); end;

В этом случае мы увидим следующее:

Следует обратить внимание на то, что пока окно сообщения находится на экране, интерфейс программы блокируется, а также прекращается выполнение дальнейших команд. Только после нажатия на кнопку программа продолжит свою работу.

2. Диалоговое окно - MessageDlg()

Диалоговые окна - более сложный тип окон. Диалоговые окна часто используются для " общения" с пользователем. Однажды такое окно нами уже использовалось - при закрытии окна программы мы спрашивали у пользователя, действительно ли окно нужно закрыть. Теперь разберём работу с такими окнами подробно.

Создаются диалоговые окна функцией MessageDlg(). Это именно функция, а не процедура. Возвращаемым значением является кнопка, которую нажал пользователь. У функции 4 входных параметра:

Текст сообщения (тип данных - String);

Тип диалогового окна (специальный тип данных - TMsgDlgType) - указывает на значок, расположенный в окне и на заголовок окна. Этот параметр задаётся одной из следующих констант:

  • mtInformation - информационное окно (значок в окне - буква " i");
  • mtConfirmation - окно с вопросом (значок - воспросительный знак);
  • mtWarning - предупреждающее окно (значок - восклицательный знак);
  • mtError - окно с сообщением об ошибке (значок - крест на красном фоне);
  • mtCustom - окно без значка, а в заголовке - название исполняемого файла программы (все остальные типы в заголовок помещают соответствующее типу диалога название - Information, Warning и т.д.)

Кнопки, которые будут показаны в окне. Каждой кнопке также соответствует определённая константа. Кнопки перечисляются через запятую, а весь этот " комплект" обрамляется квадратными скобками (что означают квадратные скобки - узнаем позже). Вот константы всех доступных кнопок: mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAll, mbHelp. Название константы говорит о названии самой кнопки.

Четвёртый параметр указывает на индекс раздела в справочной системе, соответствующий данному диалогу. Как правило, не используется и задаётся просто 0.

В качестве возвращаемых функцией значений служат все те же константы кнопок, только с тем отличием, что вместо " mb" они начинаются на " mr" (сокращения от " modal button" и " modal result" соответственно).

Изменим нашу программу - пусть результат выдаётся в информационном окошке. Обратите внимание, насколько красивее выглядит такое окно:

procedure TForm1.Button1Click(Sender: TObject); var A: Integer; begin A: =StrToInt(Edit1.Text); MessageDlg('Квадрат числа '+IntToStr(A)+' равен '+IntToStr(Sqr(A)), mtInformation, [mbOK], 0); end;

Примечание: Текстовые строки можно объединять, просто складывая их - знак " +" (см. фрагмент кода выше). Сами строки записываются в одиночных кавычках.

Ну и напоследок попробуем использовать диалог для уточнения у пользователя дополнительной информации. К примеру, если введено отрицательное число, будем спрашивать, нужно ли его возвести в квадрат... Код получится приблизительно таким:

procedure TForm1.Button1Click(Sender: TObject); var A: Integer; begin A: =StrToInt(Edit1.Text); if A < 0 then if MessageDlg('Число отрицательное. Возвести его в квадрат? ', mtConfirmation, [mbYes, mbNo], 0) = mrYes then MessageDlg('Квадрат числа '+IntToStr(A)+' равен '+IntToStr(Sqr(A)), mtInformation, [mbOK], 0); end;

А результат будем таким:

Внешний вид окон всех типов:

 

3. Диалоговые окна MessageBox()

C помощью функции MessageBox() можно также выводить диалоговые окна. По внешнему виду они практически ничем не отличаются от окон MessageDlg(), однако есть возможность указать и заголовок окна. Проблема MessageBox() в том, что тип диалога и кнопки задаются немного необычным образом.

Специальные окошки существуют не только для вывода на экран, но и для ввода. Примером такого окна является InputBox(). Функции передаётся 3 параметра: текст заголовка окна, текст пояснения и значение, находящееся в поле при показе окна на экран. Введённую в поле строку функция возвращает как значение-результат. Пример:

procedure TForm1.Button2Click(Sender: TObject); begin if InputBox('Загадка', 'Сидит дед, в сто шуб одет. Кто его раздевает - тот слёзы проливает. Кто это? ', '') = 'лук' then MessageDlg('Правильно! ', mtInformation, [mbOk], 0) else MessageDlg('Вы не угадали.', mtWarning, [mbOk], 0) end;

Заключение

Мы рассмотрели способы ввода и вывода данных, а также познакомились с диалоговыми окнами. Приёмы ввода-вывода используются практически в любом приложении: в тех, которые имеют оконный интерфейс, это делается с использованием визуальных объектов, а для консольных приложений - в режиме командной строки

Выбор (ветвления)

Большинство примеров, которые были рассмотрены в предыдущих уроках, являлись программами с линейной структурой. Программы с линейной структурой являются простейшими и используются, как правило, для реализации обычных вычислений по формулам (или других аналогичных задач, назначение которых - последовательное выполнение некоторых команд). Основная характеристика линейных алгоритмов - инструкции выполняются последовательно, одна за другой.

Но линейных алгоритмов, как правило, недостаточно для реализации какой-то более сложной задачи. К примеру, требуется программа, запрашивающая у пользователя 2 числа и вычисляющая их частное (т.е. выполняющая деление одного числа на другое). Всё бы ничего, но если второе число будет нулём? В результате выполнения деления возникнет ошибка и программа экстренно закончит свою работу. Как же быть? В этом случае нужен другой алгоритм - алгоритм с ветвлениями.

Ветвления (выбор) используются для выбора одного из нескольких направлений дальнейшего хода программы. Для нашего примера перед делением будет выбор из двух направлений - если исходные данные верны (т.е. второе число - не 0), то выполняется деление и выдаётся результат; но если второе число - 0, то деление выполнено не будет, а взамен, к примеру, пользователю будет выдано сообщение об ошибке.

Мы рассмотрим два типа ветвления - с помощью условного оператора и оператора выбора.






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