Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Работа со списками (http://www.tehnari.ru/f43/t81139/)

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.



Часовой пояс GMT +4, время: 14:54.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.