validar valores inteiros em pascal
Como faço para validar se um campo recebeu um integer?
Tipo:
if (variavel não recebeu valor inteiro) then
pare o codigo
Outra dificuldade que estou tendo é a seguinte:
Tenho 4 variaveis:
var1:= 5;
var2:= 2;
var3:= 8;
var4:= 0;
Quero saber qual tem valor maior e qual é esse valor. Como faço?
Tipo:
if (variavel não recebeu valor inteiro) then
pare o codigo
Outra dificuldade que estou tendo é a seguinte:
Tenho 4 variaveis:
var1:= 5;
var2:= 2;
var3:= 8;
var4:= 0;
Quero saber qual tem valor maior e qual é esse valor. Como faço?
Carlos Rocha
Curtidas 0
Respostas
Marcio
17/08/2012
blz?
se for variável tipo Integer só recebe inteiro mesmo se tentar passar um decimal dá erro..
o que pode fazer é truncar a parte decimal na hora de atribuir um valor a variável integer...
var
valor: Integer;
begin
valor := Trunc(ValorQualquer);
//a parte fracionário é ignorada...
end;
quanto a dúvida de saber se um número é maior dentro de uma faixa de valores
tem um método "Bubble Sort" para ordenar valores e saber se é o maior
é que no momento não lembro de cabeça mas tente achar na internet o método Bubble Sort
se não conseguir me fale que mais tarde passo...
falow
se for variável tipo Integer só recebe inteiro mesmo se tentar passar um decimal dá erro..
o que pode fazer é truncar a parte decimal na hora de atribuir um valor a variável integer...
var
valor: Integer;
begin
valor := Trunc(ValorQualquer);
//a parte fracionário é ignorada...
end;
quanto a dúvida de saber se um número é maior dentro de uma faixa de valores
tem um método "Bubble Sort" para ordenar valores e saber se é o maior
é que no momento não lembro de cabeça mas tente achar na internet o método Bubble Sort
se não conseguir me fale que mais tarde passo...
falow
GOSTEI 0
Joel Rodrigues
17/08/2012
O primeiro problema pode ser resolvido assim:
try
StrToInt(´Alo´);
//É um número, continue
except
on EConvertError do //Se houver erro de conversão
ShowMessage(´Não é um número´);
else
Raise; // Mostra outros erros que possam ter ocorrido
end;
GOSTEI 0
Joel Rodrigues
17/08/2012
Já para o segundo problema, sugiro colocar as variáveis em um array e utilizar uma função que verifique qual é o maior (muito fácil de achar na net). Segue um exemplo: http://greatis.com/delphicb/tips/lib/mathematics-findminmax.html
GOSTEI 0
Carlos Rocha
17/08/2012
Esqueci de mensionar que estou montando isso no pascalzinho.
Bom, o exercicio é o seguinte:
Faça um programa Pascal que leia pares de pontos (X,Y), que representam coordenadas cartesianas, até que X ou Y seja nulo. Para cada par (X,Y) lido, seu programa deve indicar em qual quadrante ele caiu, ou seja, primeiro, segundo, terceiro ou quarto quadrante. Ao final, seu programa deve informar em qual quadrante caiu o maior número de pontos e a respectiva quantidade. Se houver empate, para simplificar, informe apenas um dos quadrantes mais frequentes.
Obs:
Primeiro Quadrante: X>0 e Y>0
Segundo Quadrante: X<0 e Y>0
Terceiro Quadrante: X<0 e Y<0
Quarto Quadrante: X>0 e Y<0
O que eu fiz. Veja se tem como melhorar:
Bom, o exercicio é o seguinte:
Faça um programa Pascal que leia pares de pontos (X,Y), que representam coordenadas cartesianas, até que X ou Y seja nulo. Para cada par (X,Y) lido, seu programa deve indicar em qual quadrante ele caiu, ou seja, primeiro, segundo, terceiro ou quarto quadrante. Ao final, seu programa deve informar em qual quadrante caiu o maior número de pontos e a respectiva quantidade. Se houver empate, para simplificar, informe apenas um dos quadrantes mais frequentes.
Obs:
Primeiro Quadrante: X>0 e Y>0
Segundo Quadrante: X<0 e Y>0
Terceiro Quadrante: X<0 e Y<0
Quarto Quadrante: X>0 e Y<0
O que eu fiz. Veja se tem como melhorar:
Program Questao4 ;
var tecla:char;
var coordenada_y, coordenada_x, QuantasVoltas, i, quad_1, quad_2, quad_3, quad_4:integer;
coordenadas: array[0..100,1..2] of integer;
Begin
QuantasVoltas:=100;
quad_1:=0;
quad_2:=0;
quad_3:=0;
quad_4:=0;
for i:=0 to QuantasVoltas do
begin
writeln('Entre com a coordenadas X do ',i+1,'o par');
read (coordenada_x);
writeln('Entre com a coordenadas Y do ',i+1,'o par');
read (coordenada_y);
//AQUI, PRECISO VERIFICAR SE FOI APENAS APERTADA A TECLA ENTER PARA PARAR O CODIGO
if ((coordenada_x=0) or (coordenada_y=0)) then
begin
writeln('Você não digitou a coordenada corretamente!');
break;
end;
coordenadas[i][1]:=coordenada_x;
coordenadas[i][2]:=coordenada_y;
if ((coordenadas[i][1] >0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no primeiro quadrante!');
quad_1:=quad_1+1;
end;
if ((coordenadas[i][1]< 0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no segundo quadrante!');
quad_2:=quad_2+1;
end;
if ((coordenadas[i][1] < 0)and(coordenadas[i][2] < 0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no terceiro quadrante!');
quad_3:=quad_3+1;
end;
if ((coordenadas[i][1] >0)and(coordenadas[i][2] <0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no quarto quadrante!');
quad_4:=quad_1+4;
end;
end;
End.
GOSTEI 0
Joel Rodrigues
17/08/2012
Rapaz, se está funcionando, para você que está aprendendo, está bom. Importante é você compreender o código que desenvolveu.
Abraço.
Abraço.
GOSTEI 0
Carlos Rocha
17/08/2012
Aí é que esta o problema: Não esta funcionando.
Ele da erro ao validar se o valor de entrada não é um valor inteiro e tambem não estou consguindo sabre qual é maior valor de pares por quadrante.
Ele da erro ao validar se o valor de entrada não é um valor inteiro e tambem não estou consguindo sabre qual é maior valor de pares por quadrante.
GOSTEI 0
Carlos Rocha
17/08/2012
Da uma olhada.
Consegui fazer do jeito abaixo:
Obrigado
Consegui fazer do jeito abaixo:
Program Questao4 ;
var tecla:char;
var coordenada_y, coordenada_x, QuantasVoltas, i, quad_1, quad_2, quad_3, quad_4, quadrante, maior:integer;
coordenadas: array[0..100,1..2] of integer;
Begin
QuantasVoltas:=100;
quad_1:=0;
quad_2:=0;
quad_3:=0;
quad_4:=0;
for i:=0 to QuantasVoltas do
begin
writeln('Entre com a coordenadas X do ',i+1,'o par');
read (coordenada_x);
if coordenada_x=0 then
begin
writeln('Você nao digitou a coordenada valida');
break;
end;
writeln('Entre com a coordenadas Y do ',i+1,'o par');
read (coordenada_y);
if coordenada_y=0 then
begin
writeln('Você nao digitou a coordenada valida');
break;
end;
coordenadas[i][1]:=coordenada_x;
coordenadas[i][2]:=coordenada_y;
if ((coordenadas[i][1] >0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no primeiro quadrante!');
quad_1:=quad_1+1;
end;
if ((coordenadas[i][1]< 0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no segundo quadrante!');
quad_2:=quad_2+1;
end;
if ((coordenadas[i][1] < 0)and(coordenadas[i][2] < 0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no terceiro quadrante!');
quad_3:=quad_3+1;
end;
if ((coordenadas[i][1] >0)and(coordenadas[i][2] <0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no quarto quadrante!');
quad_4:=quad_1+4;
end;
if (quad_1 >= quad_2) and (quad_1 >= quad_3) and (quad_1 >= quad_4) then
begin
maior := quad_1;
quadrante:=1;
end;
if (quad_2 >= quad_1) and (quad_2 >= quad_3) and (quad_2 >= quad_4) then
begin
maior := quad_2;
quadrante:=2;
end;
if (quad_3 >= quad_1) and (quad_3 >= quad_2) and (quad_3 >= quad_4) then
begin
maior := quad_3;
quadrante:=3;
end;
if (quad_4 >= quad_1) and (quad_4 >= quad_2) and (quad_4 >= quad_3) then
begin
maior := quad_4;
quadrante:=4;
end;
end;
writeln('O quadrante que caiu o maior numero de pontos e: ',quadrante);
writeln('E a quantidade de pontos e: ',maior);
writeln(' ');
End.
Obrigado
GOSTEI 0
Joel Rodrigues
17/08/2012
Você já tentou aplicar as dicas aqui sugeridas?
GOSTEI 0
Marco Salles
17/08/2012
Ola Carlos Rocha , tudo bem ? Tb moro em muriaé e talves possa lhe ajudar
O seu problema é simples
percebo que vc em cada iteração armazena quad_i:=quad_i+1 ; onde i (i=1,2,3,4)
Ate ai esta correto , apesar de vc escrever errado no caso do quarto quadrante
quad_4:=quad_1+4; //////Escrita errada
Com eu ia dizendo a lógica esta correta ate ai .
Agora vamos mudar a lógica do maior ...
Esta lógica pode ocorrer juntamente no momento da captação dos pontos
Por exemplo
if ((coordenadas[i][1] >0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no primeiro quadrante!');
quad_1:=quad_1+1;
// No momento da captção eu ja testo se o n° de pontos deste quadrante satisfaz a condição
if maior < quad_1 then
begin
maior:= quad_1;
quadrante:=1;
end;
executo este código em cada captação
Vamos a partir de Melhorar o seu código...
Ele tem Muitas instruções que mesmo que seja falsas serão testadas . Isto inumeras vezes faz o programa
perder performance . Falta colocar if else nesta isntruções
ficando assim
[]sds e boa sorte
O seu problema é simples
percebo que vc em cada iteração armazena quad_i:=quad_i+1 ; onde i (i=1,2,3,4)
Ate ai esta correto , apesar de vc escrever errado no caso do quarto quadrante
quad_4:=quad_1+4; //////Escrita errada
Com eu ia dizendo a lógica esta correta ate ai .
Agora vamos mudar a lógica do maior ...
Esta lógica pode ocorrer juntamente no momento da captação dos pontos
Por exemplo
if ((coordenadas[i][1] >0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no primeiro quadrante!');
quad_1:=quad_1+1;
// No momento da captção eu ja testo se o n° de pontos deste quadrante satisfaz a condição
if maior < quad_1 then
begin
maior:= quad_1;
quadrante:=1;
end;
executo este código em cada captação
Vamos a partir de Melhorar o seu código...
Ele tem Muitas instruções que mesmo que seja falsas serão testadas . Isto inumeras vezes faz o programa
perder performance . Falta colocar if else nesta isntruções
ficando assim
QuantasVoltas:=5;
quad_1:=0;
quad_2:=0;
quad_3:=0;
quad_4:=0;
maior:=0;
for i:=0 to QuantasVoltas do
begin
writeln('Entre com a coordenadas X do ',i+1,'o par');
read (coordenada_x);
if coordenada_x=0 then
begin
writeln('Você nao digitou a coordenada valida');
break;
end;
writeln('Entre com a coordenadas Y do ',i+1,'o par');
read (coordenada_y);
if coordenada_y=0 then
begin
writeln('Você nao digitou a coordenada valida');
break;
end;
coordenadas[i][1]:=coordenada_x;
coordenadas[i][2]:=coordenada_y;
if ((coordenadas[i][1] >0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no primeiro quadrante!');
quad_1:=quad_1+1;
if maior < quad_1 then
begin
maior:= quad_1;
quadrante:=1;
end;
end
else
if ((coordenadas[i][1]< 0)and(coordenadas[i][2] >0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no segundo quadrante!');
quad_2:=quad_2+1;
if maior < quad_2 then
begin
maior:= quad_2;
quadrante:=2;
end;
end
else
if ((coordenadas[i][1] < 0)and(coordenadas[i][2] < 0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no terceiro quadrante!');
quad_3:=quad_3+1;
if maior < quad_3 then
begin
maior:= quad_3;
quadrante:=3;
end;
end
else
if ((coordenadas[i][1] >0)and(coordenadas[i][2] <0)) then
begin
writeln('O par de coordenadas cartezianas X,Y (',coordenadas[i][1],',',coordenadas[i][2],') esta no quarto quadrante!');
quad_4:=quad_4+1;
if maior < quad_4 then
begin
maior:= quad_4;
quadrante:=4;
end;
end;
end; //fim do for
writeln('O quadrante que caiu o maior numero de pontos e: ',quadrante);
writeln('E a quantidade de pontos e: ',maior);
writeln(' ');
Sleep(5000);[]sds e boa sorte
GOSTEI 0
Carlos Rocha
17/08/2012
Me adiciona ao msn?
carcleo1999@hotmail.com
ou
Skype: carcleo
Forte abraço e obrigado pela dica.
carcleo1999@hotmail.com
ou
Skype: carcleo
Forte abraço e obrigado pela dica.
GOSTEI 0
Marco Salles
17/08/2012
Ola carlos , então não utilizo redes sociais
Mas vc tem alguma dúvida no código acima ??
Ele pode ser simplificado com o conceito de métodos (function / procedure )
Ha muita redundancia , isto é , muita coisa repetida
Pode utizar este conceitos neste teu código ???
Mas vc tem alguma dúvida no código acima ??
Ele pode ser simplificado com o conceito de métodos (function / procedure )
Ha muita redundancia , isto é , muita coisa repetida
Pode utizar este conceitos neste teu código ???
GOSTEI 0