Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка-ПРОГРАММИРОВАНИЕ -DELPHI 2007.doc
Скачиваний:
7
Добавлен:
12.11.2019
Размер:
2.04 Mб
Скачать

1.3. Контрольные вопросы

  1. Какие этапы работы по созданию приложений можно вы­полнять с помощью IDE?

  1. Для чего предназначен инспектор объектов?

  1. Каким образом используется палитра компонентов?

  2. Для чего используется панель инструментов?

  3. Каким образом переключаются окна проектировщика форм и редактора кода?

  4. Каким образом вставляется обработчик событий в код программы?

  5. Как создать новый проект?

  6. Как сохранить проект?

  7. Каким образом открыть существующий проект?

  1. Какие основные части содержит простая программа на Delphi?

  2. Верно ли, что каждая форма должна иметь свой модуль Unit?

  3. Верно ли, что каждый модуль Unit должен иметь форму?

  4. Каким образом запустить проект только на компиляцию?

  5. Каким образом запустить проект на компиляцию и вы­полнение?

  6. Как используются контрольные точки для отладки про­грамм?

  7. Как используется окно Watch List в процессе отладки?

  8. Как использовать пошаговый режим при отладке про­грамм?

1.4. Задания к лабораторной работе № 1

  1. Разместить на форме три компонента: Label, Edit и Button. Изменить свойства Caption или Text этих компонентов.

  2. С кнопкой Button связать обработчик события OnClick и в теле обработчика события поместить команду Close.

  3. Откомпилировать проект.

  4. Запустить проект на выполнение. Убедиться, что при щелчке левой кнопкой мыши на кнопке Button проект закрывается.

  5. Сохранить проект на диске.

  6. Оформить отчет.

  7. Подготовиться по контрольным вопросам к защите работы.

Раздел 2. Программирование линейных алгоритмов в системе delphi

2.1. Вводные замечания

Данный раздел посвящен изучению и приобретению навыков программирования линейных алгоритмов, освоению оператора присваивания, операторов ввода (компонент Edit) и вывода (ком­поненты Label и Edit), типов данных, арифметических операций и функций языка Delphi.

2.2. Основные понятия

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

Файлы, создающиеся Delphi при проектировании приложения.

Файл проекта (,dpr)

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

Файл модуля (.pas)

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

Файл формы (.dfm)

Это двоичный файл, который создается Delphi для хранения информации о ваших формах. Каждому фай­лу формы соответствует файл модуля (.pas).

Файл параметров проекта (.dfo)

В этом файле хранятся установки параметров проекта.

Файл информации о пакетах (.drf)

Этот бинарный файл используется Delphi при работе с пакетами.

Файл ресурсов (.res)

Этот бинарный файл содержит используемую проек­том пиктограмму. Этот файл не должен изменяться или создаваться пользователем, так как Delphi посто­янно модифицирует и пересоздает этот файл.

Файлы резервных копий (. dp,. df,. pa)

Это соответственно файлы резервных копий для фай­лов проекта, формы и модуля.

Файлы, создающиеся компилятором.

Исполняемый файл (.ехе)

Это исполняемый файл вашего приложения. Он явля­ется автономным исполняемым файлом, для которого больше ничего не требуется, если только вы не ис­пользуете библиотеки, содержащиеся в DLL, OCX и т.д.

Объектный файл модуля (.dcu )

Это откомпилированный файл модуля (.pas), который компонуется в окончательный исполняемый файл.

Динамически присоединяемая библиотека (.dll)

Этот файл создается в случае, если вы проектируете свою собственную DLL.

Файл проекта представляет собой программу, написанную на языке Object Pascal и предназначенную для обработки компилятором.

program Projectl;

uses

Forms, Unitl in 'Unitl.pas' {Forml};

{$R*.RES}

begin

Application.Initialize;

Application.CreateForm(TForml, Forml);

Application.Run;

end.

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

Структура модуля:

unit Unitl;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForml=class(TForm) private

{ Private declarations } public { Public declarations} end;

var // Раздел описания переменных Forml: TForml;

implementation

{$R*.DFM}

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

алгоритм приложения}

end.

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

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

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

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

Pred(X) - возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру Ord(X)~l\ то есть

Ord(Pred(X)) = Ord(X) - 7;

Succ(X) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру Ord(X)+l, т.е.

Ord(Succ(X)) = Ord(X) + 1.

Целые типы

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

Таблица 2.1

Целые типы

Ord(Pred(X)) = Ord(X) - 1;

Succ(X) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру Ord(X)+l, т.е. ,

Ord(Succ(X)) - Ord(X) + 1.

Целые типы

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

Таблица 2.1

Целые типы

Название

Длина, байт

Диапазон

Byte

1

0...255 j

Shortint

1

-128...+127

Smallint

2

-32768...+32767

Word

2

0...65535

Integer

4

-2I47483648...+2147483647

Longint

4

-2147483648...+2147483647

Cardinal

4

0...4294967295

Перечень процедур и функций, применимых к целочислен­ным типам, приведен в табл. 2.2. Буквами Ь, s, w, /, / обозначены выражения соответственно типа Byte, Shortlnt, Word, Integer и Longlnt, x - выражение любого из этих типов; буквы 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

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

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;

OrdfTrue) <> 0; Succ(False) = True; PredfTrue) = False. Символьный тип

Значением символьного типа является множество всех симво­лов ПК. Каждому символу приписывается целое число в диапазоне 0...255. Это число служит кодом внутреннего представления сим­вола, его возвращает функция OrdQ. К символьным типам данных относятся типы Char, ANSIChar и WideChar. Символьный тип -Char предназначен для хранения одного символа. В памяти ПК символ занимает один байт. Один байт - это 256 (28) различных символов, которые можно хранить в переменной Char. Эти симво­лы составляют символы ASCII от 0 до 255. Тип Char эквивалентен типу ANSIChar. ANSIChar - это 8-битный ANSI-символ. Третий символьный тип - WideChar, представляет собой 16-битный сим­вольный тип. Эти три разных символьных типа введены для со­вместимости. Delphi поддерживает стандарт Unicode. Эта под­держка осуществляется типом WideChar. Символ Unicode исполь­зует все 16 бит типа WideChar. Хотя Windows NT согласован с Unicode, но Windows 95 - нет. Если вы пишете приложения, кото­рые собираетесь использовать на обеих системах, используйте функцию SizeOf().

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

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

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

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

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

рым идентификатором и располагается в списке, заключенном в круглые скобки:

type

colors = (red, white, blue);

var axolors;

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

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

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

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

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

Внимание

два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы; левая граница не должна превышать его правую границу. Тип-диапазон можно описывать непосредственно при объяв­лении переменной: var

date: 1..31;. Функции, поддерживающие работу с типами-диапазонами: High(x) - возвращает максимальное значение типа-диапазона;

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

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

В отличие от порядковых типов, значения которых всегда со­поставляются с рядом целых чисел и представляются в ПК абсо­лютно точно, значения вещественных типов определяют произ-

вольное число лишь с некоторой конечной точностью, зависящее от внутреннего формата вещественного числа.

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

Таблица 2.3 Вещественные типы

Название

Длина, байт

Количество знач. цифр

Диапазон

real

6

11...12

2,9*10"39..1,7*1038

single

4

7...8

1,5*10-45..3,4*1038

double

8

15...16

5,0*10"324..1,7*10308

extended

10

19...20

3,.4*10-4951-1,1*104932

comp

8

19...20

-2б3..+263-1

currency

8

19...20

922337203685477,5807

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

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

Обраще­ние

Тип па­раметра

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

Примечание

abs(x)

real, in­teger

тип аргумента

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

ArcTan(x)

real

real

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

cos(x)

real

real

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

J exp(x)

real

real

экспонента

frac(x)

real

real

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

int(x)

real

real

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

ln(x)

real

real

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

pi

real

real

=3.141592653...

Random

-

real

псевдослучайное число, равно­мерно распределенное в диапа­зоне 0 ... 1

Random(x)

integer

integer

псевдослучайное целое число, 1 равномерно распределенное в диапазоне 0 ... (х-1)

Randomize

-

-

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

sin(x)

real

real

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

sqr(x)

real

real

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

sqrt(x)

real

real

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

trunc(x)

real

integer

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

round(x)

real

integer

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

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

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

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

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

Тип Variant

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

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

унарные:

not ~ отрицание, @- адрес;

мультипликативные:

* - умножение,

/ - деление,

div - целочисленное деление,

mod - остаток от деления,

and - логическое И,

shl - левый сдвиг,

shr - правый сдвиг;

аддитивные:

+ - сложение, - - вычитание,

or - логическое ИЛИ, хог - исключающее ИЛИ;

отношения:

= - равно,

о - не равно,

< - меньше,

> - больше,

<= - меньше или равно,

>= - больше или равно.

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

Логические операции над логическими данными дают ре­зультат логического типа по правилам, указанным в табл. 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

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

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

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

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

у := StrToInt(Trim(Editl.Text));

z := StrToFloat (Edit2.text); преобразует строку Editl.Text в переменную типа Integer и строку Edit2.text в действительную переменную. Возможно и обратное преобразование (более подробно о процедурах и функциях см. ме­ню Help):

у := IntToStr(S);

z:=FloatToStr(Sl), где S - переменная типа Integer, SI - действительная переменная.

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

Вывод данных

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

удалите содержащуюся там запись, и наберите необходимый текст. Обработчик события OnClick поможет вывести на форму необхо­димую информацию. Для этого щелкните дважды по метке, и Delphi автоматически подготовит заготовку процедуры: останется вставить необходимые операторы (см. Пример).