Int main() { int n; cin >> n; int mas[100][100]; for (int i = 0; i < n; i++) { for (int j...

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

Int main()
{
int n;
cin >> n;
int mas[100][100];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if ((i + j) < n)
{
mas[i][j] = 0.5 * (i + j + 1) * (i + j + 2) + ((i + j) % 2 == 0 ? -i : -j);
}
else
{
int p = n - i - 1, q = n - j - 1;
mas[i][j] = n * n + 1 - (0.5 * (p + q + 1) * (p + q + 2) + ((p + q) % 2 == 0 ? -p : -q));
}
cout << mas[i][j] << "\t";<br> }
cout << endl;<br> }
_getch();
return 0;
}
вот код программы диаганализации матрицы
что означает ? в ((i + j) % 2 == 0 ? -i : -j); этих строчках?


Информатика (61 баллов) | 94 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Условие ? верно : неверно
То есть аналогично условным операторам if и else. Если условие верно, то выражение верно будет подставлено вместо всего условного оператора, а иначе, подставляется выражение неверно . К примеру:

int a = 2;
int b = a==2?3:4;

В данном примере условный оператор проверяет если a==2, то присваивается значение 3 (так и будет так как a = 2), а иначе присвоится значение 4 (если переменная a не будет равна 2).

(851 баллов)
0

А можете объяснить работу кода?

0

mas[i][j] = 0.5 * (i + j + 1) * (i + j + 2) + ((i + j) % 2 == 0 ? -i : -j);

0

вот эта строчка

0

Происходит вычисление выражения 0.5 * (i + j + 1) * (i + j + 2) + ((i + j), после чего, полученное число проверяется остатком при делении на 2. То есть из числа удаляются все двойки (допустим 7%2, в числе 7 имеются 3 двойки и 1 единица (2+2+2+1 = 7)), а после, остаток после удаления (в выражении 7%2, остаток это единица, так как 3-и двойки убираются)

0

возвращается в выражение (если бы мы взяли число 6%2, то в этом случае (2+2+2 = 6) остатком будет 0, так как все двойки будут убраны). После чего этот остатком сравнивается с нулем ( == 0). Если остаток равен нулю, то подставляется отрицательное переменной i число (-i). А если остаток не равен нулю, то подставляется отрицательное переменной j число (-j).