Как написать простую программу для расчетов

Функции — это ключевой класс объектов в языке R. Они используются почти на каждом этапе анализа данных, начиная от загрузки таблицы в R и показа описательной статистики, заканчивая функциями для решения узконаправленных задач. Особое место занимают функции «собственного производства»: без них сложно обойтись, но их отнюдь не сложно создать. Именно о том, что такое функции, как их использовать и написать самим, я расскажу в этой статье!

Для чего нужны функции в R?

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

Зачастую во время анализа приходится выполнять одни и те же действия несколько раз, то есть, писать один и тот же код, где лишь незначительная его часть изменена. Однако гораздо практичнее будет оформить подобные массивы кода в функцию. В этом случае блок кода, копируемый из раза в раз, будет телом функции, а места кода, которые Вы изменяете в этом блоке станут аргументами (параметрами) функции. Также у функции должно быть имя, чтобы ее можно было вызвать в среде R. Схема построения функции в R выглядит следующим образом:

Структура R функции

Сначала следует написать имя функции, затем знак присвоения и слово function, которое создает объект класса функция. В скобках мы указываем аргументы, а тело функции находится внутри фигурных скобок. Важно отметить, что для использования функции требуется ввести только имя функции и ее аргументы:

вызов функции в R

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

Использование существующих функций в R

К счастью существует множество готовых функций в R. Так например, mean() , summary() , read.table() , lm() являются базовыми функциями, которыми можно пользоваться без применения сторонних пакетов. Чтобы узнать какие именно аргументы требуется ввести для использования функции введите в консоль знак вопроса и имя функции, например: ?read.table . На открывшейся странице в разделах Usage и Arguments будет перечень аргументов для использования данной функции. Как правило, критически важные аргументы для работы функции находятся в начале списка. Аргументы, которые не будут заполнены примут значения по умолчанию:

read.table(«D:/Folder/mytable.txt», sep = «t», header = T)

Так как официальный архив R пакетов (CRAN) насчитывает более 11 тысяч R пакетов, то количество доступных функций для анализа данных стремительно приближается к 1 млн. Как же нам проводить поиск нужной функции во всех этих пакетах? Для этого существует сайт rdocumentation.org: удобный сервис поиска функций и пакетов по искомому слову или сочетанию слов.

Базовая версия R, которая была загружена на Ваш компьютер, состоит из 30 встроенных пакетов. Остальные следует загружать и подключать самостоятельно. Следовательно, сначала мы ищем к какому пакету принадлежит функция, устанавливаем этот пакет в библиотеку пакетов на компьютере, загружаем его в R и лишь после этого используем функции загруженного пакета. Не забывайте загружать пакет при повторном запуске R, если снова собираетесь использовать функции этого пакета.

Читайте также:
Что такое программа личностного развития

Создание функций: три наглядных примера!

Сколько бы функций не существовало в CRAN, рано или поздно придется написать свои собственные. Причин на это может быть несколько: такой функции еще не написано; проще написать свою, чем искать ее в других R пакетах: и т.д. Так или иначе, создать функции совсем не сложно. Для того, чтобы это доказать, я приведу три простых примера, которые помогут понять логику построения функций.

Пример 1: сколько будет 2+2×2?

Создадим простейшую функцию, основанную исключительно на арифметических действиях. Например, вычислим знакомый нам с начальной школы пример: сколько будет 2+2*2? Усложним немного: 12+12*12? Ну и в завершении арифметических упражнений 42+42*42? Как Вы могли заметить, все эти примеры основаны на одной и той же формуле: a+a*a.

Создание функции в R будет идеальным решением для подобного рода задач.

school school(2) school(12) school(22)

Результат вычислений функции отобразится на экране консоли, т.к. для вывода информации мы использовали базовую функцию print() внутри нашей функции . Когда же нам требуется сохранить результат в виде отдельного объекта (переменной), следует воспользоваться функцией return() , что мы сделаем в следующем примере.

Пример 2: от горшка два вершка

В детстве мы все читали русские народные сказки. Меня, например, всегда интересовало что значит фраза «от горшка два вершка», а точнее сколько это в сантиметрах. Думаю, пришло время получить ответ: создадим конвертер вершков в R при помощи новой функции convershok() .

Один вершок равен 4.445 см. Пусть программа выводит на экран предложение от том, что столько вершков равняется столько-то сантиметров, используя базовую функцию для объединения текстовых и числовых объектов paste() . Также мы хотим, чтобы полученное значение сохранялись как отдельный объект, для чего в конце функции добавим return(vershok) .

convershok vershok print(paste(n, «vershok», «=», vershok, «cm»)) return(vershok) > x

Отлично, мы получили заветное сообщение и сохранили 8.89 (см), как объект x . Вот только о каком именно горшке идет речь в поговорке не сказано, поэтому измерьте высоту первого попавшегося горшка, добавьте это значение к переменной x и напишите в комментариях, сколько у Вас получилось;-)

Пример 3: ноутбук в кредит, сколько придется переплатить?

Допустим, у студента сломался ноутбук. На данный момент у него нет свободных денег на покупку нового, и он решил взять его в кредит. В банке ему предложили кредит на сумму 30.000 рублей с процентной ставкой 35% годовых и возможностью преждевременного погашения. Рассчитаем сколько денег нужно выплатить за ноутбук при погашении кредита через месяц, три месяца и год.

Для расчетов я использую формулу для вычисления суммы процентов, начисленных за пользование кредитом в течение n месяцев.

sp = p * (t + 1) / 24, где:

sp — сумма процента
p — годовая процентная ставка
t — срок кредита (месяцев).

Реализуем эту формулу в R, после чего добавим к цене ноутбука (n) высчитанный суммарный процент (sp), помноженный на цену ноутбука товара (n):

result sp total print(paste(«sp =», round(sp, 2), «%; «, «total price =», total, «rubles»)) > result(30000, 35, 1) result(30000, 35, 3) result(30000, 35, 12)

Как Вы видите, 35% годовых отнють не означает, что студент будет платить за кредит 35% от текущей стоимости ноутбука: в реальности за год он переплатит на 19%. Другой интересный вывод в том, что кредитный процент на один месяц гораздо выше, чем усредненный месячный процент на три месяца и тем более на год. То есть брать кредиты на долгий срок «выгодно» 🙂

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

Читайте также:
Как называется программа для сканирования чеков

Заключение

На мой взгляд, создание функций — искусство особого рода, где дерзкие, а порой и совершенно нелепые идеи сочетаются с прагматичным подходом к их реализации. Надеюсь, что эта информация была для Вам полезной. В следующий раз я продолжу рассказ о функцияз, где мы сконцентрируемся на работе со структурами if else, for и while. Если у Вас появились вопросы, задавайте их в комментариях, я всегда рад на них ответить!

Комментарии: 3
Январь 21, 2020 в 10:21 Александр

Спасибо за статью. Такой вопрос как задать время/интервал между выполнением функций?
Задача в том чтобы выгрузить статистику из соц сетей но есть ограничение по количеству запросов 3 в секунду. И нужно снизить количество запросов выставив timeout. Какая есть для этого функция или метод и можно ли в цикле задать интервал выполнения?

Январь 21, 2020 в 13:46 Samoedd (Автор записи)
https://samoedd.com

Создайте цикл for, внутри код своей функции и добавьте вот эту строчку в качестве последней строки внутри тела цикла: Sys.sleep(3) Вот в качестве примера функция, которая автоматически выводит на экран какой цикл сейчас выполняется в R. Вы лишь задаете интервал задержки между циклами: kakoi.zikl
for(i in 1:10) print(i)
Sys.sleep(a)
>
> kakoi.zikl(1) # 1 sec interval
kakoi.zikl(3) # 3 sec interval

Источник: samoedd.com

Доброго времени суток начинающие программисты, в этом уроке мы будем создавать онлайн калькулятор услуг. В качестве примера мы будем брать калькулятор ремонта, который делает онлайн расчет стоимости ремонта. Живой демо пример Фишка этого калькулятора в том, что в итоге все расчеты можно сохранить в word документ и формирует он все данные за считанные мили-секунды.

Для чего мы создаем такой калькулятор расчетов услуг

  1. Быстрая готовая смета
  2. Сформированный документ можно уже отправлять клиенту
  3. Экономия времени пользователю, тем самым повышаем КПД

Какие методы используем

  1. Формирование шаблона на HTML
  2. Использование многомерного массива в input
  3. Запросы к базе данных для вывода услуг
  4. Расчет при помощи javascript
  5. Php формирование документа

Создаем калькулятор расчета за 6 простых шагов

Шаг 1. Создаем базу данных в mysql

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

price_cat — таблица с категориями
price_item — таблица с услугами

Создаем базу данных импортируем файл calculator.sql в созданную базу данных и подключаемся к ней.

Все готово. Теперь необходимо разметить html шаблон и одновременно формировать запросы к базе.

Шаг 2. Разметим html + php шаблон

Подключаем библиотеки, которые нам понадобятся

Обратите внимания:
Я использовал bootstrap компоненты, а так же библиотеку awesome иконки, а в calculator.js мы будем писать скрипт расчетов.

Разметка калькулятора

Калькулятор ремонта

0) < ?>

«> ][name]» value=»» /> ][summa]» value=»» />

0) < ?>

Наименование работ Ед. изм. Стоимость Кол-во Сумма

while($item = mysql_fetch_array($res_item)); ?>

][items][][name]» value=»» /> ][items][][ed_izm]» value=»» /> ][items][][price]» value=»» /> ][items][][kolvo]» value=»» style=»width:70px; margin:0 auto;»> ][items][][summa]» value=»» style=»width:80px; margin:0 auto; text-align:center;»>

?> Итого: 0 руб. while($category = mysql_fetch_array($res_category)); ?> ?> Сохранить в WORD документ Итого: 0 руб.

Как видим ничего сложного нет, очень простые запросы к базе, очень простой html код. Единственное на что хотел обратить внимание, это на то что мы используем многомерный массив input. В файле обработчике мы будет работать с ними и научимся извлекать нужные данные из них.

Теперь самое интересное. Напишем скрипт для расчета стоимости услуг на javascript.

Шаг 3. Пишем скрипт на javascript онлайн расчета

Некоторые строки я пояснил прямо в коде.

$(function() < // смена стрелочки у категории $(«.open_category»).click(function()< var status = $(this).attr(«aria-expanded») if(status==»false») < $(this).find(«i»).attr(«class»,»fa fa-angle-up»); >else < $(this).find(«i»).attr(«class»,»fa fa-angle-down»); >>) // событие при наборе кол-ва в калькуляторе $(«.calc»).on(«change keyup», function() < var value = $(this).val(); var price = $(this).parent().prev().find(«input»).val(); price = price.replace(/s/g, »); // удаляем пробелы var item_summa = value*price; item_summa = item_summa.Crop(2); // 2 знаka после запятой $(this).parent().next().find(«input»).val(item_summa); var summa_category = 0; // сюда будем загонять сумму в каждоый категории var total_summa = 0; // сюда будем загонять итоговую сумму var item_summa_category = $(this).parent().next().find(«input»); $(item_summa_category).each(function()< // пробегаемся по всем суммам и суммируем var k = parseFloat($(this).val()); if(!k || k==0)summa_category += k; >) // записываем расчеты по категориям $(this).parents(«.category»).find(«.summa_category»).text(summa_category); $(this).parents(«.category»).find(«.summa_category_input»).val(summa_category); $(«big.summa_category»).each(function() < // пробегаемся по всем суммам в категориях и суммируем var t = parseFloat($(this).text()); if(!t || t==0)total_summa += t; // считаем общую стоимость >) // выводим итоговую сумму $(«.total»).text(total_summa); $(«.total_input»).val(total_summa); >) >) // функция знаки после запятой Number.prototype.Crop = function (x)

Отлично теперь, если вы сделали все правильно, то у наш созданный калькулятор уже должен считать.

Файл save_word.php

В некоторых моментах мне было лень присваивать классы, прописывать к ним стили, а потом подключать новую CSS. По этому я писал стили прямо в коде в тегах, конечно же плохой пример, не делайте так, но из-за 2-3 строк, тоже время терять не хочется.

Все готово, можете тестировать и визуализировать выводимый word формат.

Вывод

В этом уроке мы создали онлайн калькулятор расчета услуг, на примере калькулятора ремонта, позаимствовав идею у сайта remont-cityper.ru. Написанный нами код очень сильно отличается от кода, который использован в демо примере. ( можете убедится сами). Так же мы научились создавать word документ под средством php, использовав шаблон rtf и специальные метки. Это отличный урок по созданию счетов, бланков, прайс-листов и т.д.

Пишите комментарии по этому поводу, я буду раз услышать от вас рекомендации или советы.

Источник: kisameev.ru

Пишем свой калькулятор на JS

Калькулятор — прекрасная задача для начинающего программиста. Она помогает понять основы работы с арифметическими и строковыми операциями. Если Вы ещё не сделали свой калькулятор, то советую закрыть этот пробел вместе с этим уроком. HTML:

Используется javascript-функции: eval() — преобразует строку в javascript и выполняет его. innerHTML — получает и присваивает внутренний HTML текст DOM-элементу (div, span, label и т.д.)

// код начнёт выполняться после загрузки страницы
// когда окно загрузится, сработает метод window.onLoad
window.addEventListener( ‘load’ , function OnWindowLoaded() <
// набор кнопок
// форма калькулятора
var calc = document.getElementById( ‘calc’ );
// текстовое поле с математическим выражением
var textArea = document.getElementById( ‘inputVal’ );
// Добавление кнопок к форме калькулятора
signs.forEach( function (sign) <
var signElement = document.createElement( ‘div’ );
signElement.className = ‘btn’ ;
signElement.innerHTML = sign;
calc.appendChild(signElement);
// проходит по всем кнопкам калькулятора
// добавляет обработчик на клик
document.querySelectorAll( ‘#calc-wrap .btn’ ).forEach( function (button) <
// Добавляем действие, выполняемое при клике на любую кнопку
button.addEventListener( ‘click’ , onButtonClick);
// функция клика по кнопке калькулятора
function onButtonClick(e) <
// e — MouseEvent (содержит информацию о клике)
if (e.target.innerHTML === ‘c’ ) <
// Если нажата кнопка «с», то стирает все из текстового поля
textArea.innerHTML = ‘0’ ;
> else if (e.target.innerHTML === ‘=’ ) <

// Если нажата кнопка » line number42 index41 alt1″> // в текстовом поле к javascript, вычислить значение

textArea.innerHTML = eval(textArea.innerHTML);
> else if (textArea.innerHTML === ‘0’ ) <
// Если textarea содержит только «0», то
// стереть «0» и записать
// значения кнопки в текстовое поле
textArea.innerHTML = e.target.innerHTML;
// Добавление значения кнопки в текстовое поле
textArea.innerHTML += e.target.innerHTML;

Используются CSS-свойства: line-height — устанавливает высоту строки для текста. Текст выравнивается по центру этой высоты. text-align — выравнивает текст по горизонтали (принимает значения: left,right,center) resize — устанавливает возможно изменение размеров текстового поля (принимает значения: vertical, horizontal,both,none)

Источник: gohtml.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru