Cod sursa(job #326843)

Utilizator ionelm2Maftei Ionel ionelm2 Data 26 iunie 2009 13:08:03
Problema Jocul Flip Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.93 kb
#include <stdio.h>
#include <stdlib.h>
#include <conio.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");

  fprintf(fp,"%d",sum);

  fclose(fp);

}

/* 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;
}