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

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

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

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


Новичок
*

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

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


Здравствуйте!
Помогите пожалуйста далеко не юной зочнице справится с кусовиком.
Как с помощью Randomize создать линейный список из десяти положительных целых чисел?
Заранее благодарю.

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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Наташа,
пожалуйста, создавай для новой задачи новую тему - ладно?
А фото лучше поместить в профиле smile.gif

Что касается списков и Randomize - на Форуме уже много раз было. Попробуй воспользоваться Поиском. Задай, например, поиск +линейн* +спис*
Если не найдешь, что нужно, или будет непонятно - спрашивай еще.
Удачи!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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




Здравствуйте уважаеммый Андрей!
Спасибо за ответ. Прошу прощения за ошибки - это моя первая попытка общения на форумах.
Я привыкла все делать сама. но изучать программирование самостоятельно довольно трудно, тем более такую
устаревшую китайскую граммоту, как Паскаль. Кого не спросишь - кто не помнит, а кто и не знает. Хотя у нас в
организации программистов больше чем людей. Все пишут на C++ и Java, а Паскаль он и презирают. Досконально перечитала то что выложил Altair о динамических структурах и то что выдал поиск, но конкретно о создании списка Random'ом не нашла. Не соображу как это сделать в цикле и что будет счетчиком цикла?
Кстати, в прикрепленной прграмме Lict.pas у Altair'а не работают процедуры addafter и addbefore, ощущение что ошибка в функции searchel, прошу прощения если ошибаюсь.
Помогите пожалуйста.
Заранее благодарна за любую помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот простейшая процедура создания списка (все, что потребуется - поменять число элементов, и заменить ввод с клавиатуры на Random):
Сложение элементов 2 списков
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Madam @ 29.09.2006 10:38) *

Прошу прощения за ошибки

Да какие там ошибки - не нужно никаких извинений smile.gif
Единственная просьба - быть немного попроще, если можно.. Слово "Уважаемый" оставь для служебных записок - тут его могут истолковать противоположным образом.. smile.gif

volvo дал хороший пример. Что касается Randomize, то я подозреваю, что ты имеешь в виду Random (как и пишет volvo). Делается это примерно так..

Вместо строчки
write('item #', i:2, ' = '); readln(X);

вставь, например, вот, что:
X:=Random(1000);

Этот оператор присваивает переменной Х случайное значение в диапазоне 0 - 999 (можешь менять параметр функции Random, чтоб получить желаемый диапазон, но не задавай его больше, чем 65536).

Если ты сделаешь так, числа будут не совсем случайными, они будут одинаковыми при каждом новом запуске программы (хотя друг от друга зависеть как бы не будут). На самом деле это очень удобно на стадии отладки программы. Но если ты хочешь все же получить действительно случайные числа (другие при каждом новом запуске программы), то просто вставь тот самый Randomize до первого вызова Random (например, самым первым оператором программы, то есть сразу после первого begin в теле программы - в данном случае перед вызовом create_list).

Убедись, что тебе понятен смысл каждого значка - иначе в программировании нельзя. Приходи снова с вопросами.
Удачи! smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Андрей, спасибо большое, все получилось. Теперь буду полученный список сортировать и т. д. в графическом режиме.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Madam @ 3.10.2006 9:46) *

Теперь буду полученный список сортировать и т. д. в графическом режиме.

Отлично. Если что - говори. И даже если все вроде получается - все равно приноси и показывай код. Смеяться над новичками тут не принято, а показать как лучше - это завсегда. smile.gif
Удач!


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


Новичок
*

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

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


Цитата(lapp @ 3.10.2006 14:21) *
Отлично. Если что - говори. И даже если все вроде получается - все равно приноси и показывай код. Смеяться над новичками тут не принято, а показать как лучше - это завсегда. smile.gif
Удач!
Всем привет!
У меня опять вопрос: ошибка в процедуре выбора элемента. Не могу понять, что не так?
Почему программа не проходит весь список, а вставляет элемент после первого?
program CreaChlist;
uses CRT;

type pt = ^elem;
elem = record
info : byte;
next : pt;
end;
var p,p1,q,first:pt;
M:integer;
procedure create_list(var p:pt);
var first,last,curr:pt;
i,X:byte;
begin
first:=nil;
last:=nil;
for i:=1 to 10 do
begin
X:=Random(98)+1;
new(curr);
curr^.info:=X;
curr^.next:=nil;
if first=nil then first:=curr
else last^.next:=curr;
last:=curr;
end;
p:=first;
end;
{___________________________________________________________________________}
procedure Cearch_element(var q:pt); {q -seach element}
var p:pt;
M:integer;
begin
p:=first;
writeln('input element: ');
ReadLn(M);
while ((p^.next<>Nil) and (p^.info<>M))do
p:=p^.next;
if (p^.info<>M) then
q:=Nil
else
q:=p;
end;

{----------------------------------------------------------------------------}
procedure Insert(var q:pt);
var newelem:pt;
X:byte;
begin
New(newelem);
X:=Random(98)+1;
newelem^.info:=X;
newelem^.next:=q^.next;
q^.next:=newelem;
end;
{---------------------------------------------------------------------------}
Begin
clrscr;
Randomize;
create_list(p1);
p:=p1;
while p<>nil do
begin
write(p^.info:4,' ');
p:=p^.next;
end;
writeln;
Cearch_element(q);
Insert(p1);
p:=p1;
while p<>nil do
begin
write(p^.info:4,' ');
p:=p^.next;
end;
ReadKey;
End.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
Почему программа не проходит весь список, а вставляет элемент после первого?
Потому, что ты сказала ей делать это:
Insert(p1);


Что, собственно, нужно сделать? Вставить новый элемент после найденного? А если не было найдено ничего?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Цитата(volvo @ 5.10.2006 14:10)
Что, собственно, нужно сделать? Вставить новый элемент после найденного? А если не было найдено ничего?

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


Гость






P.S. Кстати, программа вообще аварийно заканчивается (при использовании FPC любые огрехи видны очень четко: чуть что - Segmentation Fault, что в большинстве случаем замалчивается Turbo Pascal-ем, потом выдающим некорректный результат)...

Причина: наличие в программе ГЛОБАЛЬНОЙ переменной First, которая просто НЕ инициализирована... ЛОКАЛЬНАЯ переменная, описанная в Create_List ее перекрывает... Это - ошибка...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

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

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


Цитата(volvo @ 5.10.2006 14:17) *
Причина: наличие в программе ГЛОБАЛЬНОЙ переменной First, которая просто НЕ инициализирована... ЛОКАЛЬНАЯ переменная, описанная в Create_List ее перекрывает... Это - ошибка...

Сделала first локальной - результат тот же
Program Seachlst;
uses CRT;

type pt = ^elem;
elem = record
info : byte;
next : pt;
end;
var p,p1,q{,first}:pt;
M:integer;
{----------------------------------------------------------------------------}
procedure create_list(var p:pt);
var first,last,curr:pt;
i,X:byte;
begin
first:=nil;
last:=nil;
for i:=1 to 10 do
begin
X:=Random(98)+1;
new(curr);
curr^.info:=X;
curr^.next:=nil;
if first=nil then first:=curr
else last^.next:=curr;
last:=curr;
end;
p:=first;
end;
{___________________________________________________________________________}
procedure Cearch_element(var q:pt); {q -seach element}
var first,p:pt;
M:integer;
begin
first:=nil;
p:=first;
writeln('input element: ');
ReadLn(M);
while ((p^.next<>Nil) and (p^.info<>M))do
p:=p^.next;

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


Прогрессор
****

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

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


Я сейчас пытаюсь разобраться в программе... nea.gif похоже, ты не осознаёшь разницы между глобальными и локальными переменными... тебе надо разобраться с областями видимости. В частности, в твоей процедуре, которая должна производить поиск, зачем-то создаёшь новый, незаполненный список, и начинаешь пытаться в нём искать.
Цитата
Сделала first локальной
имхо, надо наоборот - убрать локальную first. и не только её... сейчас разберусь, скажу точнее...


И вот это еще:
Цитата
Insert(p1);


Тогда уж, наверное, логичнее будет Insert(q);

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


Новичок
*

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

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


Цитата(Atos @ 5.10.2006 14:58) *

Я сейчас пытаюсь разобраться в программе... nea.gif похоже, ты не осознаёшь разницы между глобальными и локальными переменными... тебе надо разобраться с областями видимости. В частности, в твоей процедуре, которая должна производить поиск, зачем-то создаёшь новый, незаполненный список, и начинаешь пытаться в нём искать.
имхо, надо наоборот - убрать локальную first. и не только её... сейчас разберусь, скажу точнее...

Совершенно верно, с глобальными и локальными у меня вечная путаница.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата
Сделала first локальной
blink.gif И что? First, которая БЫЛА в Create_List (да, да, именно была, при выходе из Create_List стек разрушился, и этой переменной больше нет) никак не связана с First, которая существует в Cearch_element (эта переменная вообще содержит случайное значение, т.е. "мусор")...

Выходов два:
1. ЛИБО работать с глобальной переменной (так проще, но я не люблю глобальные переменные, поэтому ...)
2. ЛИБО работать не с процедурами, а с функциями возвращающими результат своей работы в вызывающую часть программы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

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

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


Цитата(volvo @ 5.10.2006 15:06) *

blink.gif И что? First, которая БЫЛА в Create_List (да, да, именно была, при выходе из Create_List стек разрушился, и этой переменной больше нет) никак не связана с First, которая существует в Cearch_element (эта переменная вообще содержит случайное значение, т.е. "мусор")...

Выходов два:
1. ЛИБО работать с глобальной переменной (так проще, но я не люблю глобальные переменные, поэтому ...)
2. ЛИБО работать не с процедурами, а с функциями возвращающими результат своей работы в вызывающую часть программы...

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


Прогрессор
****

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

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


В общем, если уж работать с глобальным списком, тогда надо внести следующие исправления:
first и last сделать глобальными и убрать их объявления из всех подпрограмм;
p1 убрать нафик, в данном контексте программы эта переменная вообще не нужна, только запутывает.
И всё-таки заменить Insert(p1); на Insert(q);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

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

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


Цитата(Atos @ 5.10.2006 14:58) *

Я сейчас пытаюсь разобраться в программе... nea.gif похоже, ты не осознаёшь разницы между глобальными и локальными переменными... тебе надо разобраться с областями видимости. В частности, в твоей процедуре, которая должна производить поиск, зачем-то создаёшь новый, незаполненный список, и начинаешь пытаться в нём искать.
имхо, надо наоборот - убрать локальную first. и не только её... сейчас разберусь, скажу точнее...
И вот это еще:


Тогда уж, наверное, логичнее будет Insert(q);

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


Гость






Смотри, насколько все проще при использовании функций:
function Cearch_element(const first: pt): pt;
var
p: pt;
M:integer;
begin
Cearch_element := nil;

write('input element: '); ReadLn(M);

p := first;
while ((p^.next<>nil) and (p^.info<>M))do p:=p^.next;

if (p^.info = M) then Cearch_element := p;
end;

...

Begin
clrscr;
Randomize;
create_list(p1);

p:=p1;
while p<>nil do begin
write(p^.info:4,' ');
p:=p^.next;
end;
writeln;

q := Cearch_element(p1);
{ Я бы еще добавил проверку, не вернулся ли NIL }
Insert(q);

p:=p1;
while p<>nil do begin
write(p^.info:4,' ');
p:=p^.next;
end;
ReadKey;
End.

Все остальное - без изменений...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Прогрессор
****

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

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


Цитата
Ничего подобного! Так она вообще ничего не ищет и не вставляет.

Значит, где-то ещё ошибка.
Смотри, перед этим ты вызвала Cearch_element(q);
Значит, q должно указывать на нужный тебе элемент, так? И значит вставлять тебе нужно именно после q, а не после непонятного указателя p1, который вообще-то у тебя всегда указывает на начало списка, как и first
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




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