IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Очередь, Слова из txt-файла в очередь
*alt
сообщение 19.03.2008 13:17
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Задача
Задан текстовый файл. Распечатать все слова максимальной длинны (с использованием очереди)

Вот мой код, но он не работает
Пока глупости много=))

Код

type
   TElem = string;
   Tptr = ^Tlist;
   Tlist = record
                inf: Telem;
                next: tptr;
             end;
   TQueue = record
                 head,
                 tail: Tptr;
             end;
var q: TQueue;       //очередь
    f: text; m_s,max_s,name: string;
    s:char; ok:boolean;
{инициализация очереди}
procedure queue_init (var q: Tqueue);
begin
    q.head:=nil;
end;

{проверка на пустоту}
function queue_empty (var q: tqueue): boolean;
begin
    queue_empty:=q.head=nil;
end;

{добавление в очередь}
procedure queue_push (var q: tqueue; var el: Telem);
var p: Tptr;
begin
    new(p);
    p^.inf:=el;
    if queue_empty (q) then
       q.head:=p
    else
       q.tail^.next:=p;
    q.tail:=p;
end;

{изъятие из очереди}
function queue_pop (var q:Tqueue; var el:Telem): boolean;
var p: Tptr;
begin
    if queue_empty (q) then queue_pop:=false
    else
       begin
           queue_pop:=true;
           el:=q.head^.inf;
           p:=q.head;
           q.head:=q.head^.next;
           dispose(p);
       end;
end;

begin{main}

  writeln ('Введите имя файла (имя.txt)');
  read(name);
  assign(f, name);
  reset(f);
  queue_init(q);

  {добавление в очередь}
  while not eof(f) do
    begin
      m_s:='';
      ok:=true;
      while ok or eof(f) do
        begin
          read(f, s);
          if s=' ' then ok:=false;
          m_s:=m_s+s;
        end;
      if length(m_s)>=length(max_s) then
        begin
          max_s:=m_s;
          queue_push(q, max_s);
        end;
    end;
  readln;
  close(f);

  assign(f, 'out_text.txt');
  rewrite(f);

  while not queue_empty(q) do
    begin
      queue_pop (q,m_s);
      if m_s=max_s then
        write (f, m_s);
    end;
  close(f);
  readln;

  writeln('***********Обработка Завершена***********');
  readln;
end.


Помогите исправить и довести решение...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 19.03.2008 22:07
Сообщение #2


Гость






Замени SeekEof на Eof, и убедись, что в файле после слова uuuu идет перевод строки...

P.S. Блин... Что ж ты творишь? Я написал что надо делать - ты мало того, что неправильно сделал, так еще и меня обвинил!

Цитата
           while queue_pop(q, m_s) do{ <--- удаляем содержимое очереди }
queue_push(q, max_s); { <--- и закидываем в нее новое слово }
Это что за фигня???

Сообщение отредактировано: volvo - 19.03.2008 22:13
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"