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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2016, 16:52   #1
Василий15
Пользователь
 
Регистрация: 07.05.2016
Сообщений: 27
По умолчанию Задание с очередью

Используя очередь, решить следующую задачу. В текстовом файле t записан текст, сбалансированный по круглым скобкам. Требуется напечатать в порядке возрастания номера позиций в тексте закрывающих скобок. Например, для текста A+(45–F(X)*(B– C)) надо напечатать:
10 16 17.

Код:
var
 f: text;
 f2: text;
 ch: char;
 i: byte;

begin
 assign(f,'c:1.txt');
 reset(f);
 assign(f2,'c:2.txt');
 rewrite(f2);
 
while not eof(f) do
 begin
  read(f,ch);
  for i:=1 to length(f) do
   if f[i]='(' then write(f2,i,' ');
 end;
 close(f);
 close(f2);
end.
Ругается на "for i:=1 to length(f) do" - нет перегруженной программы с такими типами параметров.
Василий15 вне форума Ответить с цитированием
Старый 12.05.2016, 16:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

правильно ругается. f - файловая переменная, из файла можно только читать и в файл писать. Обращаться к f[i] нельзя!
Вы прочитали один символ read(f,ch); - вот к ch и обращайтесь.


кроме того, я в упор не вижу у Вас в коде очередь.

впрочем, она здесь, наверное, и не нужна!

Код:
i:=0
while not eof(f) do
 begin
    inc(i);
    read(f,ch);
    if ch=')' then write(f2,i,' ');
 end;
 close(f);
 close(f2);

Последний раз редактировалось Serge_Bliznykov; 12.05.2016 в 17:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2016, 17:03   #3
Василий15
Пользователь
 
Регистрация: 07.05.2016
Сообщений: 27
По умолчанию

А как реализовать, используя очередь? Хоть примерный код пжлст.
Василий15 вне форума Ответить с цитированием
Старый 12.05.2016, 17:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в такой постановке как у Вас очередь (или стек) вообще не нужны. Совсем.

сравните с текстом задания, которое я легко нагуглил, где применение очереди/стека оправдано:

Цитата:
В текстовом файле записан текст, сбалансированный по круглым скобкам. Написать программу, которая для каждой пары, соответствующих открывающей и закрывающей скобок, печатает номера их позиций в тексте, упорядочив пары номеров в порядке возрастания номеров позиций закрывающих скобок, например, для текста А+(45–F(х)*(В–С)) надо напечатать: 8,10; 12,16; 3,17.

что же касается очереди, то
Цитата:
Очереди

Очередь — это линейный список информации, работа с которой происходит по принципу "первым пришел — первым вышел" (first-in, first-out); этот принцип (и очередь как структура данных) иногда еще называется FIFO. Это значит, что первый помещенный в очередь элемент будет получен из нее первым, второй помещенный элемент будет извлечен вторым и т.д. Это единственный способ работы с очередью; произвольный доступ к отдельным элементам не разрешается.
реализовать их можно по разному.
через динамический связанный список, например.

Последний раз редактировалось Serge_Bliznykov; 12.05.2016 в 17:31.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2016, 17:34   #5
Василий15
Пользователь
 
Регистрация: 07.05.2016
Сообщений: 27
По умолчанию

Преподаватель требует. Это скорее тупо для ознакомления с конструкцией, пусть даже и в ущерб реальной пользе.
Василий15 вне форума Ответить с цитированием
Старый 12.05.2016, 17:38   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

берите код здесь - Очередь. Основные операции над очередью
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь.Робота с очередью. JonnyFletcher Помощь студентам 0 26.05.2013 20:02
Смоделировать работу с очередью digger_zl Паскаль, Turbo Pascal, PascalABC.NET 4 24.12.2011 15:39
Работа с очередью (С++) phantom4eg Помощь студентам 1 24.04.2010 17:18
Работа с Очередью в Delphi Nitrox Помощь студентам 6 30.03.2010 18:10
Работа с очередью Ongi Общие вопросы C/C++ 1 08.01.2010 19:51