jaja perdon perdon.. staba a los apurones, para validar reales, tengo esta funcion (ver el codigo) que funciona piola, pero no me permite borrar los datos que ingrese durante la ejecucion del programa..
graciass
function validar:real;
var
validos: set of char;
a:string;
aux:real;
codigo:integer;
caracter:char;
primerdigito:boolean;
begin
a:= ' ';
validos:= ['0'..'9',',','.'];
primerdigito:=true;
repeat
repeat
caracter:=readkey;
if caracter in validos then
begin
if (caracter='.') or (caracter=',') then
begin
validos:=validos-['.',','];
caracter:='.';
a:=a+caracter;
end
else
a:=a+caracter;
write(caracter);
end;
primerdigito:= false;
until (caracter in validos) or (caracter = #13);
until (caracter = #13);
val ( a, aux, codigo);
if codigo <> 0 then
begin
writeln ('0');
end
else
begin
vali:= aux;
end;
end;
Seguimos con la bola de cristal...
he probado tu code , por supuesto no funciona bajo TP7, asumo que usas FreePascal ya que readkey precisa de la unit CRT , aparte de ello vamos a la linea 38
LINE 0038 vali:= aux;
imagino que free pascal permite el uso de variables no definidas anteriormente
como hace Vbasic o javascript
¿vali no esta definido y quisiste decir validos=aux o (diferentes tipos)
o vali es otra variable de tipo set of char?
VALI? -> validos: set of char=aux:real;
Creo que deberias especificar si estas usando FREPASCAL TPx u otros pascal
antes de la funcion.
- En breve te envio otro metodo mas eficaz para recoger culaquier tipo de dato.
Simplemente recogelo en una cadena de texto ,que podrás editar tranquilamente antes de su conversion a cualquier tipo de datos.
hola santiago.
ahí va una funcion para editar cadenas ó numeros , despues deveras convertir
tu cadena a numero mediante la funcion VAL .
Si te vale el codig postea aquí.
uses crt;
var texto:string;
{...........................................................................}
{ edita una cadena de texto en la posicion x,y indicada la cadena tendra la }
{ misma longitud inicial se debe especificar el filtro 0 ¢ 1 }
{ filtro modo 0 todos los caracteres menos los de control }
{ filtro modo 1 solo numeros del 0 al 9 para conversion por val }
{...........................................................................}
function edita_cadxy(xx,yy:byte;cad:string;tipo:byte):string;
procedure pita;
begin
sound(200);delay(50);nosound;
end;
var
dato:char;
cod_ext:boolean;
longitud_cadena:byte;
cursor_tipo:char;
color_texto:byte;
color_fondo:byte;
ii:byte;
begin
color_texto:=15;
color_fondo:=1;
cursor_tipo:=#29;
cod_ext:=false;
longitud_cadena:=length(cad);
textcolor(color_texto);textbackground(color_fondo);
gotoxy(xx,yy);write(cad);
repeat
dato:=readkey;
if dato=#0 then begin
cod_ext:=true;
dato:=readkey;
end;
if (not cod_ext) then
begin
if dato=#13 then break;
if tipo=0 then begin
if length(cad)<longitud_cadena then
if dato in[#32..#255]then
cad:=cad+dato else pita;
end;
if tipo=1 then begin
if length(cad)<longitud_cadena then
if dato in[#48..#57]then
cad:=cad+dato else pita;
end;
if dato=#8 then
begin
delete(cad,length(cad),1);
end;
gotoxy(xx,yy);
textcolor(color_texto);
textbackground(color_fondo);
until dato=#27;
for ii:=length(cad)+1to longitud_cadena do cad[ii]:=' ';
cad[0]:=chr(longitud_cadena);
edita_cadxy:=cad;
end;
begin
textcolor(7);textbackground(0);
clrscr;
texto:='3.1415192654';
texto:=(edita_cadxy(10,1,texto,0));
writeln;
writeln(texto); {ahora texto contiene la nueva cadena ya editada y sige siendo string}
readln;
end.