AlgorithmProgramming

সি প্রোগ্রামিং ব্যবহার করে দুটি ম্যাট্রিক্স এর গুণফল নির্ণয় । Matrix multiplication using The C language

সি প্রোগ্রামিং ভাষা ব্যবহার করে দুটি ম্যাট্রিক্স এর গুনফল নির্ণয় করা কিছু সাধারন প্রোগ্রামিং সমস্যা গুলোর মধ্যে একটি । এই সমস্যার সমাধান করাটা একটু বড় হলেও সহজ আর মজার । এটা একটা সোজা প্রয়োগ এর প্রশ্ন ।



বুঝার সুবিধার্থে আমি কোডটাকে কয়েকটা ভাগে বিভক্ত করে বর্ণনা করব ।

স্টেপ ১ (ইনপুট নেয়া) :

ইনপুট নেয়ার জন্য আমরা প্রথমে ৪ টা ভেনিয়েবল নিব । r , c , r1 , c1 . scanf() ফাংশন ব্যবহার করে আমরা ইনপুটা গুলো নিব । ( লাইন ৪  ও লাইন ১৬ ) । পরে আমরা দুইটা এরে নিব । r * c এবং r1 * c1 সাইজের । (লাইন ৬ আর লাইন ১৭ ) । পরে আমরা ৮ থেকে ১৪ লেইনের মাধ্যমে ১ম এরে কে ইনপুট নিব এবং ১৮ থেকে ১৪ লাইন দিয়ে ২য় এরে কে ইনপুট নিব । সুতরাং আমাদের ইনপুট অংশ টুকু নিম্নরুপ :
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int r,c,c1,r1,i,j;
  5. scanf(“%d%d”,&r,&c);
  6. int arr[r][c];

  7. for(i=0;i<r;i++)
  8. {
  9.     for(j=0;j<c;j++)
  10.     {
  11.         scanf(“%d”,&arr[i][j]);
  12.     }
  13. }

  14. scanf(“%d%d”,&r1,&c1);
  15. int arr2[r1][c1];
  16. for(i=0;i<r1;i++)
  17. {
  18.     for(j=0;j<c1;j++)
  19.     {
  20.         scanf(“%d”,&arr2[i][j]);
  21.     }
  22. }
  23. }

স্টেপ ২ ( লুপিং ) :

এখানেই আমরা মুল কাজটা করব । আমরা জানি যদি দুটি ম্যট্রিক্স এর প্রথমটার কলাম আর দ্বিতীয়টা রো নাম্বার সমান না হয় তাহলে গুন করা সম্ভব না । আর গুন করার পরে উত্তর হিসাবে আমরা যে ম্যট্রিক্স পাব তার সােইজ হবে প্রথমটার রো আর দ্বিতীয়টা কলাম নিয়ে গঠিত । সুতরাং আমাদের প্রথমে কন্ডিশন দিতে হবে । লাইন নং ২৬ । যদি কন্ডিশন সত্য হয় তবে ans[r][c1] সাইজের একটা এরে নিব উত্তর জমা রাখার জন্য । ans array প্রত্যেকটা উপাদান শূন্য করে নিতে হবে ।
যেহেতু আমাদের উত্তর এর রো সংখ্য r  থেকে বড় না , সুতরাং আমরা একটা লুপ নিতে পারি যা ০ থেকে r-1 পর্যন্ত যাবে । এই লুপের মধ্যে এখন আরেকটা নেস্টেড লুপ দিতে হবে । যেহেতু আমাদের উত্তর এ কলাম সংখ্যা c1  এর বেশি নং , তাই আমরা দিত্বীয় লুপটা ০ থেকে c1-1 পর্যন্ত ঘুরাবো ।
এখন এই লুপের মধ্যে আরেকটি লুপ দিব । এই লুপটাই আমাদের সবচেয়ে গুরুত্বপূর্ন কাজটা করে দিবে। এর মাধ্যমে আমরা দুটি ম্যাট্রিক্স এরই ই|লিমেন্ট  গুলো নিয়ে গুন করতে পারব । প্রতি সময় গুণের পরে আমারা গুনফল ans[i][j] পজিশনে যোগ করব করব ।
( লাইন ২৬ থেকে৫০ ) 
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int r,c,c1,r1,i,j,k;
  5. scanf(“%d%d”,&r,&c);
  6. int arr[r][c];

  7. for(i=0;i<r;i++)
  8. {
  9.     for(j=0;j<c;j++)
  10.     {
  11.         scanf(“%d”,&arr[i][j]);
  12.     }
  13. }

  14. scanf(“%d%d”,&r1,&c1);
  15. int arr2[r1][c1];
  16. for(i=0;i<r1;i++)
  17. {
  18.     for(j=0;j<c1;j++)
  19.     {
  20.         scanf(“%d”,&arr2[i][j]);
  21.     }
  22. }

  23. if(c==r1)
  24. {
  25.     int ans[r][c1];
  26.     
  27.     for(i=0;i<r;i++)
  28.     {
  29.         for(j=0;j<c1;j++)
  30.         {
  31.             ans[i][j]=0;
  32.         }
  33.     }
  34.     
  35.     
  36.     for(i=0;i<r;i++)
  37.     {
  38.         for(j=0;j<c1;j++)
  39.         {
  40.             for(k=0;k<r1;k++)
  41.             {
  42.                 ans[i][j]+=arr[i][k]*arr2[k][j];
  43.                 
  44.             }
  45.         }
  46.     }
  47.     
  48. }

  49. return 0;
  50. }

শেষ ধাপ ( আউটপুট ) :

যখন আমাদের সব হিসাব নিকাশ শেষ হবে তখন আমরা লাইন ৫১ থেকে ৫৯ এর মাধ্যমে উত্তর প্রিস্ট করে দিব ।

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int r,c,c1,r1,i,j,k;
  5. scanf(“%d%d”,&r,&c);
  6. int arr[r][c];

  7. for(i=0;i<r;i++)
  8. {
  9.     for(j=0;j<c;j++)
  10.     {
  11.         scanf(“%d”,&arr[i][j]);
  12.     }
  13. }

  14. scanf(“%d%d”,&r1,&c1);
  15. int arr2[r1][c1];
  16. for(i=0;i<r1;i++)
  17. {
  18.     for(j=0;j<c1;j++)
  19.     {
  20.         scanf(“%d”,&arr2[i][j]);
  21.     }
  22. }

  23. if(c==r1)
  24. {
  25.     int ans[r][c1];
  26.     
  27.     for(i=0;i<r;i++)
  28.     {
  29.         for(j=0;j<c1;j++)
  30.         {
  31.             ans[i][j]=0;
  32.         }
  33.     }
  34.     
  35.     
  36.     for(i=0;i<r;i++)
  37.     {
  38.         for(j=0;j<c1;j++)
  39.         {
  40.             for(k=0;k<r1;k++)
  41.             {
  42.                 ans[i][j]+=arr[i][k]*arr2[k][j];
  43.                 
  44.             }
  45.         }
  46.     }
  47.     
  48.     for(i=0;i<r;i++)
  49.     {
  50.         for(j=0;j<c1;j++)
  51.         {
  52.             printf(“%d “,ans[i][j]);
  53.         }
  54.         
  55.         printf(“n”);
  56.     }
  57. }

  58. return 0;
  59. }
আজ এ পর্যন্তই । অতি শিঘ্রই বড় ধরনের কোডিং সিরিজ নিয়ে হাজির হবো । হ্যাপি কোডিং । <3
Tags

Related Articles

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Close
Close