Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.06.2013, 18:44
RibSlicer RibSlicer вне форума
Прохожий
 
Регистрация: 28.12.2011
Сообщения: 4
Репутация: 10
По умолчанию Рандомный вывод

Есть программа теста где вопросы берутся из бд Access. Но они идут по порядку, а как сделать что бы рандомно и без повторений?
Код:
procedure TForm4.Button1Click(Sender: TObject);
var a: Integer;
  s: string;
  v: string;
begin
  a:= -1;
  if(RadioButton1.Checked) then a:= 1
  else if(RadioButton2.Checked) then a:= 2
  else if(RadioButton3.Checked) then a:= 3;
  if(a < 0) then ShowMessage('Необходимо дать ответ!')
  else begin
    Inc(QCount);
    if((answers[a] = TrueAnswer[1]) or (answers[a] = TrueAnswer2[1])) then
      inc(TrueCount);
    ADOTable1.Next;
    if(ADOTable1.EOF) then begin
      s:= 'Тест завершен. Всего вопросов: '+InttoStr(QCount)+'. Правильных ответов: '+InttoStr(TrueCount)+', неправильных: '+IntToStr(QCount-TrueCount);
      ShowMessage(s);
      Button1.Enabled:= False;
      Edit1.Text:= '';
      Edit2.Text:= '';
      Edit3.Text:= '';
      Edit4.Text:= '';
      RadioButton1.Checked:= false;
      RadioButton2.Checked:= false;
      RadioButton3.Checked:= false;
v:= 'Всего вопросов: '+InttoStr(QCount)+'. Правильных ответов: '+InttoStr(TrueCount)+', неправильных: '+IntToStr(QCount-TrueCount);
With ADOTAble1 do
  begin
    Close;
    TableName:='result';    
    Open;
    Insert;
    FieldByName('ФИО').AsString:=NameStudent;
    FieldByName('Группа').AsString:=Group;
    FieldByName('Глава').AsString:=Nomer;
    FieldByName('Результат').AsString:=V;
    post;
  end;
      end
    else Quest;
    end;
end;
 
procedure TForm4.Button2Click(Sender: TObject);
begin
 
if (NameStudentEdit.Text='')or(GroupEdit.Text='')or(ComboBox1.Text='') then
begin
ShowMessage('Все поля должны быть заполнены!');
exit;
end;
  if(ComboBox1.ItemIndex <> -1) then begin
    QCount:= 0;
    with ADOTable1 do begin
      Active:= false;
      TableName:= 'Глава '+ComboBox1.Text;
      Active:= True;
      First;
      TrueCount:= 0;
      end;
    Quest;
    Button1.Enabled:= True;
    NameStudent:=NameStudentEdit.Text;
    Group:=GroupEdit.Text;
    Nomer:=ComboBox1.Text;
    end;
end;
 
procedure TForm4.FormActivate(Sender: TObject);
begin
NameStudentEdit.SetFocus;
end;
 
procedure TForm4.Quest;
begin
    with ADOTable1 do begin
      Edit1.Text:= FieldByName('Вопрос').AsString;
      Edit2.Text:= FieldByName('Ответ А').AsString;
      Edit3.Text:= FieldByName('Ответ Б').AsString;
      Edit4.Text:= FieldByName('Ответ С').AsString;
      TrueAnswer:= FieldByName('Правильный ответ').AsString;
      RadioButton1.Checked:= false;
      RadioButton2.Checked:= false;
      RadioButton3.Checked:= false;
      end;
end;
Ответить с цитированием
  #2  
Старый 18.06.2013, 19:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Заполняете TList номерами записей. Рандомно получаете индекс элемента из списка. Выводите вопрос по полученному номеру записи и удаляете из списка отработаный индекс.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025