Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Стеки и очереди

Автор: Athen 6.06.2007 15:50

Умоляю помогите!!! !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 6.06.2007 16:02

Цитата
Насчет 2 задачи в faq находила, только мне надо наоборот...
Наоборот (в смысле, вычисление значения, заданного в постфиксе) - здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=7138&view=findpost&p=51507

Автор: Athen 6.06.2007 18:19

Цитата(volvo @ 6.06.2007 15:02) *

Наоборот (в смысле, вычисление значения, заданного в постфиксе) - здесь: http://forum.pascal.net.ru/index.php?s=&showtopic=7138&view=findpost&p=51507


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

А что с 1-м?

Автор: volvo 6.06.2007 18:29

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

Автор: Athen 6.06.2007 18:48

Цитата(volvo @ 6.06.2007 17:29) *

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


Я так понимаю, что надо, чтобы цифры сохранились в строке, т.е. так: "пр12ив334ет12334"

Автор: volvo 6.06.2007 19:05

Вообще-то было сказано "перенося", а не "копируя"... Ну, в общем, если понадобится - сама изменишь:

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 6.06.2007 19:30

Спасибо огромное!! просто там ведь было написано: "с сохранением исходного взаимного порядка как среди цифр, так и среди остальных литер строки"