- •Основы программирования
- •Введение
- •Основы delphi
- •Общая технология программирования
- •Язык программирования
- •Объектно-ориентированное программирование
- •Визуальное программирование
- •Событийно управляемое программирование
- •Windows-приложение
- •Среда программирования
- •Первоначальные сведения о проекте приложения
- •Встроенный отладчик
- •Использование встроенных классов
- •Иерархия классов
- •Использование палитры компонентов и инспектора объектов
- •Использование графики
- •Основные инструменты
- •Основные характеристики шрифтов
- •Графические данные и палитра
- •Некоторые общие свойства компонентов
- •Сохранение проекта
- •Построение простейшего проекта
- •Понятие исключительной ситуации
- •Введение в object pascal
- •Структура приложения
- •Структура программы-проекта
- •Структура модуля
- •Пример 1
- •Описания программных элементов
- •Программные элементы и адреса памяти
- •Области видимости
- •Правила записи имен
- •Время жизни идентификаторов
- •Использование локальных переменных в примере 1
- •Использование глобальных переменных в примере 1
- •Простые типы
- •Целые типы
- •Целые типы
- •Некоторые операции с целым типом
- •Символьные типы
- •Логические типы
- •Тип перечень
- •Интервальный тип
- •Вещественный тип
- •Вещественные типы
- •Некоторые операции с вещественным типом
- •Тип дата-время
- •Выражения
- •Константы
- •Типизированные константы.
- •Переменные
- •Операции
- •Унарная операция not (отрицание)
- •Логические операции and, or, xor
- •Функции
- •Порядок вычисления выражений
- •Виды операторов
- •Простые операторы
- •Составной оператор
- •Операторы условного перехода
- •Оператор if
- •Пример 2
- •Оператор case
- •Пример 3
- •Использование enter в примере 3
- •Операторы цикла
- •Оператор цикла for
- •Пример 4
- •Оператор цикла while
- •Пример 5
- •Оператор цикла repeat
- •Пример 6
- •Использование процедур break и continue
- •Пример 7
- •Массивы
- •Статические массивы
- •Динамические массивы
- •Пример 8
- •Пример 9
- •Записи (объединения)
- •Оператор with
- •Пример 10
- •Совместимость и преобразование типов данных
- •Идентичность типов
- •Совместимость типов
- •Совместимость по присваиванию
- •Преобразование типов
- •Операторы обработки исключительных ситуаций
- •Пример 11
- •Множества
- •Операции над множествами
- •Пример 12
- •Вариантный тип данных
- •Процедуры и функции
- •Процедура
- •Функция
- •Рекурсия
- •Формальные и фактические параметры
- •Параметры-значения
- •Параметры-переменные
- •Параметры-константы
- •Параметры без типа
- •Массивы открытого типа
- •Парамеры по умолчанию
- •Процедура exit
- •Директивы подпрограммы
- •Соглашения по передаче данных
- •Директива forward
- •Директива external
- •Директива assembler
- •Перегруженные подпрограммы
- •Пример 13
- •Инкапсуляция
- •Класс как объектный тип
- •Наследование
- •Области видимости
- •Операции is и as
- •Виды методов
- •Методы virtual и полиморфизм
- •Методы dynamic
- •Методы message
- •Методы abstract
- •Методы override
- •Методы class
- •Пример 14
- •Динамическое создание компонентов
- •Использование класса со счетчиком объектов
- •Отслеживание разрушения объектов
- •События
- •Указатели на методы
- •Пример 15
- •Типы ссылки на класс
- •Свойства
- •Свойства simple
- •Свойства enumerated
- •Свойства set
- •Свойства object
- •Свойства array
- •Задание начальных значений свойствам
- •Пример 16
- •Файловые типы
- •Текстовые файлы
- •Типизированные файлы
- •Файлы без типа
- •Дополнительные процедуры и функции
- •Пример 17
- •Компонент tmainmenu
- •Указатели
- •Пример 18
- •Динамические структуры данных
- •Однонаправленные списки
- •Двунаправленные списки
- •Стеки, очереди
- •Бинарные деревья
- •Пример 19
- •Процедурный тип
- •Программные единицы dll
- •Пример 20
- •Технологии программирования
- •Потоки данных
- •Пример 21
- •Пример 22
- •Интерфейс drag and drop
- •Пример 23
- •Технология drag and dock
- •Пример 24
- •Использование функций windows api при работе с файлами
- •Пример 25
- •Использование отображаемых файлов
- •Пример 26
- •Программные потоки
- •Приоритеты потоков
- •Класс tthread
- •Пример 27
- •Использование блокировки в примере 27
- •Многопоточное приложение в примере 28
- •Проблемы синхронизации потоков
- •Список используемых в примерах компонентов
- •Список используемых компонентов и других классов
- •Библиографический список
- •Оглавление
Оператор 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. Кроме того, следует обратить внимание, что, кроме цифровых символов, этот обработчик разрешает ввод символа минус для отрицательных чисел.
