Концепция данных в языке Pascal. Реализация Delphi

Автор работы: Пользователь скрыл имя, 26 Апреля 2013 в 18:52, курсовая работа

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

Delphi — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а Delphi — объектно-ориентированный язык программирования с возможностью доступа к метаданным классов. Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Мы будем рассматривать концепцию данных на основе среды версии Delphi 5. Delphi 5 имеет высокую производительность для развития Интернет. Представлено множество новых функций и усовершенствований. Некоторые из них, среди многих других, являются: различные макеты рабочего стола, концепция кадров, параллельное развитие, перевод возможности, более интегрированный отладчик, новые возможности Интернет (XML), базы данных ADO.

Файлы: 1 файл

курсовая.doc

— 903.50 Кб (Скачать файл)
    1. Порядковые типы

К порядковым типам относятся (см. рис. 1.) целые, логические, символьный, перечисляемый и тип-диапазон. К любому из них применима функция Ord(x), которая возвращает порядковый номер значения выражения X.

Для целых типов функция ord(x) возвращает само значение х, т. е. Ord(X) = х для х, принадлежащего любому целому типу. Применение Ord(x) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 255 (символьный), от 0 до 65535 (перечисляемый). Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ord(х) зависит от свойств этого типа.

К порядковым типам можно  также применять функции:

pred(x) - возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ord (х) -1, т. е. оrd(рred(х)) = оrd(х) - 1;

succ (х) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ord (х) +1, т. е. оrd(Succ(х)) = оrd(х) + 1.

Например, если в программе  определена переменная

var

с : Char;

begin

с := '5';

end;

то функция pred(с) вернет символ '4', а функция succ(с) - символ '6'.

Если представить себе любой порядковый тип как упорядоченное  множество значений, возрастающих слева  направо и занимающих на числовой оси некоторый отрезок, то функция pred(x) не определена для левого, a succ (х) - для правого конца этого отрезка.

    1. Целые типы

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

Таблица 2.1

Целые типы

Название

Длина, байт

Диапазон значений

Byte

1

0…255

ShortInt

1

-128…+127

SmallInt

2

-32 768…+32 767

Word

2

0…65 535

Integer

4

-2 147 483 648…+2 147 483 647

LongInt

4

-2 147 483 648…+2 147 483 647

LongWord

4

0…4 294 967 295

Int64

8

-9*1018…+9*1018

Cardinal

4

0…2 147 483 647


 

Данная таблица соответствует  целым типам в Delphi 5.Типы LongWord и Int64 впервые введены в версии 4, а типы Smallint и Cardinal отсутствуют в Delphi 1. Тип Integer для этой версии(Delphi 2005) занимает 2 байта и имеет диапазон значений от -32768 до +32767, т. е. совпадает с Smallint.

При использовании процедур и функций с целочисленными параметрами следует руководствоваться “вложенностью” типов, т.е. везде, где может использоваться Word, допускается использование Byte (но не наоборот), в Longint “входит” Smallint, который, в свою очередь, включает в себя Shortint.

Перечень процедур и  функций, применимых к целочисленным типам (реализация Delphi 5), приведен в табл. 2.2. Буквами b, s, w, i, l обозначены выражения соответственно типа Byte, Shortint, Word, Integer и Longint соответственно, буквой х - выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

Таблица 2.2

Стандартные процедуры  и функции, применимые к целым  типам

Обращение

Тип результата

Действие

abs(x)

x

Возвращает модуль x

chr(b)

Char

Возвращает символ по его коду

dec (vx[ ,I])

_

Уменьшает значение vx на i, а при отсутствии i- на 1

inc (vx[ ,I])

_

Увеличивает значение vx на i, а при отсутствии i- на 1

Hi(w)

Byte

Возвращает старший  байт аргумента

Hi(I)

Byte

Возвращает третий по счёту байт

Lo(i)

Byte

Возвращает младший  байт аргумента

Lo(w)

Byte

Возвращает младший  байт аргумента

odd(l)

Boolean

Возвращает True, если аргумент - нечётное число

Random(w)

Как у параметра

Возвращает псевдослучайное  число, равномерно распределённое в  диапазоне 0…(w-1)

sqr(x)

X

Возвращает квадрат  аргумента

swap(i)

Integer

Меняет местами байты  в слове

swap(w)

Word

Меняет местами байты  в слове


При действиях с целыми числами тип результата будет  соответствовать типу операндов, а  если операнды относятся к различным целым типам - общему типу, который включает в себя оба операнда. Например, при действиях с Shortint и Word общим будет тип Integer. В стандартной настройке компилятор Delphi не вырабатывает код, осуществляющий контроль за возможной проверкой выхода значения из допустимого диапазона, что может привести к недоразумениям. Например, при прогоне следующей программы на экране появится значение 0:

procedure TfmExample. bbrunClick(Sender: TObject);

var

k:Word;

begin

k:= 65535; // Максимальное значение типаWord

k:= k+1; // По правилам математики k=65536

Writeln(k); // На самом деле  k=0!

Readln

end;

(приложение 1)

Если на вкладке Compiler диалогового окна Options (открывается командой Project ► Options) установить флажок Range checking и повторить компиляцию командой Project ► Build All, компилятор вставит в программу код проверки переполнения и при прогоне программы возникнет исключительная ситуация, которую при желании можно соответствующим образом обработать. Замечу, что можно изменить программу следующим образом:

k := 65535; // Максимальное значение типа Word

Writeln(k + 1); // Будет выведено 65536

Тогда переполнения не произойдет, так как 32-разрядный компилятор Delphi автоматически преобразует операнды выражения k + 1 к 4-байтным величинам.

    1. Логические типы

К логическим относятся типы Boolean, ByteBool, Bool, WordBool и LongBool. В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool - по 2 байта, LongBool - 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).

Поскольку логический тип  относится к порядковым типам, его можно использовать в операторе цикла счетного типа. В Delphi 5 для Boolean значение

Ord (True) = +1, в то время  как для других типов (Bool, WordBool и т.д.)

Ord (True) = -1, поэтому такого  рода операторы следует использовать  с осторожностью! Например, для версии Delphi 6 исполняемый оператор showMessage (' --- ') в следующем цикле for не будет выполнен ни разу:

var

L: Bool;

k: Integer;

begin

for L:= False to True do

ShowMessage ('---');

end;

(приложение 2)

Если заменить тип  параметра цикла L в предыдущем примере на Boolean, цикл будет работать и сообщение дважды появится на экране.

В отличии от некоторых  других языков, Object Pascal не позволяет трактовать целое значение как булеву величину. Поэтому, например, если X- целая переменная, то оператор

if X then…

будет воспринят компилятором как синтаксическая ошибка.

Для булевых типов  определены операции and (И), or (ИЛИ), not (НЕ, отрицание) и xor (исключающее ИЛИ) (табл. 2.3). Использование этих операций расширяет возможности по формированию сложных условий в ряде операторов.

Булевы операции принимают операнды булевых типов и возвращают результат тоже булевого типа.

Таблица 2.3

Булевы операции

Обозначение

Операция

Типы операндов

Тип результата

Пример

not

Отрицание

Boolean

Boolean

not (C in MySet)

and

Логическое И

Boolean

Boolean

Done and (Total > 0)

or

Логическое ИЛИ

Boolean

Boolean

A or B

xor

Логическое исключающее  ИЛИ

Boolean

Boolean

A xor B


    1. Символьный тип

Для символов имеются  физические и общий типы. Физические типы представлены типами AnsiChar и WideChar. Символ типа AnsiChar занимает 1 байт, а для кодирования символов используется код ANSI (назван по имени American National Standard Institute - американского института стандартизации, предложившего этот код). Символ типа WideChar занимает 2 байта.

Каждому символу приписывается  целое число в диапазоне 0...255. Это число служит кодом внутреннего  представления символа, его возвращает функция ord.

Кроме физических типов, в языке Delphi определён общий тип Char, который эквивалентен типу AnsiChar.

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

К символьному типу применимы операции отношения, а также имеются следующие функции:

Сhr (W): Char – возвращает символ с кодом, равным значению целочисленного выражения x;

UpCase(C): Char – преобразует символ с к верхнему регистру;

А также предопределены такие функции  и процедуры, как Ord, Pred, Succ, Inc, Dec и др. Функция, возвращающая  номер символа, противоположна по смыслу функции Chr, т.е. Ord(Chr(65)) вернёт 65, а Chr(Ord(‘A’)) вернёт символ «А».

Например:

uses

SysUtils;

var d:char;

begin

ReadLn(d);

WriteLn(Ord(d)); //используем функцию, которая возвращает код символа

ReadLn(d);  //выводим код символа

end.

В результате получается код, значение которого зависит от введённого символа.

(приложение 3)

    1. Перечисленный тип

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

Формат описания перечислимого  типа:

Type <Имя типа > = (<Имя 1>, …, <Имя N>);

Например:

type

colors = (red, white, blue);

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

type

ТипМесяц=(янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);

var

месяц : ТипМесяц;

begin

if месяц = авг then

lbOutput.Caption:= 'Хорошо бы поехать к морю!';

end.

Приведём пример использования перечисленного типа, который содержит 3 имени и с помощью конструкций if и case of отображает сообщения в зависимости от того чему равна переменная xMonth:

uses

SysUtils;

type

Month = (Jan,Feb,Mar); //создаём перечисленный тип с тремя именами

var

xMonth : Month;   //создаём переменную перечисленного типа

ch:char;

i:integer;

begin

ReadLn(i);

Case i of

1: xMonth:=Jan;

2: xMonth:=Feb;

3: xMonth:=Mar;

end;

if xMonth=Jan

then WriteLn('Nachalo zimi');

if xMonth=Feb

then Writeln('Konec zimi');

if xMonth=Mar

then Writeln('Nachalo vesni');

ReadLn(ch);

end.

(приложение 4)

Соответствие между  значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе - 1 и т. д. Максимальная мощность перечисляемого типа составляет 65536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа Word и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т. д.

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

type

colors = (black, red, white);

ordenal = (one, two, three);

days = (Mon, Tue, Wed);

С точки зрения мощности и внутреннего  представления все три типа эквивалентны. Однако пусть определены такие переменные:

var

col : colors;

num : ordenal;

day : days;

Тогда допустимы следующие операторы:

col :=black;

num :=two;

day :=Tue;

В то же время следующие операторы  недопустимы:

col :=one;

day :=black;

Между значениями перечисленного типа и множеством целых чисел  существует однозначное соответствие.

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

Информация о работе Концепция данных в языке Pascal. Реализация Delphi