Точнее, в нее передается значение переменной M, которая неинициализирована.
А, это да. Но это уже не относится к самой процедуре
count.
есть n в основном блоке,
Э, нету, она не объявлена. Хотя и использована.
Если её объявить (причём выше кода
count()!), то да, она будет использована в
count. Но при этом наступят другие грабли: если
n объявить как вещественную, то произойдёт ошибка при вызове
count (вещественная
n не сможет преобразоваться к байтовой
k), если же
n объявить целочисленной, то та же самая ошибка преобразования типов возникнет внутри
count в команде
n:=m+1;. Правда красиво?
Единственная возможность объявить переменную
n - вариантного (variant) типа. Тогда будут работать неявные преобразования из вещественного в целый типы и обратно. Ценой необнаруженных ошибок программиста (типа выше) и больших накладных расходов при выполнении.
PS. Кажется последние несколько сообщений вполне тянут на "CS юмор".
Прям не программа, а сборник юмора какой-то.