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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2007, 16:43   #1
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию динамические масивы

Есть два динамических масива:

a,b: array of myrecord;

после некоторых манипуляций:
длинна a=20, b=0
нужно b:=a;? но компилятор ругаеться, как обмануть?
Вариант:
setlength(b,length(a));
for i:=0to length(a)-1do
b[i]:=a[i];
setlength(a,0);
не подходит
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Старый 02.04.2007, 17:16   #2
Kostyan
Пользователь
 
Аватар для Kostyan
 
Регистрация: 25.03.2007
Сообщений: 18
По умолчанию

Синтаксически написано верно но смысл в подобном копировании уловить сложно, я думаю что существует другое и может быть более правильноее решение вашей задачи.
Kostyan вне форума Ответить с цитированием
Старый 02.04.2007, 17:18   #3
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

А как на счет Множеств? С ними можно проделывать различные операции.
Сам не пробовал, но можно попробовать метод include.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 02.04.2007, 17:25   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

var a,b:array of integer;
begin
setlength(a,20);
setlength(b,length(a));
b:=a;

никаких ошибок.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 03.04.2007, 16:27   #5
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

мне на game:=fix;
кампилятор пишет: [Error] Unit2.pas(178): Incompatible types

game,fix:array of onedat;

type
onedat=record
id,All,last,min,ends:integer;
f:boolean;
str:TStrings;
end;

Может какието опции кампилятора нужно вкл. или выкл.


game:=@fix[0];
Вот так вот выполняеться, и вроди даже правильно, но вот
str - в некоторых случаях, теряется.

Я бы скинул исходник, но он громадный, еще и не в одном Unite.
Кого заинтересует помогите.
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Старый 03.04.2007, 16:49   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

onedat=record
id,All,last,min,ends:integer;
f:boolean;
str:TStrings;
end;
var
Form1: TForm1;
s1,s2:array of onedat;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
setlength(s1,10);
for I := 0 to 9 do
begin
s1[i].id:=i;
s1[i].All:=i;
s1[i].last:=i;
s1[i].min:=i;
s1[i].ends:=i;
s1[i].f:=true;
s1[i].str:=tstringlist.Create;
s1[i].str.Add(inttostr(i));
end;
setlength(s2,length(s1));
s2:=s1;
showmessage(s2[9].str[0]);
end;

Все работает
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 03.04.2007, 17:10   #7
Voland
Heavy metal
Пользователь
 
Аватар для Voland
 
Регистрация: 02.04.2007
Сообщений: 42
По умолчанию

Если a и b - динамические массивы, то операция b:=a; копирует только указатель на массив, а не сами данные. То есть, после этого, например, b[0] и a[0] - одно и то же место в памяти. Если тебе надо скопировать массив, делай так: b:=Copy(a);
Voland вне форума Ответить с цитированием
Старый 06.04.2007, 11:57   #8
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

Кажеться я понял, но решить не могу, массивы у меня находятся разных формах, и одна из них модальная, тоесть после некоторых манипуляций закрываеться, как поступить в этом случае?
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Старый 06.04.2007, 12:04   #9
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А это здесь причем ? вопрос всего лишь области видимости переменных
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 06.04.2007, 12:26   #10
mrandrey
Форумчанин
 
Регистрация: 30.03.2007
Сообщений: 124
По умолчанию

у меня компилятор при присвоении одного массива другому пишет: несовмещение типов, почему у вас он это кушает я не знаю, вместо
a:=b я написал a:=@b[0] помоему тоже самое, и все работает, первый раз, после второго начинаются ошибки, может при закрытии окна память освобождаеться и массив указывает на несуществующие данные? Хотя в чем проблема, что ругаеться кампилятор, я не знаю, а хотелось бы.
Тут без 100г не розберешся.....
Спасибо не нужно, а на весы слева кликнуть не помешает!!!
mrandrey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal масивы Devikss Помощь студентам 2 19.06.2008 17:20
динамические строки SeregaPIF Общие вопросы C/C++ 1 19.11.2007 08:20
Динамические объекты 095 Общие вопросы Delphi 1 04.10.2007 21:16