Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Создание простейшего калькулятора
Цель: Изучение структуры CASE и особенностей работы с математическими функциями. Преобразование типов и обработка исключительных ситуаций. Краткие теоретические сведения. Математические функции языка Object Pascal
Так как функции тангенса и котангенса в языке 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. Расположим их на форме следующим образом.
Размеры панелей и кнопок могут быть произвольными, в данном примере были использованы следующие параметры:
Очистим свойство 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; · для нахождения факториала числа. Результатом выполнения данной лабораторной работы являются созданный согласно заданию программный продукт. Выполненное задание должно быть предъявлено преподавателю в электронном виде. В ходе защиты лабораторной работы студент должен продемонстрировать свои навыки работы с изученными компонентами и методами проектирования интерфейса пользователя.
|