Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка DELPHI.DOC
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

Оператор case

Оператор CASE имеет следующий синтаксис записи:

CASE <селектор> OF

C1: <оператор 1>;

С2: <оператор 2>;

. . . . . . . . ;

СN: <оператор N>;

ELSE <оператор>;

End;

Условие ветвления – <селектор> - для оператора CASE задаётся выражением порядкового типа. С1 … СN - CASE-константы - должны совпадать по типу с селектором. <оператор 1> … <оператор N> - это операторы, из которых должен выполниться только один оператор - тот, у которого соответствующая CASE-константа совпадёт с селектором <оператор> после ELSE выполняется, если не обнаружено ни одного совпадения селектора с какой-либо CASE-константой. Ветвь ELSE может отсутствовать - тогда, если селектор не совпадёт ни с одной CASE-константой, то оператор CASE будет пропущен, т. е. не выполнится ни одного оператора внутри CASE. Например,

VAR L: integer;

. . . . . . . .

CASE L OF

0: Label1.Caption := 'Число нуль';

2,4,6,8: Label1.Caption := 'Чётная цифра';

1,3,5,7,9: Label1.Caption := 'Нечётная цифра';

10..100: Label1.Caption := 'Число от 10 до 100';

ELSE Label1.Caption := 'Число L < 0 или L > 100';

End;

Пример 3

Усложним пример 1. Пусть вводятся два числа и знак операции, которую нужно выполнить с этими числами (+, -, /, *). Пусть числа (a, b) будут типа Integer. Следует обратить внимание на то, что a/b - даёт вещественное число.

Интерфейс можно представить в виде следующей формы (рис. 15), содержащей такие объекты: последовательно расположенные Label1, Edit1, Label3, Edit3, Label2, Edit2; Bevel1 с элементами Label4 и Edit4; Panel1, на которой расположены две кнопки Button1 и BitBtn1.

Рис. 15 Форма примера 3

Компонент TBevel расположен на странице Additional палитры компонентов. С его помощью на форме можно отображать различные прямоугольные области в виде углублений, рамок или просто линий, что позволяет придавать сегментам форм трёхмерный вид. Свойство Shape (очертание) определяет, отображается ли рамка, углубление или линия. Для Bevel1 усновлено значение этого свойства, равное bsSpacer.

Компонент Edit3 служит для ввода знака арифметической операции. Для записи знака вводимой операции выберем переменную типа перечень Operat (Operat = (Plus, Minus, Mult, Divide, None)).

Переменные a, b, Operat объявим глобально, потому что они будут использоваться для обмена информацией между различными обработчиками событий. Понадобятся следующие обработчики событий:

  • ограничение ввода с помощью OnKeyPress для Edit1, Edit2, Edit3;

  • присваивание значений глобальным переменным – событие возникает при потере каким-либо элементом фокуса (OnExit) – 3 обработчика;

  • обработка нажатия на кнопку Button1.

Для отображения результатов расчета служит объект Edit4. Так как при делении получается вещественное число, для отображения этого числа на экране понадобится функция преобразования этого числа (Z) в строку - FloatToStr(Z). Эта функция позволяет выполнить неформатированное преобразование вещественного числа в строку (кстати, StrToFloat(S) преобразует строку (S) в вещественное число). Для форматированного преобразования используется процедура FormatFloat, которая преобразует вещественное число в заданный вид в соответствии с заданным форматом. Рассмотрим один формат преобразования вещественного числа - '0.00'. Этот формат позволяет представить число на экране с двумя знаками после запятой. Процедура имеет два параметра, например FormatFloat('0.00', Z), где Z - вещественное число.

Теперь можно привести текст программы модуля, в котором демонстрируется применение типа перечень.

unit prim3;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, Buttons,

ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

Button1: TButton;

BitBtn1: TBitBtn;

Bevel1: TBevel;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Label2: TLabel;

Edit3: TEdit;

Label3: TLabel;

Label4: TLabel;

Edit4: TEdit;

procedure Edit1KeyPress(Sender: TObject;

var Key: Char);

procedure Edit3KeyPress

(Sender: TObject; var Key: Char);

procedure Button1Click(Sender: TObject);

procedure Edit1Exit(Sender: TObject);

procedure Edit2Exit(Sender: TObject);

procedure Edit3Exit(Sender: TObject);

end;

VarOperat = (Plus,Minus,Mult,Divide,None);

var Form1: TForm1;

a,b: integer;

Operat: VarOperat = None;

implementation

{$R *.DFM}

procedure TForm1.Edit1KeyPress(Sender: TObject;

var Key: Char);

begin

if not (key in ['0'..'9','-', #8]) then key:=#0;

end;

procedure TForm1.Edit3KeyPress

(Sender: TObject; var Key: Char);

begin

if Length(Edit3.Text) = 0 then begin

if not (key in ['+','-','*','/']) then key:=#0;

end else key:=#0;

end;

procedure TForm1.Edit1Exit(Sender: TObject);

begin

a:=StrToInt(Edit1.Text);

end;

procedure TForm1.Edit2Exit(Sender: TObject);

begin

b:=StrToInt(Edit2.Text);

end;

procedure TForm1.Edit3Exit(Sender: TObject);

var С:Char;

begin

if Length(Edit3.Text) > 0 then begin

С:=Edit3.Text[1];

case С of

'+': Operat:=Plus;

'-': Operat:=Minus;

'*': Operat:=Mult;

'/': Operat:=Divide;

end;

end else Operat:=None;

end;

procedure TForm1.Button1Click(Sender: TObject);

var Z:Real;

begin

Z := 0.0;

case Operat of

Plus: Z:=a+b;

Minus: Z:=a-b;

Mult: Z:=a*b;

Divide:

if b=0 then begin

Edit4.Text:='Деление на 0';

Exit;

end else

Z := a/b;

None: begin

Edit4.Text := 'Операции нет';

Exit;

end;

end;

Edit4.Text := FormatFloat('0.00',Z);

end;

end.

Необходимо отметить, что обработчик OnKeyPress для Edit3 содержит объявление переменной C символьного типа для записи вводимого знака арифметической операции, так как непосредственное использование строки Edit3.Text в качестве селектора оператора Case запрещено. Кроме того, в этом обработчике с помощью функции Length(S) (длина строки S) проверяется, был ли осуществлен ввод символа.

Обработчик событий OnKeyPress для Edit3 усложнён, – разрешается ввод только одного символа. Дополнительные ключевые слова begin и end (составной оператор) в этом обработчике необходимы, чтобы снять неоднозначность использования else – к какому if данное ключевое слово else относится. Кроме указанного выше составного оператора, следует обратить внимание на другие составные операторы данной программы.

В обработчике Button1Click используется процедура Exit для непосредственного выхода из обработчика. Обработчик для Edit1 одновременно используется и для Edit2, как и в предыдущем примере 2. Кроме того, следует обратить внимание, что, кроме цифровых символов, этот обработчик разрешает ввод символа минус для отрицательных чисел.