Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2008, 17:03   #1
Ketu
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 20
По умолчанию Файл

Помогите дорешать простенькую задачку:
Задан текстовый файл(к примеру, one.txt) состоящий из строк с числами. Найти в файле строку, числа в которой упорядочены по возрастанию, и вывести её на экран. Если таких строк несколько, то вывести все.
uses crt;
var
f:text;i:integer;
begin
assign(f,'one.txt');
{$I-};
reset(f);
{$I+};
if ioresult=o then
while not eof(f) do
begin
readln(f,i);
...
Вот дольше что-то совсем не знаю, как задать условие, чтобы последовательность возрастала.
Ketu вне форума Ответить с цитированием
Старый 29.03.2008, 17:47   #2
Makarov
Форумчанин
 
Аватар для Makarov
 
Регистрация: 03.01.2008
Сообщений: 102
По умолчанию

Создаете цикл, котрый равен длине строки, находите первое число, когда находите второе число, то проверяете больше ли оно предыдущего, если да то продолжаете поиск, если нет, то прерываете. А номер строки записываете в отдельную переменную. В принципе ничего сложного.
Теория без практики мертва и бесплодна, практика без теории невозможна и пагубна.

Последний раз редактировалось Makarov; 29.03.2008 в 17:49.
Makarov вне форума Ответить с цитированием
Старый 30.03.2008, 10:44   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

простая говорите ;-)))
и правда простая ;-))

Код:
var
  f     : text;
  i     : integer;
  iPrev : integer;
  is_Vozrastanie : boolean;
  s,s1     : string;
begin
  assign(f,'one.txt');
  reset(f);
  while not eof(f) do
  begin
    {считываем из строчки 1-е число}
    Read(f,iPrev);
    str(iPrev:1,s);
    {считаем, что строчка возрастает}
    is_Vozrastanie := true;
    while not Eoln(f) do
    begin
      read(f,i);
      str(i:1, s1);
      s := s + ' ' + s1;
      if i<=iPrev then
          is_Vozrastanie := false;
      iPrev := i;
    end;
    if is_Vozrastanie then  WriteLn('строка возрастает: ',s);
    ReadLn(f);
  end;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2008, 12:55   #4
Ketu
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 20
По умолчанию

Спасибо за помощь, вот только она у меня не работает,т.е. компилируется и черный экран. Ты проверял ее у себя?

Последний раз редактировалось Ketu; 30.03.2008 в 12:57.
Ketu вне форума Ответить с цитированием
Старый 30.03.2008, 16:10   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

разумеется, я у себя проверил.
Ты не забыл положить файл one.txt заполненный числами?
ну смотри, приложил полный комплект...
Вложения
Тип файла: rar f_one.rar (3.1 Кб, 11 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2008, 17:24   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
if is_Vozrastanie then WriteLn('строка возрастает: ',s);
ReadLn(f);
Так точно не работает, нужно убрать в конце (f), а перед ReadLn(f); вставить close(f). Кроме того дефект, что выводит и пустые строки. Еще
для удобства в начале написать uses crt;, а после begin - clrscr;
puporev вне форума Ответить с цитированием
Старый 30.03.2008, 20:37   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

puporev
по поводу Readln(F) ВЫ не правы!!! обратите внимание, в коде стоит чтение Read(f,i), после Eoln(f) нужно прочитать перевод строки через Readln(f)
а вот про close(f) в конце я забыл... ;-((
И в конце программы перед END. можно добавить readln;
просто для того, чтобы оставить работу до нажания Enter.
И пустые строки у меня не выводит.... чудеса!...

что же касается остальных замечаний - полностью со всеми согласен.
Ещё добавлю, что:
- не проверяется строки с одним значением в строке (они попадают в возрастающие...)
- нет проверки данных, если в строке будет не число - прога вывалится по ошибке. впрочем, так же, как и нет проверки на наличие самого файла с данными.
- за счёт того, что числа считываются, а потом собирается строчка в программе, строка выводимая может отличаться от строки в файле (за счёт пробелов)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2008, 22:21   #8
Ketu
Пользователь
 
Регистрация: 15.03.2008
Сообщений: 20
По умолчанию

Большое всем спасибо, очень выручили.
Ketu вне форума Ответить с цитированием
Старый 31.03.2008, 07:10   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

To Serge_Bliznykov.
Признаю свою ошибку, просто вижу Readln нет, ну я и переделал, смотрю заработало, а дальше просто не смотрел. Пустые строки у меня видимо как раз из-за того, что я убрал Readln(F).
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бат файл combays Помощь студентам 2 14.07.2008 10:11
chm файл Михаил Юрьевич Общие вопросы Delphi 2 10.07.2008 08:17
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? barand Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2008 10:58
dll файл Briz Общие вопросы Delphi 3 22.10.2007 17:17
Файл vitalik007 Общие вопросы Delphi 2 03.09.2007 22:07