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

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

Как двумерному массиву присвоить элементы одномерного? [D7, XP]


Страницы:   1 2

smman ©   (2010-04-14 10:20:00) 

Как двумерному массиву присвоить элементы одномерного?


smman   (2010-04-14 11:45:00) [1]

Удалено модератором
Примечание: Второй вопрос здесь не обсуждаем, было же сказано модератором


12   (2010-04-14 11:39:00) [2]


> почему как копия такой вариант не подходит?

если нужна копия массива - то не подходит absolute.
абсолют - это когда второй указатель указывает на то же самое место в памяти, что и первый.
Изменится a[x] - изменится и b[n,m].


> какой компонент лучше всего использовать для вывода двумерного
> массива

MyStringGrid ^)
перегрузи метод


smman   (2010-04-14 11:34:00) [3]

Удалено модератором
Примечание: Один вопрос одна тема.


smman   (2010-04-14 11:16:00) [4]


> но не если нужна копия

почему как копия такой вариант не подходит?


12   (2010-04-14 11:14:00) [5]


> absolute a", штука, конечно, прикольная

если нужно представить одно как другое
но не если нужна копия


smman   (2010-04-14 11:08:00) [6]

Все получилось, всем спасибо за помощь!

Но блин, "absolute a", штука, конечно, прикольная :)


Anatoly Podgoretsky   (2010-04-14 11:06:00) [7]

> smman  (14.04.2010 11:02:24)  [24]

Сначала изменяешь индекс по колонкам, а потом, если надо больше одной строки, то далее по строками.


oxffff   (2010-04-14 11:05:00) [8]


> А как тогда можно сделать заполнение по строкам, а не по
> стоблцам?

Вместо

stringgrid1.Cells[ m,n]:=IntToStr(b[m,n]);

написать

stringgrid1.Cells[ n,m]:=IntToStr(b[m,n]);


smman   (2010-04-14 11:02:00) [9]


> Каким образом, уже второй раз спрашиваю.

слева направо :)


smman   (2010-04-14 11:01:00) [10]


> A и B будут делить одну и ту же память. При изменении A
> изменится B и наоборот.

Спасибо.


> Менять не нужно. Нужно именно b[1,c]. Если будет [c,1],
> то может быть очень плохо.

А как тогда можно сделать заполнение по строкам, а не по стоблцам?


Anatoly Podgoretsky   (2010-04-14 11:01:00) [11]


> В b нужно записать содержимое a

Каким образом, уже второй раз спрашиваю.


Anatoly Podgoretsky   (2010-04-14 11:00:00) [12]

Я всегда говорил, что нам не хватает еще одной конференции.


oxffff   (2010-04-14 10:58:00) [13]


>
> он так правильно только по столбцам заполнится, а если поменять
> местами b[c,1] и вывести в stringgrid, то получится что
> будет заполнена только первая строка, а остальные значения
> будут нулевые


Менять не нужно. Нужно именно b[1,c]. Если будет [c,1], то может быть очень плохо.


И. Павел   (2010-04-14 10:57:00) [14]

> Объясните пожалуйста, что такое absolute a и как это работает?

A и B будут делить одну и ту же память. При изменении A изменится B и наоборот.


smman   (2010-04-14 10:54:00) [15]


> procedure TForm4.FormCreate(Sender: TObject);
> var a: array[1..16] of integer;
>    b: array [1..4, 1..4] of integer;
>    c:integer;
> begin
> for c:=1 to 16 do
>   begin
>   a[c]:=c;
>   b[1,c]:=a[c];
>   end;
> for c in b do Memo1.Lines.Add(inttostr(c));
> end;
>
> ??

он так правильно только по столбцам заполнится, а если поменять местами b[c,1] и вывести в stringgrid, то получится что будет заполнена только первая строка, а остальные значения будут нулевые.

for m:=1 to 4 do
for n:=1 to 4 do
 stringgrid1.Cells[m,n]:=IntToStr(b[m,n]);


12   (2010-04-14 10:51:00) [16]

b[i,j]:=a[i*4 + j];


oxffff   (2010-04-14 10:51:00) [17]


> И. Павел ©   (14.04.10 10:46) [13]


:)


smman   (2010-04-14 10:49:00) [18]


>  b: array [1..4, 1..4] of integer absolute a;

Объясните пожалуйста, что такое absolute a и как это работает?


oxffff   (2010-04-14 10:49:00) [19]


> smman   (14.04.10 10:38) [10]
>
> > Вместо 0 видимо поставить 1 надо. И поменять местами.
>
> если поменять местами то двумерный массив не корректно заполняется


procedure TForm4.FormCreate(Sender: TObject);
var a: array[1..16] of integer;
   b: array [1..4, 1..4] of integer;
   c:integer;
begin
for c:=1 to 16 do
  begin
  a[c]:=c;
  b[1,c]:=a[c];
  end;
for c in b do Memo1.Lines.Add(inttostr(c));
end;

??


И. Павел   (2010-04-14 10:46:00) [20]

a: array[1..16] of integer;
 b: array [1..4, 1..4] of integer absolute a;


Страницы:   1 2

Наверх

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