Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.10.2009, 18:10
AntonDevil AntonDevil вне форума
Прохожий
 
Регистрация: 24.10.2009
Адрес: Калуга
Сообщения: 2
Репутация: 10
По умолчанию Проблемы с выводом

В общем. Была олимпиадная задачка. Всё прекрасно, прогу написал. Потом нашёл небольшую ошибку, поправил, и О ЧУДО 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.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025