answersLogoWhite

0

// sparse matrix addition.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include<stdio.h>

#include<conio.h>

void read_sp_matrix(int sp[100][100]);

void add_sp_matrix( int sp1[100][100],int sp2[100][100],int sp3[100][100]);

void print_sp_matrix(int sp[100][100]);

int _tmain(int argc, _TCHAR* argv[])

{

int sp1[100][100],sp2[100][100],sp3[100][100],sp[100][100],i,j,k,r,c;

printf("Enter the first sparse matrix row size,column size & number of non zero elements");

read_sp_matrix(sp1);

printf("Enter the second sparse matrix row size,column size & number of non zero elements");

read_sp_matrix(sp2);

printf("You entired the first sparse matrix \n");

print_sp_matrix(sp1);

printf("You entired the second sparse matrix \n");

print_sp_matrix(sp2);

printf("Result of sparse matrix addition \n");

add_sp_matrix(sp1,sp2,sp3);

print_sp_matrix(sp3);

getch();

}

void read_sp_matrix(int sp[100][100])

{

int i,j,k,r,c,t;

scanf("d%d",&sp[0][0],&sp[0][1],&sp[0][2]);

r=sp[0][0];

c=sp[0][1];

k=1;

printf("Enter the sparse matrix elements \n");

for(i = 0; i < r; i++)

{

for(j = 0; j < c; j++)

{

scanf("%d",&t);

if(t != 0)

{

sp[k][0] = i;

sp[k][1] = j;

sp[k][2] = t;

k++;

}

}

}

}

void add_sp_matrix(int sp1[100][100],int sp2[100][100],int sp3[100][100])

{

int i,j,k,t1,t2,x;

t1 = sp1[0][2];

t2 = sp2[0][2];

i=j=k=1;

if((sp1[0][0] !=sp2[0][0])&&(sp1[0][1] !=sp2[0][1]))

{

printf("Invalid matrix ,try to correct \n");

goto x;

}

while((i <= t1)&&(j <= t2))

{

if(sp1[i][0] < sp2[j][0])

{

sp3[k][0] = sp1[i][0];

sp3[k][1] = sp1[i][1];

sp3[k][2] = sp1[i][2];

k++;

i++;

}

else if(sp1[i][0] > sp2[j][0])

{

sp3[k][0] = sp2[j][0];

sp3[k][1] = sp2[j][1];

sp3[k][2] = sp2[j][2];

k++;

j++;

}

if((sp1[i][0] sp2[0][1])

{

s = sp1[i][2] + sp2[j][2];

if(s != 0)

{

sp3[k][0] = sp1[i][0];

sp3[k][1] = sp1[i][1];

sp3[k][2] = sp1[i][2] + sp2[j][2];

k++;

i++;

j++;

x++;

}

else

{

i++;

j++;

}

}

else if(sp1[i][1] > sp2[j][1])

{

sp3[k][0] = sp2[j][0];

sp3[k][1] = sp2[j][1];

sp3[k][2] = sp2[j][2];

k++;

j++;

x++;

}

else

{

sp3[k][0] = sp1[i][0];

sp3[k][1] = sp1[i][1];

sp3[k][2] = sp1[i][2];

k++;

i++;

x++;

}

}

else if(sp1[i][0] > sp2[j][0])

{

sp3[k][0] = sp2[j][0];

sp3[k][1] = sp2[j][1];

sp3[k][2] = sp2[j][2];

k++;

j++;

x++;

}

else

{

sp3[k][0] = sp1[j][0];

sp3[k][1] = sp1[j][1];

sp3[k][2] = sp1[i][2];

k++;

i++;

x++;

}

}

while(i <= t1)

{

sp3[k][0] = sp1[i][0];

sp3[k][1] = sp1[i][1];

sp3[k][2] = sp1[i][2];

k++;

i++;

x++;

}

while(j <= t2)

{

sp3[k][0] = sp2[j][0];

sp3[k][1] = sp2[j][1];

sp3[k][2] = sp2[j][2];

k++;

j++;

x++;

}

sp3[0][0] = sp1[0][0];

sp3[0][1] = sp1[0][1];

sp3[0][2] = x/*sp1[0][2]*/;

int d = k-1;

printf("The Resultant Matrix \n");

for(i= 0;i<=d;i++)

{

for(j=0;j<3;j++)

{

printf("%2d ",sp3[i][j]);

}

printf("\n");

}

getch();

}

User Avatar

Wiki User

12y ago

What else can I help you with?