#c #arrays #multidimensional-array
#c #массивы #многомерный массив
Вопрос:
У меня небольшие трудности с программированием на C для создания шаблонного вывода с использованием 2D-массивов, я делаю вывод в виде матрицы следующим образом: ввод 4 (для столбца 4 и строки 4)
I I I I
0 0 I 0
0 I 0 0
I I I I
Я пробовал это запрограммировать. Для верхней и нижней строк мне удалось изменить значение на 1
#include <iostream>
using namespace std;
int main(){
int elemen[100][100], n, i, j, k;
cout <<"input element = ";
cin >>n;
for(i = 0;i < n;i ){
for(j = 0;j < n;j ){
elemen[0][j] = 1;
elemen[n-1][j] = 1;
elemen[n-i][n-j] = 1;
cout <<elemen[i][j]<<" ";
}
cout<<endl;
}
}
но вывод, который происходит в приведенной выше программе, выглядит следующим образом:
I I I I
0 0 0 0
0 0 I I
I I I I
тогда как логически это правильно, и я пробовал это на невходных массивах. тогда как логически это правильно, и я пробовал это на невходных массивах. потому что, если мы введем элемент массива = 5, цикл автоматически уменьшит значение 5 на единицу. Есть ли кто-нибудь, кто может помочь, извините, если вы не понимаете, потому что в настоящее время я все еще учусь оттачивать свою логику
Ответ №1:
Если вы на самом деле не используете elemen
что-либо еще, кроме печати этого шаблона, я предлагаю удалить его и распечатать шаблон напрямую.
Пример:
#include <cstddef> // size_t
#include <iostream>
#include <string>
int main() {
std::size_t n = 4;
std::cout << std::string(n, 'I') << 'n';
for(std::size_t i=1; i < n - 1; i) {
std::cout
<< std::string(n - i - 1, '0')
<< 'I'
<< std::string(i, '0')
<< 'n'
;
}
std::cout << std::string(n, 'I') << 'n';
}
Вывод:
IIII
00I0
0I00
IIII
Ответ №2:
Попробуйте это
for(i = 0;i < n;i ){
for(j = 0;j < n;j ){
if (i == 0 || i == n-1 || i == n-j-1)
elemen[i][j] = 1;
else
elemen[i][j] = 0;
...
}
...
}
i = 0
дает вам верхнюю строкуi = n-1
дает вам нижнюю строкуi = n-j-1
дает обратную диагональ