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

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

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

 
 Ответить  Открыть новую тему 
> Необходима помощь в решении задачи с динамическими структурами
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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


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


Alone in the dark
*

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

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


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

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


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


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

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

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


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


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


Alone in the dark
*

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

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


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

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

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


Гость






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


Alone in the dark
*

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

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


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

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

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


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

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

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


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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






p^.Prev:=pred;

blink.gif на первой итерации Pred еще не определена... Или ты полагаешься на то, что она будет равна NIL? Тогда у барьерного элемента не будет ссылки на предыдущий, хотя должна быть...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





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