А правильно ли это - завершать работу программы, не закрыв файлы? Во многих знакомых мне системах для повышения эффективности работы с файлами используется отложенная запись, когда буферы не особенно спешат выгружаться во внешнюю память. Операция явного закрытия файла принудительно выгружала эти буферы. Конечно, я не знаю, как сделано тут, но рисковать бы не стал - не так уж сложно поставить явно закрытие файла.
Я согласен, что неправильно. Файлы, разумеется, должны закрываться. Но, насколько я знаю, почти во всех ЯП при завершении программы все файлы выгружаются и закрываются. Поэтому я и ожидал такого поведения от PascalABC.NET. Это не мой код, а код участника олимпиады по программированию - а на олимпиадах участники привыкли к такому поведению компилятора, поэтому мне и стало интересно, почему здесь так не работает.
Я отметил выше, что мой, более чем 40-летний опыт программирования свидетельствует об обратном: далеко не всегда “компилятор отличается умом и сообразительностью”. Да и не хотелось бы, если честно, “навязчивых сервисов”. Если программист сам себе злобный буратинка - зачем ему в этом мешать?
Файл output закрывается в секции финализации системного модуля если программа завершается нормально и Вы забыли его закрыть. То есть, Вы в файле увидите 0.
Но halt - это аварийное завершение программы - до секции финализации дело не доходит - программа завершается мгновенно. Операционная система закроет файлы, но буферы файлов, которые принадлежат программе, окажутся не сброшенными на диск. Поэтому часть информации будет утеряна.
Вместо halt используйте exit - и всё будет хорошо. Эта процедура просто выходит из подпрограммы или основной программы неаварийно - все секции финализации будут вызваны.