Калькулятор простой командной строки [закрыто]

Было год назад (на Win 3.1 или 95, я не уверен). В любом случае это была действительно простая программа. Стоял где-то в PATH и позволял вам делать что-то вроде

  calc 5 + 28.3 * sqrt (12)  

и он выплюнул результат.

Кто-нибудь знает о таком в наши дни? Не нужно делать ничего особенного … может быть, было бы неплохо, если бы в нем была поддержка экспонент, но это все.

Кто угодно?

ps Меня не интересуют полноценные решения, такие как Python или MATLAB.


1

При поиске в Google появляется несколько калькуляторов командной строки.

Он написан на C #

http://www.codeproject .com/KB/cs/command_line_calculator.aspx

Этот также делает графики. http://www.kotiposti.net/jjhalme/clcmain.htm

Улучшите этот ответ
ответил 17 ноября 2011 в 3:17
добавить комментарий |

При поиске в Google выскакивает несколько калькуляторов командной строки.

Он написан на C #

http://www.codeproject.com/KB/cs/command_line_calculator.aspx

Этот также делает графики. http://www.kotiposti.net/jjhalme /clcmain.htm


0

Возможно, вы возможность использовать для этого некоторую разновидность awk — ссылка предлагает создать функцию типа calc () {awk "BEGIN {print $ *}";} ', а затем использовать новую функцию с calc «уравнение здесь» `- вы можете получить копию awk из unxutils или использовать busybox. Любой из них должен быть довольно легко меньше 1 МБ

Для базового сложения/вычитания/умножения и деления .. . попробуйте команду set/a — подробнее здесь и с помощью опции справки

Улучшите этот ответ
ответил 17 ноября 2011 в 0:56
добавить комментарий |

Возможно, вы сможете использовать для этого некоторую разновидность awk — ссылка предлагает создать такую ​​функцию, как calc ( ) {awk "BEGIN {print $ *}";} ', а затем используя новую функцию с calc «уравнение здесь» `- вы можете получить копию awk из unxutils или использовать busybox. Любой из них должен быть довольно легко под 1 МБ

Для базового сложения/вычитания/умножения и деления … попробуйте команду set/a — подробнее здесь и с помощью опции справки


0

Google сам выполнит такие вычисления в поле поиска или здесь. Не уверен, какие у него ограничения. Зависит от того, для чего вы хотите это использовать.

Улучшите этот ответ
ответил 17 нояб., в 15:37
добавить комментарий |

Google сам выполнит такие вычисления в поле поиска или здесь. Не уверен, какие у него ограничения. Зависит от того, для чего вы хотите это использовать.


0

Это началось как комментарий, но стало слишком длинным, поэтому я публикую его как ответ.

Вы говорите, что не хотите Python, но Python будет Будьте быстрыми и полными, и сравнивать Python и MATLAB в «полномасштабном» смысле довольно жестко. Я считаю, что это также будет хорошо по скорости, сравнивая предложения C # и Perl среди комментариев и ответов.

Я использую однострочник:

  python -ic "from __future__ import Division; from math import *;"  

, который я привязал к сочетанию клавиш, которое открывает терминал с помощью этой команды, что дает мне молниеносный компетентный калькулятор с exp () , sqrt () , sin () , log () , pi , e и т. д.

Если вам просто нужен « calc 5 + 7 «вариант * nix будет выглядеть так:

  python -c" from __future__ import Division; from math import *; print  $ * " 

, а в Windows вам, вероятно, просто нужно заменить $ * на % * .

from __future__ import Division по умолчанию использует деление с плавающей запятой вместо целочисленного деления, которое ожидается от калькулятора. В этом нет необходимости, если используется Python 3 (что означает часть __ future__ ).

из математического импорта * импортирует все математические функции в основное пространство имен, поэтому вы можете использовать sin (2 * pi) вместо math.sin (2 * pi) .


На бис: чтобы иметь сценарий, который можно запускать в интерактивном или прямом режиме:

  #!/bin/ сдвиг [$ {#} = 0];  затем python -ic "из __future__ import Division; из математического импорта *;" else python -c "из __future__ import Division; from math import *; print $ {*};" fi  

(скорее всего, тривиально преобразован в Windows).

Улучшите этот ответ
ответил 09 марта 2012 г., 9:04
добавить комментарий |

Это началось как комментарий, но стало слишком длинным, поэтому я публикую его как ответ.

Вы говорите, что не хотите Python, но Python будет быстрым и полным, а сравнивать Python и MATLAB в «полномасштабном» -ity довольно жестко. Я считаю, что это также будет хорошо по скорости, сравнивая предложения C # и Perl среди комментариев и ответов.

Я использую однострочник:

  python -ic "from __future__ import Division; from math import *;"  

, который я привязал к сочетанию клавиш, которое открывает терминал с помощью этой команды, что дает мне молниеносный компетентный калькулятор с exp () , sqrt () , sin () , log () , pi , e и т. д.

Если вам просто нужен « calc 5 + 7 «вариант * nix будет выглядеть так:

  python -c" from __future__ import Division; from math import *; print  $ * " 

, а в Windows вам, вероятно, просто нужно заменить $ * на % * .

from __future__ import Division по умолчанию использует деление с плавающей запятой вместо целочисленного деления, которое ожидается от калькулятора. В этом нет необходимости, если используется Python 3 (что означает часть __ future__ ).

из математического импорта * импортирует все математические функции в основное пространство имен, поэтому вы можете использовать sin (2 * pi) вместо math.sin (2 * pi) .


На бис: чтобы иметь сценарий, который можно запускать в интерактивном или прямом режиме:

  #!/bin/ сдвиг [$ {#} = 0];  затем python -ic "из __future__ import Division; из математического импорта *;" else python -c "из __future__ import Division; from math import *; print $ {*};" fi  

(скорее всего, тривиально преобразованный в Windows).



Собственный calc в командной строке Windows

Я написал код для вычислить некоторые выражения. Это работает так: calc 5+ 6 + 8 * 7 должен выводить 67. Проблема, с которой я столкнулся, — побитовые операторы: calc 1 ^ & 0 дает ошибка. Идея моей калькуляции проста. Сначала объедините весь наш ввод в set , а затем set/A a =% a% , чтобы вычислить выражение My code:

  @echo offif "% 1" == "" goto: helpif "% 1" == "/?"  goto: helpset "g =": startrem *** Объедините весь наш ввод вместе *** установите "g =% g %% 1", если не "% 1" == "" (если "% 1" == "/ ? "(goto: help) shiftgoto: start) echo% g% |  findstr/R "[^ 0123456789  +  -  * / ()]  +  +  -  -  *  * // =  =  =  ^^"> nul 2>  & 1if not ERRORLEVEL 1 goto errorset/A "g =% g%" 2> nulif ERRORLEVEL 1 goto errorecho% g% set g = goto: EOF: helpecho Это простое Calculatorecho Использование: Mycalc.cmd [/?] (EXPRESSION) echo  Доступные операнды: +, -, *,/, (,) goto: EOF: errorecho Неправильный ввод или ошибка вычисления.  

Я думаю, что проблема при вводе calc 1 ^ & 0 есть ошибка для echo% g% : 0 не распознается как внутренняя или внешняя команда


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

В вашем примере вызов calc 1 ^ & 0 при выполнении

  echo% g%  

то, что запускает cmd-файл

  echo 1 & 0  

, введите символ 1 и запустите программу 0

Как решить?

  rem прочитать всю командную строку и заключить в кавычки set a = "% *" rem заменить амперсанд на экранированный амперсанд установить  =% a: & = ^ &% rem выполнить расчет без кавычек/aa =% a: "=%  

И, конечно, вызвать cmd с экранированным амперсандом


2

Проблема заключается в выводе & или | , как упоминалось в MC ND и aphoria.
Чтобы решить эту проблему, используйте в лучшем случае отложенное расширение, так как это не касается этих символов.

Это может обрабатывать calc 1 ^ & 3 или также calc «1 & 3»

  setlocal EnableDelayedExpansionset "param =% ~  1 "echo! Param!  

Но у вас возникли дополнительные проблемы, когда вы попытались передать это в findstr, это требует дополнительной обработки

Улучшите этот ответ
ответил 17 октября 2013 в 18:27
добавить комментарий |

Проблема заключается в выводе & или | как MC ND и афория упомянуты.
Чтобы решить эту проблему, используйте в лучшем случае отложенное расширение, так как это не заботится об этих персонажах.

Это может обрабатывать calc 1 ^ & 3 или также calc «1 & 3»

  setlocal EnableDelayedExpansionset "param =  % ~ 1 "echo! Param!  

Но у вас возникли дополнительные проблемы, когда вы попытаетесь передать это в findstr, это требует дополнительной обработки


1

Ваш исходный код нуждался в некоторых исправлениях и упрощениях кода, вот рабочая версия:

  @echo offif "% ~ 1" EQU "" (goto: help) if "% ~ 1" EQU "/?"  (goto: help): startrem *** Объедините все наши вводимые данные вместе *** Установите "g =% *" set/A "g =% g: =%" REM echo Input: "% g%" set/A "  g =% g% "2> nul ||  (ошибка перехода) echo% g% set "g =" goto: EOF: helpecho Это простое Calculatorecho Использование: Mycalc.cmd [/?] (EXPRESSION) echo Доступные операнды: +, -, *,/, (,) goto  : EOF: errorecho Неправильный ввод или ошибка вычисления.  

PS: Попробуйте как обычно, без передачи дополнительных (я имею в виду двойных или тройных) символов ^ .

Улучшите это ответ
изменён 17 окт.’13 в 21: 39
ответил 17 октября 2013 в 18:33
добавить комментарий |

Ваш исходный код нуждался в некоторых исправлениях и упрощениях кода, вот рабочая версия:

  @echo offif "% ~ 1" EQU "" (goto: help) if "% ~ 1" EQU "/?"  (goto: help): startrem *** Объедините все наши вводимые данные вместе *** Установите "g =% *" set/A "g =% g: =%" REM echo Input: "% g%" set/A "  g =% g% "2> nul ||  (ошибка перехода) echo% g% set "g =" goto: EOF: helpecho Это простое Calculatorecho Использование: Mycalc.cmd [/?] (EXPRESSION) echo Доступные операнды: +, -, *,/, (,) goto  : EOF: errorecho Неправильный ввод или ошибка вычисления.  

PS: Попробуйте как обычно, без передачи дополнительных (я имею в виду двойных или тройных) символов ^ .


0

Используйте три ^ , чтобы его избежать, например:

  calc 1 ^^^ & 0  

Улучшите этот ответ
ответил 17 октября 2013 в 18:05
  • У меня тоже такая же ошибка echo% g% : 0 не распознается как внутренняя или внешняя команда , когда я набираю calc 1 ^^^ & 0 Я думаю, проблема в том, что я делаю эхо % g% не один раз. — Данил Миронов, 17 окт. в 18:11
добавить комментарий |

Используйте три ^ , чтобы избежать его, как это :

  calc 1 ^^^ & 0  

0

Вот пример без операторов DelayedExpansion или goto .

  @echo offsetlocal DisableDelayedExpansionset "Input =% *" rem Нет ввода, отображение справки, если не определено Input (call: Help) else call: Main || call: Err  orendlocal & exit/b% ErrorLevel%: Mainrem Clean Ввод отравляющих двойных кавычекset "Input =% Input:" =% "rem Проверить наличие/?  параметр справки if "/?" == "% Input: ~ 0,2%" call: Help & exit/b 0rem Проверить символы в Inputfor/f "delims = 0123456789 + - */() & |" %% A  in ("% Input%") do exit/b 1rem Выполнить вычисления set/a "Input =% Input: =%" 2> nulrem Проверить результат для/f "delims = 0123456789" %% A in ("% Input%"  ) do exit/b 1rem Показать Resultecho (% Input% exit/b% ErrorLevel%: Helpecho Это простое Calculatorecho Использование: Mycalc.cmd [/?] (EXPRESSION) echo Доступные операнды: +, -, *,/, ^  (, ^), ^ &, ^ | exit/b 0: Errorecho Неправильный ввод или ошибка вычисления. exit/b 0  

Улучшите этот ответ
отредактировал 20 июня ’20 в 9:12
Сообщество ♦
111 серебряных значков
ответил 17 окт. в 20:13
добавить комментарий |

Вот пример без операторов DelayedExpansion или goto .

  @echo offsetlocal DisableDelayedExpansionset "Input =% *" rem Нет ввода, отображать справку, если не определено Input (call: Help) else call: Main ||  call: Errorendlocal & exit/b% ErrorLevel%: Mainrem Clean Ввод отравляющих двойных кавычекset "Input =% Input:" =% "rem Проверьте параметр/? help if"/? "=="% Input: ~ 0,2  % "call: Help & exit/b 0rem Проверить символы в Inputfor/f" delims = 0123456789 + - */() & |  "%% A in ("% Input% ") do exit/b 1rem Выполнить вычисления set/a" Input =% Input: =% "2> nulrem Проверить результат для/f" delims = 0123456789 "%% A in ("  % Input% ") do exit/b 1rem Отобразить Resultecho (% Input% exit/b% ErrorLevel%: Helpecho Это простое Calculatorecho Использование: Mycalc.cmd [/?] (EXPRESSION) echo Доступные операнды: +, -, *  ,/, ^ (, ^), ^ &, ^ | exit/b 0: Errorecho Неправильный ввод или ошибка вычисления. exit/b 0  

Оцените статью
logicle.ru
Добавить комментарий