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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2010, 12:56   #1
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию копирование из одного двумерного массива в другой

помогите разобраться, есть ли такая функция, которая копирует значения из одного двумерного массива в другой, конечно не присвоением в цикле соответствующих элементов массивов - это я и сам умею, но для моей задачи не подходит. Массивы одинаковой длины.
Код:
var
  Mass1, Mass2: Array[0..9, 0..4] of Integer;
для одномерных есть такая функция
Код:
var
  Mass1, Mass2: array[0..9] of Integer;

......

  Mass2 := Copy(Mass1, 1, 10);
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 08.10.2010, 13:02   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

procedure Move ( const SourcePointer; var DestinationPointer; CopyCount : Integer ) ;
и еще
function Copy ( Source : array; StartIndex, Count : Integer ) : array;
Копия части массива

Первый элемент массива имеет индекс = 0.

Возвращает массив состоящий из указанных в Count количестве элементов, начиная с индекса .

Если до конца массива меньше элементов, чем указано в Count, то копируются все элементы начиная с StartIndex и до конца массива.

Сорри, не обратил внимания на двумерность массивов...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 08.10.2010 в 13:10.
Grag вне форума Ответить с цитированием
Старый 08.10.2010, 13:24   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Такой штатной функции нет.
А Move и Copy не подойдут.
Move из-за того что копирует непрерывный участок памяти, а как выделится память под массивы одному господу известно. Во всяком случае рисковать я бы не стал.
Copy работает только с динамическими массивами. А такой код просто не скомпилируется:
Код:
var
  Mass1, Mass2: array[0..9] of Integer;
......
  Mass2 := Copy(Mass1, 1, 10);
Скандербег вне форума Ответить с цитированием
Старый 08.10.2010, 13:35   #4
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

если нету штатных функций, тогда как мне организовать у созданного мною класса property, которое является двумерным массивом и потом, чтобы можно было обращаться к элементам массива (заполнять и считывать)???
Код:
type TDoubleArray = array[0..9, 0..4] of integer;

type
  TMassiveRep = class
  private
    FMassive: TDoubleArray;
    procedure SetMassive(const Value: TDoubleArray);
  published
    property Massive: TDoubleArray read FMassive write SetMassive;
  end;
так оно работать не хочет говорит "Published property 'Massive' cannot be of type ARRAY"
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 08.10.2010, 13:47   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, если массивы статические, то, скорее всего (на 99%) память под них выделяется сплошняком, т.е. MOVE должен отработать нормально.
Но тут есть нюанс, если, ВДРУГ, по какой-либо причине память под статический массив выделится не целиком - получите трудноопределямый/выявляемый глюк!!

вот, проверил, работает нормально (но надо учитывать вышесказанное про непрерывное выделение памяти!!!)
Код:
  Move(Mass1[0], Mass2[0], SizeOf(Mass1));



Цитата:
но для моей задачи не подходит.
не могу понять, а чем не подходит:
Код:
var
  Mass1, Mass2: Array[0..9, 0..4] of Integer;
  i : integer;
begin
....
   for i:=0 to 9 do
     Mass2[i] := Mass1[i];
Всего один цикл...
Или скорости не хватает?!

Последний раз редактировалось Serge_Bliznykov; 08.10.2010 в 13:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.10.2010, 14:11   #6
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

В published действительно нельзя. Надо объявить property в public секции, там можно.
Код:
TMassiveRep = class
  private
    procedure SetMassive(X, Y: Integer; const Value: TDoubleArray);
    function GetMassive(X, Y: Integer): TDoubleArray;
  public
    property Massive[X, Y : Integer]: TDoubleArray read GetMassive write SetMassive;
  published
  end;

Последний раз редактировалось Скандербег; 08.10.2010 в 14:15. Причина: Забыл упомянуть
Скандербег вне форума Ответить с цитированием
Старый 08.10.2010, 15:39   #7
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Скандербег Посмотреть сообщение
В published действительно нельзя. Надо объявить property в public секции, там можно.
Код:
TMassiveRep = class
  private
    procedure SetMassive(X, Y: Integer; const Value: TDoubleArray);
    function GetMassive(X, Y: Integer): TDoubleArray;
  public
    property Massive[X, Y : Integer]: TDoubleArray read GetMassive write SetMassive;
  published
  end;
только немножко не так нужно, а вот так
Код:
Type  TDoubleArray = array[0..9, 0..4] of Integer;

.....

TMassiveRep = class
  private
    Fmassive: TDoubleArray;
    procedure SetMassive(X, Y: Integer; const Value: integer);
    function GetMassive(X, Y: Integer): integer;
  public
    property Massive[X, Y : Integer]: integer read GetMassive write SetMassive;
  published
  end;
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 08.10.2010, 17:31   #8
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Sanprof Посмотреть сообщение
помогите разобраться, есть ли такая функция, которая копирует значения из одного двумерного массива в другой, конечно не присвоением в цикле соответствующих элементов массивов - это я и сам умею, но для моей задачи не подходит. Массивы одинаковой длины.
Код:
var
  Mass1, Mass2: Array[0..9, 0..4] of Integer;
А что надо скопировать? Весь массив или несколько его элементов?
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
копирование ячейки с одного листа в другой RECit Microsoft Office Excel 7 02.08.2010 20:37
Копирование к строк из одного файла в другой A_Orlov Помощь студентам 1 15.06.2010 14:49
Копирование данных из одного файла в другой! vipcrash Microsoft Office Excel 17 23.01.2010 21:11
Копирование информации из одного листа на другой Юрийpirs2008 Microsoft Office Excel 6 24.03.2009 07:59
Сортировка в StringGrid'е, копирование строк из одного SG в другой monushka Помощь студентам 3 29.10.2007 23:54