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

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

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

> Однонаправленный список, вхождение одного списка в другой
сообщение
Сообщение #1





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

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


Доброго времени суток!
Пишу функцию, входит ли список L1 в список L2

я пишу если 1й эл списка L1 равен i-ому эл списка L2, то запускаю массив while L1^.next<>nil do {а вот тут-то и вопрос! я хочу записать: сравниваем 2й и последующие эл списка L1 с i+1, i+2... эл списка L2, как это записать я не знаю =( }
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
может произойти просто взрыв мозга!
Ничего тут произойти не может, твой код даже компилироваться не будет...

Цитата
я дописал этот код
Во-первых, ты не дописал, а переписал код (это два совершенно разных слова, заметь). Зачем понадобилось в тот код, что я показал, вносить изменения, причем совершенно ненужные? Я ж сказал, что приведенный фрагмент работает. Надо было только оформить его функцией, и правильно написать получение списка от пользователя. Вот, смотри:
type
telem = integer;

TList=^list;
List =
record
item:TElem;
Next:TList;
end;

Procedure creation(Var L:TList);
Var
x, last :TList;
Inf: TElem;
Begin
L := Nil; last := nil;
Writeln ('Введите элементы списка.');
while not eoln do
begin
read(inf);
new(x);
x^.next:=nil;
x^.item:=inf;
if L = nil then L := x
else last^.next := x;
Last := x;
end;
readln;
Writeln;
End;

procedure Print(L: TList);
begin
while l<>nil do
begin
write(l^.item:3);
l:=l^.next;
end;
writeln;
end;

function Search(L1_start, L2_start: tlist): boolean;
var
L2, curr_L1,curr_L2:TList;
begin
search := False;
if (L1_start<>nil) and (L2_start<>nil) then
begin
L2 := L2_start;
while L2 <> nil do
begin
if L1_start^.item = L2^.item then
begin
curr_L1 := L1_start^.next;
curr_L2 := L2^.next;
while (curr_L1 <> nil) and (curr_L1 <> nil) and (curr_L1^.item = curr_L2^.item) do
begin
curr_L1 := curr_L1^.next;
curr_L2 := curr_L2^.next;
end;
if curr_L1 = nil then
begin
Search := true;
write('found: ');
print(L2);
end;
end;
L2 := L2^.next;
end;
end;
end;

var L1, L2: tlist;
begin
L1 := nil; L2 := nil;
write('Please enter list L1: '); creation(L1);
write('Please enter list L2: '); creation(L2);
write('L1: '); print(L1);
write('L2: '); print(L2);
if not Search(L1, L2) then
begin
writeln('not found');
end;
readln;
end.


Please enter list L1: Введите элементы списка.
2 3 4

Please enter list L2: Введите элементы списка.
1 2 2 3 2 3 4 5

L1: 2 3 4

L2: 1 2 2 3 2 3 4 5

found: 2 3 4 5

Не надо никаких точек как признака окончания ввода, есть функция Eoln, которая понимает, когда закончилась строка.

Во вторых, в следующий раз пытайся хотя бы откомпилировать программу, и исправить те ошибки на которые указывает компилятор. О неописанном типе, о несуществующих переменных, например.

Ну, и в третьих: программа еще не закончена. Добавляй код удаления списков... Без него ни один уважающий себя преподаватель программу не примет. Работодатель - тем более...
 К началу страницы 
+ Ответить 

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


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

 





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