лаба2 2й семестр
.docxСт. Новичонок М.С. Гр. ІНФ-15-1
Лабораторная работа №2
Тема: «Файловые потоки языка С»
Вариант 6
Дана целочисленная прямоугольная матрица. Определить:
1) сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;
2) номера строк и столбцов всех седловых точек матрицы.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%s","Nachalo program\n");
FILE *fin(NULL),*fout(NULL);
char namef[40];
puts("Vvedite imja file\n");
gets(namef);//считываем строку с клавиатуры
fin=fopen(namef,"r");//открываем текстовый файл для чтения
if (!fin)
{
printf("Can not open file\n");
return 1;
}
fout=fopen("f2.txt","w");//открываем текстовый файл для записи
int n,m;//резмер массива n на m
fscanf(fin,"%d%d",&n,&m);//считываем два числа которые
int **mas=new int*[n];
int i,a;
for(i=0;i<n;i++)
mas[i]=new int[m];
//считываем данные из файла
for(i=0;i<n;i++)
for(int j=0;j<m;j++)
fscanf(fin,"%d",&mas[i][j]);
//выводим информацию на экран в форматированном виде
for(i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%5d",mas[i][j]);//ширина поля вывода занимает 5 знакомест
}
printf("%c",'\n');
}
fclose(fin);
//выводим информацию в текстовый файл
for(i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
fprintf(fout,"%5d",mas[i][j]);//ширина поля вывода занимает 5 знакомест
}
fprintf(fout,"%c",'\n');
}
fclose(fout);
//выводим информацию в бинарный файл
for(i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
fprintf(fout,"%5d",mas[i][j]);//ширина поля вывода занимает 5 знакомест
}
fprintf(fout,"%c",'\n');
}
fout=fopen("f3.txt","wb");//открываем бинарный файл для записи
//записываем информацию в бинарный файл построчно
for(i=0;i<n;i++)
{
fwrite(mas[i],sizeof(int)*m,1, fout);
}
fclose(fout);
int **mas2=new int*[n];
for(i=0;i<n;i++)
{
mas2[i]=new int[m];
}
fin=fopen("f3.txt","rb");//открываем бинарный файл для чтения
//считываем информацию из бинарного файла построчно
for(i=0;i<n;i++)
{
fread(mas2[i],sizeof(int)*m,1, fin);
}
printf("%c",'\n');
//выводим информацию на экран в форматированном виде для
//проверки правильности полученной информации
for(i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
printf("%5d",mas2[i][j]);//ширина поля вывода занимает 5 знакомест
}
printf("%c",'\n');
}
fclose(fout);
//поиск суммы элементов в строках с отрицательным элементом
for (int i = 0; i < n; ++i)
{
int summ(0);
bool isPrint = false;
for (int j = 0; j < m; ++j)
{
summ += mas[i][j];
if (mas[i][j] < 0)
{
isPrint = true;
}
}
if (isPrint)
{
fout=fopen("f2.txt","a+");
printf("%s%d","\tsumm row ",i);
fprintf(fout,"%s%d","\tsumm row ",i);
printf("%s%d"," = ", summ );
fprintf(fout,"%s%d"," = ", summ );
}
}
//поиск седловых точек
for (int i = 0; i < n; ++i)
{
int min(0);
bool isPrint = true;
for (int j = 0; j < m; ++j)
{
if (mas[i][min] > mas[i][j])
{
min = j;}
}
for (int z = 0; (z < n) && isPrint; ++z)
{
if (mas[i][min] < mas[z][min])
{
isPrint = false;
}
}
if (isPrint)
{
fout=fopen("f2.txt","a+");
//printf("%s%d","\nsaddle points:");
printf("%s%d","\ncolumn:",min);
printf("%s%d","row:",i );
fprintf(fout,"%s%d","\tcolumn ",min);
fprintf(fout,"%s%d","row ",i);
}
/*if(!isPrint)
{
fout=fopen("f2.txt","a+");
printf("%s%d","\nno saddle points");
fprintf(fout,"%s%d","\tno saddle points");
break;
}*/
}
puts("\nFINISH\n");
getchar();
return 0;
}