Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы IT / ЛабаDelphi7.doc
Скачиваний:
62
Добавлен:
06.02.2015
Размер:
265.73 Кб
Скачать

Ключевое слово Result в функции, содержит возвращаемый ею результат определенного типа. Вместо этого слова можно писать имя самой функции.

В отличие от процедуры, для функции всегда указывается не только тип переданных в неё параметров, но и тип возвращаемого функцией значения. В данном случае функция будет возвращать значение типа word.

Далее в обработчике Button2 напишите следующее:

var i:integer; b:word;

begin

for i:=1 to 10 do

Memo1.Lines.Add('Факториал n='+IntToStr(i)+' равен '+IntToStr(Faktorial(i)));

b:=Faktorial(10); { просто присваиваем некоторой переменой типа word

значение функции Faktorial(25);}

ShowMessage(’10! = ’+IntToStr(b));

end;

Запустите программу, убедитесь в правильности её работы, вернитесь в режим программирования.

Нужно отметить, что в данном случае процедура

procedure TForm1.KvadrKoren(a, b, c: real; var x1, x2: real);

и функция function TForm1.Faktorial(n: word): word; являются методами класса TForm1

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

Delphi предоставляет очень полезное окно Module Explorer (Ctrl+Shift+E) – в нем содержится основная информация о текущем программном модуле, о перечне классов, других модулях которые он использует, а также методах классов, процедурах и функциях.

Рис. 7 Окно Module Explorer

Задание 1.3. Создадим функцию, подсчитывающую количество букв «f» в введённой пользователем строке.

Создайте новый проект. Как и в предыдущем случае сбросьте на форму Button1, Button2 и Memo1.

Строку будем вводить при помощи оператора InputBox('Input Box', 'Prompt', 'Default string'), данный оператор является по существу функцией и возвращает строковое значение 'Default string' типа string.

Так же в Public объявите прототип и сформируйте функцию Funkfff(s:string):word;

Таким образом, функция будет получать в качестве параметра значение строковой переменной s, а возвращать количество букв «f» содержащихся в данной строке.

Реализация функции должна быть следующая:

function TForm1.Funkfff(s: string): word;

var i,sum:word;

begin

sum:=0;

for i:=1 to length(s) do

if s[i]='f' then sum:=sum+1;

result:=sum;

end;

Здесь length(s) – стандартная функция возвращающая длину строки s, то есть количество всех символов в строке.

В обработчике щелчка на Button1 напишите следующее:

var s:string;

begin

s:=inputBox('Ввод строки','Введите строку','');

messageDlg('Число букв f равно '+IntToStr(Funkfff(s) ),mtInformation,[mbOk],0);

end;

Запустите программу, убедитесь в правильности её работы, вернитесь в режим программирования.

Задание 1.4. Здесь же создадим процедуру по имени Mas (метод Класса TForm1), получающую в качестве параметра некоторый одномерный массив, и постоянное число N, которая будет определять: сумму N элементов массива, среднее арифметическое N его элементов, а также менять чётные элементы массива на -1.

Так как процедура должна менять чётные элементы массива на -1, а значит должна иметь доступ к оригинальному массиву, то в процедуре перед переданным параметром-массивом должно быть слово Var (передача по ссылке).

В Public объявите прототип и сформируйте процедуру

Mas(var a: array of integer; const N:integer; var Sum:integer; var Sred:real);

Код функции должен быть следующим:

procedure TForm1.Mas(var a: array of integer; const N:integer;

var Sum:integer; var Sred:real);

var i:integer;

begin

sum:=0;

for i:=0 to N-1 do sum:=sum+a[i];

sred:=sum/N;

for i:=0 to N-1 do if (a[i] mod 2)=0 then a[i]:=-1;

end;

Здесь в процедуре индексация массива идет с нулевого индекса, поэтому первый элемент это a[0], второй элемент a[1] и т.д.

Мы будем вызывать процедуру Mas из обработчика щелчка кнопки Button2, поэтому в обработчике Button2 напишите следующее:

const N=5;

var i:integer; a:array[1..N] of integer; Sum:integer; Sred:real;

begin

memo1.Clear;

memo1.Lines.Add('Выводим начальный массив');

for i:=1 to N do begin

a[i]:=Random(9); memo1.Lines.Add( IntToStr(a[i]) );

end;

mas(a,N,Sum,Sred);// Вызываем процедуру

Memo1.Lines.Add('Sum='+IntToStr(Sum)+' Sred='+FloatToStr(Sred));

memo1.Lines.Add('');

memo1.Lines.Add('Выводим измененный массив');

for i:=1 to N do memo1.Lines.Add( IntToStr(a[i]) );

end;

Запустите программу, убедитесь в правильности её работы. Результат должен быть примерно следующим(рис. 8). Вернитесь в режим программирования.

Рис. 8 Окно приложения (в режиме работы) определяющего сумму элементов массива, среднее арифметическое элементов и т.д.

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

Соседние файлы в папке Лабы IT