Задача на Delphi (Тестирование)

Рейтинг: 0Ответов: 1Опубликовано: 20.04.2011

В общем так, есть файл откуда берутся данные db.txt содержимым

1 Бла1 Бла2 Бла3
2 Бла6 Бла5 Бла4
3 Бла7 Бла8 Бла9
4 Бла12 Бла11 Бла10

И к каждому номеру есть своя картинка. Номер, понятно ID вопроса, а Бла* правильные ответы. Нажимаю на кнопку старт. Генерирую случайное число v:=Random(3)+1 от 1 до 4 Вывожу картинку соответственно номеру Img.Picture.LoadFromFile('img/img_'+v+'.jpg'); Так же рядом с картинкой есть 3 поля ввода текста, куда должны вводится правильные ответы. Итак, моя задача. Получить случайное число, открыть файл и найти там строку с этим числом, получить соответствующие ответы, потом сравнить их с введёнными значениями в поля ввода текста. По-возможности, уже использованное число, исключить из употребления. Т.е. если было сгенерировано число 3, и получен ответ, чтоб число 3 в след. раз игнорировалось, а выводилось то чего ещё не было. Вооот. Прошу помощи! Вот мой листинг:

v:=Random(3)+1; //Получаем случайное число
Img.Picture.LoadFromFile('img/img_'+v+'.jpg'); //Выводим соответствующую картинку
AssignFile(fdb,'db.txt'); reset(fdb); //Открываем файл для чтения
read(fdb,vid,otv1,otv2,otv3); //Назначаем переменные
{Здесь какой-то код, который ищет строку с номером V}

Ответы

▲ 1

К ответу Dex - прошу прощения за некомпетентность (конкретно с РСЛОС - см.вики - не разбирался), однако, псевдослучайные последовательности, вообще говоря, отнюдь НЕ ГАРАНТИРУЮТ НЕПОВТОРЯЕМОСТИ генерируемых значений.

как вариант решения проблемы повторения вопроса - для того чтобы избежать хранения в памяти всех вопросов одновременно как структур и т.п. и исключить появление повторов, создать массив (вектор) из n значений (n - число вопросов, значения - от 1 до n или от 0 до n-1, как удобнее), воспользоваться ЛЮБЫМ генератором псевдослучайных последовательностей (в том числе и "встроенным" в Делфи (вроде есть?)). Далее так (предполагается индексация 1-n):

  1. Вызвать генератор значений от 1 до n. Получим индекс m.
  2. Выбрать номер вопроса ИЗ ЯЧЕЙКИ С ИНДЕКСОМ m (пусть будет k).
  3. Поместить значение ИЗ ЯЧЕЙКИ С ИНДЕКСОМ n в ячейку с индексом m.
  4. Уменьшить n на 1.
  5. Отобразить k-тый вопрос.
  6. Если n > 0 то вернуться к шагу 1.