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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2013, 10:09   #1
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию Сортировка естественным слиянием

После ввода строк появляется ошибка о том, что файл не найден. Какой-то косяк с сортировкой

В текстовом файле находятся строки(не более 30). Отсортировать файл в порядке возрастания длин строк

Код:
const
  n=5;
Procedure MergeSort(name:string; var f:text); {Естественное слияние}
Var
  s1,s2,a1,a2,where,tmp:integer;
  f1,f2:text;
Begin
  s1:=5;
  s2:=5; {числа, которые запустят while }
  Assign(f,name);
  Assign(f1,'fil1.txt');
  Assign(f2,'fil2.txt');
  While (s1>1) and (s2>=1) do
    begin
     where:=1;
     s1:=0;
     s2:=0;
     Reset(f);
     Rewrite(f1);
     Rewrite(f2);
     Read(f,a1);
     Write(f1,a1,' ');
     While not EOF(f) do
       begin
         read(f,a2);
         If (a2<a1) then
           begin
             Case where of
               1: begin
                    where:=2;
                    inc(s1);
                  End;
               2: begin
                    where:=1;
                    inc(s2);
                  End;
             End;
           End;
        Case where of
          1: write(f1,a2,' ');
          2: write(f2,a2,' ');
        End;
      a1:=a2;
    End;
  If where=2 then
    inc(s2)
  else
    inc(s1);
  Close(f);
  Close(f1);
  Close(f2);
  Rewrite(f);
  Reset(f1);
  Reset(f2);
  Read(f1,a1);
  Read(f2,a2);
  While (not EOF(f1)) and (not EOF(f2)) do
    begin
      If (a1<=a2) then
        begin
          Write(f,a1,' ');
          Read(f1,a1);
        End
      else
        begin
          Write(f,a2,' ');
          Read(f2,a2);
        End;
    End;
  While not EOF(f1) do
    begin
      tmp:=a1;
      Read(f1,a1);
      If not EOF(f1) then
        Write(f,tmp,' ')
      else
        Write(f,tmp);
    End;
  While not EOF(f2) do
    begin
      tmp:=a2;
      Read(f2,a2);
      If not EOF(f2) then
        Write(f,tmp,' ')
          else
            Write(f,tmp);
        End;
      Close(f); Close(f1); Close(f2);
    End;
  Erase(f1);
  Erase(f2);
End;
var
  s:string;
  g:text;
  i:integer;
  a:array[1..n] of string;
begin
  Assign(g,'fil.txt');
  for i:=1 to n do
    begin
      readln(s);
      a[i]:=s;
    end;
  for i:=1 to n do
    MergeSort(a[i],g);
  close(g);
end.
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 06.05.2013, 10:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Assign(g,'fil.txt');
Это можно убрать. У тебя есть Assign(f,name);
Насчет проблемы: Файл действительно может отсутствовать, ибо ты его нигде в коде не создаешь.
Цитата:
read(f,a2);
Файл текстовый. Поэтому используй readln а не read.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.05.2013, 12:53   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Если Делфи то для автоматизации можно заюзать TStringList. Или это учебная задача?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.05.2013, 14:16   #4
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Задача учебная

Здесь указала путь к файлу
Код:
Assign(f,name); 

Assign(f,'C:\text\fil.txt');
Теперь ошибка, что проект вызвал исключение класса EInOutError с сообщнием 'I\O error 103'
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг

Последний раз редактировалось Stilet; 06.05.2013 в 16:21.
(Нафаня) вне форума Ответить с цитированием
Старый 06.05.2013, 15:36   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
C:\text\fil.txt
Прямо вот такое имя файла? Fil, а не file?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.05.2013, 16:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Assign(f,name);

Assign(f,'C:\text\fil.txt');
Зачем два раза одно и то же?
Ошибка у тебя возникает потому что такого файла не существует. Тебе его нужно сначала создать, а уже потом с ним работать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2013, 00:05   #7
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Utkin
Прям такое имя)

Stilet
Это не 2 раза одно и то же, это то, как я переделала(теперь вторая строка вместо первой=)). Я создала файл, но все равно ошибка, но только теперь "проект вызвал исключение класса EInOutError c сообщением 'I/O error 103'"
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 07.05.2013, 07:28   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
103 File not open Reported by CloseFile, Read Write, Seek, Eof, FilePos, FileSize, Flush, BlockRead, or BlockWrite if the file is not open.
Еще раз повторюсь: Файл не открыт, так как ты его не создала.
Сделай его сначала в блокноте, а потом и открывать можно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.05.2013, 08:05   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Прям такое имя)
Ну тогда да, его надо создать. Я подозреваю что это 'fil1.txt' или 'fil2.txt'
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка естественным слиянием TCH Помощь студентам 3 09.03.2011 20:44
Однофазная сортировка естественным слиянием dima154 Помощь студентам 0 20.11.2009 00:12
сортировка естественным слиянием ArtFul777 Паскаль, Turbo Pascal, PascalABC.NET 1 18.11.2008 19:36