Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глюки с массивами

8.2K
08 мая 2005 года
Roo
13 / / 04.05.2005
Проблема следующая. Написал процедуру RemoveFromArray(var Arr1, Arr2, coef_Arr2, Arr3, coef_Arr3 : IntArray), которая удаляет из Arr2 эл-ты, которые встречаются в Arr1, и переносит из в Arr3 (coef_Arr2 и coef_Arr3 - массивы коэффициентов для Arr2 и Arr3, которые также переносятся). Вот код:
[COLOR=darkblue]type IntArray = array of Integer;
procedure RemoveFromArray(var Arr1, Arr2, coef_Arr2, Arr3, coef_Arr3 : IntArray);
var
j,k,l: Integer;
begin
if (Length(Arr2) <> Length(coef_Arr2)) or (Length(Arr3) <> Length(coef_Arr3)) then exit;
for j := 0 to high(Arr1) do begin
for k := 0 to high(Arr2) do begin
if Arr1[j] = Arr2[k] then begin
if not InIntArray(Arr2[k], Arr3) then begin
SetLength(Arr3, high(Arr3)+2);{*}
Arr3[high(Arr3)] := Arr2[k];{*}
SetLength(coef_Arr3, high(coef_Arr3)+2);{*}
coef_Arr3[high(coef_Arr3)] := coef_Arr2[k];{*}
end;
if k < Length(Arr2)-1 then
for l := k to Length(Arr2)-2 do begin
Arr2[l] := Arr2[l+1];
coef_Arr2[l] := coef_Arr2[l+1];
end;
SetLength(Arr2, high(Arr2));
SetLength(coef_Arr2, high(coef_Arr2));

end;
end;
end;
end;
{Здесь InIntArray(N:Integer;Arr:IntArray):Boolean - ф-ция, возвр. TRUE, если N входит в Arr; иначе - FALSE}
[/COLOR]

Проблема в том, что в строках, помеченных {*}, происходит нечто странное: при увеличении массива Arr3 увеличивается массив coef_Arr3 и наоборот, и в конце они становятся вообще одинаковыми. Делфи глючит? Или я?
7.1K
13 мая 2005 года
Bumer
33 / / 17.01.2005
Цитата:
Originally posted by Roo
Проблема следующая. Написал процедуру RemoveFromArray(var Arr1, Arr2, coef_Arr2, Arr3, coef_Arr3 : IntArray), которая удаляет из Arr2 эл-ты, которые встречаются в Arr1, и переносит из в Arr3 (coef_Arr2 и coef_Arr3 - массивы коэффициентов для Arr2 и Arr3, которые также переносятся). Вот код:
[COLOR=darkblue]type IntArray = array of Integer;
procedure RemoveFromArray(var Arr1, Arr2, coef_Arr2, Arr3, coef_Arr3 : IntArray);
var
j,k,l: Integer;
begin
if (Length(Arr2) <> Length(coef_Arr2)) or (Length(Arr3) <> Length(coef_Arr3)) then exit;
for j := 0 to high(Arr1) do begin
for k := 0 to high(Arr2) do begin
if Arr1[j] = Arr2[k] then begin
if not InIntArray(Arr2[k], Arr3) then begin
SetLength(Arr3, high(Arr3)+2);{*}
Arr3[high(Arr3)] := Arr2[k];{*}
SetLength(coef_Arr3, high(coef_Arr3)+2);{*}
coef_Arr3[high(coef_Arr3)] := coef_Arr2[k];{*}
end;
if k < Length(Arr2)-1 then
for l := k to Length(Arr2)-2 do begin
Arr2[l] := Arr2[l+1];
coef_Arr2[l] := coef_Arr2[l+1];
end;
SetLength(Arr2, high(Arr2));
SetLength(coef_Arr2, high(coef_Arr2));

end;
end;
end;
end;
{Здесь InIntArray(N:Integer;Arr:IntArray):Boolean - ф-ция, возвр. TRUE, если N входит в Arr; иначе - FALSE}
[/COLOR]

Проблема в том, что в строках, помеченных {*}, происходит нечто странное: при увеличении массива Arr3 увеличивается массив coef_Arr3 и наоборот, и в конце они становятся вообще одинаковыми. Делфи глючит? Или я?



Глюки с массивами

Проблема следующая. Написал процедуру RemoveFromArray(var Arr1, Arr2, coef_Arr2,
Arr3, coef_Arr3 : IntArray), которая удаляет из Arr2 эл-ты, которые встречаются в Arr1,
и переносит из в Arr3 (coef_Arr2 и coef_Arr3 - массивы коэффициентов для Arr2 и Arr3,
которые также переносятся). Вот код:
type IntArray = array of Integer;
procedure RemoveFromArray(var Arr1, Arr2, coef_Arr2, Arr3, coef_Arr3 : IntArray);
var
j,k,l: Integer;
begin
1.if (Length(Arr2) <> Length(coef_Arr2)) or (Length(Arr3) <> Length(coef_Arr3)) then exit;
2.for j := 0 to high(Arr1) do begin
3.for k := 0 to high(Arr2) do begin
4.if Arr1[j] = Arr2[k] then begin
5.if not InIntArray(Arr2[k], Arr3) then begin
6.SetLength(Arr3, high(Arr3)+2);{*}
7.Arr3[high(Arr3)] := Arr2[k];{*}
8.SetLength(coef_Arr3, high(coef_Arr3)+2);{*}
9.coef_Arr3[high(coef_Arr3)] := coef_Arr2[k];{*}
10.end;
11.if k < Length(Arr2)-1 then
12.for l := k to Length(Arr2)-2 do begin
13.Arr2[l] := Arr2[l+1];
14.coef_Arr2[l] := coef_Arr2[l+1];
15.end;
16.SetLength(Arr2, high(Arr2));
17.SetLength(coef_Arr2, high(coef_Arr2));
end;
end;
end;
end;
{Здесь InIntArray(N:Integer;Arr:IntArray):Boolean - ф-ция, возвр. TRUE, если N входит в
Arr; иначе - FALSE}


Проблема в том, что в строках, помеченных {*}, происходит нечто странное: при увеличении
массива Arr3 увеличивается массив coef_Arr3 и наоборот, и в конце они становятся вообще
одинаковыми. Делфи глючит? Или я?

По ходу глюки у тебя,а не у Делфи!
Пройдись по коду,и посмотри внимательнее.
Ты же сам их и увеличиваешь каждый раз в цикле на 2//строка 6,8
А затем в уже увеличенные массивы запихиваешь коофициенты из массивов
Arr2[k] и coef_Arr2[k].Вот они у тебя и пухнут как на дрожжах(массимы).
Подумай хорошенько.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог