Código
program cuentadigitos; var x,c,aux:integer; begin repeat write ('Nuevo numero: '); read(x); aux:=1; c:=0; repeat c:=c+1; aux:=aux*10 until abs(x)<aux; writeln ('El numero ',x,' esta formado por ',c,' digitos'); until x=0 end.
Con lo que "x" es entero de principio a fin

Ahora tengo problemas con otros dos:
Citar
Dado un número entero "x", calcular la suma "s" de todos los dígitos que lo forman. Ej: si x=12, entonces s=1+2=3.
Citar
Determinar si un dígito "d" está presente en un entero "x". Ej: el dígito 5 está presente en el entero 345; el dígito 3 no está presente en el entero -122.
El primero lo estoy terminando, pero es exageradamente largo y también tiene el problema de que el "entero x" resulta siendo real

Saludos y muchas gracias!!!