Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.06.2009, 21:00
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию Вопрос по функциям

Всем привет. Подскажите пожалуйста как получить результат работы функции, понимаю вопрос глупый, но все же не знаю как это сделать =)
есть функция:
Код:
function TStreetShow.GetStreetLength(index: integer): string;
begin
  Result:=self.FLength[index];
end;
Как я понимаю переменную Result не нужно нигде объявлять, она существует по умолчанию в дэлфи, как переменная для возврата результата работы функции. В нее я заношу нужные мне данные. Далее я пытался извлеч эти данные из функции следующим образом:
procedure TForm1.FShowClick(Sender: TObject);
Код:
begin
  FMyStreetsLength.Lines.Add(MyStreetShow.GetStreetLength(1));
end;
тут FMyStreetLength - компонент Memo, в него я пытаюсь занести то, что функция выполнила.
Результат- в Memo появляется пустая строка.
Заранее спасибо.

Последний раз редактировалось davin4u, 13.06.2009 в 21:18.
Ответить с цитированием
  #2  
Старый 13.06.2009, 21:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну поскольку вроде все правильно, предположу, что Result:=self.FLength[index] - действительно пустота. Проверьте отладчиком, что там реально находится, есть у меня подозрение, что вы с индексом элемента в массиве что-то путаете.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.06.2009, 00:25
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

Спасибо, нашел где была ошибка
Ответить с цитированием
  #4  
Старый 18.06.2009, 20:19
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

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

вот пример того как я пытался делать:
Код:
Function GetMass(var num1:integer; num2:integer):integer;
begin
  Result:=num1+num2;
end;
заранее благодарен
Ответить с цитированием
  #5  
Старый 18.06.2009, 20:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Зачем вам здесь var в описании? Почитайте про передачу параметров.
Код:
Function GetMass(num1,num2:integer):integer;
begin
  Result:=num1+num2;
end;

Можно и двумерный массив:
Код:
Type
  TDualArray = array[1..2,1..2] of integer;

function DualArray: TDualArray;
begin

end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 18.06.2009, 21:59
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

Попробовал сделать чтобы результатом работы функции был двумерный массив, возникла новая проблема =(
как теперь занести в другой массив результат работы функции? mass:=Board.DualArray, не выходит, ошибка в типах данных, mass-массив, а DualArray- класс TDualArray ?
Ответить с цитированием
  #7  
Старый 18.06.2009, 23:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Покажите какой именно тип у mass
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #8  
Старый 19.06.2009, 00:31
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

Код:
mass: array [1..8,1..8] of integer;
Ответить с цитированием
  #9  
Старый 19.06.2009, 08:07
Аватар для :S.p.a.m.
:S.p.a.m. :S.p.a.m. вне форума
Активный
 
Регистрация: 04.05.2008
Сообщения: 260
Репутация: 15
По умолчанию

Цитата:
Сообщение от Страдалецъ
Зачем вам здесь var в описании? Почитайте про передачу параметров.
А затем и нужен чтобы значения из процедуры или функции возвратились наружу. Человеку чего нада? - чтобы функция возвратила два значения. Вот так и можно сделать это, правда можно вместо функции процедуру.
Подаем в нее две переменных, они каким то образом изменяются (уже внутри процедуры) и результат их изменения идет уже наружу в те же переменные, которые были поданы в качестве параметров в процедуру. Из-за двух переменных заводить массив както не так. Хотя я не знаю что это за переменные и какая стоит задача - может быть и правильное решение.
Ответить с цитированием
  #10  
Старый 19.06.2009, 16:26
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

В функции у меня получается массив данных, и мне его нужно вывести наружу, т.е. после того как функция все сделала что нужно было, переменной Result присваивается двумерный массив. Как мне теперь присвоить массиву находящемуся за пределами функции, значение этого Result ?
Ответить с цитированием
  #11  
Старый 19.06.2009, 21:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
А затем и нужен чтобы значения из процедуры или функции возвратились наружу...
Мне-то как-раз это понятно, только вот в приведенном примере параметр переданный таким способом никак не обрабатывается и следовательно передавать его как var или out бессмысленно. Кроме того, судя по сообщению об ошибке, он в этот параметр пытался константу запихать. И какой вывод напрашивается?

А ошибка у вас возникает, потому как надо было задавать тип переменной и результат функции одинаковым, а не похожим внешне:
Код:
mass: TDualArray;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 19.06.2009 в 21:45.
Ответить с цитированием
  #12  
Старый 19.06.2009, 23:14
davin4u davin4u вне форума
Прохожий
 
Регистрация: 21.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

теперь все работает, спасибо за помощ
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter