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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2017, 19:42   #1
Айгул'
 
Регистрация: 23.12.2012
Сообщений: 3
По умолчанию тестер в делфи

Всем Здравствуйте. У меня проблема в коде: после окончания теста программа выводит сообщение, где выводится неправильное сообщение об оценке и правильных ответах ('кол-во правильн отв - 0 Оценка - 0'), т.е. не подсчитывает. Помогите найти ошибку
Код:
var
  Form6: TForm6;
  kol,oc,i,n,werno,net:integer;
  v:textfile;

procedure TForm6.sButton1Click(Sender: TObject);
   var s:string;
    otw:string;

begin

 sRadioButton1.Checked:=False;
 sRadioButton2.Checked:=False;
 sRadioButton3.Checked:=False;
 sRadioButton4.Checked:=False;
 sButton1.Enabled:=False;
 DateTimePicker1.Date:=now;
 DateTimePicker1.Time:=now;

 begin
     if n<>0 then begin otw:=sMemo1.Lines.Strings[n-1];
 if (sRadioButton1.Checked)and(otw='À') then werno:=werno+1
 else
 if (sRadioButton2.Checked)and(otw='Â') then werno:=werno+1
 else
 if (sRadioButton3.Checked)and(otw='C') then werno:=werno+1
 else
 if (sRadioButton4.Checked)and(otw='D') then werno:=werno+1
 else net:=net+1;

end;

 sRichEdit1.Clear;
 repeat
   s:=sRichEdit2.Lines.Strings[i];
   i:=i+1;
   if pos('***************',s)<>1 then
    sRichEdit1.Lines.Add(s);
 until (pos('***************',s)=1)or
       (i>sRichEdit2.Lines.Count);
   n:=n+1;

 if (i>sRichEdit2.Lines.Count)
 then begin
    kol:= round(25*werno/25);
    if kol=25 then  oc:=100 else
    if kol=24 then  oc:=96 else
    if kol=23 then  oc:=92 else
    if kol=22 then  oc:=88 else
    if kol=21 then  oc:=84 else
    if kol=20 then  oc:=80 else
    if kol=19 then  oc:=76 else
    if kol=18 then  oc:=72 else
    if kol=17 then  oc:=68 else
    if kol=16 then  oc:=64 else
    if kol=15 then  oc:=60 else
    if kol=14 then  oc:=56 else
    if kol=13 then  oc:=52 else
    if kol=12 then  oc:=48 else
    if kol=11 then  oc:=44 else
    if kol=10 then  oc:=40 else
    if kol=9 then  oc:=36 else
    if kol=8 then  oc:=32 else
    if kol=7 then  oc:=28 else
    if kol=6 then  oc:=24 else
    if kol=5 then  oc:=20 else
    if kol=4 then  oc:=16 else
    if kol=3 then  oc:=12 else
    if kol=2 then  oc:=8 else
    if kol=1 then  oc:=4 else
    if kol=0 then  oc:=0;
    end;

     if (i>sRichEdit2.Lines.Count)
 then begin
 ShowMessage(Form5.sEdit1.Text+' '+Form5.sEdit2.Text+'. ' + Form5.sComboBox1.Text+'.'+#10#13+'Вы верно ответили на '+ floattostr(kol) +#10#13+'Ваша оценка = '+inttostr(oc));
      assignfile(v,ExtractFilePath(ParamStr(0))+'res.txt');
      append(v);
    //  writeln;
      writeln(v,'Äàòà: '+datetostr(DateTimePicker1.Date)+' '+'Дата: '+timetostr(DateTimePicker1.Time)+' '+Form5.sEdit1.Text+' '+Form5.sEdit2.Text+'. ' + Form5.sComboBox1.Text+' '+'Оценка - '+inttostr(oc));
      closefile(v);
      n:=0;
      Close;
    end;
end;
end;
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 21.05.2017 в 00:08.
Айгул' вне форума Ответить с цитированием
Старый 19.05.2017, 23:19   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Ну для начала всю вот эту писанину:

Код:
if kol=25 then oc:=100 else 

... и т.д.
замените на

Код:
oc := kol * 4;
Тот же самый итог получите.

Далее:

Код:
kol := round(25*werno/25);
округляй - не округляй, а при целочисленных операторах скорее всего получите тот же kol = werno.

И тут лишнее использовать floattostr(kol) когда у нас kol = integer:

Код:
'В ы верно ответили на '+ floattostr(kol) +#10#13+'Ваша оценка = '+inttostr(oc));
Не возбраняется, конечно, но бессмысленно

Ну и наконец по сути вопроса: в этом куске с радиобатонов сначала снимаются флаги, а потом состояние этих флагов проверяется. Поскольку у всех них Enabled = false - программа с завидным постоянством игнорирует ветки с Werno = Werno + 1 и считает Net.

Код:
sRadioButton1.Checked:=False;
sRadioButton2.Checked:=False;
sRadioButton3.Checked:=False;
sRadioButton4.Checked:=False;
sButton1.Enabled:=False;
DateTimePicker1.Date:=now;
DateTimePicker1.Time:=now;

begin
if n<>0 then begin otw:=sMemo1.Lines.Strings[n-1];
if (sRadioButton1.Checked)and(otw='&#1 92;') then werno:=werno+1
else
if (sRadioButton2.Checked)and(otw='&#1 94;') then werno:=werno+1
else
if (sRadioButton3.Checked)and(otw='C') then werno:=werno+1
else
if (sRadioButton4.Checked)and(otw='D') then werno:=werno+1
else net:=net+1;

end;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 19.05.2017 в 23:29.
Sciv вне форума Ответить с цитированием
Старый 20.05.2017, 12:14   #3
Айгул'
 
Регистрация: 23.12.2012
Сообщений: 3
По умолчанию

спасибо большое!
Айгул' вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестер Sunrav NSK_54 Помощь студентам 10 22.05.2016 18:53
Срочно..Тестер Kolya23 Помощь студентам 1 01.11.2015 23:34
Тестер anastassia Общие вопросы Delphi 2 16.07.2015 00:11
Программа тестер! Antik163RUS Общие вопросы Delphi 4 19.01.2014 16:16
Тестер на Javascript zevs116 JavaScript, Ajax 4 01.10.2010 20:58