Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2015, 14:35   #21
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

про процедуру убедили, ну да вывести нужно вывести третье значение из списка.
olya-rud вне форума Ответить с цитированием
Старый 16.10.2015, 14:38   #22
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Пусть структуры описаны следующим образом:
Код:
TPElem =^TTElem; 
TTElem = record
  ...
  PNext : TPElem;
end;

TList = record
    PFirst : TPElem;
    PLast : TPElem;
end;
Случайный элемент списка можно считать элементом цепочки, вложенным на определённую глубину заданную случайным числом

Код:
function RandomElement(list : TList) : TPElem;
var count : integer;
begin
  count := random * число;
  result := nil;
  if Assigned(list.PFirst) then 
     result := list.PFirst else
  if Assigned(list.PLast) then 
    result := list.PLast;
  while Assigned(result)  do
  begin
     if Assigned(result.PNext) then 
       result :=result.PNext; 
     dec(count);
     if (count<1) break;
  end;
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 16.10.2015, 15:02   #23
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Оля, ладно.
попробуйте такой код:
Код:
 //Вывод случайного элемента из однонаправленного списка aList.
procedure PrintRandomFromList(const aList: TList);
var
  PElem: TPElem;
  n,m : integer;
begin
  n:=0;
  PElem := aList.PFirst;
  while PElem <> nil do 
  begin
    Inc(n); {нарастили счётчик элементов на единичку}
    PElem := PElem^.PNext;
  end;
  writeln('Количество элементов: ', n);
  if n=0 then begin
    WriteLn('Список пуст, нет в нём никаких значений! Расходимся...');
    Exit;
  end;
  randomize;
  m := random(n) + 1; {число в диапазоне 1 -:- n}
  writeln('Случайное число: ', m);

  //поиск и печать m-ного элемента
  PElem := aList.PFirst;
  while m>1 do begin
      PElem := PElem^.PNext;
      Dec(m)
  end;
  writeln('Элемент: ', PElem^.Data);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2015, 15:05   #24
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

Serge_Bliznykov огромное спасибо, все работает
olya-rud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вернуть случайное текстовое значение из списка КакоеИмяПридумать? Microsoft Office Excel 2 04.01.2015 13:06
Паскаль. Случайное заполнение списка. Silverstone Помощь студентам 3 25.05.2012 11:21
Возведение в степень и случайное значение переменной БалаШагаЛ Общие вопросы C/C++ 14 19.03.2011 19:03
Последнее значение в столбце списка ALev Microsoft Office Excel 2 02.07.2009 16:29
Случайное разбиение списка на множесво маленьких списков eXa Общие вопросы Delphi 5 15.08.2007 09:23