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

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

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

Автор: dream-x 4.05.2008 21:34

Здравствуйте! Я был бы очень рад если бы вы мне помогли бы с маленькой пробдемой...
Программа должна переставить элементы списка по следующему звкону: если текущий элемент больше некоторого числа Р то поместитьследующий заним элемент в конец цепочки; если текущий элемент меньше или равен Р перенести его в начало цепочки (первый оставить безизменения)
Вот код но это не вся программа почемуто у меня список не хочет присваиваться и выводится на экран...


Program Spisok;
Uses CRT;
Type
TDat=integer;
TLink=^Element;
Element=Record
Data:TDat;
Link:TLink;
End;
Var
List1,Elem,FindElem:TLink;
i,n,p:TDat;
{----------------}
Procedure InPutList(Var List:TLink);
Var
ElNew:TLink;
Val:TDat;
i,n:Integer;
Begin
ClrScr;
WriteLn('vvedite kol-vo elementov spiska ');
ReadLn(n);
List:=NIL;
For I:=1 To n Do
Begin
WriteLn('vvedite ',i,' element');
Read(val);
New(ElNew);
ElNew^.Data:=Val;
ElNew^.Link:=List;
List:=ElNew;
End;
End;
{----------------}
Procedure OutPutList(Var List:TLink);
Var
i:TDat;
Begin
WriteLn('element spiska ');
While List <> NIL Do
Begin
Write(List^.Data,' ');
List:=List^.Link;
End;
WriteLn;
End;
{----------------}
{----------------}
Begin
InPutList(List1);
List1:=List1;
OutPutList(List1);

OutPutList(List1);
Elem:=List1;



Write('wedite P=');
Readln(P);


FindElem:=NIL;
While List1 <> NIL Do
Begin

If Elem^.Data>P
Then
Begin
FindElem:=Elem;
New(FindElem);
{Elem^.Link:=NIL;}
Elem^.Link:=FindElem;
FindElem^.Link:=NIL;

End
Else Elem:=Elem^.Link;

End;

OutPutList(Elem);


End.


Заранее СПАСИБО...

Автор: compiler 4.05.2008 22:05

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

Автор: dream-x 4.05.2008 22:09

Цитата(compiler @ 4.05.2008 19:05) *

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

Не не катит...

Автор: compiler 4.05.2008 22:20

Цитата(dream-x @ 4.05.2008 18:09) *
Не не катит...
ну если хочешь заняться, как говорит сегодняшний именинник, изобретением велосипеда, тогда избавься от изменения глобальных переменных в процедурах, гляди и программа читабельной станет...

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

Автор: dream-x 4.05.2008 22:57

Цитата(compiler @ 4.05.2008 19:20) *

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

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


Вот я не могу понять (я вроде исправил переменные) почему не выводит 2 раза список:

Begin
InPutList(List1);
OutPutList(List1);
OutPutList(List1);


Автор: compiler 4.05.2008 23:02

Цитата(dream-x @ 4.05.2008 18:57) *
я вроде исправил переменные
исправленный код в студию...


для проверки, точно ли ты исправил), можешь перенести раздел объявления глобальных переменных ПОСЛЕ процедур...

Автор: dream-x 4.05.2008 23:05

Цитата(compiler @ 4.05.2008 20:02) *

исправленный код в студию...
для проверки, точно ли ты исправил), можешь перенести раздел объявления глобальных переменных ПОСЛЕ процедур...

Он вверху

Автор: compiler 4.05.2008 23:08

Цитата(dream-x @ 4.05.2008 19:05) *
Он вверху
щаз посмотрим твой всевышний код)

и сразу вопрос строка List1:=List1; имеет скрытый смысл?

а теперь непосредственно по теме:
можешь описать что делает OutPutList? для подсказки, можешь заменить ее описание на Procedure OutPutList(const List:TLink); ... в общем она не только выводит данные...
upd забыл изменит var на const(

Автор: dream-x 4.05.2008 23:12

Цитата(compiler @ 4.05.2008 20:08) *

щаз посмотрим твой всевышний код)

и сразу вопрос строка List1:=List1; имеет скрытый смысл?


Это от безысходности mega_chok.gif

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

Program Spisok;
Uses CRT;
Type
TData=integer;
PLink=^TElement;
TElement=Record
Data:TData;
Link:PLink;
End;
{----------------}
Procedure InPutList(Var List:PLink);
Var
ElNew:PLink;
Value:TData;
i,n:Integer;
Begin
ClrScr;
WriteLn('vvedite kol-vo elementov spiska ');
ReadLn(n);
List:=NIL;
For I:=1 To n Do
Begin
WriteLn('vvedite ',i,' element');
Read(value);
New(ElNew);
ElNew^.Data:=Value;
ElNew^.Link:=List;
List:=ElNew;
End;
End;
{----------------}
Procedure OutPutList(Var List:PLink);
Var
i:integer;
Begin
WriteLn('element spiska ');
While List <> NIL Do
Begin
Write(List^.Data,' ');
List:=List^.Link;
End;
WriteLn;
End;
{----------------}
Var
List1,Elem,FindElem:PLink;
i,n,p:Integer;
{----------------}
Begin
InPutList(List1);

OutPutList(List1);

OutPutList(List1);
Elem:=List1;



Write('wedite P=');
Readln(P);


FindElem:=NIL;
While List1 <> NIL Do
Begin

If Elem^.Data>P
Then
Begin
FindElem:=Elem;
New(FindElem);
{Elem^.Link:=NIL;}
Elem^.Link:=FindElem;
FindElem^.Link:=NIL;

End
Else Elem:=Elem^.Link;

End;

OutPutList(Elem);


End.


Переделанный... Как ты просил...

Автор: compiler 4.05.2008 23:20

я обновил предыдущий пост...

Автор: dream-x 4.05.2008 23:23

Цитата(compiler @ 4.05.2008 20:20) *

я обновил предыдущий пост...

Ну что я зделал неправильно, я понять не могу тут все Должно павыводиться!

Автор: compiler 4.05.2008 23:30

Цитата(dream-x @ 4.05.2008 19:23) *
Ну что я зделал неправильно, я понять не могу тут все Должно павыводиться!
процедуры вывода не должны менять значения чего либо...
скажем есть урывок
var i:integer;
begin
i:=0;
writeln(i);
{i = ?}
end.
ты хотел бы что бы i менялась? наверное, нет... а у тебя в процедуре List меняется на nil. . и в следующий раз ничего не выводится... добавь в процедуру дополнительную переменную и меняй ее, а List не трож!

Автор: dream-x 4.05.2008 23:34

Цитата(compiler @ 4.05.2008 20:30) *

процедуры вывода не должны менять значения чего либо...
скажем есть урывок
var i:integer;
begin
i:=0;
writeln(i);
{i = ?}
end.
ты хотел бы что бы i менялась? наверное, нет... а у тебя в процедуре List меняется на nil. . и в следующий раз ничего не выводится... добавь в процедуру дополнительную переменную и меняй ее, а List не трож!


Где именно


Procedure InPutList(Var List:PLink);
Var
ElNew:PLink;
Value:TData;
i,n:Integer;
Begin
ClrScr;
WriteLn('vvedite kol-vo elementov spiska ');
ReadLn(n);
List:=NIL;
For I:=1 To n Do
Begin
WriteLn('vvedite ',i,' element');
Read(value);
New(ElNew);
ElNew^.Data:=Value;
ElNew^.Link:=List;
List:=ElNew;
End;
End;

Если сдесь сдесь должно так быть и я щас попробывал одно и тоже...

Добавлено через 2 мин.
Это же ввод списка а перед вводом его обнулить надо

Автор: compiler 4.05.2008 23:39

причем здесь InPutList? мы ж вроде говорили о другой процедуре...

Procedure OutPutList(Var List:PLink);
Var
i:integer;
Begin
WriteLn('element spiska ');
While List <> NIL Do
Begin
Write(List^.Data,' ');
List:=List^.Link; {<-- здесь кто меняет List? }
End;
WriteLn;
End;

Автор: dream-x 4.05.2008 23:42

Цитата(compiler @ 4.05.2008 20:39) *

причем здесь InPutList? мы ж вроде говорили о другой процедуре...
Procedure OutPutList(Var List:PLink);
Var
i:integer;
Begin
WriteLn('element spiska ');
While List <> NIL Do
Begin
Write(List^.Data,' ');
List:=List^.Link; {<-- здесь кто меняет List? }
End;
WriteLn;
End;



ммм... а если тут убрать это тогда цикл зациклится smile.gif

Автор: volvo 4.05.2008 23:45

Цитата
а если тут убрать это тогда цикл зациклится
А если убрать Var вот тут:
Цитата
Procedure OutPutList(Var List:PLink);
, ничего не зациклится?

Ты б лучше привел пример, что должно быть в результате, если список вот такой: <5, 6, 7, 8, 9>, а число P = 7?

Автор: compiler 4.05.2008 23:45

Цитата(dream-x @ 4.05.2008 19:42) *
ммм... а если тут убрать это тогда цикл зациклится smile.gif
это из серии невероятное рядом?
я же написал
Цитата
добавь в процедуру дополнительную переменную и меняй ее, а List не трож!
читаем внимательней....

Автор: dream-x 4.05.2008 23:49

Цитата(volvo @ 4.05.2008 20:45) *

А если убрать Var вот тут:
, ничего не зациклится?

Ты б лучше привел пример, что должно быть в результате, если список вот такой: <5, 6, 7, 8, 9>, а число P = 7?


мне кажется так: "5 7 6 8 9"

Автор: volvo 4.05.2008 23:54

Цитата
мне кажется так:
А теперь - по шагам, для тех кто не понимает Паскаля, пройди и попробуй получить по своему алгоритму (приведенному в первом посте) из того, что написал я, твой результат...

Что и куда переносится, напиши...

Вот так вот:
1. исходный список: <5, 6, 7, 8, 9> элемент P = 7
2. текущий элемент = 5, меньше P, переносим его туда-то, получаем то-то...
3. ... и так далее ...

Я хочу видеть в результате проход по всему списку, и что у тебя получилось... Прежде, чем что-то программировать, надо понять, что это должно делать...

Автор: dream-x 4.05.2008 23:55

Уважаемый volvo! Поздравляю с днем Рождения!
И все заработало ну в смысле все выводиться щас дальше делать буду)
Спасибо volvo и compiler

Автор: dream-x 5.05.2008 0:17


Вот так вот:
1. исходный список: <5, 6, 7, 8, 9> элемент P = 7
2. текущий элемент = 5, меньше P, оставляем без изменения получем <5, 6, 7, 8, 9>
3. текущий элемент = 6, меньше P, оставляем без изменения т.к. он и так 2-ой получем <5, 6, 7, 8, 9>
4. текущий элемент = 7, равен P, переносим еговначало но после 5 т.к. 5 это начало списка получем <5, 7, 6, 8, 9>
5. текущий элемент = 8, больше P, переносим в конец получем <5, 6, 7, 9, 8>
6. текущий элемент = 9, больше P, переносим в конец получем <5, 6, 7, 8, 9>

Автор: dream-x 5.05.2008 2:17

Вот еще вопрос появился smile.gif, я список перегнал в однородный массив и как мне теперь вставить элемнт между элементами массива... Например есть массив <1 2 3 4 5 6> как мне всавить 3 между единицей и 2 чтобы получилось так <1 3 2 4 5 6>

Автор: compiler 5.05.2008 18:06

Цитата(dream-x @ 4.05.2008 22:17) *
Вот еще вопрос появился smile.gif, я список перегнал в однородный массив и как мне теперь вставить элемнт между элементами массива... Например есть массив <1 2 3 4 5 6> как мне всавить 3 между единицей и 2 чтобы получилось так <1 3 2 4 5 6>
не захотел делать с деками - ладно, но зачем сувать сюда массивы? та за такое... или у тебя задания придумать самый НЕ оптимальный способ?
это же список, тут вся прелесть в работе с указателями....
насчёт массива, если он статический -- вставляешь в нужное место, а остальные сдвигаешь, если динамический - в зависимости от реализации..

Автор: dream-x 5.05.2008 22:24

Цитата(compiler @ 5.05.2008 15:06) *

не захотел делать с деками - ладно, но зачем сувать сюда массивы? та за такое... или у тебя задания придумать самый НЕ оптимальный способ?
это же список, тут вся прелесть в работе с указателями....
насчёт массива, если он статический -- вставляешь в нужное место, а остальные сдвигаешь, если динамический - в зависимости от реализации..

Массивами это я как вариант...

Автор: compiler 5.05.2008 22:52

Цитата(dream-x @ 5.05.2008 18:24) *
Массивами это я как вариант...
смотрим примеры работы со списками и пишем аналогично(примеры можно взять с любого учебника или поискать по форуму)

Автор: dream-x 6.05.2008 3:44

Задание слегка изменилось но суть таже... Составить программу вставки элемента O после каждого элемента списка, превышающее некоторое значение Р.
Вот код... но есть проблема он стирает последующие символы...


Program Spisok;
Uses CRT;
Type
TData=integer;
PLink=^TElement;
TElement=Record
Data:TData;
Link:PLink;
End;
{----------------}
Procedure InPutList(Var List:PLink);
Var
ElNew:PLink;
Value:TData;
i,n:Integer;
Begin
ClrScr;
WriteLn('vvedite kol-vo elementov spiska ');
ReadLn(n);
{ List:=NIL;}
For I:=1 To n Do
Begin
WriteLn('vvedite ',i,' element');
Read(value);
New(ElNew);
ElNew^.Data:=Value;
ElNew^.Link:=List;
List:=ElNew;
End;
End;
{----------------}
Procedure OutPutList(List:PLink);
Var
i:integer;
Begin
WriteLn('element spiska ');
While List <> NIL Do
Begin
Write(List^.Data,' ');
List:=List^.Link;
End;
WriteLn;
End;
{----------------}
Procedure Insert(var q,l:PLink; x:TData);
Var
r:PLink;
Begin
New®;
R^.Data:=x;
R^.Link:=Q^.Link;
Q^.Link:=R;
l^.link:=R;
End;
{---------------------}
Var
List1,Elem,NewElem:PLink;
o, i,n,p:Integer;
ff:boolean;
{----------------}
Begin
InPutList(List1);
OutPutList(List1);
Write('wedite P=');
Readln(P);
Write('wedite O=');
Readln(O);
Elem:=List1;
NewElem:=List1;
i:=0;
{----------------------------------}
While Elem <> NIL Do
Begin
If Elem^.Data>p
Then
Begin
insert(Elem,NewElem,O);
OutPutList(NewElem);
i:=I+1;
Writeln('*****',i,'*****');
End;
Elem:=Elem^.Link;

End;
readkey
End.

я не могу понять почему он затирает последующие символы...

Автор: compiler 6.05.2008 18:56

Цитата(dream-x @ 5.05.2008 23:44) *
Вот код... я не могу понять почему он затирает последующие символы...
чесно говоря, я тоже не очень понимаю твою программу... но если заменить insert, на что-то подобное
procedure insert(var p_now:PLink; const data:TData);
var
p_new:PLink;
begin
new(p_new);
p_new^.data := data;
p_new^.link := p_now^.link;
p_now^.link := p_new;
end;
то, вроде, функциональность уже ближе к желаемой...
я так и не понял, почему ты туда хочешь передавать три параметра... и еще у тебя в программе есть не используемые переменные. и,если разговор зашел о переменных, я продолжаю рекомендовать объявлять глобальные переменные ПОСЛЕ процедур..

Автор: dream-x 6.05.2008 19:36

Цитата(compiler @ 6.05.2008 15:56) *

чесно говоря, я тоже не очень понимаю твою программу... но если заменить insert, на что-то подобное
procedure insert(var p_now:PLink; const data:TData);
var
p_new:PLink;
begin
new(p_new);
p_new^.data := data;
p_new^.link := p_now^.link;
p_now^.link := p_new;
end;
то, вроде, функциональность уже ближе к желаемой...
я так и не понял, почему ты туда хочешь передавать три параметра... и еще у тебя в программе есть не используемые переменные. и,если разговор зашел о переменных, я продолжаю рекомендовать объявлять глобальные переменные ПОСЛЕ процедур..

Спасибо!!! Ну что такое, всего-то надо было присвоить ссылке следующее значение и все еще раз спасибо огромное, все понятно. Что-то я ступил...

Автор: compiler 6.05.2008 19:51

Цитата(dream-x @ 6.05.2008 15:36) *
Спасибо!!!
всегда пожалуйста...
Цитата(dream-x @ 6.05.2008 15:36) *
Что-то я ступил...
посмотри еще примеры... и попытайсяя делать код "чище"...

Автор: dream-x 6.05.2008 23:40

Цитата(compiler @ 6.05.2008 16:51) *

всегда пожалуйста...
посмотри еще примеры... и попытайсяя делать код "чище"...

Еще раз спасибо! Все учту...
З.Ы. А щас курсач доделывать буду...

Добавлено через 5 мин.
Если кому нужна эта задача то вот исходник



Прикрепленные файлы
Прикрепленный файл  SPISOK.PAS ( 1.8 килобайт ) Кол-во скачиваний: 252

Автор: compiler 6.05.2008 23:50

прошу прощения за оффтоп..

Цитата(dream-x @ 6.05.2008 19:40) *
А щас курсач доделывать буду...
это был курсач? если не секрет, где такие "курсачи" дают и на каком курсе...
или курсач на другую тему?

онтоп
а лишние переменные ты так и не убрал...

Автор: dream-x 7.05.2008 0:30

Цитата(compiler @ 6.05.2008 20:50) *

прошу прощения за оффтоп..

это был курсач? если не секрет, где такие "курсачи" дают и на каком курсе...
или курсач на другую тему?

онтоп
а лишние переменные ты так и не убрал...

Нет курсач у меня Пятнашки у меня там проблема с записью в файл имя игрока и его рекорд...
А ссылки это так лаба была...

Автор: compiler 7.05.2008 0:51

Цитата(dream-x @ 6.05.2008 20:30) *
Нет курсач у меня Пятнашки у меня там проблема с записью в файл имя игрока и его рекорд...
А ссылки это так лаба была...
курс? учебное заведение?

и это переменные нашёл? у тебя их там три штуки...
и OutPutList ты до ума не довел... заведи там отдельную переменную(зато сократится одна глобальная), но не меняй входные данные...
и напоследок, освобождение памяти тоже делать надо...

Автор: dream-x 7.05.2008 2:01

Цитата(compiler @ 6.05.2008 21:51) *

курс? учебное заведение?

и это переменные нашёл? у тебя их там три штуки...
и OutPutList ты до ума не довел... заведи там отдельную переменную(зато сократится одна глобальная), но не меняй входные данные...
и напоследок, освобождение памяти тоже делать надо...


1 курс, Рязанский Радиотехнический Государственный Университет спец, САПР ВС...
это я щас все сделаю... а про память это как ее освоюождать?

Автор: compiler 7.05.2008 20:04

Цитата(dream-x @ 6.05.2008 22:01) *
Рязанский Радиотехнический Государственный Университет
интересно... а я тоже собираюсь в такой же поступать, только в Харьковский)

Цитата(dream-x @ 6.05.2008 22:01) *
это я щас все сделаю...
ну , тут, батенька, поиск.. даже в ЧаВо єто есть, если псевдокодом..
Код
процедура освобождения(var список)
var
  указатель_на старый_элемент
begin
  пока список не указывает на нил[не речка)] begin
    старому элементу присвоить текущие значение(список)
    список указывает на следующий элемент
    освободить старый элемент(dispose(p_old);)
  end;
end;

Автор: volvo 7.05.2008 20:40

Цитата
Если кому нужна эта задача то вот исходник
Не могу понять программистов, которые делают непонятные (интуитивно) программы...

Если я ввожу данные в список так:
<1, 2, 3, 4, 5> - почему тут же получаю распечатку в виде:
<5, 4, 3, 2, 1> ? Что, настолько сложно сделать добавление в конец списка? Всего навсего:

Procedure InPutList(Var List:PLink);
Var
ElNew, Tail: PLink;
Value:TData;
i,n:Integer;
Begin
ClrScr;
WriteLn('vvedite kol-vo elementov spiska ');
ReadLn(n);

List := nil; Tail := nil;
For I:=1 To n Do
Begin
WriteLn('vvedite ',i,' element');
Read(value);
New(ElNew);
ElNew^.Data:=Value;
ElNew^.Link:=nil;

if List = nil then List := ElNew
else Tail^.Link := ElNew;

Tail := ElNew;
End;
End;
неужели настолько много изменилось?

Второе: по условию -
Цитата
Программа должна переставить элементы списка по следующему звкону: если текущий элемент больше некоторого числа Р то поместитьследующий заним элемент в конец цепочки; если текущий элемент меньше или равен Р перенести его в начало цепочки (первый оставить безизменения)
Все. Точка... Вводить надо только список и значение P. С какой стати программа требует ввода какого-то O? Хоть бы объясняла, зачем оно, а то, собственно, что вводить-то?

Добавлено через 11 мин.
P.S. Опять же... Основная программа:

...
insert(Elem,O);
OutPutList(NewElem); { <--- Это значение что, где-то инициализировалось? }
...

Нет... Зачем выводить пустоту?

А при вводе в O значения, которое превышает P (я не знаю, что туда надо было вводить, поэтому экспериментирую в режиме телепатии) программа вообще зацикливается...

Автор: dream-x 7.05.2008 21:59

Цитата(volvo @ 7.05.2008 17:40) *

А при вводе в O значения, которое превышает P (я не знаю, что туда надо было вводить, поэтому экспериментирую в режиме телепатии) программа вообще зацикливается...

Уважаемый volvo вот собственно задание: Составить программу вставки элемента O после каждого элемента списка, превышающее некоторое значение Р. Вот код... но есть проблема он стирает последующие символы...

Автор: volvo 9.05.2008 21:11

Цитата
но есть проблема он стирает последующие символы...
Я тебе написал, какие у тебя ЕЩЕ проблемы в коде... В условии не сказано, что вводимое значение O должно быть меньше, чем значение P, правда?

Вводим O = 8 и P = 3 при списке = <5, 4, 3, 2, 1> и получаем зацикливание... Если хочешь - расскажу, в чем причина зацикливания, но тебе будет полезнее пройтись по программе в режиме отладки и найти ошибку самостоятельно...

А все потому, что ты не хочешь делать так, как нужно (а как нужно - написано в FAQ-е, в теме про ДСД), а хочешь все время сделать по-своему, к тому же неправильно, и при этом еще утверждаешь, что программа у тебя рабочая (см. свой же пост №30)

Автор: dream-x 9.05.2008 21:20

Цитата(volvo @ 9.05.2008 18:11) *

Я тебе написал, какие у тебя ЕЩЕ проблемы в коде... В условии не сказано, что вводимое значение O должно быть меньше, чем значение P, правда?

Вводим O = 8 и P = 3 при списке = <5, 4, 3, 2, 1> и получаем зацикливание... Если хочешь - расскажу, в чем причина зацикливания, но тебе будет полезнее пройтись по программе в режиме отладки и найти ошибку самостоятельно...

А все потому, что ты не хочешь делать так, как нужно (а как нужно - написано в FAQ-е, в теме про ДСД), а хочешь все время сделать по-своему, к тому же неправильно, и при этом еще утверждаешь, что программа у тебя рабочая (см. свой же пост №30)

Я не заметил прошу прощение щас пройдусь и все посмотрю спасибо огромное!

Автор: dream-x 9.05.2008 21:45

Вот собственно что я придумал... Но все равно он удаляет предшествующие элементы после 2 повторения цикла


procedure insert(var p_now,p_list:PLink; const data:TData);
var
p_new:PLink;
begin
new(p_new);
p_new^.data := data;
p_new^.link := p_now^.link;
p_list := p_now;
p_now := p_new;

end;


Автор: volvo 9.05.2008 21:59

Почти... Надо вот так:

procedure insert(var p_now: PLink; const data:TData);
var
p_new:PLink;
begin
new(p_new);

p_new^.data := data;
p_new^.link := p_now^.link;
p_now^.link := p_new;
p_now := p_now^.link; { <--- Ты ж добавил элемент, надо его пропустить! }
end;

А вызывать - вот так:

     While Elem <> NIL Do Begin

If Elem^.Data>p Then Begin
insert(Elem,O);
OutPutList(List1); { <--- Печатать ВЕСЬ список, а не с плавающего указателя ... }
i:=i+1;
Writeln('*****',i,'*****');
End;
Elem:=Elem^.Link;
End;

Автор: dream-x 9.05.2008 22:04

Цитата(volvo @ 9.05.2008 18:59) *

Почти... Надо вот так:

procedure insert(var p_now,p_list:PLink; const data:TData);
var
p_new:PLink;
begin
new(p_new);
p_new^.data := data;
p_new^.link := p_now^.link;
p_list := p_now;
p_now := p_new^.link; { <--- Ты ж добавил элемент, надо его пропустить! }
end;

А вызывать - вот так:

     While Elem <> NIL Do Begin

If Elem^.Data>p Then Begin
insert(Elem,O);
OutPutList(List1); { <--- Печатать ВЕСЬ список, а не с плавающего указателя ... }
i:=i+1;
Writeln('*****',i,'*****');
End;
Elem:=Elem^.Link;
End;


Блин в процедуре действительно оплашал а это я же так хотел сделать вод дурак что меня оставнавило не знаю)) Спасибо...

Добавлено через 14 мин.
Цитата(dream-x @ 9.05.2008 19:04) *

Блин в процедуре действительно оплашал а это я же так хотел сделать вод дурак что меня оставнавило не знаю)) Спасибо...

Хм я чет не понял смотри есди я вызываю так:

While Elem <> NIL Do
Begin
If Elem^.Data>p
Then
Begin
insert(Elem,list1,O); { вот собственно так? если да то нефига }
OutPutList(list1);
i:=i+1;
Writeln('*****',i,'*****');
End;
Elem:=Elem^.Link;
End;


Автор: volvo 9.05.2008 22:22

Я там поправил, у Insert всего 2 параметра, я просто скопировал на автомате... А вызов - как я показал раньше...

Автор: dream-x 9.05.2008 22:32

Цитата(volvo @ 9.05.2008 19:22) *

Я там поправил, у Insert всего 2 параметра, я просто скопировал на автомате... А вызов - как я показал раньше...

Volvo все равно косяк... Он выводит только 1-ое изменение...

Автор: volvo 9.05.2008 23:28

Проверяй внимательно, у меня только что все отработало...

Автор: dream-x 9.05.2008 23:39

Цитата(volvo @ 9.05.2008 20:28) *

Проверяй внимательно, у меня только что все отработало...

Ага я TP7 перезапустил и все заработало... спс!
P. S. Извини конечно меня а ты не мог бы посмотреть мой бред с таблицей я уже с ней неделю сижу а мне через неделю курсач сдавать.