![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите решить задачку на турбо паскале
zero © (2007-09-12 09:33:00)Есть двумерный квадратный массив размерностью n. Необходимо заполнить его данными вот таким образом, пример для n=4
0 0 0 10
0 0 9 6
0 8 5 3
7 4 2 1
Помогите плиз, а то у меня уже крыша едет. Вроде задача на первый взгляд простая, но вся сложность в том что я не могу заполнить массив именно в такой последовательности.
zero (2007-09-12 13:25:00) [1]Jeer © (12.09.07 10:08) [4]
> zero (12.09.07 09:33)
А ты задачу уточни:
требуется
- заполнить массив указанными значениями в определенных ячейках произвольным методом;
- заполнить * двигаясь по строкам или столбцам, или диагоналям или конем или..
--------------------
Заполнять можно любым методом главное что бы последовательность чисел была именно такая, то есть сначало одна диогональ потом следующая.
Ладно всем спасибо, сегодня вечером попробую.
iam (2007-09-12 10:41:00) [2]const n = 7;
Arr: Array[1..n, 1..n] of Integer;
iam (2007-09-12 10:34:00) [3]0 0 0 10
0 0 9 6
0 8 5 3
7 4 2 1
можешь так и обходить по диагонялям
1 диагональ: (n,n)
2 диагональ: (n-1,n), (n,n-1)
3 диагональ: (n-2,n),(n-1,n-1),(n,n-2)
...
n диагональ: ...
код
var i, j, counter: Integer;
begin
...
counter := 1;
for i := 1 to n do begin
for j := 1 to i do begin
Arr[n+1-j, n-i+j] := counter;
Inc(counter);
end;
end;
novill (2007-09-12 10:29:00) [4]
var maxi,maxj,ci,cj,i:integer;
begin
maxi:=m.ColCount-1;
maxj:=m.RowCount-1;
ci:=maxi;
cj:=maxj;
m.Cells[ci,cj]:='1';
for i:=2 to maxv.Value do
begin
if (ci+1)>maxi
then begin ci:=maxi-(maxi-cj)-1; cj:=maxj end
else begin dec(cj); inc(ci); end;
m.Cells[ci,cj]:=IntToStr(i);
end;
end;
осталось только чуть причесать.
alshtam (2007-09-12 10:23:00) [5]procedure TForm3.Button1Click(Sender: TObject);
var
a:array[1..4,1..4] of integer;
i,j,s,s1,d,d1:integer;
begin
s1:=1;
s:=s1;
d1:=2;
d:=0;
for I:=1 to 4 do
for j:=1 to 4 do
a[i,j]:=0;
for I:=4 downto 1 do
begin
for j:=4 downto 1 do
begin
s:=s+d;
a[i,j]:=s;
d:=d+1;
if j=4-i+1 then break;
end;
s1:=s1+d1;
d:=d1-1;
s:=s1-d;
d1:=d1+1;
end;
end;
korneley (2007-09-12 10:18:00) [6]Пардон, обшибся малость:
a[row, col] := cnt;
korneley (2007-09-12 10:14:00) [7]как - нибудь так
cnt := 1;
for i := n downto 1 do begin
row := n;
col := i;
while (col <= n) and (row >= 1) do begin
a[col, row] := cnt;
inc(cnt);
inc(col);
dec(row);
end;
end;
Jeer (2007-09-12 10:08:00) [8]
> zero (12.09.07 09:33)
А ты задачу уточни:
требуется
- заполнить массив указанными значениями в определенных ячейках произвольным методом;
- заполнить * двигаясь по строкам или столбцам, или диагоналям или конем или..
zero (2007-09-12 09:45:00) [9]for i:=1 to n do
begin
for j:=1 to n do
begin
if i+j>n then
m[i,j]:=1;
end;
end;
Пока вот только до этого додумал, то есть единичками заполняються только нужные ячейки но вот как сделать что бы последовательно заполнялся масив додуматься пока не могу (
zero (2007-09-12 09:43:00) [10]for i:=1 to n do
begin
for j:=1 to n do
begin
if i+j>n then
m[i,j]:=1;
end;
end;
Пока вот только до этого додумал, то есть единичками заполняються только нужные ячейки но вот как сделать что бы последовательно заполнялся масив додуматься пока не могу (
Ega23 (2007-09-12 09:35:00) [11]Показывай, как делаешь