Помощь - Поиск - Пользователи - Календарь
Полная версия: Нужна помощь
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dunkel_L
Всё работает но в этом месте

   begin

      l:=top^.link;
      Pop:=top^.info;
      dispose (top);
      top:=l;
   end
     else  begin
      Writeln('   !ЋиЁЎЄ :‘внЄ Їгбв');
      Pop:=0;
   end;
end;


нужно убрать страку в выводе
"0 удалено из стека"

Ниже приведён код програмы

program laba2;
Uses CRT;
type ptr=^node;
     node=record
        info:integer;
        link:ptr;
     end;
var
   top,q,r:ptr;
   a,b,c:word;
procedure Push(n:integer);
var
   p:ptr;
begin
    new(p);
    p^.info:=n;
    p^.link:=top;
    top:=p;
end;
function Pop:integer;
var
   l:ptr;
begin
   if top <> nil then



   begin

      l:=top^.link;
      Pop:=top^.info;
      dispose (top);
      top:=l;
   end
     else  begin
      Writeln('   !ЋиЁЎЄ :‘внЄ Їгбв');
      Pop:=0;
   end;
end;



procedure menu;
begin
   write('   ‚ўҐ¤ЁвҐ Є(r)¬ ­¤г Ё ­ ¦¬ЁвҐ ‚‚Ћ„:   ');
   read(a);

   if a=1 then
      begin
         write('   ‚ўҐ¤ЁвҐ зЁб«(r):  ');
         readln(B);
         Push(B);
         menu;
      end
      else
   if a=2 then
      begin
         Writeln;
         Write(pop);
         writeln('  г¤ «Ґ­(r) Ё§ б⥪ ');
         readln;

         menu;
      end
      else
   if a=3 then
      begin
         Write('   ‘внЄ:');
         q:=top;
         while q<>nil do
         begin
            write(q^.info,' ');
            q:=q^.link;
         end;
         Writeln;
         menu;
      end
      else
   if a=4 then
      begin
         while top<>nil do
         begin
            r:=top^.link;
            dispose(top);
            top:=r;
         end;
     end
     else
   if a>=5 then
    Begin
     Writeln;
     Writeln('   ‚ў(r)¤ ­Ґ Є(r)४⥭   ');
     Writeln('   ‚ўҐ¤ЁвҐ Є(r)¬ ­¤г Ґйс а § ((r)в 1 ¤(r) 4)');
     Writeln;
     menu;
    end;
end;
begin
clrscr;
writeln('   1-‚ў(r)¤ зЁб«  б⥪ ');
writeln('   2-“¤ «Ґ­ЁҐ зЁб«  Ё§ б⥪ ');
writeln('   3-‚лў(r)¤ б⥪  ­  нЄа ­');
writeln('   4-‚ле(r)¤ Ё§ Їа(r)Ја ¬¬л');
menu;
end.


Вообще-то смайлики нужно отключать, да и тегами [ code ] пользоваться не мешало бы...

Кстати, название темы исправь...
volvo
Возвращай из Pop признак ошибки:
function Pop(var error: boolean):integer;
var l:ptr;
begin
  error := (top = nil);
  if not error then begin
    l:=top^.link;
    Pop:=top^.info;
    dispose (top);
    top:=l;
  end
  else begin
    Writeln('   !ЋиЁЎЄ :‘внЄ Їгбв');
    Pop:=0;
  end;
end;


procedure menu;
var 
  error: boolean;
  X: integer;
begin
  ...
  if a=2 then begin
    Writeln;
    X := pop(error);
    if not error then 
      writeln(X, '  г¤ «Ґ­(r) Ё§ б⥪ ')
    readln;
    menu;
  end
  ...
end;

Кстати,
Цитата
Всё работает
- это до поры до времени... У тебя же в menu постоянная рекурсия, и эта процедура никогда не заканчивается. Так что если будешь несколько десятков значений добавлять/удалять, обязательно нарвешься на Stack Overflow.

Как можно исправить программу, чтобы этого не возникало - ищи по форуму, я уже давал подобное решение...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.