![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Добрый вечер, товарищи программисты.
Пишу программулину, включающую в себя небольшое тестирование. Тесты находятся в бд. Заступорился на защите от запоминания - рандомная загрузка вопросов и , соответственно, вопросов к ним. Код:
for i:=1 to 4 do begin radiobutton1.caption:=table1.fields[random(i)].asstring; radiobutton2.caption:=table1.fields[random(i)].asstring; radiobutton3.caption:=table1.fields[random(i)].asstring; radiobutton4.caption:=table1.fields[random(i)].asstring; end; Видимо то ли цикл работает не правильно, то ли ему здесь вообще не место, т.к. часто вижу значения нулевого поля (fields[0]), которым здесь не место. Как это исправить? Вопрос: Как написать защиту от повторений? Т.к. сейчас постоянно встречаются несколько значений одного поля. Заранее благодарен, с ув. Лунтик-Некрофил. Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#2
|
|||
|
|||
![]() 1. random(i)+1 спасет от вывода поля с индексом 0.
2. Да ты вообще непонятно что делаешь ![]() Или я чего-то не понимаю и тебе надо вывести ВСЕ вопросы, но к ним ОТВЕТЫ в случайном порядке? |
#3
|
||||
|
||||
![]() 1. Не помогло особо, просто немного переделал саму бд.
2. Видимо я чего-то не понимаю... Бд написанна примитивная. Код:
Правильный|Неправильный1|Неправильный2|Неправильный3|Вопрос По идее надо просто написать запоминалку( отдельно для вопросов и отдельно для ответов) , куда заносить каждый уже загруженный элемент, и при загрузке проверять - если он уже есть в ней, то его не загружаем... Но вопрос как её создать) Если сможешь хоть образно описать (желательнее написать ![]() Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#4
|
||||
|
||||
![]() Ни у кого нет никаких предложений/догадок?=(
Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#5
|
|||
|
|||
![]() Сколь я понял, надо чтоб при старте вопросника случайным образом выбирался вопрос, а ответы к нему в случайном порядке "вешались" на radiobutton'ы (навроде шоб не запоминали "координаты" ответа) и далее в том же духе;
Вот к примеру такое решение: Выгрузить список вопросов в, скажем, TStringList Рандомным образом отсортировать и задавать их по порядку; или Рандомно выбираем вопрос и после ответа удаляем его из списка; Определяем радиобуттоны: Выгружаем в TStringList ответы, рандомно сортируем и по порядку назначаем радиобуттонаМ. |
#6
|
|||
|
|||
![]() Вот тесты где все делается так как тебе нужно (даже больше, только без бд) вот описание:
1) в начале теста вводим имя\фамилию и под конец теста сохраняем файл под названием *имя* *фамилия*.test 2) Выбор формы прохождения теста (учение или контроль; При форме учение при нажатии на ответ пишется сразу правильный этот ответ или нет, при контроле выбираем ответ и отвечаем.) 3) Средний и сложный уровень теста (средний 12 вопросов, 5 минут на прохождение, максимум 10 баллов; Сложный 18 вопросов, 8 минут на прохождение, максимум 12 баллов.) 4) Выведение вопросов и вариантов ответов в случайном порядке(вопросы и ответы вбиваются в memo, может быть вписано абсолютно любое число вопросов, из них будет выбираться случайным образом количество вопросов зависимое от уровня теста) 5) Время на прохождение (при окончании времени выводит результаты теста сколько успели..) 6) При завершении теста выводит оценку и список вопросов на который были данные неверные ответы для контроля. 7) Опять же повторюсь сохраняет файл под именем *имя* *фамилия*.test с зашифрированой информацией в папку с екзешником. В файл сохраняется Имя и Фамилии тестера. оценка. Сложность. 8) В начале теста можно открыть и просмотреть результаты тестов из файлов *.test (идет дешифрация). 9) Автосайзинг (без разницы какое разрешение монитора хоть 800*600, хоть 2048 на 1536, все елементы теста будут стоять на своих местах пропорционально.); Если хочешь могу продать за умеренную цену.. стучи в аську: 485766405 Последний раз редактировалось malekskv, 16.01.2010 в 14:14. |
#7
|
||||
|
||||
![]() Serga
Слишком много получится... Тем более, что у меня бд... Как вариант можно перемешивать при каждом запуске проги в бд значения... Но к сожалению я хз как это сделать=( malekskv Во первых, тестирование сделанно почти полностью, проблема только в запоминании. Во вторых, твоя прога выдает ошибку по прохождению теста. Я прошу дать для начала мне хотя бы смутное представление, а вопросы будут потом... Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#8
|
|||
|
|||
![]() Представление.. делай массив, заполняй его от 1 до *количества вопросов*. Потом перемешивай елементы масивва. Получится массив с рандомными не повторяющимися числами. И потом уже думай как делать дальше.
|
#9
|
||||
|
||||
![]() Гггг. Не повериш, я уже 2й день пытаюсь узнать как же мне их перемешать , чтоб получился "массив с рандомными не повторяющимися числами", никто ничего толкового не посоветовал)
Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#10
|
||||
|
||||
![]() Вот ведь. Ну вот вам рабочий пример:
Код:
program Project37; {$APPTYPE CONSOLE} Const ArrSize = 20; Var A: Array of Integer; i,Val: Integer; NewSearch: Boolean; begin Randomize; SetLength(A, 0); while Length(A) < ArrSize do begin Val := Random(ArrSize); NewSearch := False; for i := 0 to High(A) do if A[i] = Val then begin NewSearch := True; Break; end; if NewSearch then Continue; SetLength(A,Length(A)+1); A[High(A)] := Val; end; for i := 0 to High(A) do WriteLn(A[i]); ReadLn; end. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
![]() http://www.delphisources.ru/forum/sh...ad.php?t=10634 посмотри там.. я написал.
Страдалецъ: Чем ваш код лучше или хуже чем мой? (в теме по ссылке). Просто интерестно. |
#12
|
||||
|
||||
![]() malekskv, что за что вообще отвечает ? зачем нужен этот круговорот
Код:
Shuffle:=a[R1]; a[R1]:=a[R2]; a[R2]:=Shuffle; Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#13
|
|||
|
|||
![]() Цитата:
[code] Uses ..., Math; ... var a:array[1..5] of integer; //Создаем массив целых чисел Shuffle,N,M:Integer; // переменные которые нам понадобятся поже begin Randomize; //запускаем функцию рандомиз for i:=1 to 5 do begin // цикл повторяется 5 рас a[i]:=i; //присваиваем первому єлементу массива номер цикла. end; for i:=1 to 5 do begin //цикл повторяется 5 рас N:=RandomRange(1,6); // Числу n присваиваем случайное значение из диапазона 1-5 M:=RandomRange(1,6); // Числу m присваиваем случайное значение из диапазона 1-5 Shuffle:=a[n]; // Присваиваем переменной Shuffle Значение N элемента массива а. a[n]:=a[m]; // Присваиваем N єлементу массива а значение M элемента массива а. a[m]:=Shuffle; // Присваиваем M єлементу массива а значение переменной Shuffle. end; //С помощью єтих 2 циклов ми создали массив a[1,2,3,4,5] и случайный образом потом перемешали его элементы. end; [code] нужно было сразу такой код давать... ) |
#14
|
||||
|
||||
![]() Страдалец, большое спасибо, разобрался.
malekskv, Код:
нужно было сразу такой код давать... ) Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#15
|
||||
|
||||
![]() Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |