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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2014, 20:46   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию В delphi 7 не предусмотрен возврат массива как результат работы функции?

В delphi 7 не предусмотрен возврат массива как результат работы функции?

При этом размер массива должен определяться в самой функции ( т.е. заранее не известен).
Illusiony вне форума Ответить с цитированием
Старый 18.12.2014, 21:08   #2
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

так через указатель на переменную
lollollollol вне форума Ответить с цитированием
Старый 18.12.2014, 21:21   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Я совсем поверхностно знаю delphi7. Могли бы привести пример использования?
Пример функции для эксперимента:
Код:
function sort_by_min(mas:array of Integer;max:integer):integer;
var mas_1,mas_2:array of integer;
i:Integer;
begin
  SetLength(mas_1, length(mas)); 
  SetLength(mas_2, length(mas));
i:=0;
  for i:=0 to length(mas)-1 do  begin
    mas_1[i]:=max[i]
  end;
  for i:=0 to length(mas)-1 do  begin
    mas_2[i]:=min_index_array(mas_1,100);
    mas_1[mas_2[i]]:=max;
  end;
  Result:=mas_2;
end;
Как в таком случае объявлять тип возвращаемого параметра функции?
Illusiony вне форума Ответить с цитированием
Старый 18.12.2014, 21:25   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
type TDunArray = array of Integer;

function TestDunArray(Count: integer): TDunArray;
var i: Integer;
begin
  SetLength(Result,Count);
  for i:=0 to Count-1 do Result[i]:=i;
end;

procedure TForm1.Button1Click(Sender: TObject);
var d: TDunArray;
    i: Integer;
begin
  d:=TestDunArray(4);
  for i:=0 to High(d) do Memo1.Lines.Add(IntToStr(d[i]));
  SetLength(d,0);
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.12.2014, 20:47   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

сделал так:
Код:
procedure TForm2.FormCreate(Sender: TObject);
//var test_mas_1:array[0..5] of Integer; //этот массив объявлен как глобальный
begin
test_mas_1[0]:=160;
test_mas_1[1]:=123;
test_mas_1[2]:=144;
test_mas_1[3]:=177;
test_mas_1[4]:=159;
test_mas_1[5]:=200;
end;
Код:
function min_index_array(mas:array of Integer;max:integer):integer;
var index,i:Integer;
begin
index:=-1;
i:=0;
  for i:=0 to length(mas)-1 do  begin
    if mas[i]<max then begin
      max:=mas[i];
      index:=i;
    end;

  end;
  Result:=index;
end;
Код:
type TReturnArray=array of Integer;

function sort_by_min(mas:array of Integer;max:integer):TReturnArray;//
var mas_1:array of integer;
//mas_2:TReturnArray;
i:Integer;
begin
  SetLength(mas_1, length(mas)); // 
  SetLength(Result, length(mas)); //
i:=0;
  for i:=0 to length(mas)-1 do  begin
    mas_1[i]:=mas[i];
  end;
  for i:=0 to length(mas)-1 do  begin
    Result[i]:=min_index_array(mas_1,100);
    mas_1[Result[i]]:=max;
  end;
end;
потом:
Код:
procedure TForm2.btn4Click(Sender: TObject);
var str:string;
array_1:TReturnArray;
i:Integer;
begin
  sort_by_min(test_mas_1,100);
end;
Выдает ошибку на этапе закрытия программы. Не на компиляции не на запуске и нажатии кнопки на форме, а после закрытия программы.

Последний раз редактировалось Illusiony; 19.12.2014 в 20:54.
Illusiony вне форума Ответить с цитированием
Старый 20.12.2014, 06:41   #6
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,987
По умолчанию

А если так:
Код:
function sort_by_min(mas:TReturnArray;max:integer):TReturnArray;//
var mas_1:TReturnArray;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 21.12.2014, 16:38   #7
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Все равно после закрытия программы ошибка.

Последний раз редактировалось Illusiony; 21.12.2014 в 17:00.
Illusiony вне форума Ответить с цитированием
Старый 21.12.2014, 17:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
после закрытия программы ошибка.
Причем текст ошибки как всегда... Ну ты понял, да?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.12.2014, 17:59   #9
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Причем текст ошибки как всегда... Ну ты понял, да?
Да я понимаю что не даю саму ошибку но что даст эта ошика, как обычно ошибка чтения по адресу 100500 и толку?
Выяснил что она ии за логической ошибки в коде.
Всем спасибо за ответы.
Illusiony вне форума Ответить с цитированием
Старый 21.12.2014, 19:13   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Просто так скажу:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }
  TReturnArray=array of Integer;
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var    a,b:TReturnArray;
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
function min_index_array(mas:TReturnArray;max:integer):integer;
var index,i:Integer;
begin
index:=-1;
i:=0;
  for i:=0 to length(mas)-1 do  begin
    if mas[i]<max then begin
      max:=mas[i];
      index:=i;
    end;

  end;
  Result:=index;
end;

function sort_by_min(mas:TReturnArray;max:integer):TReturnArray;//
var i:Integer;
begin
  SetLength(Result,Length(mas));
  for i:=0 to length(mas)-1 do  begin
    Result[i]:=min_index_array(mas,max);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 SetLength(a,10);
 b:=sort_by_min(a,0);
 SetLength(a,0);
 SetLength(b,0);
end;

end.
Проверил - все в порядке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача массива в функцию и возврат массива из функции Gstar C# (си шарп) 6 14.10.2012 00:38
Возврат массива из функции max_prorok Помощь студентам 2 06.10.2011 12:39
Результат функции в виде массива! Replicant Общие вопросы Delphi 3 18.03.2011 14:33
Как сделать возврат из функции VladimirVB Общие вопросы Delphi 5 28.08.2009 15:03
Как вывести результат работы php скрипта eldar Работа с сетью в Delphi 21 08.08.2008 14:16