Как создать шаблон вывода матрицы с помощью массива 2D в C

#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 дает обратную диагональ