Главная страница

Информатика21-22. Методические указания по курсу Информатика Пятигорск 2020 Лабораторная работа 1


Скачать 4.27 Mb.
НазваниеМетодические указания по курсу Информатика Пятигорск 2020 Лабораторная работа 1
Дата31.03.2022
Размер4.27 Mb.
Формат файлаdocx
Имя файлаИнформатика21-22.docx
ТипМетодические указания
#431282
страница3 из 12
1   2   3   4   5   6   7   8   9   ...   12

type

colors = (red, white, blue);

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

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

type

colors = (black, red, white);

ordenal= (one, two, three) ;

days = (Monday, Tuesday, Wednesday);

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

Ord(black)=0, ... , Ord(white)=2,

Ord(one)=0, ... , Ord(three)=2,

Ord(Monday)=0, ... , Ord(Wednesday)=2.

Однако если определены переменные

var

col : colors;

num : ordenal;

day : days ;

то допустимы операторы

col := black;

num := Succ(two);

day := Pred(Tuesday);

но недопустимы

col := one;

day := black;

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

col := black;

col := colors (0) ;

Разумеется, присваивание

col := 0;

будет недопустимым, т. к. перечисляемому типу нельзя присвоить целое значение.

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

var

col: (black, white, green);

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

Тип-диапазон задается границами своих значений внутри базового типа:

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

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

Например:

type

digit = '0'..'9';

dig2 = 48 .. 57;

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

var

date : 1. .31;

month: 1..12;

Ichr : 'А'..'Z';

При определении типа-диапазона нужно руководствоваться следующими правилами:

  • два символа “..” рассматриваются как один символ, поэтому жду ними недопустимы пробелы;

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

Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью. В частности, если определена переменная

type

days = (то,tu,we,th,fr,sa,su);

WeekEnd = sa .. su;

var

w : WeekEnd;

begin

w := sa;

end;

to ord(w) вернет значение 5, в то время как pred(W) приведет к ошибке.

В стандартную библиотеку Object Pascal включены две функции, поддерживающие работу с типами-диапазонами:

High(X) - возвращает максимальное значение типа-диапазона, к которому принадлежит переменная х;

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

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

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

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

Длина, байт

Название

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

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

8

4

8

10

8

8

Real

Single

Double

Extended

Comp

Currency

15…16

7…8

15…16

19…20

19…20

19…20

5.0*10e-324…1.7*10e308

1.5*10e-45…3.4*10e38

5.0*10e324…1.7*10e308

3.4*10-4951…1.1*10e4932

-2e63…+2e63-1

+/-922 337 203 685477,5807

В предыдущих версиях Delphi 1...3 тип Real занимал 6 байт и имел диапазон значений от2, 9*10-39 до 1,7*1038. В версиях 4 и 5 этот тип эквивалентен типу Double. Если требуется (в целях совместимости) использовать 6-байтньш Real, нужно указать директиву компилятора {SREALCOMPATIBILITY ON}.

Мантисса m имеет длину от 23 (для single) до 63 (для Extended) двоичных разрядов, что и обеспечивает точность 7...8 для single и 19...20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).

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

Например, если “машинное эпсилон” вычисляется с помощью такой программы:

type

RealType = Real;

var

Epsilon : RealType;

begin

Epsilon := 1;

while l+Eps4.1on/2 > 1 do

Epsilon := Epsilon/2;

IbOutput.Caption := FloatToStr(Epsilon)

end;

то независимо от объявления типа RealType (он может быть single, Real, Double или Extended) на печать будет выдан результат

1.08420217248550Е-0019

что соответствует типу Extended. Происходит это по той причине, что все операнды вещественного выражения 1+Epsilon/2 в операторе while перед вычислением автоматически преобразуются к типу Extended. Чтобы получить правильный результат, программу необходимо изменить следующим образом:

type

RealType = Real;

var

Epsilon, Epsl : RealType;

begin

Epsilon := 1;

repeat

Epsilon := Epsilon/2;

Epsl := 1 + Epsilon

until Epsl = 1;

IbOutput.Caption := FloatToStr(2*Epsilon)

end.

Особое положение в Object Pascal занимают типы comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины: в comp дробная часть имеет длину 0 разрядов, т. е. просто отсутствует, в currency длина дробной части -4 десятичных разряда. Фактически оба типа определяют большое целое число со знаком, сохраняющее 19...20 значащих десятичных цифр (во внутреннем представлении они занимают 8 смежных байт). В то же время в выражениях comp и currency полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т. д. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.

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

Таблица 2.5. Стандартные математические функции Object Pascal

Обращение

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

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

Примечание

abs (x)

Real, Integer

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

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

Pi

-

<<

П =3.141592653...

ArcTan(x)







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

cos (x)

To же <<

To же <<

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

exp(x)

<<

<<

Экспонента

frac(x)

<<

<<

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

int(x)

<<

<<

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

ln(x)

<<

<<

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

Random

-

<<

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

Random.f(x)

Integer

Integer

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

Randomize

-

-

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

sin (x)

Real

Real

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

sqr(x)

To же

To же

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

sqrt(x)

<<

<<

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

На заметку Генератор псевдо случайных чисел представляет собой функцию которая берет некоторое целое число, называемое базовым, изменяет, его разряды По определенному алгоритму и выдает новое число результат. Одновременно с этим новое число становится базовым.прД следующем обращении к функций; и т. д. (Так как алгоритм процедуры не меняется: в ходе ее работы, числа называются псевдослучайна ми.) В системном модуле System, который автоматически доступен любой программе, базовое число хранится в переменной с именеД RandSeek и всегда имеет начальное значение.О. :Это означает, последовательном обращении к Random в разных, программах (или при нескольких прогонах одной программы) будет всегда вь1лапа'оД на и, та же прследовательность псевдослучайных чисел. НапримёД при; следующём обрабЬтчике bbRunCl.i.ck окно, нашей .учебной программы будет иметь вид, показанный на рис. 2.2:

procedure TfinExaniple.bbRunCliak(Sender:TObject);

var

S,3S: String;.

begin

S='';

for k :=1 to 300 do

SS := IntToStr (Random (1000))

while Length(SS)<3 do

if k mod 2С=0 then

begin

S : = '' ;

end

end

end;

(В программе выводятся 300 псевдослучайных чисел, которые группируются в строки по 20 чисел и дополняются ведущими нулями, если число имеет меньше трех цифр.) Если вы захотите повторить программу, вы получите точно такую же последовательность чисел, что н на рис. 2.2. С помощью процедуры Randomize в переменную RandSeek помещается численное значение системного времени, что привёдет к генерации, другой последовательности. Обращение к этой процедуре нужно сделать в самом начале обработчика.



Рис. 2.2. Последовательность псевдослучайных чисел

Начиная с версии 2 в Delphi включен модуль Match, который существенно расширяет перечисленный в табл. 7.5 набор встроенных математических функций. Особенностью реализации содержащихся в нем почти 70 функций и процедур является их оптимизация для работы с арифметическим сопроцессором класса Pentium, так что все они производят необходимые вычисления за рекордно малое время.
2.1.3. Тип дата-время

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и подобно currency представляет собой вещественное число с фиксированной дробной частью: в целой части числа хранится дата, в дробной - время. Дата определяется как количество суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени 20:05. Количество суток может быть и отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.

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

Для работы с датой и временем используются подпрограммы, перечисленные в табл. 2.6.

Таблица 2.6. Подпрограммы для работы с датой и временем

Function Date: TDateTime;

Возвращает текущую дату

Function DateToStr(D: TDateTime):String;

Преобразует дату в строку символов

Function DateTimeToStr(D: TDateTime): String;

Преобразует дату и время в строку символов

Function FormatDateTime (Format: String; Value: TDateTime): String;

Преобразует дату и время из параметра value в строку символов в соответствии со спецификаторами параметра Format (см. пояснения в п. 7.3.)

Function Now: TDateTime;

Возвращает текущую дату и время

Function Time: TDateTime;

Возвращает текущее время

Function TimeToStrfT: TDateTime): String;

Преобразует время в строку

 

Более полный перечень функций преобразования даты и времени в строку символов и обратно указан в п. 2.3.1.

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

IbOutput.Caption := DateToStr(Date + 21);

поместит в метку IbOutput дату, соответствующую текущей дате плюс 3 недели. Чуть сложнее с исчислением времени. Например, чтобы добавить к текущему времени полтора часа, следует использовать выражение

Time + StrToTime('1:30')

ИЛИ

Time+1.5/24

С помощью показанного ниже обработчика bbRunciick учебной программы вы сможете ввести в строке ввода любое вещественное число и посмотреть его интерпретацию как значение типа

TDateTime:

procedure TfmExample.bbRunClick(Sender: TObject) ;

{Показывает вещественное число, введенное в строке edinput,в формате даты-времени}

var

k: Double;

begin

//Преобразуем строковый ввод в вещественное число

try

k := StrToFloat(edinput.Text);

except

ShowMessage('Ошибка записи вещественного числа');

edinput.SelectAll ;

Exit

end;

//Показываем результат как дату-время

IbOutput. Caption := ForrnatDateTime

('dd.mm.yyyy hh:mm:ss', k);

// Возвращаемфокусвводав edinput edinput.SetFocus ;

end;
Структурные типы

Тип «Массив»

Массивы содержат фиксированное число элементов одного типа. Для доступа к элементам массива используются индексы. Массив может иметь неограниченное число размерностей. Все элементы массива имеют один и тот же тип элементов - базовый тип. Базовым типом может быть любой из порядковых типов, диапазон которых не превышает 2 Гбайта.

Например, для объявления одномерного массива S, состоящего из 10 элементов целого типа:

var

S: array [1..10] of integer;
Двумерный массив целых чисел S1 размерностью 10х10 может быть объявлен одним из следующих способов:

var

S1: array [1..10] of array [1..10] of integer;

или в более компактной форме:

var

S1: array [1..10,1..10] of integer; Тип «Запись»

Тип «запись» содержит установленное число элементов или полей, которые могут быть разных типов. В описании записи указывается идентификатор, который именует поле, и тип каждого поля. Например, описание нового типа элементов, который является записью:

type

Student = record

Name: string; Family: string; Year: integer;

end; Тип «Класс»

Тип «класс» является структурой, состоящей из фиксированного числа компонентов. Каждый компонент класса является либо полем, содержащим данные строго определённого типа, либо методом (процедурой или функцией). В Delphi используются огромное число стандартных классов, каждый из которых содержит разнообразные методы. Программист может и сам разрабатывать новые нестандартные классы, определять поля, методы для решения прикладных задач. Методика разработки и использования в программах нестандартных классах - тема отдельного разговора.

Тип «Множество»

Это математический термин, и он применим в данном случае, так как этот тип представляет именно множество, и над ним можно производить все те же действия, что и над множествами. Диапазон значений множества представляет собой мощность множества для определённого порядкового типа (базового типа). Каждое возможное значение множества является подмножеством возможных значений базового типа. В Pascal количество значений базового типа не должно превышать 256, и порядковые значения верхней и нижней границы базового типа не должны превышать диапазона от 0 до 255. В силу этого базовый тип множества не может быть коротким целым (Shortint), целым (Integer), длинным целым (Longint) или словом (Word).

Переменная для множества может принимать как все значения множества, так и ни одного. Множество можно создать так:

type

TIntSet = set of 1 .. 250;

Тип «Файл»

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

Создание интерфейса программы.

Интерфейс программы - совокупность элементов, позволяющих пользователю программы управлять её работой, а также получать требуемые результаты. Фактически, пользовательский интерфейс - это канал, по которому осуществляется взаимодействие пользователя и программы. Почему есть необходимость вообще говорить о программном интерфейсе? Дело в том, что исходя из самой идеи, программа пишется для пользователя, для удовлетворения его потребностей. В итоге же часто получается, что программист пишет программу «для себя», т.е. никому больше она не нужна, потому что кроме автора этой программы понять ее мало кто смог. И можно, конечно, доказывать, что алгоритм программы гениальный, и, что код работает очень быстро, занимает меньше места по сравнению с аналогичными программами, но эти моменты будут интересовать только программистов, потому что будут понятны только им и только ими будут оценены должным образом. Пользователь же предъявляет совершенно иные требования, чем программист, так как смотрит на код снаружи, а не изнутри. И, соответственно, большей популярностью будет пользоваться та программа, прежде всего, с которой пользователи нашли общий язык, остальные же параметры интересуют пользователей во вторую очередь.

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

Для этих целей в любой современной визуальной системе программирования есть множество компонент для размещения и использования в интерфейсной части программы. Рассмотрим несколько основных компонентов: текстовую надпись Label, поле для ввода Edit, кнопка Button, списки ListBox и ComboBox.

Текстовая надпись Label

При оформлении интерфейса программы необходимы надписи различного вида. Для этого можно использовать объект Label - надпись.

Свойства класса TLabel

Свойство

Назначение

Align

Указывает выравнивание надписи относительно родительского объекта -формы. По умолчанию - alNone

Alignment

Выравнивание текста надписи относительно границ компонента по горизонтали.

Autosize

Автоматическое изменение размера компонента в зависимости от размера текста в свойстве Caption с учётом установленного шрифта. Если свойство имеет значение False, высота и ширина компонента определяется текущими значениями свойств Height и Width.

Caption

Текст надписи

Color

Определяет цвет фона компонента

Cursor

Определяет вид указателя мыши при наведении её на компонент.

Enabled

Активность компонента. Если компонент имеет значением свойства False, то цвет текста надписи будет серым - неактивным.

Font

Задаёт параметры шрифта компонента

Height

Высота компонента в пикселях

Hint

Текст всплывающей подсказки при наведении указателя мыши

Left

Положение компонента от левой границы формы в пикселях

Name

Имя компонента для обращения к нему из программы.

ShowHint

Подсказка из свойства Hint может быть отображена только при значении свойства True

Top

Положение компонента от верхней границы формы в пикселях

Transparent

Определяет прозрачность метки: если содержит значение False, пространство метки закрашивается собственным цветом Color, в противном случае этого не происходит и сквозь метку будут видны расположенные за ней компоненты (так, например, можно наложить текст на графику)

Visible

Определяет видимость компонента. Если содержит значение False, то компонент остаётся, но становится невидимым при прогоне программы. Таким способом можно делать одни компоненты видимыми, другие скрывать.

Width

Высота компонента в пикселях.

Однострочное поле ввода и редактирования - Edit.

Компоненты класса TEdit представляют собой однострочное текстовое поле для редактирования. Основное свойство компонента Text - содержит отображаемую в поле строку. Это свойство используется для ввода и вывода данных в поля Edit.

Очень важно!

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

Для этого используются функции присвоения и преобразования.

Для присвоения значения поля Edit1 символьной переменной S используется функция:

S := EditLText;

Для преобразования символьного значения переменной S в целочисленное значение X используется функция:

X := StrToInt (S);

Для преобразования символьного значения переменной S в вещественное значение X используется функция:

X := StrToFloat(S);

Для обратного преобразования используется аналогичные функции:

S := IntToStr (X); S := FloatToStr (X);

Для вывода значения символьной переменной S в поле Edit используется функция:

Edit1.Text := S;

Многострочное поле ввода и редактирования - Memo.

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

Многие свойства данного компонента аналогичны соответствующим свойствам других компонентов. Главное свойство - Lines - хранит текст. Текст представляет собой пронумерованный набор строк (нумерация начинается с нуля). Содержимое поля может быть задано через Инспектор объектов (свойство Lines), введено при прогоне программы, сформировано динамически (данный способ будет рассмотрен при работе с циклами).

Свойства компонента TMemo

Свойство

Назначение

CaretPos

Содержит координаты мигающего текстового курсора относительно границ клиентской области компонента.

Lines

Содержит строки текста

ScrollBars

Определяет наличие в многострочном поле полос прокрутки:

• ssNone - нет полос;

• ssHorizontal - есть горизонтальная;

• ssVertical - есть вертикальная;

• ssBoth - есть обе полосы.

Text

Отображает содержимое свойства Lines в виде одной длинной строки, в которой границы отдельных строк определяются символами EOL (CR + LF)

WantReturns

Если содержит значение True, нажатие клавиши Enter вызывает переход на новую строку, в противном случае - обрабатывается системой. Для перехода в новую строку в этом случае следует нажать клавиши Ctrl + Enter

Остальные свойства данного компонента будут рассмотрены позднее.

Кнопка - Button

Один из основных элементов управления в программах. Связанный с кнопкой алгоритм управления реализуется в процедуре OnClick.

Основные свойства этого компонента аналогичны соответствующим свойствам других компонентов. Надпись на кнопке создаётся с использованием свойства Caption.

Компонент UpDown - счётчик предназначен для пошагового регулирования числовой величины. Он имеет пару кнопок, с помощью которых величина наращивается или уменьшается. Сам по себе этот элемент не имеет возможности что-либо менять, а обычно его связывают с текстовым полем Edit, которое отображает регулируемую величину.
Связанный компонент называется компаньоном. Сам компонент UpDown находится во вкладке Win32
Свойства компонента UpDown


Свойство

Назначение

AlignButton

Определяет положение счётчика относительно компаньона:

• udLeft - счётчик располагается слева от него;

• udRight - справа от него.

ArrowKeys

Разрешает/запрещает интерпретировать нажатие клавиш | и | как щелчки, соответственно на направленной вверх и направленной вниз кнопках счётчика.



Свойство

Назначение

Associate

Определяет связанный компонент (компаньон). Кнопки автоматически располагаются с нужной стороны компаньона и выравнивают свою высоту по его высоте.

Increment

Определяют шаг наращивания/уменьшения регулируемой величины. Значение может иметь только целочисленное значение - SmallInt. (-32768..32767)

Max и Min

Определяет максимальное и минимальное значение диапазона изменения регулируемой величины. Значение может иметь только целочисленное значение - SmallInt.

Orientation

Определяет ориентацию компонента:

• udHorizontal - по горизонтали;

• udVertical - по вертикали.

Position

Содержит текущее значение текущей величины. Значение может иметь только целочисленное значение - SmallInt.

Thousands

Если содержит значение True, при отображении числовой величины в компаньоне в текст вставляются разделители тысяч

Wrap

Запрещает/разрешает выход значения Position из диапазона Max...Min (True - запрещает).

Для создания счётчика в окно проекта добавляется два компонента - Edit и UpDown. Для присоединения к компоненту UpDown поля Edit в свойствах первого необходимо открыть свойство Associate и выбрать из списка компонент-компаньон. Полученный объект и есть счётчик в том виде, как мы его привыкли видеть и использовать во всех приложениях Windows.

Группировка компонентов с использованием фреймов.

Фреймы (англ. frame - рамка) - это контейнер для объединения в одну логическую группу нескольких компонентов. В проектах с простым интерфейсом, где количество компонентов невелико, группировать компоненты нет необходимости. Однако в проектах, где используются компоненты, относящиеся к различным логическим группам, наиболее удобным средством размещения и управления свойствами компонентов являются фреймы.

Примером использования фреймов во многих приложениях являются панели инструментов.

Добавление фрейма в проект происходит в два этапа: меню File -- New -- Other -- в диалоговом окне New Items в категории Delphi Files выбрать компонент Frame. При этом фрейм создаётся в проекте, но не отображается.



• окно (форму) проекта фрейм добавляется с использованием визуального компонента Frame в Палитре компонентов Standard.

При первой попытке добавления из Палитры компонентов раздела Standard компонента Frame в форму, система Delphi выдаёт сообщение о том, что в проекте нет созданных фреймов и предлагает путь к созданию фреймов.




В дальнейшем в проект можно добавлять аналогично несколько фреймов. Однако после создания фрейма с помощью меню его необходимо добавить в форму из Палитры компонентов Standard. Для каждого нового фрейма будет создан отдельный модуль (unit) и форма для добавления в него компонентов.

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

В этом случае все компоненты фрейма являются его дочерними компонентами.
Практическая часть.

Ход работы. Задание 1.

Создание интерфейса программы.

  1. Создать новый проект.

  2. Для окна проекта в Инспекторе объектов задать следующие свойства:




  • Размер формы: ширина - 600 пикселей, высота - 600 пикселей.

  • Заголовок формы - Лабораторная работа № 2.




  1. В форму добавить ещё три надписи с текстом: Количество, Цена, Стоимость.

  2. Добавить три текстовых поля Edit для дальнейшего использования их для ввода числовых значений количества, цены товара и вывода стоимости. Разместить их под соответствующими заголовками. Для этих полей свойство Text сделать пустым. Значение данного свойства - это тот текст, который автоматически отображается при прогоне программы. Размер каждого из полей задать графически.

  3. Добавить в форму две кнопки - объект Button. Для одной из них в свойство Caption ввести Расчёт, для другой - Выход из программы. Размеры и положение кнопок задать произвольно.

  4. Интерфейс программы на этом этапе конструирования может иметь следующий вид:



Создание кода программы.

1. Логика работы программы такова, что после ввода числовых значений в поля Количество и Цена при щелчке по кнопке Расчёт программа должна рассчитать стоимость товара по формуле [Стоимость] = [Количество] * [Цена] и полученное значение вывести в поле Стоимость.

2. Для выполнения всех этих действий необходимо для кнопки Расчёт (Buttonl) создать процедуру по событию OnClick. Для этого выделить объект Buttonl и в Инспекторе объектов во вкладке Events (События) дважды щёлкнуть в строке события OnClick.

Будет создана процедура следующего вида:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

  1. Для передачи в программу введённых в поля Количество и Цена данных, а затем для вывода в поле Стоимость необходимо использовать в процедуре три переменных строкового типа. Например, KolS, CenaS, StoimS - символ S в конце имени каждой переменной условно обозначает, что данные переменные относятся к строковому типу. Для преобразования этих строковых переменных в числовые необходимо использовать в программе ещё три переменных числового формата. Для определённости выберем целочисленные. (Вычисления будем выполнять с целым количеством и ценой, представленной целым числом.). Переменные KolInt, CenaInt, StoimInt - целочисленные.

  2. Переменные должны быть объявлены после заголовка процедуры перед телом процедуры. Например,

procedure TForm1.Button1Click(Sender: TObject);

var

//Строковые переменные для количества, цены и стоимости KolS, CenaS, StoimS: string;

//Целочисленные переменные для количества, цены и стоимости KolInt, CenaInt, StoimInt: integer;

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

begin

//Считываем из поля Количество введённые данные как строковое значение

KolS := Edit1.Text;

//Считываем из поля Цена введённые данные как строковое значение CenaS:= Edit2.Text;

Затем полученные значения преобразовать в числовые значения.

//Преобразуем символьные значения в целочисленные

KolInt := StrToInt(KolS); CenaInt := StrToInt(CenaS);

После преобразования можно вычислять значение стоимости товара в виде целого числа.

//Вычисляем стоимость по формуле StoimInt := KolInt * CenaInt;

Но перед выводом полученного числового значения в поле Стоимость его необходимо преобразовать в символьное:

//Полученное числовое значение стоимости преобразуем в символьное

StoimS := IntToStr(StoimInt);

Для вывода символьного значения в поле Стоимости его значение необходимо присвоить свойству Text соответствующего поля.

//Символьное значение выводим в поле Стоимость Edit3.Text := StoimS;

end;

6. Для выхода из программы можно использовать стандартные средства окна проекта, а можно для этого
запрограммировать соответствующую кнопку Выход.

Для этой кнопки необходимо создать процедуру на событие OnClick, а код процедуры будет содержать только одну единственную команду - метод формы Close.

Процедура будет иметь вид:

procedure TForm1.Button2Click(Sender: TObject); begin

FormLClose; end;

7. Для проверки работоспособности программы сохраните проект под именем Lab3 в отдельную папку и запустите программу на выполнение. Убедитесь, что программа корректно работает в случае ввода в поля Количество и Цена целых чисел.

Задание 2.

Интерфейс.

  1. В окно созданного проекта добавить текстовый заголовок Задание 2. Управление интерфейсом.

  2. Добавить два текстовых однострочных поля Edit и два компонента UpDown. В свойствах компонентов UpDown указать, с каким текстовым полем будет работать этот компонент. Кроме того, для ограничения диапазона ввода в счётчиках в свойствах компонентов UpDown задать минимальное значение (Min) равное 600 и максимальное значение (Max) равное 800.

На данном этапе конструирования интерфейс приложения может иметь вид:



Программный код

3. Логика работы заключается в том, что при использовании счётчика ширины и высоты формы в компоненте Edit происходит изменение значения. В зависимости от заданного значения размеры окна должны меняться. Для написания программного кода в каждом из полей Edit, привязанных к счётчику, необходимо использовать событие onChange.

Например, для поля Edit4 со значением ширины окна процедура может иметь следующий вид:

begin

forml.Width := StrToInt(Edit4.Text);

end;

При этом ввести программный код необходимо только в 3-й строке этой процедуры.

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

Задание 3. Интерфейс.

l. Добавить в проект фрейм и вставить его в форму (окно) проекта. При добавлении визуального компонента Frame из Палитры компонентов автоматически создаётся новый модуль и форма для него. В форму созданного фрейма (она отобразится в отдельной вкладке) добавить компоненты: текстовая надпись Label, однострочное поле для ввода и редактирования Edit, кнопку Button и многострочное поле Memo. В компонентах Label и Button задать свойство Caption. В поле Edit в свойстве Text удалить всё содержимое. В поле Memo для удаления стандартного текста в Инспекторе объектов необходимо открыть свойство Lines. Именно это свойство позволяет управлять содержимым поля Memo и с помощью Инспектора объектов и программным путём.

На данном этапе проектирования интерфейс фрейма может иметь следующий вид:


2. Для добавления фрейма с его компонентами в окно проекта в палитре компонентов в разделе Standard необходимо выбрать визуальный компонент Frame и в диалоговом окне Select frame to insert выбрать имя нужного фрейма.



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




:


Программный код.

3. Логика работы программы должна быть такова, что после ввода в поле Edit требуемых данных, пользователь должен нажать кнопку Добавить после чего введённый текст добавляется в многострочное поле Memo, а содержимое поля Edit автоматически очищается. Для кнопки Button необходимо создать процедуру по событию onClick.

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

var s: string;

В теле процедуры программный код может иметь следующий вид:

//процедура обработки текстовых данных. s:=Frame31.Edit1.Text; Frame31.Memo1.Lines.Add(s); Frame31.Edit1.Text := '';

Переменной s присваивается значение текстового поля Edit, но так как это поле вставлено не в форму непосредственно, в фрейм, то вначале перед именем поля Edit1 указано имя фрейма Frame31 (это имя фрейма в данном примере!).

Для вывода текста в поле Memo1 используется его свойство Lines, а для него ещё и метод Add.

Для очистки поля Edit1 после добавления текста в многострочное поле используется пустое значение. И в

каждом случае перед именем компонента необходимо указать имя его родительского контейнера Frame31.


1   2   3   4   5   6   7   8   9   ...   12


написать администратору сайта