| 
| 
 | Вопрос # 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
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |