Конспект лекций по информатике для специальностей 2102, 2103 Автор доц., к т. н. Каширская Е. Н

Вид материалаКонспект

Содержание


10. Преобразование типов
Подобный материал:
1   ...   17   18   19   20   21   22   23   24   25

9.1. Простая типизированная константа


Задается как простая переменная.

Пример: Const A:Integer=1267;

Kol:Real=12,32;

Sim:Char =’Z’

B:Char=Ord(65);

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

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

Пример: Const X:Integer=0;

Y:Integer=50;

Type Mas: Array [X..Y] of Integer; это недопустимо.

9.2. Структурированная (сложная) типизированная константа

9.2.1. Типизированная константа массива


Пример:

Type Sost = (cold, warm, hot);

Massiv = Array [Sost] of string[5];

Const S: Mas = (‘cold’, ‘warm’, ‘hot’);

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

Sost[cold]=’cold’

Sost[warm]=’warm’

Sost[hot]=’hot’

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

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

Пример:

Type Massiv = Array [0..1,0..1,0..1] of Integer;

Const chislo: Massiv = (((0,1),(2,3)),((4,5),(6,7)));

Begin

Writeln(chislo[0,0,0],’=0’);

Writeln(chislo[0,0,1],’=1’);

Writeln(chislo[0,1,0],’=2’);

Writeln(chislo[0,1,1],’=3’);

Writeln(chislo[1,0,0],’=4’);

Writeln(chislo[1,0,1],’=5’);

Writeln(chislo[1,1,0],’=6’);

Writeln(chislo[1,1,1],’=7’);

End.

9.2.2. Типизированная константа записи


Пример:

Type chislo = Record

a,b,c: Integer

end;

Zvet = (Krasn, Gelt, Zelen, sin);

Tkan = (Sherst, Shelk, Hlopok);

Platye = Record

Dizain : Array [1..4] of Zvet;

Material : Tcan

end;

Const Nomer : chislo = (a:0, b:0, c:0);

Model:Platye=(dizain: (krasn, gelt, zelen, sin); Material: Hlopok);

Matrica: Array[1..3] of

chislo = ((a:1, b:4,c:5), (a:13,b:8,c:55), (a:200,b:16,c:-65));

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

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

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

9.2.3. Типизированная константа множества.


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

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

Пример:

Type Propisnoy = Set of ‘A’..’Z’;

Strochny = Set of ‘a’..’z’;

Const PropBukw : Propis =[‘A’..’Z’];

StrochnBukw : Stroch =[‘a’, ’e’, ‘l’, ‘c’, ‘u’];

Simvol : Set of char = [‘’..’/’, ‘:’..’?’, ‘[‘..’’, ‘{‘..’~’];

10. ПРЕОБРАЗОВАНИЕ ТИПОВ


Тип переменной позволяет не только установить длину ее внутреннего представления, но и контролировать те действия, которые осуществляются над ней в программе. Контроль за использованием переменных еще на этапе компиляции программы – важное преимущество Турбо Паскаля перед другими языками программирования, в которых допускается автоматическое преобразование типов. Фактически именно та вольность, с какой, например, PL/1 преобразует по умолчанию различные типы данных, послужила объектом наиболее сильной его критики.

10.1. Неявные преобразования типов


В Паскале почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа Integer, которые разрешается использовать в выражениях типа Real.

Пример:

Var X : Integer;

Y : Real;

Y:=X+2 - правильно, хотя справа от знака присваивания стоит целочисленное выражение, а слева – вещественная переменная. Компилятор сделает необходимые преобразования автоматически.

X=2.0 – неверно, так как автоматическое преобразование типа Real в тип Integer в Паскале запрещено.

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


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

В частности, для преобразования Real в Integer имеются две встроенные функции:

Round округляет Real до ближайшего целого,

Trung усекает Real путем отбрасывания дробной части.

X:=Y/X – нельзя,

X:=round(Y/X) – можно.

Ord преобразует Char в Integer,

Chr преобразует Integer в Char.

Пример. Программа выводит на экран символ и соответствующий ему внутренний код.

Var simvol : char;

Begin readln (simvol);

Writeln (simvol, ‘=’, ord(simvol));

End.