Типы данных в языке Паскаль

Автор работы: Пользователь скрыл имя, 13 Марта 2011 в 10:34, лекция

Описание работы

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

Файлы: 1 файл

мпо.doc

— 223.00 Кб (Скачать файл)

     Значения  множественного типа так же, как  и массивы, строятся из нескольких значений одного (базового) типа. Однако в отличие  от массивов и записей значение множественного типа может содержать любое количество различных элементов базового типа - от ноля элементов (пустое множество) до всех возможных значений базового типа. Иными словами, возможными значениями переменных множественного типа являются все подмножества значений базового типа.

     Синтаксис описания некоторого множественного типа имеет вид:

     Type

     <имя типа> = set of <базовый тип>;

     Здесь:

     <имя  типа> - правильный идентификатор  языка;

     set, of - зарезервированные слова (множество,  из);

     <базовый  тип> - базовый тип элементов  множества, в качестве которого может использоваться любой порядковый тип, кроме WORD, INTEGER, LONGINT (т.е. типы BYTE и CHAR, перечислимые типы, а также ограниченные типы, образованные из них).

     Пример:

     Type

     digitChar = set of ‘0’..’9’;

     digit = set of 0..9;

     elemColor = (Red, Yellow, Blue);

     color = set of Color;

     Var

     s1, s2, s3: digitChar;

     s4, s5, s6: digit;

     myColor: Color;

     Примечания

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

     Например, не может быть множества: 1, 2, 2.

  1. Порядок “расположения” элементов в множестве не имеет значения.

     Множества:

     1, 2, 3

     3, 2, 1

     одинаковы.

     Это соответствует принятой в математике трактовке множества как бесповторной неупорядоченной совокупности объектов.

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

     Например:

     s6:= [1, 2, 3];

     s4:= [ 0, 1, 2, 3+4 ];

     s5:= [ 0..3, 6 ]; {эквивалентно множеству [0, 1, 2, 3, 6]}

     s1:= [ ‘0’..’5’ ];

     s2:= []; {пустое множество}

     myColor:= [ Red ];

     4. Файловые типы

     Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Object Pascal, кроме файлов. Иными словами, нельзя создать “файл файлов”. В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.

     Файловый  тип можно задать одним из трех способов:

     <имя> = File of <тип>;

     <имя> = TextFile;

     <имя> = File;

     Здесь <имя> - имя файлового типа (правильный идентификатор);

     File, of - зарезервированные слова (файл, из); TextFile - имя стандартного типа  текстовых файлов; <тип> - любой  тип Object Pascal, кроме файлов.

     5. Указатели 

     Object Pascal предоставляет в распоряжение программиста гибкое средство управления динамической памятью - так называемые указатели. Указатель - это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, ShortInt, Boolean) занимают во внутреннем представлении один байт, остальные - несколько смежных. Поэтому на самом деле указатель адресует лишь первый байт данных.

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

     var

     p1: ^Integer;

     р2: ^Real;

     6. Строковые типы 

     Тип STRING (строка) в Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY [0..N] OF CHAR, однако, в отличие от последнего, количество символов в  строке-переменной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING[N] и может быть любой константой порядкового типа, но не больше 255.

     Паскаль разрешает не указывать N, в этом случае длина строки принимается  максимально возможной, а именно N=255.

     Строка  в Паскале трактуется как цепочка  символов. К любому символу в строке можно обратиться так же, как к  элементу одномерного массива ARRAY [0..N] OF CHAR, например:

     Var

     st: string;

     .........

     if st [5] = ‘A’ then.....

     Самый первый байт в строке имеет индекс 0 и содержит текущую длину строки. Первый значащий символ строки занимает второй байт и имеет индекс 1. Над длиной строки можно осуществлять необходимые действия и таким образом изменять длину.

     Значение  текущей длины строки можно не только извлекать из первого байта самой строки, но и получать с помощью функции LENGTH (st).

     Например:

     Var

     st: string;

     .........

     write (‘Введите строку: ’);

     readln (st);

     writeln (‘Текущая длина строки - ’,Length(st));

     ........

     Данный  фрагмент программы распечатает текущую длину введенной строки.

     К строкам можно применять операцию “+” - сцепление, например:

     st:= ‘a’ + ‘b’;

     st:= st + ‘c’; {st содержит “abc”}

     Если  длина сцепленной строки превысит максимально  допустимую длину N, то “лишние” символы  отбрасываются.

     Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением CHR(0).

     Следующие операции отношения дадут значение TRUE:

     ‘A’ > ‘1’

     ‘Turbo’ < ‘Turbo Pascal’

     ‘Паскаль’ >‘Turbo Pascal’

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

     7. Процедурные типы

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

     Для объявления процедурного типа используется заголовок процедуры (функции), в  котором опускается ее имя, например:

     type

     Proc1 = Procedure (a, b, с: Real; var d: Real); Proc2 = Procedure (var a, b);

     РгосЗ = Procedure;

     Func1 = Function: String;

     Func2 = Function (var s: String): Real;

     Как видно из приведенных примеров, существует два процедурных типа: тип-процедура  и тип-функция.

     8. Объекты

     Тип данных Object является базовым в Visual Basic.NET. Это означает, что все типы данных и типы объектов являются производными от него либо непосредственно, либо косвенно. Это означает также, что любой другой тип данных, простейший или составной, может быть преобразован в Object. Если параметр Option Strict выключен, тип Object может быть использован в качестве универсального типа данных.

     9. Классы

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

     Пример:

     type

     TMyClass = class(TObject) Field: Integer;

     end;

     var

     MyClass: TMyClass;

     10. Варианты

     Вариант (в Delphi 1 он отсутствует) - это тип variant, разработанный специально для тех  случаев, когда на этапе компиляции программист не может сказать, какого типа данные будут использоваться в  выражении или как параметры вызова подпрограмм. Переменная-вариант занимает в памяти дополнительные 2 байта, в которые помещается информация о действительном типе переменной. Эта информация позволяет компилятору создать код, который будет осуществлять необходимое преобразование типов на этапе прогона программы.

     В переменную-вариант можно поместить:

  • целое или вещественное число;
  • логическое значение;
  • строку;
  • время и/или дату;
  • OLE-объект;
  • массив произвольной размерности и длины, содержащий элементы одного из перечисленных выше типов.

     Варианты  могут участвовать в целочисленных, вещественных, логических и время-дата выражениях при условии корректности соответствующих преобразований. Например, если варианту v присвоена строка '1.0', то выражение 1+v будет правильным вещественным значением 2,0. Однако если v:= 'текст', выражение 1+v вызовет исключение EVariantError. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

История

Ещё в 1960-х  гг. Р. Хиндли (Roger Hindley) исследовал типизацию  в комбинаторной логике. Его проблемной областью была типизация в языках, основаных на теории лямбда-исчисления. Позднее, в конце 1960-х годов, тот же учёный исследовал полиморфные системы типов. Позже, в 1970-х годах, Робин Милнер предложил практическую реализацию расширенной системы полиморфной типизации для языка функционального программирования ML.

Информация о работе Типы данных в языке Паскаль