program escondida (input, f, output);
(* Busca la palabra de entrada escondida en el texto f *)
(* Pre: el fichero de entrada f existe y es text *)
function esta (p:string; var f : text): boolean;
(* Devuelve: está (o no) p escondida en f
a partir de la posición en la que entre f *)
(* Pre: f abierto *)
(* Post: posición de lectura de f sobre el carácter
siguiente a la localización de p o sobre EOF *)
(* Obs: se busca la palabra en la combinación
mayúsculas-minúsculas literal *)
var i : integer;
c, cf : char;
estaLocal: boolean;
begin
if p='' then estaLocal := TRUE
else begin
estaLocal := FALSE;
i := 1; c := p[i]
end;
while not eof (f) and not estaLocal do
begin (* línea *)
while not eoln (f) and not estaLocal do
begin (* contenido de línea *)
read (f, cf);
if cf = c then
begin
if i = length(p) then
estaLocal := true
else
begin
i := i+1; c := p[i]
end;
end
end;
readln (f);
end;
esta := estaLocal
end;
var f : text;
palabra : string;
nombre : string;
BEGIN
write ('Nombre del fichero: '); readln (nombre);
(* Pre: el fichero de entrada f existe y es text *)
assign (f, nombre); reset (f);
write ('Palabra a buscar: '); readln (palabra);
if esta (palabra, f) then writeln ('ENCONTRADA')
else writeln ('No está');
END.