Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ПАЯ (1-й семестр).doc
Скачиваний:
10
Добавлен:
20.11.2019
Размер:
1.23 Mб
Скачать

Символьный тип

Множество значений: некоторое множество алфавитных символов, фиксированных данной версией языка. Любой такой алфавит считается упорядоченным, т.е. символьный тип – порядковый, значит определено c12, если c1 идет в алфавите раньше, чем с2. Также succ(c), pred(c).

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

‘a’<’b’<’c’<…

‘A’<’B’<’C’<…

Переменная Буквенная константа

a ‘a’

‘0’<’1’<’2’<…

Кроме того, на символьном типе определены операции chr и ord.

chr(i) – выдает символ с заданным номером i

ord(a) – выдает номер символа

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

Задача: определить данное целое число по его записи в десятичной системе.

Упражнение:

  1. Определить данное целое число по его записи

  2. Обратное: выяснить запись числа по его значению

Достаточно:

  1. Научиться находить значения цифр (‘0’,’1’,…,’9’). Это решит задачу в случае символьной последовательности длиной 1.

  2. Научиться вычислять значение числа по значению входящих в его запись символов.

‘2’,’0’,’0’,’1’

2001

2•103+0•102+0•101+1•100

Надо вычислить со старшей цифры.

m=1 ord(c)-ord(‘0’)

m=2 n=

n+1=ni•10+ci

Обратная задача.

Дано число, перевести его в символьное представление.

  1. n[0,9] chr(n+ord(‘0’))

  2. n=

ci+1=ni mod 10

ni+1=ni div 10

Идея: вычислять c и n по рекуррентной схеме до тех пор, пока n не станет равно 0.

Недостаток решения: знаки порождаются в обратном порядке.

Упражнение 3: Найти схему порождения записи числа в «естественном» порядке.

Производные(структурные) типы Массивы

A :array[I] of T , где Т произвольный тип (в стандарте, кроме файлов). I – произвольный конечный порядковый тип.

Семантика:

Множество значений:

  1. частный случай: тип индексов I есть ограничение целого типа [1..n], [0..n]. В этом случае множество значений – класс всех последовательностей фиксированной длины n. Тип «массив» - статический; f: NT, т.е. фу нкций из интервала [1,n] T

  2. В общем случае значениями являются функции. f: IT. I – не интервал, из I в T все функции на конечном множестве аргументов. Массив – явно определяемая, табличная функция (соответствие).

Операции над массивами

Единственная операция над массивами – операция выборки, синтаксис A[e] – A – имя массива, e – любое выражение типа I (a[e]=app(a,e) от двух переменных). Семантика зависит от места, занимаемой операции в присваиваниях.

Напомню, с точки зрения семантики мы рассматриваем (кратные) присваивания как стандартное обозначение любого оператора.

Справа в присваивании операция выборки означает вычисление массива (как функции) в заданной «точке», т.е. по аргументу-индексу.

Пример. y:=a[x]. Значение y становиться равным значению a(x).

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

Слева в присваивании операция выборки означает переопределение массива (как функции) в заданном аргументе.

Пример. a[x]:=y. Значение a[x] становиться равным текущему значению переменной y.

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