۰
subtitle
ارسال: #۱
  
صعودی کردن ماتریس mدرn
سلام.دوستان.من یه تیکه کد نوشتم. ساده هم هست. مرتب سازی صعودی یک ماتریس m*n .(فعلا دوتا سطر و سه تا ستون در نظر گرفتم) ولی جواب درست نمیده. با دست تریس میکنم جواب میگیرم. ولی اجرا صعودی مرتب نمیکنه. میشه لطف کنید یه نگاه بهش کنید.
s هم برای این صفر کردم که وقتی به اول هر سطر میرسم شروع کنه از خونه اول هر سطر مقایسه را انجام بده.
تشکر
s هم برای این صفر کردم که وقتی به اول هر سطر میرسم شروع کنه از خونه اول هر سطر مقایسه را انجام بده.
تشکر
کد:
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
int s=j;
for ( int k = i ; k <= 2 ; k++ )
{
for (int p=s+1;p<=3;p++)
{
if (a[i][j] > a[k][p] )
{
temp=a[i][j];
a[i][j]=a[k][p];
a[k][p]=temp;
}
}
s=0;
}
}
}
۰
ارسال: #۲
  
RE: صعودی کردن ماتریس mدرn
(۲۳ اردیبهشت ۱۳۹۷ ۰۱:۰۸ ق.ظ)The BesT نوشته شده توسط: سلام.دوستان.من یه تیکه کد نوشتم. ساده هم هست. مرتب سازی صعودی یک ماتریس m*n .(فعلا دوتا سطر و سه تا ستون در نظر گرفتم) ولی جواب درست نمیده. با دست تریس میکنم جواب میگیرم. ولی اجرا صعودی مرتب نمیکنه. میشه لطف کنید یه نگاه بهش کنید.قبل از هر چیز، این که کد متلب نیست، پس چرا اندیسها رو از ۱ شروع میکنید و تا خود m میرید؟
s هم برای این صفر کردم که وقتی به اول هر سطر میرسم شروع کنه از خونه اول هر سطر مقایسه را انجام بده.
تشکر
کد:
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
int s=j;
for ( int k = i ; k <= 2 ; k++ )
{
for (int p=s+1;p<=3;p++)
{
if (a[i][j] > a[k][p] )
{
temp=a[i][j];
a[i][j]=a[k][p];
a[k][p]=temp;
}
}
s=0;
}
}
}
۰
ارسال: #۳
  
RE: صعودی کردن ماتریس mدرn
سلام مجدد
متلب نداشتم. برنامه را در محیط ++borland c نوشتم.اندیس هم از یک میگذاشتم خطا نمیگرفت.
کل برنامش اینه که گذاشتم. اول اعداد توی ماتریس را دونه دونه میخونه و ماتریس را میسازه. بعد ماتریس را باید صعودی مرتب کنه.ولی اجراشو ببینید که خطا میده.
متلب نداشتم. برنامه را در محیط ++borland c نوشتم.اندیس هم از یک میگذاشتم خطا نمیگرفت.
کل برنامش اینه که گذاشتم. اول اعداد توی ماتریس را دونه دونه میخونه و ماتریس را میسازه. بعد ماتریس را باید صعودی مرتب کنه.ولی اجراشو ببینید که خطا میده.
کد:
#include<iostream.h>
#include<conio.h>
int main()
{
int r ,c,number1,number2,temp,m,n ;
int a[2][3];
int b[2][3];
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <=3 ; j++ )
cin >> a[i][j] ;
}
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
cout<<endl<<endl<<endl;
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
int s=j;
for ( int k = i ; k <= 2 ; k++ )
{
for (int p=s+1;p<=3;p++)
{
if (a[i][j] > a[k][p] )
{
temp=a[i][j];
a[i][j]=a[k][p];
a[k][p]=temp;
}
}
s=0;
}
}
}
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
getch();
}
ارسال: #۴
  
RE: صعودی کردن ماتریس mدرn
(۲۳ اردیبهشت ۱۳۹۷ ۰۹:۰۵ ق.ظ)The BesT نوشته شده توسط: سلام مجدد
متلب نداشتم. برنامه را در محیط ++borland c نوشتم.اندیس هم از یک میگذاشتم خطا نمیگرفت.
کل برنامش اینه که گذاشتم. اول اعداد توی ماتریس را دونه دونه میخونه و ماتریس را میسازه. بعد ماتریس را باید صعودی مرتب کنه.ولی اجراشو ببینید که خطا میده.
کد:
#include<iostream.h>
#include<conio.h>
int main()
{
int r ,c,number1,number2,temp,m,n ;
int a[2][3];
int b[2][3];
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <=3 ; j++ )
cin >> a[i][j] ;
}
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
cout<<endl<<endl<<endl;
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
int s=j;
for ( int k = i ; k <= 2 ; k++ )
{
for (int p=s+1;p<=3;p++)
{
if (a[i][j] > a[k][p] )
{
temp=a[i][j];
a[i][j]=a[k][p];
a[k][p]=temp;
}
}
s=0;
}
}
}
for ( int i = 1 ; i <= 2 ; i++ )
{
for ( int j = 1 ; j <= 3 ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
getch();
}
چرا مقاومت میکنید و چیزی که گفتم رو امتحان نمیکنید؟ اینکه تماما از ۰ شروع کنید و انتهای اندیس رو شامل نکنید، مثال:
int i = 0; i < 2
int p = s+1; p < 3
۰
ارسال: #۵
  
RE: صعودی کردن ماتریس mدرn
سلام، من هنوز خیلی از متلب سردرنمیارم ولی یه مثالی دیدم که از sort برای صعوی کردن استفاده کرده بود.
"چنانچه یک ماتریس به دستور sort داده شود، دستور sort عناصر را در یکی از ابعادی که مشخص می کنیم، مرتب خواهد نمود. اگر هیچ بعدی را مشخص نکنیم، دستور sort ، عناصر را در جهت ستون ها مرتب خواهد نمود."
مثال_عناصر ماتریس A را در جهت ستون ها، مرتب می کنیم:
نتیجه:
"چنانچه یک ماتریس به دستور sort داده شود، دستور sort عناصر را در یکی از ابعادی که مشخص می کنیم، مرتب خواهد نمود. اگر هیچ بعدی را مشخص نکنیم، دستور sort ، عناصر را در جهت ستون ها مرتب خواهد نمود."
مثال_عناصر ماتریس A را در جهت ستون ها، مرتب می کنیم:
کد:
clear all
close all
clc
A=[5 9 7; 3 1 4; 6 2 8]
B=sort(A)
نتیجه:
۰
ارسال: #۶
  
RE: صعودی کردن ماتریس mدرn
مرسی خانم کیمیا
بله.توی متلب یه دستوری هست به اسم sort که اگر بنویسیمش سریع کل عناصر ماتریس را مرتب میکنه. ولی من میخوام خودم بدون استفاده از دستور sort و بوسیله for و if اینکار کنم.
بعد این دستور sort ظاهرا هر سطر یا ستون ماتریس را مرتب میکنه. ولی میخوام کل عناصر ماتریس را صعودی مرتب کنه. یعنی بیاد تک تک درایه های ماتریس را باهم مقایسه کنه و کوچکترین توی [۱][۱]a قرار بگیره. کوچکترین عدد بعدی در کل درایه های ماتریس توی خونه [۲][۱]a قرار بگیره . به همین ترتیب تا
خونه [۳][۲]a پر بشه
بله.توی متلب یه دستوری هست به اسم sort که اگر بنویسیمش سریع کل عناصر ماتریس را مرتب میکنه. ولی من میخوام خودم بدون استفاده از دستور sort و بوسیله for و if اینکار کنم.
بعد این دستور sort ظاهرا هر سطر یا ستون ماتریس را مرتب میکنه. ولی میخوام کل عناصر ماتریس را صعودی مرتب کنه. یعنی بیاد تک تک درایه های ماتریس را باهم مقایسه کنه و کوچکترین توی [۱][۱]a قرار بگیره. کوچکترین عدد بعدی در کل درایه های ماتریس توی خونه [۲][۱]a قرار بگیره . به همین ترتیب تا
خونه [۳][۲]a پر بشه
۰
ارسال: #۷
  
RE: صعودی کردن ماتریس mدرn
ممنون آقا بهنام.
انجام دادم و درست شد
البته چون از صفر شروع کردم و در انتهای حلقه s=0وجود داشت دیگه p=s+1 ؤا باید برمیداشتم و p=s گذاشتم.
ممنووون
فقط یه سوال : من توی معرفی اولیه ماتریس اندیسها را از ۱شروع کردم. پس باید قاعدتا توی تعریف همون اندیسهای ۱ را بخونه. چرا خطا میداد پس؟
این هم کدش.
البته برای m*n هم الان تعمیمش میدم. کدش را میگذارم برای هرآنکه بخواهد ..
تعمیم برای m و n :
دو عدد اول سطر و ستون ماتریس خوانده میشه. به تعداد سطر و ستون منتظر میمونه عدد وارد کنیم.بعد ماتریس را تشکیل میده و صعودی میکنه.
انجام دادم و درست شد
البته چون از صفر شروع کردم و در انتهای حلقه s=0وجود داشت دیگه p=s+1 ؤا باید برمیداشتم و p=s گذاشتم.
ممنووون
فقط یه سوال : من توی معرفی اولیه ماتریس اندیسها را از ۱شروع کردم. پس باید قاعدتا توی تعریف همون اندیسهای ۱ را بخونه. چرا خطا میداد پس؟
این هم کدش.
البته برای m*n هم الان تعمیمش میدم. کدش را میگذارم برای هرآنکه بخواهد ..
کد:
#include<iostream.h>
#include<conio.h>
int main()
{
int r ,c,number1,number2,temp,m,n ;
int a[2][3];
int b[2][3];
for ( int i = 0 ; i < 2 ; i++ )
{
for ( int j = 0 ; j <3 ; j++ )
cin >> a[i][j] ;
}
for ( int i = 0 ; i < 2 ; i++ )
{
for ( int j = 0 ; j < 3 ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
cout<<endl<<endl<<endl;
for ( int i = 0 ; i < 2 ; i++ )
{
for ( int j = 0 ; j < 3 ; j++ )
{
int s=j;
for ( int k = i ; k < 2 ; k++ )
{
for (int p=s;p<3;p++)
{
if (a[i][j] > a[k][p] )
{
temp=a[i][j];
a[i][j]=a[k][p];
a[k][p]=temp;
}
}
s=0;
}
}
}
for ( int i = 0 ; i < 2 ; i++ )
{
for ( int j = 0 ; j < 3 ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
getch();
}
تعمیم برای m و n :
دو عدد اول سطر و ستون ماتریس خوانده میشه. به تعداد سطر و ستون منتظر میمونه عدد وارد کنیم.بعد ماتریس را تشکیل میده و صعودی میکنه.
کد:
#include<iostream.h>
#include<conio.h>
int main()
{
int temp,m,n ;
int a[2][3];
cin>>m;
cin>>n;
for ( int i = 0 ; i < m ; i++ )
{
for ( int j = 0 ; j <n ; j++ )
cin >> a[i][j] ;
}
for ( int i = 0 ; i < m ; i++ )
{
for ( int j = 0 ; j < n ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
cout<<endl<<endl<<endl;
for ( int i = 0 ; i < m ; i++ )
{
for ( int j = 0 ; j < n ; j++ )
{
int s=j;
for ( int k = i ; k < m ; k++ )
{
for (int p=s;p<n;p++)
{
if (a[i][j] > a[k][p] )
{
temp=a[i][j];
a[i][j]=a[k][p];
a[k][p]=temp;
}
}
s=0;
}
}
}
for ( int i = 0 ; i < m ; i++ )
{
for ( int j = 0 ; j < n ; j++ )
{
cout<< a[i][j]<<" " ;
}
cout<<endl;
}
getch();
}
ارسال: #۸
  
RE: صعودی کردن ماتریس mدرn
(۲۳ اردیبهشت ۱۳۹۷ ۰۱:۵۹ ب.ظ)The BesT نوشته شده توسط: فقط یه سوال : من توی معرفی اولیه ماتریس اندیسها را از ۱شروع کردم. پس باید قاعدتا توی تعریف همون اندیسهای ۱ را بخونه. چرا خطا میداد پس؟
متوجه سوالتون نشدم. اندیس رو از ۱ شروع نمیکنند، در این صورت ستون و سطر اول مقداردهی نمیشن. نمیدونم کامپایلر شما چرا ارور نمیده و چه بهینهسازیهای اشتباهی انجام میده که میاد مثلا اندیس a2,3 که وجود خارجی نداره رو مقداردهی میکنه (حدس میزنم آرایه رو گسترش میده) ولی به هر حال یه ذره ++Cایی که کار کرده بودم به همچین چیزایی ارور میداد.
ضمنا برنامه اگه مشکل حافظه نداره، من جای شما بودم اول ماتریس رو تبدیل به آرایهِ یه بعدی میکردم و اون رو مرتب میکردم و دوباره به ماتریس تبدیل میکردم. سربار زمانی خاصی هم گمون نکنم اضافه کنه چون کشِ داده در دسترسی به ماتریس کار خودش رو خوب انجام میده.
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close