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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2013, 21:57   #1
marusua
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 32
По умолчанию Тесты в Delphi

Здравствуйте!!! Ситуация следующая: у меня есть в программе тестирование; тесты гружу из *.txt. Возможно ли вернуть предыдущий вопрос! Знаю, что, если создавать тесты через БД, то можно, но без понятия про данный случай!
Вот мой код на кнопку "Далее":

if AnswerQuestion[now]=AnswerGroup.ItemIndex+1 then // сравниваем значение ответа и выбранного значения
inc(ball);
AnswerGroup.ItemIndex:=-1; // убираем выделение с группы ответов
inc(now); // увеличиваем вопрос на 1+
LoadQuestion(now);

И еще, как можно осуществить такую задачу: можно смотреть справку на каждый вопрос, т.е. ответила на один, нажала "Далее", открылся новый, не знаю ответ, посмотрела справку по этому вопросу, как в ПДД и т.д.?
Заранее спасибо!!!
marusua вне форума Ответить с цитированием
Старый 02.05.2013, 22:13   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от marusua Посмотреть сообщение
Возможно ли вернуть предыдущий вопрос!
Можно.
Уберите эти две строки:
Код:
  inc(now);                   // увеличиваем вопрос на 1+
  LoadQuestion(now);
Цитата:
И еще, как можно осуществить такую задачу: можно смотреть справку на каждый вопрос, т.е. ответила на один, нажала "Далее", открылся новый, не знаю ответ, посмотрела справку по этому вопросу, как в ПДД и т.д.?
Заранее спасибо!!![/QUOTE]Проще всего - открыть в новом окне. Когда пользователь ознакомится со справкой, пусть закрывает это окно.
s-andriano вне форума Ответить с цитированием
Старый 02.05.2013, 22:29   #3
marusua
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 32
По умолчанию

[QUOTE=s-andriano;1222519]Можно.
Уберите эти две строки:
Код:
  inc(now);                   // увеличиваем вопрос на 1+
  LoadQuestion(now);
убрала .. результаты - просто ощищает Radiobutton, но не возвращает назад
marusua вне форума Ответить с цитированием
Старый 02.05.2013, 22:49   #4
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Кажись первокурсница? Да? Весна, все первокурсники как люди пишут простой тест, а я как придурок клиент-серверное(-мастер_серверное) приложение для дистанционного обучения.
1. Грузим первую строку в AllCount:integer, а остальной текст в S:TStringList.
Допустим вопрос идет первой строкой, 4 варианта ответа, и правильный ответ следом, т.е. структура:
Код:
Общее_количество_вопросов
Вопрос1
Ответ1-1
Ответ1-2
Ответ1-3
Ответ1-4
Правильный_ответ1
Вопрос2
Ответ2-1
...
2. Держим переменную номера вопроса в N (или как я понял в Now).
3. Показываем вопрос под номером N:
Код:
LabelVopros.Caption:=S.Strings[N*6+1];
RadioButton0.Caption:=S.Strings[N*6+2];
RadioButton1.Caption:=S.Strings[N*6+3];
RadioButton2.Caption:=S.Strings[N*6+4];
RadioButton3.Caption:=S.Strings[N*6+5];
4. Увеличиваем/уменьшаем номер вопроса по кнопкам Ответить|Следующий_вопрос/Предыдущий_вопрос, т.е. в их обработчики пишем:
Код:
procedure B_GetAnswerClick;
begin
Answers[N]:=RadioButtonGroup.ItemIndex;
inc(N);
Пункт 5.
Пункт 3.
RadioButtonGroup.ItemIndex:=Answers[N];
end;

procedure B_NextClick;
begin
inc(N);
Пункт 5.
Пункт 3.
RadioButtonGroup.ItemIndex:=Answers[N];
end;

procedure B_PreviousClick;
begin
dec(N);
if N<0 then N:=0;
Пункт 3.
RadioButtonGroup.ItemIndex:=Answers[N];
end;
5. Если вопросы заканчиваются, то сверяем ответы и выводим результаты:
Код:
var TAns:integer;
...
if N=AllCount then
  for i:=0 to (AllCount div 6) do
    if Answers[i]=strtoint(S.Strings[i*6+5]) then
      inc(TAns);
ShowMessage('Всего вопросов: '+inttostr(AllCount)+#13+'Дано правильных ответов: '+inttostr(TAns));
Готовый шаблон для написания программы для тестирований готов. Так же можно и НУЖНО шифровать файл с тестами и расшифровывать его "налету".
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 03.05.2013 в 00:35.
alextrof94 вне форума Ответить с цитированием
Старый 02.05.2013, 23:01   #5
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

А так же я понял вашу проблему...
Inc - аналогичен ++, а Dec - аналогичен --;
Т.е. чтобы прибавить надо inc(now), чтобы убавить dec(now), а затем уже loadquestion(now);
т.е. вместо
Код:
  inc(now);                   // увеличиваем вопрос на 1
  LoadQuestion(now);
надо
Код:
  dec(now);                   // убавляем вопрос на 1
  LoadQuestion(now);
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 02.05.2013, 23:35   #6
marusua
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 32
По умолчанию

Цитата:
Сообщение от alextrof94 Посмотреть сообщение
Кажись первокурсница? Да? Весна, все первокурсники как люди пишут простой тест, а я как придурок клиент-серверное(-мастер_серверное) приложение для дистанционного обучения.
спасибо за помощь!!! я знаю как писать тест, но обычно пишу через БД!!!
и да, не первокурсница ... 4 курс ... но ты же не знаешь для чего это нужно, можешь не ухмыляться!!!
marusua вне форума Ответить с цитированием
Старый 02.05.2013, 23:40   #7
marusua
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 32
По умолчанию

Цитата:
Сообщение от alextrof94 Посмотреть сообщение
А так же я понял вашу проблему...
Inc - аналогичен ++, а Dec - аналогичен --;
Т.е. чтобы прибавить надо inc(now), чтобы убавить dec(now), а затем уже loadquestion(now);
т.е. вместо
Код:
  inc(now);                   // увеличиваем вопрос на 1
  LoadQuestion(now);
надо
Код:
  dec(now);                   // убавляем вопрос на 1
  LoadQuestion(now);
да, он вернет, потом еще раз нажмешь вернет и т.д., а по итоге ошибка!!!
marusua вне форума Ответить с цитированием
Старый 03.05.2013, 00:09   #8
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Цитата:
Сообщение от marusua Посмотреть сообщение
да, он вернет, потом еще раз нажмешь вернет и т.д., а по итоге ошибка!!!
я смотрю плохо вы программировать учились. Хотя я даже с бд не работал никогда, слишком глуп, а вы хоть и говорите, что умнее меня, а написать всего 1 строку неспособны.
Код:
if now<0 then now:=0; //или вместо нулей поставить единицы, если у вас все сделано как у "умных" людей и индексация начинается с 1.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 03.05.2013, 00:18   #9
marusua
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 32
По умолчанию

Цитата:
Сообщение от alextrof94 Посмотреть сообщение
я смотрю плохо вы программировать учились. Хотя я даже с бд не работал никогда, слишком глуп, а вы хоть и говорите, что умнее меня, а написать всего 1 строку неспособны.
Код:
if now<0 then now:=0; //или вместо нулей поставить единицы, если у вас все сделано как у "умных" людей и индексация начинается с 1.
напишите мне, пожалуйста, фразу, где я написала, что вы глупее меня ... и намека даже не было!! если я была бы умнее вас, то не просила бы помощи!! да, я правда создавала тесты через БД!!
и кстати, не стоит оскорблять, я в вашем мнении - по поводу умная я или нет - не нуждаюсь!!
вы могли и не помогать!!!
marusua вне форума Ответить с цитированием
Старый 03.05.2013, 00:23   #10
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Нет тупой я вас не обзывал. Просто индексация должна начинаться с 0, но некоторые начинают с 1, что неверно, а точнее вызывает проблемы, когда начинаешь с этими массивами работать. И я реально не умею работать с БД, что умеете вы.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тесты по С++ Sergey240892 Помощь студентам 4 08.06.2011 10:00
Тесты в delphi Solana Общие вопросы Delphi 4 07.10.2010 21:35
тесты odler Помощь студентам 0 13.05.2010 17:44
тесты Majority Помощь студентам 1 11.11.2008 23:49