Главная страница
    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.037 c
3-1156827594
Layner
2006-08-29 08:59
2006.10.22
Не могу прогнать запрос из Delphi в бд Access, поле с датой..


11-1135254985
BaryVetaL
2005-12-22 15:36
2006.10.22
Разработка конвертора VCL to KOL


2-1160372942
Roman_ln
2006-10-09 09:49
2006.10.22
Как защитить прогу


15-1159200709
Ломброзо
2006-09-25 20:11
2006.10.22
Проверьте себя на русскость


2-1160093162
БезИмени
2006-10-06 04:06
2006.10.22
Просмотреть все компоненты





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