Программирование: локальные переменные

Программирование: локальные переменные - Messages

#1 Posted: 9/17/2010 6:38:13 AM
Antech

Antech

2 likes in 35 posts.

Group: User

Здравствуйте.

Наткнулся в одной из тем на то, что якобы SMath не возвращает значение функции в виде программы (вертикальная черта). Я такие штуки на Маткаде использовал, и мне это важно. Проверил - значение-то возвращает, а вот локальное присвоение сделать не получается. В панели "Арифметика" подобной кнопки нет, "{" (как в Маткаде) тоже не работает. Присвоение через ":=" - глобальное. Разве в SMath в Programming (которое через вертикальную черту) нет локальных переменных? (Поиск не дал результатов)

И еще, сорри, но позволю себе задать смежный вопрос, чтобы не плодить темы. Как SMath относится к крупным программам? На Маткаде я делал таких зверей... Допустим, 500 строк программы + десятки аргументов у функций, запускаемых из программы - это довольно объемно для математического пакета. Будут ли такие конструкции работать? Не будет ли это работать слишком медленно? (На Маткаде мои программы, бывает, более минуты считают)
#2 Posted: 9/17/2010 7:36:56 AM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Здравствуйте.

Wrote

Наткнулся в одной из тем на то, что якобы SMath не возвращает значение функции в виде программы (вертикальная черта).


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

Wrote

Допустим, 500 строк программы + десятки аргументов у функций, запускаемых из программы - это довольно объемно для математического пакета. Будут ли такие конструкции работать? Не будет ли это работать слишком медленно?


Ну это больше риторический вопрос. Всё зависит от программы. Вообще ограничений на количество аргументов функций или строк расчётов в SMath Studio нет (точнее, конечно есть, но они представляет из себя настолько огромные числа, что проблем из-за этого возникнуть не может в принципе), однако, очевидно, что чем их больше, тем больше работы придётся выполнять программе. Я видел файлы (и создавал их сам), сделанные в SMath Studio, расчёт которых занимает минуты, но в большинстве случаев они вполне поддаются оптимизации (в том числе см. eval и optimization). В целом же, и это факт, SMath Studio работает медленнее маткада, но я постоянно (и успешно) работаю над увеличением её производительности.

С уважением, Андрей Ивашов.
#3 Posted: 9/18/2010 11:18:49 AM
Antech

Antech

2 likes in 35 posts.

Group: User

smath
Такой возможности в программе нет
Значит это именно к функции относится... Потому что если присвоить прог-блок переменной, то возвращаемое значение замечательно передается в переменную, а функцию-то я не попробовал... ОК, функция=прог-блок - это тоже критично (без этого никак), поэтому терпеливо ждем новую версию.

ограничений на количество аргументов функций или строк расчётов в SMath Studio нет
ОК, этот вопрос снимается.

SMath Studio работает медленнее маткада
Ничего не поделаешь, это плата за Net Framework и кроссплатформенность. Даже перерисовка содержимого окна при скролле, когда оно развернуто на весь экран, слегка подтормаживает, правда этого почти не заметно (у меня на работе сравнительно большой 24" моник).
Но интересно другое: нельзя ли узнать, во сколько раз примерно SMath медленнее, чем Mathcad? Не превратятся ли несколько маткадных минут в несколько часов ?

Сорри, но Вы забыли про основной вопрос темы, насчет local variables . Например, если в прог-блоке сделать x:=1, то создается глобальная переменная x, ее значение видно за пределами прог-блока. А создать локальную переменную у меня не получилось [синтакс Mathcad: x<-1, вставляется с помощью "{"].
#4 Posted: 9/18/2010 1:37:26 PM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Здравствуйте.

Wrote

Ничего не поделаешь, это плата за Net Framework и кроссплатформенность.


Это заблуждение. Скорость зависит во много большей степени от приложенных усилий разработчика(ов).

Wrote

Даже перерисовка содержимого окна при скролле, когда оно развернуто на весь экран, слегка подтормаживает, правда этого почти не заметно (у меня на работе сравнительно большой 24" моник).


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

Wrote

Но интересно другое: нельзя ли узнать, во сколько раз примерно SMath медленнее, чем Mathcad?


Нет. Это невозможно.

Wrote

Не превратятся ли несколько маткадных минут в несколько часов ?


Вполне вероятно. Разные алгоритмы в разных программах будут занимать различное время.

Wrote

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


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

С уважением, Андрей Ивашов.
#5 Posted: 9/19/2010 1:38:00 PM
Antech

Antech

2 likes in 35 posts.

Group: User

smath
функции программирования в качестве правой части выражения присваивания
Я что-то не понимаю... У меня прог-блок работает и на присваивание переменной, и на присваивание функции (SMath 0.89 Portable). Пример:

f(x;y):=|z:=x^2+y^2
        |z
f(5;5)=50

В любом случае спасибо за ответы, ждем в новых версиях дополнений функционала прог-блоков. Надеюсь, я Вам тут не сильно надоел. Пойду в Visual Studio писать свою прогу...
#6 Posted: 9/19/2010 2:23:11 PM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Wrote

Я что-то не понимаю... У меня прог-блок работает и на присваивание переменной, и на присваивание функции (SMath 0.89 Portable). Пример:


f(x;y):=|z:=x^2+y^2
        |z
f(5;5)=50


Тут дело в том, что я данную функциональность просто не закладывал. В некоторых ситуациях присвоение срабатывает, в некоторых - нет. Сейчас я не рекомендую использовать циклы, определение переменных и функций в правой части выражений определения функций. Именно поэтому я и говорю:
Wrote

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


Просто сейчас я не могу гарантировать, что подобные выражения не испортят математической логики SMath Studio. Буду и дальше работать над совершенствованием программы.

Спасибо за вопросы. С уважением.
#7 Posted: 9/20/2010 3:03:56 AM
Antech

Antech

2 likes in 35 posts.

Group: User

smath
ОК, благодарю за пояснения, ждем новых версий.
#8 Posted: 9/21/2010 1:51:55 PM
iiii01

iiii01

0 likes in 7 posts.

Group: User

Добрый день !

Не совсем по теме - но проблема с программированием:

Когда осуществляется набор программного блока, то при вводе уже известной переменной производится её подсветка по всему тексту блока.

При этом, если блок большой то на экран выводится начало блока. И после каждого ввода приходится перематывать экран обратно. Можно ли ввести в меню "опции" кнопочку для включения/выключения данной функциональности ?

Спасибо
#9 Posted: 9/21/2010 2:36:21 PM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Приветствую.

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

С уважением.
#10 Posted: 9/23/2010 2:24:26 AM
Antech

Antech

2 likes in 35 posts.

Group: User

Еще вопрос по поводу прог-блока. Увеличить его высоту (добавить placeholders внизу) можно, перетащив черную пимпочку. А вот добавить пустые строки в середине не получается - при нажатии "'" добавляется новый уровень, а не новая строка.

Да, и еще насчет больших блоков. Сейчас левая часть (которой присваивается) расположена в середине блока. Если блок большой (2-3 экрана), то Вы не видите чему присваивается значение. ИМХО в будущих версиях, где будет официально полноценное программирование с присвоением результата функции, стоит переместить левую часть вверх, как в Маткаде:

f(x,y,z,...)=|...
             |...
             |...
             |...
             |...
#11 Posted: 9/23/2010 8:55:53 AM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Удалять/добавлять новые строчки в line(..) не в конце пока что нельзя. Постараюсь успеть придумать что-нибудь к следующей версии.

Wrote

...стоит переместить левую часть вверх...


Согласен, сделаю.
1 users liked this post
Antech 9/24/2010 3:03:00 PM
#12 Posted: 9/30/2010 7:45:35 PM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Возможность создания в том числе и локальных переменных реализована!

Начиная с версии SMath Studio 0.90 программа будет позволять создавать сколь угодно сложные конструкции в определениях. На данный момент этот функционал может быть протестирован в SMath Studio Live:
[LIVE width=303 height=177]http://smath.info/live/?file=1616[/LIVE]

С уважением, Андрей Ивашов.
#13 Posted: 10/1/2010 4:02:31 AM
Samar

Samar

2 likes in 107 posts.

Group: User

Не хватает еще возможности подключения функций из других файлов .sm и тогда будет счастье

p.s.: можно будет создавать свои собственные библиотеки, при этом не вникая в создание плагинов.
www.math.by
#14 Posted: 10/1/2010 4:29:06 AM
build_your_web

build_your_web

4 likes in 127 posts.

Group: User

Кстати, да, сниппеты хороши, но возможность загружать другие файлы тоже пригодится.
И плагины пригодяться, если им дадут больше возможностей.

Но считаю что более приоритетная задача: комфортная работа с размерностями. Сейчас с ними дело не так хорошо как хотелось бы.
#15 Posted: 10/1/2010 6:00:25 AM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

Wrote

Но считаю что более приоритетная задача: комфортная работа с размерностями. Сейчас с ними дело не так хорошо как хотелось бы.


А что с ними не так? Я и не занимаюсь ими только потому, что считаю, что они реализованы достаточно хорошо. Если речь о локализации, то эта работа уже тоже ведётся, но она не только к ед. изм. относится. А если о нелинейных единицах измерения, то не имею представления как можно упростить работу с ними. Третий вариант: выбор единиц для вывода по умолчанию, но это очень несущественная проблема, которая не столь актуальна для русскоязычных пользователей и, к тому же, имеет альтернативное решение в лице задания размерности вручную в конце выражения.

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

С уважением.
1 users liked this post
Tgeh 10/26/2010 5:41:00 AM
#16 Posted: 10/1/2010 7:12:52 AM
build_your_web

build_your_web

4 likes in 127 posts.

Group: User

1*'MΩ—{1000000*'kg*'m^2}/{Ohm*'s^3*'A^2}@Ohm

Т.е. даже когда я привожу к омам, он просто делит то, что сам посчитал, на омы и все равно выдает сопротивление в единицах типа: кг, м, с.
#17 Posted: 10/1/2010 7:15:30 AM
Andrey Ivashov

Andrey Ivashov

2269 likes in 3729 posts.

Group: Super Administrator

В Вашем примере Ohm не единица измерения, а переменная. Если это исправить, то получается 1*'MΩ—1000000@'ohm.
1 users liked this post
build_your_web 10/1/2010 7:48:00 AM
#18 Posted: 10/26/2010 5:48:42 AM
Tgeh

Tgeh

0 likes in 18 posts.

Group: User



Казалось бы f(x) задана верно, значения выводятся правильно, а вот график рисовать или интеграл считать как нужно отказывается. В чем подвох?
#19 Posted: 10/26/2010 7:44:03 AM
Tgeh

Tgeh

0 likes in 18 posts.

Group: User

Вот нашел как правильно изобразить свою ошибку))
Тут видно, что с(z) - значение меняет, а на интеграле как будто всегда с = const = 5 (т.е. значение функции в "0" )

[LIVE width=628 height=676]http://smath.info/live/?file=1750[/LIVE]
#20 Posted: 9/28/2013 4:17:08 PM
Alexandrum

Alexandrum

0 likes in 1 posts.

Group: User

Добрый вечер. Хочу попробовать освоится в этой замечательной программе.

Wrote

Удалять/добавлять новые строчки в line(..) не в конце пока что нельзя.



Не ожидается ли каких-то нововведений на этот счет в ближайшее время?
  • New Posts New Posts
  • No New Posts No New Posts