Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2009, 21:36   #1
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию Массив в качестве параметра

Можно ли из функции возвращать массив целиком?
К примеру - вот функция преобразования числа (N_dec: byte) в двоичный код ( массив - mas_bit[0..7]). В примере пока возвращается значение одного из битов ( mas_bit[_bit]).
Код:
function Dec_Bin(N_dec: byte; _bit: byte): byte;
var i: byte;
    weight: byte;  // "вес" разряда
begin
  weight:= 128;
  for i:= 0 to 7 do
  begin
    mas_bit[i]:= N_dec div weight;
    if mas_bit[i] = 1 then N_dec:= N_dec - weight;
    weight:= weight div 2;
  end;
  Result:= mas_bit[_bit];// хочется иметь результатом не один бит,
                               // а весь массив 
И дальше - а массив можно передать в функцию в качестве параметра?
Вот обратная функция преобразования двоичного кода в десятичное число. Здесь и выше массив (mas_bit[0..7]) объявлен глобально.
Код:
function Bin_Dec: byte;
var i: byte;
    weight: byte;
    N_dec: integer;
begin
  N_dec:= 0;
  weight:= 128;
  for i:= 0 to 7 do
  begin
    N_dec:= N_dec + mas_bit[i] * weight;
    weight:= weight div 2;
  end;
  Result:= N_dec;
end;
Хотелось бы массив передавать в функцию как то так -
function Bin_Dec(mas: array of byte): byte;
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 15.10.2009 в 21:39.
DeKot вне форума Ответить с цитированием
Старый 15.10.2009, 21:37   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Типизируйте массив и передавайте в качестве параметра.
Код:
Type
 TMas:Array[0..5,0..5]:Byte;
Var
 Mas:TMas;

Procedure Givi(V:TMas);
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 15.10.2009, 21:50   #3
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Плюс к тому, что написал Alex Cones - всегда передавайте массив по var, это кстати и способ возвращать массив как результат
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 15.10.2009, 21:54   #4
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вот ЗДЕСЬ аналогично, но что то я не допонимаю и не получается, особенно с возвратом из функции массива.
Передача по значению и по ссылке (с var) - еще понятно.А вот вернуть массив.
Кто нибудь может коды в посте #1 подправит.
На этот код
Код:
type
  TForm1 = class(TForm)
  TMas: Array[0..7]: byte

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mas_bit: TMas;
  //mas_bit: array[0..7] of byte;

implementation
Дельфи ругается - " Expected an identifier but ARRAY found"
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 15.10.2009 в 22:12.
DeKot вне форума Ответить с цитированием
Старый 15.10.2009, 22:16   #5
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
TMas: Array[0..7]: byte
После имени типа должно быть =

Возвращать массив через return наверное всё-таки не следует. Лучше результирующий массив объявлять в программе и тоже передавать через var. Не могу ничего сказать абсолютно точно, но скорее всего, если функция возвращает массив через return, она честно запишет его на стеке, а потом вызывающая программа честно оттуда считает. Или же функции придётся выделять динамическую память, что тоже не очень гуд
Росли вроде умными, выросли дурнями... (c)А.Васильев

Последний раз редактировалось Greblin; 15.10.2009 в 22:24.
Greblin вне форума Ответить с цитированием
Старый 15.10.2009, 22:17   #6
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

TMas = array...
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 15.10.2009, 22:32   #7
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вроде бы получилось. Всем спасибо!
Код:
type
  TForm1 = class(TForm)

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMas = Array[0..7] of byte;

var
  Form1: TForm1;
  mas_bit: TMas;
  //mas_bit: array[0..7] of byte;

implementation

{$R *.dfm}

function Dec_Bin(N_dec: byte; {_bit: byte}): TMas;
var i: byte;
    weight: byte;  // "âåñ" ðàçðÿäà
begin
  weight:= 128;
  for i:= 0 to 7 do
  begin
    mas_bit[i]:= N_dec div weight;
    if mas_bit[i] = 1 then N_dec:= N_dec - weight;
    weight:= weight div 2;
  end;
  Result:= mas_bit; //[_bit];
end;

function Bin_Dec(mas_bit: TMas): byte;
var i: byte;
    weight: byte;
    N_dec: integer;
begin
  N_dec:= 0;
  weight:= 128;
  for i:= 0 to 7 do
  begin
    N_dec:= N_dec + mas_bit[i] * weight;
    weight:= weight div 2;
  end;
  Result:= N_dec;
end;

end.
Компилятор "съел", дальше уже в проекте добью.
Можно тему закрыть.
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 15.10.2009 в 22:34.
DeKot вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пользовательская функция с диапазоном в качестве параметра SanSanblch Microsoft Office Excel 2 29.05.2009 17:37
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57
Передача метода класса в качестве параметра в другой метод Dmytry87 Общие вопросы C/C++ 0 12.11.2008 15:28
Методы в качестве переменной DeKot Общие вопросы Delphi 7 31.10.2008 17:51
параметрический запрос с частью слова в качестве параметра yulia БД в Delphi 6 09.05.2008 20:27