В общем. Была олимпиадная задачка. Всё прекрасно, прогу написал. Потом нашёл небольшую ошибку, поправил, и О ЧУДО O_O в выходом файле вместо нормального ответа стали получаться кракозябли.
Причем, если отлаживать весь процесс, то видно, что перед выводом переменных, все они нормальные и должны нормально выводиться. Но после команды write() одна из переменных хериться и выводить какой то бред.
Пробовал убирать то, что исправлял, выводит нормально. Меняю обратно, получается бред.
Решение в принципе нашёл. writeln() исправило проблему O_O.
Абсолютно не понял почему.
Вот текст задачи.
Задана строка символов. Определить, какой символ встречается в этой строке подряд наибольшее число раз. В ответе указать символ, образующий самую длинную последовательность, длину последовательности и номер символа, с которого она начинается.
input.txt
output.txt
Вот мой код. Закомментирован программы, который должен давать правильный ответ (там условие, если мы вышли из цикла, не встретив в конце другого символа и нужно сравнить с наибольшей последовательностью которая уже была найдена ранее). Вот если его раскомментировать, то вывод получается бредовым. Проверял на TP 7.1, RAD Studio 2006, RAD Studio 2010. Везде одинакого.
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
i, j, l, pos, len: integer;
ho: char;
str: string;
fi, fo: text;
begin
assign(fi, 'input.txt');
reset(fi);
i := 1;
len := 0;
l := 1;
read(fi, str);
close(fi);
for j := 2 to length(str) do
begin
if str[j] = str[j - 1] then
begin
inc(i);
end
else
begin
if i > len then
begin
len := i;
pos := l;
ho := str[j - 1];
end;
l := j;
i := 1;
end;
end;
{ if i > len then
begin
len := i;
pos := l;
ho := str[length(str)];
end;}
if len = 0 then
begin
len := i;
pos := l;
ho := str[j - 1];
end;
assign(fo, 'output.txt');
rewrite(fo);
write(fo, ho, ' ', len, ' ', pos);
close(fo);
end.
Объясните в чём прикол O_o. Это полный бред.