IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Стеки и очереди, завтра последний день сдачи!!
Athen
сообщение 6.06.2007 11:50
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


Умоляю помогите!!! !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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2007 12:02
Сообщение #2


Гость






Цитата
Насчет 2 задачи в faq находила, только мне надо наоборот...
Наоборот (в смысле, вычисление значения, заданного в постфиксе) - здесь: Задача на Обратную Польскую Нотацию (постфикс)
 К началу страницы 
+ Ответить 
Athen
сообщение 6.06.2007 14:19
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


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

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


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

А что с 1-м?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2007 14:29
Сообщение #4


Гость






В первом задании имеется в виду, что строка "пр12ив334ет", например, будет преобразована в "привет12334", и записана во второй файл, или дублирующиеся цифры не нужны?
 К началу страницы 
+ Ответить 
Athen
сообщение 6.06.2007 14:48
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


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

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


Я так понимаю, что надо, чтобы цифры сохранились в строке, т.е. так: "пр12ив334ет12334"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.06.2007 15:05
Сообщение #6


Гость






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

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 15:30
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Женский

Репутация: -  0  +


Спасибо огромное!! просто там ведь было написано: "с сохранением исходного взаимного порядка как среди цифр, так и среди остальных литер строки"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 20.07.2025 10:32
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"