gerupc, estuve haciendo pruebas y si calcula bien.
El problema es que debes leer por separado el numero y la letra.
Es decir:
Código Delphi
[-]write('Introduce el DNI completo (numero) :');
readln(dni);
write('Introduce la letra del DNI: ');
readln(letra);
Y Alli te va a operar bien. Tu problema es que el readln(dni,letra) no te tomaba el valor asignado a letra, por tanto dejaba a la variable letra con el valor "vacio".
Saludos,