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

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

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

 
 Ответить  Открыть новую тему 
> Списки
сообщение
Сообщение #1


Новичок
*

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

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


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


Гость






Сначала идешь сюда: FAQ: Списки
читаешь все внимательно, и пишешь программу. Вот если она у тебя не заработает, то приходи и скажи, где...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






А вообще-то это делается вот так:
Код
uses item, list;

const
 first: array[1 .. 10] of integer =
   (1, 3, 6, 3, 8, 2, 6, 5, 3, 9);
 second: array[1 .. 10] of integer =
   (1, 23, 6, 83, 8, 2, 16, 5, 35, 9);


procedure add_once(var lst_from, lst_to: tlist);
 var p: ptitem;
 begin
   p := lst_from.first;
   while assigned(p) do begin
     if lst_to.find(p^.info) = nil
       then lst_to.append(p^.info);
     p := p^.next
   end
 end;

var
 L, L1, L2: tlist;
 i: integer;

begin
 L1.init; for i := 1 to 10 do
   L1.append(first[i]); L1.print;

 L2.init; for i := 1 to 10 do
   L2.append(second[i]); L2.print;

 L.Init;
 add_once(L1, L);
 add_once(L2, L);
 L.print;

 L.done;
 L2.done;
 L1.done;
end.


Чтобы запустить эту программу - качай файл list.rar из аттача и распаковывай в ту же директорию, где сама программа.


Прикрепленные файлы
Прикрепленный файл  list.rar ( 1.35 килобайт ) Кол-во скачиваний: 259
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Цитата
Описать процедуру которая формирует список L, включив в него по одному разу элементы которые входят хотя в один из списков L1 и L2

Тебе дали ссылку, с необходимой информацией.
Если хочешь думать, читай и делай сам. Если нет, получай решение с ООП...
и разбирайся с ООП и ДСД smile.gif :P

ООП в массы!!!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата(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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Извиняюсь. Я не понял какую роль выполняет function present_in_list...
Объясните пожалуйста
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Функция проверки, присутствует ли элемент в списке...
function present_in_list(var l: tlist;
element: tdata): boolean;

Передаем этой функции список, в котором надо проверять (L) и значение (element), и функция вернет True если element уже присутствует в L... Иначе вернется False...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


А если мне надо чтобы входило одновременно в 2 списка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






То есть? Условие переформулируй полностью. Как оно будет звучать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


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


Гость






Тогда Unite должна будет выглядеть так:
procedure unite(var l_res, one, two: tlist);
var
p: sllptr;
x: tdata;
begin
p := one.first;
while p <> nil do begin
{ если этот элемент присутствует во втором списке }
if present_in_list(two, p^.inf) and
{ и еще не присутствует в результате }
(not present_in_list(l_res, p^.inf)) then

{ то добавить его к результату }
add_to_list(l_res, p^.inf);
p := p^.next;
end;
end;


Все просто :yes:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 14.05.2024 20:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name