по выходу из цикла проверки надо еще раз проверить
Код:
if (min>d) and f then
begin
min:=d;
d:=0;
f:=false;
end;
или же просто не обрезать последнюю точку.
upcase(s[i]) не изменит самого символа. Это просто для проверки, чтобы не писать два условия для маленького и большого символов.