|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
26.02.2013, 00:26 | #1 (permalink) |
Новичок
Регистрация: 26.02.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите исправить ошибку в коде
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, CheckLst, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Memo1: TMemo; L2: TCheckListBox; S1: TSpeedButton; S3: TSpeedButton; Label1: TLabel; OD1: TOpenDialog; S2: TSpeedButton; Label2: TLabel; Label3: TLabel; Button1: TButton; procedure FormCreate(Sender: TObject); procedure S1Click(Sender: TObject); procedure S2Click(Sender: TObject); procedure S3Click(Sender: TObject); procedure L2ClickCheck(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } procedure question_select; //выбор вопроса procedure Vopros(_vop:word); public { Public declarations } end; var Form1: TForm1; T:TStringList; Vop_c,Otv_c,vv:word; vb:word;// выбранный ответ Ocenka:integer; Oc_: array of integer; Max_oc: integer; mass: array[1..100] of integer; i, a, n: integer; implementation {$R *.dfm} procedure TForm1.question_select() ; label ran; //метка ran для быстрого перехода begin Randomize; ran: a := Random(n); //выбираем случайный вопрос из базы //проверяем: не задавали ли мы этот вопрос ранее for i := 1 to n do if mass[i] = a then goto ran; for i := 1 to n do if mass[i] = 0 then begin mass[i] := a; {записываем номер вопроса, чтобы не задавать его больше } Break; end; end; procedure Vopros(_vop:word); var go:boolean; S_,S1:String; nn:word; symb:char; v_t:boolean;//флаг текста вопроса otv:integer;//счётчик ответов cyr_otv:integer;//текущее значение оченки cyr_max:integer;//максимальное значение ответа в вопросе. begin question_select();//вызываем процедуру выбора случайного вопроса case _vop of begin S_:= T.Strings[_vop]; s1:=''; v_t:=true; go:= true; nn:=0; otv:=-1; cyr_max:=0; form1.Label2.Caption:= inttostr(_vop) +'/'+ inttostr(vop_c); while go do begin nn:=nn+1; if nn > length(S_) then begin //Конец строки. Заканчиваем. if _vop = 0 then form1.Memo1.text:= s1 else form1.L2.Items.Add(s1); go:= false; continue; end; //Если не конец строки, продолжаем symb:= S_[nn]; if symb = '/' then begin //Количество вопросов if _vop = 0 then vop_c:= strtoint(s1) else begin otv_c:= strtoint(s1); SetLength(Oc_,otv_c);//Задаём размер массива оценок end; s1:=''; continue; end; if symb = '[' then begin //текст вопросов и ответов if v_t then form1.Memo1.text:= s1 else form1.L2.Items.Add(s1); v_t:=false; s1:=''; continue; end; end; // поставил-------------------------------> if symb = ']' then begin //оценка вопроса otv:= otv+1; cyr_otv:= StrToInt(trim(s1)); {Если текущая оценка больше предыдущих, то оно становится максимальным} if cyr_otv > cyr_max then cyr_max:= cyr_otv; Oc_[otv]:= cyr_otv; s1:=''; continue; end; s1:=s1+ symb; end; //form1.label3.Caption:=inttostr(Max_oc) + ' ' + inttostr(cyr_max) ; if _vop <> 0 then Max_oc:= Max_oc + cyr_max; end; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; T:=TStringList.Create; S2.Enabled:=false; S3.Enabled:=false; end; procedure TForm1.S1Click(Sender: TObject); begin if OD1.Execute then begin T.LoadFromFile(OD1.FileName); Vopros(0); S1.Enabled:=false; S2.Enabled:=true; end; end; procedure TForm1.S2Click(Sender: TObject); begin vb:=0; vv:=1; Vopros(1); //label1.Caption:=inttostr(vop_c); Ocenka:= 0; //Max_oc:=0; S2.Enabled:=false; S3.Enabled:=true; end; procedure TForm1.S3Click(Sender: TObject); begin //Вывод следующего вопроса с ответами. if vb = 0 then begin Label1.Caption:='Ответ не выбран!'; exit; end; Label1.Caption:=''; Ocenka:= Ocenka + Oc_[vb-1]; vv:=vv+1; Memo1.Clear; L2.Clear; if vv > vop_c then begin S1.Enabled:=true; S2.Enabled:=true; S3.Enabled:=false; //label3.Caption:=inttostr(Max_oc); //Расчёт по процентам Ocenka:= round((Ocenka/Max_oc)*100); if Ocenka <= 60 then Ocenka:= 2; if (Ocenka > 60) and (Ocenka <= 80) then Ocenka:= 3; if (Ocenka > 80) and (Ocenka <= 99) then Ocenka:= 4; if Ocenka =100 then Ocenka:= 5; Max_oc:= 0; Memo1.Text:='Тест закончен: Оценка - ' + inttostr(Ocenka); end else begin Vopros(vv); // vb:= 0; end; end; procedure TForm1.L2ClickCheck(Sender: TObject); var i:word; begin vb:= 0; for i:=0 to Otv_c-1 do begin if L2.Selected[i] then vb:=i+1; end; for i:=0 to Otv_c-1 do begin L2.Checked[i]:=false; end; L2.Checked[vb-1]:=true; Label1.Caption:='Выбран ответ: '+ inttostr(vb); end; procedure TForm1.Button1Click(Sender: TObject); begin Close; end; end |
26.02.2013, 00:26 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Отправлю вам схожие темы, рекомендую почитать Помогите исправить ошибку, пожалуйста Помогите исправить ошибку Помогите исправить ошибку |
26.02.2013, 10:42 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Здравствуйте, Stil. К сожалению, помочь вряд ли смогу: в этих объектно-ориентированных делах не силён. Тоже, как и Вы, самоучка, простой физик-экспериментатор. И как-то до сих пор обходился начальным уровнем программирования, без этих классов, объектов и т.п. Даже динамический подход знаю поверхностно, хотя иногда использую. Извините.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|