Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Pascal и Delphi / Иллюстрированный самоучитель по Delphi 6 / Часть II . Язык Object Pascal / Введение в Object Pascal /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Операторы языка - Программирование от RIN.RU
Операторы языка



Оператор выбора


Оператор выбора позволяет выбрать одно из нескольких возможных продолжений программы. Параметром, по которому осуществляется выбор, служит ключ выбора - выражение любого порядкового типа (из уже рассмотренных к порядковым относятся integer, char и логический; описание остальных порядковых типов см. в гл. 7).


Структура оператора выбора такова:


case <ключ_выбора> of <список_выбора> [ else <операторы>] end;


Здесь case, of, else, end - зарезервированные слова (случай, из, иначе, конец); <ключ_выбора> - ключ выбора (выражение порядкового типа); <список_выбора> - одна или более конструкций вида:


<константа_выбора> : <оператор>;
<константа_выбора> - константа того же типа, что и выражение <ключ_выбора>; <оператор> - произвольный оператор Object Pascal.


Оператор выбора работает следующим образом. Вначале вычисляется значение выражения <ключ_выбора>, а затем в последовательности операторов <список_выбора> отыскивается такой, которому предшествует константа, равная вычисленному значению. Найденный оператор выполняется, после чего оператор выбора завершает свою работу. Если в списке выбора не будет найдена константа, соответствующая вычисленному значению ключа выбора, управление передается операторам, стоящим за словом else. Часть else <операторы> можно опускать. Тогда при отсутствии в списке выбора нужной константы ничего не произойдет, и оператор выбора просто завершит свою работу.


Любому из операторов списка выбора может предшествовать не одна, а несколько констант выбора, разделенных запятыми. Например:


var
ch : Char;
begin
case ch of
'n','N','H','H': IbOutput.Caption := 'Нет';
'у','Y','д','Д': IbOutput.Caption := 'Да';
end
end;




Учебная программа CALC


Составим программу, имитирующую работу микрокалькулятора. Программа вводит два операнда и знак математического действия, после чего показывает результат (см. рис. 5.7).


Для упрощения ввода операндов и знака поместим на нашу учебную форму еще два компонента. Выберите File | New | Application, переименуйте компонент ibinput в ibinputi и сделайте его свойство width (длина) равным 121 (стандартная длина компонентов Edit), a свойство Left (слева) - 64. Справа от компонента ibinputi поместите компонент comboBox (страница Standard), назовите его cbSign (свойство Name) и установите для него width =41. Раскройте диалоговое окно свойства items этого компонента и введите четыре строки со знаками математических действий в такой последовательности:


+


-


*


/


И, наконец, справа от cbSign разместите еще один компонент Edit (страница Standard) и назовите его edinput2. He забудьте очистить свойства Text у всех трех компонентов.



Рис. 5.7. Окно программы CALC




procedure TfmExample.bbRunClick(Sender: TObject);
var
X, Y, Z: Real;
begin
{ Блокируем работу, если не введены операнды и не выбрано действие }
if (edInputl.Text='') or (edlnput2.Text='') or (cbSign.Itemlndex<0) then Exit;
// Проверяем правильность ввода 1-го операнда:
try // Начало защищенного блока
Х := StrToFloat(Trim(edinputi.Text));
except // Обработка ошибки
ShowMessage('Ошибочная запись числа: '+edlnputl.Text);
edinputi.SelectAll;
Exit;
end; // Конец защищенного блока
// Проверяем правильность ввода 2-го операнда:
try // Начало защищенного блока
Y := StrToFloat(Trim(edlnput2.Text));
except // Обработка ошибки
ShowMessage('Ошибочная запись числа: '+edlnput2.Text);
edlnput2.SelectAll ;
Exit;
end;
// Конец защищенного блока
// Все правильно: вычисляем результат
case cbSign.Itemlndex of
0: Z := X + Y;
1: Z := X - Y;
2: Z := X * Y;
3: try
Z := X / Y; except
Z := l.le+38; // Бесконечность при делении на О
end;
end;
// Показываем результат
IbOutput.Caption := Trim(edinputi.Text)+' '+ cbSign.Items[cbSign.Itemlndex]+' '+ Trim(edlnput2.Text)+' = ';
if Z >= l.le+38 then
IbOutput.Caption := IbOutput.Caption+'бесконечность'
else
IbOutput.Caption := IbOutput.Caption+FloatToStr(Z);
mmOutput.Lines.Add(IbOutput.Caption) ;
// Очищаем ввод edinputi.Text := '';
ed!nput2.Text := ' ';
cbSign.ItemIndex := -1;
end;




Комментарий к программе


В качестве операндов в программе выбраны переменные вещественного типа Real. Символьное представление значений Real в общем случае имеет вид:


+ЦЦЦЦЦ.ДДДДДе+ППП


Здесь + - знак + или -; ццццц - цифры целой части числа; ддддд -цифры дробной части; ппп - цифры десятичного порядка. Символ е (E) в такой записи читается как "умножить на 10 в степени". Например, 1. 1e+38 читается: "один и одна десятая умножить на 10 в степени плюс тридцать восемь". Следует учесть, что компилятор Delphi в качестве разделителя целой и дробной частей всегда использует символ ".", в то время как аналогичный разделитель в Windows зависит от выбранной страны, и для России им обычно является запятая ",". Это означает, что вещественные константы в тексте программы вы всегда должны записывать с разделителем ".", а при вводе пользователем программы вещественных чисел он должен использовать разделитель Windows (этот разделитель можно выбрать В Windows 32 С помощью Пуск | Настройка 1 Панель управления | Язык и стандарты).


Поскольку правильная форма записи вещественного числа гораздо богаче формы записи целого, использовать однострочный редактор с маской для фильтрации вещественных чисел невозможно, поэтому в программе используются обычные редакторы edInput1 и edInput2. В этой ситуации контроль за правильностью записи приходится возлагать на функцию преобразования strToFioat (эта функция преобразует строку в вещественное число). Если функция обнаружит ошибку в записи вещественного числа, она инициирует исключительную ситуацию, которая обычно приводит к аварийному завершению работы программы. Чтобы этого не произошло, используются защищенные блоки (см. комментарий к программе INITSUMM). Таким же блоком защищается операция деления: если число долится на ноль или на очень малую величину, результату присваивается большая положительная величина 1,1*10+38 . При выводе сообщения эта величина заменяется на слово "бесконечность".


Для выбора операции в программе используется компонент Combовох - раскрывающийся список выбора. Свойство items этого компонента хранит набор строк, которые определяют список выбора. Эти строки пронумерованы начиная с нуля (в нашем случае cbSign.Items[0] = '+', a cbSign. Items [3] = '/'). Номер выбранной строки содержит свойство cbSign.ItemIndex, а если не выбрана ни одна строка, это свойство содержит -1. Программа контролирует выбор за счет условия


cbSign.ItemIndex<0


при проверке операндов, а также в операторе case:


case cbsign.itemindex of


Если вы ввели строки cbSign. items в нужной последовательности, индекс выбранной строки будет соответствовать номеру операции (0 - +, 1- -, 2 - * и 3 - /), и над операндами будет выполнено требуемое действие.


<<<  НазадВперед  >>>
 1  2  3  4  5 


 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь