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

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

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

> Задача о стеках
Murderer
сообщение 3.04.2007 18:39
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской
Реальное имя: Арслан

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


Даны три стека, наполненные натуральными числами и четвертый стек пустой. В четвертый стек поместить три числа, являющиеся максимальными числами в первом, втором и третьем стеке. В четвертом стеке числа расположить в порядке неубывания, а в первых трех стеках порядок расположения оставшихся чисел оставить прежним.

Т.е. я понимаю так: через пробел в программе вводится числа в первый стек и нуль завершает ввод, потом второй и соответственно третий стек. Затем программа выводит три максимальных числа из каждого стека в порядке неубывания.

Уже которую неделю парюсь и все безуспешно... Ну не могу понять я эти стеки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 4.04.2007 12:59
Сообщение #2


Гость






Вариант №2:
type
  ttype = integer;

  ptitem = ^titem;
  titem = object
    info: ttype;
    next: ptitem;

    constructor init(x: ttype; nxt: ptitem);
    destructor done;
  end;

constructor titem.init(x: ttype;
            nxt: ptitem);
begin
  info := x;
  next := nxt
end;
destructor titem.done;
begin end;

type
  pttype = ^ttype;
  tstack = object
    head: ptitem;

    constructor init;
    destructor done;

    procedure push(x: ttype);
    function pop: ttype;
    function top: ttype;

    function empty: boolean;

    procedure print;
  end;

constructor tstack.init;
begin
  head := nil;
end;
destructor tstack.done;
begin
  while not empty do pop
end;

procedure tstack.push(x: ttype);
var p: ptitem;
begin
  new(p, init(x, head));
  head := p
end;

function tstack.pop: ttype;
var p: ptitem;
begin
  pop := -1;
  if not empty then begin
    p := head;
    head := head^.next;

    pop := p^.info;
    dispose(p, done);
  end
  else begin
    writeln('reading from empty stack');
    halt(101)
  end;
end;

function tstack.top: ttype;
begin
  if empty then top := maxInt
  else top := head^.info;
end;

function tstack.empty: boolean;
begin
  empty := not assigned(head)
end;

procedure tstack.print;
var p: ptitem;
begin
  p := head;
  write('(stack) <');
  while assigned(p) do begin
    write(p^.info, ' ');
    p := p^.next
  end;
  writeln('>')
end;

procedure sort_stack(var st: tstack);

  var changed: boolean;

  procedure deface(var new_st: tstack; next: ttype);
  var X: ttype;
  begin
    if not new_st.empty then begin
      X := new_st.pop;
      deface(new_st, X);
    end;

    if new_st.top < next then begin
      X := new_st.pop;
      new_st.push(next);
      new_st.push(X);
      changed := true;
    end
    else new_st.push(next);
  end;

begin
  repeat
    changed := false;
    deface(st, st.pop);
  until not changed;
end;


function max_stack(var st: tstack): ttype;

  var max_value: ttype;

  procedure deface(var new_st: tstack; next: ttype);
  var X: integer;
  begin
    if not new_st.empty then begin
      X := new_st.pop;
      if max_value < X then max_value := X;
      deface(new_st, X);
    end;
    new_st.push(next);
  end;

begin
  max_value := st.top;
  deface(st, st.pop);
  max_stack := max_value;
end;

var
  st_arr: array[1 .. 4] of tstack;
  i, j: integer;

begin
  for i := 1 to 3 do begin
    st_arr[i].init;
    for j := 1 to random(10) + 10 do
      st_arr[i].push(random(1000));
  end;

  st_arr[4].init;
  for i := 1 to 3 do begin
    writeln('#', i); st_arr[i].print;
    st_arr[4].push(max_stack(st_arr[i]));
  end;

  sort_stack(st_arr[4]);
  writeln('#4'); st_arr[4].print;
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Murderer   Задача о стеках   3.04.2007 18:39
klem4   Все о динамических структурах данных. Тут был ?   3.04.2007 18:41
Murderer   Там то я был... но мозг видать у меня не может пон...   3.04.2007 18:50
volvo   Можно обойтись четырьмя... Сначала проходишь по к...   3.04.2007 22:23
Murderer   Вот именно что никак. У меня даже кода программног...   4.04.2007 5:40
klem4   type TData = Integer; PTListItem = ^TlistIte...   4.04.2007 7:08
volvo   klem4, список <> стек ... Вся сложность-то к...   4.04.2007 10:10
klem4   И соответственно после обращения этот элемент из...   4.04.2007 10:19
volvo   Смотря какую операцию вызывать... Может, удаляется...   4.04.2007 10:26
klem4   Вот что пока выходит: Добваляем ф-ю Pop, изменяе...   4.04.2007 12:37
volvo   Вариант №2: type ttype = integer; ptitem = ^t...   4.04.2007 12:59
Murderer   Спасибо вам огромное! Не ожидал. А как сделать...   4.04.2007 17:44
Murderer   Простите. Просто я начинающий в паскале и сейчас е...   4.04.2007 19:33
volvo   В той программе, которую я тебе привел, в стек зан...   4.04.2007 19:46
Murderer   А чтобы увидеть результаты выполнения программы, ...   4.04.2007 20:47
Murderer   А вот в приведенной программе как сделать так, что...   5.04.2007 14:45
volvo   for i := 1 to 3 do begin st_arr[i].init; ...   5.04.2007 14:57
Murderer   Да, я видать глупость сморозил. Я хотел просто вме...   5.04.2007 15:00
Murderer   Все равно не выходит! Что мне исправить, чтобы...   5.04.2007 15:44
volvo   Так... Давай договоримся, ты присоединяешь СВОЮ пр...   5.04.2007 17:12
Murderer   И все таки... что мне нужно исправить, чтобы я сам...   11.04.2007 17:35
volvo   Предыдущее сообщение ты проигнорировал? Хорошо, з...   11.04.2007 17:38
Murderer   Извини Вольво! Просто очень надо, а я не силен...   11.04.2007 17:59
Lapp   чтобы я нужное мне число элементов вводил в прогр...   16.06.2007 13:15
Murderer   Там что исправить надо?   11.04.2007 18:36


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

 

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