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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2016, 13:33   #1
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию Delphi. Списки.

Дан список L, элементы которого являются целыми числами. Если первый и третий элементы списка равны, то удалить из списка все элементы с четными индексами.

Код:
unit lab6_2un;

interface

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

type List=^node;
     node=record
       info: integer;
       b: boolean;
       next: List;
       i:integer;
     end;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    function form(n: integer): List;
    procedure print(Name: string; Lab: TLabel; L: List);
    procedure compare(L: List);
    function Del(var L: List): boolean;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  L: List;
  k: integer;

implementation

{$R *.dfm}
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var code: integer;
begin
  if key=#13 then begin
    val(Edit1.Text, k, code);
    if code=0 then begin
      L:=form(k);
      compare(L);
      print('L:', Label1, L);
      while Del(L) do;
      print('Lnew:', label2, L);
    end
    else begin
      Edit1.Text:='';
      Edit1.SetFocus;
    end;
  end;
end;

function TForm1.form(n: integer): List;
var T, Head, Tail: List;
    i: integer;
begin
  Head:=nil;
  randomize;
  for i:=1 to n do begin
    New(T);
    T^.info:=round(100*random)-10;
    T^.b:=false;
    T^.next:=nil;
    if Head=nil then Head:=T
    else Tail^.next:=T;
    Tail:=T;
  end;
  form:=Head;
end;

procedure TForm1.print(Name: string; Lab: TLabel; L: List);
begin
  Lab.Caption:=Name+#13;
  while L<>nil do begin
    Lab.Caption:=Lab.Caption+IntToStr(L^.info);
    if L^.b then Lab.Caption:=Lab.Caption+'  (+)';
    Lab.Caption:=Lab.Caption+#13;
    L:=L^.next;
  end;
end;

procedure TForm1.compare(L: List);
var P: List;
begin
  while L^.next<>nil do begin
    P:=L^.next;
    while P<>nil do  begin
      if L^.info=P^.next^.next^.info then P^.b:=true;
      P:=P^.next;
    end;
    L:=L^.next;
  end;
end;

function TForm1.Del(var L: List): boolean;
var P: List;
begin
  if L<>nil then
    if L^.b  then begin
      P:=L; l:=L^.next;
      dispose(P);
      Del:=true;
    end
    else Del:=Del(L^.next)
  else Del:=false;
end;

end.
Нужно вывести два списка: один исходный, другой преобразованный.Это мой код выполняет. Но как оформить нужное мне условие не знаю.Буду признателен за помощь.

Последний раз редактировалось Stilet; 03.01.2016 в 13:42.
armchair вне форума Ответить с цитированием
Старый 03.01.2016, 13:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как оформить нужное мне условие
Самое универсальное решение - сделать функцию:
Код:
function ItemByNum(Head:List;i:integer):List;
begin
 Result:=Head;
 while (Result<>nil) and (i>0) do begin Result:=Result^.next; dec(i);end;
end;
Соответственно
Код:
Var q,w:List;
...
q:=ItemByNum(L,1);w:=ItemByNum(L,3);
if (q<>nil) and (w<>nil) and (q^.info=w^.info) then удалить из списка все элементы
Идея подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2016, 17:25   #3
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию

Да, благодарю за помощь)
armchair вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Списки. armchair Помощь студентам 1 27.12.2015 15:35
Delphi списки JustSay Помощь студентам 2 28.07.2013 02:43
Delphi, списки edmynt Помощь студентам 1 23.02.2010 18:02
списки в Delphi -COREY- Помощь студентам 0 08.12.2009 19:55
Delphi списки tanek Помощь студентам 6 05.11.2009 23:21