Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы программирования в Delphi. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Основы программирования в Delphi
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
for k:=1 to n do
a[k]:=strtoint( StringGrid1.cells[k-1,0]);
label2.Caption:='Максимальный элемент '+
inttostr(maxRn(a,n));
label3.Caption:='Максимальный элемент '+
inttostr(max(a,n))+' (рекурсивным методом)';
end;
end.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Какой алгоритм называется рекурсивным?
2. Приведите примеры рекурсивных вычислений.
3. В чем преимущество рекурсивной функции?
71
Основы программирования в Delphi
9. ИСПОЛЬЗОВАНИЕ ЗАПИСЕЙ В DELPHI
Запись представляет собой объединенный общим именем набор данных
различных типов. Отдельные данные записи называются полями.
Описание записи имеет следующий вид:
type
название_типа_записи = record
Имя_поля_1 : тип_поля_1;
. . . . . . . . . . . . . . . . . . . . . . .
Имя_поля_N : тип_поля_N;
end;
Например, описание записи, характеризующей студента (содержащую имя,
адрес, номер его телефона и возраст студента) может выглядеть так:
type
TStudent = record
Name: string;
Address: string;
Phone: integer;
Year: 18. .45;
end;
Для обращения к элементу записи сначала указывается имя переменной,
затем точка и название соответствующего элемента.
var
Stud1 : TStudent;
begin
Stud1. Name := „Андрей‟; Stud1.Address := „Проспект мира, д. 66, кв. 32‟; Stud1.Phone := 734554; Stud.Year := 21;
Когда надо работать с большим числом элементов переменной-записи, каждый раз предварительно указывать ее имя неудобно. В Pascal имеется клю­чевое слово with, которое позволяет опускать имя переменной в логическом
блоке. Ниже приведем фрагмент программы с использованием ключевого слова
with:
72
Основы программирования в Delphi
with Stud1 do
begin
Name := „Виталий‟;
Address := „Проспект мира, д. 23, кв. 56‟;
Phone := 467228;
end;
После ключевого слова with можно указывать не одно, а несколько имен переменных-записей:
with Stud1, Stud2, Stud3 do begin
. . . . . . . . . . .
end;
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Что такое запись?
2. Как определяется запись в Delphi?
3. Каким образом происходит заполнение полей записи?
4. Чем отличается запись от массива?
73
Основы программирования в Delphi
10. ПОДПРОГРАММЫ (ФУНКЦИИ И РОЦЕДУРЫ)
10.1 Процедуры и функции
Как и во многих языках программирования, в Delphi можно создать два типа подпрограмм: процедуры и функции. Заголовок процедуры начинается че­рез слово procedure, а заголовок функции – через слово function. Далее в скоб-
ках указывается список параметров. Тело подпрограммы заключается в логиче-
ские (операторные) скобки begin . . . end.
Список параметров содержит параметры, каждый из которых представляет собой произвольное имя переменной и соответствующий ей тип через двоето­чие. Если несколько параметров имеют одинаковый тип, то их можно перечис-
лить через запятую. Например,
procedure Compare( A1, A2: Byte; Stroka: String);
В случае функции также показывается через двоеточие тип возвращаемого
значения. Например,
function Game (str: string): integer;
Когда происходит обращение к подпрограмме, переменным, указанным в
списке параметров в описании (формальные параметры), присваиваются значе­ния, указанные в списке параметров в момент вызова (фактические парамет-
ры), после чего выполнятся необходимые вычисления. Это называется переда­чей параметров по значению. Формальные параметры играют роль локальных
переменных.
В списке параметров перед любой переменной разрешается указывать ключевое слово var. Например,
procedure MyProc (X: Integer; var Y: Integer);
Здесь считается, что параметр Y будет передаваться по имени. Параметр
передаваемый по имени может изменять свое значение в подпрограмме и это новое значение при выходе из подпрограммы будет сохраняться. Поэтому та-
кой параметр играет роль глобальной переменной.
На физическом уровне передача по имени означает, что в качестве такого
параметра подпрограмме передается адрес этой переменной. Поэтому при вы-
зове процедуры MyProc в качестве параметра Y может передаваться заранеее описанная переменная типа Integer. Использование параметров передаваемых
по имени эффективно, при передаче параметра, который содержит большой
объем данных (массивы, записи и т.п.).
Возврат значений из функции
74
Основы программирования в Delphi
Если описывается функция, то в ее теле надо определить, как значение бу-
дет возвращено в вызываемую подпрограмму. Для этого есть два способа.
1. Соответствующее значение присваивается переменной, имя которой
совпадает с названием функции.
function Sum (A, B: Integer): integer; begin Sum:= A + B; end;
Имя функции для возврата значения разрешается указывать только в левой
части оператора присваивания.
Соответствующее значение присваивается специальной локальной пере-
менной Result (эту переменную описывать не надо).
function Sum (A, B: Integer): integer;
begin
Result:= A + B; end;
10.2 Использование модулей в Delphi
Модуль - это автономно компилируемая программная единица программы, включающая в себя процедуры, функции, а также различные разделы описаний. Структура модуля в Delphi содержит следующие основные части:
1. заголовок модуля;
2. интерфейсная часть модуля;
3. исполняемая часть модуля;
4. инициирующая часть модуля;
5. завершающая часть модуля.
Примечание. Последние две части в модуле могут и отсутствовать.
1. Заголовок модуля состоит из зарезервированного слова Unit и следующего за
ним имени модуля. Имя модуля обязательно должно совпадать с именем дискового файла. Использование имени модуля в разделе Uses основной про­граммы приводит к установлению связи модуля с основной программой.
2. Интерфейсная часть модуля расположена между ключевыми словами
interface и implementation и содержит объявление тех конструкций и разде­лов описаний модуля, которые должны быть доступны другим программам.
75
Основы программирования в Delphi
yyxxz
2211
cossin)36ln(5
3. Исполняемая часть модуля начинается ключевым словом implementation и
содержит описание процедур и функций, объявленных в интерфейсной ча­сти. Она может также содержать разделы описаний вспомогательных типов, констант, переменных, процедур и функций, которые будут использоваться только в исполняемой части и не будут доступны внешним программам.
4. Инициирующая часть модуля начинается ключевым словом initialization и
содержит операторы, которые исполняются перед началом выполнения основной программы (может отсутствовать).
5. Завершающая часть модуля начинается ключевым словом finalization и вы-
полняется в момент окончания работы программы (может отсутствовать).
В среде Delphi 7 модули могут создаваться как со своей формой, так и без нее. Для создания нового модуля без своей формы необходимо в меню File вы­брать New-Unit. В результате будет создан файл с заголовком Unit Unit2. Имя
модуля можно изменить на другое, отвечающее внутреннему содержанию мо­дуля, например Unit biblio. Для этого необходимо сохранить содуль с новым именем (например, biblio.pas). Следует обратить внимание на то, что имя файла
должно совпадать с именем модуля.
Для того чтобы подключить модуль к проекту, необходимо в меню Project выбрать опцию Add to Project… и выбрать файл, содержащий модуль. После этого в разделе Uses добавить имя подключаемого модуля - biblio. Теперь в проекте можно использовать функции, содержащиеся в модуле.
Пример. Рассмотрим пример вычисления значений функции двух пере-
менных:
Данный пример мы разбирали выше. Теперь реализуем его с использова-
нием модуля для вычисления нашей функции. Интерфейс приложения не меня-
ется (рис. 10.1), однако сама функция, значения которой мы собираемся вычис-
лять, теперь оформляется как отдельный модуль MyFunction.
Листинг модуля MyFunction: Unit MyFunction; interface function z(x,y:extended):extended; implementation function z; begin
76
Основы программирования в Delphi
result:=5*exp(11*ln(x))+ln(6*x+3)-sqrt(Sin(y)*sin(y)+cos(y)*cos(y));
end; end.
Листинг основного модуля формы Unit1: unit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MyFunction;
type
TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Button1: TButton; Edit3: TEdit; Label3: TLabel; procedure Button1Click(Sender: TObject);
private
{ Private declarations } public { Public declarations }
end; var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var x,y:Real; begin
x:=StrToFloat(Edit1.Text); y:=StrToFloat(Edit2.Text); Edit3.Text:=FloatToStr(z(x,y));
end; end.
77
Основы программирования в Delphi
Рис. 10.1 Использование модулей в Delphi 7
Как мы видим, результат вычислений не изменился.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Чем отличается процедура от функции?
2. Какие операторы Delphi необходимы для создания функций и процедур?
3. Чем отличаются формальные параметры от фактических?
4. Что такое модуль?
5. Из каких частей состоит модуль?
6. Как создается модуль в Delphi?
78
Основы программирования в Delphi
Значение State
Состояние флажка
cbUnchecked
сброшен
cbGrayed
установлен частично
cbChecked
установлен
11. СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ
Как известно из практики работы с программами под Windows, пользова­тель общается с возможностями программы с помощью различных меню и ко-
мандных кнопок, выбирает режимы работы с помощью флажков и переключа-
телей. Рассмотрим основные компоненты, которые позволяют организовать пользовательский интерфейс программы.
11.1. Флажок, Переключатель
Эти два компонента также находятся на панели компонентов Стандарт­ные. После установки их на форму они принимают следующий вид:
Рис.11.1 Флажок и радио кнопка
Флажок предназначен для выбора некоторого режима работы. Переклю­чатель предназначен для выбора одного значения из ряда возможных знанче-
ний. Далее рассмотрим основные свойства этих компонентов.
Компонент Флажок (TCheckBox)
Основным свойством флажка является свойство Checked, которое может принимать значение True или False. Некоторые флажки могут находится в тре­тьем, «частично установленном» состоянии, когда признак установки флажка отображается приглушенным цветом.
Определить текущее состояние или задать новое из числа доступных можно проверив или изменив свойство State. Чтобы реагировать на изменение состояния флажка, надо создать обработчик события OnClick (при щелчке).
79
Основы программирования в Delphi
Компонент Переключатель (ТRadioButton)
Переключатель предназначен для выбора одного значения из ряда возмож­ных. Переключатели всегда используются группами. Когда пользователь выби-
рает один из них, то выделение с текущего переключателя снимается. Таким образом, в группе выделен всегда только один переключатель.
Главное свойство переключателя – это свойство Checked (True, если пере­ключатель включен). Методы GetChecked и SetChecked позволяют считывать и установить значение свойства Checked. Для отслеживания состояния конкретно переключателя можно обрабатывать событие OnClick.
Пример. Установим на форме флажок, 2 переключателя и 2 текстовых поля (рис.11.2).
Рис.11.2 Свойства флажка и радио кнопки
При изменении состоянии флажка его текущее состояние выводится в
текстовое поле Edit1, а при выборе одного из переключателей номер выбранно­го переключателя выводится в текстовом поле Edit2.
Изменим следующие свойства флажка и переключателей:
1. Изменим свойства Caption флажка и переключателй, так чтобы были
соответствующие надписи флажка и переключателей
2. Свойство AlloyGrayed флажка установим на True, разрешая тем са-
мым, “частично установленный” режим.
3. Свойство Checked одного из переключателй установим на True, а у
другого на False.
Код обработчика события OnClick для флажка имеет вид:
procedure TForm. CheckBox1Click (Sender: T Object); begin case Check Box1.State of cbUnchecked : Edit1. Text:=‟Выключено‟ ;
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]