Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 667
от 01.12.2006, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 408, Экспертов: 63
В номере:Вопросов: 1, Ответов: 5


Вопрос № 64301: Подскажите, пожалуста... Есть динамический массив: en: array of double; я считываю цифры в этот массив: for c_:=0 to 57 do begin if E.Sheets.Item[1].Cells[a_,c_]<>'искл' then begin setlength(en,c_); en[c...

Вопрос № 64.301
Подскажите, пожалуста...
Есть динамический массив:
en: array of double;

я считываю цифры в этот массив:
for c_:=0 to 57 do
begin
if E.Sheets.Item[1].Cells[a_,c_]<>'искл' then
begin
setlength(en,c_);
en[c_]:=strtofloat(Trim(E.Sheets.Item[1].Cells[a_,c_]));
end;
end;

Затем мне нужно органзовать цикл расчета с использованием данных этого массива, например:
for i:=0 to n do
g:=1+en[i]

Теперь вопрос: как определить длинну массива динамического, какой в результате она получилась....т.е . в моем примере как определить n
Отправлен: 26.11.2006, 18:19
Вопрос задала: Артемова Марина (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Артемова Марина!

В вашем случае
n := High(en);

а вот SetLength у Вас вызывается не совсем правильно. Если условие хоть раз не выполнится, то у Вас в массиве появятся пустые элементы - для избежани яэтого я бы посоветовал использовать такой код:

len := 0;
for
...
if
begin
Inc(I);
SetLength(en, I);
...

и тогда после окончания цикла длина массива (искомое n) = I
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 6-ой класс)
Ответ отправлен: 26.11.2006, 18:29

Отвечает: monah
Здравствуйте, Артемова Марина!
Уточню. Функция High возвращает номер последнего элемента. А LenGth количество элементов. Для динамических массивов High = Length-1 всегда.
---------
festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 26.11.2006, 18:43

Отвечает: Sattar
Здравствуйте, Артемова Марина!
for i:=0 to high(en) do
g:=1+en[i];
Ответ отправил: Sattar (статус: 3-ий класс)
Ответ отправлен: 26.11.2006, 19:35

Отвечает: Писарев, Павел, Юрьевич
Здравствуйте, Артемова Марина!
Постаить счётчик количества элементов этого массива при его создании
Ответ отправил: Писарев, Павел, Юрьевич (статус: 2-ой класс)
Ответ отправлен: 26.11.2006, 21:49

Отвечает: Балашов Григорий
Здравствуйте, Артемова Марина!

В вашем случае я бы сделал так:

var en: array of double;
iCount: integer;

iCount := 0;
for c_:=0 to 57 do begin
if E.Sheets.Item[1].Cells[a_,c_]<>'искл' then begin
Inc(iCount);
setlength(en, iCount);
en[iCount - 1]:=strtofloat(Trim(E.Sheets.Item[1].Cells[a_,c_]));
end;
end;

Таким образом, в переменной iCount будет сохранено число элементов вашего массива. А вообще, это можно узнать с помощью функции length(). Например так:

...
iCount := Length(en);
...
Ответ отправил: Балашов Григорий (статус: 1-ый класс)
Ответ отправлен: 26.11.2006, 23:33


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное