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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2015, 13:18   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Я думаю у вас в начале изучения тоже не все получалось.
да у меня и сейчас далеко не всё получается.
Учиться, учиться и ещё раз учиться, как завещал великий В.И.Ленин.


Задача то решена? Случайное значение из списка вывести удалось?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2015, 13:25   #12
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

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

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Задача то решена? Случайное значение из списка вывести удалось?
Можете помочь с выводом нужного элемента из списка. Я делаю все в одной функции, Т.е. он у меня в одной функции считает количество элементов, потом выбирает случайное значение из количества элементов, а вот как потом найти нужный элемент не получается. А завтра сдавать нужно.
olya-rud вне форума Ответить с цитированием
Старый 16.10.2015, 13:51   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

то, что Вы пытаетесь сделать - это правильно. только так и можно научиться.

покажите ваш код, что у Вас получился. Посмотрим вместе, где Вы ошибаетесь.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2015, 14:08   #15
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

вот что получилось, это один из вариантов, уже много всего перепробовала
Код:
 //Подсчёт количества элементов в однонаправленном списке aList.
function CountList(const aList: TList):integer;
var
  PElem: TPElem;
  n,m : integer;
begin
  n:=0;
  PElem := aList.PFirst;
  while PElem <> nil do 
  begin
    Inc(n); {нарастили счётчик элементов на единичку}
    PElem := PElem^.PNext;
  end;
  CountList := n; {вернули значение счётчик}
  writeln('Количество элементов: ', n);
  randomize;
  m := random(N) + 1; {число в диапазоне 1 -:- N}
  writeln('Случайное число: ', m);
  
  while (PElem <> nil) do
  begin
     if m = list^.data then
     else
      list := list^.next
  end;
  write (PElem^.Data);
end;
olya-rud вне форума Ответить с цитированием
Старый 16.10.2015, 14:14   #16
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

Я думаю тут нужно взять это случайное значение и при проходе списка чтобы оно его по n нашло, у а потом вывело на экран
olya-rud вне форума Ответить с цитированием
Старый 16.10.2015, 14:16   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так.
первое. если Вы не используете функцию CountList как функцию, то в ней нет необходимости! заменяйте function на процедуре и выбрасывайте ():integer
да я бы ещё и переименовал сразу на что-нибудь более адекватное,
например PrintRandomListValue


второе.
m вы получили нормально.
А дальше его нужно использовать в коде или нет?! Вы же вроде бы должны M-й элемент списка вывести. А Вы это не делаете!
цикл просто перебирает все элементы списка до конца.

третье. перед тем, как перебирать элементы, нужно поставить указатель (временную переменную PElem) на начало списка (см. начало данной функции, где это делается перед подсчётом n)

жду ваших исправлений.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.10.2015, 14:20   #18
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

Функция в конце программы вызывается, так что изменять ее на процедуру нет смысла, m в принципе дальше в коде использовать не нужно, сейчас буду пытаться делать дальше.
olya-rud вне форума Ответить с цитированием
Старый 16.10.2015, 14:28   #19
olya-rud
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 14
По умолчанию

Вот еще вариант, который я думаю ближе к правильно решению, но все равно не так работает
Код:
 //Подсчёт количества элементов в однонаправленном списке aList.
function CountList(const aList: TList):integer;
var
  PElem: TPElem;
  n,m : integer;
begin
  n:=0;
  PElem := aList.PFirst;
  while PElem <> nil do 
  begin
    Inc(n); {нарастили счётчик элементов на единичку}
    PElem := PElem^.PNext;
  end;
  CountList := n; {вернули значение счётчик}
  writeln('Количество элементов: ', n);
  randomize;
  m := random(N) + 1; {число в диапазоне 1 -:- N}
  writeln('Случайное число: ', m);
  //поиск элемента
  PElem := aList.PFirst;
  var
  flag : boolean;
begin
  flag := false;

  while (PElem <> nil) and (not flag) do
  begin
     if m = PElem^.Data then
       flag := true
     else
      PElem := PElem^.PNext;
  end;
  writeln('Элемент: ', PElem);
end;
end;
olya-rud вне форума Ответить с цитированием
Старый 16.10.2015, 14:32   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
m в принципе дальше в коде использовать не нужно
как не нужно?!!!!
Что же Вы такое говорите?!
Это же и есть случайное значение.
ну, вот, смотрите.
пусть в списке 10 элементов (для примера)
получили случайное значение m=3 (для примера)
вывели на экран текст "Случайное число: 3"
всё?
дальше нам в коде ничего не надо сделать? Нам в коде не нужно вывести ТРЕТЬЕ значение из списка? Если нет - тогда что нужно вывести?!

Цитата:
Функция в конце программы вызывается, так что изменять ее на процедуру нет смысла
если Вы вызываете функцию как процедуру (т.е. не получаете возвращаемое её значение, то ТЕМ БОЛЕЕ нужно изменить функцию на процедуру)!
Хотя, конечно, это не ошибка. Это просто бессмыслица, делать функцию, которая не нужна, а нужна процедура.
впрочем, это ваше дело.


Цитата:
Код:
  //поиск элемента
  PElem := aList.PFirst;
  var
  flag : boolean;
это даже компилироваться не должно.
Паскаль (стандартный) чётко разделяет код и область объявления переменных. смешивать их нельзя!

но вообще, я не вижу, зачем Вам переменная flag !!
Что Вы с её помощью пытаетесь найти?!

вижу, что у Вас проблема с понимаем алгоритма.
Пытайтесь на алгоритмическим псевдоязыке (ну или просто по русски) описать действия, которые нужно выполнить, чтобы достичь цели.

Последний раз редактировалось Serge_Bliznykov; 16.10.2015 в 14:36.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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