PDA

View Full Version : راهنمایی در رابطه با ماتریس چند بعدی



hercool
چهارشنبه 18 فروردین 1389, 20:43 عصر
سلام دوستان من در رابطه با ماتریس مشکلاتی دارم و می خوام در رابطه با اتفاقی که در کد میافته اطلاع بیشتری داشته باشم

#include<iostream>
#include<conio.h>
using namespace std;
void main{int a[50][50], b[50][50], i,j,m,n,c[50][50];
cin>>m>>n;
for(i=0;i<m;i++)
for(j=0;j<n,j++)
cin>>a[i][j];
for(i=0;i<m;i++)
for(j=0;j<n,j++)
cin>>b[i][j];
for(i=0;i<m;i++)
for(j=0;j<n,j++)

{
c[i][j]=a[i][j]+b[i][j];
cout<<c[i][j];
}
getch();return;در رابطه با حلقه های اول می دونم که کار جاگذاری اعداد ورودی رو داخل ارایه ها رو دارن
اما نمی دونم به چه نحو مثلا از سه عدد ورودی من کدوم رو m و کدوم رو n می دونه؟
یعنی به چه ترتیبی اعداد ورودی داخل ارایه قرار می گیرن؟
و در اخر این بعد ها رو چطور با هم مقایسه می کنن؟( در اینجا جمع دارن می کنن)

دقیقا می خوام اتفاقی که از ورودی تا خروجی رو می افته بدونم به چه نحوی هست

و همچنین اگه بخوام دو ماتریس رو با هم ضرب کنم چه کار باید بکنم
می دونم که بادی سه تا حلقه داشته باشم
اما ممنون میشم در همین رابطه ( یعنی تعداد حلقه) و همچنین شرایط ضرب راهنماییم کنید؟

moh_mov
پنج شنبه 19 فروردین 1389, 00:08 صبح
سلام...راستش سوالتون یک گنگه!
همونطور که گفتید دو حلقه ی اول مربوط به دریافت خانه های ماتریس هست....
خب m و n رو میگیرید از کاربر و مثلا کاربر 3 رو وارد می کنه...
خوب هر حلقه می دونیم سه بار تکرار می شه....
کاربر m رو وارد می کنه و enter می زنه و دوباره n رو وارد می کنه و enter می زنه....
سپس i رو صفر می کنه و وارد حلقه ی اول میشه و j رو هم صفر میکنه و وارد حلقه دوم می شه...سپس خانه صفر صفر(عدد اول سطر و عدد دوم ستون است!) رو دریافت می کنه...دباره در همان حلقه دوم می مونه و j رو 1 می کنه ...سپس خانه صفر و یک رو مقدار میگیره......و همینطور هم خانه صفر و دو....سپس j به 2 می رسه و از حلقه ی دوم خارج میشه....بعدش دوباره می ره حلقهی اول و i رو 1 می کنه.....دوباره همان داستان بالا ادامه پیدا می کنه و خانه 1 و 0 --1و 1----1و 2 رو پر میکنه و دوباره میره تا i =2 رو اجرا کنه....و همین داستان تا یک ماتریس مربعی 3 در 3 بوجود میاد...
در مورد مقایسه بعد ها منظورت رو نمی فهمم....
تعداد حلقه ها در ضرب هم احتمالا به تعداد n ها و m ها وابسته است....در

hercool
پنج شنبه 19 فروردین 1389, 08:38 صبح
من درست متوجه نشدم من می خوام تمام اتفاقاتی که در برنامه میافته رو بدونم یعن یاز لحظه وارد کردن داده ها تا اخرین مرحله یعنی خروجی

مثلا می خوام بدونم که با ورود سه عدد به فرض 3و4و5 این اعداد به چه شکل وارد حلقه می شن و چجوری پیمایش و روشون پردازش میشه

یعنی شما می گی زمانی که 3 رو میگیره این عدد 3 رو اندازه بعد اول یا ماتریس اول حساب می کنه نه فهرستش درسته؟

hercool
جمعه 20 فروردین 1389, 13:42 عصر
میشه یکی از دوستان راهنمایی کنه
الان فرضا من 5 رو وارد کنم حلقه از صفر تا پنج تکرار میشه
یعنی 5 عدد از یک تا 5 وارد حلقه میشه یا نه ؟
به نظرم این برنامه بستگی به ورودیش می تونه ادامه پیدا کنه
چون اگر مقدارعدد اول بالا باشه حلقه بیش از پیش تکرار میشه
از دوستان می خوام در این رابطه راهنمایی کنن

hercool
شنبه 21 فروردین 1389, 19:31 عصر
تا حدی فهمیدم
اما یه سوال کدوم از اعداد ورودی من m و کدوم یک n شناخته می شن
یعنی می خوام بدونم بین 3 4 5 6 کدوم از این اعداد m و کدوم از این اعداد n هست
ممنون میشم راهنمایی کنید

ebrahim1988
شنبه 21 فروردین 1389, 22:49 عصر
سلام هرکول جان
سوالات در عین سادگی،یه کم هم گنگ هستن
من یه چیزی میگم ببین چی میتونی ازش برداشت کنی
اولین عددی که وارد میکنی m هست(یعنی همون تعداد سطرها توی هر دو آرایه)
دومین عدد تعداد ستون ها هست که وقتی شما وارد می کنی همون n هست
امیدوارم متوجه شده باشی گلم
موفق باشی

hercool
یک شنبه 22 فروردین 1389, 11:54 صبح
خوب بالاخره جواب رو پیدا کردم
می ذارم اینجا تا دوستان هم اگر نیاز داشتن بتونن ازش استفاده کنن

#include<iostream.h>
void main()
{
int a[3][3] , b[3][3] , c[3][3];

int i , j , k;
cout<<"Enter Matrix A";
for( i = 0 ; i < 3 ; i++)
for( j = 0 ; j < 3 ; j++)
cin>>a[i][j];
cout<<"Enter Matrix B";
for( i = 0 ; i < 3 ; i++)
for( j = 0 ; j < 3 ; j++)
cin>>b[i][j];
for( i = 0 ; i < 3 ; i++)
for( j = 0 ; j < 3 ; j++)
{
c[i][j] = 0;
for( k = 0 ;k < 3 ; k++)
c[i][j] += a[i][k]*b[k][j];
}
cout<<"The resultant matrix is ";
for( i = 0 ; i < 3 ; i++)
{
for( j = 0 ; j < 3 ; j++)
cout<<c[i][j]<<" ";
cout<<endl;
}
}اما توضیحات این کد برای کسانی که مثل من مشکل دارن
ما سه تا ارایه دو بعدی داریم
که دو تای اول رو با نام ماتریکس A,B مشخص کردیم که بهش اعداد می دیم
و سومین ارایه که با نام ارایه C مشخص شده محل قرار گیری حاصل ضرب هست

cout<<"Enter Matrix A";
for( i = 0 ; i < 3 ; i++)
for( j = 0 ; j < 3 ; j++)
cin>>a[i][j];خوب در این قسمت ما از کاربر می خوایم که عدد وارد کنه تا خانه آرایه ها پر بشه
به این صورت که حلقه ما سطر اول رو میگیره و پر می کنه بعد میره سراغ سطر دوم
یعنی زمانی که I=0 هست J ستون های خودش رو پر میکنه
اگر ورودی ما
1
2
3
باشه
نوع قرار گیری اعداد در ارایه به این شکل میشه
3 2 1
هینطور حلقه ادامه پیدا می کنه تا به تعداد فضای ارایه جاگذاری انجام بشه و ماتریس اول ما شکل بگیره

cout<<"Enter Matrix B";
for( i = 0 ; i < 3 ; i++)
for( j = 0 ; j < 3 ; j++)
cin>>b[i][j];این هم ماتریس دوم رو تشکیل میده به همون شکل بالا


for( i = 0 ; i < 3 ; i++)
for( j = 0 ; j < 3 ; j++)
{
c[i][j] = 0;
for( k = 0 ;k < 3 ; k++)
c[i][j] += a[i][k]*b[k][j];
}در این قسمت شک دارم ممکنه اشتباه داشته باشه اگر اشتباهی بود دوستان راهنمایی کنن تا هم من یاد بگیرم هم تصحیح شه
یک حلقه تو در تو شکل میدیم و بهش میگیم که یک ارایه 3*3 تشکیل بده که فضا هاش خالی هستند
در قسمت دو براکت که سویچ هم میشه گفت ماتریس (آرایه ) سوم برابر با صفر هست
یک حلقه تشکیل میدیم که K رو در ماتریس قرار بده با دستورات داخل براکت اما نکته اصل ماجرا اینجاست
ما اینجا میگیم که ماتریس a رو با سطر i ستون k در ماتریس b با سطر k در ستون j ضرب کنه و بریزه تو ماتریس C
حالا اینجا چه اتفاقی می افته
می دونیم که ضرب ماتریس سطر اول در ستون اول ماتریس دوم هست
http://upload.iranblog.com/7/1271022138.png
بنابراین سطر i با اندیس صفر و ستون k ( رو که بصورت حلقه بهش یک واحد یک واحد بهش اضافه میشه) رو در ماتریس دوم با سطر متغییر k و ستون j (که ثابت هست) ضرب کنه
http://upload.iranblog.com/7/1271027895.jpg
یعنی اینکه در ماتریس A سطر برای بار اول ثابت هست و فقط ستون ها متغییر هست
و در ماتریس b سطر ها متغییر هست و ستون ثابت



cout<<"The resultant matrix is ";
for( i = 0 ; i < 3 ; i++)
{
for( j = 0 ; j < 3 ; j++)
cout<<c[i][j]<<" ";
cout<<endl;
}و اخرین قسمت که دستور میده که این حلقه تو در تو شکل بگیره و اندیس ها تکون بخورن و با این کار بریزن تو ماتریس c

اگر جایی ایراد داشت ممنون میشم دوستان راهنمایی کنن تا بتونم بیشتر یاد بگیرم و هم مطلب رو ویرایش کنم