Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Элементарный ввод-вывод

Совместимость и преобразование типов

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

Два типа Type1 и Type2 являются эквивалентными, если выполняется одно из двух условий:

 

1. Type1 и Type2 описаны одним и тем же идентификатором типа:

type Type1 = integer; Type2 = integer;

2. Type2 описан с использование Type1 через непосредственное равенство вида:

type Type2 = Type1;

или цепочку таких равенств.

Для следующего описания:

type T1 = array [1..50] of real; T2 = array [1..50] of real;

типы T1 и T2 не являются эквивалентными, т.к. один тип не описан через другой. Однако переменные, указанные в одном и том же описании, имеют эквивалентные типы, например:

var X, Y: array[1..50] of integer;

Сформулируем наиболее употребимые правила совместимости типов. Полный перечень этих правил можно найти в любой справочной литературе([5], [8], [9]).
Два типа являются совместимыми, если:

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

Присваивание TypeV:= TypeE; возможно, если выполняется одно из условий:

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

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

Trunc (5.6) дает 5

Round (10.9) дает 11

Для ввода и вывода значений используются специальные операторы Read (список ввода), Readln (список ввода) и Write (список вывода), Writeln (список вывода), которые по существу являются процедурами. С их помощью кодируют базовую операцию ввод/вывод.
Процедура Read осуществляет ввод числовых и символьных значений с клавиатуры. Числовые значения при вводе разделяются пробелами или вводятся с новой строки. Значения, набираемые в одной строке экрана, вначале заносятся в буфер и только после нажатия на клавишу <ENTER> вводятся в компьютер, до этого их можно корректировать в строке ввода. Максимальная длина буфера ввода при работе с клавиатурой составляет 127 символов. Ввод с клавиатуры процедурой Read сопровождается эхо-печатью вводимых символов на экране персонального компьютера, например,

var R: real; I: integer;... read(R, I);

33.13 19<ENTER>

В результате R примет значение 33.13, а I - 19. Следует соблюдать соответствие типов вводимых констант и переменных из списка ввода. При вводе значений типа Char кавычки не нужны, любой символ будет считан так, как он набран на клавиатуре.
Процедура Readln идентична процедуре Read за исключением того, что она после ввода последней переменной из списка ввода осуществляет автоматический переход к первому символу новой строки, даже если в текущей строке ввода еще остались значения. Кроме того, процедуру Readln можно вызывать без списка ввода. В этом случае пропускаются все символы текущей строки и последующий ввод начнется с новой строки.
Сравним действие процедур Read и Readln на примере:

var I, J, K, L: integer;... read(I, J); read(K, L);

Для переменных I, J, K, L результат ввода будет одним и тем же, если значения будут набраны в одной строке или в разных:

1 13 7 8<ENTER> -> (I = 1, J = 13, K = 7, L = 8) 1 13<ENTER> 7 8<ENTER> -> (I = 1, J = 13, K = 7, L = 8)

Если в программе использована процедура Readln (I, J) для входных данных:

10 20<ENTER> 40<ENTER>

то I = 10, J = 20. В результате выполнения двух процедур Readln (I);
Readln (J) для тех же входных данных: I = 10, J = 40.
Процедура Write обеспечивает вывод информации на экран персонального компьютера. В отличие от Read в списке вывода указываются выражения. Выполнение процедуры Write заключается в вычислении значений всех выражений списка и выводе этих значений, например:

var I, J: integer; A: real;... I:= 10; J:= 20; write(I, J);

На экране появится строка:

Догадаться, что речь идет о двух значениях 10 и 20 довольно, сложно. Вывод по формату облегчает интерпретацию результатов. Для любого параметра из списка вывода можно задать формат:
[: Целое1 [: Целое2]], где Целое1, Целое2 - выражения.
Квадратные скобки означают, что заключенные в них параметры могут отсутствовать. Целое1 - параметр, который указывает минимальную ширину поля, куда будет записываться выводимое значение. Если выводимое значение имеет большую длину, то этот параметр игнорируется и выделяется необходимое количество позиций. Целое2 - параметр, задающий количество десятичных знаков в дробной части вещественного числа. Этот параметр может использоваться только совместно с первым параметром и только для выражений вещественного типа, например:

... A:= 12.34; write(A:12:4); write(A:12:5);

На экране в одной строке будет выведено два числа:

12.3400 12.34000

Первое число вводится с отступом в 5 позиций, т.к. выделено 12 позиций под число. Между числами располагается 4 пробела.
Для большей наглядности рекомендуется в операторах вывода использовать поясняющие надписи, например:

... I:= 10; J:= 20; write('Вывод:I=', I:3, ';J=', J:3);

На экране получим:

Вывод: I = 10; J = 20

Символы выводятся без изменений. Значения логического выражения представляются строкой TRUE или FALSE. Вещественные числа имеют форму с экспонентой, если не указаны оба формата, т.е. Целое1 и Целое2. Мантисса числа выводится в нормализованном виде, для Турбо-Паскаля - это одна десятичная цифра до десятичной точки и 14 десятичных цифр в дробной части, например:

A:= 12.34; write(A);

На экране получим:

1.23400000000000Е+0001

Процедура Writeln осуществляет вывод значений списка и переход к следующей строке. Writeln без списка переведет курсор в начало следующей строки экрана. Приведем пример, иллюстрирующий особенности выполнения процедур вывода:

var N: integer; X: real;... X:= 1.278473; N:= 11; writeln(N, '-число итераций '); writeln; writeln(' полученное значение: X = ',X);

На экране получим следующие три строки:

11-число итераций полученное значение: X = 1.27847300000000Е+0000
<== предыдущая лекция | следующая лекция ==>
Оператор присваивания. Операция присваивания | Основные математические функции
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 406; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.