Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Двунаправленный список

Автор: ..::Даша::.. 14.05.2008 21:34

Привет!
Поняв предидущую ошыбочку я переделала темку на:

Задание на Pascal-е:
------------------------------------------------------------------------------------------
"Нужно создать двунаправленный список. Информационую часть
заполнить с помощю random. Создать процедуру которая
будет добавлять 1 елемент после елемента первое поле которого >0.
Информационие поля типу - real+real. Количество елементов в списку - 5"
-------------------------------------------------------------------------------------------

мне тут помогли мемножно но... не до конца (


program SOD_L3;
uses crt;
Type mem=^element;
element=record
inf1:real;
inf2:real;
next:mem;
prev:mem;
end;

var first,list,key,x:mem;
i,c:integer;
begin
clrscr;
randomize;
New(first);
first^.next:=nil;
first^.prev:=nil;
first^.inf1:=random(20);
first^.inf2:=random(20);
x:=first;
for i:=1 to 5 do
begin
New(x^.next);
x:=x^.next;
x^.inf1:=random(20);
x^.inf2:=random(20);
x^.next:=nil;
end;
{--------------------------------------}
writeln(' -Spisok-');
writeln('______________________');
list:=first;
c:=0;
while list^.next <> nil do
begin
c:=c+1;
write('|',c,'|',list^.inf1:6:2);
writeln(' |',c,'|',list^.inf2:6:2,' |');
list:=list^.next;
end;
{-----------------------------------------}
writeln;
for i:=1 to 5 do
begin
while list^.next <> nil do
begin
if list^.inf1>0 then list^.inf2:=-1;

end;
end;

Dispose(list);

readln;
end.





//я очень рада что на форуме есть девочки и
на деюсь и на их помощь :-)
И кстати зайдите в мой фото альбом...

Добавлено через 2 мин.
------------------------------------------------------
Да, может кто-то имеет панятнинькую инфу?
Шлите, буду рада :-)
------------------------------------------------------

Автор: Айра 14.05.2008 21:58

Тебе уже давали эту процедуру:

Procedure Add_tuda_posle (first: sp; k: integer);  {добавление после к-того элемента}
Var h: integer;
x, p, q: sp;
Begin
q:= first;
For h:=1 to k-1 do q:= q^.next;
New (x);
Writeln ('?');
Readln (x^.i);
p:= q^.next;
q^.next:= x;
x^.next:= p;
x^.back:= q;
q:= p;
q^.back:= x;
End;

Попробуй переделать под свое условие..
кстати, эти вопросы остаются в силе:
Цитата
2) добавить надо после всех элементов удовлетворяющему условие или после первого/последнего?
3) что надо добавить?(какой элемент)

Автор: ..::Даша::.. 14.05.2008 22:28

нужно добавить елемент (любое число), после елемента первое поле которого больше 0.

ну я думаю усё виглядит тк:

______
7 | 8
-1 | 4 <-- от такой наверно двунаправлений список (если не ошыбаюсь, я так думаю...)
-6 | 2
0 | 12


и знач 7 больше нуль то нужно после 8 добавить елемент
тоесть от такое должно получится примерно:

7 | 8
-1 | 9 --наш новые елемент
-6 | 4
0 | 2
| 12

мне обяснили что список вроде растёт такое ошущение....
от-так-вот...)))

Автор: ..::Даша::.. 14.05.2008 23:05

я почти разобралася ...
а у тебя нет класной книги?
по пакалю.?

Автор: Айра 14.05.2008 23:06

Элемент списка - это не одно число.. В твоем случае один элемент списка - это совокупность двух чисел и двух указателей.. Поэтому должно быть так:
7 | -5 <- первое поле больше нуля, значит добавляем после этого элемента новый
-1 | 4
-6 | 2
0 | 12

и получится

7 | -5
14 | 13 <-новый элемент.. со своими двумя числами и указателями..
-1 | 4
-6 | 2
0 | 12

добавлено: Тут тема была "поиск книг".. посмотри, может там что найдешь.. у меня нет ничего в электронном варианте..

Автор: ..::Даша::.. 14.05.2008 23:06

но если у тебя есть совет
на щёт того что я на писала
то я жду...
:-)

Добавлено через 1 мин.
а то есть он тока так может "рости"?


Добавлено через 2 мин.


-----------------------------------
но подожди яже начебно
разпределила в памяти два поля?
inf1
inf2

Автор: Айра 14.05.2008 23:11

в смысле будет увеличиваться количество элементов? да. ..если, конечно, найдется хоть один, с первым полем > 0 ))

Автор: ..::Даша::.. 14.05.2008 23:11

-----------------------------------
и что получается я не могу
в поле inf1 добавить толька
один елемент а поле inf2
незатрагивать...

Автор: Айра 14.05.2008 23:13

Цитата
но подожди яже начебно
разпределила в памяти два поля?
inf1
inf2

И что тебя смущает?

Автор: ..::Даша::.. 14.05.2008 23:15

то да мне так сказали что
пример:
1__|___4
-5_|___10
6__|___2


то будет

1__|___4
-5_|___x <--new element
6__|___10
___|___2
___|___x <--- new element

==========================


Добавлено через 1 мин.
и ето называется двунаправленый список.

или же то что ты предложыла на самом дели
есть двунапр. список?

Автор: Айра 14.05.2008 23:17

А что тебе мешает сделать так smile.gif

list^.inf1:=random(10);
list^.inf2:=random(10);


Тебе же надо полностью создать новый элемент, значит и его оба поля inf заполняешь..

Добавлено через 4 мин.
Даша, здесь дело не в количестве полей inf, как в массиве, а в указателях.
В однонаправленном списке у тебя есть указатель только на следующий элемент.. и двигаться ты поэтому можешь только в одном направлении.. А в двунаправленном каждый элемент содержит указатели на следующий и предыдущий элементы.. значит от какого-то n-го элемента можно идти как к последнему элементу, так и к первому.. поэтому список и называется двунаправленным smile.gif


Автор: ..::Даша::.. 14.05.2008 23:22

Айрочка, вопросик:
а как бы ты поступила если тебе дали такое задание?

Добавлено через 2 мин.
------------------------------------
то есть тот кусочек кодика
и есть решение моей проблемки?

Автор: Айра 14.05.2008 23:32

так как описала выше (если ты насчет того, куда добавлять элемент).. только я не очень поняла, сколько же полей inf должно быть в элементе.. 1 или 2.. real+real - это означает, что 2? но, в принципе, это не самое главное.. задание то скорее на работу с указателями.. чем на количество полей в элементе..

Автор: ..::Даша::.. 14.05.2008 23:34

-------------------------------------------
я вижу "compiler" читает тему :-)
може ты поможеш? а...

Автор: Айра 14.05.2008 23:44

Цитата
то есть тот кусочек кодика
и есть решение моей проблемки?

Не совсем.. тебе нужно его немного переделать.. чтобы он добавлял элемент имеено тогда, когда тебе нужно.
Главное в нем это:
допустим тебе нужно воткнуть элемент между 1-м и 2-м
New (x); <-создали ссылку на добавляемый элемент
Writeln ('?');
Readln (x^.i); <-создали элемент
p:= q^.next; <-запомнили указатель на 2-й элемент
q^.next:= x; <- теперь поле next первого элемента указывает на добавленный
x^.next:= p; <- а next добавленного на 2-й
x^.back:= q; <- и pred на первый
q:= p;
q^.back:= x; <- полю pred 2-го присвоили указатель на добавленный



Даш, тебе вообще понятно, что из себя представляет список?

Автор: ..::Даша::.. 14.05.2008 23:52

ну не совсем?
може коротко обясниш?

Автор: Michael_Rybak 14.05.2008 23:52

Цитата
я вижу "compiler" читает тему :-)
може ты поможеш? а...


да, может, вообще все мы тебе дружно понапомогаем, а ты выберешь, кто помог лучше всех?

Автор: ..::Даша::.. 14.05.2008 23:57

я очень благодарна за помощь
и никого не хочу обидеть...(((
мне просто нужна помощь...я же не профм((((

Автор: compiler 14.05.2008 23:57

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

upd
скажи спасибо лучше Айре, мне б столько терпения не хватило...

Автор: ..::Даша::.. 15.05.2008 0:03

.?update

Автор: Michael_Rybak 15.05.2008 0:03

Цитата
и никого не хочу обидеть...(((
мне просто нужна помощь...я же не профм((((

а как ты себе это представляешь: тебе во всю помогает оля, и тут ты говоришь: эй, compiler, может поможешь? за олю обидно в такой ситуации, разве нет?

Автор: ..::Даша::.. 15.05.2008 0:32

---------------------------------------------------------
Айра (Олечка) не обижайся на меня, я понимаю
как бывает трудно обяснить что-то, таким ка я,

Добавлено через 1 мин.
мне очень стыдно за себя (
сори....

Автор: Айра 15.05.2008 0:41

Одно дело объяснять что-то, когда видишь, что человеку это интересно и он хочет понять.. А делать за кого-то его работу, чтоб он просто сдал и забыл, я не собираюсь.. Если нужна готовая программка, то тебе прямая дорога в "задачи на заказ"..

Автор: ..::Даша::.. 15.05.2008 0:51

как ни странно я стобой согласна,
но я просто уже вторые сутки сижу в поисках, так немного нашла инфи, но чтобы
понятно написано было - увы...

Ну я всё таки пойму что к чему...
Ещё раз, не обижайся на меня, я очень прекрасно понимаю тебя, но в ето м есть смысл (я один раз заменяла
преподавателя на уроке информатики то после етой мучительной пари я немогла найти слов для выражений...
как мне трудно было обяснить материал другим.. И тогда препод сказал мне - "что одно деле знать, а другое
обяснить то что ты знаеш другим и ето називается мастерством).
Я думаю что ты на верном пути к мастерству...