Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Создение двусвязного списка


Автор: Маша 20.5.2007, 16:34
Помогите пожалуйста найти ошибку в коде. Нужно создать двухсвязный список

procedure list(var start,finish:link);
var p,q:link;
begin
while n<>0 do
begin
new(p);
readln(p^.inf);
p^.pred:=nil;
if start=nil then
begin
start:=p; kon:=p;
p^.next:=nil;
end
else
begin
p^.next:=start;
start^.pred:=p;
start:=p;
end;

end;


end;

Автор: Misha_White 20.5.2007, 17:08
Маша, 
Цитата(Маша @  20.5.2007,  23:34 Найти цитируемый пост)
procedure list(var start,finish:link);

Что такое link?

Автор: Маша 20.5.2007, 17:10
link=^rec;
rec=record
inf:integer;
next,pred:link;
end;

Автор: Misha_White 20.5.2007, 17:13
Маша, 
 smile 
Используй подсветку кода...

Добавлено через 2 минуты и 30 секунд
Маша, 
Цитата(Маша @  20.5.2007,  23:34 Найти цитируемый пост)
while n<>0 do

Во первых, чему равно n?
Этот цикл бесконечный...

Автор: vvv_1984 20.5.2007, 17:22
procedure list(var start,finish:link);
var  get,next:link;
begin
if start<>nil then
   begin
      new(get);
      readln(get^.inf);
      next:=start^.next;
      start^.next:=get;
      get^.prev:=start;
      next^.prev:=get;
      get^.next:=next;
   end
else
   begin
      new(get);
      readln(get^.inf);
      start:=get;
   end;


а зачем finish он в принципе не нужен , ведь все изменения остаются в переменной start

Автор: Маша 20.5.2007, 17:25
Misha_White,Там в конце цикла while спрашивается, чему равно n. 
Какую подсветку?

Добавлено через 2 минуты и 23 секунды
vvv_1984, спасибо!

P.s. просто список двусвязный, и надо чтобы был указатель и на начало, и на конец

Автор: vvv_1984 20.5.2007, 17:28
эту процедуру и вставляй в свой while, и создавай список, при каждом вызове процедуры будет добавляться один элемент.

Добавлено через 39 секунд
щас пару минут!!!

Автор: Misha_White 20.5.2007, 17:35
Маша, 

Цитата(Маша @  21.5.2007,  00:25 Найти цитируемый пост)
Misha_White,Там в конце цикла while спрашивается, чему равно n

Где?

Цитата(Маша @  21.5.2007,  00:25 Найти цитируемый пост)
Какую подсветку?

Подсветку кода...
Например:
Код

link=^rec;
rec=record
inf:integer;
next,pred:link;
end; 


Автор: vvv_1984 20.5.2007, 17:35
function finish_link(var start:link):link;
   var
     get:link;
   begin
     get:=start;
     if get=nil then exit;
     while  get^.next<>nil do
        get:=get^.next;
     finish:=get;

   end;

Автор: Misha_White 20.5.2007, 17:38
Маша, 
Procedure PutOne (a:integer; Old:Link; var P:link);
     {Процедура,которая позволяет создать список,состоящий из элементов,
         следующих друг за другом }
     begin
       P:=New(Link); {Функция,которая создает новую динамическую }
                     {переменную и устанавливает на нее указатель}
       Old^.Next:=P;
       P^.inf:=a;
       P^.Next:=nil;
       P^.Prev:=Old;
       Old:=P;
     end;

Автор: vvv_1984 20.5.2007, 17:38
вот в принципе код который возвращает последний список!

Автор: Маша 20.5.2007, 17:39
Цитата

Цитата(Маша @  21.5.2007,  00:25 ) 
Misha_White,Там в конце цикла while спрашивается, чему равно n 


Где?



В данном коде я ее случайно забыла написать, но она там предполагается. 

Автор: vvv_1984 20.5.2007, 17:40
Misha_White,
ну я не компилировал,
не проверял на ошибки я просто по памяти написал, алгоритм то верный!!!!!!!!!!

Автор: Misha_White 20.5.2007, 17:41
Маша, 
Есть целиком исходник такой проги...

Автор: vvv_1984 20.5.2007, 17:41
Маша,
а задание то какое конкретнее!!!!
исходник выкладывай!

Автор: Misha_White 20.5.2007, 17:43
vvv_1984, 
Цитата(vvv_1984 @  21.5.2007,  00:40 Найти цитируемый пост)
Misha_White,
ну я не компилировал,
не проверял на ошибки я просто по памяти написал, алгоритм то верный

А я и не спорю... Я тоже не компилил...

Автор: Маша 20.5.2007, 17:43
Misha_White, Скинь пожалуйста!!!

Автор: vvv_1984 20.5.2007, 17:44
я что то не догоняю,
у меня сейчас 18:44,
а в сообщениях пишется 15, наверное заработался!!!!!!!!

Автор: Маша 20.5.2007, 17:46
Misha_White, выложи пожалуйста!!!

Автор: Misha_White 20.5.2007, 17:46
vvv_1984, 
Цитата(vvv_1984 @  21.5.2007,  00:44 Найти цитируемый пост)
у меня сейчас 18:44,

А у меня ваще 00:45... smile 

Автор: Маша 20.5.2007, 17:46
vvv_1984, у меня тоже так

Автор: vvv_1984 20.5.2007, 17:47
Цитата(Misha_White @ 20.5.2007,  15:46)
vvv_1984, 
Цитата(vvv_1984 @  21.5.2007,  00:44 Найти цитируемый пост)
у меня сейчас 18:44,

А у меня ваще 00:45... smile

а реально?

Добавлено через 1 минуту и 7 секунд
ладненько МАША так что, этого хватает?

Автор: Misha_White 20.5.2007, 17:48
Маша, 

Автор: Misha_White 20.5.2007, 17:49
Еще

Добавлено через 1 минуту и 2 секунды
vvv_1984, 
Цитата(vvv_1984 @  21.5.2007,  00:47 Найти цитируемый пост)
а реально?

А почему нет? Спать пора мне...

Добавлено через 1 минуту и 51 секунду
Маша, 
vvv_1984, 
В своих настройках посмотрите регион...

Автор: Маша 20.5.2007, 17:51
Misha_White, он у меня почему-то не открывается...

Автор: Misha_White 20.5.2007, 17:51
Маша, 
Второй файл скачай...

Добавлено через 1 минуту и 25 секунд
Маша, 
Я ее не заводил, но должна работать...
Там один модуль и главная программа...

Добавлено через 3 минуты и 45 секунд
Маша, 
Ну как, работает?

Автор: Маша 20.5.2007, 17:55
Misha_White,что с  модулем делать?

Автор: Misha_White 20.5.2007, 18:00
Маша, 
В смысле? Откомпилируй по F9, затем прогу запускай... 

Автор: Маша 20.5.2007, 18:05
Выдает ошибку 131 полсе процедуры ввода

Автор: Misha_White 20.5.2007, 18:10
Маша, 
АААА... smile 
Там у процедуры Vvod убери скобки внесте с содержимым...
Код

Procedure Vvod;
     {Процедура,которая позволяет вводить кол-во эл-тов в последовательности}
     begin
       Write('Введите кол-во эл-тов в последовательности : ');
       Readln(n);
     end;



Добавлено через 25 секунд
Маша, 
В модуле...

Добавлено через 4 минуты и 45 секунд
Маша, 
Работает...
Закидывает в список квадрат порядкового номера элемента списка... smile

Добавлено через 5 минут и 30 секунд
Маша, 
У тебя-то какое задание?

Автор: Маша 20.5.2007, 18:29
Misha_White, теперь он выдает ошибку на vvod в самой программе

Добавлено через 21 секунду
Misha_White, теперь он выдает ошибку на vvod в самой программе

Добавлено через 2 минуты и 22 секунды
Задание - создать двусвязный список, вставить туда элемент, удалить, поменять 2 элемента местами, отсортировать

Автор: Misha_White 20.5.2007, 18:33
Маша, 
Цитата(Маша @  21.5.2007,  01:29 Найти цитируемый пост)
теперь он выдает ошибку на vvod в самой программе

Странно... у меня работает... А там скобки есть? Если да, то удали...

Добавлено через 3 минуты и 4 секунды
Маша, 
Есть лучший вариант...

Автор: Misha_White 20.5.2007, 18:37
Маша, 

Автор: Маша 20.5.2007, 18:44
Misha_White, спасибо, теперь работает

Автор: KuZyagroup 21.5.2007, 05:24
Вот ещё один пример решения.
Обертка чуть-чуть не работает (не последняя версия проги) но списки работают хорошо и код прозрачный. Может чем поможет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)