Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 26.02.2013, 00:26   #1 (permalink)
stil
Новичок
 
Регистрация: 26.02.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите исправить ошибку в коде

Vladimir_S здравствуйте. а может мне исправите ошибку в коде. там у меня ерунда с генерацией случайного числа..функция не пашет..посмотрите?
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
stil вне форума   Ответить с цитированием

Старый 26.02.2013, 00:26
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Отправлю вам схожие темы, рекомендую почитать

Помогите исправить ошибку, пожалуйста
Помогите исправить ошибку
Помогите исправить ошибку

Старый 26.02.2013, 05:14   #2 (permalink)
Debianer
Member
 
Регистрация: 07.08.2012
Сообщений: 325
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1671
По умолчанию

У вас код с ошибками. Попробовал скомпилировать, и сразу вот:
case _vop of
незакончен синтаксис
Debianer вне форума   Ответить с цитированием
Старый 26.02.2013, 08:09   #3 (permalink)
stil
Новичок
 
Регистрация: 26.02.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию =)

а как закончить..же ведь не программист..я самоучка..просто по моей профессии нужна эта программа...я простой бухгалтер...
stil вне форума   Ответить с цитированием
Старый 26.02.2013, 10:42   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,809
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 112676
По умолчанию

Цитата:
Сообщение от stil Посмотреть сообщение
Vladimir_S здравствуйте. а может мне исправите ошибку в коде.
Цитата:
Сообщение от stil Посмотреть сообщение
ведь не программист..я самоучка...я простой бухгалтер...
Здравствуйте, Stil. К сожалению, помочь вряд ли смогу: в этих объектно-ориентированных делах не силён. Тоже, как и Вы, самоучка, простой физик-экспериментатор. И как-то до сих пор обходился начальным уровнем программирования, без этих классов, объектов и т.п. Даже динамический подход знаю поверхностно, хотя иногда использую. Извините.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 08:31.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.