Помощь - Поиск - Пользователи - Календарь
Полная версия: Динамическая память-списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
KOLYAN
Решите пожайлуста задачу: Составить программу, которая формирует список L включая в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2.
klem4
Идешь по элементам более короткого списка из L1 и L2. Берешь очередной элемент, если его нет в списке L и он есть во более длинном списке, добавляешь его в список L. Вот так на вскидку.

Будут конкретные вопросы по реализаци, спрашивай, а так поиск + Все о динамических структурах данных.
KOLYAN
Как составить процедуру, которая сравнивает элементы списков L1 и L2
klem4
Я бы реализовал список как объект, в котором был бы метод - функция, возвращающая true в случае если элемент value присутствует в списке. is_include(const value: Integer): Boolean;

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

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

KOLYAN, если что - вот тут такой объект реализован: Односвязный список
Только функция называется Present...
KOLYAN
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.