Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как вернуть в функцию значение?(Delphi)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как вернуть в функцию значение?(Delphi)
Имя
Сообщение << Старые топики   Новые топики >>
Как вернуть в функцию значение?(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 тоже менял.
Post #: 1
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;
Post #: 2
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 16:13:29.410000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Ты знаешь, классный вопрос.
Но честно говоря, я бы несколько не так писал бы функцию.
Я бы сперва сравнил длину массива.
Ну так, для придания универсальности
Затем перебрал бы в цикле все элементы
при нахождении первого несоответсвия result:=false;
И на вход из функции: Exit;
Естественно, в начале функции result:=true;


Post #: 3
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 16:48:41.330000   
Oburec

Сообщений: 18
Оценки: 0
Присоединился: 2006-12-09 20:19:25.436666
quote:

ORIGINAL: WereWolf
У меня все правильно работает, если координаты векторов все таки одинаковые. Скорее всего, ошибка вот в чем: если V1[0]&lt;&gt;V2[0], то else не выполниться, …

Да в этом тоже была ошибка, только вот реальный код процедуры у меня немного другой был, ошибки не было, а сюда от балды написал.
Еще отличие в том, что массивы обьявлены как GlFloat(аналог single).
Смысл в том что первый массив криво передается, а операция с его участием не обрабатывается((
Пока заменил передаваемые параметры как Pointer-ы, в функции разыменовываю и работает нормально.Но эт борода, с поинтерами неудобно.
ЗЫ: Пробовал на другом компе, хотя первый массив имеет все тоже кривое соптимизированное значение, операции с ним все же выполняется и выделенная строка при дебаге V1[0] дает вполне нормальное значение.
Как все таки поправить первый передаваемый параметр…
Post #: 4
RE: Как вернуть в функцию значение?(Delphi) - 2007-01-27 18:35:35.460000   
WereWolf

Сообщений: 29
Оценки: 0
Присоединился: 2006-10-20 11:48:49.160000
quote:

Пробовал на другом компе, хотя первый массив имеет все тоже кривое соптимизированное значение, операции с ним все же выполняется и выделенная строка при дебаге V1[0] дает вполне нормальное значение.

Во-во, у меня точно так же, и работает все корректно. Видимо, что-то конкретно с твоей системой.
З.Ы. В школе по долгу учебы писал на паскале прогу для возведения числа в степень, она на любое число любой степени выдавала 6050. Абсолютно тот же код дома работал на 100% :)
Post #: 5
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как вернуть в функцию значение?(Delphi)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.