Saturday, April 26, 2014

/* Write a program to perform the following opertations:Addition,multiplication,transpose,magic square & saddle point.*/


#include<stdio.h>
#include<conio.h>
void scan_mat(int (*)[10], int *, int *);
void disp_mat(int (*)[10], int *, int *);
void add_mat(int (*)[10], int (*)[10], int (*)[10], int *, int *);
void mul_mat(int (*)[10], int (*)[10], int (*)[10], int *, int *);
void trans_mat(int (*)[10], int (*)[10], int *, int *);
void saddle_mat(int (*)[10], int *, int *);

void main()
{
     char y;
     int a[10][10], b[10][10], ans[10][10], n, r1, r2, c1, c2;
     clrscr();
     printf("Enter row and column for matrix A: ");
     scanf("%d%d", &r1, &c1);
     printf("Enter elements of matrix A (%dx%d): ", r1, c1);
     scan_mat(a, &r1, &c1);
     printf("Enter row and column for matrix B: ");
     scanf("%d%d", &r2, &c2);
     printf("Enter elements of matrix B (%dx%d): ", r2, c2);
     scan_mat(b, &r2, &c2);
     do
     {
          clrscr();
          printf("Matrix A:\n");
          disp_mat(a, &r1, &c1);
          printf("Matrix B:\n");
          disp_mat(b, &r2, &c2);
          printf("\n\nEnter choice:\n1. Addition\n2. Multiplication");
          printf("\n3. Transpose\n4.Inverse\n5. Saddle Point\n6. Magic Square");
          printf("\nChoice: ");
          scanf("%d", &n);
          printf("\n");
          switch (n)
          {
          case 1:
               if (r1 == r2 && c1 == c2)
               {
                    add_mat(a, b, ans, &r1, &c2);
                    disp_mat(ans, &r1, &c2);
               }
               else
                    printf("\nMatrix Addition not possible");

               break;

          case 2:
               if (r1 == c2)
               {
                    mul_mat(a, b, ans, &r1, &c2);
                    disp_mat(ans, &r1, &c2);
               }
               else
                    printf("\nMatrix Multiplication not possible");

               break;

          case 3:
               printf("Which matrix transpose (a/b): ");
               fflush(stdin);
               y = getche();
               printf("\n");
               switch(y)
               {
               case 'a':
                    trans_mat(a, ans, &r1, &c1);
                    disp_mat(ans, &r1, &c1);
                    break;
               
               case 'b':
                    trans_mat(b, ans, &r2, &c2);
                    disp_mat(ans, &r2, &c2);
                    break;
               }
              
                  break;

          case 4:
               /*printf("Which matrix to inverse (a/b): ");
               fflush(stdin);
               y = getche();
               printf("\n");
               if (y == 'A' || y == 'a')
               {
                    inv_mat(a, ans);
                    disp_mat(ans, &r2, &c2);
               }
               else
                    if (y == 'B' || y == 'b')
               {
                    inv_mat(b, ans);
                    disp_mat(ans, &r2, &c2);
               }*/
               break;
               
          case 5:
              printf("Which matrix to find saddle point (a/b): ");
               fflush(stdin);
               y = getche();
               printf("\nSaddle point(s) for the matrix is/are: ");
               switch(y)
               {
               case 'a':
                    saddle_mat(a,&r1, &c1);
               break;
              
               case 'b':
                    saddle_mat(b,&r2, &c2);
                 break;
               }
              
                  break;

          }
          printf("\n Do U want to continue? (y/n): ");
          fflush(stdin);
          y = getche();
     }
     while (y == 'y');
}

void scan_mat(int (*a)[10], int *r, int *c)
{
     int i, j;
     for (i = 0; i<*r; i++)
          for (j = 0; j<*c; j++)
               scanf("%d", &a[i][j]);
}

void disp_mat(int (*a)[10], int *r, int *c)
{
     int i, j;
     for (i = 0; i<*r; i++)
     {
          for (j = 0; j<*c; j++)
               printf("%d\t", a[i][j]);
          printf("\n");
     }
}

void add_mat(int (*a)[10], int (*b)[10], int (*ans)[10], int *r, int *c)
{
     int i, j;
     for (i = 0; i<*r; i++)
          for (j = 0; j<*c; j++)
               ans[i][j] = a[i][j] + b[i][j];
}

void mul_mat(int (*a)[10], int (*b)[10], int (*ans)[10], int *r, int *c)
{
     int i, j, k;

     for (i = 0; i<*r; i++)
          for (j = 0; j<*c; j++)
          {
               ans[i][j] = 0;
               for (k = 0; k<*c; k++)
                    ans[i][j] += a[i][k] * b[k][j];
          }
}

void trans_mat(int (*a)[10], int (*ans)[10], int *r, int *c)
{
     int i, j;
     for (i = 0; i<*r; i++)
          for (j = 0; j<*c; j++)
               ans[i][j] = a[j][i];
}

void saddle_mat(int (*a)[10], int *r, int *c)
{
     int i,j,k,col,min,max;
     for (i = 0; i < *r; i++)
     {
          min = a[i][0];
          for (j = 0; j < *c; j++)
               if (a[i][j] <= min)
               {
                    min = a[i][j];
                    col = j;
               }
          max = a[0][col];
          for (k = 0; k < *r; k++)
              if (a[k][col] >= max)
               {
                    max = a[k][col];
               }
         if (max == min)
               printf("%d ",a[i][col]);
         else
              printf("Not present");
     }
}

0 comments:

Post a Comment