IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Списки
Caries
сообщение 31.03.2005 13:56
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Описать процедуру которая формирует список L, включив в него по одному разу элементы которые входят хотя в один из списков L1 и L2
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Caries
сообщение 20.04.2005 19:07
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


прогу накидал но она просто пока соединяет 2 списка. Нужно реализовать проверку списков, дабы исключить повторных включений в соединенном списке. Как? sad.gif
Код
program name;
uses crt;
type
tdata=integer;
sllptr=^slltype;
slltype = record
inf:tdata;
next: sllptr;
end;
procedure Unite(var head1,head2:sllptr);
var cur: sllptr;
begin
if head2<>nil then begin
 if head1=nil then head1:=head2
  else
   begin cur:=head1;
   while cur^.next<>nil do cur:=cur^.next;
   cur^.next:=head2;
   end;
   end;
   writeln;writeln;
   cur:=head1;
   while cur <> nil do
   begin
    write(cur^.inf);
    if cur^.next <> nil then write(',');
    cur:=cur^.next
    end;readln;
   end;

var head3,head4,g:sllptr;a:integer; i,n:integer;
begin
clrscr;
writeln('vvedite kol-vo elementov spiska1');
readln(n);
writeln('vvedite element spiska1');
read(a);
new(head3);
head3^.inf:=a;
head3^.next:=nil;
for i:=1 to n - 1 do
begin read(a);
new(g);
g^.inf:= a;
g^.next:=head3;
head3:=g;
end;
writeln('vvedite kol-vo elmenetov spiska2');
read(n);
writeln('vvedite elementi spiska2');
read(a);
new(head4);
head4^.inf:=a;
head4^.next:=nil;
for i:=1 to n-1 do
begin read(a);
new(g);
g^.inf:=a;
g^.next:=head4;
head4:=g;
end;
unite(head3,head4);
readln;
end.


Сообщение отредактировано: Caries - 20.04.2005 19:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.04.2005 21:58
Сообщение #3


Гость






Цитата(Caries @ 20.04.05 19:07)
Нужно реализовать проверку списков, дабы исключить повторных включений в соединенном списке.  Как? sad.gif

"Еще раз повторю - не пытайтесь объять необъятное" (С) Козьма Прутков.

Не надо все действия производить в основной программе. Действуй по принципу "разделяй и властвуй":
program name;
uses crt;
type
tdata = integer;

sllptr = ^slltype;
slltype = record
inf: tdata;
next: sllptr;
end;

tlist = record
first, last: sllptr;
end;

procedure init_list(var l: tlist);
begin
l.first := nil; l.last := nil;
end;

procedure add_to_list(var l: tlist;
element: tdata);
var p: sllptr;
begin
new(p);
p^.inf := element;
p^.next := nil;
if l.first = nil then l.first := p
else l.last^.next := p;
l.last := p
end;

function present_in_list(var l: tlist;
element: tdata): boolean;
var
p: sllptr;
ok: boolean;
begin
p := l.first; ok := true;
while (p <> nil) and ok do
if p^.inf = element
then ok := false
else p := p^.next;

present_in_list := (p <> nil)
end;

procedure unite(var l_res, one, two: tlist);
var
p: sllptr;
x: tdata;
begin
p := one.first;
while p <> nil do begin
add_to_list(l_res, p^.inf);
p := p^.next;
end;

p := two.first;
while p <> nil do begin
{ вот то, что нужно: элемент добавляется к списку-результату
только если не присутствует уже в нем }
if not present_in_list(l_res, p^.inf)
then add_to_list(l_res, p^.inf);
p := p^.next;
end;
end;


var ls, ls_1, ls_2: tlist;
a: tdata; i, n: integer;
p: sllptr;
begin
clrscr;

init_list(ls_1);
writeln('vvedite kol-vo elementov spiska1');
readln(n);
for i := 1 to n do begin
write('vvedite element spiska1: '); readln(a);
add_to_list(ls_1, a)
end;

init_list(ls_2);
writeln('vvedite kol-vo elementov spiska2');
readln(n);
for i := 1 to n do begin
write('vvedite element spiska2: '); readln(a);
add_to_list(ls_2, a)
end;

init_list(ls);
unite(ls, ls_1, ls_2);

p := ls.first;
while p <> nil do begin
write(p^.inf, ' ');
p := p^.next;
end;
readln;
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 10:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"