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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2012, 02:14   #1
Toshibo
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 13
По умолчанию Ошибка: is not a valid floating point value

Добрый день.
Цель: Заполнить таблицу(form4.StringGrid1) за счет расчетов других таблиц по методу минимальной стоимости. Написал по методу Северо-Западного угла(если о чём-то говорит) подобным способом - все работает, а тут выскакивает ошибка "is not a valid floating point value". Пробовал менять разделитель в панели, не помогло. Использовал StrToFloatDef - ошибка о не возможности использования. Не знаю в чём уж тут дело. Прошу вашей помощи.
P.S. При вводе пустых ячеек нет, ввожу только целые числа.

Код:
procedure TForm1.N7Click(Sender: TObject);
var a:array[1..10,1..10] of Real;
    n,m,i,j,i1,j1,i0,j0,c:Integer;
    min,fun,z1,z2,z:real;
    k:string;
begin
form4.StringGrid1.rowCount:=(form2.StringGrid1.ColCount)+1;
form4.StringGrid1.ColCount:=(form2.StringGrid2.ColCount)+1;
                                                    {Подпись фикс. ячеек}
n:=form2.StringGrid2.ColCount;
for j:=1 to n do
begin
k:=inttostr(j);
form4.StringGrid1.cells[j,0]:='b[' +k+ ']';
end;
m:=form2.StringGrid1.ColCount;
for i:=1 to m do
begin
k:=inttostr(i);
form4.StringGrid1.cells[0,i]:='a[' +k+ ']';
end;

fun:=0;
c:=0;
z:=0;
i:=0;
j:=0;
min:=strtofloat(form3.StringGrid1.cells[0,0]);
repeat
for i:=0 to m do             {Нахождение min}
for j:=0 to n do
begin
if (min<strtofloat(form3.StringGrid1.cells[i,j])) and (strtofloat(form3.StringGrid1.cells[i,j])>0) then
begin
min:=strtofloat(form3.StringGrid1.cells[i,j]);
i0:=i;
j0:=j;
end;
end;
                                                                       {Заполнение таблицы}
z1:=strtofloat(form2.StringGrid1.cells[i0,0]);
z2:=strtofloat(form2.StringGrid2.cells[j0,0]);
if (z1>0) AND (z2>0) then
begin
if z1<z2 then
begin
form4.StringGrid1.cells[i0+1,j0+1]:=floattostr(z1);
form2.StringGrid1.cells[i0,0]:='0';
z:=(z2-z1);
form2.StringGrid2.cells[j0,0]:=floattostr(z);
fun:=fun+z1*strtofloat(form3.StringGrid1.cells[i0,j0]); {Целевая функция}

form3.StringGrid1.cells[i0,j0]:='-1';
c:=c+1;
end
else
begin
form4.StringGrid1.cells[i0+1,j0+1]:=floattostr(z2);
form2.StringGrid2.cells[j0,0]:='0';
z:=(z1-z2);
form2.StringGrid1.cells[i0,0]:=floattostr(z);
fun:=fun+z2*strtofloat(form3.StringGrid1.cells[i0,j0]); {Целевая функция}

form3.StringGrid1.cells[i0,j0]:='-1';
c:=c+1;
end;
end
else
form3.StringGrid1.cells[i0,j0]:='-1';
until n+m-1=c;

form4.show;
end;

Последний раз редактировалось Toshibo; 24.05.2012 в 02:34.
Toshibo вне форума Ответить с цитированием
Старый 24.05.2012, 03:04   #2
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
ошибка о не возможности использования
Ась?

Цитата:
При вводе пустых ячеек нет, ввожу только целые числа.
Тогда это значит, что где-то напортачил с индексами. Типа, читаешь из несуществующей ячейки. А там - пустая строка.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 24.05.2012, 08:28   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

GunSmoker, +1

как минимум:
Цитата:
Код:
m:=form2.StringGrid1.ColCount;
for i:=1 to m do
begin
k:=inttostr(i);
form4.StringGrid1.cells[0,i]:='a[' +k+ ']';
скорее всего, должно быть наоборот, cells[i, 0] - сначала идёт индекс столбца, потом - строки...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.05.2012, 20:25   #4
Toshibo
Пользователь
 
Регистрация: 12.09.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
GunSmoker, +1

как минимум:


скорее всего, должно быть наоборот, cells[i, 0] - сначала идёт индекс столбца, потом - строки...
странно, почему же тогда фиксированные поля заполняются верно? Разве в sg индексы отличаются от обычного двумерного массива?
Toshibo вне форума Ответить с цитированием
Старый 26.05.2012, 22:33   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Сделай отладочную функцию:
Код:
function GetCell(const AStringGrid: TStringGrid; const ACol, ARow: Integer): String;
begin
  if (ACol < 0) or (ACol >= AStringGrid.ColCount) then
    raise ERangeError.CreateFmt('Номер колонки (столбца) %d выходит за допустимый диапазон %d..%d', [ACol, 0, AStringGrid.ColCount - 1]); 
  if (ARow < 0) or (ARow >= AStringGrid.RowCount) then
    raise ERangeError.CreateFmt('Номер строки %d выходит за допустимый диапазон %d..%d', [ARow, 0, AStringGrid.RowCount - 1]); 
end;
И в коде все свои обращения к Cells замени на вызов GetCells.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка " is not a valid floating point value " (не правильная плавающая величина точки) kta87 Помощь студентам 5 27.09.2012 19:37
Ошибка is not a valid floating point value Gul'ka Общие вопросы Delphi 2 05.06.2011 02:58
is not a valid floating point value nexzis Помощь студентам 3 22.11.2010 13:55
s not a valid floating point value prod87 Помощь студентам 1 02.12.2009 20:57
при пустой ячейке выскакивает "is not a valid floating point value" ПОМОГИТЕ serserser Помощь студентам 17 14.11.2007 07:46