Помощь - Поиск - Пользователи - Календарь
Полная версия: Стеки и очереди
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Athen
Умоляю помогите!!! !help.gif 2 задачи:
1. Используя очередь, содержимое текстового файла f, разделенное на строки, переписать в текстовый файл g, перенося при этом в конец каждой строки все входящие в нее цифры (с сохранением исходного взаимного порядка как среди цифр, так и среди остальных литер строки).

2.Постфиксной формой записи выражения a∆b называется запись, в которой знак операции размещен за операндами: ab∆.
Примеры:
a-b → ab-
a*b+c → ab*c- (т.е.(ab*)c+)
a*(b+c) → abc+* (т.е. a(bc+)*)
a+b2c2d*e → abc2d2e*+
Написать программу, которая вычисляет как целое число значение выражения (без переменных), записанное в постфиксной форме в текстовый файл postfix.
Использовать следующий алгоритм вычисления. Выражение просматривается слева направо. Если встречается операнд (число), то его значение (как целое) заносится в стек, а если операции, то из стека извлекаются два последних элемента (это операнды данной операции), над ними выполняется операция, и ее результат записывается в стек. В конце концов в стеке останется только одно число – значение всего выражения.

Насчет 2 задачи в faq находила, только мне надо наоборот... да я чет никак со стеками разобраться не могу!!!:ypriamii: Помогите!! Завтра последний день сдачи... а потом... mega_chok.gif
volvo
Цитата
Насчет 2 задачи в faq находила, только мне надо наоборот...
Наоборот (в смысле, вычисление значения, заданного в постфиксе) - здесь: Задача на Обратную Польскую Нотацию (постфикс)
Athen
Цитата(volvo @ 6.06.2007 15:02) *

Наоборот (в смысле, вычисление значения, заданного в постфиксе) - здесь: Задача на Обратную Польскую Нотацию (постфикс)


Пасиба огромное! я не на это наткуналась, а нашла то, как наоборот преобразовывать выражение в постфиксную форму.

А что с 1-м?
volvo
В первом задании имеется в виду, что строка "пр12ив334ет", например, будет преобразована в "привет12334", и записана во второй файл, или дублирующиеся цифры не нужны?
Athen
Цитата(volvo @ 6.06.2007 17:29) *

В первом задании имеется в виду, что строка "пр12ив334ет", например, будет преобразована в "привет12334", и записана во второй файл, или дублирующиеся цифры не нужны?


Я так понимаю, что надо, чтобы цифры сохранились в строке, т.е. так: "пр12ив334ет12334"
volvo
Вообще-то было сказано "перенося", а не "копируя"... Ну, в общем, если понадобится - сама изменишь:

type
  item = char;
  pqueue = ^tqueue;
  tqueue = record
    data: item;
    next: pqueue;
  end;

  queue = record
    head, tail: pqueue;
  end;

procedure init_queue(var q: queue);
begin
  q.head := nil;
  q.tail := nil;
end;

procedure put(var q: queue; X: item);
var p: pqueue;
begin
  new(p);
  p^.data := X;
  p^.next := nil;

  if q.head = nil then q.head := p
  else q.tail^.next := p;

  q.tail := p;
end;
function get(var q: queue): item;
var T: pqueue;
begin
  if q.head <> nil then begin
    get := q.head^.data;
    T := q.head;
    q.head := q.head^.next;
    dispose(T);
  end
  else get := #0;
end;

procedure concat_queue(var q1, q2: queue);
begin
  if q1.head <> nil then begin
    q1.tail^.next := q2.head;
  end;
end;

var
  q_one, q_two: queue;
  f_in, f_out: text;

  s: string;
  i: integer;

begin

  assign(f_in, 't1.txt'); reset(f_in);
  assign(f_out, 't2.txt'); rewrite(f_out);

  while not eof(f_in) do begin
    init_queue(q_one); init_queue(q_two);
    readln(f_in, s);

    for i := 1 to length(s) do begin
      put(q_one, s[i]);
      if s[i] in ['0' .. '9'] then put(q_two, s[i]);

      {
      if s[i] in ['0' .. '9'] then put(q_two, s[i])
      else put(q_one, s[i]);
      }
    end;


    concat_queue(q_one, q_two);

    s := '';
    while q_one.head <> nil do
      s := s + get(q_one);

    writeln(f_out, s);

  end;
  close(f_out);
  close(f_in);

end.


(закомментированный код делает так, как я показал в 4-м сообщении)
Athen
Спасибо огромное!! просто там ведь было написано: "с сохранением исходного взаимного порядка как среди цифр, так и среди остальных литер строки"
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.