Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2008, 07:46   #1
Anita_i
 
Регистрация: 11.05.2008
Сообщений: 9
Вопрос Стеки (как изменить задачу?)

Подскажите пожалуйста как из этих задач на добавление элемента в стек, сделать задачи на удаление элементов.
1. Удалить из стека первый элемент
2. Удалить из стека К-ый элемент

program pr1;
uses crt;
type din=^item;
item=record
elem:byte;
prev: din;
end;
var ts,p: din;
n,i,m,j:integer;
procedure addition(x:integer);
begin
new(p);
p^.elem:=x;
p^.prev:=ts;
ts:=p;
end;
procedure stack;
begin
p:=ts;
while p<>nil do begin
write(p^.elem,' ');
p:=p^.prev;
end;
writeln;
end;
begin
clrscr;
ts:=nil;
for i:=1 to 10 do addition(i);
stack;
for j:=1 to 2 do begin
writeln('dobavte element');
readln(m);
addition(m);
stack;
end;
readln;
end.

___________________________________ ___________
program pr2;
uses crt;
type din=^item;
item=record
elem:byte;
prev: din;
end;
var ts,p: din;
n,i,m,j,k:integer;
procedure addition(x:integer);
begin
new(p);
p^.elem:=x;
p^.prev:=ts;
ts:=p;
end;
procedure stack;
begin
p:=ts;
while p<>nil do begin
write(p^.elem,' ');
p:=p^.prev;
end;
writeln;
end;
procedure udal;
begin
if ts<>nil then begin
p:=ts^.prev;
dispose(ts);
ts:=p;
end;
end;
begin
clrscr;
ts:=nil;
for i:=1 to 10 do addition(i);
stack;
for j:=1 to 2 do begin
writeln('dobavte element');
readln(m);
addition(m);
stack;
end;
writeln('skolko udalit');
readln(n);
for k:=1 to n do udal;
stack;
readln;
end.

Последний раз редактировалось Anita_i; 21.05.2008 в 07:49.
Anita_i вне форума Ответить с цитированием
Старый 21.05.2008, 08:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых код оформляй специально предназначенным для этого тегом.
Во-вторых
Я так покумекал по старым лабам, вот есть пример удаления перецеплением:
Код:
type
 r=record
  prev:pointer;
  i:integer;
  next:pointer;
 end;
var n,e,p:^r;i:integer;
//********* PROCEDURE**********
procedure StekDel(i:integer);
//const
begin
 p:=n;
 while (p^.next<>nil)and(i>1) do begin
  p:=p^.next;dec(i);
 end;
 r(p^.next^).prev:=p^.prev;
 r(p^.prev^).next:=p^.next;

end;
//********* END PROCEDURE******* {}


begin
 //********* FOR ******************
 new(p);
 n:=p;
 p^.prev:=nil;
 p^.i:=0;
 for i :=1  to 10 do
 begin
  new(e);
  p^.next:=e;
  e^.prev:=p;
  p:=e;
  p^.i:=i;
 end;
 //******* END FOR ****************{}
 p:=n;
 while p^.next<>nil do begin
  writeln(p^.i);
  p:=p^.next;
 end;
  writeln;

 StekDel(4);
 p:=n;
 while p^.next<>nil do begin
  writeln(p^.i);
  p:=p^.next;
 end;
end.
В принципе StackDel тут процедура коорая отцепляет элемент из списка, посмотри как она сделана и сделай по аналогии.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2008, 10:37   #3
Anita_i
 
Регистрация: 11.05.2008
Сообщений: 9
По умолчанию

Благодарю)))
Anita_i вне форума Ответить с цитированием
Старый 30.11.2009, 19:29   #4
Апельсинка_7
Новичок
Джуниор
 
Регистрация: 30.11.2009
Сообщений: 1
По умолчанию

помогите решить задачу
С клавиатуры построчно вводятся числа<0. Ввод оканчивается 0. вывести все нечетные в порядке появления.
Апельсинка_7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как изменить своё имя? Манжосов Денис :) О форуме и сайтах клуба 11 22.07.2008 11:16
Задачи. Стеки Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 1 23.05.2008 16:17
Изменить разрешение Иллидан Паскаль, Turbo Pascal, PascalABC.NET 1 18.04.2008 22:15
Как изменить цвет Михаил Юрьевич Общие вопросы Delphi 5 14.01.2008 17:38
Изменить DynamicSkinForm UnD)eaD)Snake Общие вопросы Delphi 7 08.09.2007 19:19