- •ВВЕДЕНИЕ
- •1. ЭЛЕМЕНТЫ ЯЗЫКА ПАСКАЛЬ. ЛИНЕЙНЫЕ ПРОГРАММЫ
- •Стандартные функции
- •Функции преобразования типов
- •Порядок вычислений
- •Заданиe 1. Вычислить арифметические выражения
- •2. СТРУКТУРИРОВАННЫЕ ОПЕРАТОРЫ
- •2.1. Составной оператор
- •2.2. Условные операторы
- •2.3. Селективный оператор
- •2.4 Операторы цикла
- •Задание 2.1
- •Задание 2.2
- •Задание 3*
- •4. ПОДПРОГРАММЫ В ПАСКАЛЕ
- •4.1. Процедуры
- •4.2. Функции
- •Задание 4
- •5. МАССИВЫ
- •5.1. Одномерные масивы
- •5.2. Двумерные массивы
- •Задания 5.1
- •Задания 5.2
- •ГЛАВА 7. СОРТИРОВКА МАССИВОВ
- •Сортировка посредством простого выбора
- •Сортировка обменом (метод «пузырька»)
- •Сортировка включением
- •Быстрая сортировка
- •Задание 7.
4. ПОДПРОГРАММЫ В ПАСКАЛЕ
Подпрограмма – это повторяющаяся группа операторов, оформленная в виде программной единицы. Она записывается однократно; в соответствующих местах программы обеспечивается лишь обращение к ней по имени.
Преимущества подпрограмм:
1.Сокращение объема программы.
2.Улучшение структуры программы с точки зрения читаемости
инаглядности.
3.Уменьшение вероятности ошибок и облегчение процесса от-
ладки.
В Паскале механизм подпрограмм реализуется в виде процедур и функций. Они различаются назначением и способом их использования.
4.1.Процедуры
Процедуры предназначены для выполнения некоторой последовательности действий. Любая процедура начинается с заголовка, который является ее обязательной частью. Он состоит из служебного слова Procedure, за которым следует имя процедуры, а в круглых скобках – список формальных параметров. После заголовка могут идти те же разделы, что и в программе. Таким образом, общий вид будет следующим:
Procedure <Имя> (список формальных параметров − может отсутствовать)
<описательная часть>
begin
<тело процудуры>
end;
Например, процедура для вычисления степени целого числа:
Procedure Degree(x,y:integer;var st:longist); {заголовок процедуры} var i: integer; { описательная часть }
35
begin |
{ тело процедуры } |
st:=1 |
|
for |
i=1 to y do st:=st*x; |
end; |
|
Результат передается в основную программу.
При вызове процедуры ее формальные параметры заменяются фактическими в порядке их следования.
Фактический параметр – это параметр, который передается процедуре при обращении к ней.
Число и тип формальных и фактических параметров должны совпадать.
Формальный параметр – это переменная, фиктивно присутствующая в процедуре и определяющая тип и место подстановки фактических параметров. Все формальные параметры делятся на два вида: параметры-переменные и параметры-значения.
1)Параметры-переменные (st) − это формальные параметры, перед которыми стоит служебное слово var. Они передаются по ссылке, когда необходимо передать новые значения в точку вызова процедуры из программы.
2)Параметры-значения (x, y). Перед ними не ставится служебное слово var. Передается только копия значений этих параметров; внутри процедуры можно производить любые действия с данными формальными параметрами, но их изменения никак не отражаются на значениях соответствующих фактических параметров.
Глобальные переменные – это те переменные, которые объявлены в описании основной части.
Локальные переменные – это те переменные, которые объявлены
впроцедурах и функциях.
Областью действия локальных переменных является та подпрограмма, в которой они описаны.
Пример применения подпрограммы нахождения n-степени чис-
ла a (a,n – целые, n>0).
36
Program PR1; var a,n : integer; s : longint;
procedure Degree(x,y : integer; var st : longint) var i : integer;
begin st:=1;
for i:=1 to y do st:=st*x;
end; begin
writeln(‘Введите два числа’); { ввод значений } readln(a,n);
Degree(a,n,s); { обращение к процедуре } writeln(‘Результат’,s); { вывод значения an } readln;
end.
Процедура вызывается как оператор, состоящий из имени процедуры. В круглых скобках передаются фактические параметры. В нашем примере фактические параметры a, n и s передают свои значения соответственно формальным параметрам x, y и st. После завершения работы процедуры переменные a и n имеют те же значения, что и при вызове, а s получает новое значение.
Пусть a=3 и n=4. Когда в программе встречается оператор Degree(a,n,s), то компьютер выполняет следующие действия:
−выделяет память для переменных, описанных в процедуре
Degree;
−присваивает формальным параметрам значения фактических: x:=a (x=3), y:=n (y=4), st:=s;
−выполняет операторы процедуры, то есть вычисляет 34;
−присваивает полученное значение переменной s, а переменные a и n остаются прежними; после этого переходит к выполнению следующих действий программы.
На рис. 1 показано распределение памяти между переменными, используемыми в процедуре и в основной программе. Прямоуголь-
37
ники соответствуют ячейкам памяти, каждая из них имеет свой адрес. Пересылка параметров идет по значению () или по ссылке (), в первом случае передается только значение, а во втором – передается адрес ячейки, куда после выполнения процедуры будет записано новое значение. Переменные x, y, st, i – это локальные переменные, для них выделяется память только при обращении к данной процедуре, а после завершения ее работы она освобождается.
Рис. 1
После выполнения операторов (по последнему end) идет возврат в точку вызова, при этом если фактические параметры передавались по значению, то они остаются неизменными, а если передавались по ссылке, то в ячейке с данным адресом появится новое значение (рис. 2).
Рис. 2
38