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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.06.2009, 05:47   #1
@лен@
Новичок
Джуниор
 
Регистрация: 02.06.2009
Сообщений: 3
Вопрос Линейный список в Delphi

Пожалуйста, помогите!!!! Напишите код проги:
Даны два линейных списка. Выяснить, является ли один из списков подсписком другого.
Я пыталась сама сделать, ничего не получается(((
@лен@ вне форума
Старый 03.06.2009, 06:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

отлично.
будем, значит, дублировать темы, пока кто-то не напишет программу за Вас?!

ну и чем же Вас не устроил мой ответ в Вашей теме -
Линейный список в Delphi ?

Цитата:
Сообщение от @лен@
Я пыталась сама сделать
не верю! Давайте код Вашей программы!
Serge_Bliznykov вне форума
Старый 03.06.2009, 06:42   #3
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Код:
program Project2;
Type BT = LongInt;
            U = ^Zveno;
            Zveno = Record
             Inf : BT;
             Next: U
            End;

Procedure V_Nachalo(Var First : U; X : BT);
       Var Vsp : U;
       Begin
               New(Vsp);//выделяем динамическую память
               Vsp^.Inf := X;
               Vsp^.Next := First;
               First := Vsp;
       End;

       Procedure V_Spisok(Pred : U; X : BT);
       Var Vsp : U;
       Begin
           New(Vsp);
           Vsp^.Inf := X;
           Vsp^.Next := Pred^.Next;//это звено ссылается на то что было следом за звеном pred
           Pred^.Next := Vsp;
       End;

       Procedure Print(First : U);
       Var Vsp : U;
       Begin
            Vsp := First;//сохраняем ссылку на начало
            While Vsp <> Nil Do
            Begin
               Write(Vsp^.Inf : 4);
               Vsp := Vsp^.Next
            End; WriteLn
       End;

Procedure Formirov_Spiska(var S:U; var n:integer); //заполняет список
var v:U;
    i:integer;
    a:BT;
begin
   Write('kol-vo elementov v spiske: ');
   readln(n);
   s:=nil;//зануляем список
   Write('elem: ');
   readln(a);
   V_Nachalo(s,a);
   v:=s; //сохраняем указатель на начало
   for i:=2 to n do
      begin
       Write('elem: ');
       readln(a);
       V_Spisok(v,a);
       v:=v^.next;//чтобы указатель перешел на следующий
      end;
end;

function Pod(L1,L2:U):boolean;
var S,vsp:U;
begin
   S:=L1;
   vsp:=L2;
   while (S<>nil)and(S^.Inf<>vsp^.Inf) do S:=S^.Next;
  Pod:=true;
  while vsp<>nil do
   begin
    if vsp^.Inf<>S^.Inf then Pod:=false;
    vsp:=vsp^.Next;
    S:=S^.Next;
    if (S=nil)and(vsp<>nil) then begin
                                    Pod:=false;
                                    Break;
                                 end;
   end;
end;

var L1,L2,S,vsp:U;
    n1,n2:integer;
    p:boolean;
begin
  Formirov_Spiska(L1,n1);
  Formirov_Spiska(L2,n2);
  writeln;
  print(L1);
  print(L2);
  if n1>n2 then begin
                  S:=L1;
                  vsp:=L2;
                end
           else begin
                  S:=L2;
                  vsp:=L1;
                end;
  Writeln(Pod(S,vsp));
  readln;
end.
Жми на весы!!!
Chudo4258 вне форума
Старый 03.06.2009, 06:45   #4
@лен@
Новичок
Джуниор
 
Регистрация: 02.06.2009
Сообщений: 3
По умолчанию

Код:
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
   

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
type
TPStudent=^TStudent; // указатель на тип TStudent
TStudent = record
f:string[20]; // 1 список
l: string[20]; // 2 список
next: TPStudent; // следующий элемент списка
end;
var
head: TPStudent; // начало (голова) списка
// добавить элемент в начало списка
procedure TForm1.Button1Click(Sender: TObject);
 var
curr: TPStudent; // новый элемент списка
begin
new(curr); // выделить память для элемента списка
curr^.f:= Edit1.Text;
curr^.l:= Edit2.Text;
// добавление в начало списка
curr^.next := head; head := curr;
// очистить поля ввода
Edit1.text:='';
Edit2.text:= '';
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+curr^.f+' '+curr^.l+#13;
      curr:=curr^.next;
    end;
 if n <> 0
    then ShowMessage('Список:'+#13+st)
    else ShowMessage('В списке нет элементов.');
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
 head:=NIL;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;



end.

Последний раз редактировалось Stilet; 03.06.2009 в 08:29.
@лен@ вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейный список в Delphi @лен@ Помощь студентам 1 02.06.2009 07:33
Линейный Двунаправленный Список D1mon Помощь студентам 1 14.04.2009 21:37
Составить линейный список, Среда Delphi Kreaman Помощь студентам 1 11.06.2008 19:54
Линейный список Black_Ak24 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2008 15:00