Fórum validar valores inteiros em pascal #421834

17/08/2012

0

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?
Carlos Rocha

Carlos Rocha

Responder

Posts

17/08/2012

Marcio

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
Responder

Gostei + 0

17/08/2012

Joel Rodrigues

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;
Responder

Gostei + 0

17/08/2012

Joel Rodrigues

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
Responder

Gostei + 0

17/08/2012

Carlos Rocha

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


Responder

Gostei + 0

17/08/2012

Joel Rodrigues

Rapaz, se está funcionando, para você que está aprendendo, está bom. Importante é você compreender o código que desenvolveu.

Abraço.
Responder

Gostei + 0

17/08/2012

Carlos Rocha

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

Gostei + 0

17/08/2012

Carlos Rocha

Da uma olhada.

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
Responder

Gostei + 0

17/08/2012

Joel Rodrigues

Você já tentou aplicar as dicas aqui sugeridas?
Responder

Gostei + 0

18/08/2012

Marco Salles

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

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
Responder

Gostei + 0

18/08/2012

Carlos Rocha

Me adiciona ao msn?

carcleo1999@hotmail.com

ou

Skype: carcleo

Forte abraço e obrigado pela dica.
Responder

Gostei + 0

18/08/2012

Marco Salles

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 ???
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar