Получить квадратную матрицу по правилу - C (СИ)

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

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

Здравствуйте, есть задача: Дана матрица C(n,n).Получить B(n), где B(i) - это значение перовго по порядку положительного элемента i-ой строки(если таких элементов нет, то принять B(i)=1 ). И вот такой код:
Листинг программы
  1. #include <stdio.h>
  2. int main(void){
  3. int i = 0;
  4. int j = 0;
  5. int N = 10;
  6. int inmatrix[N][N];
  7. int b[N];
  8. char flag = 0;
  9. printf("Введите размер квадратной матрицы: ")
  10. scanf("%d", &N);
  11. printf("Введите элементы матрицы: ")
  12. for (; i<N; i++){
  13. b[i] = flag = 1;
  14. for (; j<N; j++){
  15. scanf("%d", &inmatrix[i][j]);
  16. if (inmatrix[i][j] && flag){
  17. b[i] = j;
  18. flag = 0;
  19. }
  20. else continue;
  21. }
  22. }
  23. for (i = 0; i<N; j++) printf(%d, b[i]);
  24. return 0;
  25. }
Но на строке int inmatrix[N][N] выдает ошибку e2313 Constant expression required. Подскажите пожалуйста в чем ошибка.

Решение задачи: «Получить квадратную матрицу по правилу»

textual
Листинг программы
  1.      int i,y;
  2.      int **matrix; //это указатель на указатель на int
  3.    
  4.      printf("Введите размер N: ");
  5.     scanf("%d", &N);
  6.      printf("Введите размер M: ");
  7.     scanf("%d", &M);
  8.    
  9.       //выделяем память под массив указателей
  10.       matrix = (int **)calloc(N, sizeof(*matrix)); //matrix теперь указывает на массив указателей на int
  11.       //выделяем память для каждой строки матрици
  12.       for(i = 0; i < N; ++i)
  13.       {
  14.            matrix[i] = (int*)calloc(M, sizeof(*matrix[i]) );
  15.            for(y=0; y<M; y++)
  16.         matrix[i][y] = rand()%10-4; // и заполняем строку случайными числами
  17.       }
  18.  
  19.     //
  20.     //    ...  работаем с матрицей
  21.     //
  22.  
  23.    
  24.       //после завершения работы, необходимо освободить всю выделенную память
  25.           for(int i = 0; i < N; ++i)
  26.          free(matrix[i]);
  27.     free(matrix);

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

В этом коде:

  1. Объявляются две переменные: i и y, которые будут использоваться в качестве индексов для матрицы.
  2. Объявляется переменная matrix типа int **, которая будет использоваться как указатель на указатель на int. Это позволяет создать двумерный массив.
  3. Программа запрашивает у пользователя два числа: N и M, которые будут использоваться как размеры матрицы.
  4. Выделяется память под массив указателей на int, который будет использоваться для хранения строк матрицы.
  5. Для каждой строки матрицы выделяется память и заполняется случайными числами от -4 до 6.
  6. После выполнения всех операций с матрицей, память освобождается. Список переменных и их значений:
  7. N - размер матрицы по одной из осей (должно быть введено пользователем)
  8. M - размер матрицы по другой оси (должно быть введено пользователем)
  9. matrix - указатель на указатель на int, который будет использоваться для хранения матрицы
  10. i, y - переменные для использования в качестве индексов
  11. **matrix - указатель на массив указателей на int, который будет использоваться для доступа к каждой строке матрицы
  12. *matrix[i] - указатель на массив int, который будет использоваться для доступа к каждой строке матрицы
  13. matrix[i][y] - значение int, которое будет использоваться для доступа к конкретному элементу матрицы
  14. rand()%10-4 - значение int, которое будет использоваться для заполнения матрицы случайными числами
  15. free(matrix[i]); - функция, которая будет использоваться для освобождения памяти после выполнения всех операций с матрицей
  16. free(matrix); - функция, которая будет использоваться для освобождения памяти после выполнения всех операций с матрицей

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы