Смекни!
smekni.com

Совместимость и преобразование типов данных (стр. 1 из 2)

Курсовой проект по программированию

Составила: Ирина Комарова IT2V

Таллинн 2004 г.

Введение

Язык программирования Pascal был разработан в 1968-1971 гг. Никлаусом Виртом в Цюрихском Институте информатики (Швейцария), и назван вчесть Блеза Паскаля – выдающегося математика, философа и физика 17-го века. Первоначальная цель разработки языка диктовалась необходимостью создания инструмента "для обучения программированию как систематической дисциплине". Однако очень скоро обнаружилась чрезвычайная эффективность языка Pascal в самых разнообразных приложениях, от решения небольших задач численного характера до разработки сложных программных систем - компиляторов, баз данных, операционных систем и т.п. К настоящему времени Pascal принадлежит к группе наиболее распространенных и популярных в мире языков программирования:

• существуют многочисленные реализации языка практически для всех машинных архитектур;

• разработаны десятки диалектов и проблемно-ориентированных расширений языка Pascal;

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

Описание типов данных

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

Типы данных подразделяются на простые и сложные. Простые типы делятся на стандартные (предопределенные) типы и типы определяемые пользователем (пользовательские типы).

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

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

К стандартным типам относятся:

• группа целых типов (Shortint, Integer, Longint, Byte, Word);

• группа вещественных типов (Single, Real, Double, Extended, Comp);

• группа логических (булевских) типов (Boolean, ByteBool, WordBool, LongBool);

• символьный тип (Char);

• строковый тип (String, Pchar);

• указательный тип (Pointer);

• текстовый тип (Text).

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

Порядковые типы характеризуются следующими свойствами:

1. Множество допустимых значений любого порядкового типа представляет собой упорядоченную последовательность , каждый элемент которой имеет свой порядковый номер. Порядковый номер представляется целым числом. Первое значение любого порядкового типа имеет номер 0, следующий номер 1 и т.д. Исключение составляют порядковые типы Integer, Shortint, Longint, где порядковым номером значений этих типов является само значение.

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

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

К пользовательским типам относятся:

• перечисляемый тип;

• интервальный тип;

• указательные типы (кроме стандартного типа Pointer);

• структурированные типы;

• процедурный тип.

Перечисляемый и интервальный типы являются порядковыми.

Структура подраздела описания типов выглядит следующим образом:

Форма записи:

type = ;

Пример:

type

vec = integer;

bool = boolean;

Стандартные функции языка Паскаль

Для выполнения часто встречающихся операций и преобразований данных, относящихся к разным типам, существуют заранее определенные функции, которые называются СТАНДАРТНЫМИ. Для обращения к функции необходимо задать ее имя и в скобках список аргументов (параметров).

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

1. Имя функции записывается прописными буквами латинского алфавита.

2. Аргумент функции записывается в круглых скобках после имени функции.

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

Теперь рассмотрим некоторые стандартные функции:

Функция Действие Тип Х Тип возвращаемого значения

SQRT(X) вычисляет квадратный корень из аргумента Х действительный действительный

SQR(X) вычисляет квадрат аргумента Х целый действи-тельный целый действи-тельный

RANDOM(X) возвращает случайное число, перед вызовом функции желательно использовать в программе оператор RANDOMIZE включающей случайную инициализацию генератора случайных чисел целый, положительный соответствует типу переменной принимающей значение

SIN(X) вычисляет синус аргумента Х действительный действительный

COS(X) вычисляет косинус аргумента Х действительный действительный

ABS(X) вычисляет абсолютное значение (модуль) аргумента Х целый действи-тельный целый действи-тельный

ODD(X) проверяет Х на четность длинное целое логический

ORD(X) определяет порядковый номер символа Х любой тип кроме действительного длинное целое

CHR(X) определяет символ стоящий по порядковому номеру Х byte символьный

PRED(X) определяет предыдущее значение по отношению к Х любой тип кроме действительного тот же тип

SUCC(X) определяет последующее значение по отношению к Х любой тип кроме действительного тот же тип

ARCTAN(X) вычисляет арктангенс аргумента Х действительный действительный

EXP(X) вычисляет экспоненту от аргумента Х действительный действительный

LN(X) вычисляет натуральный логарифм от Х действительный действительный

TRUNC(X) находит целую часть от Х действительный длинное целое

ROUND(X) округляет Х в сторону ближайшего целого действительный длинное целое

INT(X) возвращает целую часть аргумента Х действительный действительный

FRAC(X) возвращает дробную часть аргумента Х действительный действительный

DEC(X,N) уменьшает значение переменной Х на заданное число N любой тип кроме действительного тот же тип

INC(X,N) увеличивает значение переменной Х на заданное число N любой тип кроме действительного тот же тип

PI возвращает значение числа - действительный

Примеры:

1. ORD(‘R’)=82; ORD(5)=5;

2. CHR(68)=’D’; можно вызывать эту функцию через #, если аргумент функции константа (#68='D');

3. PRED(‘N’)=’M’; PRED(87)=86;

4. SUCC(‘S’)=’T’; SUCC(87)=88;

5. PI=3.141592653897932385;

6. ROUND(3.1415)=3;

7. LN(1)=0.000;

8. SQRT(36)=6.000;

9. SIN(90*pi/180)=1.000.

Замечание:

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

Совместимость и преобразование типов данных.

Турбо-Паскаль - типизированный язык, следовательно, все применяемые операции определены только над операндами совместимых типов.

Два типа считаются совместимыми, если

• оба они есть один и тотже тип.

• один тип есть тип-диапазон второго типа.

• оба они являются типами-диапазонами одного и того же базового типа.

• один тип есть строка, а другой - строка или символ.

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

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

Идентичность типов.

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

Два типа Т1 и Т2 идентичны в следующих случаях:

T1 и Т2 – один и тот же идентификатор типа (integer; real и т.д. и т.п.);

Один тип объявляется эквивалентным другому.

type

T1 = boolean;

T2 = T1;

T3 = boolean;

M1 = array [1..5] of integer;

M2 = array [1..5] of integer;

var

V1, V2 = array [1..10] of integer;

Так, типы Т1, Т2, Т3 и boolean – идентичны, а М1 и М2 – не идентичные типы, но тем не менее, переменные V1 и V2 – переменные идентичных типов.

Совместимость типов.

Совместимость типов требуется в выражениях (в том числе и в операциях отношения).

Два типа Т1 и Т2 идентичны в следующих случаях:

Т1 и Т2 – один и тот же тип или они идентичны;

Т1 и Т2 – вещественные типы;

Т1 и Т2 – целые типы;

Один тип – вещественный, а другой – целый;

Один тип представляет собой тип – диапазон другого;

Оба типа являются типами – диапазонами какого-то одного типа;

Оба типа являются типами – множествами с совместимыми базовыми типами;

Один тип является строкой, а другой – символом или строкой.

Совместимость для присваивания.

Эта совместимость необходима, когда значение какого-то выражения присваивается переменной, типизированной константе или функции. Если значение объекта типа Т2 присваивается объекту типа Т1, то это возможно в следующих случаях:

Т1 и Т2 – идентичные типы и не являются файловыми типами или структурированными типами, содержащими компоненты файлового типа на любом уровне структурированности;

Т1 и Т2 – совместимые порядковые типы и значение типа Т2 находится в границах возможных значений объекта типа Т1;

Т1 и Т2 – вещественные типы и значение типа Т2 находится в границах возможных значений объекта типа Т1;

Т1 – вещественный тип, а Т2 – целый;

Т1 и Т2 – строки;

Т1 – строка, а Т2 – символ;

Т1 и Т2 – совместимые типы – множества и все компоненты значения типа Т2 находятся в множестве Т1.

Преобразование типов в Паскале может быть явным и неявным. При явном преобразовании типов используются вызовы специальных функций Ord, Trunc, Round, Chr, Ptr (преобразует четырёхбайтный целочисленный аргумент к типу-указателю), аргументы которых принадлежат одному типу, а результат другому.

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