Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > не могу найти ошибку в тесте


Автор: miksa30 16.10.2014, 12:15
Код

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Button1: TButton;
    RadioGroup1: TRadioGroup;
    Listbox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  variantkol,nomervernogo,kolvoverno,nomervoprosa,nomerstroki,kolvovoprosov,i: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
ListBox1.Items.LoadFromFile('Test.txt');
label1.Caption:=listbox1.Items[1];
variantkol:=StrToInt(Listbox1.Items[2]);
radiogroup1.items.clear;
for i:=1 to variantkol do begin
radiogroup1.Items.Add(listbox1.Items [3+i]) ;
end;
kolvovoprosov:=strtoint (listbox1.Items[0]);
nomervernogo:=strtoint (listbox1.Items [3]);
kolvoverno:=0;
nomervoprosa:=1;
nomerstroki:=variantkol+4;
end;



procedure TForm1.Button1Click(Sender: TObject);
var variantkol,nomervernogo,kolvoverno,nomervoprosa,nomerstroki,kolvovoprosov: integer;
Ocenka: real;
begin

if (RadioGroup1.ItemIndex+1)=nomervernogo then begin
kolvoverno:=kolvoverno+1;
end;
if nomervoprosa=kolvovoprosov then begin
Ocenka:=kolvoverno*(5-1)/kolvovoprosov+1;
messagedlg('Âàøà îöåíêà='+floattostr (Ocenka),
mtinformation, [mbOK], 0);
Form1.Close;
end;
if nomervoprosa<kolvovoprosov then begin
end;
nomervoprosa:=nomervoprosa+1;

label1.caption:=listbox1.items[1+nomerstroki-1];
variantkol:=strtoint(listbox1.items[2+nomerstroki-1]);
nomervernogo:=strtoint(listbox1.items[3+nomerstroki-1]);
radiogroup1.items.clear;
for i:=1 to variantkol do begin
radiogroup1.items.add(listbox1.items[3+i+nomerstroki-1]);
end;
nomerstroki:=nomerstroki+variantkol+3;


end;

end.


















пишет нераспознанный индекс, сижу целый день не могу понять где косяк

Автор: Poseidon 16.10.2014, 13:59
Говорят, отладчик может помочь. Банально даже из-за того, что не знаем что там в Test.txt.

Автор: miksa30 16.10.2014, 14:39
Цитата(Poseidon @ 16.10.2014,  13:59)
Говорят, отладчик может помочь. Банально даже из-за того, что не знаем что там в Test.txt.

в Test.txt вопросы и ответы

Автор: Poseidon 16.10.2014, 15:28
Отлично! А ответ "ошибка где-то в коде" тебя устроит? Телепатов нет. Что у тебя там не так, никто не знает. По вылаженному коду трудно о чем-то судить. Но в нем при беглом осмотре уже заметны ошибки. В частности переменные variantkol, nomervernogo, kolvoverno, nomervoprosa, nomerstroki, kolvovoprosov объявленны как глобальные и как локальные в Button1Click. Это не говоря уже об ужасном форматировании кода.

Автор: miksa30 17.10.2014, 06:31
Цитата(Poseidon @  16.10.2014,  15:28 Найти цитируемый пост)
В частности переменные variantkol, nomervernogo, kolvoverno, nomervoprosa, nomerstroki, kolvovoprosov объявлены как глобальные и как локальные в Button1Click

Это я уже исправил, делал все по книге от Delphi 7 к delphi2006 Для начинающих

Автор: Poseidon 17.10.2014, 11:32
Цитата(miksa30 @  17.10.2014,  06:31 Найти цитируемый пост)
делал все по книге от Delphi 7 к delphi2006 Для начинающих
В этой книге рекомендуют создавать глобальные переменные? Рекомендуют создавать локальные переменные с такими же именами как и глобальные?

Цитата(miksa30 @  17.10.2014,  06:31 Найти цитируемый пост)
Это я уже исправил
С ошибкой что? Под отладкой на какой строке ошибка?

Автор: miksa30 17.10.2014, 11:42
Цитата(Poseidon @  17.10.2014,  11:32 Найти цитируемый пост)
на какой строке ошибка?

label1.caption:=listbox1.items[1+nomerstroki-1]; на данной строке

Автор: superVad 17.10.2014, 15:38
Цитата(miksa30 @  17.10.2014,  10:42 Найти цитируемый пост)
label1.caption:=listbox1.items[1+nomerstroki-1]; на данной строке

У тебя nomerstroki есть глобальный, а есть локальный. Тут используется локальный, который никак не инициализируется. Ну и вопрос на засыпку: сколько будет 1-1?
Если уже код исправлен, то выложи еще раз исправленный. Только отформатируй пожалуйста, ничего в этой простыне не видно.

Автор: miksa30 20.10.2014, 12:28
Цитата(superVad @  17.10.2014,  15:38 Найти цитируемый пост)
Только отформатируй пожалуйста, ничего в этой простыне не видно. 

вот скриншоты все печатал по ним user posted image
user posted image

Автор: superVad 22.10.2014, 12:02
miksa30, вот почитай - http://www.gunsmoker.ru/2010/07/blog-post.html
Основной смысл - пиши, как написаны делфевые библиотеки.

Автор: CynicRus 23.10.2014, 22:29
ЗЫ: Это не учебник, это жесть какая-то. У меня глаза плачу кровью, когда я вижу такие названия переменных. А 1+NomerStroki-1 - это вообще Адъ и Израиль. Сменил бы ты учебник... Ну а вообще - берёшь точку входа в процедуру, после begin - тыкаешь справа на полях, появляется красная точка. Затем F8 и смотришь с помощью отладки, что же у тебя не так. Думается мне, что sigsegv при обращении к несуществующему элементу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)