Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Динамическая память-списки

Автор: KOLYAN 21.01.2008 22:03

Решите пожайлуста задачу: Составить программу, которая формирует список L включая в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.

Автор: klem4 21.01.2008 22:15

Идешь по элементам более короткого списка из L1 и L2. Берешь очередной элемент, если его нет в списке L и он есть во более длинном списке, добавляешь его в список L. Вот так на вскидку.

Будут конкретные вопросы по реализаци, спрашивай, а так поиск + http://forum.pascal.net.ru/index.php?showtopic=2706

Автор: KOLYAN 21.01.2008 22:25

Как составить процедуру, которая сравнивает элементы списков L1 и L2

Автор: klem4 21.01.2008 22:31

Я бы реализовал список как объект, в котором был бы метод - функция, возвращающая true в случае если элемент value присутствует в списке. is_include(const value: Integer): Boolean;

Ну а реализация, запоминаем начало списка, далее идем по списку до тех пор пока не дойдем до конца либо пока не наткнемся на такой элемент, что head^.value = value. Если дошли до конца, то вернуть функция дожна false иначе true, ну и не забыть установить head на начало списка, (адрес мы запомнили в начале алгоритма)

вот примерно так.

Автор: volvo 21.01.2008 22:36

Цитата
Я бы реализовал список как объект, в котором был бы метод - функция, возвращающая true в случае если элемент value присутствует в списке.
yes2.gif

KOLYAN, если что - вот тут такой объект реализован: http://volvo71.narod.ru/faq_folder/oop_dds.htm#dds_list_sx
Только функция называется Present...

Автор: KOLYAN 22.01.2008 20:49

program spiski;
uses crt;
type tinf=char; tp=^tel;
tel=record
inf:tinf;
psled:tp;
end;
var head, head1:tp; m,r:char; pe:tp; t,n:integer;

procedure vsp(var iel:tinf; var head:tp; n:integer);
var pe:tp; i:integer;
begin
for i:=1 to n do
begin
read(m);
new(pe);
pe^.inf:=iel;
pe^.psled:=head;
head:=pe;
end;
end;
procedure vibor(.....
while (head<>nil) and (head1<>nil) do begin
head^.inf= then
begin
clrscr;
writeln('n=');
readln(n);
writeln('t=');
readln(t);
writeln ('Vedite elementi spiska L1');
vsp(m,head,n);
writeln ('Vedite elementi spiska L2');
vsp(r,head1,t);

end.