Проблема с StringGrid

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
seufry
Сообщения: 2
Зарегистрирован: 21 июн 2010, 00:32

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

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

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'.

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

Помогите пожалуйста, ткните носом?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

У StringGrid колонки и столбцы начинаются с нуля. Значит, если введено N чисел, то последнее число будет в колонке с номером N-1. Соответственно в колонке N будет пусто и функция StrToFloat будет всегда вываливаться EConvertError.
It's a long way to the top if you wanna rock'n'roll
seufry
Сообщения: 2
Зарегистрирован: 21 июн 2010, 00:32

Я писал n:=StringGrid1.ColCount-1, программа не работала как нужно.
Либо ещё где-то косяк, но я его упорно не вижу.
Meteo
Сообщения: 20
Зарегистрирован: 07 май 2010, 21:54

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);
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

вово, может проблема в ZN? если оно целое - используйте IntToStr
Изображение
Ответить