Текущий архив: 2010.08.27;
Скачать: CL | DM;
ВнизКак двумерному массиву присвоить элементы одномерного? Найти похожие ветки
← →
smman (2010-04-14 10:20) [0]Как двумерному массиву присвоить элементы одномерного?
← →
Anatoly Podgoretsky © (2010-04-14 10:23) [1]> smman (14.04.2010 10:20:00) [0]
Можно слева направа, а можно сверху вниз
← →
smman (2010-04-14 10:25) [2]Можно пример?
← →
Leonid Troyanovsky © (2010-04-14 10:28) [3]
> smman (14.04.10 10:25) [2]
> Можно пример?
for i:= Low(a) to High(a) do b[i, 0] := a[i];
--
Regards, LVT.
← →
smman (2010-04-14 10:32) [4]почему b[i, 0]?
при компиляции выдает ошибку:
[Error] Unit1.pas(46): Constant expression violates subrange bounds
← →
oxffff © (2010-04-14 10:33) [5]
> b[i, 0]
b[0,i]?
← →
oxffff © (2010-04-14 10:35) [6]
> smman (14.04.10 10:32) [4]
> почему b[i, 0]?
>
> при компиляции выдает ошибку:
>
> [Error] Unit1.pas(46): Constant expression violates subrange
> bounds
Вместо 0 видимо поставить 1 надо. И поменять местами.
← →
smman (2010-04-14 10:36) [7]
> b[0,i]?
тоже самое:
[Error] Unit1.pas(46): Constant expression violates subrange bounds
← →
brother © (2010-04-14 10:37) [8]> Как двумерному массиву присвоить элементы одномерного?
приведи объявления массивов...
← →
oxffff © (2010-04-14 10:38) [9]
> smman (14.04.10 10:36) [7]
>
> > b[0,i]?
>
> тоже самое:
> [Error] Unit1.pas(46): Constant expression violates subrange
> bounds
Поставь 1 вместо 0. Или дай описалово массива. Надеюсь он у тебя статический. В противном случае метод не подойдет.
← →
smman (2010-04-14 10:38) [10]
> Вместо 0 видимо поставить 1 надо. И поменять местами.
если поменять местами то двумерный массив не корректно заполняется
← →
smman (2010-04-14 10:40) [11]
> приведи объявления массивов...
a: array[1..16] of integer;
b: array [1..4, 1..4] of integer;
В b нужно записать содержимое a
← →
oxffff © (2010-04-14 10:44) [12]
> smman (14.04.10 10:38) [10]
А это не врети. (Из разговора бабки с АТС)
var a:array[0..10,1..20] of integer;
i:integer;
begin
a[2,1]:=77;
i:=41;
showmessage(inttostr(a[0,i]))?
← →
И. Павел © (2010-04-14 10:46) [13]a: array[1..16] of integer;
b: array [1..4, 1..4] of integer absolute a;
← →
oxffff © (2010-04-14 10:49) [14]
> 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;
??
← →
smman (2010-04-14 10:49) [15]
> b: array [1..4, 1..4] of integer absolute a;
Объясните пожалуйста, что такое absolute a и как это работает?
← →
oxffff © (2010-04-14 10:51) [16]
> И. Павел © (14.04.10 10:46) [13]
:)
← →
12 © (2010-04-14 10:51) [17]b[i,j]:=a[i*4 + j];
← →
smman (2010-04-14 10:54) [18]
> 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]);
← →
И. Павел © (2010-04-14 10:57) [19]> Объясните пожалуйста, что такое absolute a и как это работает?
A и B будут делить одну и ту же память. При изменении A изменится B и наоборот.
← →
oxffff © (2010-04-14 10:58) [20]
>
> он так правильно только по столбцам заполнится, а если поменять
> местами b[c,1] и вывести в stringgrid, то получится что
> будет заполнена только первая строка, а остальные значения
> будут нулевые
Менять не нужно. Нужно именно b[1,c]. Если будет [c,1], то может быть очень плохо.
← →
Anatoly Podgoretsky © (2010-04-14 11:00) [21]Я всегда говорил, что нам не хватает еще одной конференции.
← →
Anatoly Podgoretsky © (2010-04-14 11:01) [22]
> В b нужно записать содержимое a
Каким образом, уже второй раз спрашиваю.
← →
smman (2010-04-14 11:01) [23]
> A и B будут делить одну и ту же память. При изменении A
> изменится B и наоборот.
Спасибо.
> Менять не нужно. Нужно именно b[1,c]. Если будет [c,1],
> то может быть очень плохо.
А как тогда можно сделать заполнение по строкам, а не по стоблцам?
← →
smman (2010-04-14 11:02) [24]
> Каким образом, уже второй раз спрашиваю.
слева направо :)
← →
oxffff © (2010-04-14 11:05) [25]
> А как тогда можно сделать заполнение по строкам, а не по
> стоблцам?
Вместо
stringgrid1.Cells[m,n]:=IntToStr(b[m,n]);
написать
stringgrid1.Cells[n,m]:=IntToStr(b[m,n]);
← →
Anatoly Podgoretsky © (2010-04-14 11:06) [26]> smman (14.04.2010 11:02:24) [24]
Сначала изменяешь индекс по колонкам, а потом, если надо больше одной строки, то далее по строками.
← →
smman (2010-04-14 11:08) [27]Все получилось, всем спасибо за помощь!
Но блин, "absolute a", штука, конечно, прикольная :)
← →
12 © (2010-04-14 11:14) [28]
> absolute a", штука, конечно, прикольная
если нужно представить одно как другое
но не если нужна копия
← →
smman (2010-04-14 11:16) [29]
> но не если нужна копия
почему как копия такой вариант не подходит?
← →
smman (2010-04-14 11:34) [30]Удалено модератором
Примечание: Один вопрос одна тема.
← →
12 © (2010-04-14 11:39) [31]
> почему как копия такой вариант не подходит?
если нужна копия массива - то не подходит absolute.
абсолют - это когда второй указатель указывает на то же самое место в памяти, что и первый.
Изменится a[x] - изменится и b[n,m].
> какой компонент лучше всего использовать для вывода двумерного
> массива
MyStringGrid ^)
перегрузи метод
← →
smman (2010-04-14 11:45) [32]Удалено модератором
Примечание: Второй вопрос здесь не обсуждаем, было же сказано модератором
Страницы: 1 вся ветка
Текущий архив: 2010.08.27;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.061 c