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

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

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

> Необходима помощь в решении задачи с динамическими структурами
sonic
сообщение 14.12.2006 10:49
Сообщение #1


Alone in the dark
*

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

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


Здравствуйте, уважаемые участники форума!
Прошу помощи в решении этой задачи:
Даны указатели P1 и P2 на барьерный и текущий элементы двусвязного списка. Также даны пять чисел. Используя тип TListB (TListB - запись с полями Barrier и Current типа PNode), описать процедуру LBInsertAfter(L, D), которая вставялет новый элемент со значением D после текущего элемента списка L (L - входной и выходной параметр типа TListB, D - входной параметр целого типа). Вставленный элемент становится текущим. С помощью этой процедуры вставить пять данных чисел в исходный список, и вывести новый адрес его текущего элемента.

Как я позже выяснил у препода, "адрес его текущего элемента" представляет собой номер элемента в списке.
Пользовательские типы PNode и TNode необходимо описывать так:
type 
PNode = ^TNode
TNode = record
Data: integer;
Next, Prev: PNode;
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
мисс_граффити
сообщение 14.12.2006 13:13
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


что такое барьерный элемент? первый/последний, что ли?
почитай FAQ про списки... попробуй сам начать - хотя бы создать список.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sonic
сообщение 14.12.2006 13:34
Сообщение #3


Alone in the dark
*

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

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


Цитата(мисс_граффити @ 14.12.2006 13:13) *

что такое барьерный элемент? первый/последний, что ли?
почитай FAQ про списки... попробуй сам начать - хотя бы создать список.


Барьерный элемент - это элемент который связан своими полями Next и Prev с первым и последним элементом исходного списка (поле Data = 0)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 14.12.2006 14:37
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


а, то есть список не просто двусвязный, а еще и циклический... хотя это мало на что влияет.
как продвигается чтение FAQ?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sonic
сообщение 14.12.2006 14:58
Сообщение #5


Alone in the dark
*

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

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


Цитата(мисс_граффити @ 14.12.2006 14:37) *

а, то есть список не просто двусвязный, а еще и циклический... хотя это мало на что влияет.
как продвигается чтение FAQ?

Почитал FAQ ещё перед тем как создавать тему, ничего подобного не нашел
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2006 15:16
Сообщение #6


Гость






Списки есть... Как односвязные, так и двухсвязные... Как в процедурном, так и в объектном виде... В поиске можно также найти несколько задач на циклические списки... А вот теперь - внимание, вопрос: что является тем самым непреодолимым для тебя препятствием, что ты не можешь даже начать решать задачу, прочитав (если прочел, а не бегло просмотрел, конечно) то, что есть на форуме?
 К началу страницы 
+ Ответить 
sonic
сообщение 14.12.2006 15:59
Сообщение #7


Alone in the dark
*

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

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


Цитата(volvo @ 14.12.2006 15:16) *

вопрос: что является тем самым непреодолимым для тебя препятствием, что ты не можешь даже начать решать задачу, прочитав (если прочел, а не бегло просмотрел, конечно) то, что есть на форуме?

Непреодолимый страх перед тем, что снова ничего не получится и страх перед безысходностью
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 14.12.2006 16:07
Сообщение #8


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


и здесь философия.... как она замучала!!!
сорри за офф.

sonic, я могу написать программу, но ведь от этого твой страх не исчезнет. значит, будем с ним бороться другими способами.
начнем с того, что ты напишешь программку, создающую список.
в FAQ это все есть.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sonic
сообщение 15.12.2006 10:47
Сообщение #9


Alone in the dark
*

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

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


Сделал заполнение списка, вроде всё правильно, прошу посмотреть опытных людей:
uses crt;

type
PNode = ^TNode;
TNode = record
Data: integer;
Next, Prev: PNode;
end;

var
i:integer;
p,pred,barrier: PNode;

begin

clrscr;
randomize;

for i:=1 to 10 do
begin
new(p);
if (i = 1) then begin p^.Data:=0; barrier:=p; end
else
begin
p^.Data:= random(9);
write(i,'- ',p^.Data,' ');
end;
p^.Prev:=pred;
if (i = 10) then
pred^.Next:=p;
pred:=p;
end;

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.12.2006 11:58
Сообщение #10


Гость






p^.Prev:=pred;

blink.gif на первой итерации Pred еще не определена... Или ты полагаешься на то, что она будет равна NIL? Тогда у барьерного элемента не будет ссылки на предыдущий, хотя должна быть...
 К началу страницы 
+ Ответить 
sonic
сообщение 15.12.2006 12:10
Сообщение #11


Alone in the dark
*

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

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


решил задачу, вот как получилось:

uses crt;

const count=10;

type
PNode = ^TNode;
TNode = record
Data: integer;
Next, Prev: PNode;
end;

TListB = record
Barrier, Current: PNode;
end;
PListB = ^TListB;

procedure LBInsertAfter(var L: PListB; D: integer);
var p: PNode;
begin
new(p);
p^.prev:= L^.Current;
p^.Data:=D;
p^.Next:= L^.Current^.Next;
L^.Current^.Next^.prev:=p;
L^.Current^.Next:=p;
L^.Current:=p;
end;

var
i,curnum,num: integer;
p,pred,barrier: PNode;
ListB: PListB;

begin

clrscr;

randomize;
while (curnum <= 1) do
begin
curnum:= random(count);
end;

new(ListB);

for i:=1 to count do
begin
new(p);
if (i = 1) then begin p^.Data:=0; ListB^.Barrier:=p; end else p^.Data:= random(9);
if (i = 10) then ListB^.Barrier^.prev:=p else p^.Prev:=pred;
if (i = curnum) then ListB^.Current:=p;
pred^.Next:=p;
pred:=p;
write(p^.Data,' ');
end;
writeln;
writeln('Номер установленного текущего элемента: ',curnum);
writeln;

i:=1;
while (i <= 5) do
begin
num:= random(20);
if(num > 10) then
begin
LBInsertAfter(ListB, num);
inc(i);
end;
end;

p:=ListB^.Barrier;
for i:=1 to count+5 do
begin
write(p^.Data,' ');
p:=p^.Next;
end;
writeln;

writeln('Новый адрес текущего элемента: ',curnum+5);

end.


Что скажете ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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