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

Программирование: локальные переменные - Сообщения

#1 Опубликовано: 17.09.2010 06:38:13
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

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

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

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

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

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

Wrote

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


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

Wrote

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


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

С уважением, Андрей Ивашов.
#3 Опубликовано: 18.09.2010 11:18:49
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

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

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

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

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

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

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

Wrote

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


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

Wrote

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


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

Wrote

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


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

Wrote

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


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

Wrote

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


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

С уважением, Андрей Ивашов.
#5 Опубликовано: 19.09.2010 13:38:00
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

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

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

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

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

Wrote

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


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


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

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


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

Спасибо за вопросы. С уважением.
#7 Опубликовано: 20.09.2010 03:03:56
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

smath
ОК, благодарю за пояснения, ждем новых версий.
#8 Опубликовано: 21.09.2010 13:51:55
iiii01

iiii01

0 сообщений из 7 понравились пользователям.

Группа: User

Добрый день !

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

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

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

Спасибо
#9 Опубликовано: 21.09.2010 14:36:21
Andrey Ivashov

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

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

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

С уважением.
#10 Опубликовано: 23.09.2010 02:24:26
Antech

Antech

2 сообщений из 35 понравились пользователям.

Группа: User

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

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

f(x,y,z,...)=|...
             |...
             |...
             |...
             |...
#11 Опубликовано: 23.09.2010 08:55:53
Andrey Ivashov

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

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

Wrote

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


Согласен, сделаю.
1 пользователям понравился этот пост
Antech 24.09.2010 15:03:00
#12 Опубликовано: 30.09.2010 19:45:35
Andrey Ivashov

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

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

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

С уважением, Андрей Ивашов.
#13 Опубликовано: 01.10.2010 04:02:31
Samar

Samar

2 сообщений из 107 понравились пользователям.

Группа: User

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

p.s.: можно будет создавать свои собственные библиотеки, при этом не вникая в создание плагинов.
www.math.by
#14 Опубликовано: 01.10.2010 04:29:06
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

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

Но считаю что более приоритетная задача: комфортная работа с размерностями. Сейчас с ними дело не так хорошо как хотелось бы.
#15 Опубликовано: 01.10.2010 06:00:25
Andrey Ivashov

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

Wrote

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


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

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

С уважением.
1 пользователям понравился этот пост
Tgeh 26.10.2010 05:41:00
#16 Опубликовано: 01.10.2010 07:12:52
build_your_web

build_your_web

4 сообщений из 127 понравились пользователям.

Группа: User

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

Т.е. даже когда я привожу к омам, он просто делит то, что сам посчитал, на омы и все равно выдает сопротивление в единицах типа: кг, м, с.
#17 Опубликовано: 01.10.2010 07:15:30
Andrey Ivashov

Andrey Ivashov

2269 сообщений из 3729 понравились пользователям.

Группа: Super Administrator

В Вашем примере Ohm не единица измерения, а переменная. Если это исправить, то получается 1*'MΩ—1000000@'ohm.
1 пользователям понравился этот пост
build_your_web 01.10.2010 07:48:00
#18 Опубликовано: 26.10.2010 05:48:42
Tgeh

Tgeh

0 сообщений из 18 понравились пользователям.

Группа: User



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

Tgeh

0 сообщений из 18 понравились пользователям.

Группа: User

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

[LIVE width=628 height=676]http://smath.info/live/?file=1750[/LIVE]
#20 Опубликовано: 28.09.2013 16:17:08
Alexandrum

Alexandrum

0 сообщений из 1 понравились пользователям.

Группа: User

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

Wrote

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



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