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

Алгоритмические языки высокого уровня. Курс лекций

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
940 Кб
Скачать

2.Если результат FALSE, то выполнение оператора цикла пре- кращается (выполняется следующий оператор, стоящий за операто- ром цикла while).

3.Выполняется тело цикла (оператор, стоящий за символом DO).

4.Осуществляется переход к пункту 1.

Пример программы

Описание: программа выводит на экран результат вычисления 'машинного эпсилон' (машинным эпсилон называется минимальное положительное число, которое при сложении с числом 1.0 дает ре- зультат, больший чем 1.0).

Program While_Test; uses crt;

var eprs: real; begin

clrscr;

eprs:=1;

while eprs/2+1>1 do eprs:=eprs/2; gotoxy(1,2);

write(‘Результат: eprs = ’, eprs); while not keypressed do

end.

Оператор цикла с постусловием соответствует структуре цик-

ла с постусловием: «повторять выполнение действий до выполнения условия выхода из цикла».

 

вход

 

Серия команд

 

Условие

 

повторения

 

цикла

 

нет

REPEAT

оператор

Тело цикла

да

выход

UNTIL Логическое выражение.

Синтаксис: Repeat <оператор> Until <условие>

Название этого оператора определяется тем, что условие распо- ложено в конце структуры.

41

Порядок выполнения оператора цикла с постусловием

1. Выполняется тело цикла (операторы, расположенные между

REPEAT и UNTIL).

2.Вычисляется логическое выражение, являющееся условием окончания цикла.

3.Если результат FALSE, то осуществляется переход к пункту 1.

4.Если результат TRUE, то оператор цикла прекращается (выпол- няется следующий оператор, стоящий за оператором цикла).

Отличия операторов цикла с пред- и постусловием.

1.Условие повторения цикла является взаимно противоположным условию окончания цикла, т.е. одно условие является отрицанием другого (можно для получения другого условия из исходного ис- пользовать операцию отрицания NOT).

2.Может быть ситуация, когда тело оператора цикла с предусловием не выполнится ни разу (при первом вычислении условия повторения цикла получено значение FALSE). В этой же ситуации тело оператора

цикла с постусловием выполнится один раз (так как вычисление усло- вия окончания цикла производится после выполнения действий).

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

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

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

Пример программы

Описание: программа выводит на экран, в зависимости от выбора пользователя, код символа (при вводе символа) или символ (при вво- де кода).

Program Repeat_test; uses crt;

const CR=13;

var n,cod: integer; ch: char; Stop: boolean;

begin

Stop:=false; repeat

clrscr;

gotoxy(1,1);

42

write(‘Введите действие 0-Stop,1-код,2- символ…’);readln(n);

if (n=1) then begin

gotoxy(1,2);write(‘Введите код’);read(cod); gotoxy(1,3);

write(‘Код-’, cod,’соответствует символу:’, chr(cod));

end;

if (n=2) then begin

gotoxy(1,2);write(‘Введите символ: ’); read(ch); gotoxy(1,3);write(‘Символ-’,ch, ‘имеет код’,ord(ch)); if ord(ch)=CR then

Stop:= true; end;

if n=0 then begin

gotoxy(1,2);write(‘Stop’);

Stop:=true;

end;

gotoxy(1,5);write(‘Press any key…’); while not keypressed do

until Stop end.

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

3.4. Операторы перехода и выхода

Оператор перехода предназначен для реализации устаревшего стиля программирования с использованием меток и переходов к этим меткам.

GOTO Метка

Синтаксис: Goto V1, где V1 - метка

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

43

ВНИМАНИЕ! Хорошо структурированные программы не

должны содержать меток.

Метки и команды перехода применяются: при досрочном выходе из циклов и анализе корректности вводимых значений; при отладке сложных программ.

Пример программы

Описание: программа демонстрирует использование меток и ко- манд перехода.

program gotoj_ Var

a:integer; label

L1,L2; begin

read(a);

if a=1 then goto L1

else begin

a:=a+1; goto L2; end;

L1:a:=100; L2: write(a); end.

Операторы выхода. Для завершения работы программ, процедур и функций без предварительного перехода по меткам в Pascal введе- ны процедуры: Exit и Halt.

Вызов процедуры Exit завершает работу программного блока, в котором она была вызвана и передает управление вызывающей про- грамме. Если процедура Exit выполняется в подпрограмме, то вы- полнение этой подпрограммы прекратится, и далее будет выполняться следующий за вызовом этой подпрограммы оператор. Если процедура Exit выполняется в основной программе, выход из нее будет эквива- лентен ее нормальному завершению основной программы. Вызов про- цедуры Halt, где бы она не находилась, завершает работу программы и передает управление операционной системе. Процедура Halt имеет структуру Halt (n), где n код возврата, который может быть про- анализирован операционной системой с помощью команды IF ERRORLEVEL. Значение n=0 соответствует нормальному завершению работы программы. Вызов процедуры Halt без параметра эквивален- тен вызову Halt (0).

44

4. ТИПЫ ДАННЫХ

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

 

 

 

 

 

 

 

 

Порядковые

 

 

Целые

Типы

 

 

Простые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вещественные

 

 

Логический

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Структурированные

 

 

 

Массивы

 

 

 

 

 

 

 

 

 

 

Символьный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ссылочный (указатель)

 

 

 

Записи

 

 

Перечислимый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Процедурный

 

 

 

Множества

 

 

Тип-диапазон

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Объекты

 

 

 

Файлы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строковый

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

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

45

Концепция типа языка Pascal имеет следующие основные свойства:

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

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

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

Тип определяет:

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

2)внутреннюю форму представления данных в ПК;

3)операции и функции, которые могут выполняться над величи- нами, принадлежащими к данному типу.

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

В языке Pascal есть понятия эквивалентности и совместимости

типов.

Два типа Т1 и Т2 являются эквивалентными (идентичными), ес- ли выполняется одно из двух условий:

1)Т1 и Т2 представляют собой один тип;

2)тип Т2 описан с использованием Т1 с помощью равенства (или последовательности равенств).

Пример: Type T1 = Integer; T2 = T1; T3 = T2;

Менее строгие ограничения определены для совместимости ти- пов.

Типы являются совместимыми, если:

1)они эквивалентны;

2)являются оба либо целыми, либо действительными;

3)один тип тип (диапазон), другой его базовый;

4)оба типы (диапазоны) с общим базовым;

5)один тип строковый, другой символьный.

46

4.1.Простые типы данных

Кпростым типам относятся порядковые и вещественные типы. По- рядковые типы отличаются тем, что каждый из них имеет конечное число возможных значений. Эти значения можно определенным образом упо- рядочить (отсюда название типов) и, следовательно, с каждым из них можно сопоставить некоторое целое число порядковый номер значения.

 

 

 

 

Таблица 4.1

 

Процедуры и функции, применимые к простым типам

 

 

 

 

 

Функция

 

Тип

Тип

Действие (результат)

 

аргумента

результата

 

 

 

 

 

 

 

 

 

 

INTEGER

INTEGER

X+1 символ после X в

SUCC(X)

 

упорядоченном множест-

 

CHAR

CHAR

 

 

ве символов

 

 

 

 

 

 

 

 

 

 

 

INTEGER

INTEGER

X-1 символ перед X в

PRED(X)

 

упорядоченном множест-

 

CHAR

CHAR

 

 

ве символов

 

 

 

 

 

 

 

 

Порядковый номер сим-

ORD(S)

 

CHAR

INTEGER

вола S в упорядоченном

 

 

 

 

множестве

 

 

 

 

Символ, стоящий под

CHR(I)

 

INTEGER

CHAR

номером I в упорядо-

 

ченном множестве сим-

 

 

 

 

 

 

 

 

волов

 

 

 

 

 

 

 

 

 

TRUE, если x – нечет-

ODD(X)

 

INTEGER

BOOLEAN

ное, FALSE, если х -

 

 

 

 

четное

DEC

 

 

 

Уменьшает значение x

 

INTEGER

INTEGER

на i, а при отсутствии

(x[, i])

 

 

 

 

i - на 1

 

 

 

 

INC

 

 

 

Увеличивает значение x

 

INTEGER

INTEGER

на i, а при отсутствии

(x[, i])

 

 

 

 

i - на 1

 

 

 

 

HI(x)

 

WORD

BYTE

Возвращает старший

 

байт аргумента

 

 

 

 

LO(x)

 

WORD

BYTE

Возвращает младший

 

байт аргумента

 

 

 

 

SWAP(x)

 

INTEGER

INTEGER

Меняет местами байты в

 

слове

 

 

 

 

ABS(x)

 

REAL

REAL

Вычисление абсолютного

 

INTEGER

INTEGER

значения х X

 

 

FRAC(x)

 

REAL

INTEGER

Дробная часть числа

INT(x)

 

REAL

INTEGER

Целая часть числа

SIN(x)

 

REAL

REAL REAL

Вычисление синуса х

 

INTEGER

 

 

 

 

47

 

 

 

Окончание табл. 4.1

 

 

 

 

COS(x)

REAL

REAL REAL

Вычисление косинуса х

INTEGER

 

 

 

ARCTAN(x)

REAL

REAL REAL

Вычисление арктангенса

INTEGER

х

 

 

 

 

 

Вычисление экспоненты

EXP(x)

REAL

REAL REAL

- Ex (E~2.7183)

INTEGER

E x p ( B * L n

 

 

 

 

 

( A ) ) = AB

LN(x)

REAL

REAL REAL

Ln x – натуральный ло-

INTEGER

гарифм

 

 

LOG(x)

REAL

REAL REAL

log x

INTEGER

 

 

 

SQRT(x)

REAL

REAL REAL

Вычисление квадратного

INTEGER

корня из х

 

 

SQR(x)

REAL

REAL

Вычисление квадрата

INTEGER

INTEGER

х - X2

 

 

 

Определение целой час-

 

 

 

ти от х (выделяет це-

TRUNC(x)

REAL

INTEGER

лую часть действитель-

INTEGER

INTEGER

ного аргумента путем

 

 

 

 

отсечения дробной час-

 

 

 

ти)

 

 

 

Округление х в сторону

ROUND(x)

REAL

NTEGER

ближайшего целого (ок-

INTEGER

INTEGER

ругляет аргумент до

 

 

 

 

ближайшего целого)

 

 

 

Возвращает псевдослу-

Random

INTEGER

INTEGER

чайное число, равно-

(x)

мерно распределенное в

 

 

 

 

 

диапазоне 0...(X-1)

 

 

 

Инициализация генера-

Randomize

 

 

тора случайных чисел в

 

 

 

исходное состояние

4.1.1.Порядковые типы

Кпорядковым типам относятся целый, логический, символьный, перечисляемый и тип-диапазон. К любому из них применима функ- ция ORD(X), которая возвращает порядковый номер значения выра-

жения X. Для целых типов функция ORD(X) возвращает само значе- ние X, т.е. ORD(X) = X. Применение ORD(X) к логическому, сим- вольному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 255 (символьный), от 0 до 65535 (перечисляемый). Тип-диапазон сохраняет все свой-

48

ства базового порядкового типа, поэтому результат применения к нему функции ORD(X) зависит от свойств этого типа.

К порядковым типам можно применять функции:

PRED(X) возвращает предыдущее значение порядкового типа, которое соответствует порядковому номеру ORD(X)- 1, т.е.

ORD(PRED(X))=ORD(X)- 1;

SUCC(X) возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ORD(X) + 1, т.е.

ORD(SUCC(X)) = ORD(X) + 1.

Если представить себе любой порядковый тип как упорядоченное множество значений, возрастающих слева направо и занимающих на числовой оси некоторый отрезок, то функция PRED(X) не определе- на для левого, a SUCC(X) для правого конца этого отрезка. К лю- бому порядковому типу могут быть применены стандартные функ- ции LOW(X) и HIGTH(X), которые возвращают наименьшее и наи- большее значения величин данного типа.

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

Таблица 4.2

Целые типы данных и диапозон значений

Целые типы

Название

Длина, байт

Диапазон значений

Byte

1

0...255

ShortInt

1

-128...+127

Word

2

0...65535

Integer

2

-32768...+32767

LongInt

4

-2 147 483 648... +2 147 483 647

Примеры описания: Var a:word; b:integer;

При использовании процедур и функций с целочисленными пара- метрами следует руководствоваться «вложенностью типов» – везде, где может использоваться WORD, допускается использование BYTE. LONGINT включает INTEGER (который включает в себя SHORTINT).

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

49

Пример программы

Описание: программа проверки правильности ввода целого числа.

Program int; Var

s: string;

n, error: integer; flag: boolean;

begin

flag:= true; writeln(‘Введите целое число’); while flag do

begin readln(s);

val(s, n, error);

if (error = 0) then flag:= false

else writeln(‘Неверный формат. Повторите ввод!’); end;

writeln(‘Вы ввели число ’, n); readln;

end.

Логический тип (boolean). Переменные логического типа могут принимать одно из двух значений: TRUE или FALSE. Внутреннее представление – 1 байт.

Описание: Var a:boolean;

Над переменными логического типа определены три логические операции: AND (конъюнкция), OR (дизъюнкция), NOT (отрицание). Логический тип определен так, что FALSE<TRUE. Это означает, что операции отношения могут быть применены не только к данным це- лого, вещественного и символьного типов, но и к данным логическо- го типа. Значение FALSE и TRUE можно рассматривать как упорядо- ченное множество, состоящее из двух элементов. При этом:

ORD(FALSE)=0; ORD(TRUE)=1; SUCC(FALSE)=TRUE; PRED(TRUE)=FALSE.

Символьный тип (char). Внутреннее представление – 1 байт.

Описание: Var a:boolean;

Значениями символьного типа являются элементы множества символов, имеющихся на клавиатуре. Каждому символу ставится в соответствие некоторый код, который представляет собой целое чис- ло. Символ, заключенный в апострофы, обозначает константу сим- вольного типа, например: ‘x’,’5’,’=’.

ORD(S) дает порядковый номер символа S в упорядоченном мно-

жестве символов. ORD(‘:’)=58, ORD(‘5’)=53

50

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]