نمایش نتایج 1 تا 6 از 6

نام تاپیک: تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

  1. #1
    کاربر جدید آواتار 77777778
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    خونه
    پست
    23

    Lightbulb تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

    سلام دوستان عزیز
    من کد زیر رو برای یک آرایه 3*3 نوشتم ولی نتونستم یک حالت کلی تعریف کنم که آرایه n*n رو بعنوان ورودی بگیره و 90 درجه بچرخونه
    آرایه مفروض :
    33 22 11
    66 55 44
    99 88 77
    بعد از اعمال تابع :
    11 44 77
    22 55 88
    33 66 99


    int i,j;
    void read2d(float a[][3])
    {
    for(i=0; i<3; i++)
    {
    for(j=0; j<3; j++)
    a[i][j]=(rand()%90+10);
    }
    }
    void print2d(float a[][3])
    {
    cout<<"\n";
    for(i=0; i<3; i++)
    {
    for(j=0; j<3; j++)
    cout<<"\t"<<a[i][j];
    cout<<endl;
    }
    }
    void rotat(float a[][3])
    {
    float t;
    t=a[0][0];
    a[0][0]=a[2][0];
    a[2][0]=a[2][2];
    a[2][2]=a[0][2];
    a[0][2]=t;
    t=a[0][1];
    a[0][1]=a[1][0];
    a[1][0]=a[2][1];
    a[2][1]=a[1][2];
    a[1][2]=t;
    }
    int main()
    srand(time(NULL));
    {float p[3][3];
    read2d(p); //reads array's elements from user
    cout<<"\n\n\n\nP : \n";
    print2d(p);
    print2d(p); //prints arrayes elements on screen
    rotat(p);
    cout<<"\n\n\n\nnew P : \n";
    print2d(p);
    getch();
    print2d(p); //prints arrayes elements on screen
    return 0;
    }

    حالا می خوام یه راه حل برام بگین که چطور این تابع ()rotat رو تعریف کنم تا بتونه هر آرایه ای رو که بصورت مربعی بهش ارسال می شه رو بعنوان ورودی بگیره و جای عناصرش رو تغییر بده
    آخرین ویرایش به وسیله 77777778 : چهارشنبه 12 تیر 1392 در 10:54 صبح


  2. #2
    کاربر دائمی آواتار hadi0x7c7
    تاریخ عضویت
    فروردین 1391
    محل زندگی
    تهران
    سن
    28
    پست
    498

    نقل قول: تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

    اینو من با جاوا نوشتم ولی منطقش یکی هست:


    public static int[][] rotate(int[][] arr) {
    int[][] temp;
    temp = new int[arr.length][arr[0].length];
    int n = arr.length;

    for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
    temp[j][ n - 1 - i] = arr[i][j];
    }
    }
    return temp;
    }

  3. #3
    کاربر جدید آواتار 77777778
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    خونه
    پست
    23

    نقل قول: تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

    در ++c وقتی می خوای آرایه ای رو بصورت[][]a بعنوان پارامتر در تابعی تعریف کنی کامپایلر error میده حتی موقع تعریف داخل برنامه این نوع تعریف برای کامپایلر قابل قبول نیست و حتما باید عدد بعد دوم قید بشه مثلا [5][]a رو قبول میکنه و این مشکل اصلی منه که نمیدونم چطور این قضیه رو دور بزنم ! حتما باید راه حلی باشه

  4. #4
    کاربر دائمی آواتار saied_hacker
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    404 Not Found
    پست
    703

    نقل قول: تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

    یکیم ور رفتم تونستم اینو بنویسم اگه توضیح خواستی بگو ( الان باس برم )

    #include <iostream>
    #include <stdlib.h>

    using namespace std;

    void rotat(float** s, int n)
    {
    for(int i = 0; i < n; i++)
    {
    for(int j = 0; j < n; j++)
    cout << s[i][j] << " ++++ ";
    cout << endl;
    }
    }
    int main()
    {
    int n = 8;
    float** a1 = (float**)malloc(sizeof(float) * n);


    for(int i = 0; i < n; i++)
    {
    a1[i] = (float*)malloc(sizeof(float) * n);
    }

    for(int i = 0; i < n; i++)
    {
    for(int j = 0; j < n; j++)
    a1[i][j] = i + j;
    }
    rotat(a1, n);
    return 0;
    }
    آخرین ویرایش به وسیله saied_hacker : چهارشنبه 12 تیر 1392 در 21:15 عصر

  5. #5
    کاربر جدید آواتار 77777778
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    خونه
    پست
    23

    نقل قول: تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

    خیلی ممنون از کمکتون ، من سورس کدمو آپدیت کردم و همه کد رو گذاشتم تا مشکلم برای شما واضح تر بشه طریقه گرفتن ورودی و چاپ اونا زیاد اهمیتی ندارن
    فقط "شیوه ارسال آرایه n*n به این توابع "هست که هنوز برام بصورت حل نشده باقیست
    آخرین ویرایش به وسیله 77777778 : چهارشنبه 12 تیر 1392 در 10:59 صبح

  6. #6
    کاربر دائمی آواتار saied_hacker
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    404 Not Found
    پست
    703

    نقل قول: تابعی برای تغییر دادن 90 درجه ای محل عناصر در یک آرایه مربعی

    با توجه به چیزی که گفتی کد بالا باید مشکلت رو حل کنه.
    پارامتر به صورت ارایه دو بعدی تعریف نشده اما کار همون رو به خوبی انجام میده.

    تو تابع rotat پارمتر s یک پوینری هست که به یک پوینتر دیگه اشاره داره. هرخونه ( n تا خونه ) که در اشاره گر اول قرار داره خودش به n تا خونه ارایه/حافظه دوم اشاره میکنه.

    با این دستور میایم یه پوینتر میسازیم که به یکسری پوینتر دیگه ( n تعاد) اشاره میکنه
    float** a1 = (float**)malloc(sizeof(float) * n);


    و این جا هم میایم به تک تک پوینتر هایی که با دستور بالا ایجاد کردیم ، مقدار/حافظه میدیم ( هر پوینتر بالا در هر خونش ادرس یک خونه از ارایه دوم رو نگه میداره ).
    for(int i = 0; i < n; i++)    {
    a1[i] = (float*)malloc(sizeof(float) * n);
    }




    اینجام فقط برای تست اومدم به خونه ها مقدار دادم
    for(int i = 0; i < n; i++)    {
    for(int j = 0; j < n; j++)
    a1[i][j] = i + j;
    }

تاپیک های مشابه

  1. سوال: تغییر دادن زبان برای فقط یک شیء
    نوشته شده توسط hossein_rohollah در بخش C#‎‎
    پاسخ: 2
    آخرین پست: شنبه 27 مهر 1387, 10:08 صبح
  2. راهی برای تغییر دادن قسمت Visual Effects هست؟
    نوشته شده توسط parselearn در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: پنج شنبه 08 فروردین 1387, 01:11 صبح
  3. تغییر دادن محل Mouse
    نوشته شده توسط M.Ehsanifar در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: پنج شنبه 22 شهریور 1386, 01:23 صبح
  4. برنامه ای برای تغییر دادن فایل
    نوشته شده توسط نسیم بهاری در بخش برنامه نویسی در Delphi
    پاسخ: 5
    آخرین پست: شنبه 13 آبان 1385, 22:05 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •