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

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

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

> Линейные списки
сообщение
Сообщение #1


Новичок
*

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

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


читал я фак... немного понял.. но не все...
задание...
дано два линейных списка, А1 и А2, сделать подпрограмму которая будет в конец списка А1 кидать все элементы списка А2.

накалякал я такое


program pmf;
uses crt;
type
TEl = ^El;
El = record
i: integer;
next: TEl;
end;

var
A1,A2,A3: TEl;
i1,i2,j: integer;

begin
clrscr;

Randomize;
i1:= Random(10);
writeln('Dlina spiska A1 - ', i1);
for j:=1 to i1 do {3a/7oJIHaem A1}
begin
A1^.i:=random(10)-10;
write(A1^.i,' ');
end;
writeln;
i2:=random(10);
writeln('Dlina spiska A2 - ', i2);

for j:=1 to i2 do {3a/7oJIHaem A2}
begin
A2^.i:=random(10);
write(A2^.i,' ');
end;

writeln;


Readln;
end.



а как функцию правельно сделать незнаю((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
сообщение
Сообщение #2


Пионер
**

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

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


Цитата(Xrymz @ 14.05.2007 20:55) *

читал я фак... немного понял.. но не все...
задание...
дано два линейных списка, А1 и А2, сделать подпрограмму которая будет в конец списка А1 кидать все элементы списка А2.


Как я понял твоё задание, то просто берёшь и в последнем элементе А1 делаешь ссылку не на NIL, а на первый элемент А2...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


хм.. а можно поподробнее? =)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

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

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


Цитата(Xrymz @ 14.05.2007 21:28) *

хм.. а можно поподробнее? =)



Ты кстати кажется списки не так вообще формируешь )

Вощем к делу:
Каждый список имеет такую штуку FIRST(указатель на первый элемент). Вот тебе надо в последнем элементе списка А1 в поле с указателем на NIL(т.к. он последний) занести указатель FIRST2(указатель на первый элемент списка А). Тем самым ты установишь связь между А1 и А2, тоесть А2 будет идти следом за А1, что тебе и требуется как ты говоришь )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


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


Пионер
**

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

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


Так вставляется новый элемент в конец списка:


USES CRT;
TYPE

EL=^ZAP;
ZAP=Record
INF1:integer;
INF2:string;
Next:EL;
END;


VAR
First, P, Q, T: EL;


Procedure Create_new_element (Var P:EL);
Var
s:string;
a,b:integer;
Begin
clrscr;
NEW(P);
writeln('Введите табельный номер:');
readln(p^.INF1);
writeln('Введите фамилию сотрудника:');
readln(p^.INF2);
p^.Next:=NIL;
End;


procedure Insert_end_list(P:EL; VAR First:EL);
Begin
IF First=NIL then
First:=p
ELSE
begin
Q:=First;
While Q^.NEXT<>NIL do
Q:=Q^.NEXT;
Q^.NEXT:=p;
p^.NEXT:=NIL;
end;
End;


procedure Insert_begin_list(P:EL; VAR First:EL);
Begin
IF First=NIL then
begin
First:=p;
p^.Next:=NIL;
end
ELSE
begin
p^.Next:=First;
First:=p;
end;
End;

begin
Create_new_element(p);
Insert_begin_list(p,First);
end;



Так ты формируешь 2 списка, потом делаешь, что я расписал выше, а потом вывод на экран

Сообщение отредактировано: Renbo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Renbo, то есть, ты хочешь сказать, что для того, чтобы добавить один элемент в конец списка длины N, я должен произвести (N - 1) операцию присваивания, и столько же - сравнения вместо того, чтобы элементарно увеличить размер программы на 4 (ЧЕТЫРЕ) байта, и этого избежать ???
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


я написал просто пример, с целью просто продемонстрировать. Короче или длиннее - это на его усмотрение, главное понять суть
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


люди некто неможет сделать мне задание... то не в какую немогу понять эти линейные списки... wacko.gif blink.gif
буду очень благодарен...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Люди гляньте плиз где тут лажа...
вот я тут сделал немного
program omfg;
uses crt;
type
plist = ^list;
list = record
inf: integer;
next: plist;
end;

var beg,t,p1,p2,p3,first:plist;
n,i:integer;


begin
clrscr;
readln(n);
randomize;
new(first);{Sozdaem 1i sposik}
first^.next:=nil;
first^.inf:=random(10)-1;
for i:=1 to n-1 do
begin
new(p1);
p1^.inf:=random(10)-1;
p1^.next:=nil;
p1^.next:=first;
first:=p1;
end;

t:=p1;

while t<>nil do
begin
write(t^.inf,' ');
t:=t^.next;
end;
writeln;

new(first);{Sozdaem 2i spisok}
first^.next:=nil;
first^.inf:=random(10)-1;
for i:=1 to n-1 do
begin
new(p2);
p2^.inf:=random(10)-1;
p2^.next:=nil;
p2^.next:=first;
first:=p2;
end;

t:=p2;
while t<>nil do
begin
write(t^.inf,' ');
t:=t^.next;
end;

p1^.next:=p2;

writeln;
t:=p1;
while t<>nil do
begin
write(t^.inf,' ');
t:=t^.next;
end;

readln;
end.


но у меня выводит
Код
3  {- ввожу
1 -1 8   {- список А1
0 -1 5   {- список А2
1 0 -1 5  {- то что у меня выходит.. тут ошибка

то есть он берет первый элемент списка А1 и вставляется за ним список А2... как исправить?




 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


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


Гость






Ты все-таки не стал заводить указатель на "хвост" списка? Ну, как знаешь...
После распечатки двух списков делай так:

// вместо:
// p1^.next:=p2;
// пишешь:
t := p1;
while (t <> nil) and (t^.next <> nil) do
t := t^.next;
t^.next := p2;


и потом печатай первый список...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


program omfg;
uses crt;
type
plist = ^list;
list = record
inf: integer;
next: plist;
end;

var beg,t,p1,p2,p3,first:plist;
n,i:integer;


begin
clrscr;
readln(n);
randomize;
new(first);{Sozdaem 1i sposik}
first^.next:=nil;
first^.inf:=random(10)-1;
for i:=1 to n-1 do
begin
new(p1);
p1^.inf:=random(10)-1;
p1^.next:=nil;
p1^.next:=first;
beg:=p1;
end;

t:=p1;

while t<>nil do
begin
write(t^.inf,' ');
t:=t^.next;
end;
writeln;

new(first);{Sozdaem 2i spisok}
first^.next:=nil;
first^.inf:=random(10)-1;
for i:=1 to n-1 do
begin
new(p2);
p2^.inf:=random(10)-1;
p2^.next:=nil;
p2^.next:=first;
first:=p2;
end;

t:=p2;
while t<>nil do
begin
write(t^.inf,' ');
t:=t^.next;
end;


while p1^.next<>nil do p1:=p1^.next;
p1^.next:=p2;
p1:=beg;
writeln;
t:=p1;
while t<>nil do
begin
write(t^.inf,' ');
t:=t^.next;
end;

readln;
end.


я сделал так.. вроде работает.. я понял свою ошибку...
всем кто помогал спасибо)) особенно volvo.

Сообщение отредактировано: Xrymz -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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