|
Вопрос # 1 551/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Требуется помощь. Хотим использовать работу с файлами для создания теста для учащихся.
1.Как прочитать информацию с текстового файла, содержащего тест (вопрос, варианты ответов, правильный вариант)?
2.Как организовать их вывод в случайной последовательности?
 |
Вопрос задал: bzfar_77 (статус: Посетитель)
Вопрос отправлен: 3 мая 2008, 09:40
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Здравствуйте, bzfar_77!
В принципе, лучше всего определиться с форматом текстового файла, или вообще использовать БД. Ну а чтение из текстового файла можно организовать вплоть до Memo1.Lines.LoadFromFile.
Что же касается организации вывода в произвольной последовательности - лучше всего, когда весь тест загружен в некую структуру (например, массив из TRecord или класса "вопрос теста"), а выдавать случайные элементы массива - дело техники.
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 16 июня 2008, 07:50; участников в обсуждении: 3.
|
bzfar_77 (статус: Посетитель), 3 мая 2008, 14:04 [#1]:
С чтением файла я практически разобрался.
Как сделать случайный выбор вывода вопросов?
|
|
Трофимов А.Ю. - 821 (статус: Посетитель), 4 мая 2008, 11:05 [#2]:
Делал подобную программу. Пришёл к выводу, что лучше файл использовать Exel. На форме размещаещь StringGird и при начале работы грузишь в него данные. Далее работаешь с загруженной таблицей. У меня было 3 столбца: 1 - номера вопросов (не использовался, 2 - текст вопроса, 3 - ответ Да или Нет. При старте программа также определяет количество записей в загруженной таблице и исходя из этого генерирует номер вопроса случайным образом через Random(...). не забудь учесть при написании кода что может выскочить один и тот же вопрос два раза подряд (не очень удачный вариант для теста).
|
|
bzfar_77 (статус: Посетитель), 4 мая 2008, 12:00 [#3]:
Каким образом избежать выпадания одного и того же вопроса?
|
|
Трофимов А.Ю. - 821 (статус: Посетитель), 4 мая 2008, 15:18 [#4]:
Если достаточно, чтобы не совпадали ближайщие 2, то создавай глобальную переменную в своей программе, куда сохраняешь номер вопроса после того, как на него ответили, а во время генерации следующего, производим генерацию номера вопроса до тех пор, пока номер вопроса не перестанет совпадать с номером в глобальной переменной. ( необходима дополнительная проверка количества вопросов иначе если будет 1 то получится замкнутый цикл). По аналогии для определённого количества вопросов создаётся уже массив и соответственно проверка на то, чтобы количество вопросов не было меньше количества необходимых (размерность массива).
проверку можно сделать примерно так a- количество вопросов, b- предыдущий вопрос)
var
i: boolean;
Tv: (размерность a и b обычно достаточно byte);
begin
randomize;
repeat
Tv:=round(random(a));
until Tv<>b;
end;
|
|
bzfar_77 (статус: Посетитель), 16 июня 2008, 07:50 [#6]:
Скинье пожалуйста, мистер 3_JI_ .
bzfar@mail.ru
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|