Delphi возврат из функции

16.06.2018 Выкл. Автор admin

Получить из функции массив значений

При таком коде, в стринггрид вроде бы все норм записывается,но не тут то было — ерунда,данные совершенно беспорядочны, их больше не используешь, да и вообще если указать
result:=a[x]; вместо result:=a[1] цифры просто астрономические получаются.

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

получить таблицу значений функции
procedure TForm1.Button2Click(Sender: TObject); const a=2.5; dx=0.5; dy=0.25; var .

Получить таблицу из n значений функции ln(x)-x+1.8 на отрезке [2;3.5]
получить таблицу из n значений функции ln(x)-x+1.8 на отрезке

Напечатать массив Y значений функции
Ребята искренне извиняюсь, что пишу сюда. Необходимо сделать задание в: 1) Возможное содержимое.

Получить таблицу значений функции (одномерный массив)
Получить таблицу значений функции U, при изменении “х” от 1 до 3 с шагом 1 и .

Получить таблицу значений и найти произведение и количество положительных значений функции
Привет. не врублюсь, что неверно? или все верно? мозг кипит Imports System.Math Public Class.

type TMyArray: array [1..5] of integer;

Если применять для возврата стандартный тип массива — будут проблемы, если объявишь свой — их не будет.

type TMyArray: array [1..5] of integer;

Если применять для возврата стандартный тип массива — будут проблемы, если объявишь свой — их не будет.

Хм. вобщем я пробовал уже. а что дальше делать с ним?
допустим result:=a[x];
если писать его в стринггрид ругается что несовместимые типы (мой массив arr) .

Кстати прочитал тут что вроде как функция не может возвратить массив — это так?

Да точно. 0 вместо 1.В принципе ошибку понял,но все одно хрень получается.
В стрингрид выводятся рандомные данные, но работать с ними нельзя.

Может мне нужно получать не x:integer а a:Tarr?

type MyArray: array of integer;

function ololo:MyArray;
var arr:MyArray;
begin
result:=arr;
end;

и вообще, помойму чтобы редактировать данный в stringGrid надо goEditing:=true устанавливать.

тебе функция что должна вернуть? Integer? или Tarr.

ты пытаешься результату функции присвоить массивное значение. а сама функция возвращает только целое число

В общем, я хотел в функции создать одномерный массив <1..5>, рандомно записать в него 5 чисел соответственно.
И уже в процедуре по клику вывести его в стринггрид, а так же некоторые другие вычисления.

Не понимаю как вытащить этот массив значений из функции.
Если в возвр. значении указывать integer,то

вроде работает,только не очень то понятен смысл цикла «for x:=» — хоть 1 из 1,хоть 2 из 4 ставь -все одно в стринггриде радномные цифры,как и надо.
Сам не понял что натворил) Видимо для каждой ячейки стринггрида цикл forx:= рандомит свою циферку.
Но это не то что мне нужно-это не массив,т.к. мне нужно еще найти в нем все значения больше 15.

если сделать так как посоветовал olegoner, то да я так делал. НО не понимаю как получить значения из массив-в стринггрид не выведешь,ругается что inttostr не может использовать этот аргумент (tarr). Присваивать переменным? d(integer):=my(a);

Читайте так же:  Развод с банковской карточкой сбербанк

Как внутри процедуры(или функции) определить адрес возврата из нее?

Можно ли определить имя процедуры, функции или свойства из нее самой?
Можно ли определить имя процедуры, функции или свойства из нее самой.

Как с библиотекой xNet или без нее получить URL адрес страницы?
Сделал авторизацию вконтакте, хочу искусственно получить токен через приложение, суть в том, что.

Почему выделенная внутри функции память удаляется после возврата функции? Это можно исправить?
Вот пример функции, которая выделяет память под переменную, объявленную за её пределами: void.

При решении задач определить и использовать функции или процедуры.
Найти наименьшее общее кратное четырех заданных натуральных чисел.

При решении задачи определить и использовать функции или процедуры.
Тры прямые на площади заданные уравнениями. Если эти прямые попарно пересекаются и составляют.

чего это он должен «сильно» измениться? читайте доки по архитектуре (для какой кстати i386? x86_64, arm (ios, android)), смотрите ассемблерный вывод в отладчике, адрес возврата лежит сразу перед параметрами, если параметров нет, и локальных переменных тоже нет, то, по идее, сразу на вершине стека. но кроме того — есть еще и оптимизатор, может заинлайнить вашу процедуру и никаких адресов возврата.

А вообще, что за задача? зачем вам адрес возврата?

Процедура находится внутри dll, загруженной из основного кода. Когда я попадаю в процедуру, мне нужно знать откуда из основного кода был вызов этой процедуры? Код 32-х битный, виндовый.
Основной код менять нельзя.

Добавлено через 5 минут
Вернее даже нужно знать, не откуда вызвали процедуру, а куда вернемся после нее.

Вам нужен адрес в Вашем коде знать?

Если, допустим, процедура без параметров, то объявите переменную локальную, пусть она будет первой — она будет записана в стек первой (нужно проверить в отладчике), возьмите ее адрес — отнимите от него 4 байта — и там будет (?) адрес возврата. Один раз проверь в отладчике — куда попадает твоя локальная переменная и где, относительно нее находится адрес возврата (с учетом всех стек-фреймов, выравнивания и т.д.). Относительно просто это сделать в ollydb. и используй эту переменную и смещение потом для доступа к адресу.

Вопрос, получишь ты это значение, которое укажет куда-то в сегмент кода, что тебе это даст?

По крайней мере я еще не смог изменить свою процедуру в dll, которую пишу, так чтобы этот метод дал сбой.

Здравствуй, дорогой читатель. Сегодня я планирую рассказать о таком значимом элементе программирования как функции. А если быть точным, будем разбирать функции Delphi.

Начнем с общего определения:

Функция – фрагмент программного кода, который имеет свое имя. По этому имени данный фрагмент можно вызвать из любого места программы. Результатом выполнения функции Delphi является значение.

Объясню доступным языком, зачем нужны функции. Представьте себе ситуацию, что Вам в программе нужно несколько раз вычислять площадь квадрата. Вместо того, чтобы каждый раз писать один и тот же код, Вы можете объявить функцию и просто вызывать её в нужном месте. Если ещё не совсем понятно зачем все это нужно, советую прочесть статью до конца и на примерах станет все ясно.

Читайте так же:  Примеры брачного договор

Давайте разберем как определить функцию.

Итак, в начале идет ключевое слово function, затем имя функции. Далее в круглых скобках список параметров. Также необходимо указать тип возвращаемого результата. При необходимости можно определить локальные переменные. Между операторных скобок (begin..end;) необходимо записать требуемые инструкции.

В каждой функции Delphi автоматически создает переменную с именем result, переменная имеет тот же тип, что и возвращаемое значение функции. С помощью этой переменной мы и будем возвращать значения. (Есть еще одна возможность вернуть значение, её я продемонстрирую на примере).

В функцию можно передавать параметры разных типов: значения, константы, переменные, выходные параметры. Но это тема отдельной статьи, которую я напишу чуть позже.

Разберем применение функций Делфи на простом примере.

Создайте новое приложение и на форме разместите три кнопки (Button).

Далее откройте код и будем писать функцию, цель которой будет возвращать квадрат числа. Описание у нас будет вне класса после строк:

Сама же функция будет иметь следующий вид:

Название – square, параметр всего один – x типа Double, результат тоже будет Double.

Делфи позволяет возвращать значения через переменную, название которой совпадает с названием функции Delphi. В нашем случае это выглядит так: square:=x*x;(закомментированный код).

Теперь посмотрим как можно использовать написанный код. Напишем обработчик события Onclickдля каждой из кнопок.

  • Для первой кнопки — ShowMessage(FloatToStr(square(1)));
  • Для второй — ShowMessage(FloatToStr(square(2)));
  • Для третей — ShowMessage(FloatToStr(square(3)));

У меня получился следующий Unit

Как можно заметить мы однажды определили функцию, а использовали её трижды. Если функция была бы побольше, мы бы сэкономили уйму времени и сил, сократили количество вводимого текста. Модифицировать программу также легче, если Вы используете функции – поправив тело функции вы изменяете логику на всех участках, где она используется.

Подведем итог. Функции делают разработку на Делфи проще и быстрее, код читабельнее, правку проще. Используйте фунуции Delphi.

Процедуры и функции

Функция — это подпрограмма, т. е. последовательность инструкций, имеющая имя.

Процесс перехода к инструкциям функции называется вызовом функции или обращением к функции. Процесс перехода от инструкций функции к инструкциям программы, вызвавшей функцию, называется возвратом из функции.

В общем виде инструкция обращения к функции выглядит так:

Переменная := Функция (Параметры) ;

  • переменная — имя переменной, которой надо присвоить значение, вычисляемое функцией;
  • Функция — имя функции, значение которой надо присвоить переменной;
  • Параметры — список формальных параметров, которые применяются для вычисления значения функции. В качестве параметров обычно используют переменные или константы.

Следует обратить внимание на то, что:

  • каждая функция возвращает значение определенного типа, поэтому тип переменной, которой присваивается значение функции, должен соответствовать типу функции;
  • тип и количество параметров для каждой конкретной функции строго определены.

Программирование Delphi

Все о программировании.

Массив как возврат функции и параметр метода

Массивы в Delphi позволяют нам обращаться к ряду переменных под одним именем и использовать индекс для обращения к определенной переменной.

Читайте так же:  На что имеет право подросток в 16 лет

В примере массив целых чисел, который содержит семь значений (целых чисел).

Обратите внимание , что этот установленный размер — это объявление статического массива в Delphi.

Массив как возврат функции

В Delphi функция — это подпрограмма, которая возвращает значение.

Если Вы хотите, чтобы функция возвратила переменную типа массив, Вы можете соблазниться использовать следующее объявление функции:

Когда Вы попробуете скомпилировать данный код, Вы получите следующую ошибку компиляции:

[Pascal Error] E2029 Identifier expected but ‘ARRAY’ found.

Очевидно, что когда Вы объявляете функцию, которая возвращает значение массива, Вы не можете включать объявление индексов определенного типа.

Чтобы позволить функции возвращать значение массива, Вы сначала должны создать тип массива, затем использовать его как возвращаемый тип функции, например:

Массив как свойство Метода/Подпрограммы

Используется точно так же, как при возвращении массива функции, когда Вы объявляете подпрограмму, которая получает параметры как массив:

Delphi возврат из функции

Здравствуйте, Аноним, Вы писали:

А>как на паскале (в частности дельфи) возратить фунцкцией несколько (небольшое количество 3-4 значения).
А> Можно ли это сделать без указателей ?

Здравствуйте, Аноним, Вы писали:

А>как на паскале (в частности дельфи) возратить фунцкцией несколько (небольшое количество 3-4 значения).
А> Можно ли это сделать без указателей ?

К вышесказанному: либо пользуй var параметры.

Здравствуйте, Sinclair, Вы писали:

S>Я не помню, в какой версии Object Pascal это ввели. По-моему, это с D2.

по-моему — с первой или с Borland Pasclal 7.0.

Здравствуйте, , Вы писали:

А>как на паскале (в частности дельфи) возратить фунцкцией несколько (небольшое количество 3-4 значения).
А> Можно ли это сделать без указателей ?
вариант 1 — структура : см. тут

вариант 2 — var параметры:

вариант 3 — out параметры пользовать слово out вместо var а так — все как в предыдущем примере:

вариант 4 — аозвращать массив значений как — сам догадайся (hint: можно и через var и через out и скомбинировать )
вариант 5 — возвращать значение типа variant, которое генерируется так:

ограничение — все результаты должны быть совместимы с Variant.
плюсы — можно вернуть более сложный результат. типа так:

ну. если мало — еще добавим