Текущий архив: 2007.10.07;
Скачать: CL | DM;
Вниз
Помогите решить задачку на турбо паскале Найти похожие ветки
← →
zero (2007-09-12 09:33) [0]Есть двумерный квадратный массив размерностью n. Необходимо заполнить его данными вот таким образом, пример для n=4
0 0 0 10
0 0 9 6
0 8 5 3
7 4 2 1
Помогите плиз, а то у меня уже крыша едет. Вроде задача на первый взгляд простая, но вся сложность в том что я не могу заполнить массив именно в такой последовательности.
← →
Ega23 © (2007-09-12 09:35) [1]Показывай, как делаешь
← →
zero (2007-09-12 09:43) [2]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:45) [3]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;
Пока вот только до этого додумал, то есть единичками заполняються только нужные ячейки но вот как сделать что бы последовательно заполнялся масив додуматься пока не могу (
← →
Jeer © (2007-09-12 10:08) [4]
> zero (12.09.07 09:33)
А ты задачу уточни:
требуется
- заполнить массив указанными значениями в определенных ячейках произвольным методом;
- заполнить * двигаясь по строкам или столбцам, или диагоналям или конем или..
← →
korneley © (2007-09-12 10:14) [5]как - нибудь так
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;
← →
korneley © (2007-09-12 10:18) [6]Пардон, обшибся малость:
a[row, col] := cnt;
← →
alshtam © (2007-09-12 10:23) [7]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;
← →
novill © (2007-09-12 10:29) [8]
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;
осталось только чуть причесать.
← →
iam (2007-09-12 10:34) [9]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;
← →
iam (2007-09-12 10:41) [10]const n = 7;
Arr: Array[1..n, 1..n] of Integer;
← →
zero (2007-09-12 13:25) [11]Jeer © (12.09.07 10:08) [4]
> zero (12.09.07 09:33)
А ты задачу уточни:
требуется
- заполнить массив указанными значениями в определенных ячейках произвольным методом;
- заполнить * двигаясь по строкам или столбцам, или диагоналям или конем или..
--------------------
Заполнять можно любым методом главное что бы последовательность чисел была именно такая, то есть сначало одна диогональ потом следующая.
Ладно всем спасибо, сегодня вечером попробую.
Страницы: 1 вся ветка
Текущий архив: 2007.10.07;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.034 c