![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Xrymz |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Репутация: ![]() ![]() ![]() |
читал я фак... немного понял.. но не все...
задание... дано два линейных списка, А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.
а как функцию правельно сделать незнаю(( |
Renbo |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: ![]() ![]() ![]() |
читал я фак... немного понял.. но не все... задание... дано два линейных списка, А1 и А2, сделать подпрограмму которая будет в конец списка А1 кидать все элементы списка А2. Как я понял твоё задание, то просто берёшь и в последнем элементе А1 делаешь ссылку не на NIL, а на первый элемент А2... |
Xrymz |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Репутация: ![]() ![]() ![]() |
хм.. а можно поподробнее? =)
|
Renbo |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: ![]() ![]() ![]() |
хм.. а можно поподробнее? =) Ты кстати кажется списки не так вообще формируешь ) Вощем к делу: Каждый список имеет такую штуку FIRST(указатель на первый элемент). Вот тебе надо в последнем элементе списка А1 в поле с указателем на NIL(т.к. он последний) занести указатель FIRST2(указатель на первый элемент списка А). Тем самым ты установишь связь между А1 и А2, тоесть А2 будет идти следом за А1, что тебе и требуется как ты говоришь ) |
Xrymz |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Репутация: ![]() ![]() ![]() |
чето я нихега немогу с этими списками...
ребята помоги плиз... задание вроде несложное... если нетяжело сделайте... я хоть факю прочитал но списки понять немогу... |
Renbo |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так вставляется новый элемент в конец списка:
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 - 14.05.2007 23:39 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Renbo, то есть, ты хочешь сказать, что для того, чтобы добавить один элемент в конец списка длины N, я должен произвести (N - 1) операцию присваивания, и столько же - сравнения вместо того, чтобы элементарно увеличить размер программы на 4 (ЧЕТЫРЕ) байта, и этого избежать ???
|
Renbo |
![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: ![]() ![]() ![]() |
я написал просто пример, с целью просто продемонстрировать. Короче или длиннее - это на его усмотрение, главное понять суть
|
Xrymz |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Репутация: ![]() ![]() ![]() |
люди некто неможет сделать мне задание... то не в какую немогу понять эти линейные списки...
![]() ![]() буду очень благодарен... |
Гость |
![]()
Сообщение
#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... как исправить? |
Xrymz |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 10 Пол: Мужской Репутация: ![]() ![]() ![]() |
как исправить чтобы в конец списка А1 кидать все элементы списка А2.
предыдущие сообщение мое... |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Ты все-таки не стал заводить указатель на "хвост" списка? Ну, как знаешь...
После распечатки двух списков делай так: // вместо:
// p1^.next:=p2;
// пишешь:
t := p1;
while (t <> nil) and (t^.next <> nil) do
t := t^.next;
t^.next := p2;
и потом печатай первый список... |
Xrymz |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 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;
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 - 30.05.2007 20:21 |
![]() ![]() |
![]() |
Текстовая версия | 17.07.2025 19:35 |