Стек с указателями, программа есть
Добавлено: 02 май 2013, 14:48
Помогите пожалуйста найти ошибку...Задание и программа ниже:
Из заданного стека, хранящего символы, удалить все символы, являющиеся буквами или цифрами, и подсчитать сколько в нем было цифр. (Удалять и считать можно как при перекладывании в дополнительный стек, так и при возвращении элементов на место.)
uses
crt;
type
ch = char;
PElem = ^TElem; //указатель на запись
TElem = record
info: ch; //информационная часть
next: Pelem; //указатель на следующий элемент
end;
var
p, top: PElem;
procedure create();
var
f: Text;
s: ch;
begin
Assign(f, 'text.txt');
Reset(f);
while not Eof(f) do
begin
new(p);
p^.next := top;
read(f, s);
p^.info := s;
top := p;
end;
end;
procedure Chtenie();
begin
p := top;
while p <> nil do
begin
writeln(p^.info);
p := p^.next;
end;
end;
procedure TopToTop(var top, Dop: PElem);
begin
new(top);
p := top;
top := top^.next;
p^.Next := Dop;
Dop := p;
end;
procedure Proverka();
var
pAux: PElem;
el: ch;
Dop: PElem;
n: integer;
begin
Dop := nil;
n := 0;
while top <> nil do
begin
el := top^.info;
if el in ['a'..'z'] then
begin
pAux := top;
top := top^.next;
dispose(pAux);
pAux := nil;
end;
if el in ['0'..'9'] then
begin
Inc(n);
pAux := top;
top := top^.next;
dispose(pAux);
pAux := nil;
end;
TopToTop(top, Dop);
end;
while Dop <> nil do
begin
TopToTop(Dop, top);
end;
writeln('n=', n);
p := top;
while p <> nil do
begin
writeln(p^.info);
p := p^.next;
end;
end;
begin
create();
Chtenie();
Proverka();
Chtenie();
end.
Неправильно выводит ((ничего не считает
Из заданного стека, хранящего символы, удалить все символы, являющиеся буквами или цифрами, и подсчитать сколько в нем было цифр. (Удалять и считать можно как при перекладывании в дополнительный стек, так и при возвращении элементов на место.)
uses
crt;
type
ch = char;
PElem = ^TElem; //указатель на запись
TElem = record
info: ch; //информационная часть
next: Pelem; //указатель на следующий элемент
end;
var
p, top: PElem;
procedure create();
var
f: Text;
s: ch;
begin
Assign(f, 'text.txt');
Reset(f);
while not Eof(f) do
begin
new(p);
p^.next := top;
read(f, s);
p^.info := s;
top := p;
end;
end;
procedure Chtenie();
begin
p := top;
while p <> nil do
begin
writeln(p^.info);
p := p^.next;
end;
end;
procedure TopToTop(var top, Dop: PElem);
begin
new(top);
p := top;
top := top^.next;
p^.Next := Dop;
Dop := p;
end;
procedure Proverka();
var
pAux: PElem;
el: ch;
Dop: PElem;
n: integer;
begin
Dop := nil;
n := 0;
while top <> nil do
begin
el := top^.info;
if el in ['a'..'z'] then
begin
pAux := top;
top := top^.next;
dispose(pAux);
pAux := nil;
end;
if el in ['0'..'9'] then
begin
Inc(n);
pAux := top;
top := top^.next;
dispose(pAux);
pAux := nil;
end;
TopToTop(top, Dop);
end;
while Dop <> nil do
begin
TopToTop(Dop, top);
end;
writeln('n=', n);
p := top;
while p <> nil do
begin
writeln(p^.info);
p := p^.next;
end;
end;
begin
create();
Chtenie();
Proverka();
Chtenie();
end.
Неправильно выводит ((ничего не считает