Умоляю помогите!!! 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: Помогите!! Завтра последний день сдачи... а потом...
В первом задании имеется в виду, что строка "пр12ив334ет", например, будет преобразована в "привет12334", и записана во второй файл, или дублирующиеся цифры не нужны?
Вообще-то было сказано "перенося", а не "копируя"... Ну, в общем, если понадобится - сама изменишь:
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.
Спасибо огромное!! просто там ведь было написано: "с сохранением исходного взаимного порядка как среди цифр, так и среди остальных литер строки"