![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
||||
|
||||
|
Могу предположить, что проблемы в неудачно выбранном типе переменной а. У вас переменная a скорее всего иногда получает значение больше 31.
|
|
#17
|
|||
|
|||
|
Попробовал "a" сделать word, все равно та же проблема...при ошибке различные числа вылетают((( Вот код формы:
Код:
private
{ Private declarations }
public
function ReadIni(ASection, AString : String) : String;
procedure WriteIni(ASection, AString, AValue : String);
function poisk(a:word):boolean;
procedure ZM;
procedure vopros(a:word);
procedure PR;
procedure record_in_file;
{ Public declarations }
end;
var
Form7: TForm7;
i:integer;
famili,group:string;
Spisok:array of byte;
sch:byte;
vern:byte;
kol:byte;
TimeOut:boolean;
f:TextFile;
flag: boolean;
nevern:byte;
a: string;
implementation
uses Unit2, Unit5, Math;
{$R *.dfm}
procedure TForm7.FormCreate(Sender: TObject);
begin
i:=0;
ProgressBar1.Position:=0;
end;
end;
procedure TForm7.FormShow(Sender: TObject);
begin
i:=0;
ProgressBar1.Position:=0;
end;
procedure TForm7.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Application.ProcessMessages;
end;
procedure TForm7.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position:=ProgressBar1.Position+1;
if ProgressBar1.Position=ProgressBar1.Max then
begin
Timer1.Enabled:=false;
TimeOut:=true;
PR;
end;
end;
procedure TForm7.Button2Click(Sender: TObject);
begin
Randomize;
Form7.Caption:=inttostr(random(146));
end;
function TForm7.ReadIni(ASection, AString: String): String;
var
sIniFile: TIniFile;
sPath: String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Cfg3.INI');
result:=sIniFile.ReadString(ASection, AString,'00000000');
sIniFile.Free;
end;
procedure TForm7.WriteIni(ASection, AString, AValue: String);
var
sIniFile: TIniFile;
sPath: String[60];
begin
GetDir(0,sPath);
sIniFile := TIniFile.Create(sPath + '\Cfg3.INI');
sIniFile.WriteString(ASection, AString, AValue);
sIniFile.Free;
end;
procedure TForm7.Button5Click(Sender: TObject);
begin
SpeedButton3.visible := true;
ProgressBar1.Max:=Form2.SpinEdit7.Value*60;
ProgressBar1.Position:=0;
Timer1.Enabled:=true;
Label3.Visible:=false;
Label4.Visible:=false;
Edit1.Visible:=false;
Edit2.Visible:=false;
Button5.Visible:=false;
SpeedButton1.visible:=false;
kol:=Form2.SpinEdit6.Value;
ZM;
if Edit1.Text<>'' then famili:= Edit1.Text else famili:= 'не указана';
if Edit2.Text<>'' then group:=Edit2.Text else group:= 'не указана';
Label1.Visible:=true;
Memo1.Visible:=true;
RadioGroup1.Visible:=true;
ProgressBar1.Visible:=true;
sch:=0;
vern:=0;
nevern:=0;
vopros(spisok[0]);
AssignFile(f,'c:\program files\result\'+famili+'_'+group+'.txt');
rewrite(f);
CloseFile(f);
flag:=true;
end;
function TForm7.poisk(a: word):boolean;
var
i,f:byte;
begin
f:=0;
for i:=0 to length(Spisok)-1 do
if a=Spisok[i] then inc(f);
if f>0 then Result:=true else Result:=false;
end;
procedure TForm7.Timer2Timer(Sender: TObject);
var
// sIniFile: TIniFile;
sPath: String[60];
begin
GetDir(0,sPath);
if FileExists(sPath + '\Cfg3.INI') then
begin
Timer2.Enabled:=false;
form2.SpinEdit6.Value:=strtoint(Form7.ReadIni('all','kolv'));
form2.SpinEdit7.Value:=strtoint(Form7.ReadIni('all','kolm'));
form2.SpinEdit8.Value:=strtoint(Form7.ReadIni('all','5'));
form2.SpinEdit9.Value:=strtoint(Form7.ReadIni('all','4'));
form2.SpinEdit10.Value:=strtoint(Form7.ReadIni('all','3'));
end
else
Begin
Timer2.Enabled:=false;
ShowMessage('файл конфигурации не создан, перейдите в меню настроек');
end
end;Последний раз редактировалось bleeep, 14.11.2009 в 22:54. |
|
#18
|
|||
|
|||
|
Код:
procedure TForm7.ZM;
var
i,a:word;
label sn;
begin
Randomize;
SetLength(Spisok,kol);
for i:=0 to kol-1 do
begin
Spisok[i]:=255;
end;
for i:=0 to kol-1 do
begin
sn:
a:=random(146);
if poisk(a)=true then goto sn else Spisok[i]:=a;
end;
end;
procedure TForm7.Button6Click(Sender: TObject);
var
varnt:byte;
b:byte;
begin
record_in_file;
b:=spisok[sch];
if RadioButton1.Checked=true then varnt:=1;
if RadioButton2.Checked=true then varnt:=2;
if RadioButton3.Checked=true then varnt:=3;
if RadioButton4.Checked=true then varnt:=4;
if varnt=strtoint(ListBox1.Items[b*8+2]) then
Begin
inc(vern);
end
else
Begin
inc(nevern);
end;
if nevern>Form2.SpinEdit6.Value - Form2.SpinEdit10.Value then PR else
if sch=kol-1 then PR else
begin
inc(sch);
vopros(spisok[sch]);
end;
end;
procedure TForm7.vopros(a:word);
begin
Memo1.Lines[0]:=ListBox1.Items[a*8]; <- здесь вылетает ошибка, компилятор на эту строку ссылается
if strtoint(ListBox1.Items[a*8+1])=4 then
begin
RadioButton1.Visible:=true;
RadioButton2.Visible:=true;
RadioButton3.Visible:=true;
RadioButton4.Visible:=true;
RadioButton1.Caption:=ListBox1.Items[a*8+3];
RadioButton2.Caption:=ListBox1.Items[a*8+4];
RadioButton3.Caption:=ListBox1.Items[a*8+5];
RadioButton4.Caption:=ListBox1.Items[a*8+6];
end;
if strtoint(ListBox1.Items[a*8+1])=3 then
begin
RadioButton1.Visible:=true;
RadioButton2.Visible:=true;
RadioButton3.Visible:=true;
RadioButton4.Visible:=false;
RadioButton1.Caption:=ListBox1.Items[a*8+3];
RadioButton2.Caption:=ListBox1.Items[a*8+4];
RadioButton3.Caption:=ListBox1.Items[a*8+5];
end;
if strtoint(ListBox1.Items[a*8+1])=2 then
begin
RadioButton1.Visible:=true;
RadioButton2.Visible:=true;
RadioButton3.Visible:=false;
RadioButton4.Visible:=false;
RadioButton1.Caption:=ListBox1.Items[a*8+3];
RadioButton2.Caption:=ListBox1.Items[a*8+4];
end;
RadioButton1.Checked:=false;
RadioButton2.Checked:=false;
RadioButton3.Checked:=false;
RadioButton4.Checked:=false;
end;
procedure TForm7.PR;
var
rez:byte;
begin
Timer1.Enabled:=false;
Label5.Visible:=true;
Label1.Visible:=false;
Memo1.Visible:=false;
RadioGroup1.Visible:=false;
speedButton2.Visible:=false;
ProgressBar1.Position:=0;
ProgressBar1.Visible:=false;
Label3.Visible:=false;
Label4.Visible:=false;
Edit1.Visible:=false;
Edit2.Visible:=false;
Button5.Visible:=false;
RadioButton1.Visible:=false;
RadioButton2.Visible:=false;
RadioButton3.Visible:=false;
RadioButton4.Visible:=false;
If vern>=Form2.SpinEdit8.Value then rez:=5 else
if vern>=Form2.SpinEdit9.Value then rez:=4 else
if vern>=Form2.SpinEdit10.Value then rez:=3 else
rez:=2;
//if TimeOut=true then rez:=2;
Label5.Caption:='ваша оценка - '+inttostr(rez)+' ';
Label6.Visible:=true;
Label6.Caption:='правильных ответов - '+inttostr(vern)+' ';
Label7.Visible:=true;
Label7.Caption:='неправильных ответов - '+inttostr(nevern)+' ';
Memo2.Clear;
Memo2.Lines.Add('правильных ответов - '+inttostr(vern));
Memo2.Lines.Add('неправильных ответов - '+inttostr(nevern));
if TimeOut=true then Memo2.Lines.Add('время истекло');
Memo2.Lines.Add('оценка - '+inttostr(rez));
record_in_file;
SpeedButton1.Enabled:=true;
TimeOut:=false;
end;
procedure TForm7.ListBox1Click(Sender: TObject);
begin
//ListBox1.Items.LoadFromFile('c:\program files\result\vkt3.ctf');
ListBox1.Items.LoadFromFile('test\vkt3.ctf');
end;
procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
//ListBox1.Items.LoadFromFile('c:\program files\result\vkt3.ctf');
ListBox1.Items.LoadFromFile('test\vkt3.ctf');
Label5.Visible:=false;
Label6.Visible:=false;
Label7.Visible:=false;
Label3.Visible:=true;
Label4.Visible:=true;
Edit1.Visible:=true;
Edit2.Visible:=true;
Button5.Visible:=true;
Edit1.Clear;
Edit2.Clear;
SpeedButton3.visible := false;
SpeedButton1.visible := false;
end;
procedure TForm7.record_in_file;
var
str1: string;
begin
if flag=true then begin
AssignFile(f,'c:\program files\result\'+famili+'_'+group+'.txt');
Append(f);
if label5.Caption<>'Label5' then begin
str1:=label5.Caption;
Writeln(f, str1);
str1:=label6.Caption;
Writeln(f, str1);
str1:=label7.Caption;
Writeln(f, str1);
flag:=false;
end
else begin
str1:=Memo1.Lines[0];
writeln(f, str1);
if RadioButton1.Checked then begin
str1:=RadioButton1.Caption;
writeln(f, str1);
end;
if RadioButton2.Checked then begin
str1:=RadioButton2.Caption;
writeln(f, str1);
end;
if RadioButton3.Checked then begin
str1:=RadioButton3.Caption;
writeln(f, str1);
end;
if RadioButton4.Checked then begin
str1:=RadioButton4.Caption;
writeln(f, str1);
end;
end;
CloseFile(f);
end;
end;
procedure TForm7.SpeedButton2Click(Sender: TObject);
var
varnt:byte;
b:byte;
begin
if ((radiobutton1.Checked and radiobutton2.Checked and radiobutton3.Checked and radiobutton4.Checked)<>true) then speedbutton2.visible:=false
else speedbutton2.Visible :=true;
record_in_file;
b:=spisok[sch];
if RadioButton1.Checked=true then varnt:=1;
if RadioButton2.Checked=true then varnt:=2;
if RadioButton3.Checked=true then varnt:=3;
if RadioButton4.Checked=true then varnt:=4;
if varnt=strtoint(ListBox1.Items[b*8+2]) then
Begin
inc(vern);
end
else
Begin
inc(nevern);
end;
if nevern>Form2.SpinEdit6.Value - Form2.SpinEdit10.Value then PR else
if sch=kol-1 then PR else
begin
inc(sch);
vopros(spisok[sch]);
end;
end;
end.Последний раз редактировалось bleeep, 15.11.2009 в 10:55. |
|
#19
|
|||
|
|||
|
И еще небольшое пояснение. У меня три таких формы(тесты на разную тему). При первых двух подобных ошибок не было. А в третьем количество вопросов в тесте значительно больше, может как то с этим связано???
|
|
#20
|
||||
|
||||
|
Ну проверить-то легко. Увеличть количество вопросов в любом из первых двух.
А вообще, в какой хоть строчке срабатывает исключение? Последний раз редактировалось Страдалецъ, 14.11.2009 в 23:39. |
|
#21
|
|||
|
|||
|
Страдалец в посте 18 пометил. В прцедуре vopros.
|
|
#22
|
||||
|
||||
|
Тогда поместите этот блок в обработчик ошибки:
Код:
try
Memo1.Lines[0]:=ListBox1.Items[a*8];
except
ShowMessage(Format('Обращение к элементу %d из %d',[a*8,ListBox1.Count]));
end; |
|
#23
|
|||
|
|||
|
Цитата:
Не вижу смысла идти в раздел "Работа". Исходный код мне написали во втором посте. То, что было изначально у меня - бред сивой кобылы. Если б знал с какого "нуля" начать - сам бы разобрался. Я сам с трудом понимаю, в чем его смысл этого задания, поэтому и просил помочь разобраться. To NIch: Единственное, что мне удалось уточнить по поводу задания: задание - составление матрицы, первое окно - кто работал, второе - матрица, третье - вывод результатов. Больше я ничего не знаю (никто из моей группы не знает), я даже не знаю какие значения ставить. Все же придерживаюсь изначального мнения, что это действительно полная безнадега. Действительно, кто мне сможет помочь, если даже не понятен смысл задания... ![]() |
|
#24
|
|||
|
|||
|
Все я разобрался. Ура!)) Проблема то решилась просто))Я изменил путь к файлу в исходнике, а сам файл забыл переместить, в итоге прога считывала из старого, а там строк как раз 671)))
У меня еще небольшой вопрос. У меня вопросы берутся random'ом из файла. Как можно исключить повтор? Допустим первый раз программа обратилась к 8й строке файла, затем произошел ответ и прога снова обращается random'ом к файлу. Нужно чтобы к любой но не 8й(т.е. не к той которая была и т.д.) Спасибо!) Последний раз редактировалось bleeep, 15.11.2009 в 21:14. |
|
#25
|
||||
|
||||
|
Рад, что моя подсказка отдебажить помогла
![]() А разве у вас функция poisk не для этого сделана? |
|
#26
|
||||
|
||||
|
to Strider1000...
Код:
program Matrix;
uses
crt;
CONST
n = 10;
var
x : array[1..n,1..n] of integer;
i , j : integer;
a : real;
BEGIN
randomize;
clrscr;
writeln ('Ф.И.О.');
writeln (' Иванов Иван Иванович');
writeln ('Группа');
writeln (' 101');
readln;
for i := 1 to n do begin
for j := 1 to n do begin
x[i,j]:= random(n);
write (x[i,j]);
a := Ln(i);
write (a);
end;
writeln;
end;
readln;
END. |
|
#27
|
|||
|
|||
|
Вычислять...
|
|
#28
|
|||
|
|||
|
Страдалец, если честно я не с нуля писал, вот и появляются вопросы, да и программирую не так давно. Времени изучать глобально нету(((Я еще параллельно Perl изучаю). А насчет random не подскажите?
Последний раз редактировалось bleeep, 16.11.2009 в 22:15. |
|
#29
|
||||
|
||||
|
Тогда понятно.
Значит идея такая. Поскольку функция Random(N) генерит произвольно значение от 0 до N и эти значения могут повторятся, следовательно у еас есть два варианта получить все значения в этом диапазоне, но без повторов. Вариант 1: Можно заранее сгенерировать список уникальных значений и потом использовать его для выдачи вопросов. Вариант 2: Можно выдавать вопрос, занести его в список и в следующий раз сверится с этим списком прежде чем выдать следующий вопрос. У вас в программе есть процедура Zm и функция poisk, которые в паре работают по второму варианту. |
|
#30
|
||||
|
||||
|
Цитата:
Вот чуть чуть инфы по матрицам... http://ru.wikipedia.org/wiki/Матрица_(математика) Посмотри и скажи что с ней делать... |