Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Создание простейшего калькулятора





 

Цель: Изучение структуры 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;

· для нахождения факториала числа.

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

 


Date: 2015-12-12; view: 342; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию