@Vovasab

Как вывести элементы матрицы, которые находятся ниже главной диагонали?

Дана матрица MхM, нужно вывести их в новый массив, вот только я не понимаю почему не все элементы выводятся
int main(int argc, char *argv[])
{
    int matrix_size, counter = 0;
    printf("Enter size of matrix: ");
    scanf("%d", &matrix_size);
    int **matrix = (int**)malloc(matrix_size * sizeof(int));
    for (int i = 0; i < matrix_size; ++i)
    {
        matrix[i] = (int*)malloc(matrix_size * sizeof(int));
    }

    for (int i = 0; i < matrix_size; ++i)
    {
        for (int j = 0; j < matrix_size; ++j)
        {
            printf("Element matrix[%d][%d] = ", i+1, j+1);
            scanf_s("%d", &matrix[i][j]);

        }
    }

    for (int i = 0; i < matrix_size; ++i)
    {
        for (int j = 0; j < matrix_size; ++j)
        {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n\n");
    }

    for (int i = 0; i < matrix_size; ++i)
    {
        for (int j = 0; j < matrix_size; ++j)
        {
            if(i > j)
            {
                ++counter;
            }
        }
    }

    int *arr = (int*)(malloc(sizeof(int) * counter));

    for (int i = 0; i < matrix_size; ++i)
    {
        for (int j = 0; j < matrix_size; ++j)
        {
            if(i > j)
            {
                arr[i] = matrix[i][j];
            }
        }
    }

    for (int i = 0; i < counter; ++i)
    {
        printf("\n\t%d\t", arr[i]);
    }

    printf("\n");
    return 0;
}
  • Вопрос задан
  • 949 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
int **matrix = (int**)malloc(matrix_size * sizeof(int));

Должно стать
int **matrix = (int**)malloc(matrix_size * sizeof(int *));

потому что ты выделяешь массив указателей, а не массив целых чисел, а sizeof(int) вполне может быть не равно sizeof(int *).

for (int i = 0; i < matrix_size; ++i)
    {
        for (int j = 0; j < matrix_size; ++j)
        {
            if(i > j)
            {
                arr[i] = matrix[i][j];
            }
        }
    }


Должно стать
counter = 0;
    for (int i = 0; i < matrix_size; ++i)
    {
        for (int j = 0; j < matrix_size; ++j)
        {
            if(i > j)
            {
                arr[counter++] = matrix[i][j];
            }
        }
    }


потому что иначе все элементы находящиеся в одной строке matrix ты складываешь в один и тот же элемент массива arr.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы