Создание трехмерного динамического массива
Создать трехмерный динамический массив, типа string, количество страниц =9. Каждая страница размерностью 65*65
Вот такой код ты хотел?
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
Tmass = array of array of array of integer;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Fmass: Tmass;
// i, j: integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,m,k,z: integer;
begin
n:=strtoint(Edit1.Text);
m:=strtoint(Edit2.Text);
k:=strtoint(Edit3.Text);
StringGrid1.ColCount := n;
StringGrid1.RowCount := m;
SetLength(Fmass, n, m, k);
// Обрати внимание на следующие две строчки
Label1.Caption := IntToStr(Length(Fmass));
Label2.Caption := IntToStr(Length(Fmass[0]));
{
for i:=Low(Fmass) to High(Fmass) do
begin
SetLength (Fmass[i], n);
for j := Low(Fmass) to High(Fmass) do
SetLength (Fmass[i][j], m);
end; }
//randomize;
for i := 0 to Length(Fmass) - 1 do
for j := 0 to Length(Fmass[0]) - 1 do
for z := 0 to Length(Fmass[0, 0]) - 1 do
begin
///////////////////////// НАЧАЛО ШАХМАТ ///////////////////////////////
if (i mod 2=0) and (j mod 2 =0) then Fmass[i,j,z]:=1
else Fmass[i,j,z]:=0;
if (i mod 2 <> 0) and (j mod 2 <> 0) then Fmass[i,j,z]:=1;
////////////////////// КОНЕЦ ШАХМАТ ///////////////////////////////////
StringGrid1.Cells[i,j]:=inttostr(Fmass[i,j,z]);
end;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
Tmass = array of array of array of integer;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Fmass: Tmass;
// i, j: integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,m,k,z: integer;
begin
n:=strtoint(Edit1.Text);
m:=strtoint(Edit2.Text);
k:=strtoint(Edit3.Text);
StringGrid1.ColCount := n;
StringGrid1.RowCount := m;
SetLength(Fmass, n, m, k);
// Обрати внимание на следующие две строчки
Label1.Caption := IntToStr(Length(Fmass));
Label2.Caption := IntToStr(Length(Fmass[0]));
{
for i:=Low(Fmass) to High(Fmass) do
begin
SetLength (Fmass[i], n);
for j := Low(Fmass) to High(Fmass) do
SetLength (Fmass[i][j], m);
end; }
//randomize;
for i := 0 to Length(Fmass) - 1 do
for j := 0 to Length(Fmass[0]) - 1 do
for z := 0 to Length(Fmass[0, 0]) - 1 do
begin
///////////////////////// НАЧАЛО ШАХМАТ ///////////////////////////////
if (i mod 2=0) and (j mod 2 =0) then Fmass[i,j,z]:=1
else Fmass[i,j,z]:=0;
if (i mod 2 <> 0) and (j mod 2 <> 0) then Fmass[i,j,z]:=1;
////////////////////// КОНЕЦ ШАХМАТ ///////////////////////////////////
StringGrid1.Cells[i,j]:=inttostr(Fmass[i,j,z]);
end;
end;
end.
Теперь осталось с шахматами разобраться)))
Код:
hehe:array of array of array of string;
.............
SetLength(hehe,9,65,65)
.............
SetLength(hehe,9,65,65)
Цитата: wanja
Код:
hehe:array of array of array of string;
.............
SetLength(hehe,9,65,65)
.............
SetLength(hehe,9,65,65)
С этим более-менее понятно, как тогда такой массив заполнить в виде шахматной доски?
В каком смысле, "в виде шахматной доски"?
В прямом, например белый цвет-это нули, а черный- это единицы
В вопросе нет ничего ни о цветах ни о шахматной доске.
Просто сначала нужно было создать этот массив, а потом его заполнить, И с этим возникли некоторые проблемы
То есть строками "black" и "white", что ли?
да да , именно так и нужно
Код:
var
Form1: TForm1;
StrArr: array of array of array of STRING;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
I, J, K: BYTE;
begin
SetLength(StrArr, 9, 65, 65);
for I := 0 to 8 do
for J := 0 to 64 do
for K := 0 to 64 do
begin
if (I + J + K) Mod 2 > 0 then StrArr[I, J, K] := 'black' else StrArr[I, J, K] := 'white';
end;
end;
Form1: TForm1;
StrArr: array of array of array of STRING;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
I, J, K: BYTE;
begin
SetLength(StrArr, 9, 65, 65);
for I := 0 to 8 do
for J := 0 to 64 do
for K := 0 to 64 do
begin
if (I + J + K) Mod 2 > 0 then StrArr[I, J, K] := 'black' else StrArr[I, J, K] := 'white';
end;
end;
Задание что ли какое? Просто я не понимаю зачем хранить строки, тип BOOL вполне подошёл бы, а выводить можно и строку если это
где то необходимо
Ты случайно не из Оренбургской области?
Код:
n:=strtoint(Edit1.Text);
m:=strtoint(Edit2.Text);
k:=strtoint(Edit3.Text);
SetLength(Fmass, k);
for i:=Low(Fmass) to High(Fmass) do
begin
SetLength (Fmass[i], n);
for j := Low(Fmass) to High(Fmass) do
SetLength (Fmass[i][j], m);
end;
m:=strtoint(Edit2.Text);
k:=strtoint(Edit3.Text);
SetLength(Fmass, k);
for i:=Low(Fmass) to High(Fmass) do
begin
SetLength (Fmass[i], n);
for j := Low(Fmass) to High(Fmass) do
SetLength (Fmass[i][j], m);
end;
Прокоментируй пожалуйста каждую строчку, ну например начиная с SetLength(Fmass, k);
Зачем столько раз вызывается SetLength?
И старайся письмами не выкладывать такие увесистые труды, в экран не вмещаются и скролинга нет
Это один из самых непонятных мне кусков) Помогали просто мне)
С шахматами самое сложное) Нужно чтоб белые цвета были нулями, а черные единицами
Это наверное розыгрыш, где видеокамеры?
ну если представить массив в виде шахмат) цвет не важен
Цитата: 4итер
ну если представить массив в виде шахмат) цвет не важен
Извини но я так умею только после двух бутылок водки)))
Ты опиши подробно что нужно заполнить и при чём там стринггрид
Цитата: QWERYTY
Цитата: 4итер
ну если представить массив в виде шахмат) цвет не важен
Извини но я так умею только после двух бутылок водки)))
Ты опиши подробно что нужно заполнить и при чём там стринггрид
Ну скажем так, есть массив, он заполняется так 1 0 1 0 1 0
0 1 0 1 0 1
Может так будет немного понятней)
Ладно. Тот вариант который сейчас есть чем не устраивает?
Я просто не стал его проверять, сейчас запустил, вроде работает как надо) Спасибо за помощь!