Автор работы: Пользователь скрыл имя, 13 Марта 2011 в 10:34, лекция
Паскаль является языком жесткой типизации. Это означает, что тип переменной определяется при ее описании и не может быть изменен. Переменная может участвовать только в операциях, определенных ее типом. Такой подход способствует большей аккуратности и ответственности при составлении программы, делает их поддающимися автоматической (при компиляции) проверке на корректность и в конечном итоге приводит к более высокой надежности создаваемых программ.
Примечания
Вещественные значения могут изображаться в форме с фиксированной точкой и в форме с плавающей точкой. В первом случае целая и дробная части вещественного числа отделяются друг от друга символом ‘.’ (точка). Обе эти части должны обязательно присутствовать, например:
17.384
0.5
Вещественное число в форме с плавающей точкой записывается как пара вида:
<мантисса>Е<порядок>
Такое обозначение понимается как “мантисса, умноженная на 10 в степени, равной порядку”. Например:
7Е-2 эквивалентно 7· 10-2
12.25 Е+6 или 12.25 Е6 эквивалентно 12.25· 106
7. Дата/время
Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.
II. Составные типы: структурированные типы, указатели, строки, процедурные, объекты, классы, варианты.
Структурированные типы в свою очередь делятся на:
1. регулярные типы (массивы);
2. комбинированные типы (записи);
3. множественные типы;
4. файловые типы;
Простые типы, описанные выше, определяют различные множества атомарных (неразделимых) значений. Составные, или структурные типы, в отличие от простых, задают множества «сложных» значений; каждое значение из такого множества образует некоторый агрегат (совокупность) нескольких значений другого типа (или других типов). Можно сказать, что составные типы определяют некоторый способ образования новых типов из уже имеющихся, причем отдельные элементы составных значений могут иметь любой, в том числе составной, тип. Таким образом, Паскаль допускает образование структур данных произвольной сложности, позволяя тем самым достичь адекватного представления в программе тех данных, с которыми она оперирует.
1. Регулярные типы (массивы)
Каждое значение регулярного типа состоит из фиксированного числа элементов одного и того же базового типа. Такой способ образования новых значений (фиксированное число однотипных компонент) позволяет обозначать значения этих типов одним (групповым) именем. Объект регулярного типа часто называют массивом, а групповое имя используется в качестве имени этого массива. Доступ к отдельным элементам массивов организуется посредством указания имени массива и порядкового номера (индекса) необходимого элемента.
Для
корректного определения
Определение массива имеет следующий общий вид:
Type
A = array [T1] of T2;
Здесь:
Array, of – служебные слова;
Т1 – тип индекса массива;
Т2 – тип компонент массива.
В дальнейшем идентификатор этого типа может быть использован в описании переменных.
В качестве типа индекса может выступать любой дискретный тип, кроме LongInt и ограниченных типов, построенных из типа LongInt, в частности, допустимы ограниченные и перечислимые типы. Элементами массива могут быть переменные любого типа.
Ниже приведены описания различных массивов:
Type
M1 = array [1..100] of real;
M2 = array [char] of boolean;
Matrix = array [ 1..10 ] of array[1..20] of integer;
Database = array [1..MaxF] of file of Person;
Var
Vector: M1;
Sym_Table: M2;
Arr1, Arr2: Matrix;
S: array [Red, Yellow, Green] of boolean;
Примечания
Var
V2: array[1..10] of array [1..20] of byte;
Такую переменную можно трактовать двояко: как массив, состоящий из нескольких массивов, либо как один двумерный массив (матрицу). Для сокращения записи в подобных случаях можно использовать эквивалентную форму определения регулярных типов, где в квадратных скобках указывается список типов индексов, разделенных запятыми, тот же массив можно описать:
Var
V2: array [ 1..10, 1..20 ] of of byte;
Число индексов в определении (т.е. размерность массива) в языке не ограничивается.
Vect1:=Vect2;
причем типы обоих массивов должны быть эквивалентны.
Элемент
массива считается переменной; он
может получать значения (например,
в операторе присваивания), а также
участвовать в выражениях, где
он представляет значение, помещенное
в соответствующий элемент
Пример:
V2 [ i, j ]:= V2 [ i, j-1 ] + 1;
Sym_Table [ ‘z’ ]:= Switch and Sym_Table [ ‘a’ ];
2. Комбинированные типы (записи)
Комбинированные типы, как и регулярные типы, представляют собой правило формирования составных типов. Объекты этого типа называются записями. В отличие от массивов, записи могут объединять значения различных типов и поэтому являются, видимо, наиболее гибким механизмом построения данных.
Запись состоит из фиксированного числа компонентов, называемых полями записи. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.
Структура объявления типа записи такова:
<имя типа> = RECORD <список полей> END
Здесь:
<имя типа> - правильный идентификатор;
RECORD,
END - зарезервированные слова (
<список
полей> - этот список представляет
собой последовательность
Каждый раздел записи состоит из одного или нескольких идентификаторов полей, отделяемых друг от друга запятыми. За идентификатором (идентификаторами) ставится двоеточие и описание типа поля (полей). Например:
Type
Birthday = record
day, month: byte;
year: word
end;
Var
a, b: Birthday;
.........
В этом примере тип Birthday (день рождения) содержит три поля с именами DAY, MONTH и YEAR (день, месяц, год); переменные A и B содержат записи типа Birthday.
Как видно из примера, распространенным случаем употребления записи является необходимость описать атрибуты (характеристики) некоторого объекта, представляемого и обрабатываемого в программе. Например, для описания объекта “человек” могут понадобиться следующие характеристики:
В этом случае описание комбинированного типа Person (человек) может выглядеть следующим образом:
Type
Person =record
Name, SecondName, SurName: string [20];
Sex: (Male, Female);
Speciality: Word
end;
Имея в программе вышеприведенное описание, можно определить переменные данного типа, например:
Var Sasha, Masha, Natasha: Person;
Примечания
Рассмотрим случай, когда в составе записи содержатся поля, имеющие также тип записи. Пусть для комбинированного типа Person необходимо хранить информацию о дате рождения человека. Эту информацию можно представить в виде трех полей в составе типа Person. Однако логичнее для этого определить отдельный тип, так как в этом случае он может использоваться в описании других типов и переменных.
Пример:
Type
Date = Record
Month:
(Jan,Feb,Mar,Apr,May,June,
Day: 1..31;
Year: 1900..2000
end;
Person = Record
Name, SecondName, SurName: string [20];
Sex: (Male, Female);
Speciality: Word;
Birthday: Date
end;
Доступ к полям из элемента Birthday производится по общим правилам, например:
Sasha. Birthday. Year:= 1970;
Masha. Birthday. Month:= May;
3. Множественные типы
Множественные типы принадлежат к несколько непривычным и сравнительно редко используемым средствам языка Паскаль. Однако в ряде случаев использование множественных типов позволяет повысить компактность и наглядность программ.