1. TugaTech » Programação, Scripts e Webmasters » Programação, Scripts e Webmasters
Siga-nos

Realize o Login na sua conta ou Registe-se para participar.

Ir à página : Anterior  1, 2, 3, 4  Seguinte

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 3 de 4]

#51PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 16:00

EYPO

Super-membro
EYPO

Boa tarde,

 

Eu estou a criar a calculadora, e deparei-me com uma situação, a calculadora em alguns casos dá-me valor arredondado e em outros casos não.

Por exemplo se eu fizer 3*4 a calculadora dá 0,75, mas se eu inserir 3*pi ela dá 9 em vez de dar 9,4247(..) 

 

Haverá alguma coisa que eu possa fazer quanto a isso?

 

Cumps

Conectado

#52PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 16:49

DJPRMF

Administrador
DJPRMF

Qual é exactamente o código que possui? Wink


____________________________________________

PAP - Página 3 Tugatechuserbar
PAP - Página 3 3
PAP - Página 3 2
TugaTech || Host TugaTech
https://tugatech.com.pt https://www.facebook.com/DJPRMF https://twitter.com/dj_prmf DJPRMF

#53PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 17:25

EYPO

Super-membro
EYPO

Está a referir-se ao código da form?

#54PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 18:15

Aprendiz

Avançado
Aprendiz

Se a calculadora dá resultados corretos com valores considerados normais (não são constantes importantes como o pi ou o número de Neper), fazia algum sentido que o problema fosse na atribuição de um valor ao pi.

Aliás, se fizer as contas vê que:

 

3*pi=9 <=>
<=> pi = 9/3 <=>
<=> pi = 3       (<- não está correcto!) 

Ou seja, pi, por razões que ainda desconheço, está a assumir um valor errado. Como pi toma o valor 3 (diferente de 3.0), a razão poderá estar por detrás de ter associado o pi como um inteiro, o que estaria errado. O pi deve ser representado com um float ou double (de preferência double, porque tem o dobro da precisão).

 

Pode verificar esta situação?

Se por acaso tiver tudo bem, agradecia que fizesse como o DJPRMF disse, e colocar aqui o código do form da calculadora. Smile

http://goncalotomas.com

#55PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 18:30

EYPO

Super-membro
EYPO

Deixe ver se percebi, então eu teria de criar uma var do tipo:

pi As Double

Depois dizer que:

pi = "3,14159265358979323846264338327950288"

E que:

TxtCalc.Text = TxtCalc.Text + "pi" 

 

Não esta a funcionar, devo estar a fazer algo errado.. Sad

#56PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 18:50

Aprendiz

Avançado
Aprendiz

A primeira parte está correta. A partir de agora já tem uma variável (podia também ser uma constante) com o valor de pi. Agora esta linha baralhou-me um pouco:

 

TxtCalc.Text = TxtCalc.Text + "pi" 

Traduzindo para português, o que se lê é:

O novo valor de TxtCalc.Text é o resultado de (TxtCalc.Text + "pi")

 

 

Por não ser costume programar na linguagem que está a usar, não tenho a certeza do que estou a dizer, mas julgo que (TxtCalc.Text + "pi") apenas coloca o valor de pi junto ao que já estava anteriormente, o que piora as coisas e não resolve nada.

 

 

Como é que fez para os outros números? (Veja o código, por exemplo, quando é feito o produto entre dois números.) Não consegue utilizar o mesmo processo para a soma/produto/divisão/subtração seguindo os mesmos passos mas utilizando a variável que criou?

 

Se pretender ajuda mais detalhada deve colocar o código para que possamos ajudar melhor... Very Happy

http://goncalotomas.com

#57PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 19:27

EYPO

Super-membro
EYPO

Tá ai o código dos botões + - / * =

 

http://pastebin.com/U47xsrfE

 

 

E sim, o que estava a dizer é um bocado confuso, já reparei que não esta lá muito certo.

#58PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 19:38

Aprendiz

Avançado
Aprendiz

O pi é um botão na sua calculadora?

Se sim, tudo bem, se não, devia ser (confira na calculadora do Windows se existe ou não um botão para o pi) Very Happy

 

Uma vez que tenha definido o botão pi, basta apenas dizer que quando for clicado:

 

a = pi OU b = pi (depende de como quiser implementar, tem de completar o resto do código mas dá das duas formas... Smile)

 

Vejo também que no código que apresentou não consigo ver o valor de pi, não se esqueça de lhe dar valor antes de testar!

 

Experimente e volte a dizer qualquer coisa Very Happy

http://goncalotomas.com

#59PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 20:16

EYPO

Super-membro
EYPO

Peço imensa desculpas, mas fiquei sem perceber :$

 

Se eu for fazer como fiz para o caso da soma, tinha d estar a assumir que eu iria ter de fazer uma conta do género x + pi , pois eu teria de dizer que:

 

 resultado = a + pi
 TxtCalc.Text = resultado 

 

 

Mas isto estaria errado, pois se eu quisesse fazer x * pi ja não daria..

 

 

Deixo aqui o codigo da form toda:

http://pastebin.com/yV9FmP9H

#60PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 20:34

Aprendiz

Avançado
Aprendiz

Sem problemas.

 

Voltamos uns passos atrás. Experimente fazer exatamente o que estava a dizer
(TxtCalc.Text = TxtCalc.Text + "pi") mas sem aspas no pi, ou seja:

TxtCalc.Text = TxtCalc.Text + pi 

 

Tinha razão quando estava a dizer isso, só lhe faltava era perceber que quando se usa algo entre aspas é para definir na altura o que vai ser escrito. Como já tinha escrito

pi As Double

Depois dizer que:

pi = "3,14159265358979323846264338327950288"

 

O seu programa agora já sabe que quando se refere a pi refere-se a "3,14159265358979323846264338327950288".

 

Isto significa que não precisa de usar as aspas quando se refere ao pi, quando estiver a dar o novo valor a TxtCalc.Text Smile

 

Resumindo: tinha razão, eu é que me confundi todo e pensei que estivesse a fazer uma coisa quando já estava no bom caminho e faltava só um pouco.

TxtCalc.Text = TxtCalc.Text + pi 

À partida, agora deverá funcionar.

 

http://goncalotomas.com

#61PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 20:40

EYPO

Super-membro
EYPO

Depois de mandar a minha ultima mensagem fui tentar desta forma:

 

De facto não deu erro, mas quando fui fazer um teste: 3*pi deu um resultado de 9, e seria suposto dar algo como 9,424777960(..)

 

Irei tentar da forma que estávamos a tentar agora. 

#62PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:04

EYPO

Super-membro
EYPO

Aprendiz escreveu:

Sem problemas.

 

Voltamos uns passos atrás. Experimente fazer exatamente o que estava a dizer
(TxtCalc.Text = TxtCalc.Text + "pi") mas sem aspas no pi, ou seja:

TxtCalc.Text = TxtCalc.Text + pi 

 

Tinha razão quando estava a dizer isso, só lhe faltava era perceber que quando se usa algo entre aspas é para definir na altura o que vai ser escrito. Como já tinha escrito

pi As Double

Depois dizer que:

pi = "3,14159265358979323846264338327950288"

 

O seu programa agora já sabe que quando se refere a pi refere-se a "3,14159265358979323846264338327950288".

 

Isto significa que não precisa de usar as aspas quando se refere ao pi, quando estiver a dar o novo valor a TxtCalc.Text Smile

 

Resumindo: tinha razão, eu é que me confundi todo e pensei que estivesse a fazer uma coisa quando já estava no bom caminho e faltava só um pouco.

TxtCalc.Text = TxtCalc.Text + pi 

À partida, agora deverá funcionar.

 

 

Desta forma dá erro. Sad 
Parece-me que não é assim.

#63PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:19

Aprendiz

Avançado
Aprendiz

Com a teimosia que tenho vai ser difícil desistir por isso não se preocupe... Very Happy

Pode fornecer novamente o código de toda a form, incluindo a parte em que declara e atribui valor a pi?

http://goncalotomas.com

#64PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:26

EYPO

Super-membro
EYPO

O código do PI esta em comentário porque tenho estado a testar de algumas maneiras.

 

 

 

http://pastebin.com/KEviWCT8

#65PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:31

Aprendiz

Avançado
Aprendiz

Pode indicar-me o que sucede quando clica no botão, se acontece alguma coisa ou se aparece alguma mensagem de erro?
Se aparecer uma mensagem de erro gostaria de saber o que diz, por favor.

http://goncalotomas.com

#66PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:43

EYPO

Super-membro
EYPO

#67PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:49

Aprendiz

Avançado
Aprendiz

Obrigado, era mesmo esse erro que queria ver. O erro traduz-se para:

"Não consegui converter "" de TxtCalc.Text para Double para fazer a soma"

(o compilador pensa que está a somar dois Doubles, o TxtCalc e pi, e não está a conseguir converter TxtCalc para Double, com toda a razão... Smile)

 

O problema aqui é que está a fazer TxtCalc.txt = TxtCalc.text + pi , o que significa que quer acrescentar pi ao que já lá estiver... Se alguém inserir um número com uma vírgula (imagine-se, "0,5"), depois de adicionar pi iria gerar um erro sempre que tentasse fazer uma operação com esse número.

Por esse mesmo caso sugiro substituir completamente o que lá estiver, por pi.

Ou seja:

TxtCalc.Text = pi

 

Caso queira manter a função e ficar com esse possível erro (se alguém fizer isso propositadamente o seu programa irá crashar...), por favor veja estas instruções em vez das de cima.

 

Nesse caso, experimente fazer um cast para String de pi.

Experimente:

TxtCalc.Text = TxtCalc.Text + (String)pi

 

Volto a sugerir que a aconselho utilizar a primeira alternativa, já que é mais segura.

 

Nota: Uma vez que esta situação sugeriria também verificar as ações do método que trata dos cliques na vírgula... Quem é que impede de alguém introduzir um número "0,,0,,0" e realizar uma operação com ele? Certamente iria crashar... Felizmente, existem formas de tratar destas situações, que, a seu tempo e se for de sua vontade certamente poderemos abordar... Wink



Última edição por Aprendiz em Sáb 26 Abr 2014 - 21:59, editado 2 vez(es)

http://goncalotomas.com

#68PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:56

EYPO

Super-membro
EYPO

A primeira alternativa que seria usar " TxtCalc.Text = pi " certo? 

Vou testar Smile

#69PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 21:59

Aprendiz

Avançado
Aprendiz

Exato, é a forma mais segura de resolver as coisas. Leia apenas as notas finais da minha última resposta relativamente a outros problemas que poderá ter no futuro, caso alguém queira propositadamente crashar o seu programa.

http://goncalotomas.com

#70PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 22:06

EYPO

Super-membro
EYPO

Ok, irei testar.

Em relação à nota se for algo que não lhe ocupe muito tempo, aceitaria muito a sua ajuda Smile

#71PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 22:32

Aprendiz

Avançado
Aprendiz

Não é caso de ser algo que ocupe muito ou pouco tempo, é algo que enquanto técnico de sistemas informáticos deveria saber. Tenho um familiar num curso parecido e por pena dele não aprendeu uma fracção do que podia ter aprendido, e existem alguns conceitos chave que têm de ficar bem assentes porque não tenha dúvidas: se começar a desenvolver aplicações vai sempre haver alguém disposto a testá-las e achar falhas de segurança. Se forem feitos alguns esforços para evitar essas coisas então certamente essa pessoa irá ter dificuldades. Esses esforços não são nada de mais, é apenas um conjunto de tácticas de boa programação aliado a uma mente que consiga procurar com facilidade por onde pode o programa rebentar. Smile
Escusado será dizer que em caso algum deverá um programa seu crashar (e note-se que crashar é completamente diferente de terminar o programa e notificar o utilizador da razão do fecho)...

 

Sem me querer alongar por enquanto, vamos tentar primeiro resolver a questão do pi, e depois passaremos à próxima... Very Happy

http://goncalotomas.com

#72PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 23:26

EYPO

Super-membro
EYPO

Boa noite,

 

Bem o ' TxtCalc.Text = pi ' funcionou, mas quando testei '3*9' continuou a dar o valor 9. Voltando ao mesmo 

#73PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 23:41

Aprendiz

Avançado
Aprendiz

Novamente, vamos por outro lado.

 

Consegue localizar a linha:

b = Val(TxtCalc.Text) ?

 

O que acontece aqui é que parece que a função Val apenas consegue converter o 3, o que dá a entender que o sistema decimal pode estar implementado com ponto "." em vez de ser com vírgula "," (ele não reconhece a vírgula como possível parte de um número, mas pode ser que reconheça o ponto).

Se assim, for, declare pi como "3.1415927...." (utilizando um ponto), substitua todas as ocorrências em que é acrescentado uma vírgula por um ponto e tente novamente... Smile

http://goncalotomas.com

#74PAP - Página 3 Empty Re: PAP - Sáb 26 Abr 2014 - 23:55

EYPO

Super-membro
EYPO

Penso nao possuir ' b = Val(TxtCalc.Text) ' no código.

 

Ao substituir a virgula pelo ponto o programa dá o mesmo erro que mostrei na imagem de a pouco.

#75PAP - Página 3 Empty Re: PAP - Dom 27 Abr 2014 - 0:09

Aprendiz

Avançado
Aprendiz

De acordo com o pastebin das 21:26, possuí. Smile

 

Passo a citar: link

 

Esse é o código do botão de igual, e era a segunda linha que aparece nesse excerto que interessa... Smile

 

Substituiu apenas no pi? Guarde a versão em que lhe dava 3 e depois aplique a mudança das vírgulas todas para pontos. Teste novamente.

Se der, ótimo. Se não der, voltamos à versão das vírgulas, e iremos substituir a linha que lhe disse por:


b = Double.MinValue.ToString()

If Double.TryParse(TxtCalc.Text, b) Then 'sucesso

Else 'erro

End If
 

http://goncalotomas.com

Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 3 de 4]

Ir à página : Anterior  1, 2, 3, 4  Seguinte

Permissões neste sub-fórum
Não podes responder a tópicos




Aplicações do TugaTechAplicações TugaTechDiscord do TugaTechDiscord do TugaTechRSS TugaTechRSS do TugaTechSpeedtest TugaTechSpeedtest TugatechHost TugaTechHost TugaTech