Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2012, 11:38   #1
gst_tirada
Новичок
Джуниор
 
Регистрация: 28.05.2012
Сообщений: 1
Радость Динамические структуры. Списки

Доброе время суток все. Нужна помощь.
Сформировать список и выполнить следующее задание:
Удаление из списка всех элементов после данного.

НО, у меня есть код вот этого задания.
Удаление из списка заданного элемента.

Помогите изменить пожалуйста.
Код:
unit dlist3_;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    Edit3: TEdit;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

type
  TPStudent=^TStudent; 

  TStudent = record
  numb:integer;
  f_name:string[20];  
	l_name:string[20]; 
	next: TPStudent;  
  end;

var
  head: TPStudent;  
procedure TForm1.Button1Click(Sender: TObject);
var
   node: TPStudent; 
   curr: TPStudent; 
   pre:  TPStudent; 
begin
   new(node); 
   node^.numb:=strtoint(edit3.text);
   node^.f_name:=Edit1.Text;
   node^.l_name:=Edit2.Text;

   curr:=head;
   pre:=NIL;
   
   while (curr <> NIL)and(node.numb>curr^.numb)do
   begin
  
     pre:= curr;
     curr:=curr^.next; 
   end;
   if pre = NIL
     then
        begin
    
          node^.next:=head;
	        head:=node;
        end
     else
        begin
         
	  node^.next:=pre^.next;
          pre^.next:=node;
        end;

   Edit1.text:='';
   Edit2.text:='';
   Edit3.text:='';
   Edit3.SetFocus;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
 curr: TPStudent;  
 n:integer;
 st:string; 
begin
 n:=0;
 st:='';
 curr:=head;
 while curr <> NIL do
    begin
      n:=n+1;
      st:=st+inttostr(curr^.numb)+'  '+curr^.f_name+'     '+curr^.l_name+#13;
      curr:=curr^.next;
    end;
 if n <> 0
    then ShowMessage('Список'+#13+#13+st)
    else ShowMessage('В списке нет эллементов.');
end;



procedure TForm1.Button3Click(Sender: TObject);
var
  curr:TPStudent; 
  pre: TPStudent;
  found:boolean;  
  if head = NIL then
     begin
        MessageDlg('Список пусто!',mtError,[mbOk],0);
        Exit;
     end;
  curr:=head; 
  pre:=NIL;    
  found:=FALSE;

 
  while (curr <> NIL) and (not found) do
      begin
          if (curr^.f_name = Edit1.Text) and (curr^.l_name = Edit2.Text)
          and(curr^.numb=strtoint(edit3.Text))
            then found:=TRUE 
            else 
               begin
                 pre:=curr;
                 curr:=curr^.next;
               end;
      end;


      if found then
         begin
           
if MessageDlg('Узел будет удалён из списка!',mtWarning,[mbOk,mbCancel],0) = mrOk
then begin
        
            if pre = NIL  then begin
            head:=curr^.next;   
            dispose(curr);
            MessageDlg('Узел' + #13 +
                         '    ' + #13 +
                      'Номер п/п: '+Edit3.Text + #13 +
                      'Фамилия: '+Edit1.Text + #13 +
                      'Имя: ' + Edit2.Text + #13 +
                      '    ' + #13 +
                      'Удалён из списка.',
                      mtInformation,[mbOk],0);
            end;
           if pre <> NIL  then begin
             pre^.next:=curr^.next;
             Dispose(curr);
             MessageDlg('Узел' + #13 +
                         '    ' + #13 +
                      'Номер п/п: '+Edit3.Text + #13 +
                      'Фамилия: '+Edit1.Text + #13 +
                      'Имя: ' + Edit2.Text + #13 +
                      '    ' + #13 +
                      'Удалён из списка.',
                      mtInformation,[mbOk],0);
                      end;
         end;
         end
      else begin

           MessageDlg('Узел' + #13 +
                         '    ' + #13 +
                      'Номер п/п: '+Edit3.Text + #13 +
                      'Фамилия: '+Edit1.Text + #13 +
                      'Имя: ' + Edit2.Text + #13 +
                      '    ' + #13 +
                      'В списке не найден.',
                      mtError,[mbOk],0);
                       end;
      edit1.Text:='';
      Edit2.Text:='';
      Edit3.Text:='';
      Edit3.SetFocus;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
edit3.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  head:=NIL;
end;

end.
Заранее благодарен за помощь.

Последний раз редактировалось Stilet; 28.05.2012 в 14:08.
gst_tirada вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры (связанные списки) Proger_1 Общие вопросы C/C++ 0 19.05.2010 21:34
Динамические структуры данных. Списки. dmit365 Помощь студентам 1 20.12.2009 23:12
Динамические структуры данных - списки FoOtBaLiIsT Общие вопросы C/C++ 0 18.03.2009 22:10