Ir ao conteúdo

Ajuda pascal - Casas Decimais


Visitante: matheuscosta3

Posts recomendados

Visitante: matheuscosta3
 
Postado

Ola, minha duvida é a seguinte: Estou criando alguns programas, nos quais preciso obter o valor do erro de um calculo.

Da seguinte forma: Eu crio um programa para informar o valor de uma função, a partir desse momento informo também o numero aproximado do resultado dessa função, com duas casas decimais. Até aqui tudo ok.

O problema é que nao estou conseguindo calcular o erro, que seria o resultado com todas as casas decimais, menos o valor aproximado. O Pascal não esta reconhecendo a forma como estou tentando.

O que ja fiz: Tentei efetuar uma subtração comum, da seguinte maneira: ( (Função) - (funçao:0:2) ) . E também tentei atribuir a uma variável (a) qualquer o valor da funçao:0:2, para depois efetuar a subtração como: (Função - a).

O erro que o programa me informa é sempre o mesmo: " ':' não esperado. ".

Lembrando que consigo mostrar na tela o valor da funçao:0:2. So não consigo efetuar a subtração considerando apenas duas casa decimais da função.

  • Membro VIP
Postado
Ola, minha duvida é a seguinte: Estou criando alguns programas, nos quais preciso obter o valor do erro de um calculo.

Da seguinte forma: Eu crio um programa para informar o valor de uma função, a partir desse momento informo também o numero aproximado do resultado dessa função, com duas casas decimais. Até aqui tudo ok.

O problema é que nao estou conseguindo calcular o erro, que seria o resultado com todas as casas decimais, menos o valor aproximado. O Pascal não esta reconhecendo a forma como estou tentando.

O que ja fiz: Tentei efetuar uma subtração comum, da seguinte maneira: ( (Função) - (funçao:0:2) ) . E também tentei atribuir a uma variável (a) qualquer o valor da funçao:0:2, para depois efetuar a subtração como: (Função - a).

O erro que o programa me informa é sempre o mesmo: " ':' não esperado. ".

Lembrando que consigo mostrar na tela o valor da funçao:0:2. So não consigo efetuar a subtração considerando apenas duas casa decimais da função.

Olá, experimente converter o funçao:0:2 para string e reconverter o resultado para real novamente...

Vide comandos: STR() e VAL() .

No aguardo.

Visitante: matheuscosta3
 
Postado
Olá, experimente converter o funçao:0:2 para string e reconverter o resultado para real novamente...

Vide comandos: STR() e VAL() .

No aguardo.

Acho que não entendi muito bem. A minha "funçao:0:2" é sempre a mesma "funçao". Se eu declarar ela como string vai me informar incompatibilidade de valores.

  • Membro VIP
Postado
Acho que não entendi muito bem.

Olá, acho que comentei certo, mas me expressei mal..

Então, você pesquisou sobre os comandos Val() e Str()? (senão, pesquise-os, você vai entender melhor)

Vamos lá, se você está utilizando a formatação :x:y, significa que a variável é do tipo real (ou similar), correto? (já que tem casas decimais)

E como já foi verificado, efetuar a conta utilizando essa formatação diretamente não está funcionando... A minha sugestão é você converter o valor dessa variável para string, e depois converter o resultado para real novamente..., ou seja, ao converter você vai passar como parâmetro a variável funcao já com a formatação, utilizando funcao:0:2. Você terá uma string com os números no formato de duas casas decimais (mas será uma string, e não um número). Ao voltar para real, o valor só terá duas casas decimais.. (as outras casas decimais ficaram com 000000...).

O :x:y (ex.: valor:0:3), serve simplesmente para dizer que "retorne o valor que está na variável com X casas reservadas a esquerda, e Y casas decimais", mas o número original continuará lá. Ao converter utilizado a formatação, o resultado só terá as Y casas decimais de fato... quando retornar para real, o valor passará a ter somente esse valor com duas casas decimais.

Ex.:

VALOR ORIGINAL EM REAL= 193.324276844

CONVERTIDO PARA STRING = 193.32

CONVERTIDO PARA REAL = 193.32

Obs1:

A minha "funçao:0:2" é sempre a mesma "funçao". Se eu declarar ela como string vai me informar incompatibilidade de valores

Acho que você confundiu "converter" com "mudar de tipo". O tipo dela não vai ser alterada, você simplesmente vai pegar o "valor dela" e "converter para outro tipo de dado"...

Obs2.: Essa no momento é a única maneira que sei para "remover o restante das casas decimais"... se alguém souber outra forma, fico no aguardo também...

  • 2 semanas depois...
  • Membro VIP
Postado

Olá, acho que comentei certo, mas me expressei mal..

Então, você pesquisou sobre os comandos Val() e Str()? (senão, pesquise-os, você vai entender melhor)

Vamos lá, se você está utilizando a formatação :x:y, significa que a variável é do tipo real (ou similar), correto? (já que tem casas decimais)

E como já foi verificado, efetuar a conta utilizando essa formatação diretamente não está funcionando... A minha sugestão é você converter o valor dessa variável para string, e depois converter o resultado para real novamente..., ou seja, ao converter você vai passar como parâmetro a variável funcao já com a formatação, utilizando funcao:0:2. Você terá uma string com os números no formato de duas casas decimais (mas será uma string, e não um número). Ao voltar para real, o valor só terá duas casas decimais.. (as outras casas decimais ficaram com 000000...).

O :x:y (ex.: valor:0:3), serve simplesmente para dizer que "retorne o valor que está na variável com X casas reservadas a esquerda, e Y casas decimais", mas o número original continuará lá. Ao converter utilizado a formatação, o resultado só terá as Y casas decimais de fato... quando retornar para real, o valor passará a ter somente esse valor com duas casas decimais.

Ex.:

VALOR ORIGINAL EM REAL= 193.324276844

CONVERTIDO PARA STRING = 193.32

CONVERTIDO PARA REAL = 193.32

Obs1:

Acho que você confundiu "converter" com "mudar de tipo". O tipo dela não vai ser alterada, você simplesmente vai pegar o "valor dela" e "converter para outro tipo de dado"...

Obs2.: Essa no momento é a única maneira que sei para "remover o restante das casas decimais"... se alguém souber outra forma, fico no aguardo também...

Como se passou mais de uma semana e não houve respostas, vou postar um exemplo... quem sabe pode ser útil para outros também..

var
valor :real;
strValor:string;
code :byte; //código status de operação (a procedure pede uma variável)
//obs.: byte = 0 a 225. Se não compilar mude para integer)
BEGIN
valor:=37.42626;
writeln(valor:0:10);
Str(valor:0:2,strValor); //converte de real para string (neste exemplo com
//duas casas decimais)
Val(strValor,valor,code); //converte de string para real
writeln(valor:0:10); //o valor vai ter somente duas casas decimais (zero a
//direita não conta né?? foi só para demonstrar)
readln;

(*
Observação: o valor é sempre arredondado, seguindo a regra do compilador
Ex.: se casa posterior maior ou igual a 6, atual soma em 1;
*)
END.

Visitante: matheuscosta3
 
Postado
Como se passou mais de uma semana e não houve respostas, vou postar um exemplo... quem sabe pode ser útil para outros também..

var
valor :real;
strValor:string;
code :byte; //código status de operação (a procedure pede uma variável)
//obs.: byte = 0 a 225. Se não compilar mude para integer)
BEGIN
valor:=37.42626;
writeln(valor:0:10);
Str(valor:0:2,strValor); //converte de real para string (neste exemplo com
//duas casas decimais)
Val(strValor,valor,code); //converte de string para real
writeln(valor:0:10); //o valor vai ter somente duas casas decimais (zero a
//direita não conta né?? foi só para demonstrar)
readln;

(*
Observação: o valor é sempre arredondado, seguindo a regra do compilador
Ex.: se casa posterior maior ou igual a 6, atual soma em 1;
*)
END.

Desculpe o aparente descaso. Não tive muito tempo essa semana. Obrigado pela boa vontade.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!