Процедурное программирование в Delphi

Листинг 4.1 .Текст линейной программы

 

Команда 1

Команда 2

Команда 3

...

Команда N.

 

Используя такой подход к программированию, можно было сделать очень немного. Единственное, что было доступно программисту для создания логики в данном случае, — это условные переходы. Под условным переходом понимается переход на какую-то команду при определенных условиях, которые сложились в процессе обработки данных на процессоре.

 

Например листинг 4.2.

 

Если выполнено условие, то перейти на

команду 1,

иначе на команду 3.

Команда 1

Команда 2

Команда 3

Команда N.

 

 

Это единственная логика, с помощью которой можно было выполнять опреде­ленные действия, зависящие от конкретных ситуаций, которые могут сложиться в процессе вычислений. Но программы оставались плоскими и неудобными, пото­му что написать таким образом сложную логику невозможно. Линейным програм­мированием можно 

создать только линейную логику, которая проведет вас по оп­ределенным шагам. Например, мастера в программах имеют линейную логику. Она может разветвляться по ходу выполнения шагов мастера, но не может делать что- то более сложное.

 

Взгляните на программу MS Word. В ней трудно представить себе линейность, потому что здесь как бы присутствует диалог с программой. Вы говорите, что вам надо, а она выполняет ваши действия. При линейном программировании можно создать только такую логику, при которой компьютер запрашивает определенные параметры (данные), и вы вводите их, а отступить от линейности, заложенной в такую логику, очень сложно.

 

Следующим шагом стал процедурный подход. При этом подходе какой-то код программы мог объединяться в отдельные блоки (процедуры). После этого такой блок команд можно вызывать из любой части программы. Например листинг 4.3.

 

Начало процедуры1

Команда 1

Команда 2

Конец процедуры 1

 

Начало программы

Команда 1

Команда 2

Если выполнено условие, то выполнить код процедуры 1.

Команда 3

Конец программы.

 

В результате появилась возможность использовать один и тот же код в одной программе неоднократно. Код программ стал более удобным и простым для пони­мания. Именно таким был отец Delphi — язык программирования Turbo/Borland Pascal, который со временем превратился в Object Pascal. И именно на этом языке, учился программированию ваш покорный слуга. Это потом уже я изучил C/C++, Assembler и Java, а первым был именно Turbo Pascal.

 

Но вернемся к процедурам. Процедуры (и их разновидность — методы) сохра­нились до сих пор и используются везде, поэтому их понимание очень важно. В процедуры можно передавать различные значения, заставляя их что-то рассчи­тывать.

 

Начало процедуры 1 (Переменная 1: строка) 
Команда 1 
Команда 2 
Конец процедуры 1

Начало программы 
Команда 1 
Команда 2
Если выполнено условие, то выполнить код процедуры 1. 
Команда 3 
Конец программы.

 

В этом примере (листинг 4.4) после начала процедуры в скобках указан тип пе­редаваемой переменной. Таким образом, в процедуру можно поместить код какой- нибудь математики и определить параметры в виде переменных, которые исполь­зуются в этом коде, а затем только передавать ей разные значения в качестве этих параметров. Процедуры остались и в наше время. Чуть позже мы познакомимся с ними на практике применительно к Delphi.

 

Сразу хочу заметить, что использование процедуры часто называют "Вызов процедуры". Это действительно так, т. е. процедура как бы вызывается.

Давайте рассмотрим пример процедуры (листинг 4.5), приближенный к реальности.

Начало процедуры 1 (Переменная 1: Целое число)

Посчитать факториал числа, находящегося в Переменной 1.

Вывести результат на экран.

Конец процедуры 1

Начало программы

Процедура 1 (10)

Процедура 1 (5)

Процедура 1 (8)

Конец программы.

В этом примере условно используется процедура, которая вычисляет факториал переданного ей значения и потом выводит результат на экран. В самой программе эта процедура используется как процедура 1 (Ю), где цифра в скобках означает переданное ей значение. Вот так получается универсальная процедура, которая считает факториал и выводит результат на экран. Как это все работает? Давай рас­смотрим следующий алгоритм.

1. Начало программы.

2. Вызов процедуры Процедура 1 (10) и передача ей значения 10.

3. Процедура вычисляет факториал числа 10 и выводит результат на экран.

4. Выход из процедуры и продолжение выполнения программы.

5. Вызов процедуры Процедура 1 (5) и передача ей значения 5.

6. Процедура вычисляет факториал числа 5 и выводит результат на экран. И т. д. Как видите, код программы очень удобен.

Но процедуры — это мелочи жизни. Более удобным стало использование функ­ций. Функция — это та же процедура, только она умеет возвращать значение, т. е. результат своего выполнения (листинг 4.6).

 

Начало Функции 1: Тип возвращаемого значения — целое число

Команда 1

Команда 2

Конец Функции 1

 

Начало программы

Команда 1

Команда 2

Если выполнено условие, то выполнить код процедуры 1.

Команда 3

Конец программы.

 

Заметьте, что после двоеточия идет описание типа возвращаемого значения. Теперь рассмотрим ту же ситуацию с факториалом.

Допустим, нам надо рассчи­тать факториал для последующего использования, но не для вывода на экран. Та­кая задача легко решается с помощью функций (листинг 4.7).

 

 

Начало Функции 1 (Переменная 1: Целое число): Целое число

Посчитать факториал числа, находящегося в Переменной 1.

Вернуть результат расчета.

Конец Функции 1

Начало программы

Переменная 1 := Функция 1 (10)

Переменная 2 := Функция 1 (5)

Переменная 3 := Переменная 1+Переменная 2 Вывести на экран Переменную 3

Конец программы.

В этом примере в "переменную 1" записывается результат расчета факториала 10! (переменная1 := Функция 1 (Ю)). В "переменную 2" записывается результат расчета факториала 5!. После этого значения переменных складываются и резуль­тат сложения записывается в переменную 3. Последнее действие программы — вывод на экран содержимого переменной 3.

dle

Помоги проекту! Расскажи друзьям об этом сайте: