• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите исправить ошибку в коде

  • Автор темы Автор темы stil
  • Дата начала Дата начала

stil

Ученик
Регистрация
25 Фев 2013
Сообщения
2
Реакции
0
Баллы
0
Помогите исправить ошибку в коде

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 = a then goto ran;
for i := 1 to n do
if mass = 0 then
begin
mass := 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 then vb:=i+1;
end;

for i:=0 to Otv_c-1 do begin
L2.Checked:=false;
end;

L2.Checked[vb-1]:=true;
Label1.Caption:='Выбран ответ: '+ inttostr(vb);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end
 
У вас код с ошибками. Попробовал скомпилировать, и сразу вот:
case _vop of
незакончен синтаксис
 
=)

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