¿Problemas con Pascal?

Iniciado por ¡Micronet!, 13 Febrero 2011, 16:56 PM

0 Miembros y 1 Visitante están viendo este tema.

¡Micronet!

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 ¿?  :(

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"

Khronos14

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.

¡Micronet!

#2
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 :/

"La Tarea No Se Hace, Pero No Indica Que No Se Ayude Al Estudiante"