Важная информация
Показано с 1 по 6 из 6

Тема: Помощь с программой тестом на Delphi. Не знаю как сделать чтобы был выбор ответа и определение верного/не верного ответа и итог

  1. #1 Помощь с программой тестом на Delphi. Не знаю как сделать чтобы был выбор ответа и определение верного/не верного ответа и итог 
    Новичок
    Регистрация
    12.12.2014
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Помогите кодом, пожалуйста... Очень нужна ваша помошь
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    У меня есть уже оформленная программа теста (показана в скрине). Но в ней не прописан код действий...
    Мне надо чтобы пользователь выбрал ответ и нажал на кнопку "Итог" и в поле TEdit появилось число верных ответов.
    То есть в программе есть верные и не верные ответы и как это прописать и то чтобы в конце было выведено число я не знаю - помогите!

    Дайте пример как должен делаться выбор ответа вообще и выбор правильного и итог (количество правильных ответов)
    Код со скрина
    Код :
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
      ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        Memo1: TMemo;
        Memo2: TMemo;
        Memo3: TMemo;
        Memo4: TMemo;
        Memo5: TMemo;
        Memo6: TMemo;
        Panel1: TPanel;
        RadioButton1: TRadioButton;
        RadioButton10: TRadioButton;
        RadioButton11: TRadioButton;
        RadioButton12: TRadioButton;
        RadioButton13: TRadioButton;
        RadioButton14: TRadioButton;
        RadioButton15: TRadioButton;
        RadioButton16: TRadioButton;
        RadioButton17: TRadioButton;
        RadioButton18: TRadioButton;
        RadioButton19: TRadioButton;
        RadioButton2: TRadioButton;
        RadioButton20: TRadioButton;
        RadioButton21: TRadioButton;
        RadioButton22: TRadioButton;
        RadioButton23: TRadioButton;
        RadioButton24: TRadioButton;
        RadioButton3: TRadioButton;
        RadioButton4: TRadioButton;
        RadioButton5: TRadioButton;
        RadioButton6: TRadioButton;
        RadioButton7: TRadioButton;
        RadioButton8: TRadioButton;
        RadioButton9: TRadioButton;
        RadioGroup1: TRadioGroup;
        RadioGroup2: TRadioGroup;
        RadioGroup3: TRadioGroup;
        RadioGroup4: TRadioGroup;
        RadioGroup5: TRadioGroup;
        RadioGroup6: TRadioGroup;
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    end.
    Ответить с цитированием  
     

  2. #2  
    Профи
    Регистрация
    09.11.2013
    Сообщений
    234
    Сказал(а) спасибо
    17
    Поблагодарили 76 раз(а) в 51 сообщениях
    Вместо того, что слева, вопросы пиши на лайбе радиоколонки. А вообще хрень это, контролы надо генерировать рандомно в рантайме, а еще лучше генерировать html
    Ответить с цитированием  
     

  3. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,846
    Сказал(а) спасибо
    1,815
    Поблагодарили 945 раз(а) в 807 сообщениях
    Записей в блоге
    1
    контролы надо генерировать рандомно в рантайме
    Очень хочется себе в подпись поставить, эпик фраза, честно.
    Даже себе представил такой диалог:

    A: Мне нужен ГУЙ
    B: Чувак генерируй контролы рандомно и в рантайме! Ваще изи!

    A: ...

    Это универсальнейший ответ по интерфейсам!


    То есть в программе есть верные и не верные ответы и как это прописать и то чтобы в конце было выведено число я не знаю - помогите!
    Добавляешь кнопку, дальше по идее два клика по ней и пишешь код.
    В делфе не силён, но думается эта штука появится после implementation и всего лишь надо будет узнать какая радио-кнопка
    включена, делается это через условие и свойство контрола.

    Что-то типа:

    Pascal Code:
    1. IF (RadioButton1.Checked = True) THEN BEGIN
    2.  
    3.      {    Тут пишем код, если выбран этот чекбокс, например добавить юзеру баллов   }
    4.       
    5. END;
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  4. #4  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    284
    Сказал(а) спасибо
    162
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    Pascal Code:
    1. unit Unit1;
    2.  
    3. {$mode objfpc}{$H+}
    4.  
    5. interface
    6.  
    7. uses
    8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
    9.   ExtCtrls, Grids;
    10.  
    11. type
    12.  
    13.   { TForm1 }
    14.  
    15.   TForm1 = class(TForm)
    16.     Button1: TButton;
    17.     Button2: TButton;
    18.     ComboBox1: TComboBox;
    19.     Memo1: TMemo;
    20.     RadioGroup1: TRadioGroup;
    21.     StaticText1: TStaticText;
    22.     StaticText2: TStaticText;
    23.     StaticText3: TStaticText;
    24.     StringGrid1: TStringGrid;
    25.     procedure Button1Click(Sender: TObject);
    26.     procedure Button2Click(Sender: TObject);
    27.     procedure ComboBox1Change(Sender: TObject);
    28.     procedure FormCreate(Sender: TObject);
    29.  
    30.   private
    31.     { private declarations }
    32.   public
    33.     { public declarations }
    34.   end;
    35.  
    36. var
    37.   Form1: TForm1;
    38.  
    39. implementation
    40.  
    41. {$R *.lfm}
    42.  
    43. { TForm1 }
    44.  
    45. type TVopros=record
    46.      sVopros:ansistring;
    47.      sOtvet1:ansistring;
    48.      sOtvet2:ansistring;
    49.      sOtvet3:ansistring;
    50.      sOtvet4:ansistring;
    51.      sOtvet5:ansistring;
    52.      iNomerPravOtveta:longint;
    53.      end;
    54. type TKolVopros=array[1..5]of TVopros;
    55. var  aVopros:TKolVopros;
    56. procedure ZapVopros;
    57. begin
    58.   with aVopros[1] do
    59.     begin
    60.       sVopros:='537+15=';
    61.       sOtvet1:='    1)=545';
    62.       sOtvet2:='    2)=555';
    63.       sOtvet3:='    3)=552';
    64.       sOtvet4:='    4)=543';
    65.       sOtvet5:='    5)=562';
    66.       iNomerPravOtveta:=3;
    67.     end;
    68.   with aVopros[2] do
    69.     begin
    70.       sVopros:='1735-219=';
    71.       sOtvet1:='    1)=1525';
    72.       sOtvet2:='    2)=1519';
    73.       sOtvet3:='    3)=1532';
    74.       sOtvet4:='    4)=1503';
    75.       sOtvet5:='    5)=1516';
    76.       iNomerPravOtveta:=5;
    77.     end;
    78.   with aVopros[3] do
    79.     begin
    80.       sVopros:='35*25=';
    81.       sOtvet1:='    1)=835';
    82.       sOtvet2:='    2)=875';
    83.       sOtvet3:='    3)=890';
    84.       sOtvet4:='    4)=865';
    85.       sOtvet5:='    5)=845';
    86.       iNomerPravOtveta:=2;
    87.     end;
    88.    with aVopros[4] do
    89.     begin
    90.       sVopros:='135/25=';
    91.       sOtvet1:='    1)=5,4';
    92.       sOtvet2:='    2)=5,5';
    93.       sOtvet3:='    3)=6,5';
    94.       sOtvet4:='    4)=5';
    95.       sOtvet5:='    5)=6';
    96.       iNomerPravOtveta:=1;
    97.     end;
    98.     with aVopros[5] do
    99.     begin
    100.       sVopros:='16^2=';
    101.       sOtvet1:='    1)=254';
    102.       sOtvet2:='    2)=246';
    103.       sOtvet3:='    3)=256';
    104.       sOtvet4:='    4)=266';
    105.       sOtvet5:='    5)=264';
    106.       iNomerPravOtveta:=3;
    107.     end;
    108. end;
    109. procedure TForm1.FormCreate(Sender: TObject);
    110. var i:longint;
    111. begin
    112.   //настройки параметров компанентов
    113.   Form1.Width:=670;
    114.   Form1.Height:=340;
    115.   StaticText1.Caption:='   Выберите № вопроса:';
    116.   StaticText1.Left:=8;
    117.   StaticText1.Top:=8;
    118.   StaticText1.Width:=310;
    119.   ComboBox1.Left:=8;
    120.   ComboBox1.Top:=32;
    121.   ComboBox1.Width:=310;
    122.   ComboBox1.ReadOnly:=true;
    123.   ComboBox1.Items.Clear;
    124.   ComboBox1.Items.Add('Вопрос №1');
    125.   ComboBox1.Items.Add('Вопрос №2');
    126.   ComboBox1.Items.Add('Вопрос №3');
    127.   ComboBox1.Items.Add('Вопрос №4');
    128.   ComboBox1.Items.Add('Вопрос №5');
    129.   memo1.Top:=56;
    130.   memo1.Left:=8;
    131.   memo1.Width:=310;
    132.   memo1.Height:=160;
    133.   memo1.ReadOnly:=true;
    134.   memo1.Clear;
    135.   RadioGroup1.Caption:='   Выберите номер ответа:';
    136.   RadioGroup1.Top:=224;
    137.   RadioGroup1.Left:=8;
    138.   RadioGroup1.Width:=310;
    139.   RadioGroup1.Height:=56;
    140.   RadioGroup1.Columns:=5;
    141.   RadioGroup1.Items.Clear;
    142.   RadioGroup1.Items.Add('-1');
    143.   RadioGroup1.Items.Add('-2');
    144.   RadioGroup1.Items.Add('-3');
    145.   RadioGroup1.Items.Add('-4');
    146.   RadioGroup1.Items.Add('-5');
    147.   RadioGroup1.ItemIndex:=0;
    148.   Button1.Caption:='Добавить ответ в таблицу';
    149.   Button1.Left:=8;
    150.   Button1.Top:=288;
    151.   Button1.Width:=310;
    152.   StaticText2.Caption:='  Таблица 1. Результаты опроса.';
    153.   StaticText2.Left:=336;
    154.   StaticText2.Top:=8;
    155.   StaticText2.Width:=310;
    156.   StringGrid1.Left:=336;
    157.   StringGrid1.Top:=32;
    158.   StringGrid1.Width:=310;
    159.   StringGrid1.Height:=184;
    160.   StringGrid1.ColCount:=3;
    161.   StringGrid1.RowCount:=6;
    162.   StringGrid1.Cells[0,0]:='№ вопроса';
    163.   StringGrid1.Cells[1,0]:='№ ответа';
    164.   StringGrid1.Cells[2,0]:='Результат';
    165.   for i:=1 to 5 do
    166.     StringGrid1.Cells[0,i]:=IntToStr(i);
    167.   StaticText3.Caption:='';
    168.   StaticText3.Left:=336;
    169.   StaticText3.Top:=232;
    170.   StaticText3.Height:=48;
    171.   StaticText3.Width:=310;
    172.   Button2.Caption:='Итоги опроса';
    173.   Button2.Left:=336;
    174.   Button2.Top:=288;
    175.   Button2.Width:=310;
    176.   //создаём массив вопросов и ответов
    177.   ZapVopros;
    178. end;
    179. //        выбор вопроса
    180. procedure TForm1.ComboBox1Change(Sender: TObject);
    181. var i:longint;
    182. begin
    183.   i:=ComboBox1.ItemIndex+1;
    184.   memo1.Clear;
    185.   memo1.Lines.Add(aVopros[i].sVopros);
    186.   memo1.Lines.Add(aVopros[i].sOtvet1);
    187.   memo1.Lines.Add(aVopros[i].sOtvet2);
    188.   memo1.Lines.Add(aVopros[i].sOtvet3);
    189.   memo1.Lines.Add(aVopros[i].sOtvet4);
    190.   memo1.Lines.Add(aVopros[i].sOtvet5);
    191. end;
    192. //        добавление ответа в таблицу
    193. procedure TForm1.Button1Click(Sender: TObject);
    194. begin
    195.   StringGrid1.Cells[1,ComboBox1.ItemIndex+1]:=IntToStr(RadioGroup1.ItemIndex+1);
    196. end;
    197. //        подведение итогов
    198. procedure TForm1.Button2Click(Sender: TObject);
    199. var i, nPO:longint;
    200. begin
    201.   nPO:=0;
    202.   for i:=1 to 5 do
    203.     begin
    204.       if strtoint(StringGrid1.Cells[1,i])=aVopros[i].iNomerPravOtveta then
    205.         begin
    206.           nPO:=nPO+1;
    207.           StringGrid1.Cells[2, i]:='  V';
    208.         end
    209.       else StringGrid1.Cells[2, i]:='  X';
    210.     end;
    211.     StaticText3.Caption:='  Количество верных ответов: '+IntToStr(nPO)+',  в процентах: '+Floattostr((nPO*100)/5) ;
    212. end;
    213. end.
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    >Quiet Snow< (10.12.2015)

  6. #5  
    Профи
    Регистрация
    09.11.2013
    Сообщений
    234
    Сказал(а) спасибо
    17
    Поблагодарили 76 раз(а) в 51 сообщениях
    Цитата Сообщение от nik_1 Посмотреть сообщение
    Pascal Code
    В принципе похоже на правду, но...
    1) Разберемся со структурой данных. Тест это коллекция вопросов, а сам вопрос - это запись с полями: строка вопроса, список строк ответов, номер правильного ответа, номер введенного ответа. Тест хранится в зашифрованном файле, поэтому нужны подпрограммы чтения теста из файла и записи его в файл при авторизованном редактировании, процедуры подсчета и вывода результатов. К тому же не помешает процедура перемешивания вопросов в тесте. С этим может справиться один класс. Его можно выделить в отдельный модуль.
    2) Не используем кучу ненужных контролов, а используем HTML. Если страшно, то можно обойтись, одним списком вопросов, текстовым полем для вопроса и радиоколонкой для ответов. Всего три контрола...
    3) Не используем условные переходы, а используем индексы, так как данные однотипны.
    Ответить с цитированием  
     

  7. Пользователь сказал cпасибо:

    nik_1 (12.12.2015)

  8. #6  
    Профи Аватар для nik_1
    Регистрация
    03.08.2014
    Сообщений
    284
    Сказал(а) спасибо
    162
    Поблагодарили 145 раз(а) в 109 сообщениях
    Записей в блоге
    1
    ur_naz - красиво излагаешь. ждем такой же красивый код. с возможностью сохранения за шифрованных данных на диске и тп. согласно представленному тобой списку.
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите с программой
    от minkin в разделе Assembler
    Ответов: 4
    Последнее сообщение: 22.05.2015, 20:49
  2. Ответов: 3
    Последнее сообщение: 21.06.2014, 16:29
  3. помогите с программой
    от Дмитрий Голощапов в разделе FreeBasic
    Ответов: 5
    Последнее сообщение: 11.06.2013, 22:22
  4. Ответов: 0
    Последнее сообщение: 08.08.2012, 21:39
  5. Помогите с программой пожалуйста
    от shemekeev в разделе Visual Basic
    Ответов: 3
    Последнее сообщение: 18.04.2012, 18:11
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •