- •Экзаменационный вопрос №1 базовые понятия алгоритмизации
- •Экзаменационный вопрос №2 средства изображения алгоритмов
- •Экзаменационный вопрос № 3 базовые канонические структуры алгоритмов
- •Экзаменационный вопрос № 16. Общая характеристика языка программирования паскаль
- •Экзаменационный вопрос № 17. Программирование ввода-вывода данных различного типа
- •Экзаменационный вопрос № 18. Программирование линейных вычислительных процессов
- •Экзаменационный вопрос № 19. Программирование разветвляющихся вычислительных процессов с использованием if -then –else
- •Экзаменационный вопрос № 20. Программирование разветвляющихся вычислительных процессов с использованием оператора case
- •Экзаменационный вопрос № 21.
- •Экзаменационный вопрос № 22. Программа вычисления корней квадратного уравнения
- •Экзаменационный вопрос № 23. Программирование разветвляющихся структур с использованием в цикле операторов repeat – until
- •Экзаменационный вопрос № 24. Программа вычисления суммы бесконечного ряда
- •Экзаменационный вопрос № 25. Программирование циклических вычислительных структур
- •Экзаменационный вопрос № 26. Программирование с использованием цикла с параметрами
- •Экзаменационный вопрос № 27. Программирование циклов с постусловием
- •Экзаменационный вопрос № 28. Программирование с использованием подпрограмм
- •Экзаменационный вопрос № 29. Алгоритмы нахождения корней уравнений
- •Экзаменационный вопрос № 30. Алгоритмы численного интегрирования
- •Экзаменационный вопрос № 31. Программа вычисления определенного интеграла методом прямоугольников
- •Экзаменационный вопрос № 32. Программа вычисления определенного интеграла методом трапеций
- •Экзаменационный вопрос № 33. Программа вычисления определенного интеграла методом симпсона
- •Экзаменационный вопрос № 34. Программа вычисления корней алгебраического уравнения методом половинного деления
- •Экзаменационный вопрос № 35. Программа вычисления корней алгебраического уравнения методом ньютона
- •Экзаменационный вопрос № 36. Программа вычисления корней алгебраического уравнения методом хорд
- •Экзаменационный вопрос № 37. Программирование операций в одномерных массивах
- •Экзаменационный вопрос № 38. Программирование операций в двумерных массивах (На примере задания 1)
- •Экзаменационный вопрос № 39. Программирование операций в двумерных массивах (На примере задания 2)
- •Экзаменационный вопрос № 40. Построение графических изображений
- •Экзаменационный вопрос № 41. Программа для построения объекта с циклическим изменением цвета
- •Экзаменационный вопрос № 42. Программа для построения динамического объекта
Экзаменационный вопрос № 28. Программирование с использованием подпрограмм
Для реализации многократно повторяющихся участков вычислений и для обеспечения модульности программ в паскале предусмотрена возможность использования процедур и функций (подпрограмм).
Процедура — это поименованная совокупность операторов, вычисляющих некоторое число результатов в зависимости от некоторого числа аргументов. Она определяется в разделе описаний основной программы, имеет ту же структуру и состоит из заголовка, описательной и выполняемой частей.
Синтаксис заголовка процедуры:
PROCEDURE < имя процедуры > [( <список формальных параметров)];
П р и м е р
PROCEDURE IME (А,В,С : INTEGER; VAR S: REAL);
Здесь IME — имя процедуры, A, B, C, S — имена переменных, являющихся параметрами.
В отличие от основной программы, заголовок в процедуре обязателен, но завершается она не точкой, а точкой с запятой. Описание процедуры выполняется с формальными параметрами.
Оператор процедуры служит для ее вызова из основной программы или из другой процедуры (функции), осуществляемого в следующей форме:
<имя процедуры > [(<список фактических параметров>)];
Таким образом, для приведенного заголовка процедуры можно написать такой оператор вызова: IME (A,B,C,S);
Формат списка параметров в заголовке процедуры и при ее вызове различаются. При вызове переменные, константы или выражения следуют через запятую, а в заголовке запись переменных напоминает их объявление в разделе их описания. Для всех элементов списка должен быть указан тип данных. Несколько переменных, отнесенных к одному типу, пишутся через запятую, а группы различных типов разделяются точкой с запятой. После обращения к процедуре управление передается на выполнение следующего за вызовом процедуры оператора. Функция предназначена для вычисления какого-либо одного значения и используется в выражениях аналогично стандартным функциям.
Синтаксис заголовка функции:
FUNCTION < имя функции >[(<список формальных параметров>)]:
<тип результата>
П р и м е р
FUNCTION IME (A,B,C: INTEGER): REAL;
Отличие описания функции от процедуры:
— результатом обращения к функции может быть одно значение;
— идентификатор результата не указывается в списке формальных параметров;
— в выполняемой части функции хотя бы один раз ее имени должно быть присвоено значение результата (чаще всего перед выходом из функции);
— после списка формальных параметров задается тип результата;
— после обращения к функции управление передается на выполнение следующей операции данного выражения (в соответствии с приоритетом).
Для вызова функции используется указатель функции (ее имя со списком фактических параметров), который обязательно должен быть частью какого-либо выражения.
П р и м е р
S:= IME (А,В,С);
Writeln(IME (A,B,Q);
If IME (A,B,C)>20 then K=K+1;
При описании процедуры (функции) в ее заголовке могут быть указаны формальные и фактические параметры. Причем:
— число формальных и фактических параметров должно быть одинаково;
— порядок следования и тип фактических и формальных параметров должны совпадать;
— идентификаторы формальных и фактических параметров могут совпадать;
— в паскале формальные параметры в заголовке находятся вместе с описаниями и объявлять их в разделе описаний процедуры (функции) не требуется;
— формальные параметры должны иметь простые или ранее определенные типы.
Параметры бывают четырех типов:
значения;
переменные;
функциональные;
процедурные.
Отличие параметров-значений от параметров-переменных рассмотри на следующем примере.
Program p1;
var a,b: integer;
procedure proc1(x: integer; var y: integer);
begin
x:=x+1;
y:=y+1;
end;
begin
a:=10;
b:=10;
proc1(a,b);
writeln(‘a=’, a, ‘ b=’, b);
end.
В результате получим: а =10, b = 11. Так как переменная а передается по значению, то при выполении процедуры создается локальная переменная x, недоступная за пределами этой процедуры. Любые изменения переменной x не затрагивают значения переменной а. Параметр b передается по имени, поэтому любое обращение к переменной y равносильно обращению к переменной b. Основное назначение процедурных и функциональных типов — дать возможность передать функции и процедуры другим подпрограммам. При трансляции программы создается список глобальных, т. е. явно описанных в основной программе, переменных. Когда транслируется подпрограмма, то формируется список локальных переменных, которые явно описаны в данной подпрограмме. Когда в программе встречается имя переменной, она сначала определяется в списке локальных переменных. Если это имя не найдено, то поиск происходит в списке глобальных переменных.
Program primer1;
var a: integer;{глобальная переменная}
……………………..
procedure P1;
var a: integer; {локальная переменная}
begin
……
a:=a+1; {локальная переменная}
end;
begin
a:=a+1; {глобальная переменная}
end.
Таким образом, в подпрограмме предпочтение отдается локальной переменной, а не глобальной. После выполнения подпрограммы выделяемая ею при активизации память освобождается. Поэтому невозможно использовать локальные программные объекты за пределами подпрограммы.
Идея локализации применима не только к переменным, но и к процедурам, а также. Любая подпрограмма в ее блоке может содержать описание других подпрограмм, которые будут локализованы в ней. За ее пределами к ним обратиться нельзя.
