Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> функция, как вернуть несколько значений? 
:(
    Опции темы
Syned
  Дата 13.7.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 7.7.2005

Репутация: нет
Всего: 1



Есть допустим функция поиска подстроки в строке. Мне нужно чтобы эта функция возвращала одновременно позицию и размер найденого текста (не буду объяснять зачем размер текста), но суть в том что вернуть нужно два или более значений. Возможно ли такое?
--------------------
Поссы в сугроб почувствуй себя лазером!
PM MAIL ICQ   Вверх
Chrisstoff
Дата 13.7.2005, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.5.2005
Где: Hell... жудкое ме сто

Репутация: нет
Всего: 1



ну типа так ...
Код

function myf(var param1: Integer; var ...): Integer;
begin
...

PM MAIL ICQ   Вверх
Syned
Дата 13.7.2005, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 7.7.2005

Репутация: нет
Всего: 1



Chrisstoff, это не то, у тебя возвращает один integer а надо например два...
--------------------
Поссы в сугроб почувствуй себя лазером!
PM MAIL ICQ   Вверх
Chrisstoff
Дата 13.7.2005, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.5.2005
Где: Hell... жудкое ме сто

Репутация: нет
Всего: 1



Это как раз самое то ...
вот те живой пример если так не понятно...
Код

var
  j: Integer;
procedure my(var i: Integer): Integer;
begin
  i := 5;
  my := 4;
end;

begin
  Writeln(my(j));
  Writeln(j);
  Readln;
end.

как видишь функции передаётся имя переменной в которую будет возвращено значение ...

PM MAIL ICQ   Вверх
_hunter
Дата 14.7.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



функция может _вернуть_ только один параметр ( зачем может понадобится несколько -- не понимаю ), но если оччччень хочеться -- можно возвращать структуру...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Bes
Дата 14.7.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Все правильно - функция возвращает один параметр, но часто быват удобнее а иногда просто необходимо чтобы функция возвращала нечто, что невозможно описать только одним параметром. Тогда если процедура является частью некоторой концепции то да - правильнее будет описать структуру однако если функция имеет частный характер и подобная структура больше нигде не используется то не нужно заморачиваться и проще передать пару варовских параметров.
Мое мнение.
PM MAIL   Вверх
Vit
Дата 14.7.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Syned @ 13.7.2005, 12:25)
Есть допустим функция поиска подстроки в строке. Мне нужно чтобы эта функция возвращала одновременно позицию и размер найденого текста (не буду объяснять зачем размер текста), но суть в том что вернуть нужно два или более значений. Возможно ли такое?



Вариант первый:

Код

Procedure GetSubstringParam(Str, substr:string; out position, len:integer);
begin
   position:=pos(substr, str);
   len:=length(substr);
end;

Использование:
  var p, l:integer;
...
  GetSubstringParam('Строка', 'тр', p, l);
  можно убедится что после выполнения p и l содержат правильные значения


Вариант второй:

Код

type TMyRec=record
    position:integer;
    len:integer;
  end;      

Function GetSubstringParam(Str, substr:string):TMyRec;
begin
   result.position:=pos(substr, str);
   result.len:=length(substr);
end;

Использование:
  var r:TMyRec;
...
  p:=GetSubstringParam('Строка', 'тр');
  можно убедится что после выполнения r.position и r.len содержат правильные значения




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Bes
Дата 15.7.2005, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2Vit:
Я конечно не Ален Д'Лон но помоему если в вашем коде не поставить перед переменными Var то работать не будет т.к. параметры просто скопируются а не передадутся ссылки на них. или что это там за OUT?
PM MAIL   Вверх
vadims
Дата 15.7.2005, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: нет
Всего: 17



Syned
Может быть я просто еще не проснулся и не въезжаю в суть проблемы, но на первый взгляд - функция по сути своей может вернуть только 1 параметр - а вот процедура в паскале может иметь хоть 1000 выходных переменных
Вообщем имхо проблема совсем надуманнная




--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Chrisstoff
Дата 15.7.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 28.5.2005
Где: Hell... жудкое ме сто

Репутация: нет
Всего: 1



Цитата
функция по сути своей может вернуть только 1 параметр - а вот процедура в паскале может иметь хоть 1000 выходных переменных

... так же как и процедура функция без проблем возвращает эти же самые переменные ...
проблему раздули из ничего чес слово ... написал var тебе значение и вернулось ... почему у фсех сложилось мнение что процедура возвращает дофига чего а функция тока одно значение ... это что пишут в литературе ... какой??
PM MAIL ICQ   Вверх
vadims
Дата 15.7.2005, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 8.6.2005

Репутация: нет
Всего: 17



Chrisstoff
Суть процедуры - что то делаем и мб что-то возвращаем - если не в падло

Имхо


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0664 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.