Лекции.Орг


Поиск:




Пользовательские процедуры и функции

Часто в программе приходится повторять одни и те же действия. Или же для облегчения восприятия и отладки программы есть необходимость структурировать программу, оформив какую-нибудь часть, выполняющую конкретное законченное действие, в виде отдельной подпрограммы.

В языке Pascal существуют понятия процедур и функций. Они отличаются друг от друга тем, что функция возвращает какое-либо значение, а процедура нет. На языке C++ процедур нет – только функции. Однако функция может и не возвращать значение, тем самым она выполняет роль процедуры.

Объявление на языке Pascal процедур:

procedure <Имя функции> (передаваемые параметры);

begin

// тело процедуры

end;

 

Или с объявлением локальных переменных и констант

 

procedure <Имя функции> (передаваемые параметры);

const

// объявление локальных констант 

var

// объявление локальных переменных

begin

// тело процедуры

end;

 

Необходимо отметить, что объявленные переменные в скобках в качестве передаваемых параметров сами по себе являются локальными относительно данной процедуры.

Объявление функции:

 

function <Имя функции> (передаваемые параметры):<тип возвращаемых данных>;

begin

// тело функции

<имя функции>:= <что возвращать>;

end;

 

Или с объявлением локальных переменных и констант

 

function <Имя функции> (передаваемые параметры):<тип возвращаемых данных>;

const

// объявление локальных констант 

var

// объявление локальных переменных

begin

// тело функции

<имя функции>:= <что возвращать>;

end;

 

На языке С++ объявление функций:

 

<тип возвращаемых данных> <имя функции> (передаваемые параметры)

{

// тело функции

return <что возвращать>;

};

 

Если отсутствуют возвращаемые данные, то впереди имени функции следует поставить слово void. Аналогично, если передаваемые данные отсутствуют, то необходимо в скобках указать (void).

Вызывать процедуры и функции в программе необходимо по объявленному имени с перечислением всех необходимых передаваемых параметров. Тип передаваемых данных, количество, а также расположение должно быть строго соответствовать объявлению.

 

Пример:

Разработать функцию, которая бы делала арифметические действия над тремя числами, два из которых являются целыми, одно – десятичной дробью.

На языке Pascal:

 

function MyFun (A:integer; B:integer; C:real):real;

begin

MyFun:= (A+B)*C;

end;

 

Пример вызова функции из обработчика события OnClick:

 

procedure TForm1.Button1Click(Sender: TObject);

var

N1:Integer; // объявление локальной переменной

  N2:Integer; // объявление локальной переменной

N3:Real;  // объявление локальной переменной

begin

N1:=StrToInt(Edit1.Text); // определение значения N1

N2:=StrToInt(Edit2.Text); // определение значения N2

N3:=StrToFloat(Edit3.Text); // определение значения N3

// вызов функции MyFun и вывод результата в Edit3

Edit3.Text:= FloatToStr(MyFun(N1,N2,N3));

end;

 

На языке C++

 

float MyFun (int A, int B, float C)

{

return (A+B)*C;

};

 

Пример вызова:

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int N1,N2; // объявление локальных переменных

float N3;

 

N1 = StrToInt (Edit1->Text); // определение значения N1

N2 = StrToInt (Edit2->Text); // определение значения N2

N3 = StrToFloat (Edit3->Text); // определение значения N3

// вызов функции MyFun и вывод результата в Edit3

Edit3->Text = FloatToStr(MyFun(N1,N2,N3));

}

 

Для определения значений, передаваемых разработанной функции, использовались встроенные функции преобразования строковых данных в числовые:

1. Функция StrToInt преобразования строки (например, '220') в целое для переменных типа integer;

2. Функция StrToFloat преобразования строки (например, '3.14') в десятичную дробь для переменных типа real (float).

Обратные функции предназначены для преобразования чисел в строки для последующего вывода на экран:

1. Функция IntToStr преобразования переменной типа integer в строку;

2. Функция FloatToStr преобразования переменной типа real (float) в строку.

Объекты программы

И Delphi, и C++ являются объектно-ориентированными языками. Это означает, что пользователь оперирует некими объектами, у которых есть индивидуальные свойства, методы и события.

Свойства (Properties) позволяют управлять текущим состоянием объекта. Практически все свойства доступны для считывания и записи. Для удобства все свойства объекта помещены в структуру с его именем. Например, в таблице 1.2 приведены некоторые свойства объекта Button (вкладка «Standard» палитры компонентов), который на форме программы выглядит как кнопка, нажимаемая мышью.

 

Таблица 1.2 – Некоторые свойства объекта Button

Свойство Назначение
Caption Текст, помещаемый на кнопке
Enabled Включение кнопки. Иначе она не нажимается
Height Высота кнопки в пикселях
Left Положение кнопки от левого края объекта, на котором находится кнопка, до левого края самой кнопки
Name Имя кнопки, используемое для идентификации в программе
Top Положение кнопки от верхнего края объекта, на котором находится кнопка, до верхнего края самой кнопки
Visible Включение видимости кнопки на форме
Width Ширина кнопки в пикселях

 

Некоторые свойства также организованы в структуры. Например, группа свойств Font, которая управляет шрифтом надписи на кнопке, имеет конкретные свойства, например, «Color» - цвет шрифта, «Name» - имя шрифта, «Size» - размер шрифта в пикселях.

Доступ к свойствам объекта осуществляется аналогично как в структуре, организованной пользователем. Например, на языке Pascal:

 

Form1.Button1.Left:= 30;    // Изменение положения кнопки Button1

                     // по горизонтали

Form1.Button1.Font.Size:= 10; // Изменение размера шрифта

 

Необходимо отметить, что название формы «Form1» писать не обязательно, если, например, подпрограмма описывает обработку конкретного события. В данном случае название формы уже имеется в заголовке подпрограммы:

 

// Процедура, вызываемая при нажатии кнопки Button1 на форме

procedure TForm1.Button1Click(Sender: TObject);

begin // начало процедуры

Button1.Font.Size:= 10;

...

end; // конец процедуры

 

Для подпрограммы, написанной самим пользователем, для своих целей писать название формы обязательно. Или можно использовать следующую конструкцию:

 

with Form1 do // указывает где искать объекты и их свойства

begin // начало действия оператора with

Button1.Left:= 10;

end; // Конец действия оператора with

 

Доступ к свойствам объектов на языке C++ осуществляется через указатели. В остальном организация структур аналогично Delphi:

 

Form1->Button1->Left = 30; // Изменение положения кнопки Button1

                     // по горизонтали

Form1->Button1->Font->Size = 10; // Изменение размера шрифта

 

...

 

// Функция, вызываемая при нажатии кнопки Button1 на форме

void __fastcall TForm1::Button1Click(TObject *Sender)

{ // начало функции

Button1->Font->Size = 10;

...

}; // конец функции

 

Методы, которые можно применить по отношению к объекту, являются по сути процедурами, находящимися в «теле» объекта, и которые выполняют наперед заданные функции. Например, к таким методам можно отнести функции создания и разрушения объекта, виртуального нажатия на кнопку, и т.д.

При действии над объектами появляются те или иные события (Events), которые вызывают подпрограммы, написанные пользователем, если есть такая необходимость. В этом случае подпрограммы называют «обработчиком события».

Некоторые события, которые появляются при действии с объектом типа «TButton» приведены в таблице 1.3.

 

Таблица 1.3 – Некоторые события объекта «TButton»

Событие Когда происходит событие
OnClick При нажатии правой клавишей мыши на кнопке и последующем отпускании (Клик)
OnMouseDown В момент нажатия любой клавишей мыши на кнопке
OnMouseUp В момент отпускания любой клавиши мыши
OnMouseMove При перемещении курсора над поверхностью кнопки

 

Доступные свойства и события перечислены в инспекторе объекта при выборе соответствующего объекта на форме.

          

а) Свойства                              б) События

Рисунок 1.1 – Список свойств и событий в инспекторе объекта типа «TButton»



<== предыдущая лекция | следующая лекция ==>
Локальные и глобальные переменные | Последовательность разработки программы
Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 489 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

1000 - | 813 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.