Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.docx
Скачиваний:
192
Добавлен:
28.03.2015
Размер:
383.85 Кб
Скачать

20. Приведение типов в Паскале.

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

“Type mismatch” (несоответствие типов)

Var k:byte;

x:integer;

y:real;

ch:char;

Правила работы с типами данных

  1. y:=x, x:=k – повышение типов (разрешено в Паскале)

x:=10/k - – понижение типов (запрещено)

x:=10+’5’ – понижение типов (запрещено)

  1. x:=round (y); x:=trunc (y); {вещественное в целое (целая часть / округление}

  2. k:=ord(ch); ch:=chr(k); {символ в код(число) и наоборот}

  3. val (str:string, var number, var code:byte) {Текстовые строки, представляющие запись числовых констант – в числа}

В ряде случаев в Pascal происходит автоматический переход от одного типа данных к другому (от целого к действительному, от символьного к строковому и т.д.). Существует также ряд функций, осуществляющих преобразование типов (ord, chr, trunc, round). Наряду с этим в Паскаль возможно явное преобразование типов (ретипизация данных). Для того, чтобы осуществить явное преобразование типа, необходимо использовать имя типа аналогично тому, как используется имя функции. В качестве параметра в этом случае указывается имя преобразуемой переменной.

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

Пример задачи, где используется явное преобразование типов

Вычислить значение функции sign(x) = 1 при x>0; 0 при x=0; -1 при x<0.

var

x: real;

sign: integer;

begin

readln(x);

sign:= byte(x>0)-byte(x<0);

writeln(sign);

end.

В программе при положительном значении x выражение x>0 принимает значение true, а выражение x<0 — false. В результате получается, что byte(x>0) = 1, byte(x<0)=0, а sign=1. При отрицательном значении x byte(x>0)=0, byte(x<0)=1, sign=-1. При нулевом значении x sign=0.

21. Тип множество (Set).

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

Отрицательные элементы множеств в Turbo Pascal не допускаются. Поэтому базовыми типами не могут быть типы shortint, integer, longint. Если же необходимо множество целочисленных объектов, то базовый тип должен объявлен как диапазон типаbyte.

Порядок элементов во множестве не имеет значения. Так, записав [3, 6, 9] или [9, 3, 6], мы будем иметь дело с одним и тем же множеством. Более того, многократное повторение одного и того же элемента не меняет множество. Например, [4, 7, 3] и [3, 7, 4, 4] – это одно и то же множество.

По форме записи объявление переменной типа множество сходно с объявлением одномерного массива:

var

имя: set of тип;

Например, объявление переменной ch, рассматриваемой как множество с базовым типомchar, имеет вид:

var

ch: set of char;

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

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

type

week_days = (Mon, Tue, Wed, Thu, Fri);

var

work_days: set of week_days;

lett: set of 'A'..'Z';

Объявление переменной-множества не дает ей определенного значения.

Построение множества

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

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

type

week_days = (Mon, Tue, Wed, Thu, Fri);

var

work_days: set of week_days;

lett: set of 'A'..'Z';

begin

work_days := [Mon, Wed, Thu];

lett := ['C', 'E'..'M', 'Z']

end.

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

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

work_days := [ ];

Элементы множества нельзя вводить и выводить. Для организации ввода-вывода элементов множества следует использовать вспомогательные переменные. В то же время можно использовать множества как элементы типизированных файлов.

Операции, применимые к множественному типу:

  1. Объединение

[1,3,4]+[1,2,4,6]=[1…4,6]

  1. Пересечение

[1,3,4]*[1,2,6]=[1]

  1. Вычитание (элементы первого множества, не вошедшие во второе)

[1,3,4]-[1,2,4,6]=[3]

  1. Проверка эквивалентности

P:=([1,2,5]=[1..5]); {p=false}

  1. Проверка неэквивалентности

P:=([1,2,3]<>[1..5]); {p=true}

  1. Проверка на принадлежность элементов множеству

2 in [1,2,4,6] – true

  1. Включение подмножества в множество

[1,5]<=[1,3,5,6] – true

[1,5]>=[1,3,5] – false

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

Для вставки и удаления элементов при работе с множествами в Pascal введены две процедуры:

include (имя_множества, элемент)

exclude (имя_множества, элемент)

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

include (chs1, 'g'); { аналогично chs1 + ['g'] }

exclude (chs2, 'a'); { аналогично chs2 - ['a'] }

Другие операции над множествами

Над множествами можно выполнять четыре операции сравнения: =, <>, >=, <=.

Два множества A и B равны (A = B), если каждый элемент множества A является элементом множества B и наоборот.

Два множества A и B не равны (A <> B), если они отличаются хотя бы одним элементом.

Множество A является подмножеством множества B (A <= B, или B >= A), если каждый элемент из A присутствует в B.

Имеется также возможность выяснить, принадлежит ли данный элемент некоторому множеству. Для этого служит операция in. ПустьA– множество элементов некоторого базового типа, аx– переменная (константа, выражение) этого типа. Тогда выражениеx in Aистинно, если значениеxявляется элементом множестваA.

Все операции сравнения множеств, а также операция inвозвращают логическое значениеtrueилиfalse.

В сложных выражениях над множествами операции имеют следующие приоритеты:

  1. *

  2. +, -

  3. =, <>, <=, >=, in