Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Подскажите код дает ощибку   Найти похожие ветки 

 
R   (2003-06-11 04:28) [0]

Мастера что то я запутался вроде бы делал это сто раз но код дает ошибку, я заполняю массив целыми числами из мемо изначально числа вещественные я отбрасываю дробную часть
procedure TForm1.Fg;
var
I,J,FACount:Integer;
FA: array of Integer;
begin
FACount:=Memo1.Lines.Count-1;

SetLength(FA,FACount);
For I:=0 To FACount Do
begin
try
J:= Trunc(StrToFloat(Trim(Memo1.Lines[I])));
except
J:=1;
Beep;
end;
FA[I]:=J;
end;
end;
Подскажите в чем проблемма?


 
Babay ©   (2003-06-11 04:38) [1]

Разложи свою строку на отдельные участки и найдешь свою проблему.

J:= Trunc(StrToFloat(Trim(Memo1.Lines[I])));

заменить например на

S:=Trim(Memo1.Lines[I]);
f:=StrToFloat(s);// ошибка наверное будет здесь
j:=Trunc(f);

и еще может проблема в разделителе дробной части? У тебя в винде например запятая а ты вводишь точку вот и ошибка.

да еще сразу как то просмотрел

For I:=0 To FACount Do ????

For I:=0 To FACount-1 Do !!!!!


 
Думкин ©   (2003-06-11 05:00) [2]

Про FAcount все верно, но длина твоего массива неверна.
надо так:
SetLength(FA,FACount+1);



 
Babay ©   (2003-06-11 05:26) [3]

To Думкин
А зачем лишний элемент в массиве?


 
Spawn ©   (2003-06-11 05:38) [4]

Это не лищний элемент в массиве. При задании размерности массива, необходимо указывать КОЛИЧЕСТВО его элементов, т.е. отсчет начинается с 1. При обращении к элементу массива на последней итеррации будет ошибка, если не задать FACount+1, поскольку произойдет обращение к несуществующему элементу. Да и вообще FACount должен быть равен Memo1.Lines.Count в данном случае, чтобы использовать все строки Memo.


 
Babay ©   (2003-06-11 05:47) [5]

To Spawn
Я это все прекрасно понимаю но человек задает (в силу какихто причин)размерность массива так

SetLength(FA,FACount);
следовательно ->
например длина массива FACount=6 нумерация его будет
0,1,2,3,4,5
перебор в цикле выглядеть должен так:
For I:=0 To FACount-1 Do
Вы же предлогаете сделать человеку массив на один элемент длинее... Зачем??

а насчет
-> Да и вообще FACount должен быть равен Memo1.Lines.Count в данном случае, чтобы использовать все строки Memo.

А если у человека предпологается наличие пустой строки в конце?
Тут нужно смотреть уже реализацию программы :=)


 
Думкин ©   (2003-06-11 06:19) [6]

>
> Babay © (11.06.03 05:47)

Предполагать может бабушка.
По приведенному коду надо делать так как и описано у > Spawn © (11.06.03 05:38)


 
Думкин ©   (2003-06-11 06:22) [7]


> Babay © (11.06.03 05:47)
> For I:=0 To FACount-1 Do

Это откуда? Ведь чел приводит так:
> For I:=0 To FACount Do

Не надо домысливать.


 
R   (2003-06-11 06:32) [8]

Всем спасибо, ошибку нашел с вашей помощью массив имел длину на единицу значений меньше, т.е. действительно надо было сделать так
SetLength(FA,FACount+1);


 
Babay ©   (2003-06-11 09:21) [9]

Нда ...
Интересный подход.
Заводим переменную которая должна содержать кол-во элементов массива.
Делаем ее на 1 меньше чем надо бы...
Затем создаем массив всетаки на 1 ед больше...
Т.о. в массиве например 6 елементов но наша перемнная показывает 5
.... интересный подход.....
(ну я так понимаю это все таки чтобы враги недогадались)
нда ...
удачи, главное что заработало....


 
VMcL ©   (2003-06-11 11:42) [10]

>R (11.06.03 04:28)

procedure TForm1.Fg;
var
I, J, FACount: integer;
FA: array of integer;
begin
FACount := Memo1.Lines. Count; // - 1;

SetLength(FA, FACount);
for I := 0 to FACount - 1 do
begin
try
J := Trunc(StrToFloat(Trim(Memo1.Lines[I])));
except
J := 1;
Beep;
end;
FA[I] := J;
end;
end;


>Подскажите в чем проблемма?

В ДНК.


 
Palladin ©   (2003-06-11 12:05) [11]

Точно млин, там ошибка...


 
VG   (2003-06-11 12:16) [12]

Так как каждой ячейки массива соответствует строка в Мемо то можно массив, используемый "R" записать так:
For I:=0 To High(FA) Do
begin
try
J:= Trunc(StrToFloat(Trim(Memo1.Lines[I])));
except
J:=1;
Beep;
end;
FA[I]:=J;
end;
end;
тут не будет выскакивать сообщение об ошибке, но не будут просчитываться все данные, которые были занесены в Мемо (Если использовать первоначальный вариант).



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
3-83961
DBDev
2003-05-29 14:01
2003.06.26
Коллеги, помогите в качестве вычисляемого поля FLOAT впихнуть...


8-84454
Smok_er
2003-03-11 19:10
2003.06.26
Конвертирование BMP -> TIFF


14-84614
Vovchik_A
2003-06-04 11:10
2003.06.26
Спам !


1-84433
Эстонец
2003-06-09 18:37
2003.06.26
Диалог смены иконки


4-84816
sucer
2003-04-22 10:09
2003.06.26
Проблема с HOOK N2.Как перехватить?