Fórum validar valores inteiros em pascal #421834
17/08/2012
0
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
Curtir tópico
+ 0Posts
17/08/2012
Marcio
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
17/08/2012
Joel Rodrigues
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
17/08/2012
Joel Rodrigues
Gostei + 0
17/08/2012
Carlos Rocha
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
17/08/2012
Joel Rodrigues
Abraço.
Gostei + 0
17/08/2012
Carlos Rocha
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
17/08/2012
Carlos Rocha
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
17/08/2012
Joel Rodrigues
Gostei + 0
18/08/2012
Marco Salles
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
18/08/2012
Carlos Rocha
carcleo1999@hotmail.com
ou
Skype: carcleo
Forte abraço e obrigado pela dica.
Gostei + 0
18/08/2012
Marco Salles
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
Clique aqui para fazer login e interagir na Comunidade :)