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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как откопировать 2-мерный динамический массив? размер заранее не известен 
:(
    Опции темы
Kursist
Дата 8.11.2004, 18:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Имеется статический 2-мерный массив, [1000х800] надо в него скопировать содержимое нескольких 2х-мерных динамических массивов с с неопределенной но более малой размерностью (например: [100х200], копироваться должно в область статического массива, начиная с произвольного элемента (напр.: [50,100]) - не с первого, Знаю для одномерных, надо использовать циклы и операторы High(VirtArray), low(VirtArray), или Copy(array,n),  а как с 2х-мерными динамическими массивами - не знаю! Подскажите, кто знает. Спасибо!
  Вверх
Zero
Дата 8.11.2004, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Забей ты на все эти операторы, и делай так как будто у тебя статический массив, но не забывай что он начинается от нуля.
Для примера можеш посмотреть тут:
Код

var
 Form1: TForm1;
 a:array[1..20,1..10] of integer;
 d:array of array of integer;
 i,j:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 randomize;
 setlength(d,5);
 for i:=0 to 4 do
   setlength(d[i],4);
 for i:=0 to 4 do
   for j:=0 to 3 do
     d[i,j]:=random(9);  // Запись динамического массива
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 for i:=2 to 6 do
   for j:=3 to 6 do
     a[i,j]:=d[i-2,j-3];  //Перезапись из динамического массива в статический
end;

Только размерность я взял поменьше, чтобы тбе понятнее было, да и копирование происходит из одного массива а не из двух, но ты можеш сделать как захочеш... smile

Это сообщение отредактировал(а) Zero - 8.11.2004, 19:23
PM MAIL ICQ   Вверх
Kursist
Дата 9.11.2004, 10:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Супер!!! Спасибо огромное!
  Вверх
Kursist
Дата 10.11.2004, 10:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Идея реализации будет следующая: создается 2-x мерный статический массив (размером Client.Width * Client.Hight) целых чисел. Далее, будут создаваться 2-x мерные динамические массивы (размером ObjectBitmap.Width * ObjectBitmap.Hight) булевых переменных. В него заносятся значения FALSE, если пиксел на битмапе непрозрачный и TRUE - если прозрачный. Далее идет вывод изображения ObjectBitmap с учетом прозрачности на TempBitmap в позицию X,Y; а в статический массив заносятся ID "Объекта" (представленного ObjectBitmap). Далее TempBitmap выводится на Canvas формы. В процедуре обработки OnMouseClick берутся координаты 'клика' X,Y и проверяется значения элемента статического массива [X,Y] - В нем ID - следовательно такой объект выделен, значит нужный ObjectBitmap необходимо заменить.
  Вверх
p0s0l
Дата 10.11.2004, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Kursist видимо писал ответ в тему:
http://forum.vingrad.ru/index.php?showtopic=32476


--------------------
С уважением, г-н Посол.
PM   Вверх
Kursist
Дата 10.11.2004, 13:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











p0s0l
Нет, не писал, но за линк спасибо!
  Вверх
p0s0l
Дата 10.11.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Опс! smile Я что-то не посмотрел, что ты и есть автор темы smile
Я посмотрел - какие-то битмапы, маусклики - думаю, причём здесь это ? smile
Извини smile мой пост совсем не в тему получился...

У тебя с этим трудности ?:
Цитата(Kursist)
Идея реализации будет следующая:




--------------------
С уважением, г-н Посол.
PM   Вверх
Kursist
Дата 10.11.2004, 17:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(p0s0l @ 10.11.2004, 14:24)

У тебя с этим трудности ?:
Цитата(Kursist)
Идея реализации будет следующая:

Цитата(p0s0l)
Идея реализации будет следующая:


Нет, спасибо, уже все нормально. Просто меня в какой-то момент заклинило smile
Создаю простенький 2D квест (рисую много графики) - пишу свой '2D Engine' без использования OpenGL или DelphiX. Скорость вывода меня вполне устроила (использую GetTicCount() и InvalidateRect(). Хоть мне и нравится OpenGL, но его я еще недостаточно изучил (да и примеры из книги Красного по OpenGL касающиеся прозрачности материалов у меня почему-то работают без прозрачности), а создать квест не терпиться smile
  Вверх
Marriage
Дата 12.11.2004, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

в него скопировать содержимое нескольких 2х-мерных динамических массивов



Вопрос в тему..
ЕСть 2 переменные ...
a,b: array of integer;
после выполнение SetLength(a,100), а SetLength(b,100) и
a[1]:=3;
b[1]:=1000;
то в a[1] будет значение 1000, это прикол такой или как ????
И можно ли этого как нить избежать ???


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
p0s0l
Дата 12.11.2004, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Скорее всего, где-то после SetLength'ов у тебя строка типа:
a := b; или b := a;...


--------------------
С уважением, г-н Посол.
PM   Вверх
Marriage
Дата 12.11.2004, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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




Цитата
Скорее всего, где-то после SetLength'ов у тебя строка типа:
a := b; или b := a;...


В том то и дело ,то нет ...

Строки подряд идут ...


a[1]:=3;
b[1]:=1000;

ShowMessage (IntToStr(a[1]));

Показывает 1000




--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
p0s0l
Дата 12.11.2004, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Ну не может такого быть...
Либо b объявлен как absolute a (или наоборот), либо идёт типа такого:
Код
a := b; // или b := a;
a[1] := 3;
b[1] := 1000;

Либо где-то у тебя ошибка работы с памятью в программе, которая в последствии выливается в такое... Или ты что-то недоглядел...

Вышли, plz, мне исходник.


--------------------
С уважением, г-н Посол.
PM   Вверх
Zero
Дата 12.11.2004, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Marriage, я не знаю чё ты там намудрил, но попробуй, запустить Delphi с нуля, потом в раздел Var, запехни
Код

 a,b:array of integer;

А потом на кнопку (например: Tbutton) воткни это
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 SetLength(a,100);
 SetLength(b,100);
 a[1]:=3;
 b[1]:=1000;
 ShowMessage(inttostr(a[1]));
end;

Если это у выведется не 3, то можеш викинуть свой комп, проблема в нём... smile

Замечание:Мне бы тоже хотелось, глянуть на твой исходник... smile
PM MAIL ICQ   Вверх
Marriage
Дата 13.11.2004, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Комп выкидывать не собираюсь.
Проблема не внем, а скорее всего в настройках, т.к. на Билдере все нормально.
Такое осчучение, что 1 массив накладывается на другой ...
Может в настройках где-нить полазить???
Или купить лицензионную Дельфю ??? smile

Исходник приведен выше ....

Единственная может быть разница в том, что a,b:array of integer;
это модуль одной проги, в которой модулей 20, и то почти все не мои ...
А разбираться в чужих исходниках - это ж не есть гут .... Тем более БД ...



--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Zero
Дата 13.11.2004, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

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



Если ты написал так как я тебе выслал исходник, и у тебя всё равно не работает, то наверное у тебя "внатуре", Delphi глючит, я тогда могу посоветовать лишь, переустановить delphi...
Хотя может тебе Посол чё-нибудь, подскажет...
Цитата
Или купить лицензионную Дельфю ???

У меня она тоже не лицензионная, и работает... smile

Это сообщение отредактировал(а) Zero - 19.11.2005, 12:37

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  Swertke_Base.zip 22,02 Kb
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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