Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Большой массив


n-neo ©   (2012-02-27 16:26:00) 

Здравствуйте. Мне нужно создать массив длиною 10 000 000. Тип Single. SetLength(a, 10000000) создает массив длиной 131072. Что делать?


Забаненный   (2012-02-28 01:20:00) [1]

Неа. Объяви ее в private и ничего не бойся. Но можно и без нее обойтись. i и j вполне информативны.


CRLF   (2012-02-27 23:44:00) [2]


> это в отдельную процедуру, иначе смотреть страшно
А на глобальную переменную не страшно смотреть?


Забаненный   (2012-02-27 23:38:00) [3]

разумеется, процедура вызывается трижды, четырежды.. скока там надо. ошибся чуть :)


Забаненный   (2012-02-27 23:36:00) [4]

это в отдельную процедуру, иначе смотреть страшно
begin
   Massive[k]:=XX[i,j+1]/2;
   Massive[k+1]:=YY[i,j+1]/2;
   Massive[k+2]:=ZZ[i,j+1]/2;
end;

тогда основной цикл
for j := 0 to m - 2 do
for i := 0 to n - 2 do
 begin
   процедура
   inc(k, 3);  
 end;


и можно даже еще сократить:

begin
   Massive[k]:=XX[i,j+1]/2;
   Massive[k+1]:=YY[i,j+1]/2;
   Massive[k+2]:=ZZ[i,j+1]/2;
   inc(k, 3);  
end;



for j := 0 to m - 2 do
   for i := 0 to n - 2 do процедура
   


n-neo   (2012-02-27 16:50:00) [5]

извините, конечно же я ошибся...


RWolf   (2012-02-27 16:49:00) [6]

и да, k элементарно выбегает за границу массива.
это не говоря о том, что не хватает одного inc(k).


RWolf   (2012-02-27 16:47:00) [7]


> SetLength(a, 10000000) создает массив длиной 131072.

«не верю!» ©


n-neo   (2012-02-27 16:34:00) [8]


 n:=1000;
 m:=1000;
 SetLength(Massive, 2*n*m*3);
 k:=0;
 for j := 0 to m - 2 do
 for i := 0 to n - 2 do
  begin
    Massive[k]:=XX[i,j+1]/2;
    inc(k);
    Massive[k]:=YY[i,j+1]/2;
    inc(k);
    Massive[k]:=ZZ[i,j+1]/2;
    inc(k);
    Massive[k]:=XX[i,j]/2;
    inc(k);
    Massive[k]:=YY[i,j]/2;
    inc(k);
    Massive[k]:=ZZ[i,j]/2;
    inc(k);
    Massive[k]:=XX[i+1,j]/2;
    inc(k);
    Massive[k]:=YY[i+1,j]/2;
    inc(k);
    Massive[k]:=ZZ[i+1,j]/2;
    inc(k);
    Massive[k]:=XX[i+1,j+1]/2;
    inc(k);
    Massive[k]:=YY[i+1,j+1]/2;
    inc(k);
    Massive[k]:=ZZ[i+1,j+1]/2;
  end;

В процессе выполнения вылетает Access Violation..


Anatoly Podgoretsky   (2012-02-27 16:28:00) [9]

Показать код, а не огрызки


Наверх

Титульная страница Поиск, карта сайта Написать письмо