Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

функция, которая возвращает матрицу [D7, Win2k]


Страницы:   1 2

Andarko ©   (2005-05-25 18:51:00) 

Как написать функцию, которая возвращала бы матрицу(по определенному алгоритму) и не ругалась бы!


TUser   (2005-05-27 11:29:00) [1]

> не стоит писать функцию, результирующую матрицу следует передавать через параметры процедуры

Почему? Чтобы выделять и освобождать память в вызывающей процедуре?


Erik1   (2005-05-27 11:23:00) [2]

И работать с указателями.
TMatrix = array of array of integer;
PMatrix = TMatrix^;
procedure My_Trans(.., const Matrix: PMatrix);
begin
SetLength(Matrix^, 2, 3);
...
End;
Я всегда работаю с указатеми если возникают сомнения с передачей параметров.


vl_chel   (2005-05-26 10:35:00) [3]

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


Andarko   (2005-05-26 08:08:00) [4]

Таки я нашел, почему у меня вылазит эта ошибка!
 Я то искал ошибку в динамических матрицах.
В одной из функций, возращающих динамичискую матрицу
используется статическаяматрица и идет присвоение её несуществующему элементу. %)


Просто Джо   (2005-05-25 23:28:00) [5]

Удалено модератором
Примечание: По модераторски это означает Р/О


Kolan   (2005-05-25 23:20:00) [6]

Удалено модератором
Примечание: По модераторски это означает Р/О


begin...end   (2005-05-25 20:48:00) [7]

> Kolan ©   (25.05.05 19:48) [19]

> Кстати как надо освободить память
> SetLength(M,0,0);
> Или SetLength(M,0);

Монопенисуально.


TUser   (2005-05-25 20:18:00) [8]

Я бы писал SetLength(M,0,0) не знаю даже почему.
И выделять так же - не нужен там цикл, если массив 'прямоугольный'.


Kolan   (2005-05-25 19:52:00) [9]


> как в справке делают

как в справке делают = так в справке делают


Kolan   (2005-05-25 19:48:00) [10]

Кстати как надо освободить память
SetLength(M,0,0);
Или SetLength(M,0);
А если

так выделять
SetLength(Matrix, Dimensionality);
 for I := Low(Matrix) to High(Matrix) do
   SetLength(Matrix[I], Dimensionality);
как в справке делают.


Просто Джо   (2005-05-25 19:43:00) [11]


>  [16] begin...end ©   (25.05.05 19:39)
> Как видно по [4], сложности всё-таки были :-)

Да, извини, я просто неправильно тебя понял.

А по поводу [4] - ну что тут скажешь? :*(


Просто Джо   (2005-05-25 19:41:00) [12]


>  [15] Kolan ©   (25.05.05 19:38)
> А это зачем?

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


begin...end   (2005-05-25 19:39:00) [13]

> Просто Джо ©   (25.05.05 19:37) [14]

> Поэтому и не понимаю сложности сабжа

Как видно по [4], сложности всё-таки были :-)


Kolan   (2005-05-25 19:38:00) [14]


> Просто Джо ©   (25.05.05 19:22) [11]

>  Result[5,5] := 10;

А это зачем?


Просто Джо   (2005-05-25 19:37:00) [15]


>  [12] begin...end ©   (25.05.05 19:31)
> > Просто Джо ©   (25.05.05 19:22) [11]
>
> > А в чем тут подвох?
>
> А он должен быть?


Я никакого подвоха в таком подходе не вижу. Обычнычнейший подход, как и с любой другой функцией. Псевдо-переменная Result имеет в теле функции тот же тип, что и возвращаемое функцией значение. Поэтому и не понимаю сложности сабжа, а так же почему "функция которая возвращает матрицу" отличается от функции, которая возвращает что-либо другое.
Из твоего замечания

> Ты бы эта... Код рабочий привёл

я сделал вывод, что ты утверждаешь, что по сабжу невозможно привести рабочий код. Вот и спросил, что ты имеешь в виду ;-)


TUser   (2005-05-25 19:35:00) [16]

> С этого места поподробнее.

В смысле? Если я получил матрицу M:=GetMatrix, то потом я где-то должен написать SetLength(M,0,0);


begin...end   (2005-05-25 19:31:00) [17]

> Просто Джо ©   (25.05.05 19:22) [11]

> А в чем тут подвох?

А он должен быть?


Просто Джо   (2005-05-25 19:22:00) [18]

[3] begin...end ©   (25.05.05 18:55)
> Ты бы эта... Код рабочий привёл. Для возвращения дин. массива
> из функции.


А в чем тут подвох?


function CreateMatrix (RowCount,ColCount: Integer): TMatrix;
begin
 SetLength (Result,RowCount,ColCount);
 Result[5,5] := 10;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Matrix: TMatrix;
begin
 Matrix := CreateMatrix(10,10);
 ShowMessage (IntToStr(High(Matrix)));
 ShowMessage (IntToStr(Matrix[5,5]));
end;


Andarko   (2005-05-25 19:16:00) [19]

СПАСИБО ВСЕМ!


begin...end   (2005-05-25 19:13:00) [20]

> Andarko ©   (25.05.05 19:06) [6]

type
 TMatrix = array [1..3] of array [1..2] of integer;

function GetMatrix: TMatrix;
begin
 ...
end


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо