Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Belova_TM

.pdf
Скачиваний:
56
Добавлен:
06.05.2015
Размер:
2.46 Mб
Скачать

Программирование линейных алгоритмов в системе Delphi

51

Form1: TForm1; implementation {$R*.dfm}

{ В этом месте размещается программный код, реализующий алгоритм решения задачи }

end.

Любые данные (такие, как константы, переменные, свойства, значения функций или выражения) в Object Pascal характеризуются своими типами. Тип определяет множество допустимых значений, а также множество допустимых операций, которые применимы к нему. Кроме того, тип определяет также и формат внутреннего представления данных в памяти ПК (рис 2.1).

Типы

 

Простые

 

 

Порядковые

 

 

Целые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вещественные

 

 

Логические

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дата-время

 

 

Символьный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перечисляемый

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип диапозон

 

 

 

 

 

 

 

 

 

 

Рис. 2.1. Структура простых типов данных

Порядковые типы

Порядковые типы отличаются тем, что каждый из них имеет конечное число возможных значений. С каждым значением можно сопоставить некоторое целое число – порядковый номер значения.

Функции для работы с порядковыми типами: Low (T) − минимальное значение данных типа T; High (T) − максимальное значение данных типа T;

Ord (Х) – возвращает порядковый номер значения Х;

Pred (Х) – возвращает предыдущее значение порядкового типа; Succ (Х) – возвращает следующее значение порядкового типа.

52

Программирование линейных алгоритмов в системе Delphi

Целые типы

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

Таблица 2.1

Целые типы

Название

Длина, байт

Диапазон

Byte

1

0..255

ShortInt

1

–128..+127

SmallInt

2

–32768..+32767

Word

2

0..65535

Integer

4

–2147483648..+2147483647

LongInt

4

–2147483648..+2147483647

Cardinal

4

0..4294967295

Int64

8

-263.. 263-1

Перечень процедур и функций, применимых к целочисленным типам, приведен ниже (табл. 2.2). Буквами b, s, w, i, l обозна-

чены выражения соответственно типа Byte, ShortInt, Word, Integer

и LongInt, х – выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

 

 

Таблица 2.2

 

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

 

применимые к целым типам

 

 

 

Обращение

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

Действие

Abs(x)

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

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

 

 

 

Chr(x)

Char

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

Dec(vx[,i])

Уменьшает значение vx на i, а при

отсутствии i на 1

 

 

Inc(vx[,i])

Увеличивает значение vx на i, а при

отсутствии i на 1

 

 

Hi(w)

Byte

Возвращает старший байт

аргумента

 

 

Hi(i)

Byte

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

 

Программирование линейных алгоритмов в системе Delphi

53

 

 

 

 

Окончание табл. 2.2

 

 

 

 

 

 

 

 

Обращение

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

Действие

 

 

 

Lo(i)

Byte

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

 

 

 

аргумента

 

 

 

 

 

 

 

 

Lo(w)

Byte

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

 

 

 

аргумента

 

 

 

 

 

 

 

 

Odd(l)

Boolean

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

 

 

 

нечетное число

 

 

 

 

 

 

 

 

Random(w)

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

Возвращает случайное число

 

 

 

из диапазона 0 .. (w–1)

 

 

 

Sqr(x)

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

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

 

 

 

Swap(i)

Integer

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

 

 

 

 

 

 

 

 

 

Swap(w)

Word

То же

 

 

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

К логическим типам данных относятся типы Boolean (1 байт), ByteBool (1 байт), Bool (2 байта), WordBool (2 байта), LongBool (4 бай-

та). Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина). Для них справедливы правила:

Ord (False) = 0;

Ord (True) <> 0;

Succ (False) = True;

Pred (True) = False.

Символьные типы

Значением символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0..255. Это число служит кодом внутреннего представления символа, его возвращает функция Ord ( ). К символьным типам данных относятся типы Char, ANSIChar и WideChar. Символьный тип –

Char предназначен для хранения одного символа. В памяти ПК символ занимает один байт. Один байт это 256 (28) различных символов, которые можно хранить в переменной Char. Эти символы составляют символы ASCII от 0 до 255. Тип Char эквивалентен типу ANSIChar. ANSIChar – это 8-битный ANSI-символ. Третий символьный тип – WideChar, представляет собой 16-битный сим-

54

Программирование линейных алгоритмов в системе Delphi

вольный тип. Эти три разных символьных типа введены для совместимости. Delphi поддерживает стандарт Unicode. Эта поддержка осуществляется типом WideChar. Символ Unicode использует все 16 бит типа WideChar. Хотя Windows NT согласован с Unicode, но Windows 95 – нет. Если вы пишете приложения, которые собираетесь использовать на обеих системах, используйте функцию SizeOf ( ).

К типу Char применимы операции отношения, а также встроенные функции:

Chr (B) преобразует выражение В типа Byte в символ и возвращает его своим значением;

UpCase (СН) возвращает прописную букву, если СН – строчная латинская буква, в противном случае возвращает сам символ СН (для кириллицы возвращает исходный символ).

Перечисляемый тип

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

type

 

colors = (red, white, blue);

var

a: colors;

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

Тип-диапазон

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

<мин.знач.>..<макс.знач.>

Здесь <мин.знач.>..<макс.знач.> соответственно минимальное и максимальное значения типа-диапазона.

Программирование линейных алгоритмов в системе Delphi

55

Примечания:

1.Два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;

2.Левая граница не должна превышать его правую границу.

Тип-диапазон можно описывать непосредственно при объявлении переменной:

var

date : 1..31; .

Функции, поддерживающие работу с типами-диапазонами:

High(x)возвращаетмаксимальноезначение типа-диапазона.

Low(x) возвращает минимальное значение типа-диапазона.

Вещественные типы

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

Приведем названия вещественных типов, длину их внутреннего представления в байтахи диапазонвозможныхзначений(табл.2.3).

 

 

 

Таблица 2.3

 

Вещественные типы

 

 

 

 

 

Название

Длина, байт

Количество

Диапазон

 

знач. цифр

 

 

 

 

 

 

 

 

 

 

Real48

6

11..12

2,9∙10-39..1,7∙1038

 

Single

4

7..8

1,7∙10-45..3,4∙1038

 

Double

8

15..16

5,0∙10-324..1,7∙10308

 

Real

8

15..16

5,0∙10-324..1,7∙10308

 

Extended

10

19..20

3,6∙10-4951..1,1∙104932

 

Comp

8

19..20

–263..+263–1

 

Currency

8

19..20

922 337 203 685 477,5807

 

 

 

 

 

 

56

Программирование линейных алгоритмов в системе Delphi

Особое положение занимают типы Comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины. Тип Currency используется для представления денежных сумм. Это тип с плавающей запятой, совместимый со всеми другими типами с плавающей запятой. Тип Currency имеет точность четыре десятичных разряда после точки и хранится как 64-битовое целое, в котором четыре наименьших значащих цифры представляют четыре дробных десятичных разряда.

Для работы с вещественными данными могут использоваться встроенные математические функции, представленные ниже (табл. 2.4). В этой таблице real означает любой вещественный тип, integer – любой целый тип.

 

 

 

Таблица 2.4

 

Стандартные математические функции

 

 

 

 

Обращение

Тип

Тип

Примечание

аргумента

результата

Abs(x)

real,

Тип

Модуль аргумента

integer

аргумента

 

 

ArcTan(x)

real

real

Арктангенс, значение в радианах

Cos(x)

real

real

Косинус, угол в радианах

Exp(x)

real

real

Экспонента

Frac(x)

real

real

Дробная часть числа

 

 

 

 

Int(x)

real

real

Целая часть числа

 

 

 

 

Ln(x)

real

real

Логарифм натуральный

 

 

 

 

pi

real

=3,141592653

Random

real

Псевдослучайное число, равномерно рас-

пределенное в диапазоне 0 .. 1

 

 

 

Random(x)

integer

integer

Псевдослучайное целое число, равномер-

но распределенное в диапазоне 0 .. (х–1)

Randomize

Инициация генератора псевдослучайных

чисел

 

 

 

Sin(x)

real

real

Синус, угол в радианах

Sqr(x)

real

real

Квадрат аргумента

Sqrt(x)

real

real

Корень квадратный

Trunc(x)

real

integer

Усечение дробной части

Round(x)

real

integer

Округление числа х до ближайшего целого

Программирование линейных алгоритмов в системе Delphi

57

Тип TDateTime (дата-время)

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

Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов.

Тип Variant

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

В Delphi определены следующие операции: 1. Унарные:

not – отрицание; @ – адрес.

2. Мультипликативные:

* – умножение; / – деление;

div – целочисленное деление; mod – остаток от деления; and – логическое И;

shl – левый сдвиг; shr – правый сдвиг.

3. Аддитивные: + – сложение;

58

Программирование линейных алгоритмов в системе Delphi

- – вычитание;

or – логическое ИЛИ; xor – исключающее ИЛИ. 4. Отношения:

= – равно; <> – не равно; < – меньше; > – больше;

<= – меньше или равно; >= – больше или равно.

Приоритет операции убывает в указанном порядке, т.е. наивысшим приоритетом обладают унарные операции, низшим – операции отношения.

Логические операции над логическими данными дают результат логического типа по правилам, указанным ниже (табл. 2.5).

 

 

 

 

 

Таблица 2.5

Логические операции над данными логического типа

 

 

 

 

 

 

 

 

Операнд 1

Операнд 2

not

and

or

 

xor

 

true

false

 

 

false

true

 

 

false

false

false

false

 

false

 

false

true

false

true

 

true

 

true

false

false

true

 

true

 

true

true

true

true

 

false

 

С помощью оператора присваивания переменной или функции присваивается значение выражения. Для этого используется знак присваивания :=, слева от которого записывается имя переменной или функции, которой присваивается значение, а справа – выражение, значение которого вычисляется перед присваиванием.

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

Программирование линейных алгоритмов в системе Delphi

59

Ввод и вывод данных

На странице Standard палитры компонентов размещена компонента Edit: текстовый редактор, предназначенный для ввода и (или) отображения одной текстовой строки. Щелкнув мышью по соответствующей пиктограмме, перенесите компоненту Edit на форму. Изменить свойства компоненты (имя, размер и т.п.) можно, используя Object Inspector/Properties. Например, чтобы очистить строку ввода, в свойстве Text компоненты Edit удалите содержащуюся там запись. Так как компонента Edit работает со строками, то, чтобы преобразовать текст из компоненты Edit (имя Edit1) в число, потребуются специальные процедуры и функции.

Например, выражения

y := StrToInt(Trim(Edit1.Text));

z := StrToFloat(Trim(Edit2.Text));

преобразуют строку Edit1.Text в переменную типа Integer и строку Edit2.text в вещественную переменную типа Real. Функция Trim удаляет пробелы и управляющие символы в начале и в конце строки. Возможны и обратные преобразования:

Edit1.Text := IntToStr(x);

Edit2.Text := FloatToStr(y),

где x – переменная типа Integer; y – вещественная переменная типа Real. Функции преобразования чувствительны к возможным ошибкам символьного представления числа (ошибки в программе можно блокировать с помощью редактора MaskEdit и функции Trim).

На странице Standard палитры компонентов размещена компонента Label – метка. Эта компонента используется для размещения в окне не очень длинных однострочных надписей. Щелкнув мышью по соответствующей пиктограмме, перенесите компоненту Label на форму. Изменить свойства компоненты (имя, размер и т.п.) можно, используя Object Inspector/ Properties. Например, чтобы метка содержала текст, в свойстве Caption компоненты Label удалите содержащуюся там запись и наберите необходимый текст.

На странице Standard палитры компонентов размещена компонента Button – стандартная кнопка. Чтобы на кнопке изменить надпись, в свойстве Caption компоненты Button наберите необходимый текст. Обработчик события OnClick поможет ввести исходные данные, выполнить вычисления и вывести на форму результаты. Для этого щелкните дважды по кнопке Button. Delphi автомати-

60

Программирование линейных алгоритмов в системе Delphi

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

//Раздел объявления меток

Label met1, met2;

//Раздел объявления констант

Const A=5; B=2.8; //Раздел описания типов

Type tx=array [0..4] of real; //Раздел описания переменных

Var y:integer; x:tx;

//Раздел описания встроенных процедур и функций //Раздел операторов

Begin

<Операторы языка программирования> End;

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

Пример программирования линейного алгоритма

Линейному алгоритму соответствует следующая типовая блок-схема (рис. 2.2).

Ввод

данных

. . .

Вывод

результата

Рис. 2.2. Типовая блок-схема линейного алгоритма