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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 18:44   #1
art.marked
Пользователь
 
Аватар для art.marked
 
Регистрация: 01.03.2011
Сообщений: 53
Радость Delphi - вывод рандомных вопросов из массива

Здравствуйте, уважаемые программисты!

Программа тестирования должна выводить 10 вопросов из 32 (больше-меньше) в массиве. Но дело в том, что иногда всё-таки проскакивают одинаковые вопросы. Как исправить или может вообще по порядку пустить?

Краткий листинг процедуры:
Код:
 begin      //вывод вопроса на форму
   Randomize;
   vopros:= 1 + random(31);
   inc(num);
   label1.Caption:= Q+inttostr(num)+_of+inttostr(N); 
   label2.Caption:= test[vopros].que;          //рандомный выбор вопроса
   RadioGroup1.Items.Strings[0]:= ' '+test[vopros].v1;  //вывод ответов
   RadioGroup1.Items.Strings[1]:= ' '+test[vopros].v2;
   RadioGroup1.Items.Strings[2]:= ' '+test[vopros].v3;
   RadioGroup1.Items.Strings[3]:= ' '+test[vopros].v4;
   zero;
   ri:= test[vopros].r;
 end;
vopros - номер вопроса; que - текст вопроса;num - номер вопроса; ri - что-то с radio.group

Нужно подробнее - пишите.

Если будут умельцы, которые готовы подправить и подсчет оценки, то буду рад. +100 WMR

Заранее спасибо.
@belov on Twitter
art.marked вне форума Ответить с цитированием
Старый 27.05.2013, 19:05   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
может вообще по порядку пустить?
Фи.. Только если
Код:
p := Random (32-10)+1;
for i := p to p+10 do
      // балуемся с вопросом
Но это не ахти..
Давайте сделаем так :
Код:
for i := 1 to 1000 do 
      Swap (a[Random(32)+1], a[Random(32)+1]
И далее выводим первые 10 вопросов.

P.S. Swap - должен быть самописный!!
UPDATE 19:13
P.P.S. А Вам не кажется, что по Вашему описанию переменных vopros и num выполняют одну и ту же функцию?

Последний раз редактировалось Poma][a; 27.05.2013 в 19:13.
Poma][a вне форума Ответить с цитированием
Старый 27.05.2013, 19:29   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от 'Poma
Код:
for i := 1 to 1000 do 
      Swap (a[Random(32)+1], a[Random(32)+1]
Ужас!
Зачем же такие извращения?
Код:
for i := 0 to 31 do
  swap(a[i], a[random(32)]);
И ничего лишнего.
s-andriano вне форума Ответить с цитированием
Старый 27.05.2013, 19:31   #4
art.marked
Пользователь
 
Аватар для art.marked
 
Регистрация: 01.03.2011
Сообщений: 53
По умолчанию

Цитата:
переменных vopros и num выполняют одну и ту же функцию?
Почти, vopros это случайный вопрос, а num отображает порядковый номер,.т.е. от 1 до 10 в программе.

В общем, сейчас то время, когда нет времени.
Поэтому, может есть выражения, которые делают рандом более рандомным?

Что-то я уже задумываюсь в сторону "все по порядку".
@belov on Twitter
art.marked вне форума Ответить с цитированием
Старый 27.05.2013, 19:33   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Зачем же такие извращения?
Почему же сразу извращения? По-моему очень даже ничего.
Всё красиво и даже интуитивно понятно..
Poma][a вне форума Ответить с цитированием
Старый 12.06.2013, 19:14   #6
Fainder
Участник клуба
 
Регистрация: 15.02.2007
Сообщений: 1,112
По умолчанию

Цитата:
Но дело в том, что иногда всё-таки проскакивают одинаковые вопросы. Как исправить
Если вопрос является повтором, то взять следующий/предыдущий по порядку вопрос
Fainder вне форума Ответить с цитированием
Старый 12.06.2013, 19:17   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Хоть бы кто вспомнил про RandomRange из модуля Math
Метод берет случайное число в пределах от X до N.
Человек_Борща вне форума Ответить с цитированием
Старый 12.06.2013, 20:32   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Хоть бы кто вспомнил про RandomRange из модуля Math
А чем это нам поможет?
Poma][a вне форума Ответить с цитированием
Старый 12.06.2013, 23:41   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
А чем это нам поможет?
Ну как минимум так:
Код:
for i:=0 to 9 do
begin
 Randomize; //Меняем RandBase
 n:=RandomRange(1,Length(QArray));
 QArray[n].TextVoprosa
end;
Человек_Борща вне форума Ответить с цитированием
Старый 13.06.2013, 08:09   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну как минимум 2 вопроса :
1) Не совсем ясно зачем на каждой итерации цикла инициализировать ГПСЧ? ИМХО это делается 1 раз за всю программу
2) См. картинку. ТС просил вывести без повторов.
Изображения
Тип файла: jpg forum#17.jpg (73.1 Кб, 176 просмотров)
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Вывод значений элемента массива в delphi Artem_host Общие вопросы Delphi 3 11.02.2012 21:29
Вывод двумерного массива на экран. (Delphi) Refon_S Помощь студентам 3 21.12.2011 23:30
Задача о напечатании повторно рандомных символов XanderXage Помощь студентам 2 12.10.2011 20:18
Прописание рандомных ссылок к картинкам. Averin PHP 1 03.10.2011 18:38