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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 14:01   #1
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию Тесты в Делфи

Вот програма и код програмі как тут зделать чтоб тест начинался с легкого ответа а потом если отвечаеш то тежолій если нет то опять легкий. Буду благодарен или заплачу. 402922056 ася моя плз


Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    AnswerGroup: TRadioGroup;
    Button1: TButton;
    TestBox: TComboBox;
    GroupBox1: TGroupBox;
    Question: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure LoadTest(Index: integer);
    procedure LoadQuestion(Index: integer);
    procedure Button1Click(Sender: TObject);
    procedure TestBoxCloseUp(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  TestName='Test_'; // имя файла теста
  max=1000; // максимальное количесво вопросов
var
  Form1: TForm1;
  QuestionText: array [0..max] of string; // текст вопроса
  AnswerQuestion: array [0..max] of byte; // правильный вариант ответа
  QuestionText1: array [0..max] of string;// первый вопрос
  QuestionText2: array [0..max] of string;// второй вопрос
  QuestionText3: array [0..max] of string;// третий вопрос
  Ball: integer=0;                        // оценка
  now: integer=0;                         // текущий вопрос
implementation

{$R *.dfm}

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

procedure TForm1.FormCreate(Sender: TObject);
var
  s: Tstrings;
  i: Integer;
begin
  i:=0;
  while FileExists(ExtractFilePath(application.ExeName)+TestName+inttostr(i)+'.txt') do  // проверяем файлы тестов
  begin
  application.ProcessMessages;
  s:=tstringlist.Create;        // создаем переменную
  s.LoadFromFile(ExtractFilePath(application.ExeName)+TestName+inttostr(i)+'.txt'); // загружаем файл
    if s.Text<>'' then  // если не пуст то
    TestBox.Items.Add(s.Strings[0]); // добавляем в группу тестов название теста
  s.Free;  // уничтожаем переменную
  inc(i);  // увеличиваем счетчик
  end;
end;

procedure TForm1.LoadTest(Index: integer);   // загружаем выбранный тест
var
  s: Tstrings;
  j, h: Integer;
begin
  h:=0;
  s:=tstringlist.Create;  // создаем переменную
  s.LoadFromFile(ExtractFilePath(application.ExeName)+TestName+inttostr(Index)+'.txt'); // загружаем
    if s.Text<>'' then  // если не пустая то
    begin
    form1.Caption:=s.Strings[0]; // название теста
      for j := 1 to s.Count - 1 do // начинаем присваивать значения
      begin
        if s.Strings[j]='__________' then  // это разделитель который мы ищем
        begin
        QuestionText[h]:=s.Strings[j+1]; // текст вопроса
        QuestionText1[h]:=s.Strings[j+2];// текст первого вариант ответа
        QuestionText2[h]:=s.Strings[j+3];// текст второго варианта ответа
        QuestionText3[h]:=s.Strings[j+4];// текст третьего варианта ответа
        AnswerQuestion[h]:=strtoint(s.Strings[j+5]); // номер ответа
        inc(h); // увеличиваем счетчик для того что бы записывать в новый элемент массива
        end;
      end;
    end;
  s.Free; // уничтожаем переменную
  LoadQuestion(now);// загружаем вопрос здесь он всегда = 0
end;

procedure TForm1.TestBoxCloseUp(Sender: TObject);
begin
  // при выборе теста обнуляем все значения
  ball:=0;
  now:=0;
  button1.Enabled:=true;
  LoadTest(TestBox.ItemIndex);// загружаем выбранный тест
end;

procedure TForm1.LoadQuestion(Index: integer);
begin
  if QuestionText[Index]<>'' then// если выбранный вопрос существует то грузим его
  begin
  AnswerGroup.Items.Clear;// очищаем поле ответов
  Question.Caption:=QuestionText[Index];// задаем запрос
  AnswerGroup.Items.Add(QuestionText1[index]);// добавляем ответы
  AnswerGroup.Items.Add(QuestionText2[index]);
  AnswerGroup.Items.Add(QuestionText3[index]);
  end
  else // иначе сообщаем что тест завершен
  begin
  showmessage('Тест завершен'+#13+'Правильных ответов: '+inttostr(ball)); // сообщение что типа тест окончен и выдаем количесво правильных ответов
  button1.Enabled:=false; // делаем неактивной кнопку что бы не тыкали
  end;
end;

end.

Последний раз редактировалось Stilet; 26.05.2009 в 14:31.
Sergey30q вне форума Ответить с цитированием
Старый 26.05.2009, 14:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
если нет то опять легкий
А где тут критерий сложности описан?
Как вообще ты понимаешь какой вопрос на сколько сложен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 15:26   #3
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию

Тут неописан критерий сложности тут написана програма на тестирование мне нада чтоб в этой програме определялся критерий сложности например за легкий ответ 2 бала за сложный 3 када отвечаеш на легкий вопрос то сразу задаеться тежолый неотвечаеш на тежолый потом легкий и так пошла цепочка. Я и прошу кто знает как изменить в коде чтоб ишла цепочка легкий сложный

вот програма
Вложения
Тип файла: rar temp(2).rar (188.4 Кб, 53 просмотров)

Последний раз редактировалось Stilet; 26.05.2009 в 15:32.
Sergey30q вне форума Ответить с цитированием
Старый 26.05.2009, 15:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтоб в этой програме определялся критерий сложности
Так не получится. Критерии такие пишет человек, прилагая их к вопросам. Для этого вопроси и их ТТХ заносятся в базы данных по хорошему, а тут самое простейщее, и чтоб что-то поменять нужно знать точное задание и условия работы, что за тесты, где хранятся, в каком виде... Как обрабатывать...

P.S. Извини не удержался, но поправил бы ты свой русский...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 15:42   #5
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию

тесты храняться Test_0 оттуда беруться вопросы я выложил прогу.
Sergey30q вне форума Ответить с цитированием
Старый 26.05.2009, 15:53   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Учитывая что подробностей из тебя не вытащить думаю тебе нужн следующее: При неправильном ответе вернуться на предидущий тест, который считается легче.
Если да то так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if AnswerQuestion[now]=AnswerGroup.ItemIndex+1 then begin  // сравниваем значение ответа и выбранного значения
   inc(ball);
   AnswerGroup.ItemIndex:=-1;  // убираем выдаление с группы ответов
   inc(now);                   // увеличиваем вопрос на 1+
  end else begin
   if now<>0 then begin // Иначе возвращаемся на предидущий
    dec(now); dec(ball);
   end;
  end;
  LoadQuestion(now);          // загружаем его
end;
P.S. только тогда такие тесты можно будет тупо перебором победить...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 23:07   #7
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию

спс за помощь но немного нето
Так легкий 1 бал ответил на него сразу задаеться тяжелой 2 бала а если на легкий неотвечаеш то опять легкий пока неоветиш на легкий не будит задаваться тежолый срочно нада плз
Sergey30q вне форума Ответить с цитированием
Старый 26.05.2009, 23:31   #8
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию

если непонятно то так обьясню текстовый документе 10 вопросов
1 вопрос ответил получил бал 1 потом следущий 2 ответил 2 неответил 1
типа такого принцепа. Или можна в отдном текстовом документе создать вопросы легкий и тежолый. Если ответил правильно то переходит к тежолому если не ответил то к легкому. Хто может подсказать как это зделать.
Sergey30q вне форума Ответить с цитированием
Старый 26.05.2009, 23:33   #9
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию

мне нада чтоб в тесте присутствувалась адаптация
Sergey30q вне форума Ответить с цитированием
Старый 26.05.2009, 23:34   #10
Sergey30q
Пользователь
 
Регистрация: 20.05.2009
Сообщений: 12
По умолчанию

мож написать асю свою
Sergey30q вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тесты в delphi Solana Общие вопросы Delphi 4 07.10.2010 21:35
тесты Majority Помощь студентам 1 11.11.2008 23:49
тесты по психологии. Olga5 БД в Delphi 6 02.06.2008 11:44