Главная страница
    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.027 c
1-84134
Vulko
2003-06-08 11:13
2003.06.26
Положение текстового курсора.


1-84120
Melamed
2003-06-10 21:13
2003.06.26
Странная вешь обнаружена в демках


4-84824
Василий Петрович
2003-04-19 19:36
2003.06.26
Вопрос про едит


1-84365
Scorpx
2003-06-16 21:10
2003.06.26
Программное присвоение события.


14-84528
Дмитрий К.К.
2003-06-06 05:11
2003.06.26
Именинники 6 июня





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский