Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на языке Паскаль. Выдает ошибку, почему так происходить, а галвное как исправить?

Николай Кукушкин Ученик (85), на голосовании 2 недели назад
Задача: Сформировать стек из целых чисел. Используя операции работы со стеком, удалить из него все числа, равные минимальному. Вывести результат.


program OPZ;
type ptype=^p;
p = record
next:ptype;
info:integer;
end;

var t1,t2:ptype; minSTEC:ptype;


Procedure Add_Stec(var p:ptype; ch:integer) ;
var pr: ptype;
begin
new(pr);
pr^.next:=p;
pr^.info:=ch;
p:=pr;
end;


Procedure Del_Stec(var p:ptype;var ch:integer) ;
var pr:ptype;
begin
ch:=p^.info ;
pr:= p ;
p:= p^.next;
dispose(pr);
end;


Procedure Print(p:ptype);
begin
minSTEC:=p^.info;
while p<> nil do
begin
if p^.info> p^.next
then minSTEC:=p^.next;
end;
end;
var sim:integer;
begin
t1:=Nil;
while not eoln do
begin
read(sim);
Add_Stec(t1,sim);
end;
Print(t1);
end.
Голосование за лучший ответ
λ Искусственный Интеллект (226762) 1 месяц назад
begin
Николай КукушкинУченик (85) 1 месяц назад
Где именно?
λ Искусственный Интеллект (226762) Николай Кукушкин, после program OPZ;
Malenkiuprinter Kpachemokoc Знаток (376) 1 месяц назад
В вашем коде есть несколько проблем:

В процедуре Print не правильно находится минимальный элемент стека. Нужно сравнивать info текущего элемента со значением minSTEC, а не с info следующего элемента.
В процедуре Print нет кода для перехода к следующему элементу в цикле while, поэтому он зависает в бесконечном цикле.

 program OPZ; 

type
ptype = ^p;
p = record
next: ptype;
info: integer;
end;

var
t1, t2, minSTEC: ptype;

Procedure Add_Stec(var p: ptype; ch: integer);
var
pr: ptype;
begin
new(pr);
pr^.next := p;
pr^.info := ch;
p := pr;
end;

Procedure Del_Stec(var p: ptype; var ch: integer);
var
pr: ptype;
begin
ch := p^.info;
pr := p;
p := p^.next;
dispose(pr);
end;

Procedure FindMin(p: ptype; var minVal: integer);
begin
minVal := p^.info;
while p <> nil do
begin
if p^.info < minVal then
minVal := p^.info;
p := p^.next;
end;
end;

Procedure DeleteMin(var p: ptype; minVal: integer);
var
current, prev: ptype;
begin
while (p <> nil) and (p^.info = minVal) do
begin
current := p;
p := p^.next;
dispose(current);
end;

if p <> nil then
begin
prev := p;
current := p^.next;
while current <> nil do
begin
if current^.info = minVal then
begin
prev^.next := current^.next;
dispose(current);
current := prev^.next;
end
else
begin
prev := current;
current := current^.next;
end;
end;
end;
end;

procedure PrintStack(p: ptype);
begin
while p <> nil do
begin
writeln(p^.info);
p := p^.next;
end;
end;

var
sim, minVal: integer;
begin
t1 := nil;
writeln('Введите целые числа (для завершения ввода введите 0):');
while not eoln do
begin
read(sim);
Add_Stec(t1, sim);
end;

FindMin(t1, minVal);
DeleteMin(t1, minVal);

writeln('Содержимое стека:');
PrintStack(t1);
end.
Николай КукушкинУченик (85) 1 месяц назад
понял в чем моя ошибка была, спасибо. Но почему то ваш код ничего не хочет выводить на экран(
Malenkiuprinter Kpachemokoc Знаток (376) поправил
Похожие вопросы