الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن ضرب مصفوفتين

بدأه اجمل حكايه ~ في 13 مايو 2012 · 4 رد · 724 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

عندي استفسار بسيط

عندي مصفوفتين اي وبي المصفوفه بي تكون ثابته

اول شي اضربهم في بعض يطلع ناتج اسميه مثلا 1

هذا الناتج رح اضربه في بي مره ثانيه واسميه 2

والناتج2 اضربه في بي ويطلع ناتج3 وهكذا الى 10

#include <iostream>
using namespace std;
void Matrics(double a[1][4] ,  double b[4][4])
{
	int  i , j , k ,x ;
	double result[1][4]={0};
	for(i=0;i<1;i++)
	{
		for(j=0;j<4;j++)
		{
			for(k=0;k<4;k++)
			{
				result[j]+=a[k]*b[k][j];
			}
		}
	}
	cout<<"\n";
	for(x=0;x<10;x++){
	for(i=0;i<1;i++)
	{
		for(j=0;j<4;j++)
		cout<<result[j]<<" ";	
		cout<<"\n"<<endl;
	}}
}
int main()
{

	double a[1][4]={1,0,0,0};
	double b[4][4]={{.1296 , .3456 , .3456 , .1792},{.1296 , .3456 , .3456 , .1792},{0,.1296 , .3456 ,.5248},{0,0,.1296,.8704}};

	Matrics(a,b);

	return 0;
}

انا اتوقع الخطا عندي في الـ calling، الحل بسيط لكن للأسف لأني اخذت البرمجه ترم واحد واساسيات فقط

تم تعديل هذه المشاركة بواسطة Μωάμεθ αλάά في 13 مايو 2012 في 18:05 — السبب: أستخدم إسلوب افضل المره القادمه

#2

هناك خطأ في هذه الجزئية

 for(i=0;i<1;i++)
        {
                for(j=0;j<4;j++)
                {
                        for(k=0;k<4;k++)
                        {
                                result[j]+=a[k]*b[k][j];
                        }
                }
        }

قم بعمل التالي ، عرف متغير اسمه sum

 for(i=0;i<1;i++)
        {
                for(j=0;j<4;j++)
                {
                        sum = 0 ;
                        for(k=0;k<4;k++)
                        {
                                sum+=a[k]*b[k][j];
                        }
                        result[j]= sum;
                }
        }

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3
mental-driller كتب:

هناك خطأ في هذه الجزئية

 for(i=0;i<1;i++)
        {
                for(j=0;j<4;j++)
                {
                        for(k=0;k<4;k++)
                        {
                                result[j]+=a[k]*b[k][j];
                        }
                }
        }

قم بعمل التالي ، عرف متغير اسمه sum

 for(i=0;i<1;i++)
        {
                for(j=0;j<4;j++)
                {
                        sum = 0 ;
                        for(k=0;k<4;k++)
                        {
                                sum+=a[k]*b[k][j];
                        }
                        result[j]= sum;
                }
        }

عملت التغيير

لكن لازالت النتيجه نفسها ؟؟

يطلع لي ناتج ضرب a*b عشر مرات

الناتج بكل مره اضربه في b

:( مثل ما اتوقع الخطا يمكن في الـ calling يمكن لآني اعطيت قيمة ثابته لـ a ف في كل مره رح يطلع نفس الناتج ؟؟!

توآفقني الراي؟؟!!وما الحل

#4

من المفترض ان يكون تعريف المصفوفة a هكذا

double a[1][4]={0,0,0,1};

وليس

double a[1][4]={1,0,0,0};

هذا الكود بعد التعديل

#include <iostream>
using namespace std;

double multi(double a[1][4] ,  double b[4][4],int j)
{
	double sum = 0 ;
    for(int k=0;k<4;k++)
    {
			sum = sum + (a[0][k] * b[k][j]);
    }
    return sum;
}
void Matrics(double a[1][4] ,  double b[4][4])
{
        int x ;
        double result[1][4]={0} , sum;
        cout<<"\n";
        for(x=0;x<10;x++)
		{
			for(int i=0;i<1;i++)
			{
				for(int j=0;j<4;j++)
				{	
					result[0][j]= multi(a,b,j);
				}
                for(int j=0;j<4;j++)
                cout<<result[0][j]<<" ";   
				a = result ;
                cout<<"\n"<<endl;
			}
		}
}
int main()
{

        double a[1][4]={0,0,0,1};
        double b[4][4]={{1 , 0 , 0 , 0},{0 , 1 , 0 , 0},{0,0 , 1 ,0},{5,0,0,1}};

        Matrics(a,b);
		system("pause");
        return 0;
}

تم تعديل هذه المشاركة بواسطة nadir02 في 13 يونيو 2012 في 12:27

#5

لا يتحقق ضرب المصفوفات إلا و فقط كان عدد أعمدة الأولى مساويًا لعدد الأسطر في الثانية

2517735697777c921f9ff65f9bd0f13f.png

باعتبار c مصفوفة حاصل ضرب مصفوفتين a و b

الكود ب c

#include <stdio.h>
int main()
{
 /* Déclarations */
 int A[50][50]; /* matrice donnée   */
 int B[50][50]; /* matrice donnée   */
 int C[50][50]; /* matrice résultat */
 int N, M, P;   /* dimensions des matrices */
 int I, J, K;   /* indices courants */

 /* Saisie des données */
 printf("*** Matrice A ***\n");
 printf("Nombre de lignes de   A (max.50) : ");
 scanf("%d", &N );
 printf("Nombre de colonnes de A (max.50) : ");
 scanf("%d", &M );
 for (I=0; I<N; I++)
	for (J=0; J<M; J++)
    	{
 		printf("Elément[%d][%d] : ",I,J);
 		scanf("%d", &A[J]);
    	}
 printf("*** Matrice B ***\n");
 printf("Nombre de lignes de   B : %d\n", M);
 printf("Nombre de colonnes de B (max.50) : ");
 scanf("%d", &P );
 for (I=0; I<M; I++)
	for (J=0; J<P; J++)
    	{
 		printf("Elément[%d][%d] : ",I,J);
 		scanf("%d", &B[J]);
    	}
 /* Affichage des matrices */
 printf("Matrice donnée A :\n");
 for (I=0; I<N; I++)
	{
 	for (J=0; J<M; J++)
      	printf("%7d", A[J]);
 	printf("\n");
	}
 printf("Matrice donnée B :\n");
 for (I=0; I<M; I++)
	{
 	for (J=0; J<P; J++)
      	printf("%7d", B[J]);
 	printf("\n");
	}
 /* Affectation du résultat de la multiplication à C */
 for (I=0; I<N; I++)
 	for (J=0; J<P; J++)
 		{
      	C[J]=0;
      	for (K=0; K<M; K++)
       		C[J] += A[K]*B[K][J];
 		}
  /* Edition du résultat */
 printf("Matrice résultat C :\n");
 for (I=0; I<N; I++)
	{
 	for (J=0; J<P; J++)
      	printf("%7d", C[J]);
 	printf("\n");
	}
 return 0;
}

8BD99258.jpg

والله ولي التوفيق

تم تعديل هذه المشاركة بواسطة مومو (momo) في 13 يونيو 2012 في 17:55

i love you mama

مواضيع مشابهة