Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

How many square feet of sheets do you have?




123.21

You can cover a square with sides of 11.1 feet with your sheets.

Функции, определяемые пользователем

В любой программе на Delphi должен присутствовать основной блок программы begin.. end. определяемый пользователем. Теперь предположим, что в программу необходимо добавить еще одну, определяемую пользователем функцию. Как и в случае с библиотечными функциями, для вызова определяемой пользователем функции в программе используется ее имя. И так же, как для библиотечных функций, в программе следует поместить определение функции до ее вызова; обычно определение помещается непосредственно перед основным блоком программы begin.. end... Этот способ иллюстрируется в листинге 1.5.

Программа 1_5

// определение собственной функции

program Project1;

 

{$APPTYPE CONSOLE}

 

Uses

SysUtils;

Var

count: Integer;

 

procedure simon(n: Integer); //определение функции simon()

Begin

Writeln(' Alex fired a machine gun ', n, ' times.');

end;

 

Begin

simon(3); //вызов функции simon()

Write('Pick an integer: ');

Readln(count);

simon(count); //повторный вызов этой функции

Readln;

end.

Основной блок программы вызывает функцию simon() дважды. Первый раз аргументом является число 3, а второй раз — переменная count. Между этими вызовами пользователь вводит целое число, которое сохраняется в переменной count.

Ниже приведен пример выходных данных программы:

Simon says touch your toes 3 times.

Pick an integer: 512

Simon says touch your toes 512 times.


Формат определения функции/процедуры

Сначала идет заголовок функции, затем следует тело функции/процедуры ограниченное зарезервированными слоами begin и end.

В общем случае формат определения функции следующий:

function имя_функции(список_аргументов): тип_возвращаемого_значения;

Begin

Операторы

end;

В общем случае формат определения процедуры следующий:

procedure имя_процедуры(список_аргументов);

Begin

Операторы

end;

Заголовок функции/процедуры

Заголовок функции/процедуры определяет интерфейс между функцией и остальной частью программы, а тело функции содержит инструкции для компьютера, т.е. определяет то, что собственно делает функция.

Заголовок процедуры simon() имеет следующий вид:

procedure simon(n: Integer);

Начальное ключевое слово procedure означает, что процедура simon() не имеет возвращаемого значения. Следовательно, в результате вызова процедуры simon() не будет получено число, которое можно было бы присвоить какой-нибудь переменной в основном блоке программы. Итак, первый вызов этой процедуры выглядит следующим образом:

simon(3); // правильно для функций без возвращаемого значения

Поскольку в процедуре simon() отсутствует возвращаемое значение, ее нельзя использовать таким образом:

simple:= simon(3); //недопустимо для процедуры без возвращаемого значения

Выражение n: Integer в круглых скобках означает, что процедура simon() имеет один аргумент типа Integer. Здесь n — это новая переменная, которой присваивается значение, передаваемое в функцию во время ее вызова. Таким образом, при вызове следующей функции

simon(3);

переменной n, определенной в заголовке этой процедуры, присваивается значение 3. Переменная n в операторе WriteLn означает, что используется ее значение, передаваемое в процедуру при вызове. Вот почему в выходных данных процедуры simon(3) отображается число 3. В примере выходных данных при втором вызове процедуры simon(count) отображается число 512, поскольку это значение было присвоено переменной count. Иными словами, заголовок процедуры simon() информирует программу о том, что эта процедура принимает один аргумент типа Integer и у нее отсутствует возвращаемое значение.

Определяемая пользователем функция
с возвращаемым значением

Теперь сделаем еще один шаг вперед и напишем функцию, в которой используется оператор Result (оператор возврата). С помощью такой функции можно решить проблему преобразования сантиметров в миллиметры.

Программа 1_6

program Project1; //преобразование см в мм

 

{$APPTYPE CONSOLE}

 

Uses

SysUtils;

 

Var

cm, mm: Integer;

 

function cm_to_mm(cantim: Integer): Integer;

Begin

Result:= cantim * 10;

end;

 

Begin

Write('Enter length in cm: ');

Readln(cm);

mm:= cm_to_mm(cm);

Writeln(cm, ' cm = ', mm, ' mm');

Readln;

end.

В результате выполнения программы мы получим следующие результаты:

Enter length in cm: 14

14 cm = 140 mm

С помощью оператора ReadLn основной блок программы вводит значение для целочисленной переменной cm. Это значение передается функции cm_to_mm() в качестве аргумента. Функция cm_to_mm() присваивает данное значение переменной cantim и, используя ключевое слово result, возвращает в основной блок значение 14 * cantim. Такая запись оператора Result иллюстрирует тот факт, что за ключевым словом Result вовсе не обязательно должно следовать простое число. Используя в данном операторе сложное выражение, мы избегаем необходимости создавать новую переменную и присваивать ей возвращаемое значение перед передачей вызывающей функции. Программа вычисляет значение этого выражения (в данном примере 140) и возвращает результирующее значение.

 

Вопросы для повторения

1. Какой оператор следует использовать, чтобы вывести фразу 'Hello, world' и перейти на начало новой строки?

2. Какой оператор следует использовать, чтобы создать целочисленную переменную с именем cheeses?

3. Какой оператор следует использовать, чтобы присвоить переменной cheeses значение 32?

4. Какой оператор следует использовать для ввода значения с клавиатуры и присвоения его переменной cheeses?

5. Какой оператор следует использовать для вывода предложения 'We have X varieties of cheeses', где буква X будет заменяться текущим значением переменной cheeses?

6. Какую информацию о функции дает следующий заголовок функции?

function froop(t: Real): Integer;

Упражнения по программированию

1. Напишите программу, которая отображает на экране ваше имя и адрес?

2. Напишите программу, которая запрашивает расстояние в километрах и переводит его в метры.

3. Напишите программу, которая состоит из двух определяемых пользователем процедур, которые выводят на экран следующие данные:

Three blind mice

Three blind mice

See how they run

See how they run

Одна процедура, вызываемая дважды, должна отображать две первые строки, а другая, также вызываемая дважды, должна отображать остальные выходные данные.

4. Напишите программу, в которой основной блок программы вызывает определяемую пользователем функцию, принимающую в качестве аргумента значение температуры в градусах по Цельсию и возвращающую эквивалентное значением в градусах по Фаренгейту. По запросу программы температуру в градусах Цельсия вводит пользователь. Затем программа отображает результат. Данные, выводимые на экран, имеют следующий вид:

Please enter a Celsius value: 20

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...