• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Работа со списками

vladis222

Ученик
Регистрация
25 Июл 2012
Сообщения
7
Реакции
0
Баллы
0
Работа со списками

Здравствуйте, обращаюсь к вам по поводу работы со списками в Делфи. У меня лабораторная работа заключается в том, чтобы из списка удалить элементы с четным значением ключа. Я написал программу полностью,как у нас в методичке,написал процедуру удаления элементов с четным значением ключа,но как не пишу,программа уперто не хочет запускать удаление четных ключей. Посмотрите,пожалуйста на мой код.может я где-то ошибся.
Вот код программы :
Код:
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.
 
Назад
Сверху