Оператор цикла c постусловием: Repeat.

Оператор REPEAT

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

Оператор повтора repeat состоит из:

• заголовка repeat,

• тела цикла

• условия окончания цикла.

Зарезервированные слова repeat и until, обозначают «повторяй» и «пока» соответственно.

Условие — это выражение логического типа: простое выражение отношения или сложное логическое выражение.

Запись оператора REPEAT

repeat

оператор 1;

…………

оператор N;

until условие выхода из цикла.

Выполнение оператора REPEAT

§ выполняется тело цикла — операторы, которые находятся между repeat и until

§ проверяется значение условия выхода из цикла, записанного после until

§ если оно равно false (ложь), т. е. условие не выполняется —

§ выполняется тело цикла

§ снова проверяется условие

§ если условие примет значение true (истина), происходит выход из цикла.

Следует знать:

§ число повторений операторов цикла repeat определяется в ходе работы программы и во многих случаях заранее неизвестно

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

§ нижняя граница операторов тела цикла четко обозначена словом until поэтому нет необходимости заключать эти операторы в операторные скобки begin и end. В то же время наличие операторных скобок не будет являться ошибкой.

Оператор цикла с предусловием: While.

Оператор while называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

Зарезервированные слова while и do, обозначают «до тех пор пока» и «выполняй» соответственно.

Оператор состоит из заголовка и тела цикла.

Запись оператора

while <условие продолжения повторений> do <тело цикла>;

Условие — булевское выражение, тело цикла — простой или составной оператор.

Тело цикла – простой или составной оператор.

Выполнение оператора WHILE

− вычисляется значение выражения условия.

− если результат равен True

− тело цикла выполняется

− снова вычисляется выражение условия.

− если результат равен False

− происходят выход из цикла

− переход к первому после while оператору.

Следует знать:

§ цикл while — это цикл с предусловием, т. е. операторы тела цикла могут быть не выполнены ни разу если проверяемое условие ложно с самого начала;

§ число повторений операторов цикла while определяется в ходе работы программы и во многих случаях заранее неизвестно;

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

§ цикл while считают самым универсальным видом цикла;

§ цикл while обычно применяется в тех же задачах, что и repeat. Удобнее всего использовать его в тех случаях, когда возможны ситуации невыполнения цикла;

§ в операторе цикла while точка с запятой никогда не ставится после зарезервированного слова do.

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

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

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

Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки списка формальных параметров с указанием типа каждого параметра:

procedureИмяПроцедуры(ФормальныеПараметры);

Например, заголовок процедуры без формальных параметров:

procedure horline;

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

procedure horline(len:integer; s:char); { len, s - формальные параметры}

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

Тело процедуры по своей структуре аналогично обычной программе:

procedureИмяПроцедуры(ФормальныеПараметры) ;

{ Описательная часть процедуры }

Begin

{ Инструкции исполнительной части процедуры }

end;

Обратите внимание — в конце тела процедуры, как и программы, стоит end однако после него ставится точка с запятой.

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

ИмяПроцедуры(ФактическиеПараметры);

Например:

horline; { фактические параметры не указаны, т. к. в }

{ вызываемой процедуре нет формальных параметров }

или

horline(10,'-'); { число и символ — фактические параметры }

Функции

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

□ Функция передает в программу результат своей работы — единственное значение, носителем которого является имя самой функции.

□ Имя функции может входить в выражение как операнд. Функция воз­вращает результат в точку своего вызова.

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

functionИмяФункции(ФормальныеПараметры) : ТипРезультата;

{ n — формальный параметр } { a,b — формальные параметры { формальных параметров нет }

Например:

function fibo(n: integer): integer; function instep(a,b: real): real; function normrandom : double;

Имя функции уникально в пределах программы.

Тело функции по своей структуре аналогично обычной программе:

functionИмяФункции(ФормальныеПараметры) : ТипРезультата; { Описательная часть функции }

Begin

{ Инструкции исполнительной части функции }

ИмяФункции := Результат; end;

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

Файлы

В Turbo Pascal имеются три вида файлов:

  • текстовый файл (определяется типом text);
  • типизированный файл (задается предложением fi1е оf <Тип>);
  • нетипизированный файл (определяется типом f i1е).

var

ИмяПеременной: text;

var

ИмяПеременной:file;

var

ИмяПеременной: file of Тип;

Для работы с файлами в программе необходимо определить файловую переменную (файловый тип) в разделе описаний программы.

Вне зависимости от файлового типа, любая программа работы с файлом должна:

1. Определить переменные файлового типа.

2. Каждому из используемых физических файлов при помощи процедуры assign (в переводе — назначить) программист указывает переменную файлового типа.

3. Инициировать файл — это значит указать направление передачи данных. Работа с файлом возможна, если он существует. Такой файл открывают, делая его доступным для ввода и/или вывода. В случае отсутствия файл должен быть создан. В первом случае используется процедура reset (пе­реустановка), во втором случае — rewrite (перезапись). При открытии и создании файла для временного хранения его данных автоматически вы­деляется область в оперативной памяти компьютера, которая называется; буфером файла.

4. Все предыдущие этапы носили подготовительный характер. Принцип работки файлов любых типов состоит в следующем. Данные из файла сначала считываются в оперативную память компьютера, для чего в программе назначаются переменные подходящих типов. Вся дальнейшая работка ведется для этих переменных. В случае необходимости ее результаты записываются в новый, или дописываются к уже существующее файлу. Чтение (ввод) данных или запись (вывод) выполняется при помощи инструкций read И readln, write И writeln

5. Закрытие файловой переменной и сохранение данных на диске по окон­чании работы с файлом осуществляет процедура close. Если файл за­крыт, над ним нельзя выполнять никаких действий, пока он вновь не будет открыт.

Текстовые файлы состоят из последовательностей строк произвольной длины.

Каждая строка в текстовом файле оканчивается составным символом «конец строки», который является объединением двух символов: #13(CR) – возврат каретки и символа #10 (LF) – перевод строки.

Составной символ обозначается eoln (End Of Line).

Текстовые файлы – файлы последовательного доступа.

Типизированные файлы состоят из последовательности элементов одного типа и длины. Каждый элемент файла имеет номер. Первый элемент файла считается нулевым.

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

Данные в типизированном файле хранятся во внутреннем двоичном представлении (в виде, в котором они хранятся в оперативной памяти).

Строковый тип

Строка — это последовательность символов. Максимальное количество символов в строке (длина строки) может изменяться от 1 до 255. Пере­менную строкового типа можно определить через описание типа в разделе определения типов или непосредственно в разделе объявления переменных. type

ИмяТипа = string[максимальная длина строки]; var

Идентификатор, ... : ИмяТипа;

Строковую переменную можно задать и без предварительного объявления типа:

Var

Идентификатор, ... : string[макс. длина строки];

или

Var

Идентификатор, ... : string;

Если максимальная длина строки не указывается, то она равна 255 байт.

Строка в языке Turbo Pascal трактуется как массив символов. Для строки из n символов в памяти отводится n+1 байт; п байтов — для хранения символов строки, а один дополнительный байт — для значения текущей длины строки. Этот дополнительный байт имеет номер 0, соответственно первый символ строки имеет номер 1, второй — номер 2 и т. д.

К любому символу в строке можно обратиться как к элементу одномерного массива.

array[0..n] of char;

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

В отличие от массивов переменные строкового типа могут участвовать целиком в операторах ввода/вывода.

Записи

Запись — это структурированный тип данных, состоящий из фиксированно­го числа компонентов одного или нескольких типов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть раз­личного типа. Чтобы можно было ссылаться на тот или иной компонент записи, каждое поле имеет свое имя (а не номер, как элемент массива). Записи можно объявить следующим способом.

Сначала объявляется тип записи.

type

ИмяТипа = record

ИмяПоля1: ТипПоля1;

ИмяПоля2: ТипПоля2;

ИмяПоляN: ТипПоляN;

end;

Затем объявляются переменные соответствующего типа.

var

ИмяПеременной: ИмяТипа;

Например:

type avto=record

number: integer; { номер автомобиля }

marka: string[20]; { марка автомобиля }

fio: string[40]; ( фам*илия, инициалы владельца }

address: string[60]; { адрес владельца } end; var m,v: avto;

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

m.number, т.marka, т. fio, m.address

Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений используется оператор присваи­вания.

Составные имена можно использовать в операторах ввода/вывода:

Библиотечный модуль

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

Процедуры и функции, содержащиеся в модуле, подключаются к програм­ме, которая их использует, на этапе компоновки. Хранится модуль, как в исходном, так и в откомпилированном виде (файлы с расширениями pas и tpu соответственно).

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

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

Наши рекомендации