- •Введение
- •Рекомендуемая литература
- •1. Алгоритмизация и основные этапы работы на эвм
- •1.1. Основные этапы подготовки решения задач на эвм
- •1.2. Алгоритмы и способы их описания.
- •1.3. Базовые алгоритмические структуры.
- •2. Основы программирования
- •2.1. Машинный код процессора
- •2.2. Классификация языков программирования
- •3. Интегрированная среда разработки (иср) Lazarus
- •3.1 Основные характеристики
- •3.2. Консольное приложение
- •3.3. Характеристика проекта консольного приложения
- •4. Алфавит языка Free Pascal
- •4.1. Типы данных
- •4.2. Выражения
- •4.3. Основные стандартные функции
- •4.4. Процедуры ввода и вывода
- •4.5. Операторы
- •4.6. Массивы.
- •4.7. Подпрограммы.
- •4.8. Модули.
- •5. Контрольная работа «Программирование основных алгоритмических структур на языке Free Pascal»
- •5.1. Задания контрольной работы
- •5.2. Требования по оформлению пояснительной записки
- •Министерство рф по связи и информатизации Поволжский государственный университет телекоммуникаций и информатики
- •Программирование основных алгоритмических структур на языке Free Pascal
- •5.3. Методические указания по выполнению заданий
- •6. Перечень контрольных вопросов
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, имени функции латинскими буквами, списка параметров-значений с указанием их типов, заключённого в круглые скобки, и через двоеточие – типа возвращаемого значения.
Структура описания функции подобна структуре описания процедуры. Отличие заключается лишь в том, что в разделе операторов должно быть, по крайней мере, одно присвоение выражения имени функции.
Тип функции должен быть совместим с типом, необходимым для использования в выражении, в котором функция вызывается.
Функции описываются в разделе объявлений главной программы.
Вызывается функция в разделе операторов главной программы путем указания ее имени в нужном месте вычисляемого выражения. Формат вызова функции:
<имя функции>(<список аргументов через запятую,
без указания типов>);
Если директивами компилятора разрешен расширенный синтаксис, то допускается вызов функции, как процедуры. При этом возвращаемый функцией результат игнорируется.
