| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Delphi :: Delphi 7 начинающему :: Глава 2. Управляющие структуры языка Delphi :: Инструкция case
Инструкция caseИнструкция
case В предыдущем примере,
в программе контроля веса, множественный выбор был реализован при помощи вложенных
одна в другую инструкций if. Такой подход не всегда удобен, особенно в том случае,
если количество вариантов хода программы велико. В языке Delphi есть
инструкция case, которая позволяет эффективно реализовать множественный выбор.
В общем виде она записывается следующим образом: case Селектор of список1: begin { инструкции 1 } end; список2: begin { инструкции 2 } end; списокМ: begin { инструкции N } end;
else begin { инструкции ) end; end; где:
Выполняется инструкция
case следующим образом: 1. Сначала вычисляется
значение выражения-селектора. 2. Значение выражения-селектора
последовательно сравнивается с константами из списков констант. 3. Если значение выражения
совпадает с константой из списка, то выполняется соответствующая этому списку
группа инструкций. На этом выполнение инструкции саsе завершается. 4. Если значение выражения-селектора
не совпадает ни с одной константой из всех списков, то выполняется последовательность
инструкций, следующая за else. Синтаксис инструкции
case позволяет не писать else и соответствующую последовательность инструкций.
В этом случае, если значение выражения не совпадает ни с одной константой из
всех списков, то выполняется следующая за case инструкция программы. На рис. 2.7 приведен
алгоритм, реализуемый инструкцией case.
Рис. 2.7.
Алгоритм, реализуемый инструкцией case Ниже приведены примеры инструкции case.
case
n_day of 1,2,3,4,5:
day:='Рабочий день. ' ; 6:
day:='Cyббoтa!'; 7: day:='Воскресенье!'; end; case
n_day of 1..5:
day:='Рабочий день.'; 6:
day:='Суббота!'; 7: day:='Воскресенье!'; end; case
n_day of 6:
day:='Суббота!'; 7:
day:='Воскресенье!'; else day:='Рабочий день.'; end; В качестве примера
использования инструкции case рассмотрим программу, которая пересчитывает вес
из фунтов в килограммы. Программа учитывает, что в разных странах фунт "весит"
по-разному. Например, в России фунт равен 409,5 граммов, в Англии — 453,592
грамма, а в Германии, Дании и Исландии фунт весит 500 граммов. В диалоговом окне программы,
изображенном на рис. 2.8, для выбора страны используется список Страна.
Рис. 2.8.
Диалоговое окно программы Пример использования case Для выбора названия
страны используется список — компонент ListBox. Значок компонента ListBox находится
на вкладке Standard (рис. 2.9). Добавляется список к форме приложения
точно так же, как и другие компоненты, например, командная кнопка или поле редактирования.
В табл. 2.5 приведены свойства компонента ListBox.
Рис. 2.9. Компонент
ListBox Таблица2.5.
Свойства компонента ListBox
Наибольший интерес
представляют свойства Items и Itemindex. Свойство items содержит элементы списка. Свойство itemindex
задает номер выбранного элемента списка. Если ни один из элементов не выбран,
то значение свойства равно минус единице. Список может быть сформирован
во время создания формы или во время работы программы. Для формирования списка
во время создания формы надо в окне Object Inspector выбрать свойство
items и щелкнуть на кнопке запуска редактора списка строк (рис. 2.10).
Рис. 2.10.
Кнопка запуска редактора списка В открывшемся диалоговом
окне String List Editor (рис. 2.11) нужно ввести список, набирая каждый
элемент списка в отдельной строке. После ввода очередного элемента списка для
перехода к новой строке необходимо нажать клавишу <Enter>. После ввода
последнего элемента клавишу <Enter> нажимать не надо. Завершив ввод списка,
следует щелкнуть на кнопке ОК.
Рис. 2.11. Редактор
списка В табл. 2.6 перечислены
компоненты формы приложения, а в табл. 2.7 приведены значения свойств компонентов. Таблица 2.6.
Компоненты формы
Таблица 2.7.
Значения свойств компонентов
Процедура пересчета,
которая выполняется в результате щелчка на командной кнопке Вычислить, умножает
вес в фунтах на коэффициент, равный количеству килограммов в одном фунте. Значение
коэффициента определяется по номеру выбранного из списка элемента. В листинге 2.3 приведен
текст программы пересчета веса из фунтов в килограммы. Листинг 2.3.
Пересчет веса из фунтов в килограммы unit
Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls; type TForm1
= class(TForm) Label2:
TLabel; Editl:
TEdit; // поле ввода веса в фунтах Button1:
TButton; // кнопка Вычислить Label1:
TLabel; LabelS:
TLabel; ListBox1:
TListBox; // список стран Label4:
TLabel; // поле вывода рез-та — веса в килограммах procedure
FqrmCreate(Sender: TObject); procedure
ButtonlClick(Sender: TObject); private {
Private declarations } public
{ Public declarations } end; var Form1:
TForml; implementation {$R
*.DFM} procedure TForml.FormCreate(Sender: TObject); begin
{
ListBox1.items.add('Россия');
ListBox1.items.add('Австрия');
ListBox1.iterns.add('Англия');
ListBox1.items.add('Германия');
ListBox1.iterns.add ('Дания');
ListBoxl.iterns.add('Исландия');
ListBox1.iterns.add ('Италия');
ListBox1.items.add ('Нидерланды'); } ListBox1.itemindex:=0;
end; procedure TForm1.ButtonlClick(Sender: TObject); var funt:real; // вес в фунтах kg:real; // вес в килограммах k:real; // коэффициент пересчета begin case ListBoxl.Itemindex of 0: k:=0.4095; // Россия 1: k:=0.453592; // Англия 2:k:=0.56001;
// Австрия 3..5,7:k:=0.5; // Германия, Дания, Исландия, Нидерланды 6: k:=0.31762; // Италия end; funt:=StrToFloat(Editl.Text); kg:=k*funt; label4.caption:=Editl.Text +
' ф. — это ' + FloatToStrF(kg,ffFixed, 6,3) + 'кг.'; end; end. Следует обратить внимание
на процедуру обработки события FormCreate, которое происходит в момент создания
формы (форма создается автоматически при запуске программы). Эту процедуру можно
использовать для инициализации переменных программы, в том числе и для добавления
элементов в список. В приведенном тексте программы инструкции создания списка
закомментированы, т. к. список был создан при помощи редактора строк во время
создания формы. Рассмотрим еще один
пример использования инструкции case. При выводе числовой информации с поясняющим
текстом возникает проблема согласования выводимого значения и окончания поясняющего
текста. Например, в зависимости
от числового значения поясняющий текст к денежной величине может быть: "рубль",
"рублей" или "рубля" (123 рубля, 120 рублей, 121 рубль).
Очевидно, что окончание поясняющего слова определяется последней цифрой числа,
что отражено в табл. 2.8. Таблица 2.8.
Зависимость окончания текста от последней цифры числа
Приведенное в таблице
правило имеет исключение для чисел, оканчивающихся на 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. Рассмотрим фрагмент
программы (листинг 2.5), которая вычисляет дату следующего дня, используя сегодняшнюю
дату, представленную тремя переменными: day (день), month (месяц) и year (год). Сначала с помощью инструкции
сазе проверяется, является ли текущий день последним днем месяца. Если текущий
месяц — февраль и если текущее число — 28, то дополнительно выполняется проверка,
является ли год високосным. Для этого вычисляется остаток от деления года на
4. Если остаток равен нулю, то год високосный, и число 28 не является последним
днем месяца. Если выясняется, что
текущий день — последний день месяца, то следующее число — первое. Затем проверяется,
не является ли текущий месяц декабрем. Если нет, то увеличивается номер месяца,
а если да, то увеличивается номер года, а номеру месяца присваивается значение
1. Листинг 2.5.
Вычисление даты следующего дня (фрагмент) // вычисление даты следующего дня var day:
integer; // день month:
integer; // месяц year:
integer; // гОД last:boolean;
// если день — последний день месяца, //
то last = True r:integer; // если год не високосный, то остаток //
от деления year на 4 не равен нулю begin
{ переменные day, month и year содержат сегодняшнюю дату } last := False; // пусть день — не последний день месяца case month of 4,6,9,11: if day = 30 then last:= True; 2: if
day = 28 then begin r:= year mod 4; if r <> 0 then last:= True; end; else: if day=31 then last:= True; end;
if last then begin // последний день месяца day:= 1; if
month =12 then begin // последний месяц month:= 1; year:= year + 1;
end else month:= month + 1; end
else day:= day + 1; // переменные day, month и year // содержат завтрашнюю дату end; Trac + Subversion @ Ubuntu: Revisited.
Задача: Установить на только что инсталлированный Ubuntu последнюю версию Trac, создать репозитории для нескольких проектов и настроить окружение соответственно. Структура проектов должна быть полностью корректной, установка максимально быстрой при минимальном количестве пакетов. Авторизация в репозитории и окружения Trac может быть общей, но позволяющей индивидуальную настройку для каждого проекта. Также, установка должна быть максимально независима от версий.
Подробнее... |
Рубрика: Ubuntu
| Добавлено: 30.08.2008
[g]Vim в режиме Python: Рекомпиляция в Windows.
Редактор Vim наиболее известен среди разработчиков в системах Unix — конкурент emacs, что-то вроде консольного IDE — этот редактор при должной сноровке и настройке (мне кажется, сноровке несколько меньшей и настройке более очевидной чем в emacs, но у последнего также есть мощная мультифункциональность — выбор за программистом) способен убыстрить и упростить многие процессы на этапах разработки не в ущерб таким удобствам как, например, авто-дополнение и навигация по проекту.
Подробнее... |
Рубрика: Статьи
| Добавлено: 30.08.2008
Java + JSON. Пути к дружбе.
Спешу поделиться результатами небольшого исследования, оказавшегося необходимым для текущего проекта. Рассматривается возможность связки Java и JSON, её преимущества и недостатки. Я расскажу о практической части, о теории больше поведают нижеприведённые ссылки (англ.).
Подробнее... |
Рубрика: Технология JAVA
| Добавлено: 30.08.2008
Остальные статьи:
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения
Windows 7: под покровом тайны
Apache mod_ndb - MySQL кластер с доступом через HTTP и Ajax
Поиск уязвимостей в программах с помощью анализаторов кода
Как появилась библиотека VivaCore
Это сложно
ASP.NET и немного поисковой оптимизации
Protocol buffers: библиотека обмена данными для C++, Java, Python от Google |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|