Cod sursa(job #326844)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef enum
{
ERROR = -1,
OK = 0
}STATUS;
STATUS readFile(char *fileName);
STATUS writeFile(char *fileName, int sum);
int tableSum(int **table);
int lineSum(int **matrix, int line);
int colSum(int **matrix, int col);
void printMatrix(int **matrix);
int n=0, m=0;
int **matrix;
STATUS readFile(char *fileName)
{
STATUS retVal = OK;
int j,i=0,result;
FILE *fp;
fp=fopen (fileName,"r");
if (NULL == fp)
{
printf ("Error: cannot open file! \n");
retVal = ERROR;
}
else
{
fscanf(fp, "%d",&n);
fscanf(fp, "%d",&m);
if ( (n>16) || (m>16) || (n<1) || (m<1) )
{
printf("Please modify the entry data!!!\n");
retVal = ERROR;
}
if (retVal == OK)
{
matrix = (int**)malloc(n*sizeof(int*));
for (i=0; i<n;i++)
{
matrix[i]= (int *) malloc(m*sizeof(int));
for (j=0; j<m; j++)
{
result=fscanf(fp,"%d",&matrix[i][j]);
if (result<0)
{
printf("Invalid Data!");
retVal = ERROR;
}
}
}
}
}
fclose(fp);
return retVal;
}
STATUS writeFile(char *fileName, int sum)
{
STATUS retVal = OK;
FILE *fp;
fp=fopen (fileName,"w");
if (NULL == fp)
{
printf ("Error: cannot open file! \n");
retVal = ERROR;
}
else
{
fprintf(fp,"%d",sum);
}
fclose(fp);
return retVal;
}
/* Used only for debug */
void printMatrix(int **matrix)
{
int i,j;
for (i=0; i<n; i++)
{
for (j=0;j<m;j++)
{
printf ("matrix[%d][%d] = %d \n",i,j,matrix[i][j]);
}
}
}
int tableSum(int **table)
{
int i,j,sum=0;
for ( i=0 ; i<n ; i++ )
{
for ( j=0 ; j<m ; j++)
{
sum = sum + table[i][j];
}
}
return sum;
}
int lineSum(int **matrix, int line)
{
int i, sum = 0;
for (i=0;i<m; i++)
{
sum += matrix[line][i];
}
return sum;
}
int colSum(int **matrix, int col)
{
int i, sum = 0;
for (i=0;i<n; i++)
{
sum += matrix[i][col];
}
return sum;
}
int main(int argc, char *argv[])
{
STATUS retVal;
int i,j,sum;
retVal = readFile("flip.in");
if (retVal != OK)
{
printf("Errors found while reading file \n");
}
/* Calculate the sum on lines; if it's greater than 0 we don't need to multiply with "-1" */
for ( i=0 ; i<n ; i++)
{
if ( lineSum(matrix,i)<0 )
{
for (j=0; j<m; j++)
{
matrix[i][j] *= (-1);
}
}
}
/* Calculate the sum on collumns; if it's greater than 0 we don't need to multiply with "-1" */
for ( i=0 ; i<m ; i++)
{
if ( colSum(matrix,i)<0 )
{
for (j=0; j<n; j++)
{
matrix[j][i] *= (-1);
}
}
}
sum = tableSum(matrix);
writeFile("flip.out",sum);
/* Free the memory */
for (i=0;i<n;i++)
{
free(matrix[i]);
}
free(matrix);
/*system("PAUSE");*/
return 0;
}