PDA

View Full Version : سوال: ضرب ماتریس ها با تابع بازگشتی(بیاین با هم کاملش کنیم)



GOLDSHADOW
جمعه 06 فروردین 1395, 15:36 عصر
سلام به همه دوستان گلم
یه شبه کده که میخوام با کمک شما عزیزان حلش کنم
ممنون میشم همراهی کنید
در ضمن قبلا جستجو کردم برای این برنامه چیزه مفیدی گیر نیومد.
من خودم از یاد دادن به بقیه خیلی چیزا هم خودم یاد گرفتم ایشالا شما هم مطلب جدیدی یاد بگیرید.
کد مورد نظر ضمیمه شده.



#include <iostream.h>
#include <conio.h>

void add(int *A,int *B,int *C,int n)
{
//A[i][j] A[i*n+j]
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
//C[i][j]=A[i][j]+B[i][j]
C[i*n+j]=A[i*n+j]+B[i*n+j];
}
void merge(int *a,int *b,int i,int j,int n)
{
}
void copy(int *a,int *b,int i,int j,int n)
{
}

void mul(int *A,int *B,int *C,int n)
{
int m=n/2;
int * A11=new int[m*m];
copy(A,A11,0,0,m);
copy(A,A12,0,m,m);
copy(A,A21,m,0,m);
copy(A,A22,m,m,m);

copy(B,B11,0,0,m);
copy(B,B12,0,m,m);
copy(B,B21,m,0,m);
copy(B,B22,m,m,m);

mul(A11,B11,t1,m);
mul(A12,B21,t2,m);
add(t1,t2,C11,m);

mul(A11,B12,t1,m);
mul(A12,B22,t2,m);
add(t1,t2,C12,m);

mul(A21,B11,t1,m);
mul(A22,B21,t2,m);
add(t1,t2,C21,m);

mul(A21,B12,t1,m);
mul(A22,B22,t2.m);
add(t1,t2,C22,m);

merge(C11,C,0,0,m);
merge(C12,C,0,m,m);
merge(C21,C,m,0,m);
merge(C22,C,m,m,m);

delete A11;

}
void main()
{

}

smokyshadow
شنبه 07 فروردین 1395, 07:02 صبح
سلام به همه دوستان گلم
یه شبه کده که میخوام با کمک شما عزیزان حلش کنم
ممنون میشم همراهی کنید
در ضمن قبلا جستجو کردم برای این برنامه چیزه مفیدی گیر نیومد.
من خودم از یاد دادن به بقیه خیلی چیزا هم خودم یاد گرفتم ایشالا شما هم مطلب جدیدی یاد بگیرید.
کد مورد نظر ضمیمه شده.



[LTR_INLINE]#include <iostream.h>
#include <conio.h>

void add(int *A,int *B,int *C,int n)
{
//A[i][j] A[i*n+j]
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
//C[i][j]=A[i][j]+B[i][j]
C[i*n+j]=A[i*n+j]+B[i*n+j];
}
void merge(int *a,int *b,int i,int j,int n)
{
}
void copy(int *a,int *b,int i,int j,int n)
{
}

void mul(int *A,int *B,int *C,int n)
{
int m=n/2;
int * A11=new int[m*m];
copy(A,A11,0,0,m);
copy(A,A12,0,m,m);
copy(A,A21,m,0,m);
copy(A,A22,m,m,m);

copy(B,B11,0,0,m);
copy(B,B12,0,m,m);
copy(B,B21,m,0,m);
copy(B,B22,m,m,m);

mul(A11,B11,t1,m);
mul(A12,B21,t2,m);
add(t1,t2,C11,m);

mul(A11,B12,t1,m);
mul(A12,B22,t2,m);
add(t1,t2,C12,m);

mul(A21,B11,t1,m);
mul(A22,B21,t2,m);
add(t1,t2,C21,m);

mul(A21,B12,t1,m);
mul(A22,B22,t2.m);
add(t1,t2,C22,m);

merge(C11,C,0,0,m);
merge(C12,C,0,m,m);
merge(C21,C,m,0,m);
merge(C22,C,m,m,m);

delete A11;

}
void main()
{

}

[LTR_INLINE]
سلام ...من راستش کدتو نگاه نکردم که کامل کنم ولی یه ضرب بازگشتی برای ماتریس نوشتم که به نظر خودم از مدل های دیگه نوشتن این مسئله راحت تره .امیدوارم به دردت بخوره:)



#include <stdio.h>


void multiply(int, int, int[][10], int, int, int[][10], int[][10]);
void display(int, int, int[][10]);


int main()
{
int a[10][10], b[10][10], c[10][10] = { 0 };
int m1, n1, m2, n2, i, j, k;


printf("Enter rows and columns for Matrix A : ");
scanf_s("%d%d", &m1, &n1);
printf("Enter rows and columns for Matrix B : ");
scanf_s("%d%d", &m2, &n2);
if (n1 != m2)
{
printf("Matrix multiplication not possible.\n");
}
else
{
printf("Enter elements in Matrix A:\n");
for (i = 0; i < m1; i++)
for (j = 0; j < n1; j++)
{
scanf_s("%d", &a[i][j]);
}
printf("\nEnter elements in Matrix B:\n");
for (i = 0; i < m2; i++)
for (j = 0; j < n2; j++)
{
scanf_s("%d", &b[i][j]);
}
multiply(m1, n1, a, m2, n2, b, c);
}
printf("On matrix multiplication of A and B the result is:\n");
display(m1, n2, c);
}



void multiply(int m1, int n1, int a[10][10], int m2, int n2, int b[10][10], int c[10][10])
{
static int i = 0, j = 0, k = 0;


if (i >= m1)
{
return;
}
else if (i < m1)
{
if (j < n2)
{
if (k < n1)
{
c[i][j] += a[i][k] * b[k][j];
k++;
multiply(m1, n1, a, m2, n2, b, c);
}
k = 0;
j++;
multiply(m1, n1, a, m2, n2, b, c);
}
j = 0;
i++;
multiply(m1, n1, a, m2, n2, b, c);
}
}


void display(int m1, int n2, int c[10][10])
{
int i, j;


for (i = 0; i < m1; i++)
{
for (j = 0; j < n2; j++)
{
printf("%d ", c[i][j]);
}
printf("\n");
}
}

GOLDSHADOW
شنبه 07 فروردین 1395, 14:02 عصر
ممنونم
اگه امکانش بود یه دونه از اون تابع هارو هم که بتونی بنویسی خوبه بازم (مثلا کپی):چشمک: