Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_пособие_Прг+КР.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
913.41 Кб
Скачать

4.6. Массивы.

Массив – структура данных, представляющая собой набор переменных одинакового типа, имеющих общее имя.

Каждый элемент массива однозначно определяется именем и индексом (номером элемента в массиве), причем индексы массива принадлежат целочисленному типу.

Массив может быть:

  • одномерным a[ i ] ( i – номер элемента)

  • двумерным b[i,j] ( i –номер строки , j – номер столбца)

Формат объявления одномерного массива:

<Имя>=array [<нижний индекс . . верхний индекс>] of <тип>;

где: Имя – имя массива; array – зарезервированное слово языка, обозначающее объявление массива; нижний индекс и верхний индекс – целые константы, определяющие диапазон изменения индекса элементов массива; тип – тип элементов массива.

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

Формат объявления массива с инициализацией:

<Имя>=array [<нижний индекс . . верхний индекс>] of <тип>=

(список); //одномерный массив

<Имя>=array [<нижний индекс . . верхний индекс>строк,

<нижний индекс . . верхний индекс>столбцов,] of

<тип>= (список); //двумерный массив

Количество элементов списка инициализации должно соответствовать размерности массива.

Локальный массив (в процедуре) можно инициализировать во время выполнения программы в цикле.

Например:

for i :=1 to 10 do

begin

Writeln( 'Vvedite', i, 'element massive  А' );

Readln( А [ i ] ); //ввод элемента массива А

end;

Операции, производимые над элементами массива, полностью определяются типом этих элементов.

Типовыми операциями при работе с массивами являются: ввод и вывод элементов массива, поиск максимального или минимального элемента массива поиск заданного элемента массива, сортировка массива./ При вводе элементов массива удобно использовать оператор цикла for, при этом переменная счетчик может быть использована в качестве индекса элементов массива.

Иногда в качестве элементов массива используют случайные числа, которые можно получить с помощью функции Random(x), где х - случайное число в диапазоне 0..x-1.

Перед первым обращением к функции Random() необходимо вызовом процедуры Randomize и инициализировать программный генератор случайных чисел. Например,

begin

Randomize; //обращение к генератору случайных чисел

for I := 1 to 10 do

begin

A[i]:= Random(20); //присвоение элементам массива А значений

// случайных чисел в диапазоне от 0 до 19

write(A[i] ,' '); //вывод элементов массива в строку

end;

4.7. Подпрограммы.

Программа разбивается на несколько мелких подпрограмм, каждая из которых выполняет определенное действие, предусмотренное исходным заданием. Таким образом, подпрограмма – набор операторов, выполняющих нужное действие и не зависящих от других частей исходного текста. Комбинируя подпрограммы, удается формировать итоговый алгоритм из законченных блоков, к которым можно обращаться по названию.

"Вызов" подпрограммы, то есть выполнение действий, заданных в ней в виде операторов, может быть произведён в некоторой точке программы посредством указания имени этой подпрограммы.

4.7 1. Формальные и фактические параметры

Формальные параметры (или просто параметры) – это данные, с которыми работает подпрограмма. Параметры перечисляются в заголовке подпрограммы в определённой последовательности и с указанием типов. Параметры – внутренние данные для подпрограммы. Они однозначно связаны с аргументами.

Фактические параметры (аргументы) - данные, передаваемые в подпрограмму или возвращаемые из нее. В подпрограмме им соответствуют параметры. Фактические параметры указываются в списке аргументов при обращении к подпрограмме.

Аргументы – внешние для подпрограммы данные, с которыми имеет дело вызывающая часть программы.

Для аргументов и параметров необходимо соблюдать:

  • одинаковое количество;

  • одинаковый порядок следования;

  • совместимость типов.

Формальные параметры разделяются на параметры-значения, параметры-константы, параметры-переменные, параметры процедурного типа.

Параметры-значения передаются подпрограмме через короткий стек в виде копий, остаются неизменными и являются входными параметрами подпрограмм. В списке формальных параметров указывается только их тип, например (х, у: real).

Параметры-константы также передаются подпрограмме в виде копий, но с помощью адресов, что позволяет избежать ошибок, связанных с переполнением стека. Изменяться подпрограммой не могут. В списке формальных параметров снабжаются служебным словом const, например (const s: real).

Параметры-переменные передаются подпрограмме с помощью адресов. Значения параметров могут изменяться подпрограммой. Являются выходными параметрами подпрограмм. В списке формальных параметров снабжаются служебным словом var, например (х, у; var ss: real).

Параметры процедурного типа – это процедуры или функции. В списке формальных параметров задаются именами без служебного слова var и являются параметрами-значениями.

4.7.2. Области действия имён.

Структура подпрограммы идентична структуре программы.

Имена, объявленные в главной программе, являются глобальными. Они доступны во всех внутренних точках программы, в том числе и в подпрограммах. Имена, объявленные в подпрограмме, являются локальными. Они доступны во всех внутренних точках подпрограммы. Во внешней программе локальное имя недоступно.

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

Чтобы в подпрограмме получить доступ к глобальному имени, совпадающим с локальным именем, его надо указывать составным. Формат доступа к глобальному имени:

<имя программы>.<глобальное имя>

4.7.3. Процедура не возвращает значений (например, рисует) или возвращает несколько значений.

Формат объявления процедуры:

Procedure <имя>(p1,p2:T1;...var n1,n2:T2;...const k1,k2:T3);

//заголовок процедуры

{Разделы определений и описаний локальных параметров и подпрограмм}

begin

//Тело процедуры

end;

Заголовок процедуры состоит из служебного слова Procedure, имени процедуры латинскими буквами и списка формальных параметров, заключённого в круглые скобки. В данном случае в списке параметров указаны параметры-значения (р1, р2, …), параметры-переменные (n1, n2, …) и параметры-константы (k1, k2, …). Каждый из видов параметров может включать параметры различных типов. В этом случае они разделяются символом ";".

Процедуры описываются в разделе объявлений главной программы.

Вызывается процедура в разделе операторов главной программы. Формат вызова:

<имя процедуры>(<список аргументов через запятую,

без указания типов>);

4.7. 4. Функция возвращает одно значение.

Формат объявления функции:

Function <имя>(p1,p2:T1;...):<тип результата>;

//заголовок функции

{Разделы определений и описаний локальных параметров и подпрограмм}

begin

{. . . . . . . . .}

<имя>:=<выражение>;

{. . . . . . . . .}

end;

Заголовок функции состоит из служебного слова Function, имени функции латинскими буквами, списка параметров-значений с указанием их типов, заключённого в круглые скобки, и через двоеточие – типа возвращаемого значения.

Структура описания функции подобна структуре описания процедуры. Отличие заключается лишь в том, что в разделе операторов должно быть, по крайней мере, одно присвоение выражения имени функции.

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

Функции описываются в разделе объявлений главной программы.

Вызывается функция в разделе операторов главной программы путем указания ее имени в нужном месте вычисляемого выражения. Формат вызова функции:

<имя функции>(<список аргументов через запятую,

без указания типов>);

Если директивами компилятора разрешен расширенный синтаксис, то допускается вызов функции, как процедуры. При этом возвращаемый функцией результат игнорируется.