Сэкономьте время пользователей — дайте посетителям сайта калькулятор, и пусть посчитают сами!
МОЖНО СДЕЛАТЬ
ИСПОЛЬЗУЕТСЯ В:
Ucalc.pro — простой сервис, в котором вы сможете создать интерактивный калькулятор для сайта, даже если не умеете программировать. Достаточно вспомнить школьный курс арифметики, добавить немного логики и представить, чего хочет пользователь — калькулятор готов!
Он подходит и для простых калькуляторов, когда нужно суммировать все значения, и для более сложных, где много различных условий и комбинаций. Вариантов оформления немного, но можно выбрать тот, что впишется по стилю на ваш сайт. А еще этот калькулятор может вообще ничего не считать, а стать формой обратной связи.
Сервис работает по платной подписке, но у него есть бесплатный тестовый период — в течение двух недель вы можете создать три проекта.
Что будем считать?
Заходим на главную страницу Ucalc.pro. В правом верхнем углу находятся кнопки регистрации и выбора языка. Можно создать аккаунт с нуля или войти через соцсети.
Уроки C# / Как сделать первое Windows приложение
После того, как вы вошли в аккаунт, попадаете на страницу «Мои проекты». Там отображаются ранее созданные вами калькуляторы, если вы уже пользовались сервисом. Нажимаем круглую кнопку зеленого цвета со знаком «+». Система предложит собрать проект с нуля, либо использовать уже готовый шаблон.
Если у вас стандартная задача, можете сразу перейти к шаблонам — разработчики добавили стандартные решения на все случаи жизни. Каждый шаблон можно сначала посмотреть, он будет работать как готовый калькулятор. Если вы уверены в выборе, сразу переходите к редактированию, нажав кнопку «Выбрать».
Как создать программу для вычисления
В стандартной поставке Delphi и Lazarus есть встроенные математические функции унаследованные из языка Паскаль:
Функция Pascal | Математическая функция |
sqr(x) | Квадрат числа х |
sqrt(x) | Квадратный корень из числа х |
abs(x) | Модуль числа х |
trunc(x) | Целая часть числа х |
frac(x) | Дробная часть числа х |
x div y | Целочисленное деление x на y. Дробная часть числа отбрасывается. Например: 25 div 10 = 2 |
x mod y | Получение дробной части при делении х на y. Например: 25 mod 10 = 5 |
exp(x) | Число е (2,718282) в степени х |
ln(x) | Логарифм натуральный числа х |
round(x) | Округление числа х до ближайшего целого |
inc(x,y) | Инкремент — увеличение х на величину у. Если у не указано, то х увеличивается на 1 |
dec(x,y) | Декремент — уменьшение х на величину у. Если у не указано, то х уменьшается на 1 |
randomize | Включение генератора случайных чисел |
random(a) | Получение случайного числа в диапазоне от 0 до а (а — целое число) |
sin(x) | Синус аргумента х (аргумент в радианах) |
cos(x) | Косинус аргумента х (аргумент в радианах) |
arcTan(X) | Арктангенс аргумента х (аргумент в радианах) |
Функции модуля Math
В списке встроенных функций явно не хватает таких функций как: возведение числа в произвольную степень; извлечение произвольного корня из числа; обратные тригонометрические функции и так далее.
Для расширения математических возможностей программ есть подключаемый модуль Math. Перед началом работы следует подключить этот модуль в разделе Uses.
Модуль Math содержит следующие математические функции:
Функция | Описание |
ArcSin(X) | арксинус аргумента X (-1 : 1) (Возвращает значение в радианах) |
ArcCos(X) | арккосинус аргумента X (-1 : 1) (Возвращает значение в радианах) |
Tan(X) | тангенс аргумента (угол X в радианах) |
Cotan(X) | котангенс угла (угол X в радианах) |
Log10(X) | вычисление десятичного логарифма |
Log2(X) | вычисление двоичного логарифма числа X |
LogN(y,x) | вычисление логарифма числа x по основанию y |
Max(a,b) | возвращает максимальное число из двух чисел |
Min(a,b) | возвращает минимальное число из двух чисел |
Power (X, N) | возведение числа X в произвольную степень N |
Hypot(X,Y) | вычисление гипотенузы по длине катетов |
RadToDeg(X) | Преобразование радиан в градусы |
DegToRad(X) | Преобразование градусов в радианы |
Floor | Округление в меньшую сторону |
Ceil | Округление в большую сторону |
Имея такой богатый набор функций можно создать серьёзный инженерный калькулятор.
Интерфейс инженерного калькулятора
Разработаем калькулятор в среде разработки Lazarus (В среде Delphi интерфейс и коды программы будут аналогичными).
Сначала расставим элементы интерфейса, так как показано на рисунке:
В заголовке окна (Caption) следует написать «Инженерный калькулятор» и для окна настроить шрифт (Font), так что бы он хорошо отображался и на дочерних объектах. Например: Arial, 12 pt, Bold (жирный).
Заголовкам объектов следует присвоить надписи, как показано на рисунке:
Рассмотрим функциональное назначение элементов интерфейса:
Label1 (?) — будет отображать знак операции или название функции;
Label2 (z) — будет отображать результат вычислений;
Edit1, Edit2 — предназначены для ввода аргументов вычислений;
Button1 (=) — вычисление;
Button2 (+) — ввод знака сложения;
Button3 (-) — ввод знака вычитания;
Button4 (/) — ввод знака деления;
Button5 (*) — ввод знака умножения;
Button6 (Sin) — ввод функции Sin;
Button7 (Cos) — ввод функции Cos;
Button8 (Power) — ввод функции возведения числа x в степень n;
Button7 (Sq) — ввод функции извлечения корня n из числа x;
В объектном паскале аргумент тригонометрических функций принято задавать в радианах. Для переключения между градусами и радианами поставим на форме группирующую панель (GroupBox1) и переключатели (RadioButton1, RadioButton2):
Для RadioButton1 в свойстве Checked следует установить значение True. Затем, у GroupBox1 удалить заголовок Caption, а у объектов RadioButton1и RadioButton2 сделать заголовки как показано на рисунке:
Для работы с калькулятором потребуется ещё одна кнопка «Сброс» (Button10), которая будет очищать поля ввода. Поставим её в любом удобном месте, например как показано на рисунке:
Реализация калькулятора
Сначала следует подключить в разделе uses модуль Math:
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
Для идентификации нажатых кнопок арифметических знаков и функций нужна будет индексная переменная, назовём её, например Ind и поместим в разделе глобальных переменных:
var
Form1: TForm1;
Ind: Integer;
Начнём программирование с создания события (двойным щелчком) для кнопки «Сброс»:
//Кнопка сброс
procedure TForm1.Button10Click(Sender: TObject);
begin
Ind:= 0;
Label1.caption:= »;
Label2.caption:= »;
Edit1.Clear;
Edit1.SetFocus;
Edit2.Clear;
Edit2.Enabled:= false;
end;
В этой процедуре мы написали Edit2.Enabled:= false; — заблокировали редактор Edit2. Это нужно для того, чтобы пользователь не мог ввести туда данные, если вычисляет функции с одним аргументом. При арифметических вычислениях и функциях с двумя аргументами мы будем разблокировать этот редактор.
Запустим программу на исполнение (F9), нажмём кнопку «Сброс» и убедимся, что все поля очищаются.
Закроем программу и сделаем ещё дополнительные настройки для кнопок. Для этого выделим, например кнопку «Sq(xn)» и в свойствах в поле ShowHint поставим значение True. Затем, в поле Hint (подсказка) напишем: Корень n из числа x.
Запустим программу и убедимся что на этой кнопке появляется подсказка при наведении курсора мыши.
Аналогичным образом следует сделать подсказки на остальные кнопки. Мы видим, что подсказка появляется и буквально через секунду исчезает. Для удобного пользования подсказками увеличим выдержку подсказки, например до 5 секунд. Для этого, выделим окно форму и двойным щелчком создадим событие FormCreate:
//Создание формы
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HintHidePause := 5000;
end;
В строке Application.HintHidePause := 5000 мы задаём время выдержки до закрытия подсказки 5 секунд (аргумент 5000 в миллисекундах).
Произведя все предварительные настройки, будем создавать код калькулятора. Выделим кнопку «+» (Button2) и двойным щелчком создадим событие:
// Кнопка +
rocedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:= ‘+’;
Ind:= 1; //Индекс этой кнопки равен 1
Edit2.Enabled:= true; //Разблокируем редактор для ввода 2-го аргумента
end;
Аналогичным способом создадим события для кнопок — / * присваивая переменной Ind соответствующие значения — 2, 3, 4.
//Кнопка —
procedure TForm1.Button3Click(Sender: TObject);
begin
Label1.Caption:= ‘-‘;
Ind:= 2; //Индекс этой кнопки равен 2
Edit2.Enabled:= true;
end;
//Кнопка /
procedure TForm1.Button4Click(Sender: TObject);
begin
Label1.Caption:= ‘/’;
Ind:= 3; //Индекс этой кнопки равен 3
Edit2.Enabled:= true;
end;
//Кнопка *
procedure TForm1.Button5Click(Sender: TObject);
begin
Label1.Caption:= ‘*’;
Ind:= 4; //Индекс этой кнопки равен 4
Edit2.Enabled:= true;
end;
Далее, создадим событие на вычисление результата математических операций. Сначала напишем код для вычисления арифметических операций, проверим работоспособность программы, а затем, допишем строки для вычисления различных функций. Двойным щелчком на Button1 создадим событие и впишем строки:
procedure TForm1.Button1Click(Sender: TObject);
//Объявляем локальные переменные
var
x,y,z: real;
begin
//Проверяем ввод первого аргумента и преобразуем текст в число
if Edit1.Text <> » then x:= StrToFloat(Edit1.Text) else exit;
// Проверяем ввод второго аргумента и преобразуем текст в число
if Edit2.enabled = true then
begin
if Edit2.Text <> » then y:= StrToFloat(Edit2.Text) else exit;
end;
//Выбираем по индексу знак операции и производим вычисления
case Ind of
1: z:= x + y;
2: z:= x — y;
3: z:= x / y;
4: z:= x * y;
end;
//Выводим результат на Label2
Label2.Caption:= FloatToStr(z);
end;
Проверим, как работает программа, пока только арифметических вычислений:
Далее, будем создавать события на вычисление тригонометрических и математических функций.
Создадим двойным щелчком событие для кнопки вычисления синуса (Sin, Button6):
// Sin
procedure TForm1.Button6Click(Sender: TObject);
begin
Label1.Caption:= ‘Sin’;
Ind:= 5; //Индекс этой кнопки равен 5
Edit2.Enabled:= false; //Делаем недоступным ввод второго аргумента
end;
И допишем в процедуре вычисления, в разделе case (выделено жирным) строки вычисления синуса:
procedure TForm1.Button1Click(Sender: TObject);
var
x,y,z: real;
begin
if Edit1.Text <> » then x:= StrToFloat(Edit1.Text) else exit;
if Edit2.enabled = true then
begin
if Edit2.Text <> » then y:= StrToFloat(Edit2.Text) else exit;
end;
z:= 0;
case Ind of
1: z:= x + y;
2: z:= x — y;
3: z:= x / y;
4: z:= x * y;
5: begin
//Проверяем вводимый аргумент градусы или радианы
if RadioButton1.checked = true then x:= DegToRad(x);
z:= sin(x);
end;
end;
Label2.Caption:= FloatToStr(z);
end;
Запустим программу и убедимся, что синус вычисляется корректно:
Такую же процедуру создадим для кнопки косинус (Cos, Button7):
//Cos
procedure TForm1.Button7Click(Sender: TObject);
begin
Label1.Caption:= ‘Cos’;
Ind:= 6; //Индекс этой кнопки равен 6
Edit2.Enabled:= false;
end;
В процедуру вычисления (=), в разделе case добавим строки:
6: begin
if RadioButton1.checked = true then x:= DegToRad(x);
z:= cos(x);
end;
И так, мы сделали вычисление функций с одним аргументом. Далее, разработаем алгоритм вычисления для функций с двумя аргументами. Выделим кнопку возведения в степень (Power, Button8) и двойным щелчком создадим событие:
// Power
procedure TForm1.Button8Click(Sender: TObject);
begin
Label1.Caption:= ‘Power’;
Ind:= 7; //Индекс этой кнопки равен 7
Edit2.Enabled:= true; //Включаем второй редактор
end;
Дописываем в процедуре (=) в разделе Case следующую строку:
Запускаем калькулятор, и убеждаемся, что возведение в степень работает исправно:
Аналогичным образом напишем процедуру для кнопки извлечения корня (Sq, Button9):
// Sq(x,n)
procedure TForm1.Button9Click(Sender: TObject);
begin
Label1.Caption:= ‘Sq’;
Ind:= 8; //Индекс этой кнопки равен 8
Edit2.Enabled:= true; //Включаем второй редактор
end;
И дописываем в раздел Case процедуры (=) следующую строку:
8: z:= power(x,1/y);
Запускаем калькулятор, и убеждаемся, что извлечение корня работает исправно:
Источник: hi-intel.ru
Как создать программу для вычисления
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Полный синтаксис (нажмите, чтобы раскрыть)
Число
Описание:
Числовым типом может быть представлено любое десятичное число. Над данными числового типа определены основные арифметические операции: сложение, вычитание, умножение и деление. Максимально допустимая разрядность числа 38 знаков.
Литералы:
Набор цифр, написанных непосредственно в тексте модуля вида: [+|-]<0|1|2|3|4|5|6|7|8|9>[.<0|1|2|3|4|5|6|7|8|9>] В качестве разделителя целой и дробной части используется «.» (точка).
Оглавление (нажмите, чтобы раскрыть)
- Как округлить число
- Как получить целую часть числа
- Как возвести число в степень
- Как вычислить остаток от деления
- Как извлечь квадратный корень из числа
- Как вычислить максимальное из нескольких значений
- Как вычислить минимальное из нескольких значений
- Как вычислить выражение из строки
- Тригонометрия
- Как вывести число без пробелов
- Скачать и выполнить эти примеры на компьютере
5Сообщить(Окр(321.123, 1)); // 321.1 // до первого знака после запятой // случай когда (N + 1) знак >= 5 Сообщить(Окр(321.163, 1)); // 321.2 // особый случай: // если при округлении до N-го знака // (N + 1)-й знак равен 5, а все последующие // знаки равны нулю, то результат округления // будет зависеть от третьего параметра функции Окр Сообщить(Окр(100.350, 1, РежимОкругления.Окр15как10)); // вернёт 100.3 Сообщить(Окр(100.350, 1, РежимОкругления.Окр15как20)); // вернёт 100.4 // по умолчанию значение третьего параметра // равно РежимОкругления.Окр15как20 (округление в большую сторону) /// Как получить целую часть числа в 1с 8.3, 8.2 Сообщить(Цел(12.654)); // 12 /// Как возвести число в степень в 1с 8.3, 8.2 Сообщить(Pow(10, 3)); // 10^3 = 1000 /// Как вычислить остаток от деления в 1с 8.3, 8.2 Сообщить(5 % 3); // 2 /// Как извлечь квадратный корень из числа в 1с 8.3, 8.2 Сообщить(Sqrt(25)); // 5 /// Как вычислить максимальное из нескольких значений в 1с 8.3, 8.2 Сообщить(Макс(1, 2, 3)); // 3 Сообщить(Макс(«aaa», «bbb», «ccc»)); // ccc Сообщить(Макс(ТекущаяДата(), ДобавитьМесяц(ТекущаяДата(), 1))); Сообщить(Макс(Истина, Ложь)); // Истина /// Как вычислить минимальное из нескольких значений в 1с 8.3, 8.2 Сообщить(Мин(1, 2, 3)); // 1 Сообщить(Мин(«aaa», «bbb», «ccc»)); // aaa Сообщить(Мин(ТекущаяДата(), ДобавитьМесяц(ТекущаяДата(), 1))); Сообщить(Мин(Истина, Ложь)); // Ложь /// Как вычислить выражение из строки в 1с 8.3, 8.2 Сообщить(Вычислить(«1+2»)); // 3 Сообщить(Вычислить(«ИСТИНА И ЛОЖЬ»)); // Нет Сообщить(Вычислить(«Sin(3.14)»)); // ~0 Сообщить(Вычислить(«Pow(Sin(3.14), 2) + Pow(Cos(3.14), 2)»)); // ~1 /// Тригонометрия в 1с 8.3, 8.2 // углы выражаются в радианах Пи = 3.14; E = 2.718; // Число Эйлера http://ru.wikipedia.org/wiki/E_(число) Сообщить(Cos(Пи / 2)); // ~0 Сообщить(ACos(0)); // ~1,57 Сообщить(Sin(Пи / 2)); // ~1 Сообщить(ASin(1)); // ~1,57 Сообщить(Sin(Пи / 2) * Sin(Пи / 2) + Cos(Пи / 2) * Cos(Пи / 2)); // ~1 Сообщить(Sin(Пи / 3) / Cos(Пи / 3)); // 1.73 Сообщить(Tan(Пи / 3)); // 1.73 Сообщить(Tan(ATan(1.73))); // 1.73 // экспонента — возведение числа эйлера в степень X // http://ru.wikipedia.org/wiki/Экспонента Сообщить(Pow(E, 2)); // 7,389 Сообщить(Exp(2)); // 7,389 // натуральный логарифм — степень в которую надо // возвести число эйлера e, чтобы получить X // http://ru.wikipedia.org/wiki/Натуральный_логарифм Сообщить(Log(9)); // 2,197 Сообщить(Pow(E, 2.197)); // ~9 // десятичный логарифм — степень в которую надо // возвести число 10, чтобы получить X // http://ru.wikipedia.org/wiki/Десятичный_логарифм Сообщить(Log10(1000)); // 3 Сообщить(Pow(10, 3)); // 1000 /// Как вывести число без пробелов в 1с 8.3, 8.2 Сообщить(Формат(1000000, «ЧГ=0»)); // 1000000 КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
Математика в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Источник: helpme1s.ru