Инструкция case
Рассмотрим еще один пример использования инструкции case. При выводе числовой информации с поясняющим текстом возникает проблема согласования выводимого значения и окончания поясняющего текста.
Например, в зависимости от числового значения поясняющий текст к денежной величине может быть: "рубль", "рублей" или "рубля" (123 рубля, 120 рублей, 121 рубль). Очевидно, что окончание поясняющего слова определяется последней цифрой числа, что отражено в табл. 2.8.
Таблица 2.8. Зависимость окончания текста от последней цифры числа.
Цифра | Поясняющий текст |
---|---|
0, 5, 6, 7, 8, 9 | Рублей |
1 | Рубль |
2.3.4 | Рубля |
Приведенное в таблице правило имеет исключение для чисел, оканчивающихся на 11, 12, 13, 14. Для них поясняющий текст должен быть "рублей".
Диалоговое окно программы приведено на рис. 2.12, а текст – в листинге 2.4. Поясняющий текст формирует процедура обработки события onKeyPress.
Рис. 2.12. Диалоговое окно программы
Листинг 2.4. Формирование поясняющего текста.
unit .rub_l; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs; type TForm1 = class(TForm) Label1: TLabel; Editl: TEdit; Label2: TLabel; procedure EditlKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // нажатие клавиши procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) var n: integer; // число r: integer; // остаток от деления n на 10 text: string [10]; // формируемый поясняющий текст begin if Key = chr(VK_RETURN) then begin n: = StrToInt(Editl.Text); if n > 100 then n: = n mod 100; if (n >= 11) and (n <= 14) then text: = ' рублей' else begin r: = n mod 10; case r of 1: text: = ' рубль'; 2.. 4: text: = ' рубля'; else text: = ' рублей'; end; end; Label2.Caption: = IntToStr(n)+ text; end; end; end.