ESTRANHO

IGNORANTE 18/01/2012 09:50:00
#393518
Olá

Tenho o código seguinte:

Private Sub Command2_Click()

Text1.Text = [Ô]5*Sqr(3)/2+5/2[Ô]

parte = Split(Text1, [Ô]+[Ô])

a = Val(parte(0))
b = Val(parte(1))

Label1 = parte(0)
Label2 = parte(1)

Label3 = a
Label4 = b

Label5 = a ^ 2
Label6 = b ^ 2

end sub

Os label são apenas para verificar os valores e prosseguir o trabalho que dá errado.

Vem

label1 e label2 correctos

label3=5 e deveria ser 5*sqr(3)/2
label4=5 e deveria ser 5/2

label5=25 e deveria ser 75/4
label6=25 e deveria ser 25/4


Onde estará o erro?

Agradeço desde já as repostas.
MGALDINO 18/01/2012 10:51:54
#393530
Fera,

Na Label3 e Label4 não saiu a expressão matematica porque voce colocou a = Val(parte(0)) b = Val(parte(1)).
Certo para aparecer seria sem o Val.


E na Label5 e Label6 voce não vai conseguir passar uma expressão matemática em uma variável e conseguir executar isso.

Não sei qual o objetivo disso mais seria.


Label5 = (5*Sqr(3)/2) ^ 2
Label6 = (5/2) ^ 2

Sei la ou mais ou menos assim..
IGNORANTE 18/01/2012 11:26:27
#393536
Eu coloco

a = Val(parte(0))
b = Val(parte(1))

porque para fazer cálculos, tenho de ter valores e não strings.

E eu quero que nas label 5 e 6 saiam os valores numéricos resultado das operações.


EXPERTVB6 18/01/2012 12:38:08
#393546
Conteúdo do texto = 5*Sqr(3)/2+5/2
split ta dividindo o texto pelo delimitador [Ô]+[Ô]

índice 0 da array: 5*Sqr(3)/2
índice 1 da array: 5/2


e vc ta dando VAL no indice 0

não tem como usar VAL em [Ô]5*Sqr(3)/2[Ô] pois o indice 0 se transformou em String

use option explicit
declare as variaveis e vc verá os erros
e terá que programar mais que isso pra fazer um leitor de expressão numerica
IGNORANTE 18/01/2012 12:56:32
#393548
[Ô]não tem como usar VAL em [Ô]5*Sqr(3)/2[Ô] pois o indice 0 se transformou em String[Ô]

Mas é precisamente por se ter transformado em string que tenho de usar Val.


EXPERTVB6 18/01/2012 13:09:00
#393550
vc ta equivocado com VAL. aí tem caracteres A-Z dentro desse indice. VAL é só pra STRINGS com NUMEROS. não funciona de A a Z.

exemplo quando funciona:

Dim Texto as string
Dim Texto2 as string
Dim Resultado As Long

Texto = [Ô]345[Ô]
Texto2 = [Ô]22[Ô]

Resultado = Val(Texto) + Val(Texto2)

Exemplo quando não funciona:

Dim Texto as string
Dim Texto2 as string
Dim Resultado As Long

Texto = [Ô]eu sou doido 10 vezes[Ô]
Texto2 = [Ô]50[Ô]

Resultado = Val(Texto) + Val(Texto2)

como vai somar que sou doido 10 vezes + 50 usando VAL????

IGNORANTE 18/01/2012 13:32:12
#393555
Eu compreendo o que diz mas não concordo.
Esse exemplo é com uma string literal e outra com um valor numérico.
Nas minhas são ambas valores numéricos.

De qualquer modo, muitíssimo obrigado.

Eu tenho uma norma: quando não consigo resolver uma questão, contorno-a e tento resolvê-la de uma forma completamente diferente.
Foi o que fiz e já solucionei o problema.

Mais uma vez, obrigado pela ajuda.
EXPERTVB6 18/01/2012 13:32:46
#393556
se eu fosse vc faria assim
Criava uma variavel array contendo a lista de todos os eperadores matematicos ex: Sqr + - * / ^ ......
usaria split pra dividir toda a expressão numerica com os operadores
criar rotina pra cada tipo de operação matematica
e a sequencia de prioridades para calculos dos valores coletados nos primeiros indices que ficam entre () [] {}
e aí vc cria todas as rotinas necessarias pra esse loop

teoricamente parece facil mas na pratica vai ficar uns bons dias programando
Tópico encerrado , respostas não são mais permitidas