Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

Dreigon Fenriz

Erro em soma de valores?

Mensagens Recomendadas

Dreigon Fenriz    0
Dreigon Fenriz

Ola esta dando um problema que não estou conseguindo resolver:

Estou tentando somar dois valores um inteiro com real,mas não esta saindo o resultado corretamente

tipo o valor 10 esta em uma variável real e ai tenho que somar um valor inteiro 1 e então o resultado sai 1,10.... quando eu queria que saísse 11,00....

Código

RESULTADO:=10; //é uma variavel real
NT:=1; //é uma variavel inteira
RESULTADO:=RESULTADO+NT;

já tente colocar NT como real mas mesmo assim o valor não sai corretamente

Editado por thoga31
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1090
nunopicado

o resultado sai 1,10....

As reticências são importantes... Mostra o valor completo que aparece!

Possivelmente o que te aparece é 1.10000000000000E+001, que é notação científica para o valor 11.

Se de todo as casas decimais não te importam, na hora de mostrar limita as casas decimais assim:

RESULTADO:=10; //é uma variavel real
NT:=1; //é uma variavel inteira
RESULTADO:=RESULTADO+NT;

writeln(Resultado:2:0);  // O :3:0 indica que o número terá pelo menos 2 caracteres, com 0 casas decimais

Nota que se não for para mostrar (se for para usar noutros cálculos), não precisas disto, pois o compilador entende a notação cientifica.

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1090
nunopicado

mas eu quero que o resultado saia 11.0000000000000E+001

O que tu queres não é muito relevante para as leis da matemática... :)

Queiras ou não, 11.0000000000000E+001 é 110, e não 11. ;)

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1090
nunopicado

mas como pego de 1.10000000000000E+001 somente 11

Para escrever no ecrã? Ou para quê?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1090
nunopicado

Como eu te dizia em cima, se é para mais cálculos, não tens de fazer nada, basta usar.

O compilador sabe que aquele valor é 11.

Só tens de te preocupar com isso na hora de mostrar ao utilizador, ou se for para converter para outro tipo de variável (string, integer, etc).

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1090
nunopicado

aqui não funcionou,estou utilizando dev-pascal,

Não importa onde, tem de funcionar! :)

Mostra o código que te está a falhar!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nunopicado    1090
nunopicado

assim,agora funcionou,mas o que eu queria nao era o 11 mostrado na tela mas que o valor da variavel fosse 11

É mesmo essa parte que ainda não entendeste, e por isso te está a causar confusão.

As variáveis real são guardadas pelo compilador em formato de notação científica.

Independentemente do formato, o valor é o mesmo.

O valor que lá tens é 11, apenas mostrado de maneira diferente, que é a que o compilador considera mais eficaz.

Ou seja, se queres na variável o valor 11, já o tens.

Se o queres lá o valor 11 mas no formato decimal, tens de usar variáveis integer, e não real.

Editado por nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    594
thoga31

Vou só fazer um sumário deste assunto.

Ao contrário de outras linguagens, Pascal permite realizar a soma directa de variáveis numéricas sem a realização de type casting uma vez que isso é feito automaticamente. Assim como a soma, também temos a subtracção, multiplicação e divisão real.

Colocado isto, convém referir que há várias formas de representação binária de um número real, e diferentes alcances, daí termos uma panóplia de tipos de dados numéricos. A nível interno nós não temos de nos preocupar muito com isso, a não ser que desejemos fazer cálculos bitwise. A grande questão que então se coloca é o output de resultados.

O output pode ser formatado com a sintaxe variavel : espaço [: arredondamento]. O arredondamento é opcional e só funciona com números reais.

Considere-se o seguinte:

var i : integer = 480;
   r : real = 53.185;

writeln('|', i, '|');
writeln('|', i:5, '|');

writeln('|', r, '|');
writeln('|', r:4:3, '|');

O output é o seguinte:

|480|
|  480|
| 5.31850000000000E+001|
|53.185|

Analisemos:

1) O número inteiro é colocado as is sem qualquer alteração.

2) O número inteiro deverá ocupar um mínimo de 5 caracteres. Caso não os ocupe a todos, dá espaços em branco à esquerda.

3) O número real é colocado as is, pelo que sai em notação científica, uma predefinição do Free Pascal.

4) O número real deverá ocupar no mínimo 4 caracteres (incluindo o ponto!), e ser arredondado a 3 casas decimais.

E pronto, eis um resumo que considero útil.


Knowledge is free!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.