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.