Программирование: локальные переменные - Сообщения
Наткнулся в одной из тем на то, что якобы SMath не возвращает значение функции в виде программы (вертикальная черта). Я такие штуки на Маткаде использовал, и мне это важно. Проверил - значение-то возвращает, а вот локальное присвоение сделать не получается. В панели "Арифметика" подобной кнопки нет, "{" (как в Маткаде) тоже не работает. Присвоение через ":=" - глобальное. Разве в SMath в Programming (которое через вертикальную черту) нет локальных переменных? (Поиск не дал результатов)
И еще, сорри, но позволю себе задать смежный вопрос, чтобы не плодить темы. Как SMath относится к крупным программам? На Маткаде я делал таких зверей... Допустим, 500 строк программы + десятки аргументов у функций, запускаемых из программы - это довольно объемно для математического пакета. Будут ли такие конструкции работать? Не будет ли это работать слишком медленно? (На Маткаде мои программы, бывает, более минуты считают)
WroteНаткнулся в одной из тем на то, что якобы SMath не возвращает значение функции в виде программы (вертикальная черта).
Вы правы. Такой возможности в программе нет. Последнее время мне часто об этом говорят, а потому я обязательно её позже реализую.
WroteДопустим, 500 строк программы + десятки аргументов у функций, запускаемых из программы - это довольно объемно для математического пакета. Будут ли такие конструкции работать? Не будет ли это работать слишком медленно?
Ну это больше риторический вопрос. Всё зависит от программы. Вообще ограничений на количество аргументов функций или строк расчётов в SMath Studio нет (точнее, конечно есть, но они представляет из себя настолько огромные числа, что проблем из-за этого возникнуть не может в принципе), однако, очевидно, что чем их больше, тем больше работы придётся выполнять программе. Я видел файлы (и создавал их сам), сделанные в SMath Studio, расчёт которых занимает минуты, но в большинстве случаев они вполне поддаются оптимизации (в том числе см. eval и optimization). В целом же, и это факт, SMath Studio работает медленнее маткада, но я постоянно (и успешно) работаю над увеличением её производительности.
С уважением, Андрей Ивашов.
Такой возможности в программе нет
Значит это именно к функции относится... Потому что если присвоить прог-блок переменной, то возвращаемое значение замечательно передается в переменную, а функцию-то я не попробовал... ОК, функция=прог-блок - это тоже критично (без этого никак), поэтому терпеливо ждем новую версию.
ограничений на количество аргументов функций или строк расчётов в SMath Studio нет
ОК, этот вопрос снимается.
SMath Studio работает медленнее маткада
Ничего не поделаешь, это плата за Net Framework и кроссплатформенность. Даже перерисовка содержимого окна при скролле, когда оно развернуто на весь экран, слегка подтормаживает, правда этого почти не заметно (у меня на работе сравнительно большой 24" моник).
Но интересно другое: нельзя ли узнать, во сколько раз примерно SMath медленнее, чем Mathcad? Не превратятся ли несколько маткадных минут в несколько часов

Сорри, но Вы забыли про основной вопрос темы, насчет local variables

WroteНичего не поделаешь, это плата за Net Framework и кроссплатформенность.
Это заблуждение. Скорость зависит во много большей степени от приложенных усилий разработчика(ов).
WroteДаже перерисовка содержимого окна при скролле, когда оно развернуто на весь экран, слегка подтормаживает, правда этого почти не заметно (у меня на работе сравнительно большой 24" моник).
Это лишь потому, что при скроллинге SMath Studio перерисовывает весь экран, а маткад лишь недостающую часть видимого изображения.
WroteНо интересно другое: нельзя ли узнать, во сколько раз примерно SMath медленнее, чем Mathcad?
Нет. Это невозможно.
WroteНе превратятся ли несколько маткадных минут в несколько часов
?
Вполне вероятно. Разные алгоритмы в разных программах будут занимать различное время.
WroteСорри, но Вы забыли про основной вопрос темы, насчет local variables
.
Все создаваемые переменные в SMath Studio по своей природе - глобальные. Когда будет представлена официальная возможность использовать функции программирования в качестве правой части выражения присваивания, тогда появятся и переменные с локальной видимостью.
С уважением, Андрей Ивашов.
функции программирования в качестве правой части выражения присваивания
Я что-то не понимаю... У меня прог-блок работает и на присваивание переменной, и на присваивание функции (SMath 0.89 Portable). Пример:
f(x;y):=|z:=x^2+y^2
|z
f(5;5)=50
В любом случае спасибо за ответы, ждем в новых версиях дополнений функционала прог-блоков. Надеюсь, я Вам тут не сильно надоел. Пойду в Visual Studio писать свою прогу...
WroteЯ что-то не понимаю... У меня прог-блок работает и на присваивание переменной, и на присваивание функции (SMath 0.89 Portable). Пример:
f(x;y):=|z:=x^2+y^2 |z f(5;5)=50
Тут дело в том, что я данную функциональность просто не закладывал. В некоторых ситуациях присвоение срабатывает, в некоторых - нет. Сейчас я не рекомендую использовать циклы, определение переменных и функций в правой части выражений определения функций. Именно поэтому я и говорю:
WroteКогда будет представлена официальная возможность использовать функции программирования в качестве правой части выражения присваивания, тогда появятся и переменные с локальной видимостью.
Просто сейчас я не могу гарантировать, что подобные выражения не испортят математической логики SMath Studio. Буду и дальше работать над совершенствованием программы.
Спасибо за вопросы. С уважением.
ОК, благодарю за пояснения, ждем новых версий.
Не совсем по теме - но проблема с программированием:
Когда осуществляется набор программного блока, то при вводе уже известной переменной производится её подсветка по всему тексту блока.
При этом, если блок большой то на экран выводится начало блока. И после каждого ввода приходится перематывать экран обратно. Можно ли ввести в меню "опции" кнопочку для включения/выключения данной функциональности ?
Спасибо
Подсветка повторяющихся вхождений и подстраивание кареток прокрутки к началу блока формул никак между собой не связаны. А вот то, что автоподстраивание кареток работает некорректно в случае больших размеров региона - это ошибка. Буду исправлять, спасибо.
С уважением.
Да, и еще насчет больших блоков. Сейчас левая часть (которой присваивается) расположена в середине блока. Если блок большой (2-3 экрана), то Вы не видите чему присваивается значение. ИМХО в будущих версиях, где будет официально полноценное программирование с присвоением результата функции, стоит переместить левую часть вверх, как в Маткаде:
f(x,y,z,...)=|...
|...
|...
|...
|...
Wrote...стоит переместить левую часть вверх...
Согласен, сделаю.
Начиная с версии SMath Studio 0.90 программа будет позволять создавать сколь угодно сложные конструкции в определениях. На данный момент этот функционал может быть протестирован в SMath Studio Live:
[LIVE width=303 height=177]http://smath.info/live/?file=1616[/LIVE]
С уважением, Андрей Ивашов.

p.s.: можно будет создавать свои собственные библиотеки, при этом не вникая в создание плагинов.
И плагины пригодяться, если им дадут больше возможностей.
Но считаю что более приоритетная задача: комфортная работа с размерностями. Сейчас с ними дело не так хорошо как хотелось бы.
WroteНо считаю что более приоритетная задача: комфортная работа с размерностями. Сейчас с ними дело не так хорошо как хотелось бы.
А что с ними не так? Я и не занимаюсь ими только потому, что считаю, что они реализованы достаточно хорошо. Если речь о локализации, то эта работа уже тоже ведётся, но она не только к ед. изм. относится. А если о нелинейных единицах измерения, то не имею представления как можно упростить работу с ними. Третий вариант: выбор единиц для вывода по умолчанию, но это очень несущественная проблема, которая не столь актуальна для русскоязычных пользователей и, к тому же, имеет альтернативное решение в лице задания размерности вручную в конце выражения.
Т.ч. на мой взгляд значительно более важное дело - довести вычислительный движок до состояния, когда он будет позволять пользователю решать сколь угодно сложные задачи. Этим я и занимаюсь.
С уважением.
Т.е. даже когда я привожу к омам, он просто делит то, что сам посчитал, на омы и все равно выдает сопротивление в единицах типа: кг, м, с.
Казалось бы f(x) задана верно, значения выводятся правильно, а вот график рисовать или интеграл считать как нужно отказывается. В чем подвох?
Тут видно, что с(z) - значение меняет, а на интеграле как будто всегда с = const = 5 (т.е. значение функции в "0" )
[LIVE width=628 height=676]http://smath.info/live/?file=1750[/LIVE]
WroteУдалять/добавлять новые строчки в line(..) не в конце пока что нельзя.
Не ожидается ли каких-то нововведений на этот счет в ближайшее время?
-
Новые сообщения
-
Нет новых сообщений