Как вернуть в функцию значение?(Delphi)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Как вернуть в функцию значение?(Delphi) - 2007-01-27 15:38:55.730000
|
|
|
Oburec
Сообщений: 18
Оценки: 0
Присоединился: 2006-12-09 20:19:25.436666
|
На Delphi 7. Есть например такая функция сравнивающая 2 вектора [0..2](x,y,z). function CompareArray(const V1,V2:array of single):boolean; begin if V1[0]=V2[0] then if V1[1]=V2[1] then if V1[2]=V2[2] then Result:=true else Result:=false; end; При ее выполнении в локальных переменных ПЕРВЫЙ передаваемый массив имеет значение: inaccessible here due to optimisation.(выделил слово первый тк., проблема устраняется если передавать в функцию еще один пустой массив, тогда он имеет "с оптимизированное" значение.Но раздувать функцию мусором не хочется) Неприятности в том, что после выполнения первой строки функция завершает выполнение и Result никак не обрабатывается. Как исправить эту проблемму? Галочку в свойствах компилятора Optimisation убирал, Stack_Frames тоже менял.
|
|
|
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 16:09:00.500000
|
|
|
WereWolf
Сообщений: 29
Оценки: 0
Присоединился: 2006-10-20 11:48:49.160000
|
quote:
Неприятности в том, что после выполнения первой строки функция завершает выполнение и Result никак не обрабатывается. У меня все правильно работает, если координаты векторов все таки одинаковые. Скорее всего, ошибка вот в чем: если V1[0]<>V2[0], то else не выполниться, следовательно функция вернет значение по-дефолту. ИМХО, лучше написать так: function CompareArray(const V1,V2:array of single):boolean;
begin
if V1[0]=V2[0] then
if V1[1]=V2[1] then
if V1[2]=V2[2] then
begin
Result:=true;
exit;
end;
Result:=false;
end;
|
|
|
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 16:13:29.410000
|
|
|
alexbozhko
Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
|
Ты знаешь, классный вопрос. Но честно говоря, я бы несколько не так писал бы функцию. Я бы сперва сравнил длину массива. Ну так, для придания универсальности Затем перебрал бы в цикле все элементы при нахождении первого несоответсвия result:=false; И на вход из функции: Exit; Естественно, в начале функции result:=true;
|
|
|
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 16:48:41.330000
|
|
|
Oburec
Сообщений: 18
Оценки: 0
Присоединился: 2006-12-09 20:19:25.436666
|
quote:
ORIGINAL: WereWolf У меня все правильно работает, если координаты векторов все таки одинаковые. Скорее всего, ошибка вот в чем: если V1[0]<>V2[0], то else не выполниться, … Да в этом тоже была ошибка, только вот реальный код процедуры у меня немного другой был, ошибки не было, а сюда от балды написал. Еще отличие в том, что массивы обьявлены как GlFloat(аналог single). Смысл в том что первый массив криво передается, а операция с его участием не обрабатывается(( Пока заменил передаваемые параметры как Pointer-ы, в функции разыменовываю и работает нормально.Но эт борода, с поинтерами неудобно. ЗЫ: Пробовал на другом компе, хотя первый массив имеет все тоже кривое соптимизированное значение, операции с ним все же выполняется и выделенная строка при дебаге V1[0] дает вполне нормальное значение. Как все таки поправить первый передаваемый параметр…
|
|
|
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 18:35:35.460000
|
|
|
WereWolf
Сообщений: 29
Оценки: 0
Присоединился: 2006-10-20 11:48:49.160000
|
quote:
Пробовал на другом компе, хотя первый массив имеет все тоже кривое соптимизированное значение, операции с ним все же выполняется и выделенная строка при дебаге V1[0] дает вполне нормальное значение. Во-во, у меня точно так же, и работает все корректно. Видимо, что-то конкретно с твоей системой. З.Ы. В школе по долгу учебы писал на паскале прогу для возведения числа в степень, она на любое число любой степени выдавала 6050. Абсолютно тот же код дома работал на 100% :)
|
|
|
|
|