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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.06.2010, 20:20
Аватар для nickname
nickname nickname вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 30
Репутация: 10
Плохо тестовая программа

помогите пожалуйста доделать код тестовой программы
Код:
unit Unit1;

interface

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

const
  kol_vop=10;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    RadioButton4: TRadioButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  verno:boolean;
  Questions:array [1..kol_vop] of string;
  right,wrong:integer;
  endl:byte;
  i:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
right:=0;
wrong:=0;
//Здесь сам заполняешь вопросы которые тебе нужны и соответственно напиши там варианты ответов А, B, C и D
Questions[1]:='Для чего нужен Делфи?';
Questions[2]:='Структура делфи -';
Questions[3]:='';
Questions[4]:='';
Questions[5]:='';
Questions[6]:='';
Questions[7]:='';
Questions[8]:='';
Questions[9]:='';
Questions[10]:='';
Memo1.Text:=Questions[1];
end;

procedure TForm1.Button1Click(Sender: TObject);
Var j:integer;
begin
If i=kol_vop+1 then
begin
showmessage('Тест окончен');
exit;
end;
//первый вопрос
If i=1 then
//здесь вписывай нужный тебе радиобаттон, который отвечает за правильный вариант вопроса
If RadioButton1.Checked=true then begin // как написать варианты ответов для радиобаттонов
//в этом случае, чтобы обновлялись со следующим вопросом ????? помогите дописать пожалуйста
inc(right);
inc(wrong);
end;
//второй вопрос
If i=2 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=3 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=4 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=5 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=6 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=7 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=8 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=9 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
If i=10 then
If RadioButton2.Checked=true then begin
inc(right);
inc(wrong);
end;
Edit1.Text:='Правильных ответов '+inttostr(right);
Edit2.Text:='Не правильных ответов '+inttostr(wrong);
inc(i);
If i=kol_vop+1 then
exit;
Memo1.Text:=Questions[i];

end;
end.
Ответить с цитированием
  #2  
Старый 18.06.2010, 22:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Маньяк!!!
Для тестовой программы тебе надо:
1. Memo - выводить вопрос
2. TRadioGroup - для вывода ответов и выпора пользователя.
3. Массив данных вида "Вопрос, Ответ1..ОтветN, Номер правильного ответа".
4. Цикл по вопросам с подсчетом кол-ва правильных ответов.

Пусть у нас всегда будет 4 варианта ответов, один из которых правильный (простейший вариант):
Код:
type
  TQuestion = record
    Text : String;
    Answers : Array [0..3] Of String;
    RightAnswer : Integer; // 0.. 3
  end;
  
const
  Q : Array [1..10] Of TQuestion =
       ((Text: 'Текст вопроса 1', Answers:('Ответ1','Ответ2','Ответ3','Ответ4'),0), // первый вопрос. и так всего 10 вопросов
        ...);
  
procedure TForm1.btStartClick(Sender : TObject);
begin
  AQuestion := 0;
  QRights := 0;
  btNextClick(Self);
end;

procedure TForm1.btNextClick(Sender : TObject);
var
  I : Integer;
begin
  // Если > 0 то забираем ответ.
  If AQuestion > 0 Then
    If RadioGroup1.ItemIndex = Q[AQuestion].RightAnswer Then Inc(QRights);

  // Если > 10, то тест заеончен - выводим результат
  Inc(AQuestion);
  If AQuestion > 10 Then
    Begin
      Memo1.Lines.Text := '';
      RasioGroup1.Items.Clear;
      ShowMessage('Тест окончен. Правильных ответов ' + IntToStr(QRights));
      Exit;
    End;

  // Выводим след. вопрос
  Memo1.Lines.Text := Q[AQuestion].Text;
  For I := 0 To 3 Do
    RadioGroup1.Items[i] := Q[AQuestion].Answers[i];
  RadioGroup1.ItemIndex := -1;
end;
Ответить с цитированием
  #3  
Старый 18.06.2010, 22:41
Аватар для nickname
nickname nickname вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 30
Репутация: 10
По умолчанию

да по размеру то же самое получается ! почти, что то я непойму вашего кода , новичёк в делфи не судите строго

Код:
type
  TQuestion = record   //что это означает?
    Text : String;
    Answers : Array [0..3] Of String;
    RightAnswer : Integer; // 0.. 3
  end;
  
const
  Q : Array [1..10] Of TQuestion =
       ((Text: 'Текст вопроса 1', Answers:('Ответ1','Ответ2','Ответ3','Ответ4'),0), // первый вопрос. и так всего 10 вопросов
        ...);
  
procedure TForm1.btStartClick(Sender : TObject);
begin
  AQuestion := 0;
  QRights := 0; // что это означает?
  btNextClick(Self); // это следующий вопрос??
end;

procedure TForm1.btNextClick(Sender : TObject);
var
  I : Integer;
begin
  // Если > 0 то забираем ответ.
  If AQuestion > 0 Then
    If RadioGroup1.ItemIndex = Q[AQuestion].RightAnswer Then Inc(QRights); // обяъсните здесь как

  // Если > 10, то тест заеончен - выводим результат
  Inc(AQuestion);
  If AQuestion > 10 Then
    Begin
      Memo1.Lines.Text := '';  //здесь как бы лог ведётся ??
      RasioGroup1.Items.Clear;
      ShowMessage('Тест окончен. Правильных ответов ' + IntToStr(QRights));
      Exit;
    End;

  // Выводим след. вопрос
  Memo1.Lines.Text := Q[AQuestion].Text;
  For I := 0 To 3 Do
    RadioGroup1.Items[i] := Q[AQuestion].Answers[i];
  RadioGroup1.ItemIndex := -1;
Ответить с цитированием
  #4  
Старый 18.06.2010, 23:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

TQuestion = record //что это означает?
Это опредедление пользовательской структуры данных.

QRights := 0; // что это означает?
Инициализация переменной. Здесь будет считаться кол-во правильных ответов

btNextClick(Self); // это следующий вопрос??
Ага, оно самое. Обработчик кнопки перехода к сл. вопросу.

If RadioGroup1.ItemIndex = Q[AQuestion].RightAnswer Then Inc(QRights); // обяъсните здесь как
Читаем про соотв. компонент. В св-ве ItemIndex "лежит" номер выбранной радиокнопки из всех в группе. Тупо сравниваем его с номером прав. ответа.

Memo1.Lines.Text := ''; //здесь как бы лог ведётся ??
Нет. Это просто поле, где выводится текст вопроса. В данном месте нам надо его очистить.

Да, еше надо поправить кусочек кода:
Код:
// Выводим след. вопрос
  Memo1.Lines.Text := Q[AQuestion].Text;
  RadioGroup1.Items.Clear;
  For I := 0 To 3 Do
    RadioGroup1.Items.Add(Q[AQuestion].Answers[i]);
  RadioGroup1.ItemIndex := -1;
Ответить с цитированием
  #5  
Старый 18.06.2010, 23:58
Аватар для nickname
nickname nickname вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 30
Репутация: 10
По умолчанию

хорошо, завтро посмотрю, спасибо
Ответить с цитированием
  #6  
Старый 19.06.2010, 02:12
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну ты нахал!!!
Одолжение мне делаешь?
Ответить с цитированием
  #7  
Старый 19.06.2010, 17:38
Аватар для nickname
nickname nickname вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 30
Репутация: 10
По умолчанию

почему нахал то?
а может лучше мой код доделать? просто он мне гораздо понятнее
Ответить с цитированием
  #8  
Старый 20.06.2010, 08:06
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

у меня есть готовая прога на Builder'е с базой данных на ADO, там два уровня, если набираешь определённое кол-во балов в первом уровне, то пускает на второй, если не набрал - то ламер ))) для какова-то студента писал, могу переписать на Delphi и поделицца

P.S. код элементарный, писался для студента-рас..дяя
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel
Ответить с цитированием
  #9  
Старый 20.06.2010, 11:41
Аватар для nickname
nickname nickname вне форума
Прохожий
 
Регистрация: 19.05.2010
Сообщения: 30
Репутация: 10
По умолчанию

Цитата:
Сообщение от Marvel
у меня есть готовая прога на Builder'е с базой данных на ADO, там два уровня, если набираешь определённое кол-во балов в первом уровне, то пускает на второй, если не набрал - то ламер ))) для какова-то студента писал, могу переписать на Delphi и поделицца

P.S. код элементарный, писался для студента-рас..дяя

было бы круто, но прога уже есть, осталось только доделать, зачем новую создавать то?
если ты хорошо разбираешся доделай мою пожалуйста, главное чтобы вопросы с ответами при нажатии "далее" обновлялись и в конце результат правильных ответов был и код простенький а не на больше 100 строк ну я про основной
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter