Pascal. Нужно сформировать двумерный массив размерности n x n, при этом каждый элемент...

0 голосов
40 просмотров

Pascal. Нужно сформировать двумерный массив размерности n x n, при этом каждый элемент массива должен заполняться в зависимости от его места в массиве:
1 2 3 ... n-1 n
0 1 2 ... n-2 n-1
0 0 1 ... n-3 n-2
. . . . .
. . . . .
. . . . .
0 0 0 ... 0 1

Нужна только формула, по которой заполняется массив, мой вариант: j-i+1 где j - координата абсцисс, а i - координата биссектрисс, но у меня получаются кое-где отрицательные значения вместо нуля


Информатика (290 баллов) | 40 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Нужна не формула, а двойной цикл!

Const N = 10;
Var M : array[1..N,1..N] of Integer;
  i,j : Byte;
Begin
  For i:=1 to n do
    For j:=i to n do M[i,j]:=j-i+1;
  For i:=1 to N do
  Begin
    For j:=1 to N do Write(M[i,j]:4);
    Writeln;
  end;
end.

(5.1k баллов)
0

Я знаю про цикл, но в основе лежит формула, без нее не заполнишь, а моя неправильная

0

Правильная у вас формула, я ее и использовал - только вся суть заполнения массива именно в индексах в двойном цикле.

0

Точно, спасибо огромное! Теперь разобрался

0 голосов

Почему бы просто не использовать условный оператор?

If j >= i then
  a[i,j] := j - i + 1
else
 a[i,j] := 0

Если важно именно в виде одной формулы,
a[i,j] := max(i - j + 1, 0)

(8.5k баллов)
0

(i - j + 1) * ord( j >= i) тоже должно работать

0

Спасибо, сказали обойтись без условного оператора, одной формулой обязательно

0

А обязательно по одной формуле? В смысле, можно сделать два цикла

0

for i := 1 to n do
  begin
  for j := 1 to i-1 do a[i,j] := 0
  for j := i to n do a[i,j] := j - i + 1
  end

0

Два цикла + формула, просто формулу в цикл запихиваешь и все

0

Но уж циклы-то я напишу