vladis222 |
27.11.2012 01:01 |
Работа со списками
Здравствуйте, обращаюсь к вам по поводу работы со списками в Делфи. У меня лабораторная работа заключается в том, чтобы из списка удалить элементы с четным значением ключа. Я написал программу полностью,как у нас в методичке,написал процедуру удаления элементов с четным значением ключа,но как не пишу,программа уперто не хочет запускать удаление четных ключей. Посмотрите,пожалуйста на мой код.может я где-то ошибся.
Вот код программы :
Код:
program spiski;
{Удалить из списка 2 элемента,стоящие перед последним элементом списка}
{$APPTYPE CONSOLE}
uses
SysUtils,CRT32;
type u=^zap;
zap=record
inf:Integer;
ukz:u;
end;
var PSP:u; {Указатель списка}
ch:Char;
procedure Create_list(Var PSP:U);
Var Q, {указатель предыдущего элемента списка}
P:U;{Указатель текущего элемента списка}
Ch:Char;
Begin
New(Q);
Write('Vvedite inform.pole elementa : ');
Readln(Q^.Inf);
PSP:=Q;
Write('Prodoljit'' vvod ? y/n ');
Readln(ch);
while Ch in ['y','Y','н','Н'] do
begin
New(P);
Write('Vvedite inform.pole elementa : ');
Readln(P^.INF);
Q^.ukz:=P;
Q:=P;
Write('Prodoljit'' vvod? y/n ');
Readln(ch);
end;
Q^.ukz:=nil;
end;
procedure print_list(PSP:u);
{Процедура печати элементов списка.PSP-указатель списка}
var t:u;
begin
if PSP=nil then
begin
Writeln('Spisok pust');
Readkey;
Exit;
end;
Writeln('Soderjimoe spiska: ');
t:=PSP;
while t<>nil do
begin
write(t^.inf,'--> ');
t:=t^.ukz;
end;
Writeln('NIL');
Writeln('Najmite ljubuju klavishu');
ReadKey;
end;
procedure del_chnode (var PSP:U);
var Q,P:U;
Begin
P:=PSP;
while(P^.Ukz<>nil) do
Begin
Q:=P;
P:=P^.ukz;
end;
if P^.inf div 2 =0 then
begin
Q^.ukz:=P^.ukz;
P:=P^.ukz;
Dispose(P);
End;
While P<>nil do
begin
write(P^.inf,'-->');
P:=P^.Ukz;
end;
End;
procedure destroy_list(var PSP:u);
{Процедура освобождения памяти,занятой элементами списка.PSP-указатель списка}
var t:u;
begin
while PSP<>nil do
begin
t:=PSP;
PSP:=PSP^.ukz;
dispose(t); {Освобождение памяти}
end;
end;
begin
PSP:=nil;
repeat
ClrScr;
Writeln('1.Sozdat'' spisok ');
Writeln('2.Prosmotret'' spisok');
Writeln('3.Udalit'' 2 elementa spiska,stojashih pered poslednim');
Writeln('4.Udalit'' spisok');
Writeln('-------------------------------------------------------');
Writeln('0.Vihod');
Writeln;
write('Vash vibor: ');
ch:=ReadKey;
Writeln(ch);
Writeln;
case ch of
'1': begin
psp:=nil;
Create_list(PSP);
end;
'2':print_list(PSP);
'3':del_chnode(PSP);
'4': begin
destroy_list(PSP);
Writeln('Spisok udalyon');
ReadKey;
end;
end;
until ch='0';
end.
|