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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> двумерный массив как параметр, передать двумерный динамический м-в 
:(
    Опции темы
physic
Дата 19.1.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не получается передать двумерный динамический (да и статический) массив в качестве параметра

MyFunc(A: array of array of real);
MyFunc(A: array[1..2,1..2] of real);

Что же неправильно?
PM MAIL   Вверх
Snowy
Дата 19.1.2005, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Передай указатель на массив.
PM MAIL   Вверх
physic
Дата 19.1.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Snowy, а не мог бы ты показать, как это запишется? заранее благодарен
PM MAIL   Вверх
Snowy
Дата 19.1.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

type
 TRealArray=array[0..9] of real;

var
 a: TRealArray;

function MyFunc(r: TRealArray):real;
begin
 result:=r[0]+r[1]-r[2];
end;

begin
 a[0]:=4.321; a[1]:=3.210; a[2]:=1.234;
 WriteLn(MyFunc(a));
 readln;
end.


Это сообщение отредактировал(а) Snowy - 19.1.2005, 16:23
PM MAIL   Вверх
EKoshelev
Дата 20.1.2005, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно ещё как поинтер передавать. Только это уже половое извращение.


--------------------
Вежливым и адекватным предлагаю общаться на "ты".
PM MAIL   Вверх
Snowy
Дата 20.1.2005, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Я так и написал. Поинтер это и есть указатель.
Можно сделать и с указателем, но данное решение более понятно и удобней для работы.
PM MAIL   Вверх
Петрович
Дата 20.1.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



А в чем проблемма то.
У меня нормально транслируется такое:

Код

type
 tMyArray = array[1..2,1..2] of real;

procedure Test (a :tMyArray);
begin
 //
end;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Bes
Дата 21.1.2005, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Позволю себе обновить вопрос.
А как быть с динамическими массивами.
PM MAIL   Вверх
Петрович
Дата 21.1.2005, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Аналогично.
Код

type
tMyArray = array of array of real;

procedure Test (a :tMyArray);
begin
//
end;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Bes
Дата 21.1.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2Петрович: Хм.... а у меня почему-то не получалось - попробую еще раз.
PM MAIL   Вверх
Петрович
Дата 21.1.2005, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Здесь важно что-бы было отдельное определение типа. Т.е. такое недопустимо:
Код

procedure Test (a :array of array of real);
begin
//
end;



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Bes
Дата 21.1.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



2Петрович: Да, да видимо в этом и дело....
PM MAIL   Вверх
Дрюча
Дата 21.1.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.1.2005
Где: Delphi & Pasc al

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



smile

Если в процедуре не надо менять массив, а, допустим надо посчитать сумму его элементов, и если этот массив одномерный, то пройдет и такое:

Код


function Sum(mass: array of integer):integer;
var
i:integer;
begin
Result:=0;
for i:=Low(mass) to High(mass)  do
 Result:=Result + mass[i];
end;


<...>
const
m = -12;
n = 123;

var
a:array [m..n] of integer;

begin
{Заполняем...}
ShowMessage(IntToStr(Sum(a)));
end;

PM   Вверх
Петрович
Дата 21.1.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
function Sum(mass: array of integer):integer;
var
i:integer;
begin
Result:=0;
for i:=Low(mass) to High(mass)  do
Result:=Result + mass[i];
end;

В данном примере используется не динамический массив а открытый массив. Это немножко разные вещи.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Дрюча
Дата 21.1.2005, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.1.2005
Где: Delphi & Pasc al

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



Да, но если мы будем передавать этой функции динамический массив, то сработает!

Код

var
a:array of integer;

begin
SetLength(a, 12);
<...>
ShowMessage(IntToStr(Sum(a)));
end;

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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