Файл: Основы программирования на языке Pascal.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 331

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

р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 является типизированным языком, что означает фиксацию типов переменных при их описании, а также строгий контроль преобразований типов и контроль доступа к данным в соответствии с их типом (как на этапе компиляции, так и при исполнении программ).