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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 19:04   #1
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию Очередь

Задача
Создайте очередь, информационная часть которой содержит слова. Перепишите в текстовый файл слова, длина которых меньше заданной.

Решение
Я взял за основу пример из книги и доработал его. Работает, вроде, правильно, но я так до конца и не понял про очередь.

Проверьте, пожалуйста.

Код:
program ochered;

type
 p=^toch;
 toch=record
  s:string;
  next:p;
 end;

var
 x,nach,curr:P;
 i,n,l:integer;
 f_in:text;
 s1:string;
 chk:boolean;

Procedure Create;
begin
 nach:=nil;
 curr:=nil;
 Writeln('Введите количество слов в очереди: ');
 ReadLn(n);
 for i:=1 to n do
 begin
  new(x);
  writeln('Введите слово: ');
  readln(x^.s);
  x^.next:=nil;
  if nach=nil
  then begin
   nach:=x;
   curr:=x
  end
  else
  begin
   curr^.next:=x;
   curr:=x
  end;
 end;
end;

Procedure Output;
begin
 assign(f_in,'file');
 rewrite(f_in);

 if nach=nil then writeln('Очередь пуста')
 else begin
  chk:=false;
  x:=nach;
  WriteLn('Введите длину слова');
  ReadLn(l);
  while x<>nil do
   begin
    if length(x^.s)=l then
     begin
      s1:=x^.s;
      writeln(f_in,s1);
      chk:=true;
     end;
    x:=x^.next;
   end;
 end;
 if not chk then WriteLn('Нет слов заданной длины');
 close(f_in);
end;

Procedure Read;
begin
 reset(f_in);
 while not eof(f_in) do begin
  readln(f_in,s1);
  WriteLn('Из файла: ',s1);
 end;
end;

begin
 create;
 output;
 Read;
 readln;
end.
sw47 вне форума Ответить с цитированием
Старый 30.03.2011, 19:31   #2
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

А что не понятно? Очередь в паскале - одна из динамических структур данных. Так же как стек и дерево и список. На первый взгляд реализовано правильно. Но в код я не в читывался
danekne вне форума Ответить с цитированием
Старый 30.03.2011, 19:48   #3
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

все верно, за исклучением того что в условие написанно
Цитата:
Перепишите в текстовый файл слова, длина которых меньше заданной
, а вы переписывается только равные заданной длины
Код:
if length(x^.s)=l then
замените ка на это
Код:
if length(x^.s)<l then

Последний раз редактировалось Летучий_СкилетиК; 30.03.2011 в 19:51.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 30.03.2011, 20:11   #4
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

в указателях запутался.
я так и не понял как пройтись по ветке, где выводится, что очередь пуста.
sw47 вне форума Ответить с цитированием
Старый 30.03.2011, 20:16   #5
sw47
Пользователь
 
Регистрация: 03.12.2008
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Летучий_СкилетиК Посмотреть сообщение
...а вы переписывается только равные заданной длины...
спасибо. сам бы и не заметил.
sw47 вне форума Ответить с цитированием
Старый 30.03.2011, 20:23   #6
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

nach - указатель, уже не помню, либо на первый, либо на последний элемент очереди. По логике скорее всего на первый. Так называемый челнок. И если он ни на что не указывает, то очевидно, что очередь пуста
danekne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь С++ phantom4eg Фриланс 1 25.04.2010 00:54
Очередь Си savra Помощь студентам 1 22.04.2010 18:48
Очередь Си svetikzo Помощь студентам 0 23.01.2010 10:03
Очередь skiffter Помощь студентам 2 03.12.2009 17:39
очередь odi_noki Общие вопросы Delphi 3 24.10.2008 12:09