Showing posts with label Matrix. Show all posts
Showing posts with label Matrix. Show all posts

Matrix Multiplication - TCP - Client Server Program - Network-DBMS Lab - C Program

Program:

// Client Program: mc.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>

main()
{
 struct sockaddr_in client,server;
 int a[10][10],b[10][10],c[10][10],mt[4];
 int s,sock,r,i,j;
 client.sin_family=AF_INET;
 client.sin_port=3000;
 client.sin_addr.s_addr=inet_addr("127.0.0.1");
 s=socket(AF_INET,SOCK_STREAM,0);
 connect(s,(struct sockaddr *)&client,sizeof(client));
 
 printf("Enter order of matrix 1:");
  scanf("%d %d",&mt[0],&mt[1]);
 printf("Enter order of matrix 2:");
  scanf("%d %d",&mt[2],&mt[3]);
 if(mt[1]!=mt[2])
  printf("Matrices cannot be multiplied");
 else
 {
  send(s,&mt,sizeof(mt),0);
  printf("Enter Elements for matrix 1:\n");
  for(i=0;i<mt[0];i++)
  {
   for(j=0;j<mt[1];j++)
   {
    scanf("%d",&a[i][j]);
   }
  }
  send(s,&a,sizeof(a),0);
  printf("Enter Elements for matrix 2:\n");
  for(i=0;i<mt[2];i++)
  {
   for(j=0;j<mt[3];j++)
   {
    scanf("%d",&b[i][j]);
   }
  } 
  send(s,&b,sizeof(b),0);
  
  recv(s,&c,sizeof(c),0);
  printf("\nResult:\n"); 
  for(i=0;i<mt[0];i++)
  {
   printf("\n");  
   for(j=0;j<mt[3];j++)
   {
    printf(" %d ",c[i][j]);
   }
  } 
 }
 printf("\n"); 
 close(s);
}




Server Program: ms.c

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>

main()
{
 struct sockaddr_in client,server;
 int a[10][10],b[10][10],c[10][10],mt[4];
 int s,sock,r,i,j,sz,k;
 server.sin_family=AF_INET;
 server.sin_port=3000;
 server.sin_addr.s_addr=inet_addr("127.0.0.1");
 s=socket(AF_INET,SOCK_STREAM,0);
 bind(s,(struct sockaddr *)&server,sizeof(server));
 listen(s,1);
 sz=sizeof(server);
 sock=accept(s,(struct sockaddr *)&server,&sz);
 recv(sock,&mt,sizeof(mt),0);
 recv(sock,&a,sizeof(a),0);
 printf("\nReceived Matrix 1\n");
 for(i=0;i<mt[0];i++)
 {
  printf("\n");  
  for(j=0;j<mt[1];j++)
  {
   printf(" %d ",a[i][j]);
  }
 } 
  
 recv(sock,&b,sizeof(b),0);
 printf("\nReceived Matrix 2\n"); 
 for(i=0;i<mt[2];i++)
 {
  printf("\n");  
  for(j=0;j<mt[3];j++)
  {
   printf(" %d ",b[i][j]);
  }
 } 
  
 printf("\nMultiplying........\n"); 
 for(i=0;i<mt[0];i++)
 for(j=0;j<mt[3];j++)
 {
  c[i][j]=0;
  for(k=0;k<mt[1];k++)
   c[i][j]+=a[i][k]*b[k][j];
 }
 printf("\nResult:\n") ; 
 for(i=0;i<mt[0];i++)
 {
  printf("\n");  
  for(j=0;j<mt[3];j++)
  {
   printf(" %d ",c[i][j]);
  }
 }
 printf("\n"); 
 send(sock,&c,sizeof(c),0);
 close(sock);
 close(s); 
}



Output:

Terminal 1: (Server)
nn@linuxmint ~ $ gcc ms.c -o s
nn@linuxmint ~ $ ./s

Received Matrix 1

1 1 
1 1 
Received Matrix 2

2 2
2 2
Multiplying........

Result:

4 4 
4 4 
nn@linuxmint ~ $ 

Terminal 2: (Client)
nn@linuxmint ~ $ gcc mc.c -o c
nn@linuxmint ~ $ ./c
Enter order of matrix 1:2
2
Enter order of matrix 2:2
2
Enter Elements for matrix 1:
1
1
1
1
Enter Elements for matrix 2:
2
2
2
2

Result:

4 4 
4 4
nn@linuxmint ~ $ 

Matrix Multiplication using Shared Memory- Systems Lab - C Program



//Matrix Multiplication using Shared Memory-OS Lab

#include<stdio.h>
#include<unistd.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<sys/wait.h>
#include<sys/types.h>
#define shmsize 100
#define shmmode (SHM_R|SHM_W)
#define shmkey (key_t)31

int main() {
    int shmid1, shmid2, pid, status;
    int *shmdata1, *shmdata2, *shmdata;
    int mtx1[10][10], mtx2[10][10];
    int i,j,k,r1,r2,c1,c2;
    struct shmd_ds *shmidds;
    shmid1 = shmget(shmkey,shmsize,shmmode|IPC_CREAT|IPC_EXCL);
    shmdata1 = (int*)shmat(shmid1,0,0);
    shmdata = shmdata1;
    printf("\nShmID: %d ShmData: %d \n",shmid1,*shmdata1);
    printf("Enter the rows and columns of matrix 1:");
    scanf("%d%d",&r1,&c1);
    printf("Enter the matrix 1: \n");
    for(i=0;i<r1;++i)
        for(j=0;j<c1;++j)
            scanf("%d",&mtx1[i][j]);
    printf("\nEnter the rows and columns of matrix 2:");
    scanf("%d%d",&r2,&c2);
    printf("Enter the matrix 2: \n");   
    for(i=0;i<r2;++i)
        for(j=0;j<c2;++j)
            scanf("%d",&mtx2[i][j]);   
    printf("\n Hello,note this...");
    if(r2!=c1) {
        printf("\nCannot Multiply");
        return 0;
    }

    for(i=0;i<r1/2;i++)
        for(j=0;j<c1;j++) {
        *shmdata1 = 0;
        for(k=0;k<c1;k++)
            *shmdata1 += mtx1[i][k]*mtx2[k][j];
            shmdata1 += sizeof(int);
        }
    pid = fork();
    if(pid == 0) {
        for(i=r1/2;i<r1;i++)
            for(j=0;j<c2;j++) {
                *shmdata1 = 0;
                for(k=0;k<c1;k++)
                    *shmdata1 += mtx1[i][k]*mtx2[k][j];
                    shmdata1 += sizeof(int);
            }       
    }
    while((pid = wait(&status))!= -1);
    shmdata1 = shmdata;
    printf("\n\n\nResult from %d\n", getpid());
    for(i=0;i<r1;++i) {
        printf("\n    ");
        for(j=0;j<c2;j++,shmdata1+=sizeof(int))
            printf("%d ",*shmdata1);
    }
    shmdt((void*)shmdata1);
    shmdt((void*)shmdata2);
    shmctl(shmid1,IPC_RMID,shmidds);
    //shmctl(shmid2,IPC_RMID,shmidds);
    return 1;
}


Matrix Inverse & Transpose- C Program

Program:
#include<stdio.h>
#include<math.h>
void readmatrix(int x[10][10],int);
void showmatrix(int g[10][10],int);
void transpose(int y[10][10],int);
int det(int a[10][10],int);
void inv(int a[10][10],int);
main()
{
    int a[10][10],m,p;
    printf("Enter the order of the matrix:\n");
    scanf("%d",&m);
    printf("Enter the elements for the matrix:\n");
    readmatrix(a,m);
    printf("Matrix:\n");
    showmatrix(a,m);
    printf("Transpose of the above matrix:\n");
    transpose(a,m);
    p=det(a,m);
    printf("\nDetarminant=%d\n",p);
    inv(a,m);
}
void transpose(int y[10][10],int m)
{
    int i,j;
    int t[10][10];
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            t[i][j]=y[j][i];
        }
    }
    showmatrix(t,m);
}
int det(int a[10][10],int m)
{
    int i,j,k,l,dtr,b[10][10];
    if(m==1)
         return a[0][0];
    dtr=0;
    for(i=0;i<m;i++)
    {
            for(j=0;j<m-1;j++)
        {
            for(k=0,l=0;k<m-1;++k,++l)
            {
                if(i==l)
                     ++l;
                b[j][k]=a[j+1][l];
            }
        }
        dtr+=pow(-1,i)*a[0][i]*det(b,m-1);
    }
    return dtr;
}
void inv(int a[10][10],int m)
{
    int i,j,k,l,p,q,b[10][10],c[10][10],d;
    float in[10][10];
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            for(k=0,p=0;k<m-1;++k,++p)
            {
                for(l=0,q=0;l<m-1;++l,++q)
                {
                    if(p==i)
                        ++p;
                    if(q==j)
                        ++q;
                    b[k][l]=a[p][q];
                }
            }
            c[i][j]=pow(-1,i+j)*det(b,m-1);
        }
    }
    d=det(a,m);
    printf("\n\nThe inverse matrix\n\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            in[i][j]=c[i][j];
            in[i][j]/=d;
            printf("%f\t",in[i][j]);
        }
        printf("\n");
    }
}

void readmatrix(int x[10][10],int ord)
{
    int i,j;
   
    for(i=0;i<ord;i++)
        {
        for(j=0;j<ord;j++)
            {
            scanf("%d",&x[i][j]);
            }
        }
}

void showmatrix(int g[10][10],int ord)
{
    int i,j;
        for(i=0;i<ord;i++)
        {
        for(j=0;j<ord;j++)
                    {
            printf("%d\t",g[i][j]);
            }
        printf("\n");
                }
}

Output:
nn@linuxmint ~ $ gcc c22.c -lm
nn@linuxmint ~ $ ./a.out
Enter the order of the matrix:
2
Enter the elements for the matrix:
4
2
1
3
Matrix:
4    2   
1    3   
Transpose of the above matrix:
4    1   
2    3   

Detarminant=10


The inverse matrix

0.300000    -0.100000   
-0.200000    0.400000   
nn@linuxmint ~ $

Matrix Operations-Addition,Subtraction,Transpose - C Program

Program:
#include<stdio.h>
void readmatrix(int x[10][10],int,int);
void sum(int y[10][10],int z[10][10],int s[10][10],int,int);
void showmatrix(int g[10][10],int,int);
void difference(int d[10][10],int y[10][10],int z[10][10],int,int);
void transpose(int t[10][10],int y[10][10],int,int);
main()
{
    int a[10][10],b[10][10],c[10][10],d[10][10],t[10][10],m,n,p,q;
    printf("Enter the order of first matrix:\n");
    scanf("%d%d",&m,&n);
    printf("Enter the order of second matrix:\n");
    scanf("%d%d",&p,&q);
    if(m==p&&n==q)
    {
        printf("Enter the elements for the first matrix:\n");
        readmatrix(a,m,n);
        printf("Enter the elements for the second matrix:\n");
        readmatrix(b,p,q);
        printf("First matrix:\n");
        showmatrix(a,m,n);
        printf("Transpose of the above matrix:\n");
        transpose(t,a,m,n);
        showmatrix(t,n,m);
        printf("Second matrix:\n");
        showmatrix(b,p,q);
        printf("Transpose of the above matrix:\n");
        transpose(t,b,m,n);
        showmatrix(t,n,m);
        sum(a,b,c,p,q);
        printf("Sum of the matrix:\n");
        showmatrix(c,m,q);
        difference(d,a,b,m,n);
        printf("Difference of the matrix:\n");
        showmatrix(d,p,q);
        }
    else
        {
        printf("Operation is not possible...\n");
        }
    }
void readmatrix(int x[10][10],int u,int v)
    {
    int i,j;
   
    for(i=1;i<=u;i++)
        {
        for(j=1;j<=v;j++)
            {
            scanf("%d",&x[i][j]);
            }
        }
    }

void sum(int y[10][10],int z[10][10],int s[10][10],int m,int n)
    {
    int i,j;
    for(i=1;i<=m;i++)
        {
        for(j=1;j<=n;j++)
            {
            s[i][j]=y[i][j]+z[i][j];
            }
        }
    }
void showmatrix(int g[10][10],int f,int d)
    {
    int i,j;
        for(i=1;i<=f;i++)
        {
        for(j=1;j<=d;j++)
                    {
            printf("%d\t",g[i][j]);
            }
        printf("\n");
                }
    }
void difference(int d[10][10],int y[10][10],int z[10][10],int m,int n)
    {
    int i,j;
     for(i=1;i<=m;i++)
                {
                for(j=1;j<=n;j++)
                        {
                        d[i][j]=y[i][j]-z[i][j];
                        }
                }
    }
void transpose(int t[10][10],int y[10][10],int m,int n)
    {
    int i,j;
    for(i=1;i<=n;i++)
        {
        for(j=1;j<=m;j++)
            {
            t[i][j]=y[j][i];
            }
        }
    }

Output:
nn@linuxmint ~ $ gcc c19.c
nn@linuxmint ~ $ ./a.out
Enter the order of first matrix:
2
2
Enter the order of second matrix:
2
2
Enter the elements for the first matrix:
9
8
7
6
Enter the elements for the second matrix:
5
4
3
2
First matrix:
9    8   
7    6   
Transpose of the above matrix:
9    7   
8    6   
Second matrix:
5    4   
3    2   
Transpose of the above matrix:
5    3   
4    2   
Sum of the matrix:
14    12   
10    8   
Difference of the matrix:
4    4   
4    4   
nn@linuxmint ~ $

Print a Matrix Helically - C Program

Program:

#include<stdio.h>
void main()
{
    int arr[10][10],i, j, k,n,middle,size;
    printf("\nEnter the order:\n");
    scanf("%d",&size);
    printf("Enter the matrix:\n");
    for(i=0;i<size;i++)
        for(j=0;j<size;j++)
            scanf("%d",&arr[i][j]);

    for(i=size-1, j=0; i > 0; i--, j++)
    {
        for(k=j; k < i; k++)
            printf("%d ", arr[j][k]);
        for(k=j; k < i; k++)
            printf("%d ", arr[k][i]);
        for(k=i; k > j; k--)
            printf("%d ", arr[i][k]);
        for(k=i; k > j; k--)
            printf("%d ", arr[k][j]);
    }
    middle = (size-1)/2;
    if (size % 2 == 1)
        printf("%d\n", arr[middle][middle]);
  

}

Output:

nn@linuxmint ~ $ gcc c28.c
nn@linuxmint ~ $ ./a.out


Enter the order:
3
Enter the matrix:
1
2
3
4
5
6
7
8
9
1 2 3 6 9 8 7 4 5
nn@linuxmint ~ $

Matrix Multiplication - C Program

Program:
#include<stdio.h>
//#include<conio.h>
int a[10][10],b[10][10],c[10][10],i,j,k;

void read(int r1,int c1,int a[10][10])
{   
       for(i=0;i<r1;++i)
       for(j=0;j<c1;++j)
       scanf("%d",&a[i][j]);
}

void mul(int r1,int c2,int c1)
{
     for(i=0;i<r1;++i)
      for(j=0;j<c2;++j)
    {
            c[i][j]=0;
            for(k=0;k<c1;++k)
             c[i][j]=c[i][j]+a[i][k]*b[k][j];
    }
}

void printmat(int r1,int c2)
{
     for(i=0;i<r1;++i)
    {         
          for(j=0;j<c2;++j)
          printf("%d\t",c[i][j]);
        printf("\n");
         }
}

void main()
{
     int r1,c1,r2,c2;//clrscr();
    printf("Enter order of matrix 1:");
    scanf("%d %d",&r1,&c1);
    printf("Enter order of matrix 2:");
    scanf("%d %d",&r2,&c2);
    if(c1!=r2)
     printf("Matrices cannot be multiplied");
    else
    {
        printf("Enter Elements for matrix 1:\n");
         read(r1,c1,a);
        printf("Enter Elements for matrix 2:\n");
          read(r2,c2,b);
         mul(r1,c2,c1);
        printf("Resultant matrix :\n");
          printmat(r1,c2);
        }
//    getch();
}

Output:
nn@linuxmint ~ $ gcc c9.c
nn@linuxmint ~ $ ./a.out
Enter order of matrix 1:2
2
Enter order of matrix 2:2
2
Enter Elements for matrix 1:
1
1
1
1
Enter Elements for matrix 2:
2
2
2
2
Resultant matrix :
4    4   
4    4   
nn@linuxmint ~ $

Matrix Addition - C Program

Program:
#include<stdio.h>
//#include<conio.h>
void main()
{
    int a[100][100],b[100][100],c[100][100],i,j,m,p,q,n;
    printf("Enter the order for first matrix:");
    scanf("%d %d",&m,&n);
    printf("Enter the elements for first matrix:");
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);
    printf("Enter the order for second matrix:");
    scanf("%d %d",&p,&q);
    printf("Enter the elements for second matrix:");
    for(i=0;i<p;i++)
    for(j=0;j<q;j++)
    scanf("%d",&b[i][j]);
   
    if(m==p && p==q)
    {
        for(i=0;i<p;i++)
        for(j=0;j<q;j++)
            c[i][j]=a[i][j]+b[i][j];
        printf("Resultant matrix:\n");
        for(i=0;i<p;i++)
        {
            for(j=0;j<q;j++)
                printf("%d ",c[i][j]);
                printf("\n");
        }
    }
    else
        printf("Operation not possible.\n");
//getch();
}

Output:
nn@linuxmint ~ $ gcc c8.c
nn@linuxmint ~ $ ./a.out
Enter the order for first matrix:2
2
Enter the elements for first matrix:1
1
1
1
Enter the order for second matrix:2
2
Enter the elements for second matrix:2
2
2
2
Resultant matrix:
3 3
3 3
nn@linuxmint ~ $
Related Posts Plugin for WordPress, Blogger...