Ir ao conteúdo
  • Cadastre-se

VAL em delphi/Pascal...


adler_coelho16

Posts recomendados

VAL (clicar) converte uma string em real ou integer.

(Vou exemplificar em Pascal, é o mesmo)

Val(X, Y, ErroPos);
[I](*
X: String
Y: Real/Integer
ErroPos: Integer
*)[/I]

Veja o exemplo:


Uses
Crt;
Var
X: String;
Y: Integer;
Z: Real;
ErroPos: Integer; //não agrupei para manter a ordem
Begin
ReadKey;

X:='5689.4';
Val(X, Z, ErroPos); //Z será 5689.4
WriteLn('Z = ',Z:0:1);
WriteLn('ErroPos = ',ErroPos:0); //ErroPos será ZERO pois não houve erro
ReadKey;
WriteLn('--------------------');

X:='5689.4';
Val(X, Y, ErroPos); //Y será indefinido, pois é inteiro
WriteLn('ErroPos = ',ErroPos:0); //ErroPos será 5, posição do ponto, não permitido em inteiro
ReadKey;
WriteLn('--------------------');

X:='7231';
Val(X, Z, ErroPos); //Y será real 7231
WriteLn('Z = ',Z:0:1);
WriteLn('ErroPos = ',ErroPos:0); //ErroPos será ZERO pois não houve erro
ReadKey;
WriteLn('--------------------');

X:='7231';
Val(X, Y, ErroPos); //Y será inteiro 7231
WriteLn('Y = ',Y:0);
WriteLn('ErroPos = ',ErroPos:0); //ErroPos será ZERO pois não houve erro
ReadKey;
WriteLn('--------------------');

X:='40C7';
Val(X, Y, ErroPos);
//Y será indefinido pois a string X contém letra
WriteLn('ErroPos = ',ErroPos:0); //ErroPos será TRÊS, posição do primeiro carácter inválido
ReadKey;
WriteLn('--------------------');

X:='40C7';
Val(X, Z, ErroPos);
//Z será indefinido pois a string X contém letra
WriteLn('ErroPos = ',ErroPos:0); //ErroPos será TRÊS, posição do primeiro carácter inválido
WriteLn('--------------------');
ReadKey;
End.
Program TestarVal;

Lembra daqueles programas em Pascal em que era solicitado um número e fechavam se o usuário digitasse algo errado (letras, p. ex.)?

Pode ser resolvido assim:

Em vez de simplesmente utilizar

ReadLn(NumPessoas);

usa-se um procedure:


Procedure Ler (Var Saida:Integer);
Var
Receb:String;
Erro:Integer;
Begin
Repeat
ReadLn(Receb); //ler uma string
Val(Receb, Saida, Erro); //converter para integer
Until (Erro=0); //repetir até não haver erro
End;

e para utilizá-lo:


Ler(NumPessoas);

Assim, o programa "recusa" se o usuário digitar algo errado.

É claro que, em Delphi, isso é desnecessário, pois basta colocar no "OnKeyPress" do TEdit para recusar caracteres inválidos ou utilizar um TSpinEdit, embora o VAL seja útil em outras situações.

Observação: edite o título para "Uso da procedure VAL em Pascal/Delphi", pois mais membros do fórum irão ajudar.

Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!