program monedas;
var
car,car_ant,continua:char;
contador_caras,contador_cruces,contador_trama:integer;
error:boolean;
begin
repeat
writeln('Introduce la cadena de 10 tiradas por favor')
repeat
leer(car);
car:=upCase(car);
If car<>'c' and car<>'x' and car<>'*' then
error=true;
Else
If car='c' then
contador_caras:=contador_caras+1
else If car='x' then
contador_cruces:=contador_cruces+1;
end if
If car=car_ant then
contador_trama:=contador_trama+1
else
contador_trama:=0;
end if
If(contador_caras>=(contador_caras+contador_cruces)0.8) or
(contador_cruces>=(contador_caras+contador_cruces)0.8) or
contador_trama>=8 then
writeln ('Tu moneda esta trucada')
else
writeln ('Tu moneda no esta trucada');
end if
end if
until car='*' or error=true;
readln;
writeln('Quiere seguir probando monedas? (S) ¢ (N): ');
readln(continuar);
until (continuar='N') or (continuar='n');
end.
Además de lo de la indentación, que vaya pecado... Va a ser que la comprobación para ver si la tecla es errónea es con And y no con Or... Está mal si es distinto de c Y x Y *. Con Or siempre te va a salir que está mal la tecla...
PD: Falta la funcion "leer" ¿no?