Сформировать файл, содержащий только те строки исходной матрицы, в которых отсутствуют отрицательные числа - C (СИ)

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

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

В файле хранится числовая матрица. В первой строке файла записаны два числа: количество строк и столбцов матрицы, а затем сама матрица. Сформировать новый файл, содержащий только те строки исходной матрицы, в которых отсутствуют отрицательные числа.

Решение задачи: «Сформировать файл, содержащий только те строки исходной матрицы, в которых отсутствуют отрицательные числа»

textual
Листинг программы
#include <stdio.h>
#define N 20
 
int main(){
    FILE *f ;
    int size_row,size_col, i, j, neg_count,neg_rows=0, a[N][N],b[N];
 
    f = fopen("input.txt", "r");
 
    fscanf(f, "%d", &size_row); //i
    fscanf(f, "%d", &size_col); //j
 
   printf("Array in file:\n");
    for (i = 0; i < size_row; ++i)
        {
        for (j = 0; j < size_col; ++j)
             {
                fscanf(f, "%d", &a[i][j]);
                printf("%3d",a[i][j]);
             }
          printf("\n");
        }
 
    fclose(f);
 
  for ( i = 0; i < size_row; ++i )
        {
          neg_count=0;
          for ( j = 0; j < size_col; ++j )
            {
                if(a[i][j]<0)
                    neg_count++;
            }
         if(neg_count==0)
            b[i]=0;
         else
         {
            b[i]=1;
            neg_rows++;
         }
 
         }
 
if(neg_rows==size_row)  //если во всех строках есть отрицательный элемент
    {
        printf("\nAll rows negative");
        return 0;
    }
else
{
  f=fopen("output.txt", "w");
 
    for ( i = 0; i < size_row; ++i )
        {
          while(b[i]!=0&&i<size_row)
            i++;
          if(i<size_row)
          {
                for ( j = 0; j < size_col; ++j )
                {
                   fprintf(f, "%3d", a[i][j]);
                }
          }
 
      fprintf(f,"%c",'\n');
    }
 
    fclose(f);
 
 
    printf("\nDone!\n");
}
 
return 0;
}

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

Вот список действий, которые выполняются в этом коде:

  1. Ввод размера матрицы (количество строк и столбцов) с помощью функции fscanf.
  2. Чтение матрицы из файла input.txt и вывод её на экран.
  3. Инициализация переменных для хранения количества отрицательных чисел в строке и булевого значения, указывающего, содержит ли строка отрицательные числа.
  4. Поиск отрицательных чисел в каждой строке матрицы.
  5. Если все строки содержат отрицательные числа, выводится сообщение All rows negative и программа завершается.
  6. В противном случае, открывается файл output.txt для записи.
  7. Перебираются строки матрицы, начиная с первой (поскольку в процессе поиска отрицательных чисел могли пропустить строки).
  8. Если булево значение равно 0 (строка не содержит отрицательных чисел), строка записывается в файл output.txt.
  9. После записи строки в файл выводится символ новой строки.
  10. Если булево значение равно 1 (строка содержит отрицательные числа), переходится к следующей строке без записи в файл.
  11. В конце программы выводится сообщение Done!.

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


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

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

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