Привет!
Поняв предидущую ошыбочку я переделала темку на:
Задание на 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.
Тебе уже давали эту процедуру:
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;
нужно добавить елемент (любое число), после елемента первое поле которого больше 0.
ну я думаю усё виглядит тк:
______
7 | 8
-1 | 4 <-- от такой наверно двунаправлений список (если не ошыбаюсь, я так думаю...)
-6 | 2
0 | 12
и знач 7 больше нуль то нужно после 8 добавить елемент
тоесть от такое должно получится примерно:
7 | 8
-1 | 9 --наш новые елемент
-6 | 4
0 | 2
| 12
мне обяснили что список вроде растёт такое ошущение....
от-так-вот...)))
я почти разобралася ...
а у тебя нет класной книги?
по пакалю.?
Элемент списка - это не одно число.. В твоем случае один элемент списка - это совокупность двух чисел и двух указателей.. Поэтому должно быть так:
7 | -5 <- первое поле больше нуля, значит добавляем после этого элемента новый
-1 | 4
-6 | 2
0 | 12
и получится
7 | -5
14 | 13 <-новый элемент.. со своими двумя числами и указателями..
-1 | 4
-6 | 2
0 | 12
добавлено: Тут тема была "поиск книг".. посмотри, может там что найдешь.. у меня нет ничего в электронном варианте..
но если у тебя есть совет
на щёт того что я на писала
то я жду...
:-)
Добавлено через 1 мин.
а то есть он тока так может "рости"?
Добавлено через 2 мин.
-----------------------------------
но подожди яже начебно
разпределила в памяти два поля?
inf1
inf2
в смысле будет увеличиваться количество элементов? да. ..если, конечно, найдется хоть один, с первым полем > 0 ))
-----------------------------------
и что получается я не могу
в поле inf1 добавить толька
один елемент а поле inf2
незатрагивать...
то да мне так сказали что
пример:
1__|___4
-5_|___10
6__|___2
то будет
1__|___4
-5_|___x <--new element
6__|___10
___|___2
___|___x <--- new element
==========================
Добавлено через 1 мин.
и ето называется двунаправленый список.
или же то что ты предложыла на самом дели
есть двунапр. список?
А что тебе мешает сделать так
list^.inf1:=random(10);
list^.inf2:=random(10);
Айрочка, вопросик:
а как бы ты поступила если тебе дали такое задание?
Добавлено через 2 мин.
------------------------------------
то есть тот кусочек кодика
и есть решение моей проблемки?
так как описала выше (если ты насчет того, куда добавлять элемент).. только я не очень поняла, сколько же полей inf должно быть в элементе.. 1 или 2.. real+real - это означает, что 2? но, в принципе, это не самое главное.. задание то скорее на работу с указателями.. чем на количество полей в элементе..
-------------------------------------------
я вижу "compiler" читает тему :-)
може ты поможеш? а...
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-го присвоили указатель на добавленный
ну не совсем?
може коротко обясниш?
я очень благодарна за помощь
и никого не хочу обидеть...(((
мне просто нужна помощь...я же не профм((((
.?update
---------------------------------------------------------
Айра (Олечка) не обижайся на меня, я понимаю
как бывает трудно обяснить что-то, таким ка я,
Добавлено через 1 мин.
мне очень стыдно за себя (
сори....
Одно дело объяснять что-то, когда видишь, что человеку это интересно и он хочет понять.. А делать за кого-то его работу, чтоб он просто сдал и забыл, я не собираюсь.. Если нужна готовая программка, то тебе прямая дорога в "задачи на заказ"..
как ни странно я стобой согласна,
но я просто уже вторые сутки сижу в поисках, так немного нашла инфи, но чтобы
понятно написано было - увы...
Ну я всё таки пойму что к чему...
Ещё раз, не обижайся на меня, я очень прекрасно понимаю тебя, но в ето м есть смысл (я один раз заменяла
преподавателя на уроке информатики то после етой мучительной пари я немогла найти слов для выражений...
как мне трудно было обяснить материал другим.. И тогда препод сказал мне - "что одно деле знать, а другое
обяснить то что ты знаеш другим и ето називается мастерством).
Я думаю что ты на верном пути к мастерству...