Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Mensaje iniciado por: ¡Micronet! en 13 Febrero 2011, 16:56 PM

Título: ¿Problemas con Pascal?
Publicado por: ¡Micronet! en 13 Febrero 2011, 16:56 PM
Al parecer como no existe ningun tema... que se especifique en pascal, y como yo he tenido muchos problemas con el... entonces decidi abrir este tema...porque primero que nada me a estado gustando programar en pascal y quiero aprender mas, y por lo mismo hice esto... entonces si alguien tiene problemas entre todos (me incluyo yo) lo solucionaremos.

Pero am. por mientras quiero ser el primero  :silbar: ya que ya abri muchos temas sobre esto entonces ya no abrire mas y pondre mis problemas aqui :(
espero que me puedan ayudar. :(...

Código (pascal) [Seleccionar]
procedure EstadoE18;
var
 c : char;
begin
{$ifdef DEBUG}
 writeln(stderr,'Estado E18');
{$endif}
 Avanzar;
 c := Leer;
{como pongo el caracter '}
 if c in '''' then   //Mi problema esta aqui
 begin
   S := S + c;
   Avanzar;
   c := Leer;
   EstadoT19;
 end;


En parte de mi codigo de un automata que ando haciendo... lo que quiero esque en el momento en que me lea el caracter '    , me envie a un estado T19... pero no me lo leo porque sabemos que ese caracter sirve para que sea referencia a un texto.
Si yo lo pongo:

Código (pascal) [Seleccionar]
if c in '''  then   (me pone en rojo igual el then)
Código (pascal) [Seleccionar]
if c in '38'  then   (haciendo referencia al ASCII me sale error)

como podria solucionarlo :S ¿?  :(
Título: Re: ¿Problemas con Pascal?
Publicado por: Khronos14 en 13 Febrero 2011, 17:24 PM
El operador in se utiliza para trabajar con conjuntos de datos, en tu caso, una simple condición te valdría. El caracter ' es especial en Pascal así que vas a tener que hacer referencia a él mediante su número ascii.

Pienso que algo como esto, te debería valer:

Código (delphi) [Seleccionar]
If c = #38 then
begin

end;


Saludos.
Título: Re: ¿Problemas con Pascal?
Publicado por: ¡Micronet! en 17 Febrero 2011, 15:47 PM
Código (pascal) [Seleccionar]
function CientoFloat(s:string): real;
var
v: real;
i: integer;
d: integer;
Num1: integer;
c: integer;
Extra: integer;
begin
      v:=0;  d:=0;  c:=length(s);  Extra:=0;
      while (c<=(lenght(s)+1)) do
      begin
      for i:=1 to length (s) do
           begin
                if s[i] in ['0'..'9','-'] then
                   d:= ord(s[i])-48;
                   Num1:=Num1+d;
           end;
           v:=exp(Num1*ln(Extra));
           Extra:=Num1;
           c:=c+1;
      end;
CientoFloat := v;
end;
(lo modifique jeje vi uno de mis errores :S)

Aqui tengo el codigo de mi 13e-4 para poder hacer esta funcion lo que hice fue dividir en dos mi cadena... pero me sale error se supone que cuando encuentre los 2 numeros tanto el de la izquierda como el de la derecha deberia de funcionar no ¿? :/

Código (pascal) [Seleccionar]
Uses math;

Procedure dofrexp(Const X : extended);

var man : extended;
    exp: longint;

begin
  man:=0;
  exp:=0;
  frexp(x,man,exp);
  write(x,' has ');
  Writeln('mantissa ',man,' and exponent ',exp);
end;


begin
//   dofrexp(1.00);
   dofrexp(1.02e-1);
   dofrexp(1.03e-2);
   dofrexp(1.02e1);
   dofrexp(1.03e2);
end.



Disculpen... como utilizaria la matiza :S esque no le entiendo a esta matiza :/