زمان کنونی: ۲۱ آذر ۱۳۹۷, ۰۶:۱۶ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

صعودی کردن ماتریس mدرn

ارسال:
  

The BesT پرسیده:

صعودی کردن ماتریس mدرn

سلام.دوستان.من یه تیکه کد نوشتم. ساده هم هست. BlushBlushBlush مرتب سازی صعودی یک ماتریس m*n .(فعلا دوتا سطر و سه تا ستون در نظر گرفتم) ولی جواب درست نمیده. با دست تریس میکنم جواب میگیرم. ولی اجرا صعودی مرتب نمیکنه. میشه لطف کنید یه نگاه بهش کنید.Heart
s هم برای این صفر کردم که وقتی به اول هر سطر میرسم شروع کنه از خونه اول هر سطر مقایسه را انجام بده.
تشکر Heart


کد:
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;
            }
        }
    }
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

Behnam‌ پاسخ داده:

RE: صعودی کردن ماتریس mدرn

(۲۳ اردیبهشت ۱۳۹۷ ۰۱:۰۸ ق.ظ)The BesT نوشته شده توسط:  سلام.دوستان.من یه تیکه کد نوشتم. ساده هم هست. BlushBlushBlush مرتب سازی صعودی یک ماتریس m*n .(فعلا دوتا سطر و سه تا ستون در نظر گرفتم) ولی جواب درست نمیده. با دست تریس میکنم جواب میگیرم. ولی اجرا صعودی مرتب نمیکنه. میشه لطف کنید یه نگاه بهش کنید.Heart
s هم برای این صفر کردم که وقتی به اول هر سطر میرسم شروع کنه از خونه اول هر سطر مقایسه را انجام بده.
تشکر Heart


کد:
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;
            }
        }
    }
قبل از هر چیز، این که کد متلب نیست، پس چرا اندیس‌ها رو از ۱ شروع می‌کنید و تا خود m میرید؟
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

The BesT پاسخ داده:

RE: صعودی کردن ماتریس mدرn

سلام مجدد
متلب نداشتم. برنامه را در محیط ++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();
}


فایل‌(های) پیوست شده

نقل قول این ارسال در یک پاسخ

ارسال:
  

Behnam‌ پاسخ داده:

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 را در جهت ستون ها، مرتب می کنیم:
کد:
clear all
close all
clc

A=[5 9 7; 3 1 4; 6 2 8]
B=sort(A)

نتیجه:
[تصویر:  455205_cpkb_nt.jpg]
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

The BesT پاسخ داده:

RE: صعودی کردن ماتریس mدرn

مرسی خانم کیمیا Heart

بله.توی متلب یه دستوری هست به اسم sort که اگر بنویسیمش سریع کل عناصر ماتریس را مرتب میکنه. ولی من میخوام خودم بدون استفاده از دستور sort و بوسیله for و if اینکار کنم. SmileHeart

بعد این دستور sort ظاهرا هر سطر یا ستون ماتریس را مرتب میکنه. ولی میخوام کل عناصر ماتریس را صعودی مرتب کنه. یعنی بیاد تک تک درایه های ماتریس را باهم مقایسه کنه و کوچکترین توی [۱][۱]a قرار بگیره. کوچکترین عدد بعدی در کل درایه های ماتریس توی خونه [۲][۱]a قرار بگیره . به همین ترتیب تا
خونه [۳][۲]a پر بشه Smile
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

The BesT پاسخ داده:

RE: صعودی کردن ماتریس mدرn

ممنون آقا بهنام.
انجام دادم و درست شدRolleyesRolleyesHeart
البته چون از صفر شروع کردم و در انتهای حلقه s=0وجود داشت دیگه p=s+1 ؤا باید برمیداشتم و p=s گذاشتم.
ممنووون Heart

فقط یه سوال : من توی معرفی اولیه ماتریس اندیسها را از ۱شروع کردم. پس باید قاعدتا توی تعریف همون اندیسهای ۱ را بخونه. چرا خطا میداد پس؟


این هم کدش.
البته برای m*n هم الان تعمیمش میدم. کدش را میگذارم برای هرآنکه بخواهد .. SmileSmile

کد:
#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();
}


فایل‌(های) پیوست شده

نقل قول این ارسال در یک پاسخ

ارسال:
  

Behnam‌ پاسخ داده:

RE: صعودی کردن ماتریس mدرn

(۲۳ اردیبهشت ۱۳۹۷ ۰۱:۵۹ ب.ظ)The BesT نوشته شده توسط:  فقط یه سوال : من توی معرفی اولیه ماتریس اندیسها را از ۱شروع کردم. پس باید قاعدتا توی تعریف همون اندیسهای ۱ را بخونه. چرا خطا میداد پس؟

متوجه سوال‌تون نشدم. اندیس رو از ۱ شروع نمی‌کنند، در این صورت ستون و سطر اول مقداردهی نمی‌شن. نمی‌دونم کامپایلر شما چرا ارور نمی‌ده و چه بهینه‌سازی‌های اشتباهی انجام می‌ده که میاد مثلا اندیس a2,3 که وجود خارجی نداره رو مقداردهی می‌کنه (حدس می‌زنم آرایه رو گسترش می‌ده) ولی به هر حال یه ذره ++Cایی که کار کرده بودم به همچین چیزایی ارور می‌داد.
ضمنا برنامه اگه مشکل حافظه نداره، من جای شما بودم اول ماتریس رو تبدیل به آرایه‌ِ یه بعدی می‌کردم و اون رو مرتب می‌کردم و دوباره به ماتریس تبدیل می‌کردم. سربار زمانی خاصی هم گمون نکنم اضافه کنه چون کشِ داده در دسترسی به ماتریس کار خودش رو خوب انجام می‌ده.
یافتن تمامی ارسال‌های این کاربر
نقل قول این ارسال در یک پاسخ



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  multiplier1 در ماتریس ها و برش ها maryam.iii ۰ ۳۷۶ ۲۶ فروردین ۱۳۹۴ ۰۹:۱۶ ب.ظ
آخرین ارسال: maryam.iii

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close