Распечатка матрицы заданной формы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени этих дней! Нужно вывести на экран матрицу такой вот формы, и найти максимальный элемент в заштрихованной области (ссылка на скрин): Пока сидел в уборной придумал вот такое:
#include <stdio.h>
 
int Mas[9][9]=
    {
        { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 },
        { 10, 11, 12, 13, 14, 15, 16, 17, 18},
        { 19, 20, 21, 22, 23, 24, 25, 26, 27},
        { 28, 29, 30, 31, 32, 33, 34, 35, 36},
        { 37, 38, 39, 40, 41, 42, 43, 44, 45},
        { 46, 47, 48, 49, 50, 51, 52, 53, 54},
        { 55, 56, 57, 58, 59, 60, 61, 62, 63},
        { 64, 65, 66, 67, 68, 69, 70, 71, 72},
        { 73, 74, 75, 76, 77, 78, 79, 80, 81}
    };
    
    /*  { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 },
        { 0 , 11, 12, 13, 14, 15, 16, 17, 0 },
        { 0 , 0 , 21, 22, 23, 24, 25, 0 , 0 },
        { 0 , 0 , 0 , 31, 32, 33, 0 , 0 , 0 ),
        { 0 , 0 , 0 , 0 , 41, 0 , 0 , 0 , 0 },  ось таке от має вийти
        { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
        { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
        { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
        { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }   */
 
int main(void)
{
    int i, j, n, m, p, x;
    int max;
    printf("Enter the matrix size: ");
    scanf("%d", &n);
    
    /*for (i=0; i<n; i++)
    {
        //j=i-1;
        for (j=0; j<n; j++)
        {
            printf("%2d", Mas[i][j]);
        }
        printf("\n");
    }*/
 
    p=0;
    m=n;
    max=0;
 
    for (i=0; i<n; i++)
    {
        for (j=p; j<m; j++)
        {
            printf("%4d", Mas[i][j]);
            if (max < Mas[i][j])
            {
                max=Mas[i][j];
            }
        }
        p++;
        m--;
        printf("\n");
    }
    printf("Max: %d\n", max);
    system("pause");
}
Все получалось, печатает нужную часть матрицы. Но печатает так, что левая диагональ (числа 11, 21, 31, 41) являются не диагональю а столбцом (ссылка на скрин, см. ниже), и при этом видно, что под матрицей идет большой отступ, что свидетельствует о том, что она зарезервировала место под невидимую нижнюю половину, которую я не печатаю. Мне нужно заполнить пустые элементы матрицы нулями, чтобы числа 11, 21, 31, 41 стали диагональю, а не столбцом. Как можно это сделать?

Решение задачи: «Распечатка матрицы заданной формы»

textual
Листинг программы
for (i=0; i<n; i++)
{
     for (int k=0; k<p; k++)
        printf("%4d", 0);
     for (j=p; j<m; j++)
    {
        printf("%4d", Mas[i][j]);
        if (max < Mas[i][j])
        {
            max=Mas[i][j];
        }
    }
    p++;
    m--;
    printf("\n");
}

Объяснение кода листинга программы

В данном коде реализована функция для печати заданной матрицы в формате, где каждое значение матрицы выравнивается по левому краю и имеет длину 4 символа.

  1. В первой строке объявлены три переменные:
    • i - счётчик строк матрицы.
    • k - счётчик столбцов матрицы.
    • p - счётчик столбцов, отсчитываемый от левого края матрицы.
  2. Вторая строка - внешний цикл, который перебирает все строки матрицы.
  3. Третья строка - внутренний цикл, который перебирает все столбцы матрицы, начиная с правого края.
  4. Четвёртая строка - вывод значения элемента матрицы, увеличенного на единицу, чтобы выровнять его по левому краю.
  5. Пятая строка - проверка на максимальное значение в текущей строке. Если текущее значение больше максимального, то оно становится новым максимальным.
  6. Шестая строка - увеличение счётчика столбцов.
  7. Седьмая строка - уменьшение счётчика столбцов.
  8. Восьмая строка - перевод строки.
  9. Цикл повторяется для всех строк матрицы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы