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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2015, 21:30   #1
AB96
Пользователь
 
Регистрация: 20.10.2015
Сообщений: 22
По умолчанию Программа неверно считает результат

Здравствуйте! В общем, нужно было составить тест на любую тему. Я всё сделал, но программа почему-то неверно выводит результат. Если ответил правильно на все вопросы, то программа пишет, что пользователь ответил правильно только на 4 вопроса из 10. Не подскажете, в чём ошибка? Заранее спасибо!

Вот код:

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Label1: TLabel;
    Image1: TImage;
    ScrollBox1: TScrollBox;
    RadioGroup1: TRadioGroup;
    RadioGroup2: TRadioGroup;
    RadioGroup3: TRadioGroup;
    RadioGroup4: TRadioGroup;
    RadioGroup5: TRadioGroup;
    RadioGroup6: TRadioGroup;
    RadioGroup7: TRadioGroup;
    RadioGroup8: TRadioGroup;
    RadioGroup9: TRadioGroup;
    RadioGroup10: TRadioGroup;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  ball: integer;
  type Answers=Array[1..10,0..2] of byte;
  const Otv: Answers=((0,1,0),(0,0,1),(1,0,0),(0,1,0),(0,1,0),(0,0,1),(0,0,1),(1,0,0),(1,0,0),(0,1,0)); // Значения ответов ("1" - правильный ответ, "0" - неправильный)
 
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 begin
    Ball:=Otv[1,RadioGroup1.ItemIndex]+Otv[2,RadioGroup1.ItemIndex]+
    Otv[3,RadioGroup1.ItemIndex]+Otv[4,RadioGroup1.ItemIndex]+
    Otv[5,RadioGroup1.ItemIndex]+Otv[6,RadioGroup1.ItemIndex]+
    +Otv[7,RadioGroup1.ItemIndex]+Otv[8,RadioGroup1.ItemIndex]+
    +Otv[9,RadioGroup1.ItemIndex]+Otv[10,RadioGroup1.ItemIndex];
 
    ShowMessage('Вы верно ответили на '+IntToStr(Ball)+' из 10 вопросов. ');
 
    if (Ball=10) or (Ball=9) then
      ShowMessage('У Вас отличные знания в области анатомии и физологии человека! ')
   else
    if (Ball=8) or (Ball=7) then
      ShowMessage('У Вас хорошие знания в области анатомии и физологии человека! ')
   else
    if (Ball=6) or (Ball=5) then
       ShowMessage('У Вас удовлетворительные знания в области анатомии и физологии человека! ')
   else
    if Ball<5 then
      ShowMessage('К сожалению, Вы не справились с тестом. Попробуйте ещё раз! ')
 end;
 
procedure TForm1.Button2Click(Sender: TObject);
 begin
    Form1.Close;
 end;
 
end.
Вот программа на Облако Mail.Ru: https://cloud.mail.ru/public/8tq4/oTkcCVxZQ
AB96 вне форума Ответить с цитированием
Старый 25.11.2015, 06:29   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Код:
    Ball:=Otv[1,RadioGroup1.ItemIndex]+Otv[2,RadioGroup1.ItemIndex]+
    Otv[3,RadioGroup1.ItemIndex]+Otv[4,RadioGroup1.ItemIndex]+
    Otv[5,RadioGroup1.ItemIndex]+Otv[6,RadioGroup1.ItemIndex]+
    +Otv[7,RadioGroup1.ItemIndex]+Otv[8,RadioGroup1.ItemIndex]+
    +Otv[9,RadioGroup1.ItemIndex]+Otv[10,RadioGroup1.ItemIndex];
В этом блоке кода, как несложно заметить, неверны "индексы" радиогрупп, из-за этого неверно считает. Должны быть такие же как числа в квадратных скобках, а не 1 везде.

П.С. Подход не очень хороший, замена даже просто опечатки может потребовать участия программиста для пересборки программы, не говоря уж про изменение количества/сотава вопросов. Лучше сделать запись и чтение файла со структурой вопросов и ответов, и динамически создавать радиогруппы. Могу дать примеров подобного, простенький тестер есть тут

Последний раз редактировалось phomm; 25.11.2015 в 06:38.
phomm вне форума Ответить с цитированием
Старый 25.11.2015, 17:58   #3
AB96
Пользователь
 
Регистрация: 20.10.2015
Сообщений: 22
По умолчанию

Большое спасибо!
AB96 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа работает неверно(язык си) ЕленаPRO Помощь студентам 3 11.12.2014 15:54
алгоритм правильный, а считает неверно jazzzeek Общие вопросы Delphi 11 18.03.2012 15:39
Программа для решения СЛАУ методом Гаусса неверно считает (Delphi) Lisёноk Помощь студентам 7 25.09.2011 12:50
Программа на цикле неверно выводит результаты nox7 Паскаль, Turbo Pascal, PascalABC.NET 4 26.09.2010 19:28
неверно считает? штохл Microsoft Office Excel 3 17.05.2010 22:24