- •Лабораторная работа №3. Тема: Создание простейшего приложения «Светофор» Цель: Изучение компонентов Button, Shape, Bevel, Edit, Label.
- •В обработчике события OnClick для кнопки Button1 напишем код:
- •Создание игры «Поймай кнопку» Цель: Изучение особенностей компонента Timer.
- •Тема: Создание логической игры Цель: Изучение возможностей использования свойства Tag и объекта Sender.
- •Генератор функций Цель: Изучение компонента PaintBox и методов рисования на канве. Компонент TrackBar
- •2. Сделайте так, чтобы в неинвертированном режиме синусоида изображалась красным цветом, а косинусоида – синим.
- •Создание простейшего калькулятора Цель: Изучение структуры case и особенностей работы с математическими функциями. Преобразование типов и обработка исключительных ситуаций.
- •Создание элементов интерфейса простейшего графического редактора Цель: Изучение компонентов ColorGrid, SpinEdit, RadioGroup, ListBox, ColorDialog.
- •Часть 1.
- •Часть 2.
- •Увеличить фигуру
- •Электронная записная книжка Цель: Изучение компонентов многостраничных панелей TabControl и PageControl.
- •Текстовый редактор Цель: Изучение компонентов Panel, Memo, OpenDialog, SaveDialog, MainMenu, PopupMenu, SpeedButton
- •Создание простейшего графического редактора
- •События мыши
2. Сделайте так, чтобы в неинвертированном режиме синусоида изображалась красным цветом, а косинусоида – синим.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
Создание простейшего калькулятора Цель: Изучение структуры case и особенностей работы с математическими функциями. Преобразование типов и обработка исключительных ситуаций.
Краткие теоретические сведения.
Математические функции языка Object Pascal
abs(x) |
Модуль аргумента - |
arctan(x) |
Арктангенс аргумента (угол в радианах) |
sin(x) |
Синус |
cos(x) |
Косинус |
exp(x) |
Экспонента - |
sqr(x) |
Квадрат аргумента - |
sqrt(x) |
Корень квадратный аргумента - |
ln(x) |
Логарифм натуральный |
frac(x) |
Дробная часть числа |
int(x) |
Целая часть числа |
trunc(x) |
Отбрасывает дробную часть числа |
round(x) |
Округляет x до ближайшего целого значения |
pi |
p=3.141592653… |
random(x) |
Псевдослучайное число, расположенное в диапазоне 0…(х-1) |
Так как функции тангенса и котангенса в языке Pascal отсутствуют, они выражаются через значения синуса и косинуса:
Десятичный логарифм можно выразить следующим способом –
В языке Pascal нет возведения в степень. Возведение в степень для положительных значений можно выполнить с помощью следующих соотношений:
Примеры выражений:
В Object Pascal это выражение будет выглядеть так:
0.3*exp(5*ln((sqr(sin(x))-sqr(cos(x)))/exp(x))
x*sqrt(abs(cos(x)-1))/sqrt(exp(3*ln(abs(x))))
При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. FloatToStr и IntToStr преобразуют соответственно вещественные и целочисленные переменные в строковые. Функция StrToFloat предназначена для преобразование строки в значение с плавающей запятой, и StrToInt — преобразование строки в целое значение.
Для реакции на конкретный тип исключительной ситуации применяется блок try..except. В простейшем виде синтаксис его следующий:
try <0ператоры, которые могут вызвать исключительную ситуацию>
except
< Операторы >;
end;
Выполнение блока начинается с секции try. При отсутствии исключительных ситуаций только она и выполняется. Секция except получает управление в случае если они возникли. Например
try
I := 5 /0;
except
showmessage(‘Делить на ноль нельзя!’);
end;
Ход работы
1. Разместим на форме 2 компонента Panel, 16 компонентов Button и окошко редактирования Edit. Расположим их на форме следующим образом.
Размеры панелей и кнопок могут быть произвольными, в данном примере были использованы следующие параметры:
Panel1 |
Panel2 |
Button… |
Width-180 |
Width-70 |
Width-50 |
Height - 235 |
Height - 235 |
Height – 50 |
Очистим свойство Text компонента Edit1, а свойствам Caption компонентов зададим соответствующие значения.
2. Итак, приступим к коду. Добавим в наш код 4 глобальных переменных.
var
Form1: TForm1;
i,p,r:real;
//они будут сохранять числа введенные пользователем (i- значение первого введенного числа, р – второго, r – полученный результат)
mode:integer;
//режим калькулятора (умножить, разделить и т.д)
Переменная mode будет содержать числовое значение действия: 1 – прибавление, 2 – вычитание, 3 – деление, 4 – умножение.
3. Теперь приступим к нашим кнопкам. В каждой цифровой кнопке обработаем событие OnClick. Код будет идентичен для всех цифровых кнопок (от 1 до 10-й). Приведем пример кода для первой кнопки (цифра 1):
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'1';// для всех остальных кнопок заменяйте 1 на нужное вам число
end;
Далее пишем обработчики OnClick для кнопок операций.
Для кнопки «+»:
procedure TForm1.ButtonPlusClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=1;
Edit1.Text:=''; //это две одинарные кавычки
end;
Для кнопки «-»
procedure TForm1.ButtonMinusClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=2;
Edit1.Text:='';
end;
Для кнопки «*»
procedure TForm1.ButtonMultiplyClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=3;
Edit1.Text:='';
end;
Для кнопки «/»
procedure TForm1.ButtonDIVClick(Sender: TObject);
begin
i:=StrToFloat(Edit1.Text);
mode:=4;
Edit1.Text:='';
end;
Кратко поясним, что мы сделали. При нажатии на кнопку мы сохраняем значения введенного числа в переменной I, затем переменной mode присваиваем значения действия. Теперь у нас есть все необходимые данные для обработки события OnClick для кнопки "=".
procedure TForm1.ButtonRezultClick(Sender: TObject);
begin
case mode of
1:begin
p:=StrToFloat(Edit1.Text);
r:=i+p;
Edit1.Text:=FloatToStr(r);
end;
2:begin
p:=StrToFloat(Edit1.Text);
r:=i-p;
Edit1.Text:=FloatToStr(r);
end;
3:begin
p:=StrToFloat(Edit1.Text);
r:=i*p;
Edit1.Text:=FloatToStr(r);
end;
4:begin
p:=StrToFloat(Edit1.Text);
r:=i/p;
Edit1.Text:=FloatToStr(r);
end;
end;
end;
Создадим обработчик для кнопки С (Сброс):
procedure TForm1.ButtonResetClick(Sender: TObject);
begin
edit1.Text:='';
r:=0; i:=0; p:=0;
end;
Чтобы при появлении окна калькулятора фокус был передан окну ввода напишем обработчик OnShow для Form1.
procedure TForm1.FormShow(Sender: TObject);
begin
edit1.SetFocus;
end;
Аналогичным образом, сделаем так, чтобы при нажатии кнопок «=» и «С», а также кнопок математических операций, фокус передавался окну ввода.
Выполнить самостоятельно
(создание простенького калькулятора):
1. Настроить параметры формы таким образом, чтобы размеры окна нельзя было изменить и кнопка «Развернуть /Maximize/» отсутствовала.
2. Добавить кнопку «,» для ввода разделителя между целой и дробной частью числа. Для этого в обработчик OnClick кнопки добавим:
if pos(',',edit1.Text)<>0 then exit // если символ «,» в строке уже имеется
else edit1.Text:=edit1.Text+','
3. Добавить кнопку «+/-» для изменения знака числа на противоположный.
procedure TForm1.BitBtn2Click(Sender: TObject);
var s:string;
begin
s:=Edit1.Text;
if s[1]='-' then delete(s,1,1) else
insert('-',s,1);
edit1.Text:=s;
end;
4. Запретить ввод с клавиатуры в текстовое окно любых символов кроме цифровых и «-» (минус), «,» (запятая) – смотрим в конспект лекций.
5. Создать кнопки для следующих математических операций:
· возведение в степень r:=exp(p*ln(i));
· целочисленное деление (div) и остаток от деления (mod)– для преобразования типов использовать функцию round;
· возведение в квадрат (sqr);
· извлечение квадратного корня (sqrt);
· вычисления натурального и десятичного логарифма;
· вычисления sin-са, cos-са и tg-са аргумента;
· вычисления экспоненты (e^x);
· для вычисления 1/x;
· ввода числа p;
· для нахождения факториала числа.
Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.