Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как создать функцию ?  (Прочитано 18231 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« : 26-03-2004 08:45 » 

:oops:  Можно ли создать функцию которая преобразует набор чисел в поле для ввода в одно число :?:  При этом используются символы +,-,*,/ т.е. математические операции (без скобок)

Например: Пользователь ввел 100+60-40/2
В результате преобразований должно получится значение 140 которое потом куда нибусь сохраняется.
[/quote]
Записан

Стену можно пробить только головой. Все остальное орудия.
Dusk
Команда клуба

ru
Offline Offline
Пол: Мужской
Редкий, но веселый вид


« Ответ #1 : 26-03-2004 09:04 » 

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

Человек, сделавший хотя бы шаг к цели, сразу становится мишенью для всех отставших
Опыт - это то, что появляется сразу после того, как он был так необходим...
Бывают минуты, когда у тебя есть секунды, чтобы исправить деланное часами и не получить последствия на годы...
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 26-03-2004 10:06 » 

У меня есть уверенность, что такие ф-ии уже есть - их не может не быть. Надо только поискать.

Если делать вручную, то не так все сложно. Есть такая вешь, как "обратная польская запись" - все операнды и операции выстраиваются в порядке убывания приоритетов и далее выполняется последовательное вычисление - стековая машина.
Строка "2*3+10/5" будет разложен и записан так: 2, 3, *, 10, 5, /, +
Работает так (в скобках буду показывать содержимое стека):
1) поместить в стек 2 (2)
2) поместить в стек 3 (3,2)
3) выполнить умножение двух чисел на вершине стека (6)
4) поместить в стек 10 (10,6)
5) поместить в стек 5 (5,10,6)
6) выполнить деление двух чисел на вершине стека (2,6)
7) выполнить сложение двух чисел на вершине стека ( 8 )
Т.е. главное - правильно разобрать выражение, а дальше уже пустяки. Ведь, есть еще и скобки, которые увеличивают приоритет и усложняют жизнь.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #3 : 26-03-2004 15:53 » 

Цитата

У меня есть уверенность, что такие ф-ии уже есть - их не может не быть. Надо только поискать.


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

Цитата

Есть такая вешь, как "обратная польская запись"

 
Первый раз слышу о таком (правда это и не удивительно). Расскажи поподробнее, а то у меня куча вопросов. Или хотя бы дай ссылку.

Как выстраиваются операторы и операнды? В VB существует такая функция или это алгоритм решения? .... ? .....?

Цитата

в скобках буду показывать содержимое стека


Что понимается под стеком, массив или переменная, или просто буфер?
Но по моему ни то не другое.

А что считается за вершину стека?

Цитата

Ведь, есть еще и скобки, которые увеличивают приоритет и усложняют жизнь.


Куда мне до этого. Я сделала допущение, что скобок по определению быть не может.

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


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

Стену можно пробить только головой. Все остальное орудия.
Доброжелатель
Гость
« Ответ #4 : 27-03-2004 13:38 » 

Если используешь Excel, тогда тебе поможет функция Evaluate
если Access, тогда  Eval
ну а если чистый VB тогда придётся писать самой Ага
как вариант мохно подключить ссылку на Excel или Access, но тогда появляются ненужные зависимости ;(
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #5 : 27-03-2004 13:49 » 

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

А птичку нашу прошу не обижать!!!
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 27-03-2004 15:49 » 

Алёна, пока есть доброжелатели, можно не забивать себе голову всякими мелочами вроде стеков. Отлично
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #7 : 28-03-2004 11:39 » 

Цитата

Алёна, пока есть доброжелатели, можно не забивать себе голову всякими мелочами вроде стеков.


Но всё же интересно что это такое.

Цитата

если Access, тогда Eval



У меня Access, а в Excel вообще такое одтельно описывать не надо, там идет все на автомате без обращения к функции.
Записан

Стену можно пробить только головой. Все остальное орудия.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 28-03-2004 16:22 » 

Алёна, ну ко ли интересно то немного поделюсь Улыбаюсь

1) Стек (stack).
В переводе с английского - кипа, стопка. Вот как раз "стопка" (в безалкогольном смысле) наиболее точно описывает это.
Стек - это метод хранения данных. В стек данные помещаются и изымаются с одной стороны, именуемой вершиной стека. Стек еще называют LIFO (last in - first out) - "последним пришел - первым уйдет".

2) Обратная польская запись.
Своими словами я долго буду описывать - проще почитать что уже написано:
Обpатная польская нотация
Перевод простых арифметических и логических выражений в польскую запись
Калькулятор на базе Обратной Польской Записи
yandex
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #9 : 29-03-2004 14:05 » 

RXL, а как ты делаешь ссылку ?

Знаю как в Word делать, а здесь тегов не знаю.
Записан

Стену можно пробить только головой. Все остальное орудия.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 30-03-2004 00:45 » 

Цитата: Алёна
RXL, а как ты делаешь ссылку ?
Знаю как в Word делать, а здесь тегов не знаю.


В режиме "не быстрого" ответа ( либо по кнопке "Предв. просмотр" либо по "Цитата") и там кнопочка есть URL.
а тег называется [url] и соответственно закрывающий со слэшем [url]
не пишу а то он его в лик перегонит.

А обратная польская запись - это вещь!!! Не пожелей времени. Сначала хотел написать, а потом посмотрел линки RXL, таи всё здорово написано. Могу только добавить, что наряду с операторами можно использовать и функции их приоритет приравнивается к приоритету скобок. Такая песня получается!
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 30-03-2004 10:03 » 

Алёна, я пишу все руками: набиваю "коментарий" - получается красиво и культурно. Делать так, а не просто кидать ссылки, меня сподвигли длиннющие url-ы яндекса - из-за них страница становится слишком широкой и не умещается на экране. Потом, так нагляднее.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алёна
Молодой специалист

ru
Offline Offline
Блондинка...


WWW
« Ответ #12 : 31-03-2004 07:14 » 

Переход на главную страницу форума
Записан

Стену можно пробить только головой. Все остальное орудия.
Alexanr
Гость
« Ответ #13 : 19-04-2004 14:05 » new

Если надо напиши мне на babun1@rambler.ru и я отправлю тебе эту функцию!!! 8)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines