powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 1 раз в 1 класс
25 сообщений из 25, страница 1 из 1
1 раз в 1 класс
    #37501467
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даётся какая-нить формула, например m*c*(T-t) лучше mc(T-t)
и даются значения m, c, T, t. как решить?)
на данный момент я при помощи mid, циклов и тд подставляю переменные и получаю например 2*4*(8-3), потом при помощи мид и сложныvb циклами решаю... но 35ое чувство подсказывает мне, что это делается как-то проще
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501472
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, давай свой анализатор формул, а мы его тут нагрузочными тестами баги поищем :)
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501485
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

багов нет, но мне кажется, что это делается как-то проще. а то от примесей мид, циклов и case'ов голова кругом...
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501566
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитайте про польскую нотацию...
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501579
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroбагов нет
зная твою квалификацию - не верю. Ну либо не твой код
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501596
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашёл пример...
Код: plaintext
1.
2.
3.
4.
Dim a, b, c, res As Double 
         a =  10  
         b =  5  
         c =  28  
         res = ( 2  * b - Math.Log10(a + b) * c) / (c /  4  -  1 )
фиг знает, что мне это дало
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501608
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroдаётся какая-нить формула, например m*c*(T-t) лучше mc(T-t)
и даются значения m, c, T, t. как решить?)
на данный момент я при помощи mid, циклов и тд подставляю переменные и получаю например 2*4*(8-3), потом при помощи мид и сложныvb циклами решаю... но 35ое чувство подсказывает мне, что это делается как-то проще
Во первых, читать учебники по теме "синтаксические анализаторы". Во вторых, читать про "трансляторы, компиляторы, интерпретаторы"

Если кратко, то:
Сначала прогоняешь текст через токенайзер - то есть, берешь текст по одной букве и проверяешь принадлежит эта буква к уже начатому "слову" или эта буква начало нового "слова". Будет полезно прочитать про Context Free Grammar.
Полученый набор слов кодируешь как можно короче для дальнейшей работы и попутно проверяешь "знаю я его или нет?" "может слово A идти сразу после слова B или нет?", тоже читать про CFG.
Кодировный список слов - это уже по существу программа на псевдо-коде. Делаешь себе "псевдо процессор" который получив команду что-то делает и скармливаешь этому процессору всю программу.
В итоге получишь что-то вроде интерпретатора с пред-компиляцией (а если будешь отдавать своему процессору каждое полученное слово сразу как только ты его распознал, то получится чистый интерпретатор).

mid там будет только один раз вызываться - при начальном разборе. Потом много циклов и case'ов, от них никуда не денешься.

Как вариант, если не хочется самому транслятор изобретать - берешь любимый язык, и ищешь как можно встроить существующий интерпретатор для него в свою программу. Это конечно если тебе нужен полноценный макро-язык с уже известным синтаксисом. Для VBS например, читать здесь: http://msdn.microsoft.com/en-us/library/t9d4xf28%28v=VS.94%29.aspx


Про обратную польскую нотацию почитать будет полезно конечно, но не обязательно. Если заниматься переводом математических формул в бесскобочную запись можно будет упростить собственно саму арифметическую часть, за счет некоторого усложнения парсера (в который прийдется встроить переводчик скобочная->бесскобочная запись).
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501636
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

сложновато... а вот этот пример:
Код: plaintext
1.
2.
3.
4.
Dim a, b, c, res As Double 
         a =  10  
         b =  5  
         c =  28  
         res = ( 2  * b - Math.Log10(a + b) * c) / (c /  4  -  1 )
тут вроде всё просто и при помощи функций vb. т.е. написать формулу m*c*(T-t)
Код: plaintext
1.
2.
3.
4.
5.
6.
'написать значение каждой переменной
m= 2 
c= 4 
T= 8 
t= 3 
rezultat = m*c*(T-t)
'правильно?
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501732
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroсложновато... Ничего сложного.

BelowZeroа вот этот пример:
Код: plaintext
1.
2.
3.
4.
Dim a, b, c, res As Double 
         a =  10  
         b =  5  
         c =  28  
         res = ( 2  * b - Math.Log10(a + b) * c) / (c /  4  -  1 )
тут вроде всё просто и при помощи функций vb. т.е. написать формулу m*c*(T-t)
Код: plaintext
1.
2.
3.
4.
5.
6.
'написать значение каждой переменной
m= 2 
c= 4 
T= 8 
t= 3 
rezultat = m*c*(T-t)
'правильно?
А это к чему?
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501782
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ScriptControl не катит?
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37501926
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroдаётся какая-нить формула, например m*c*(T-t) лучше mc(T-t)
и даются значения m, c, T, t. как решить?)
на данный момент я при помощи mid, циклов и тд подставляю переменные и получаю например 2*4*(8-3), потом при помощи мид и сложныvb циклами решаю... но 35ое чувство подсказывает мне, что это делается как-то проще
конечно проще:

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim m, c, T, t res As Double 
         m =  1  
         c =  2  
         T =  12 
         t =  10 
         res =  m*c*(T-t)
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37502472
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА ScriptControl не катит?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Комманда1_Click()
Dim Tx
Dim ST
Dim Q
Tx = "5 - 24 * X + 17 * X ^ 2 - (11 * X ^ 3) / 3 + (X ^ 4) / 4+sin(x)"
     ST = Replace(Tx, "X", p)
     ST = Replace(ST, ",", ".")
   MsgBox ScriptControl1.Eval(ST)
End Sub
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37502794
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755,

очень интересна вот эта строчка
Код: plaintext
MsgBox ScriptControl1.Eval(ST)
как добиться работы ScriptControl1.Eval? нужно установить какие-то компоненты или пакеты?
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503678
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключить в ссылках
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503765
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755,

а... можно поточнее? плз
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503781
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не подключал ссылки? это стандартная. Так и называется
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503852
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755,

спасибо, подключил. в форме вышеприведённый код 11515394 выделяется ScriptControl1 variable not gefined
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503869
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри.
не в ссылках, а в контролах надо.
и перетащить на форму
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503934
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755Никогда не подключал ссылки? это стандартная. Так и называется
добавлял, но не знал, что "references" это "ссылки".
подскажете, как называется ScriptControl1 в компонентах? там такого нет
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37503969
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelowZeroподскажете, как называется ScriptControl1 в компонентах? там такого нет
Приветствую тебя, тупоголовыйписательмегапрограмм!
Что в твоём понимании компоненты?
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37504030
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну следующая строчка в том же меню...
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37504086
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755,

у меня такой строчки в компонентах нет...

timtim,

лесом
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37504164
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
установи, зарегь.
путь куда на картинке
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37504168
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и не загружать объект, а только устоновив ссылку:

Код: plaintext
1.
2.
3.
4.
5.
6.
  Dim myScriptContol As MSScriptControl.ScriptControl
  Set myScriptContol = New MSScriptControl.ScriptControl
  myScriptContol.Language = "vbscript"
Tx = "5 - 24 * X + 17 * X ^ 2 - (11 * X ^ 3) / 3 + (X ^ 4) / 4+sin(x)"
     ST = Replace(Tx, "X",  12 )
     ST = Replace(ST, ",", ".")
  MsgBox myScriptContol.Eval(ST)
...
Рейтинг: 0 / 0
1 раз в 1 класс
    #37504204
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex77755,

спасибо! то, что было нужно)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / 1 раз в 1 класс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]