Сформировать файл, содержащий только те строки исходной матрицы, в которых отсутствуют отрицательные числа - 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;
}
Объяснение кода листинга программы
Вот список действий, которые выполняются в этом коде:
- Ввод размера матрицы (количество строк и столбцов) с помощью функции fscanf.
- Чтение матрицы из файла input.txt и вывод её на экран.
- Инициализация переменных для хранения количества отрицательных чисел в строке и булевого значения, указывающего, содержит ли строка отрицательные числа.
- Поиск отрицательных чисел в каждой строке матрицы.
- Если все строки содержат отрицательные числа, выводится сообщение
All rows negativeи программа завершается. - В противном случае, открывается файл output.txt для записи.
- Перебираются строки матрицы, начиная с первой (поскольку в процессе поиска отрицательных чисел могли пропустить строки).
- Если булево значение равно 0 (строка не содержит отрицательных чисел), строка записывается в файл output.txt.
- После записи строки в файл выводится символ новой строки.
- Если булево значение равно 1 (строка содержит отрицательные числа), переходится к следующей строке без записи в файл.
- В конце программы выводится сообщение
Done!.