Страница 1 из 1

Проблема с StringGrid

Добавлено: 21 июн 2010, 00:49
seufry
Здравствуйте.
Поставлена следующая задача: Определить в последовательности чисел, сколько раз меняется знак при переходе к следующему элементу.

Код: Выделить всё

n:=StringGrid1.ColCount;
for i:=1 to n do begin 
  if (StrToFloat(StringGrid1.Cells[i-1,0])<0) and (StrToFloat(StringGrid1.Cells[i,0])<0) then begin
    zn:=zn+1;
    label3.Caption:=('Знак меняется ' + FloatToStr(zn) + ' раз(-а)')
  end else
    label3.Caption:=('Знак не меняется ни разу');
end;
Компилируется, но при выполнении этого куска кода вываливается с ошибкой: Project raised exeption class EConvertError with message ''' is not a valid floating point value'.

Пробовал разные типы, сломал голову с индексами.
Чего-то в этой жизни я не понимаю.

Помогите пожалуйста, ткните носом?

Re: Проблема с StringGrid

Добавлено: 21 июн 2010, 08:55
somewhere
У StringGrid колонки и столбцы начинаются с нуля. Значит, если введено N чисел, то последнее число будет в колонке с номером N-1. Соответственно в колонке N будет пусто и функция StrToFloat будет всегда вываливаться EConvertError.

Re: Проблема с StringGrid

Добавлено: 21 июн 2010, 10:51
seufry
Я писал n:=StringGrid1.ColCount-1, программа не работала как нужно.
Либо ещё где-то косяк, но я его упорно не вижу.

Re: Проблема с StringGrid

Добавлено: 21 июн 2010, 15:05
Meteo
zn:=0;
for i:=1 to StringGrid1.ColCount-2 do
if(((strtofloat(StringGrid1.Cells[i,0])>0)and((strtofloat(StringGrid1.Cells[i+1,0])<0))or((strtofloat(StringGrid1.Cells[i,0])<0)and((strtofloat(StringGrid1.Cells[i+1,0])>0)))))then
zn:=zn+1;
if(zn>0)then
label1.Caption:='kolichastvo izmeneniy:='+inttostr(zn)
else
label1.Caption:='kolichastvo izmeneniy:='+inttostr(zn);

Re: Проблема с StringGrid

Добавлено: 22 июн 2010, 14:24
Игорь Акопян
вово, может проблема в ZN? если оно целое - используйте IntToStr