Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2012, 07:30   #1
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
По умолчанию Delphi Ошибка list index out of bounds(2)

Добрый день, подскажите что за ошибка: list index out of bounds(2), я так понимаю, что это связано с массивом? У меня программа по построению графика с точками в SG.
Sergeevna вне форума Ответить с цитированием
Старый 02.04.2012, 07:45   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Выходите за пределы списка/массива!
Показывайте код!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 02.04.2012, 07:55   #3
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
По умолчанию

Код:
procedure TGrafik.ZnF(Sender: TObject);
var
  i, RowCount: integer;
begin
with Form1.StringGrid1 do
  maxRow:=10;
  RowCount:=maxRow+2;
  for i:=1 to RowCount-1 do
  Form1.StringGrid1.Cells[0,i]:=IntToStr(i);
  SetLength(x, maxRow);                    //заполнение массивов координат
  SetLength(y, maxRow);
  for i:=0 to maxRow-1 do
begin
  try
  x[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i+1]);
  except
  x[i]:=0;
end;
  try
  y[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i+1]);
  except
  y[i]:=0;
end;
end;
  Form2.PaintBox1.Invalidate; // Перерисовать график
end;


procedure TForm1.N2Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ZnF(Sender);
  Fun1.Gr1(Sender);
end;


procedure TGrafik.Gr1 (Sender: TObject); //график на Panel
var
  cx,cy,i,j,xx,yy:integer;
  d:double;
begin
  Form2.Show;
  with Form2.PaintBox1 do
begin                //перерисовка графика
  cx:=width div 2;
  cy:=height div 2;
  if width<height then
  d:=(width-30)/20
  else
  d:=(height-30)/20;

  Canvas.pen.color:=clNavy;  //оси
  Canvas.pen.width:=3;
  Canvas.polyline([point(0,cy), point(width,cy), point(width-10, cy+5),
  point(width,cy),point(width-10,cy-5)]);
  Canvas.polyline([point(cx,height), point(cx,0), point(cx+5,10), point(cx,0),
  point(cx-5,10)]);
  Canvas.pen.color:=clBlack; //насечки
  Canvas.pen.width:=1;
  Canvas.font.name:='small';
  Canvas.font.size:=7;
  Canvas.brush.style:=bsClear; //заливка откл
  for i:=-10 to 10 do
  if i<>0 then
begin
  if i mod 5=0 then j:=5 else j:=3;
  Canvas.Polyline([Point(cx+round(i*d) ,cy-j), Point(cx+round(i*d) ,cy+j+1)]);
  Canvas.Polyline([Point(cx-j,cy+round(i*d)), Point(cx+j+1,cy+round(i*d))]);
  Canvas.TextOut(cx+round(i*d)-4,cy-15, IntToStr(i));
  Canvas.TextOut(cx+10, cy-round(i*d)-5,IntToStr(i));
end;
     // Строим график
  Canvas.Pen.Color:=clMaroon;
  Canvas.Brush.Color:=clYellow;
  for i:=0 to High(x) do
begin
  xx:=cx+round(x[i]*d);
  yy:=cy-round(y[i]*d);
  Canvas.Rectangle(xx-2,yy-2,xx+3,yy+3);
  if i=0 then Canvas.MoveTo(xx,yy) else Canvas.LineTo(xx, yy);
end;
end;
end;


procedure TGrafik.ZF(Sender: TObject);
var
  i, lastRow:integer;
  SList:TStringList;
begin
  ZnF(Sender);
  Form1.SaveDialog1.Execute;
  SList:= TStringList.Create;
  LastRow:=Form1.StringGrid1.RowCount-1;
  try
  for i:=0 to LastRow do
  SList.Add(Form1.StringGrid1.Rows[i].CommaText);
  SList.SaveToFile(Form1.SaveDialog1.FileName);
  ShowMessage('Данные записаны');
  finally
  SList.Free;
end;
end;


procedure TGrafik.ChF(Sender: TObject);
var
  i, lastRow, CommaPos:integer;
  FirstStr:string;
  SList:TStringList;
begin
  if not Form1.OpenDialog1.Execute then Exit;
  SList:=TStringList.Create;
  try
  SList.LoadFromFile(Form1.OpenDialog1.FileName);
  Form1.StringGrid1.RowCount:=SList.Count;
  FirstStr:=SList.Strings[0];
  i:=0;
  CommaPos:=Pos(',', FirstStr);
  while CommaPos<>0 do
begin
  Delete(FirstStr,1,CommaPos);
  Inc(i);
  CommaPos:=Pos(',',FirstStr);
end;
  Form1.StringGrid1.ColCount:=i+1;
  lastRow:=Form1.StringGrid1.RowCount-1;
  for i:=0 to lastRow do
  Form1.StringGrid1.Rows[i].CommaText:=SList.Strings[i];
  ShowMessage('Данные внесены');
  finally
  SList.Free;
end;
end;


procedure TForm1.N3Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ChF(Sender);
end;


procedure TForm1.N5Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ZF(Sender);
end;


procedure TForm1.N21Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ZnF(Sender);
  Fun1.Gr2(Sender);
end;                             //эта строка выделяется синим при ошибке!!!!!!!


procedure TGrafik.Gr2(Sender: TObject); //график в TChart
var
  i,RowCount,maxRow: integer;
  s:string;
begin
  Form3.Show;
  with Form3.Chart1 do
  Form3.Chart1.Series[1].Clear;
  Form3.Chart1.Series[2].Clear;
  maxRow:=10;
  RowCount:=maxRow+2;
  for i:=1 to RowCount-1 do
  Form1.StringGrid1.Cells[0,i]:=IntToStr(i);
  SetLength(x, maxRow);                    //заполнение массивов координат
  SetLength(y, maxRow);
  for i:=0 to maxRow-1 do
begin
  try
  x[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i+1]);
  except
  x[i]:=0;
end;
  try
  y[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i+1]);
  except
  y[i]:=0;
end;
   //Сведения для легенды.
    S := '(' + FloatToStr(x[i]) + ', ' + FloatToStr(y[i]) + ')';
    //Добавляем на график точку. А в легенду добавляем строку s.
    Form3.Chart1.Series[1].AddXY(x[i], y[i], s);
    Form3.Chart1.Series[2].AddXY(x[i], y[i], s);
end;
end;


end.
Sergeevna вне форума Ответить с цитированием
Старый 02.04.2012, 07:58   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А на какой строке то вылезает ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2012, 08:06   #5
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
По умолчанию

В предпоследней процедуре.
Код:
procedure TForm1.N21Click(Sender: TObject);
begin
  Fun1:=TGrafik.Create;
  Fun1.ZnF(Sender);
  Fun1.Gr2(Sender);
end;                             //эта строка выделяется синим при ошибке!!!!!!!

procedure TGrafik.Gr2(Sender: TObject);
var
  i,RowCount,maxRow: integer;
  s:string;
begin
  Form3.Show;
  with Form3.Chart1 do
  Form3.Chart1.Series[1].Clear;
  Form3.Chart1.Series[2].Clear;
  maxRow:=10;
  RowCount:=maxRow+2;
  for i:=1 to RowCount-1 do
  Form1.StringGrid1.Cells[0,i]:=IntToStr(i);
  SetLength(x, maxRow);                    //заполнение массивов координат
  SetLength(y, maxRow);
  for i:=0 to maxRow-1 do
begin
  try
  x[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i+1]);
  except
  x[i]:=0;
end;
  try
  y[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i+1]);
  except
  y[i]:=0;
end;
   //Сведения для легенды.
    S := '(' + FloatToStr(x[i]) + ', ' + FloatToStr(y[i]) + ')';
    //Добавляем на график точку. А в легенду добавляем строку s.
    Form3.Chart1.Series[1].AddXY(x[i], y[i], s);
    Form3.Chart1.Series[2].AddXY(x[i], y[i], s);
end;
end;
end.
Sergeevna вне форума Ответить с цитированием
Старый 02.04.2012, 08:14   #6
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
По умолчанию

Как я понмаю, ошибка связана с считыванием точек из SG для построения графика на TChart, но что там не так я совсем уже не понимаю. Тоже самое происходит с построением графика на Panel, но там ошибку не выдает.
Sergeevna вне форума Ответить с цитированием
Старый 02.04.2012, 08:16   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мдя... Знаешь сколько тут мест где может возникать подобная ошибка?
Давай ка пошаговку - ставь точку прерывания на начало обработчика и трассируй до места ошибки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2012, 08:34   #8
Sergeevna
 
Аватар для Sergeevna
 
Регистрация: 26.03.2012
Сообщений: 7
По умолчанию

Я не знаю как это делать, первый раз вообще слышу(

Вроде попробовала разобраться, ошибка вылезла на строке:
maxRow:=10; в последней процедуре.

Вся проблема именно в последней процедуре. Как бы и что бы я не меняла, все равно выдает ошибк, именно начиная с ее первых строк. Я уже совсем ничего не понимаю...

Последний раз редактировалось Stilet; 02.04.2012 в 22:09.
Sergeevna вне форума Ответить с цитированием
Старый 02.04.2012, 11:48   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
  for i:=0 to maxRow-1 do
begin
  try
  x[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i+1]);
  except
  x[i]:=0;
end;
  try
  y[i]:=StrToFloat(Form1.StringGrid1.Cells[2,i+1]);
  except
  y[i]:=0;
end;
какую ячейку будем брать если i =MaxRow-1 ?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.04.2012, 13:16   #10
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

я просто в шоке с вас...
Код:
  Form3.Chart1.Series[1].Clear;
  Form3.Chart1.Series[2].Clear;
исправь на:
Код:
  Form3.Chart1.Series[0].Clear;
  Form3.Chart1.Series[1].Clear;
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка List index out of bounds (0) Natalie023 Помощь студентам 9 17.12.2011 19:27
Почему ошибка 'List index out of bounds (0)'? WandererX Общие вопросы Delphi 7 20.06.2010 11:17
Ошибка List Index out of bounds Rapala Помощь студентам 1 03.05.2010 17:33
Ошибка List index of bounds(1) Blue Heron Помощь студентам 5 17.03.2010 00:38
ошибка:List index out of bounds tanek Помощь студентам 7 26.12.2009 20:38