/*
* Assignment No Sparse Matrix
*/
#include<stdio.h>
void create(int [30][30],int,int);
void createSparse(int [30][3],int,int,int);
void display(int [30][30],int,int);
void displaySparse(int [30][3],int,int);
void convert(int [30][30],int [30][3],int,int);
void convert_2d(int [30][3],int [30][30]);
void transpose(int [30][3],int [30][3]);
void addition(int [30][3],int [30][3],int [30][3]);
int r=0,c=0,r1=0,c1=0,r2=0,c2=0,r3=0,c3=0;
int main()
int a[30][30],b[30][30],as[30][3],bs[30][3],cc[30][30],ts[30][3],cs[30][3],as1[30][3];
int ch,v;
//char ch1;
do
printf("\n\n\n\t\t\t*** MENU ***\n\n") ;
printf("\n\t\t-----------------------------------------------------");
printf("\n\n\n\t\t1.Create 2D Matrix\n\n\t\t2.Display 2D Matrix");
printf("\n\n\t\t3.Convert 2D Matrix in Sparse");
printf("\n\n\t\t4.Create First Sparse Matrix\n\n\t\t5.Create 2nd Sparse Matrix");
printf("\n\n\t\t6.Display 1st Sparse Matrix\n\n\t\t7.Display 2nd Sparse Matrix");
printf("\n\n\t\t8.Convert Sparse Matrix in 2D");
printf("\n\n\t\t9.Add two Sparse matrice");
printf("\n\n\t\t10.Transpose of the 1st Sparse Matrix\n\n\t\t11.Exit\n");
printf("\n\t\t-----------------------------------------------------");
printf("\n\n\t\tEnter Your Choice : ");
scanf("%d",&ch);
switch(ch)
case 1:
printf("\n\n\t\tFirst Enter matrix A");
printf("\n\n\t\t Enter the size of the matrix :");
scanf("%d%d",&r,&c);
create(a,r,c);
break;
case 2:
printf("\n\n\n\n\t\t*** Matrix A ***\n\n\n");
display(a,r,c);
break;
case 3:
printf("\n\n\n\n\t\t*** Matrix A ***\n\n\n");
display(a,r,c);
convert(a,as1,r,c);
printf("\n\n\n\n\t\t*** Sparse Matrix of A ***\n\n\n");
displaySparse(as1,as1[0][2]+1,3);
break;
case 4:
printf("\n\n\t\t Enter Sparse matrix A");
printf("\n\n\t\t Enter the size of the matrix :");
scanf("%d%d",&r1,&c1);
printf("\n\n\t\t Enter the number of non zero values :");
scanf("%d",&v);
createSparse(as,r1,c1,v);
break;
case 5:
printf("\n\n\t\t Enter Sparse matrix B");
printf("\n\n\t\t Enter the size of the matrix :");
scanf("%d%d",&r2,&c2);
printf("\n\n\t\t Enter the number of non zero values :");
scanf("%d",&v);
createSparse(bs,r2,c2,v);
break;
case 6:
printf("\n\n\n\n\t\t*** Sparse Matrix of A ***\n\n\n");
displaySparse(as,as[0][2]+1,3);
break;
case 7:
printf("\n\n\n\n\t\t*** Sparse Matrix of B ***\n\n\n");
displaySparse(bs,bs[0][2]+1,3);
break;
case 8:
printf("\n\n\n\n\t\t*** Sparse Matrix of A ***\n\n\n");
displaySparse(as,as[0][2]+1,3);
convert_2d(as,cc);
printf("\n\n\n\n\t\t*** Converted 2D Matrix ***\n\n\n");
break;
case 9:
addition(as,bs,cs);
printf("\n\n\n\n\t\t*** Sparse Matrix A ***\n\n\n");
displaySparse(as,as[0][2]+1,3);
printf("\n\n\n\n\t\t*** Sparse Matrix B ***\n\n\n");
displaySparse(bs,bs[0][2]+1,3);
printf("\n\n\n\n\t\t*** Addition Of Sparse Matrix ***\n\n\n");
displaySparse(cs,cs[0][2]+1,3);
break;
case 10:
printf("\n\n\n\n\t\t*** Sparse Matrix A ***\n\n\n");
displaySparse(as,as[0][2]+1,3);
transpose(as,ts);
printf("\n\n\t\tTranspose of Sparse Matrix A ***\n\n\n");
displaySparse(ts,ts[0][2]+1,3);
break;
/*printf("\n\n\n\n\t\tDo u want to continue\t");
scanf("%c",&ch1);
if(ch1=='n')
break;*/
//}
}while(ch!=12);
return 0;
}
void create(int a[30][30],int r,int c)
int i,j;
printf("\n\n\t\t Enter the elements of matrix:");
for(i=0;i<r;i++)
for(j=0;j<c;j++)
scanf("%d",&a[i][j]);
void createSparse(int a[30][3],int r,int c,int v)
int i,j;
a[0][0]=r;
a[0][1]=c;
a[0][2]=v;
printf("\n\n\t\t Enter the elements of matrix:");
for(i=1;i<=a[0][2];i++)
printf("\n\n\t\t Enter the number of row,number of col and nonzero value:");
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
}
}
void display(int s[30][30],int r,int c)
int i,j;
for(i=0;i<r;i++)
printf("\n\n");
for(j=0;j<c;j++)
printf("\t\t%d",s[i][j]);
void displaySparse(int s[30][3],int r,int c)
int i,j,v;
v=s[0][2];
printf("\n\n\t\tRow Col Value");
for(i=0;i<=v;i++)
printf("\n\n");
printf("\t\t %d %d %d",s[i][0],s[i][1],s[i][2]);
void convert(int aa[30][30],int sp[30][3],int n,int m)
{
int p=1,i,j;
sp[0][0]=n;
sp[0][1]=m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(aa[i][j]!=0)
sp[p][0]=i;
sp[p][1]=j;
sp[p][2]=aa[i][j];
p++;
sp[0][2]=p-1;
void convert_2d(int sp[30][3],int aa[30][30])
{
int i,j,k=1;
r3=sp[0][0];
c3=sp[0][1];
for(i=0;i<r3;i++)
for(j=0;j<c3;j++)
if(i==sp[k][0]&&j==sp[k][1])
aa[i][j]=sp[k][2];
k++;
else
aa[i][j]=0;
printf("\n\n\n\n\t\t*** Matrix c ***\n\n");
display(aa,r3,c3);
void transpose(int sp1[30][3], int sp2[30][3])
int c1=1,i,j;
sp2[0][0]=sp1[0][0];
sp2[0][1]=sp1[0][1];
sp2[0][2]=sp1[0][2];
for(i=0;i<sp1[0][0];i++)
for(j=1;j<sp1[0][2]+1;j++)
if(sp1[j][1]==i)
sp2[c1][0]=sp1[j][1];
sp2[c1][1]=sp1[j][0];
sp2[c1][2]=sp1[j][2];
c1++;
void addition(int aa[30][3],int bb[30][3],int cc[30][3])
int i=1,j=1,n,n1,k=1;
n=aa[0][2];
n1=bb[0][2];
cc[0][0]=aa[0][0];
cc[0][1]=aa[0][1];
while(i<=n && j<=n1)
{
if(aa[i][0]==bb[j][0] && aa[i][1]==bb[j][1])
cc[k][0]=aa[i][0];
cc[k][1]=aa[i][1];
cc[k][2]=aa[i][2]+bb[j][2];
i++;
j++;
k++;
else if(aa[i][0]==bb[j][0] && aa[i][1]!=bb[j][1])
if(aa[i][1]<bb[j][1])
cc[k][0]=aa[i][0];
cc[k][1]=aa[i][1];
cc[k][2]=aa[i][2];
i++;
k++;
if(bb[j][1]<aa[i][1])
cc[k][0]=bb[j][0];
cc[k][1]=bb[j][1];
cc[k][2]=bb[j][2];
j++;
k++;
else if(aa[i][0]<bb[j][0])
cc[k][0]=aa[i][0];
cc[k][1]=aa[i][1];
cc[k][2]=aa[i][2];
i++;
k++;
else if(bb[j][0]<aa[i][0])
cc[k][0]=bb[j][0];
cc[k][1]=bb[j][1];
cc[k][2]=bb[j][2];
j++;
k++;
while(i<=n)
{
cc[k][0]=aa[i][0];
cc[k][1]=aa[i][1];
cc[k][2]=aa[i][2];
i++;
k++;
while(j<=n1)
cc[k][0]=bb[j][0];
cc[k][1]=bb[j][1];
cc[k][2]=bb[j][2];
j++;
k++;
cc[0][2]=k-1;