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 em baixo  Mensagem [Página 3 de 4]

#51 Re: PAP - em Sab 26 Abr 2014 - 16:00

EYPO

Super-membro
avatar

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

Ver perfil do usuário
conectado

#52 Re: PAP - em Sab 26 Abr 2014 - 16:49

DJPRMF

Administrador
avatar

Qual é exactamente o código que possui? Wink


____________________________________________




Não respondo a MP's de tópicos que podem ser colocados no forum. Ajude e seja ajudado por todos.
TugaTech | Host TugaTech
Ver perfil do usuário http://tugatech.com.pt https://www.facebook.com/DJPRMF https://twitter.com/dj_prmf DJPRMF https://plus.google.com/+PedroFernandes-DJPRMF?rel=author

#53 Re: PAP - em Sab 26 Abr 2014 - 17:25

EYPO

Super-membro
avatar

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

Ver perfil do usuário

#54 Re: PAP - em Sab 26 Abr 2014 - 18:15

Aprendiz

Avançado
avatar

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

Ver perfil do usuário http://goncalotomas.com

#55 Re: PAP - em Sab 26 Abr 2014 - 18:30

EYPO

Super-membro
avatar

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

Ver perfil do usuário

#56 Re: PAP - em Sab 26 Abr 2014 - 18:50

Aprendiz

Avançado
avatar

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

Ver perfil do usuário http://goncalotomas.com

#57 Re: PAP - em Sab 26 Abr 2014 - 19:27

EYPO

Super-membro
avatar

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.

Ver perfil do usuário

#58 Re: PAP - em Sab 26 Abr 2014 - 19:38

Aprendiz

Avançado
avatar

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

Ver perfil do usuário http://goncalotomas.com

#59 Re: PAP - em Sab 26 Abr 2014 - 20:16

EYPO

Super-membro
avatar

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

Ver perfil do usuário

#60 Re: PAP - em Sab 26 Abr 2014 - 20:34

Aprendiz

Avançado
avatar

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.

 

Ver perfil do usuário http://goncalotomas.com

#61 Re: PAP - em Sab 26 Abr 2014 - 20:40

EYPO

Super-membro
avatar

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. 

Ver perfil do usuário

#62 Re: PAP - em Sab 26 Abr 2014 - 21:04

EYPO

Super-membro
avatar

@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.

Ver perfil do usuário

#63 Re: PAP - em Sab 26 Abr 2014 - 21:19

Aprendiz

Avançado
avatar

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?

Ver perfil do usuário http://goncalotomas.com

#64 Re: PAP - em Sab 26 Abr 2014 - 21:26

EYPO

Super-membro
avatar

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

 

 

 

http://pastebin.com/KEviWCT8

Ver perfil do usuário

#65 Re: PAP - em Sab 26 Abr 2014 - 21:31

Aprendiz

Avançado
avatar

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.

Ver perfil do usuário http://goncalotomas.com

#66 Re: PAP - em Sab 26 Abr 2014 - 21:43

EYPO

Super-membro
avatar

Ver perfil do usuário

#67 Re: PAP - em Sab 26 Abr 2014 - 21:49

Aprendiz

Avançado
avatar

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 Sab 26 Abr 2014 - 21:59, editado 2 vez(es)

Ver perfil do usuário http://goncalotomas.com

#68 Re: PAP - em Sab 26 Abr 2014 - 21:56

EYPO

Super-membro
avatar

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

Vou testar Smile

Ver perfil do usuário

#69 Re: PAP - em Sab 26 Abr 2014 - 21:59

Aprendiz

Avançado
avatar

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.

Ver perfil do usuário http://goncalotomas.com

#70 Re: PAP - em Sab 26 Abr 2014 - 22:06

EYPO

Super-membro
avatar

Ok, irei testar.

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

Ver perfil do usuário

#71 Re: PAP - em Sab 26 Abr 2014 - 22:32

Aprendiz

Avançado
avatar

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

Ver perfil do usuário http://goncalotomas.com

#72 Re: PAP - em Sab 26 Abr 2014 - 23:26

EYPO

Super-membro
avatar

Boa noite,

 

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

Ver perfil do usuário

#73 Re: PAP - em Sab 26 Abr 2014 - 23:41

Aprendiz

Avançado
avatar

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

Ver perfil do usuário http://goncalotomas.com

#74 Re: PAP - em Sab 26 Abr 2014 - 23:55

EYPO

Super-membro
avatar

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.

Ver perfil do usuário

#75 Re: PAP - em Dom 27 Abr 2014 - 0:09

Aprendiz

Avançado
avatar

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
 

Ver perfil do usuário http://goncalotomas.com

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 3 de 4]

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

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum




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