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

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

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

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> Задача на списки
сообщение
Сообщение #1


Пионер
**

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

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


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

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.


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

Сообщение отредактировано: dream-x -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Человек
*****

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

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


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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


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

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

Не не катит...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Человек
*****

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

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


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

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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

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

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


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

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

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


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

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

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Человек
*****

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

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


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


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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

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

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


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

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

Он вверху
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Человек
*****

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

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


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

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

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

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

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

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


Цитата(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.


Переделанный... Как ты просил...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Человек
*****

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

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


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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

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

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


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

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

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


Человек
*****

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

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


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

Сообщение отредактировано: compiler -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

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

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


Цитата(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 мин.
Это же ввод списка а перед вводом его обнулить надо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Человек
*****

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

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


причем здесь 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;


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

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

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


Цитата(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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






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

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

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Человек
*****

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

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


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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Пионер
**

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

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


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

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

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


мне кажется так: "5 7 6 8 9"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






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

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

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

Я хочу видеть в результате проход по всему списку, и что у тебя получилось... Прежде, чем что-то программировать, надо понять, что это должно делать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Пионер
**

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

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


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

3 страниц V  1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





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