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

نام تاپیک: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

  1. #1

    هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    من یه برنامه می خواستم بنویسم که وقتی اعداد یه ماتریس به برنامه میدیم به ما بگه که این ماتریس هم ارزی هست یا نه و مشخص کنه ویژگی های بازتابی و تقارنی و تعدی رو
    توش موندم !
    میتونه با سی یا سی++

  2. #2

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    با سلام
    من به همراه یکی از دوستانم در نظر داشتیم که یک ماتریس،که از هر لحاظی کارآمد باشد را بنویسیم. که حتی بتواند ضرب های n*n را هم انجام دهد.
    از الگوریتم خاصی هم استفاده کردیم. مدتی است که تست آن به تعویق افتاده است
    اگر مایل باشید می توانیم با همکاری خودتان، نظرات شما را هم به آن اضافه کنیم و کلاس ماتریس را کاملتر کنیم.
    منتظر جواب هستم.

  3. #3

    نقل قول:]چه باید کرد

    یه کم بیشتر توضیح بدین و بگین که چیکار باید بکنم

  4. #4

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    خوب شما که می خواهید این برنامه را بنویسید لابد شی گرایی بلدید!؟
    یک سری توضیحات هم در مورد کارمون باید به شما بدیم
    می تونید با آی دی های saba_r_g یا esshahab در یاهو مسنجر با ما در تماس باشید تا بیشتر راهنمایی کنیم

  5. #5

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    بچه ها من برنامه sparse matrix رو نوشتم که میتونه ضرب های ماتریس های 1000 *1000 و بیشتر رو هم حساب کنه

    ترانهادشو حساب کنه و... اگه خواستید میتونیم با هم روش کار کنیم که این قابلیت های دیگه ای رو که شما گفتید رو بهش اضافه کنیم


    موفق باشید

  6. #6
    کاربر دائمی آواتار bsng110
    تاریخ عضویت
    آبان 1386
    محل زندگی
    اصفهان
    سن
    36
    پست
    104

    Wink نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    هوالحکیم
    سلام
    حقیقتش برنامه ما یک کلاس ماتریس در ++C بود که به صورت دینامیک ساخته می شد و می شد اندازه ماتریس را تغییر هم داد. ماتریس ما در اصل یک آرایه بود. اعمال جمع و تفریق و ضرب ماتریس ها را هم براش پیاده سازی کرده بودیم. دترمینان و ماتریس معکوس را هم نوشته بودیم. یه سری متد هم برای تشخیص ماتریس های ویژه مانند ماتریس صفر و بالا مثلثی و ... مثل اینکه داشت. یک سری ماتریس های به خصوص مانند ماتریس قطری و .. را هم نوشته بودیم. اما دیگه حواسمون به این مواردی که دوست عزیزمون گفتند یعنی هم ارزی نبود. حالا یک کلاس هم برای اون می نویسیم. اما در مورد این دوست عزیز که گفتند ماتریس اسپارس را نوشتند که می تواند یک دو ماتریس 1000*1000 را در هم ضرب کند، می توانید بیشتر توضیح دهید؟ چگونه؟ منظورتان از ماتریس اسپارس چیست؟ شما چه مقادیری از این ماتریس را ذخیره می کنید؟ روش ذخیره سازی شما چگونه است؟
    دوستمون aminwxy هم لطف کنن یک کم بیشتر توضیح بدن که دقیقاً چی می خواهند؟ یک برنامه؟ یا کمک؟ یا اینکه قصد دارند خودشان نیز به ما کمک کنند تا با هم این کد ها را بنویسیم؟
    اما در مورد هم ارزی باید بگویم که:
    اولاً ماتریس باید حتماً مربعی باشد!
    در مورد ماتریس بازتابی که کافیست عناصر قطر را بررسی کنیم و چنانچه همه یک بودند، ماتریس بازتابی است.
    در مورد ماتریس متقارن که دو حلقه for تو در تو می گذاریم و بالا و پایین قطر را بررسی می کنیم. قطر هم مهم نیست. با یک if ساده بررسی می کنیم که اگر [a[i][j]!=a[j][i بود، ماتریس بازتابی نیست و الا هست.
    در مورد ماتریس تعدی هم مثل بررسی ماتریس متقارن عمل می کنیم. با این شرط که چنانچه [a[i][j یک بود و به ازای k از 0 تا n-1 هم [a[j][k یک بود، باید [a[i][k هم یک باشد. یعنی سه تا حلقه for تو در تو نیاز داریم که دو حلقه اول برای پیمایش مثلی ماتریس(مثلاً پایین مثلث) استفاده می شوند و حلقه دوم و سوم هم برای پیمایش مثلثی طرف دیگر ماتریس(مثلاً بالای ماتریس) استفاده می شوند.
    ساده ترین کار هم این است که در ابتدا سه متغییر bool به نام بازتابی و تقارنی و تعدی تعریف کنید و بعدش حلقه های بالا را بنویسد و بعدش نتایج را چاپ کنید.
    البته هنر اینه که به جای استفاده از سه پارامتر از یک Enum استفاده کنید و به جای استفاده از این شش حلقه فقط از سه حلقه استفاده کنید! این دیگه آخر برنامه می شه.
    کمکی خواستید در خدمتیم.
    یا علی
    خدانگهدارتون

  7. #7

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    در مورد ماتریس اسپارس که گفتم این بحث تو ساختمان داده ها مطرح شده بود واسمون

    ماتریس اسپارس یا ماتریس خلوت به ماتریسی میگن که بیشتر عناصرش صفر هست

    حالا ما واسه بهینه کردن فضای ذخیره شده و زمان در محاسبات میایم صفر ها رو در نظر نمیگیریم. البته بحث ماتریس های خلوت مفصل تره و من الان نمیتونم کامل توضیحش بدم

    در مورد برنامه ای که نوشتم باید بگم که این برنامه ضرب و جمع و ترانهاده رو حساب میکنه که تو این ۳ تا محاسبه ترانهاده و مشکل تر از همه ضرب مطرحه. ما میخوایم بتونیم که ضرب و ترانهاده ماتریس های بزرگ و البته اسپارس رو حساب کنیم.

    ورودی برنامه هم از اونجایی که مثلا نمیشه یه ماتریس ۱۰۰۰*۱۰۰۰ رو دستی وارد کرد یه برنامه کوچیک هم واسه تولید ماتریس نوشتم که اولش یه درصدی از کاربر میپرسه که این درصد نسبت عناصر غیر صفر به عناصر صفر هستش و این اطلاعات رو تو یه فایل ذخیره میکنه و برنامه اصلی اون اطلاعات رو از اون فایل میخونه.

  8. #8

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    با سلام خدمت جناب bsng110
    راستش اگه بتونین همین برنامه رو که گفتین با C++‎ همین جا بیاریدش ممنون می شم
    چون خودم ناقص نوشتمش ...

  9. #9

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    آقای RF.Ariyapoor این برنامه رو که گفتین اگه می شه همین جا بیارین تا ما هم ببینیمش تا بشه یه اظهار نظری بکنیم.

  10. #10
    کاربر دائمی آواتار bsng110
    تاریخ عضویت
    آبان 1386
    محل زندگی
    اصفهان
    سن
    36
    پست
    104
    هوالحکیم
    سلام
    ببخشید که دیر شد. اصفهان نبودم.
    کد تابع هم ارزی که شما می خواستید به صورت زیر نوشتم. این کد تقریباً بهینه شده است ولی دو مشکل دارد. اول اینکه trace نشده است و من در notepad آن را نوشتم پس یک مرتبه آن را بررسی کنید که درست باشد. خروجی این تابع مشخص می کند که ماتریس m ورودی هم ارزی هست با خیر؟ پارامتر دوم، اندازه ماتریس و پارامتر های سوم تا پنجم هم مشخص می کنند که ماتریس بازتابی و تقارنی و ... هستند یا خیر. شرمنده که اصطلاحات انگلیسی آنها را نمی دانستم به همین دلیل فینگلیش نوشتم. دومین مشکل این تابع هم نحوه مشخص کردن بازتابی و ... بودن است که بهتر بود از enum استفاده می کردم ولی چونکه می خواستم برنامه دارای درک ساده و راحت تری باشد، از آن روش استفاده نکردم. در ضمن همانطور که می بینید، در زیر فقط سه حلقه تو در تو وجود دارد که شما می توانید آنها را جداکنید و در شش حلقه قرار دهید به طوری که بررسی هر شرط، به صورت جداگانه صورت گیرد.

    bool HamArzy(bool **m, unsigned size, bool &baztab, bool &tagharony, bool &tarayaee)
    {
    baztab = tagharony = tarayaee = true;
    int i,j,k,midSize = size/2;
    for(i = 0 ; i < size ; ++i)
    {
    if(!m[i][i])
    baztab = false;
    for(j = 0 ; j < midSize ; ++j)
    {
    if(m[i][j]^m[j][i])
    tagharony = false;
    for(k = 0 ; k < midSize ; ++k)
    if(m[i][j] && m[j][k] && !m[i][k])
    tarayaee = false;
    }
    }
    return baztab & tagharony & tarayaee;
    }
    اما در مورد RF.Ariyapoor عزیز باید بگم که اون قدر ها هم بی صوات نبودم! منظورم این بود که این ماتریس خلوت را چگونه ذخیره کرده اید(لینک لیست یا ...)؟ چگونه ضرب انجام دادید؟ و ...
    در مورد کد ماتریس خودمان هم قرار است دوستم این کد را در سایت قرار دهد ولی گفته باشم که هنوز ردیابی آن تمام نشده است و ممکن است خطا هایی داشته باشد.
    یا علی
    خدانگهدارتان

  11. #11

    نقل قول:

    با تشکر از شما که این برنامه رو نوشتین

  12. #12

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    با سلام
    این هم از کدهای ماتریس
    بخونید و نظرتون را در مورد همکاری اعلام کنید
    فایل های ضمیمه فایل های ضمیمه

  13. #13

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    سلام ، اینم کد مورد نظر شما برای هر ماتریس n*n :

    #include <iostream>
    #include <conio>
    int main(){
    int n;
    bool r1,r2,r3;
    cout<<"Enter Size of Matrix\n";
    cin>>n;
    //--------------
    int **a=new int*[n];
    for(int i=0;i<n;i++)
    a[i]=new int[n];
    //--------------
    cout<<"Enter Your Matrix\n";
    for(int i=0;i<n;i++){
    for(int j=0;j<n;j++)
    cin>>a[i][j];
    }
    cout<<"___________________________________\n\n";
    //--------------
    //Baztabi
    int f1=0;
    for(int i=0;i<n;i++){
    if(a[i][i]==1)
    f1++;
    }
    if(f1==n){
    cout<<"Baztabi Ast\n\n";
    cout<<"-----------------\n";
    r1=true;
    }
    else{
    cout<<"Baztabi Nist\n\n";
    cout<<"-----------------\n";
    r1=false;
    }
    //--------------
    //Tagharoni
    int f2=0;
    for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
    if(i<j){
    if(a[i][j]==a[j][i])
    f2++;
    }
    }
    }
    if(f2==(((n*n)-n)/2)) {
    cout<<"Tagharoni Ast\n\n";
    cout<<"-----------------\n";
    r2=true;
    }
    else{
    cout<<"Tagharoni Nist\n\n";
    cout<<"-----------------\n";
    r2=false;
    }
    //--------------
    //Ta-addi
    int f3=0;
    for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
    for(int k=0;k<n;k++){
    if((a[i][j]==1 && a[j][k]==1))
    {
    if(a[i][k]!=1){
    f3++;
    break;
    }
    }
    }}}
    if(f3==0) {
    cout<<"Taaddi Ast\n\n";
    r3=true;
    }
    else{
    cout<<"Taaddi Nist\n\n";
    r3=false;
    }
    //--------------
    cout<<"________________________________\n\n";
    if(r1==true && r2==true && r3==true){
    cout<<"Hamarzi Ast\n\n";
    cout<<"-----------------\n";}
    else{
    cout<<"Hamarzi Nist\n\n";
    cout<<"-----------------\n";
    }
    getch();
    }

    موفق و پیروز باشید !!!

  14. #14
    کاربر دائمی آواتار YourWorldToday
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    مشهد - قم - قزوین
    پست
    178

    نقل قول: هر کی بلده لطفا یه راهنمایی بکنه (ماتریس ها)

    با سلام خدمت دوستان گرامی
    این قسمت متقارن برنامه درست کار می کنه؟

    //Tagharoni
    int f2=0;
    for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
    if(i<j){
    if(a[i][j]==a[j][i])
    f2++;
    }
    }
    }
    if(f2==(((n*n)-n)/2)) {
    cout<<"Tagharoni Ast\n\n";
    cout<<"-----------------\n";
    r2=true;

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

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

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