WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИИ Томский политехнический университет _ УТВЕРЖДАЮ Декан АВТФ Мельников Ю.С.

“” 2002 г.

ПРОЕКТИРОВАНИЕ КАЛЬКУЛЯТОРА В СРЕДЕ DELPHI Методические указания к лабораторной работе № 131 по курсу “Программирование и основы алгоритмизации” для студентов направления 550200 “Автоматизация и управление” Томск - 2002 УДК 681.3 Проектирование калькулятора в среде Delphi. Методические указания к лабораторной работе № 131 по курсу “Программирование и основы алгоритмизации ” для студентов направления 550200 “Автоматизация и управление”.

Составитель Н.М. Семёнов Рецензент к.т.н., доцент Е.И. Громаков Методические указания рассмотрены и рекомендованы методическим семинаром кафедры робототехнических систем “_” _ 2002 г.

Зав. кафедрой А.М. Малышенко ОГЛАВЛЕНИЕ 1 Создание калькулятора.................................................................. 4 1.1 Визуальное проектирование калькулятора......................... 4 1.2 Ввод кода для калькулятора............................................... 8 1.2.1 Поддержка сложения............................................. 8 1.2.2 Поддержка вычитания и умножения................... 10 1.2.3 Поддержка деления................................................10 2 Усовершенствование калькулятора................................................ 11 3 Запуск программы калькулятора со свободным вводом.............. 13 4 Контрольные вопросы................................................................... 13 5 Дополнительные задания................................................................ 14 6 Литература........................................................................................ 14 Проектирование калькулятора в среде Delphi Настоящая лабораторная работа ставит целью закрепление у студентов навыков использования арифметических операторов в языке Object Pascal а также закрепление умений для создания типичных Delphi - приложений.

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

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

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

Для начала выполните следующие действия:

1) Создайте новый каталог, где Вы сохраните файл проекта. Назовите его, например, CALC.

2) Начните новый проект, выбирая «Файл/ Создать/ Приложение» из главного окна Delphi.

3) Сохраните новый проект в созданном каталоге под именем FCALC.DPR, а модуль, поддерживающий основную форму приложения (Unit1 по умолчанию) назовите FCALC1.PAS.

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

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

1) Измените свойство BorderStyle на bsSingle.

2) Измените свойство Caption на заголовок Free-form-Calculator.

3) Из страницы Standard Палитры компонентов выберите компонент Edit и расположите его на форме. Компонент будет назван Edit1 самой Delphi.

4) Переименуйте Edit1 на EditOperand1.

Рис.1. Калькулятор со свободным вводом.

5) Повторите предыдущие два шага, помещая на форме под первым компонентом с именем EditOperand1 два дополнительных компонента Edit. Назовите два новых окна редактирования EditOperand2 и EditResult соответственно.

6) Выберите все три компонента Edit вместе, нажав клавишу Shift и нажимая каждое из трёх окон редактирования последовательно. Выбор нескольких компонентов будет отображён Delphi рядом маленьких серых прямоугольников, расположенных на каждом из выбранных компонентов.

7) После выбора трёх окон редактирования перейдите в правый столбец атрибутов текста внутри Инспектора объекта и очистите его содержимое.

Все три выбранных окна редактирования, таким образом, становятся пустыми.

Щёлкните в пустое место формы, а затем снова выделите три окна редактирования.

8) Выберите «Выровнять...» из основного меню «Правка» среды Delphi.

Диалоговое окно «Выравнивание» теперь открыто.

9) Пометьте радиокнопку «По левому краю» внутри группы «По горизонтали», чтобы левые стороны окон редактирования были выровнены горизонтально. Нажмите кнопку ОК, чтобы закрыть диалоговое окно.

10) Выберите окно редактирования EditResult на форме и в Инспекторе объекта измените свойство ReadOnly окна на True.

В итоге пользователь не сможет подправить (случайно или умышленно) данные, полученные в окне результата.



11) Измените цвет текста, который будет отображаться внутри поля EditResult, настроив свойство Font, как описано в следующих шагах.

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

12) Чтобы изменить цвет текста, дважды нажмите с правой стороны свойства Font окна EditResult внутри Инспектора объекта. Вы можете также нажать кнопку, следующую за значением шрифта, которая появляется при его выборе.

Появляется стандартное диалоговое окно Windows Font, что позволяет Вам изменить и другие атрибуты шрифта.

13) Теперь выберите, например, Red из раскрывшегося списка цветов в нижнем левом углу диалогового окна, и закройте диалоговое окно нажатием кнопки ОК.

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

14) Нажмите на компонент BitBtn на странице Additional Палитры компонентов, и поместите его на форме.

15) Измените свойство Kind компонента BitBtn1 на bkClose.

16) Переименуйте компонент BitBtn1 в BitBtnClose.

Изменив свойство Kind компонента BitBtnClose на bkClose, Вы гарантируете, что действие кнопки после нажатия пользователем приводит к закрытию всей формы.

Это действие кнопки Close задано по умолчанию, т.е. не надо писать программу, чтобы это обеспечить.

Теперь поместим в форму ряд кнопок, каждую для одной функции калькулятора.

17) На странице Additional Палитры компонентов нажмите изображение компонента SpeedButton, удерживая клавишу Shift.

Изображение компонента SpeedButton будет выбрано в “постоянном режиме”, позволяя поместить несколько компонентов того же самого вида без нажатия каждый раз на изображение компонента из палитры. Кнопка изображения компонента будет выглядеть не только нажатой, но также вокруг изображения возникнет прямоугольник, состоящий из точек, указывающий на постоянный режим работы (режим залипания).

18) Теперь можно двигаться дальше и поместить на панели семь копий компонента SpeedButton (быстрая кнопка) одну за другой, нажимая приблизительно там, где Вы хотите их расположить.

Быстрые кнопки, которые Вы только что разместили на панели, Delphi назовет SpeedButton1,..., SpeedButton7.

19) Нажмите крайнюю левую кнопку на Палитре компонентов с изображением стрелки, похожей на стандартный курсор мыши, чтобы вернуться к нормальному режиму работы, в котором курсор мыши выбирает компоненты на форме, а не размещает копии SpeedButton.

Быстрые кнопки, которые Вы разместили на панели, могут отображать произвольные рисунки, называемые растровыми матрицами (bitmap - отсюда расширение *.bmp). Начертание (Glyph) - растровое изображение, или картинка, отображенная внутри быстрой кнопки, или некоторого другого компонента, определяющая, как он выглядит визуально.

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

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

20) Выберите верхнюю левую кнопку SpeedButton1 в группе быстрых кнопок, которые размещены на панели.

21) Измените атрибут заголовка SpeedButton1 на знак “плюс” (+), а свойство Name на BtnAdd.

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

Обратитесь снова к рис.1, чтобы видеть, какие операции должен поддерживать Ваш калькулятор.

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

Таблица 1. Функциональные клавиши калькулятора.

_ Символ для быстрой кнопки Имя кнопки Функция _ + BtnAdd Сложение - BtnSubtract Вычитание * BtnMultiply Умножение / BtnDivide Деление с вещ. рез.

mod BtnMod Остаток div BtnDiv Целочисленное дел.

Clear BtnClear Очистить поля ввода _ _ 23) Из страницы Standard Палитры компонентов выберите компонент Label (метка) и разместите две метки на панели перед окнами редактирования - EditOperandи EditResult соответственно.

24) Переименуйте метку перед EditOperand2 из Label1 в LabelOperator и измените свойство Caption на - одинарный вопросительный знак.

25) Переименуйте метку перед окном EditResult из Label2 в LabelResult и измените свойство Caption на вопросительный знак.

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

26) Поместите компонент Bevel из страницы Additional Палитры компонентов на форме для отделения результатов вычисления операндов.

27) Измените свойство Style компонента Bevel1 на bsRaised. Вам может также понадобиться скорректировать свойство Height так, чтобы результат был хорошо виден на экране. Значение свойства, равное 5, например, будет приемлемо.

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





1.2 Ввод кода для калькулятора Если теперь попытаться выполнить программу калькулятора, она должна компилироваться и выполняться успешно, но она не будет ничего делать. Нет никаких действий, связанных с нажатием кнопок калькулятора, кроме кнопки Close, которая по определению закрывает панель.

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

1.2.1 Поддержка сложения Для обеспечения выполнения операции сложения надо выполнить следующие действия:

Нажмите дважды кнопку BtnAdd в окне Дизайнера форм.

В ответ на это Delphi создаст заданный по умолчанию обработчик события для этой кнопки. Курсор будет помещён в строку между ключевыми словами Паскаля begin и end в сгенерированном блоке программы:

procedure Tform1.BtnAddClick (Sender: TObject);

begin end;

Пространство между begin и end - это поле Вашего собственного кода, который Вы вводите для отклика на событие, в данном случае - нажатие кнопки.

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

- StrToInt преобразует параметр типа String в числовой эквивалент; например, StrToInt (‘123’) берёт строку ‘123’ и возвращает число 123, назначая ему тип LongInt, совместимый с Integer.

- IntToStr берёт числовое целое значение в качестве параметра и возвращает символьное представление числа, например, IntToStr (789), принимающее целочисленную константу 789 в качестве аргумента, возвращает строку со значением ‘789’.

- FloatToStr преобразует число с плавающей запятой в символьное представление; например, FloatToStr (2.10) возвращает строку ‘2.10000000000’.

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

StrToInt(EditOperand1.Text) Теперь заполним обработчик события BtnAddClick текстом программы.

Вставьте следующий код между begin и end обработчика события BtnAddClick:

Op1:=StrToInt(EditOperand1.Text);

Op2:=StrToInt(EditOperand2.Text);

Result:=Op1+Op2;

ResultStr:=IntToStr(Result);

EditResult.Text:=ResultStr;

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

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

1: procedure TForm1.BtnAddClick(Sender: TObject);

2: var 3: Op1, 4: Op2, 5: Result:Integer;

6: ResultStr:String;

7: begin 8: Op1:=StrToInt(EditOperand1.Text);

9: Op2:=StrToInt(EditOperand2.Text);

10: Result:=Op1+Op2;

11: ResultStr:=IntToStr(Result);

12: EditResult.Text:=ResultStr;

13: end;

Строки со 2-ой по 6-ю подпрограммы BtnAddClick формы TForm1 объявляют временные переменные для преобразований между числовыми и строковыми представлениями.

8-я строка преобразует строковое значение первого операнда в числовое и сохраняет результат в целой переменной Op1.

Аналогично 9-я строка преобразует строковое значение второго операнда и сохраняет результат в целой переменной Op2.

В 10 - й строке выполняется фактическое вычисление суммы.

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

Наконец, 12-я строка заставляет окно редактирования Result отображать строковое представление суммы двух операндов, присваивая значение ResultStr свойству Text компонента EditResult.

1.2.2 Поддержка вычитания и умножения Обработчик события - нажатия кнопки минуса - очень похож на тот, что Вы разработали для кнопки плюса. Единственное отличие - арифметическая операция:

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

Дважды нажмите на BtnSubtract в окне дизайнера формы.

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

procedure TForm1.BtnSubtractClick(Sender: TObject);

begin end;

Как и прежде, введите текст подпрограммы BtnSubtractClick следующим образом (но без промежуточных переменных):

procedure TForm1.BtnSubtractClick(Sender: TObject);

begin EditResult.Text:= IntToStr(StrToInt(EditOperand1.Text)- StrToInt(EditOperand2.Text));

end;

Аналогично введите текст для обработчика события BtnMultiplyClick.

1.2.3 Поддержка деления Предполагается, что Ваш калькулятор поддерживает два вида деления:

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

Программа для целочисленного деления повторяет шаги, которые Вы делали при поддержке сложения, вычитания и умножения. Только здесь используется операция целочисленного деления div.

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

procedure TForm1.BtnModClick(Sender: TObject);

Pages:     || 2 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.