Найти в матрице первый столбец, все элементы которого положительны. - C (СИ)

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

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

Задание: Найти в матрице первый столбец, все элементы которого положительны. Знаки элементов предыдущего столбца изменить на противоположные. Столбец положительных чисел нашел, но не получается изменить знаки предыдущего. Сразу спасибо за помощь) Вот код, который уже сделал.
#include<stdio.h>
int main()
{
 
    int n, m;
    printf("Vvedite razmermost' matrici\n");
    scanf_s("%d%d", &n, &m);
    int matr[30][30], stolb;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) {
            printf("Vvedite [%d;%d] element matrici : ", i + 1, j + 1);
            scanf_s("%d", &matr[i][j]);
        }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            printf(" %d", matr[i][j]);
        printf("\n");
    }
 
    int index = 0;
    int k = 0, j = 0, i = 0;

    for (int j = 0; j < m; j++)
    {
        for (int i = 0; i < n; i++)
        {
            if (matr[i][j] > 0)
                k++;
            else
 
            {
                k = 0;
 
                break;
            }
        }
        if (k == m) {
            index = j + 1;
            break;
 
        }
    }
    printf("Nomer stolbca so vsemi polojitel'nimi chislami : %d \n", index);
 
}

Решение задачи: «Найти в матрице первый столбец, все элементы которого положительны.»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  // Инициализируем кол-во строк и столбцов
  int rows, cols;
  printf("Enter count of rows: ");
  scanf("%d", &rows);
  if (rows <= 0) exit(1);
  printf("Enter count of columns: ");
  scanf("%d", &cols);
  if (cols <= 0) exit(1);
 
  // Выделяем память под двумерный массив
  int** matrix = malloc(sizeof(int*) * rows);
  for (int i = 0; i < rows; i++)
    matrix[i] = malloc(sizeof(int) * cols);
 
  // Заполняем матрицу значениями
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      printf("Enter value of [%d;%d]: ", i, j);
      scanf("%d", &matrix[i][j]);
    }
  }
 
  // Выводим нашу матрицу
  printf("Matrix:\n");
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      printf("%3d ", matrix[i][j]);
    }
    printf("\n");
  }
 
  // Ищем первый положительный столбец
  int positiveColumn;
  int isPositive = 0;
  for (int j = 0; j < cols; j++) {
    
    for (int i = 0; i < rows; i++) {
      if (matrix[i][j] >= 0) {
        isPositive = 1;
      }
      else {
        isPositive = 0;
        break;
      }
    }
 
    if (isPositive) {
      positiveColumn = j;
      break;
    }
 
  }
 
  // Если положительный столбец найден
  if (isPositive) {
    
    if (positiveColumn > 0) {
      // Если наш положительный столбец не первый
      // инверсируем знаки в предыдущем
      for (int i = 0; i < rows; i++) {
        matrix[i][positiveColumn-1] *= -1;
      }
    }
    else {
      // Если наш положительный столбец первый
      // инверсируем знаки в последнем
      for (int i = 0; i < rows; i++) {
        matrix[i][cols-1] *= -1;
      }
    }
 
    // Выводим результат на экран
    printf("Result:\n");
    for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
        printf("%3d ", matrix[i][j]);
      }
      printf("\n");
    }
    
  }
  else {
    printf("Matrix doesn't have positive columns.\n");
  }
  
 
  // Освобождаем память
  for (int i = 0; i < rows; i++)
    free(matrix[i]);
  free(matrix);
  return 0;
}

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

  1. Ввод количества строк и столбцов матрицы с помощью функции scanf().
  2. Выделение памяти под двумерный массив с помощью функции malloc().
  3. Заполнение матрицы значениями с помощью двух вложенных циклов и функции scanf().
  4. Вывод матрицы на экран с помощью двух вложенных циклов и функции printf().
  5. Поиск первого положительного столбца с помощью двух вложенных циклов и переменных isPositive и positiveColumn.
  6. Инвертирование знаков в столбце, если положительный столбец не первый или не последний.
  7. Вывод результата на экран с помощью двух вложенных циклов и функции printf().
  8. Освобождение памяти с помощью цикла и функции free().
  9. Возврат значения 0, указывающего на успешный исход работы программы.

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


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

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

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