Форум по 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.
Ответить с цитированием
  #2  
Старый 24.10.2009, 19:35
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Просто ты хочешь в текcтовой строке слепить числа и символы, без преобразования.

Это тоже самое что, задав файл 'оf real' и записав туда числа, пытаться открыть его блокнотом и найти те чила.
Ответить с цитированием
  #3  
Старый 25.10.2009, 00:12
AntonDevil AntonDevil вне форума
Прохожий
 
Регистрация: 24.10.2009
Адрес: Калуга
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от Konrad
Просто ты хочешь в текcтовой строке слепить числа и символы, без преобразования.

Возможно. Но тогда почему отлично работает writeln() при тех же параметрах?

Причем этот write() отлично работает без закомментированного куска кода.

Последний раз редактировалось AntonDevil, 25.10.2009 в 00:19.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter