Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
3-84012
softmaster
2003-05-30 17:25
2003.06.26
Трабл с LOOKUP полем.


6-84485
Андрей_ВП
2003-04-22 11:20
2003.06.26
мапинг портов в Delphi


14-84651
AFrolov
2003-06-09 17:14
2003.06.26
подходы к составлению рассписания


3-83898
malamba
2003-06-03 09:37
2003.06.26
подключение к ODBC


14-84663
SPeller
2003-06-10 10:12
2003.06.26
Как вы думаете, это стОящее занятие или нет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский