RE:sentencia de un password
Mira yeni, tienes un error feo, esta en el ciclo WHILE.
car:=READKEY;
while car<>#13 DO
{ inicia aca }begin
write('*');
pass:=pass+car;
car:=READKEY;
Write('digite su clave: ');
if cla= pass then
begin { no hace falta el begin si se ejecuta una sola accion , de todas formas no incide en el resultado}
write('clave correcta');
end;
{ termina aca } end;
Entonces fijate lo que sucede, ingresa un caracter y compara con tu pass, es decir no es lo indicado. Mira aca te paso todo el codigo, pero OJO esto esta hecho en 5 minutos, no quiere decir que esto este listo para entregarlos, lo mencione antes y dani lo recalco, hay muchas condiciones que no son tomadas en este ejemplo que presento, es cuestion de que tu lo mejores, yo no lo entregaria para nada asi, es solo para que te des una idea.
PROGRAM prueba;
USES CRT;
CONST
clave = '2009';
VAR
cad : STRING;
PROCEDURE CapturarPass (VAR pass : STRING);
VAR
car : CHAR;
BEGIN
Write('digite su clave: ');
car:=READKEY;
WHILE car<>#13 DO
BEGIN
WRITE('*');
pass:=pass+car;
car:=READKEY;
END;
END;
PROCEDURE CompararPass (VAR pass : STRING);
BEGIN
CLRSCR;
IF clave=pass
THEN
WRITELN('Clave Correcta')
ELSE
WRITELN('Clave Incorrecta');
END;
BEGIN
CapturarPass(cad);
CompararPass(cad);
READKEY;
END.