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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2012, 17:39   #1
jakaz14
Новичок
Джуниор
 
Регистрация: 23.04.2012
Сообщений: 2
По умолчанию Проблема с тестом

Добрый день, господа!

Пишу программу тестирования по психологии на Delphi 7. Это моя первая программа, поэтому не все понятно... Все неплохо получалось до сих пор..

Есть 40 вопросов, вложенных в код, и есть 5 переменных (5 типов характера ).. На форме 2 кнопки(BitBtn1 и BitBtn2), Caption которых меняется с каждым вопросом..

По событию OnClick по одной из кнопок, в зависимости от номера вопроса, в одну из переменных добавляется единица.. в Конце выдается результат с типом Характера, который набрал больше балов..

Это все кое-как работает.. Собсна проблема..

Пример.

1 вопрос - варианты a и b
Выбираю вариант а... +1 к первой переменной (фокус остается на 1 кнопке)

2 вопрос - варианты a и b
Выбираю вариант b... почему-то все равно идет +1 к первой переменной

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

Подскажите как ее можно решить! Спасибо

Последний раз редактировалось jakaz14; 29.04.2012 в 17:42.
jakaz14 вне форума Ответить с цитированием
Старый 29.04.2012, 18:25   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

1. Как следует из Вашего пояснения, варианты ответов привязаны к кнопкам.
Нажатие на кнопку соответствует событию и вызывается соответствующая подпрограмм. Какое отношение это имеет к фокусу?

Короткое высказывание:
Выбор такой версии (нажатие кнопок), так думаю, не верен.
Основная причина такой моей оценки заключается в том, что вариантов ответа может быть много. Если предполагается выбрать только одно утверждение, то следует вспомнить про радиобутоны, если предполагается выбор нескольких утверждений, то надо подумать о чекбоксах.
Выбор ответа, при этом, фиксируется кнопкой, например, "Принять ответ"

2. Без приведения текста программы сложно дать однозначно ответ о причине ошибки.

Как то так, думаю, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 29.04.2012, 20:58   #3
jakaz14
Новичок
Джуниор
 
Регистрация: 23.04.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
1. Как следует из Вашего пояснения, варианты
2. Без приведения текста программы сложно дать однозначно ответ о причине ошибки.
Пробовал сделать с радиобатонами и кнопкой "принять ответ".. Та же фигня, - когда меняешь радиобатон, +1 идет в предыдущею переменную

В этом тесте возможных всего 2 ответа, и в зависимости от того какой вы выберете, инкрементируются 5 переменных..


вот пример простой программы.. r1, r2 - типы характера, q - номер пары вопросов,
label2.Caption:= '1 - '+IntToStr(r1)+'; 2 - '+ IntToStr(r2) - счетчик

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  r1,r2,q:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
r1:=0;
r2:=0;
q:=0;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
inc(q);
Bitbtn2.Visible:=true;
label2.Caption:= '1 - '+IntToStr(r1)+';  2 - '+ IntToStr(r2);
if q=1 then
   begin
   Bitbtn1.Caption := 'Інженер-технолог'; Bitbtn2.Caption := 'Конструктор';
   inc(r1);
   end;
if q=2 then
   begin
   Bitbtn1.Caption := 'Завуч з позакласної роботи'; Bitbtn2.Caption := 'Голова профспілкового комітету';
   inc(r1);
   end;
if q=3 then
   begin
   Bitbtn1.Caption := 'Дизайнер'; Bitbtn2.Caption := 'Кресляр';
   inc(r1);
   end;
if q=4 then
   begin
   Bitbtn1.Caption := 'Вчений-хімік'; Bitbtn2.Caption := 'Бухгалтер';
   inc(r1);
   end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
inc(q);
label2.Caption:= '1 - '+IntToStr(r1)+';  2 - '+ IntToStr(r2);
if q=1 then
   begin
   Bitbtn1.Caption := 'Інженер-технолог'; Bitbtn2.Caption := 'Конструктор';
   inc(r2);
   end;
if q=2 then
   begin
   Bitbtn1.Caption := 'Завуч з позакласної роботи'; Bitbtn2.Caption := 'Голова профспілкового комітету';
   inc(r2);
   end;
if q=3 then
   begin
   Bitbtn1.Caption := 'Дизайнер'; Bitbtn2.Caption := 'Кресляр';
   inc(r2);
   end;
if q=4 then
   begin
   Bitbtn1.Caption := 'Вчений-хімік'; Bitbtn2.Caption := 'Бухгалтер';
   inc(r2);
   end;
end;

end.

Почему счетчик неправильно считает, если прыгать с кнопки на кнопку??

Последний раз редактировалось jakaz14; 29.04.2012 в 21:36.
jakaz14 вне форума Ответить с цитированием
Старый 29.04.2012, 21:16   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от jakaz14 Посмотреть сообщение
Пробовал сделать с радиобатонами и кнопкой "принять ответ".. Та же фигня, - когда меняешь радиобатон, +1 идет в предыдущею переменную
Вы учитываете тот факт, что в программировании принято нумеровать что-либо не с 1, а с 0?

Т.е. вместо вариантов 1, 2, 3, 4 следует брать 0, 1, 2, 3.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ребят,проблема с тестом,по языку С!!! Афонин Visual C++ 1 18.05.2011 20:40
Проблемка с тестом Mage Помощь студентам 2 02.05.2011 07:19
проблема с тестом на VC++ 2008 Doppelganger Помощь студентам 1 25.01.2011 08:12
Помгите с тестом amki6 Microsoft Office Excel 6 16.03.2010 21:06
Помощь с тестом! stimswall Помощь студентам 16 21.05.2009 22:43