Добавлен: 01.04.2023
Просмотров: 332
Скачиваний: 2
СОДЕРЖАНИЕ
1 Основные элементы языка программирования Pascal
1.1 Алфавит, данные и выражения языка Pascal
1.2. Стандартные простые типы данных и структура программы на языке Pascal
2. Операторы языка программирования Pascal, подпрограммы и сложные типы данных
2.1. Операторы языка программирования Pascal
|
рrogram primer_1; var x: boolean; procedure izmen; begin x:= true; end; begin x:= false; izmen; if x then write (‘true’) else write (‘false’) end. |
Замечания и пояснения к программе. Переменная x описана в основной программе, следовательно, она является глобальной переменной. Описанная в основной программе процедура, изменяет содержимое глобальной переменной, поэтому переменная x принимает значение true (побочный эффект). |
|
рrogram primer_2; var x: boolean; procedure izmen; var x: boolean; begin x:= true; end; begin x:= false; izmen; if x then write (‘true’) else write (‘false’) end. |
Замечания и пояснения к программе. В основной программе x – глобальная переменная, равная false. В процедуре объявлена локальная переменная с тем же именем. Изменение значения локальной переменной никак не повлияет на содержимое глобальной переменной, тогда x остается равным false. |
Источник: Акулов Л. Г. Информатика и программирование: основы программирования на языке Паскаль / Л. Г. Акулов, В. Ю. Наумов, О. А. Авдеюк. – Волгоград: Волгоградский государственный технический университет, 2017. – С. 143.
Для осуществления вызова подпрограммы необходимо указать ее имя и в скобках параметры (если они есть), называемые фактическими параметрами.
В вызываемой подпрограмме список параметров с указанием их типов является аргументами для данной подпрограммы. Эти аргументы называются формальными параметрами или «фиктивными», т. к. над ними не выполняется никаких арифметических операций. Вычисления производятся только над фактическими параметрами [14].
Все идентификаторы, введенные в разделе формальных параметров: определения констант, типов, описании переменных, процедур или функций, локальны в данном описании процедуры, что и является их областью определенности. Они не доступны вне этой области. Значения локальных переменных в момент входа в подпрограмму не определены.
Пример: пусть в программе А вызывается процедура В.
program A;
procedure B (x, y: real); begin end; {B}
begin
B (3.09, pi / 2);
end. {A}
В рассмотренном примере значения 3.09 и pi / 2 являются фактическими параметрами, а переменные x и y являются формальными параметрами.
Формальные и фактические параметры обязательно должны совпадать по количеству, порядку следования и типу [2].
Список формальных параметров может включать в себя: параметры-значения, параметры-переменные, параметры-процедуры (перед ними указывается procedure) и параметры-функции (перед ними указывается function). В наше рассмотрение включены первые два вида параметров, как наиболее часто используемые:
1) параметры-значения
Описание состоит в указании его имени и через двоеточие типа.
Требования к использованию:
– передаются из основной программы в подпрограмму в виде копии значения, т. е. происходит присваивание значений фактических параметров формальным;
– изменение значений переменных в подпрограмме никак не повлияет на значения переменных из основной программы;
– тип параметра может быть любым, за исключением файлового;
– значением фактического параметра для формального параметра-значения может быть выражением.
2) параметры-переменные
Описание аналогично описанию параметров-значений, но только перед именем параметра записывается зарезервированное слово var.
Требования к использованию:
– передаются из основной программы в подпрограмму фактически в виде адресов переменных, т. е. подпрограмма имеет доступ к этим параметрам и может их изменять;
– в качестве значения фактического параметра для формального параметрапеременной запрещено использовать выражение [16, C. 39].
Рассмотрим на примерах программ primer_3 и primer_4 различия в использовании формальных параметров: параметров-переменных и параметров-значений посредством изменения значения переменной логического типа, они представлены в Таблице 8.
Таблица 8
Различия в использовании формальных параметров на примерах
|
рrogram primer_3; var x: boolean; procedure izmen (var y: boolean); begin y:= true; end; begin x:=false; izmen (x); if x then write (‘true’) else write (‘false’) end. |
Замечания и пояснения к программе. x – глобальная переменная, y определена в процедуре как параметр-переменная. Следовательно, значение переменной y зависит от значения переменной x и наоборот. С изменением значения переменной y на true, изменяется и значение переменной x, т е. тоже становится равным true. |
|
program primer _4; var x: boolean; procedure izmen (y: boolean); begin y:= true; end; begin x:= false; izmen (x); if x then write (‘true’) else write (‘false’) end. |
Замечания и пояснения к программе. x – глобальная переменная со значением false, переменная y в процедуре определена как параметр-значение. При вызове процедуры выполняется присваивание y:= x. При этом все связи с переменной x теряются, т. е. y:= true никак не влияет на x, следовательно, x остается равным false. |
Источник: Кононов А. Д. Основы программирования на языке Паскаль. Основные понятия алгоритмического языка Паскаль / А. Д. Кононов, А. А. Кононов. – Воронеж: Воронежский государственный архитектурно-строительный университет, 2017. – С. 43.
Заметим, что в программах primer_3 и primer_4 были использованы процедуры, описания которых будет подробно рассмотрено ниже.
В языке Pascal существуют два вида подпрограмм: процедуры и функции. Рассмотрим описание и использование подпрограмм-функций.
Описание любой функции имеет следующий вид:
function <имя функции> ([<список формальных параметров>]): <тип функции> [1];
Требования к использованию:
– обращение к функциям осуществляется только указанием в арифметическом или логическом выражении имени функции и следующих за ним фактических параметров;
– <тип функции> задает тип значения функции, который совпадает с типом значения, сформированным функцией;
– составной оператор задает алгоритм вычисления значения функции;
– функция может формировать только единственное скалярное значение, которое присваивается имени функции одним из операторов, входящим в составной оператор;
– функция обязана вернуть результат работы;
– использование в теле функции ее собственного имени подразумевает рекурсивность выполнения этой процедуры [16, C. 45]
Рассмотрим описание и использование подпрограмм-процедур. У описания процедуры много схожего с описанием функции:
procedure <имя процедуры> ([<список формальных параметров>]);
Требования к использованию:
– назначение процедур состоит в том, чтобы определить некоторые повторяющиеся части программы;
– обращение к процедурам осуществляется с помощью оператора обращения;
– процедура выполняет заданную последовательность действий, не возвращая результат в основную программу;
– результаты работы процедуры могут быть получены основной программой только через параметры-переменные [17, C. 45].
2.3. Сложные типы данных. Массивы
Переменные, встречавшиеся ранее, можно назвать простыми переменными: одно имя переменной связано с единственным значением. Использование простых переменных не всегда оправдано, а точнее, неудобно. Предположим, необходимо хранить в памяти последовательность из n значений для последующей обработки: потребуется ввести соответственно n переменных. А если обрабатывать табличные данные, то число затребованных переменных резко возрастает.
Для решения задач такого типа необходимо определение сложных (структурированных) типов данных, которые состоят как из однотипных, так и из разнотипных данных. В наше рассмотрение входит изучение регулярного типа данных – массивов.
При обработке данных, сгруппированных в последовательности и таблицы, удобнее обращаться к ним как к единому объекту и по одному имени. Структурный регулярный тип данных (массив), как раз, и состоит из совокупности однотипных данных (констант) [1].
Массивы бывают одномерные (один индекс), двумерные (два индекса) и n-мерные (n индексов). Примером одномерного массива может служить вектор, двумерного – матрица (таблица), трехмерного массива – матрица, элементами которой являются векторы. Представить массивы более высокой размерности поможет воображение пользователя [11, C.74].
Набор однотипных данных можно представить в памяти ПК как одномерный массив: type <имя массива> = array [<тип индекса>] of <тип элементов массива>;
Описание переменной типа массив справедливо для любых типов массивов:
var <имя переменной>: <имя массива> [2, C. 149];
На практике наиболее часто используется совмещенное описание переменной типа массив: var <имя переменной>: array [<тип индекса>] of <тип элементов массива>; где <Тип индекса> определяет кроме типа индекса еще и размерность массива, равную количеству заданных индексов;
<Тип элементов массива> называется базовым.
Требования к использованию:
– количество элементов массива должно быть известно до описания массива и не изменяется во время работы программы (однако значение этих компонент описанием не задается);
– к любой компоненте массива имеется прямой доступ. Номер некоторой компоненты массива называется ее индексом и одновременно является ее адресом;
– индексом массива может быть выражение любого скалярного типа, кроме вещественного типа; – диапазон значений индекса определяется типом индекса [16, C.48].
Обращение к элементу одномерного массива: <имя переменной типа массив> [индекс].
Пример: описание type massiv = array [1...20] of real; означает, что определен тип массив с именем massiv, состоящим из 20 компонент типа real; а описание var А: massiv; означает, что переменная А является переменной типа massiv, причем в качестве индекса может быть использовано любое целое число от 1 до 20. Обращение к i-тому элементу массива A есть A [i] [3, C. 182].
Вместо массива возможно использование последовательности значений, если условие задачи не предполагает хранение в памяти всех введенных данных [3].
Размерность массивов всегда определена в виде констант до описания самих массивов [1].
Основные операции над элементами массивов разной размерности рассмотрим на примере четырех описанных массивов A, D, B и C, представленных в Таблице 9.
Таблица 9
Выполнение основных операций над массивами разной размерности
|
Виды операций |
Одномерные массивы |
Двумерные массивы |
|
Инициализация массивов |
for i:= 1 to 10 do A[i]:= 0; |
for i:= 1 to 20 do for j:= 1 to 10 do B[i, j]:= 0; |
|
Ввод значений с клавиатуры |
for i:= 1 to 10 do read (A[i]); |
for i:= 1 to 20 do for j:= 1 to 10 do read (B[i, j]); |
|
Вывод значений на экран |
for i:= 1 to 10 do writeln (A[i]); |
for i:= 1 to 20 do for j:= 1 to 10 do writeln (B[i, j]); |
|
Копирование массивов |
A = D или for i:= 1 to 10 do A[i]:= D[i]; |
B = C или for i:= 1 to 20 do for j:= 1 to 10 do B[i, j]:= C[i, j]; |
Источник: Андреева Т. А. Программирование на языке Pascal / Т. А. Андреева. – М.: НОУ «Интуит», 2016. – С. 179.
var A, D: array [1..10] of real;
B, C: array [1..20, 1..10] of integer;
i, j: integer;
Элементами массива могут быть компоненты структурных типов. Например, массив строк, массив массивов, массив записей, массив указателей, и т. д. [3, C. 180].
Выводы:
Выполнение одного оператора можно сопоставить одному шагу (действию) алгоритма. Последовательность таких операторов и составляют тело программы. Все операторы языка Паскаль можно разделить на три группы: простые, ввода / вывода и структурные.
Использование стандартных процедур и функций не требует предварительного описания и дает ряд преимуществ, обеспечивая возможность: – создания программ как отдельных отлаженных блоков, создаваемых разными пользователями с последующим объединением; – экономии оперативной памяти ПК за счет однократного занесения подпрограммы в память и впоследствии многократного вызова; – локализации в конкретной подпрограмме процесса поиска и исправления ошибок.
ЗАКЛЮЧЕНИЕ
Язык Pascal содержит удобные средства для представления данных. Развитая система типов позволяет адекватно описывать данные, подлежащие обработке, и конструировать структуры данных произвольной сложности.
Pascal является типизированным языком, что означает фиксацию типов переменных при их описании, а также строгий контроль преобразований типов и контроль доступа к данным в соответствии с их типом (как на этапе компиляции, так и при исполнении программ).