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

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

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

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> Задача на списки
dream-x
сообщение 4.05.2008 17:34
Сообщение #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 - 4.05.2008 18:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 4.05.2008 18:05
Сообщение #2


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

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

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


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


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


Пионер
**

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

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


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

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

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


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

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

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


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

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


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


Пионер
**

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

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


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

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

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


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

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

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


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

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

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


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


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


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


Пионер
**

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

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


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

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

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


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

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

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


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

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

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

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


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dream-x
сообщение 4.05.2008 19:12
Сообщение #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 
 К началу страницы 
+ Ответить 
compiler
сообщение 4.05.2008 19:20
Сообщение #10


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

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

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


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


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


Пионер
**

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

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


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

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

Ну что я зделал неправильно, я понять не могу тут все Должно павыводиться!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
compiler
сообщение 4.05.2008 19:30
Сообщение #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 - 4.05.2008 19:32


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dream-x
сообщение 4.05.2008 19:34
Сообщение #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 
 К началу страницы 
+ Ответить 
compiler
сообщение 4.05.2008 19:39
Сообщение #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 
 К началу страницы 
+ Ответить 
dream-x
сообщение 4.05.2008 19:42
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.05.2008 19:45
Сообщение #16


Гость






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

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

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


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

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

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


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


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


Пионер
**

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

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


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

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

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


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


Гость






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

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

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

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


Пионер
**

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

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


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

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

 



- Текстовая версия 27.04.2024 7:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"