Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

284

.pdf
Скачиваний:
1
Добавлен:
15.11.2022
Размер:
2.76 Mб
Скачать

Вначале выполняется оператор <oper>, а затем вычисляется значение логического выражения <expr>. Процесс повторяется, пока выражение <expr> принимает значение «ложь». Как только это значение станет истинным, выполнение цикла прекращается. Поскольку проверка условия выполняется в конце, то тело цикла в любом случае будет выполнено хотя бы один раз.

В качестве оператора <oper> могут применяться любые операторы, то есть простые операторы, составные операторы или структурированные. В случае использования составного оператора операторные скобки Begin и End могут быть опущены и структура цикла будет иметь вид

Repeat

<oper_1>;

<oper_n>; Until <expr>;

Схематическое представление цикла с постусловием отображено на рис. 1.7.

Цикл со счетчиком, или цикл с параметром

Существует две разновидности цикла со счетчиком. Первый из этих операторов на языке TP имеет вид

For i:=<var_1> To < var_2> Do <oper>;

Здесь переменная i – управляющая переменная цикла (пере- менная-счетчик) объявляется как переменная любого целого типа.

При выполнении оператора цикла со счетчиком вначале значение переменной-счетчика присваивается значению <var_1>, далее эта переменная пробегает все значения от исходного <var_1> до <var_2>, увеличиваясь за каждый шаг цикла на 1. При достижении переменной-счетчиком значения <var_2> цикл прекращается. В том случае, когда значение <var_1> оказывается больше значения <var_2>, тело цикла не будет выполняться. Значения <var_1> и <var_2> остаются неизменными

31

elib.pstu.ru

входе выполнения всего цикла. Рассматриваемый вариант цикла со счетчиком эквивалентен следующей последовательности операторов:

i:= <var_1>; k:= <var_2> while j<=k do

begin

<oper>;

i:=i+1;

end;

Второй вариант цикла со счетчиком имеет структуру

For i:=<var_1> Downto < var_2> Do <oper>;

Это вариант аналогичен первому, за исключением того, что

внем переменная-счетчик i на каждом шаге выполнения цикла не увеличивается, а уменьшается на 1.

Дадим некоторые рекомендации по применению циклов:

1.Цикл со счетчиком For используется в том случае, если точно известно, сколько раз должно быть выполнено тело цикла, иначе используются циклы с постили предусловием.

2.Цикл с постусловием Repeat используется, если необходимо, чтобы тело цикла выполнялось хотя бы один раз.

3.Цикл с предусловием While используется, когда требуется, чтобы проверка производилась прежде, чем будет выполняться тело цикла.

1.2.11. Массивы

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

32

elib.pstu.ru

Понятие массивов Массив – упорядоченный набор фиксированного количест-

ва переменных одного типа, имеющий общее имя.

Каждая переменная, входящая в состав массива, называется его элементом.

Из определения массива можно сделать следующие выводы:

каждый элемент массива является переменной, для хранения значения которой в памяти отводится определенная область;

переменные в массиве хранятся не хаотично, а в установленном порядке;

количество переменных в массиве ограничено определенным числом, которое называется размерностью или длиной массива и указывается при его описании;

переменные, входящие в массив, должны хранить данные одного типа, который указывается при описании массива.

Каждому массиву присваивается собственное имя. По аналогии с переменными значения элементов массива до выполнения программы не определены. Значения в элементы записываются с помощью оператора присваивания.

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

имя массива[индекс]

Например: A[1], D[24], Massiv[5], Mas[12]. Здесь D[24] есть имя переменной, которая соответствует 24 элементу массива D.

Над элементами массива можно выполнять те же действия, что и над обычными переменными – присваивать и считывать значения, преобразовывать значения и сравнивать их.

Не нужно забывать, что массив – это тип данных.

33

elib.pstu.ru

Описание массивов

Описание переменных, имеющих тип массива, производится в разделе описания Var посредством указания имени переменной, зарезервированного слова Array, типа его элементов и максимального их количества. Тип элементов может быть любым. При задании максимального числа элементов массива обычно употребляют диапазон целых чисел. Общий вид описания массива следующий:

Var

<Имя массива>: Array [размерность] Of <тип элементов>; К имени массива предъявляются те же требования, что

и к имени любой другой переменной.

Размерность массива – это диапазон целых чисел, каждое из которых является порядковым номером одной из ячеек массива. Обычно диапазон индексов задают, начиная от единицы: [1..100]. Это удобно, но не обязательно. Важно лишь, чтобы правая граница диапазона была больше или равна последней границе.

Массивы могут иметь одну, две или несколько размерностей и называться одномерными, двумерными или многомерными. Для двумерных массивов диапазоны индексов задают в виде [1..100,1..100]. В этом случае массив имеет вид таблицы из 100 строк и 100 столбцов. То есть двумерный массив можно рассматривать как совокупность одномерных массивов. При обращении к элементу двумерного массива необходимо указать два индекса, отвечающих за номер строки и столбца, на пересечении которых расположен данный элемент. Например, при записи Mas[12,5] из массива с именем Mas будет взят элемент, стоящий в 12-й строке и 5-м столбце. Подобным образом производится описание и обращение к элементам массивов большей мерности.

Приведем пример описания переменных, имеющих тип массива.

34

elib.pstu.ru

Const

n=10;

Var

A:Array [1..n] of Real;

B:Array [1..2*n,1..3*n] of Integer;

Здесь переменная A является одномерным массивом, состоящим из 10 элементов, каждый из которых имеет вещественный тип Real. Переменная B представляет собой двумерный массив, состоящий из 20 строчек и 30 столбцов, каждый элемент которого (всего элементов 20×30 = 600) имеет целый тип Integer.

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

вдиапазон индексов, то это приведет к ошибке.

Вкачестве индекса элемента массива можно использовать не только целое число, соответствующее порядковому номеру этого элемента в массиве, но и любое выражение, значение которого тождественно равно упомянутому целому числу. Например, при i 4 и j 2 обращение ко второму элементу одно-

мерного массива А можно записать так: A[2], A[i–j], A[i div j], A[i–j], A[2*i3*j]

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

35

elib.pstu.ru

Приведем пример заполнения и вывода на экран одномерного массива, состоящего из 10 элементов целого типа, в виде строки чисел. Значения элементов массива будем генерировать случайным образом в диапазоне от 0 до 19.

For i:=1 to 10 do begin

A[i]:=Random(20);

Write(A[i]:4); end;

Writeln;

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

1.2.12. Процедуры и функции

Процедуры и функции, их еще называют подпрограммами, используются в тех случаях, если:

1)алгоритм или программа содержат одинаковые действия, различающиеся, возможно, исходными данными;

2)решаемая задача состоит из нескольких задач, меньших по объему и сложности;

3)решением задачи занимается коллектив программистов.

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

Работа с подпрограммами в TP состоит из двух частей: описание подпрограммы и обращение к ней. Описание подпрограмм располагается в специально отведенном разделе описания основной программы (см. рис. 1.10 – разделы описания процедур и функций). Обращение к подпрограммам выполняется из основной программы. Для этого необходимо указать имя подпрограммы и перечислить входные и выходные параметры.

36

elib.pstu.ru

Входные данные – это значения переменных, которые являются аргументами подпрограммы, т.е. пересылаются в подпрограмму. Выходные данные – это значения переменных, которые возвращаются из подпрограммы. Пересылка всех данных производится там, где был произведен вызов подпрограммы.

Вызов подпрограмм можно организовывать как из основной программы, так и из других подпрограмм.

Подпрограмма оформляется подобно основной программе, то есть состоит:

из заголовка;

раздела описаний;

раздела исполняемых операторов (тела подпрограммы). К именам подпрограмм предъявляются те же требования,

что и к именам любых других переменных.

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

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

В TP есть два вида подпрограмм:

Procedure – процедура; Function – функция.

Описание процедур

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

Procedure <имя> (<список формальных параметров>); <Раздел описаний>;

Begin

<Раздел операторов>;

End;

37

elib.pstu.ru

Раздел описаний процедуры подобен разделу описаний программы и состоит из разделов меток, констант, типов, переменных, процедур и функций. Он может отсутствовать вообще.

Раздел операторов заключен в операторные скобки Begin

иEnd.

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

параметры-значения;

параметры-переменные (перед ними должно стоять слово var);

параметры-процедуры (перед ними должно стоять служебное слово Procedure);

параметры-функции (перед ними должно стоять служебное слово Function).

Вызов (выполнение) процедуры происходит при ее вызове по имени:

<имя> (<фактические параметры>);

Между формальными и фактическими параметрами должно быть полное соответствие:

количество формальных и фактических параметров должно совпадать;

порядок следования формальных и фактических параметров должен быть одинаков;

тип каждого фактического параметра должен совпадать

стипом соответствующего ему формального параметра.

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

38

elib.pstu.ru

Хотя параметры процедуры делятся на отдельные виды, в простых программах чаще всего используются параметрызначения и параметры-переменные. Данные этих параметров передаются в обоих направлениях, из программы в процедуру и наоборот.

Параметры-значения (перед ними не стоит слово Var) можно передавать только в одном направлении: из программы в процедуру, то есть параметры-значения могут быть только входным для процедуры, а параметры-переменные как входными, так и выходными.

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

ВTP допускается использование процедур без параметров.

Вэтом случае отсутствуют как формальные, так и фактические параметры.

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

Procedure Pr (x, y: real; Var z:real);

Begin

z:=x*y;

End;

Вызвать эту процедуру можно следующим образом: A : 5.5 ; B : 3.2 ;

Pr(A,B,C);

Здесь значения параметров А и В передаются в процедуру параметрами x, y. Значение параметра-переменной z вычисляется внутри процедуры и пересылается, при вызове, в переменную C.

Допускается одинаковое обозначение соответствующих формальных и фактических параметров.

39

elib.pstu.ru

Описание функций

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

Общий вид описания функции: Function <имя функции> (<список формальных параметров>): <тип результата>;

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

Применение функции с побочным эффектом нарушает структурированность программы, поэтому их использование нежелательно.

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

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

Function F(x, y: real):real;

Begin

F:=x*y;

End;

Вызвать эту функцию можно следующим образом: A : 5.5 ; B: 3.2 ;

C : F A,B ;

1.2.13. Работа с файлами

Ввод и вывод данных в TP может осуществляться не только с клавиатуры на монитор, но и через файлы. Файл – это поименованная область памяти на внешнем носителе, предназначенная для хранения данных. Он может размещаться на гибких и жестких дисках. Для этого в TP существует специальный тип

40

elib.pstu.ru