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

Вниз

Проверка индекса для массива   Найти похожие ветки 

 
learner ©   (2006-10-02 23:08) [0]

Был глюк в програме. Еле нашла место.
Эта процедура не всегда срабатывала правильно ( когда ей захочется )
При верных индексах выдавала False
function QueryIndex(const i, j: integer; const Arr: TDblInfoArr): Boolean;
begin
Result:=(i in [Low(Arr)..High(Arr)]) and (j in [Low(Arr[i])..High(Arr[i])]);
end;
Переписала ее:
function QueryIndex(const i, j: integer; const Arr: TDblInfoArr): Boolean;
var
Test: Boolean;
begin
Result:=(i in [Low(Arr)..High(Arr)]) and (j in [Low(Arr[i])..High(Arr[i])]);
Test:=(i >= Low(Arr)) and (i <= High(Arr)) and (j >= Low(Arr[i])) and (j <= High(Arr[i]));
if Result <> Test
 then ShowMessage(IntToStr(i) + "=" + IntToStr(j) + #13#10 +
                  IntToStr(Low(Arr)) + "=" + IntToStr(High(Arr)) + #13#10 +
                  IntToStr(Low(Arr[i])) + "=" + IntToStr(High(Arr[i])));
end;
И, иногда, выдается ошибка типа:
0=19
0=32
0=272
Тупо смотрю и не понимаю, как такое может быть ?
Или может мне уже в дворники пора ?
P.S.
На всякий случай
type
TInfo = record
  // bala -bala
 end;
TInfoArr = array of TInfo;
TDblInfoArr = array of TInfoArr;


 
guav ©   (2006-10-02 23:20) [1]

> (i in [Low(Arr)..High(Arr)])

Тип set ограничен 0..255, т.к. индексы могут не вписываться в диапазон, следует использовать вариант

> Test:=(i >= Low(Arr)) and (i <= High(Arr)) and (j >= Low(Arr[i])
> ) and (j <= High(Arr[i]));


 
guav ©   (2006-10-02 23:24) [2]

т.е. код

> Result:=(i in [Low(Arr)..High(Arr)]) and (j in [Low(Arr[i])
> ..High(Arr[i])]);
для массивов длинее 255 неверен. Не проверял, но предполагаю, что High(Arr) приводится к Byte, потому он всё же компилируется.

Для автоматической проверки диапазонов в рантайм с выбросом исключений при нарушении следует использовать {$RANGECHECKS ON}


 
learner ©   (2006-10-03 10:32) [3]

Спасибо !



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

Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.041 c
2-1159669801
lobach
2006-10-01 06:30
2006.10.22
Получение символов


2-1160034776
o_serg
2006-10-05 11:52
2006.10.22
TreeView с CheckBox ами


15-1159897272
SergP
2006-10-03 21:41
2006.10.22
Очень срочно подскажите.....


15-1159783478
Slider007
2006-10-02 14:04
2006.10.22
С днем рождения ! 1 октября


6-1149075767
DelphiN!
2006-05-31 15:42
2006.10.22
Отсылка письма с вложением через Indy 10





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