|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблемы с выводом
В общем. Была олимпиадная задачка. Всё прекрасно, прогу написал. Потом нашёл небольшую ошибку, поправил, и О ЧУДО O_O в выходом файле вместо нормального ответа стали получаться кракозябли.
Причем, если отлаживать весь процесс, то видно, что перед выводом переменных, все они нормальные и должны нормально выводиться. Но после команды write() одна из переменных хериться и выводить какой то бред. Пробовал убирать то, что исправлял, выводит нормально. Меняю обратно, получается бред. Решение в принципе нашёл. writeln() исправило проблему O_O. Абсолютно не понял почему. Вот текст задачи. Задана строка символов. Определить, какой символ встречается в этой строке подряд наибольшее число раз. В ответе указать символ, образующий самую длинную последовательность, длину последовательности и номер символа, с которого она начинается. input.txt Код:
dddaacaaammmmm output.txt Код:
m 5 10 Вот мой код. Закомментирован программы, который должен давать правильный ответ (там условие, если мы вышли из цикла, не встретив в конце другого символа и нужно сравнить с наибольшей последовательностью которая уже была найдена ранее). Вот если его раскомментировать, то вывод получается бредовым. Проверял на 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. Это полный бред. Последний раз редактировалось AntonDevil, 25.10.2009 в 00:20. |
#2
|
||||
|
||||
Просто ты хочешь в текcтовой строке слепить числа и символы, без преобразования.
Это тоже самое что, задав файл 'оf real' и записав туда числа, пытаться открыть его блокнотом и найти те чила. |
#3
|
|||
|
|||
Цитата:
Возможно. Но тогда почему отлично работает writeln() при тех же параметрах? Причем этот write() отлично работает без закомментированного куска кода. Последний раз редактировалось AntonDevil, 25.10.2009 в 00:19. |