Skip to main content

Chain Matrix Multiplication in C Programming

#include< stdio.h>
#include< conio.h>
void MatrixChain(long*,long);
void pop(long[10][10],long,long);
long s[10][10],m[10][10];


void main()
{
 long *p,n,i,j,str,end;
 clrscr();
 printf("\n Enter number of element for p Matrix:");
 scanf("%ld",&n);
 printf("\n Enter dimension for P matrix:");

 for(i=0;i< =n;i++)
 {
  scanf("%ld",&p[i]);
 }
 MatrixChain(p,n+1);
 printf("\n-------------------------------------------");
 printf("\nEnter starting and Ending matrix:");
 scanf("%ld %ld",&str,&end);
 printf("\n-------------------------------------------");
 printf("\n Parenthesization order for Matrix Chained Multiplication(MCM) is:");
 printf("\n-------------------------------------------\n");
 pop(s,str,end);
 printf("\n-------------------------------------------");

getch();
}

void MatrixChain(long p[10],long len)
{
 long n,i,j,l,q,k;
 n=len-1;

 for(i=0;i< =n;i++)
  for(j=0;j< n;j++)
   m[i][j]=-1;
 for(i=0;i< =n;i++)
  for(j=0;j< =n;j++)
   s[i][j]=-1;

 for(i=1;i< =n;i++)
  m[i][i]=0;



 for(l=2;l< =n;l++)
 {
  for(i=1;i< =n-l+1;i++)
  {
   j=i+l-1;
   m[i][j]=32767;

   for(k=i;k< =j-1;k++)
   {
    q=m[i][k]+m[k+1][j]+(p[i-1]*p[k]*p[j]);
    if(q< m[i][j])
    {
     m[i][j]=q;
     s[i][j]=k;
    }
   }
  }
 }





 printf("\n--------------------M matrix--------------------");


 for(i=1;i< =n;i++)
 {
  printf("\n");
  for(j=1;j< =n;j++)
   printf("%7d",m[i][j]);

 }
  printf("\n--------------------S matrix--------------------");

 for(i=1;i< =n;i++)
 {
  printf("\n");
  for(j=1;j< =n;j++)
   printf("%7d",s[i][j]);

 }
}

void pop(long s[10][10],long i,long j)
{

 if(i==j)
  printf("A%d",i);
 else
 {
  printf("(");
  pop(s,i,s[i][j]);
  pop(s,s[i][j]+1,j);
  printf(")");
 }

}

OUTPUT
Enter number of element for p Matrix:6

 Enter dimension for P matrix:30 3 15 5 10 20 8

--------------------M matrix--------------------
      0   1350    675   1275   2775   2175
     -1      0    225    375    975   1455
     -1     -1      0    750   2500   2400
     -1     -1     -1      0   1000   1800
     -1     -1     -1     -1      0   1600
     -1     -1     -1     -1     -1      0
--------------------S matrix--------------------
     -1      1      1      1      1      1
     -1     -1      2      3      4      5
     -1     -1     -1      3      3      3
     -1     -1     -1     -1      4      5
     -1     -1     -1     -1     -1      5
     -1     -1     -1     -1     -1     -1
-------------------------------------------
Enter starting and Ending matrix:1 6

-------------------------------------------
 Parenthesization order for Matrix Chained Multiplication(MCM) is:
-------------------------------------------
(A1((((A2A3)A4)A5)A6))
-------------------------------------------

Comments

Popular posts from this blog

MVT (Multiprogramming Variable Task) in C Programming

#include< stdio.h> #include< conio.h> void main() { int i,os_m,nPage,total,pg[25]; clrscr(); printf("\nEnter total memory size:"); scanf("%d",&total); printf("\nEnter memory for OS:"); scanf("%d",&os_m); printf("\nEnter no. of pages:"); scanf("%d",&nPage); for(i=0;i< nPage;i++) { printf("Enter size of page[%d]:",i+1); scanf("%d",&pg[i]); } total=total-os_m; for(i=0;i< nPage;i++) { if(total>=pg[i]) { printf("\n Allocate page %d",i+1); total=total-pg[i]; } else printf("\n page %d is not allocated due to insufficient memory.",i+1); } printf("\n External Fragmentation is:%d",total); getch(); } OUTPUT Enter total memory size:1024 Enter memory for OS:256 Enter no. of pages:4 Enter size of page[1]:128 Enter size of page[2]:512 Enter size of page[3]:64 Enter size of page[4]:512 Allocate page 1 Al

First Come First Serve (FCFS) Page replacement algorithm in C Programming

#include< stdio.h> #include< conio.h> int fsize; int frm[15]; void display(); void main() { int pg[100],nPage,i,j,pf=0,top=-1,temp,flag=0; clrscr(); printf("\n Enter frame size:"); scanf("%d",&fsize); printf("\n Enter number of pages:"); scanf("%d",&nPage); for(i=0;i< nPage;i++) { printf("\n Enter page[%d]:",i+1); scanf("%d",&pg[i]); } for(i=0;i< fsize;i++) frm[i]=-1; printf("\n page | \t Frame content "); printf("\n--------------------------------------"); for(j=0;j< nPage;j++) { flag=0; for(i=0;i< fsize;i++) { if(frm[i]==pg[j]) { flag=1; break; } } if(flag==0) { if(top==fsize-1) { top=-1; } pf++; top++; frm[top]=pg[j]; } printf("\n %d |",pg[j]); display(); } printf("\n--------------------------------------"); printf("\n total page fault:%d",pf); getch(); }

Deadlock Prevention using Banker’s Algorithm in C Programming

#include< stdio.h> #include< conio.h> void main() { int allocated[15][15],max[15][15],need[15][15],avail[15],tres[15],work[15],flag[15]; int pno,rno,i,j,prc,count,t,total; count=0; clrscr(); printf("\n Enter number of process:"); scanf("%d",&pno); printf("\n Enter number of resources:"); scanf("%d",&rno); for(i=1;i< =pno;i++) { flag[i]=0; } printf("\n Enter total numbers of each resources:"); for(i=1;i<= rno;i++) scanf("%d",&tres[i]); printf("\n Enter Max resources for each process:"); for(i=1;i<= pno;i++) { printf("\n for process %d:",i); for(j=1;j<= rno;j++) scanf("%d",&max[i][j]); } printf("\n Enter allocated resources for each process:"); for(i=1;i<= pno;i++) { printf("\n for process %d:",i); for(j=1;j<= rno;j++) scanf("%d",&allocated[i][j]); } printf("\n avai