- •Центр Компьютерного Обучения
- •Подпрограммы: процедуры.
- •1. Структурное программирование и технология нисходящего программирования.
- •2. Подпрограммы в языке Pascal. Понятие «процедура».
- •3. Формальные и фактические параметры.
- •4. Параметры-значения и параметры-переменные (входные и выходные параметры) подпрограмм, механизм передачи параметров (можно перенести на Занятие 2, если не хватит времени).
- •5. Локальные и глобальные переменные, область действия переменных
- •Подпрограммы: функции
- •Функция не имеет выходных параметров, она возвращает единственное значение (результат);
- •Рекурсия
- •Строковый тип данных – String
- •6. Для обработки строковых данных можно использовать стандартные процедуры и функции, описание которых можно найти в [1] или в любом справочнике по Pascal.
- •1. Общие сведения.
- •5. Доступ к компонентам файла.
- •Дополнительно (на усмотрение преподавателя!!!) процедуры Rename и Erase.
- •Текстовые файлы
- •1. Назначение.
- •Типизированные файлы
- •Динамические структуры данных
- •1. Статическая и динамическая память.
- •Распределение памяти.
- •2. Статические и динамические переменные.
- •Статическая переменная:
- •4. Доступ к переменной по указателю.
- •5. Управление динамической памятью (процедуры New и Dispose).
- •Формирование с помощью указателей однонаправленного списка по принципу стека, поиск элемента
- •Однонаправленный список
- •Пояснения к программе
- •Формирование с помощью указателей однонаправленного списка по принципу «очереди», поиск элемента
- •Пояснения к программе
- •Удаление элемента из линейного однонаправленного списка
5. Локальные и глобальные переменные, область действия переменных
Все объекты (метки, константы, переменные, типы, процедуры и функции), которые описываются после заголовка подпрограммы, называются локальными объектами и доступны только в пределах этой процедуры, но недоступны вызывающей программе. Все эти объекты создаются при входе в подпрограмму и уничтожаются при выходе из нее. Если одно и то же имя определено в нескольких процедурах, вызываемых одной и той же программой, то в каждой процедуре этому имени соответствует свой локальный объект.
Все объекты, описанные в вызывающей программе, называются глобальными и являются доступными внутри подпрограмм, вызываемых этой программой. Поэтому обмен данными между основной программой и вызываемой ею подпрограммой может производиться и через глобальные переменные.
Если одно и то же имя определено и в программе, и в вызываемой ею процедуре, то ему соответствует глобальный объект, но внутри процедуры глобальный объект недоступен, он как бы экранируется (маскируется) локальным объектом с таким же именем.
Например, ( см. задачу 1) массивы А и В являются глобальными переменными, а i – локальной переменной.
В Pascal допускается любой уровень вложенности подпрограмм. Процедура, описанная в основной программ, в свою очередь. Может иметь описания внутренних процедур и функций и т. д. При этом объекты, описанные в вызывающей процедуре, являются глобальными по отношению к вызываемой процедуре. Если схематично изобразить некоторую программу,
то можно сформулировать следующие правила для доступа к объектам, описанным в различных блоках:
имена объектов, описанных в некотором блоке, считаются известными в пределах данного блока, включая и все вложенные (например, вложенными являются блоки C и D по отношению к блоку В);
имена объектов, описанных в блоке, должны быть уникальны в пределах данного блока и могут совпадать с именами объектов из других блоков;
если в некотором блоке описан объект, имя которого совпадает с именем объекта, описанного во внешнем блоке (например, для блока F внешним является блок Е), то имя объекта внешнего блока становится недоступным в данном блоке (оно как бы экранируется одноименным объектом данного блока).
Например, (см. рис.) можно сказать, что объекты, описанные в блоке В, известны (видимы) кроме самого блока В еще и в блоках С и D, но невидимы в блоке А. Объекты, описанные в блоке F, известны только в пределах этого блока.
Задача 2. С помощью датчика случайных чисел сформировать матрицы А{5,6} и В{7,5}. Вывести их на экран. Использовать процедуры. Для каждой матрицы сформировать одномерный массив из сумм элементов каждой строки.
а) Схема алгоритма основной программы:
б) Схема алгоритма процедуры формирования матрицы:
в) Схема алгоритма процедуры вывода матрицы:
г) Схема алгоритма процедуры вывода массива:
д) Схема алгоритма процедуры формирования массива из матрицы:
Program Primer; Uses Crt; Type Matrica=array[1..7,1..6] of Integer; Massiv=array[1..7] of Integer; Var A, B : Matrica; E, F : Massiv; Procedure Input(Var D:Matrica; N,K:Integer); Var i, j : Integer; Begin Randomize; For i:=1 to N Do For j:=1 to K Do D[i,j]:=Random(10)-5; End; Procedure Output(D:Matrica; N,K:Integer); Var i, j : Integer; Begin For i:=1 to N Do Begin For j:=1 to K Do Write(D[i,j]:4,’ ‘); Writeln; End; End; Procedure Output_Massiv(Z:Massiv; N:Integer); Var i : Integer; Begin For i:=1 to N Do Writeln(Z[i]:4); End; Procedure Form_Massiv(Var Z:Massiv;D: Matrica; Var S, i, j : Integer; Begin For i:=1 to N Do Begin S:=0; For j:=1 to K Do S:=S+D[i,j]; Z[i]:=S; End; End; Begin Input(A,5,6); Input(B,7,5); Form_Massiv(E,A,5,6); Form_Massiv(F,B,7,5); Clrscr; Writeln(‘Матрица А’); Output(A,5,6); Writeln(‘Массив Е’); Output_Massiv(E,5); Readkey; Clrscr; Writeln(‘Матрица В’); Output(В,7,5); Writeln(‘Массив F’); Output_Massiv(F,7); Readkey; End. |
{заголовок программы}
{объявление типа матрица с макс. числом} {строк и столбцов и типа массив} {объявление переменных}
{процедура формирования матрицы} {указанной размерности} {N – число строк в матрице} {K – число столбцов в матрице} {формирование матрицы с помощью} {датчика случайных чисел}
{процедура вывода матрицы нужной} {размерности} {N – число строк в матрице} {K – число столбцов в матрице}
{процедура вывода массива указанной} {размерности} {N – число элементов в массиве}
N, K : Integer); {процедура формирования} {массива из сумм эл-тов строк матрицы}
{основная программа} (вызов процедуры форм-я для матрицы А) {вызов процедуры форм-я для матрицы В} {вызов проц. форм-я масс. Е из матр. А} {вызов проц. форм-я масс. F из матр. В} {очистка экрана}
{вызов проц. вывода матр. для матр. А}
{вызов проц. вывода масс. для масс. Е}
{вызов проц. вывода матр. для матр. В}
{вызов проц. вывода масс. для масс. F}
{конец программы} |