|
|
Регистрация | << Правила форума >> | 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; "I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." Последний раз редактировалось 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. "I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." Последний раз редактировалось bleeep, 15.11.2009 в 10:55. |
#19
|
|||
|
|||
И еще небольшое пояснение. У меня три таких формы(тесты на разную тему). При первых двух подобных ошибок не было. А в третьем количество вопросов в тесте значительно больше, может как то с этим связано???
"I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." |
#20
|
||||
|
||||
Ну проверить-то легко. Увеличть количество вопросов в любом из первых двух.
А вообще, в какой хоть строчке срабатывает исключение? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 14.11.2009 в 23:39. |
#21
|
|||
|
|||
Страдалец в посте 18 пометил. В прцедуре vopros.
"I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." |
#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й(т.е. не к той которая была и т.д.) Спасибо!) "I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." Последний раз редактировалось 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 не подскажите?
"I remember the good old days, when computers were mainframes, analysts were magicians,and programmers punced cards..." Последний раз редактировалось bleeep, 16.11.2009 в 22:15. |
#29
|
||||
|
||||
Тогда понятно.
Значит идея такая. Поскольку функция Random(N) генерит произвольно значение от 0 до N и эти значения могут повторятся, следовательно у еас есть два варианта получить все значения в этом диапазоне, но без повторов. Вариант 1: Можно заранее сгенерировать список уникальных значений и потом использовать его для выдачи вопросов. Вариант 2: Можно выдавать вопрос, занести его в список и в следующий раз сверится с этим списком прежде чем выдать следующий вопрос. У вас в программе есть процедура Zm и функция poisk, которые в паре работают по второму варианту. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#30
|
||||
|
||||
Цитата:
Вот чуть чуть инфы по матрицам... http://ru.wikipedia.org/wiki/Матрица_(математика) Посмотри и скажи что с ней делать... В начале был Бит, потом Байт и только потом появилось Слово... |