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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
volvo
сообщение 31.03.2005 14:03
Сообщение #2


Гость






Сначала идешь сюда: FAQ: Списки
читаешь все внимательно, и пишешь программу. Вот если она у тебя не заработает, то приходи и скажи, где...
 К началу страницы 
+ Ответить 
volvo
сообщение 31.03.2005 19:16
Сообщение #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 килобайт ) Кол-во скачиваний: 152
 К началу страницы 
+ Ответить 
Altair
сообщение 31.03.2005 19:22
Сообщение #4


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

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

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


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

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

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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Caries
сообщение 20.04.2005 19:07
Сообщение #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 - 20.04.2005 19:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.04.2005 21:58
Сообщение #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.
 К началу страницы 
+ Ответить 
Caries
сообщение 21.04.2005 19:54
Сообщение #7


Новичок
*

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

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


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


Гость






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

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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


Описать процедуру которая формирует список L, включив в него по одному разу элементы которые входят одновременно в L1 и L2
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2005 19:32
Сообщение #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:
 К началу страницы 
+ Ответить 
Caries
сообщение 5.05.2005 19:35
Сообщение #13


Новичок
*

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

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


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

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

 



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