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

نام تاپیک: پیاده سازی یک ماتریس خلوت

  1. #1

    پیاده سازی یک ماتریس خلوت

    سلام
    می خواستم ماتریسهای خلوت را به وسیله link list ها پیاده سازی کنم البته در زیان C++‎ که دارای 8 تا منوmenu به صورت زیر باشد.
    1-نام ماتریس را بپرسد و مشخصات آن را بگیرد.
    2-نام دو تا ماتریس را بپرسد و در صورت وجود آن دو ماتریس آنها را با هم جمع کند.
    3- نام دو تا ماتریس را بپرسد و در صورت وجود آن دو را با هم ضرب کند.
    4- نام ماتریس را بپرسد و مشخصات آن را نشان دهد.
    5- نام ماتریس را بپرسد و ببیند که بالا مثلثی است یا نه ؟
    6- نام ماتریس را بپرسد و ببیند که پایین مثلثی است یا نه ؟
    7- لیست تمام ماتریسها و مشخصاتشان را نشان دهد
    8- تمام ماتریس ها را پاک کند و از برنامه خارج شود
    مشکل من در پیاده سازی این است که نمی دانم چه طوری آدرس اولین node را نگه دارم چون از هر جنسی که آن را تعریف می کنم error می گیره لطفا من را راهنمایی کنید.
    در ضمن یادم رفت که بگم باید با استفاده از class ها آن را پیاده سازی نمایم.
    با تشکر
    مریم

  2. #2
    I NEED INFO ABOUT SPARSE MATRIX AND PROGRAMING THIS MATRIX
    FARSI

  3. #3

    Cool

    نقل قول نوشته شده توسط maryam206 مشاهده تاپیک
    سلام
    می خواستم ماتریسهای خلوت را به وسیله link list ها پیاده سازی کنم البته در زیان C++‎ که دارای 8 تا منوmenu به صورت زیر باشد.
    1-نام ماتریس را بپرسد و مشخصات آن را بگیرد.
    2-نام دو تا ماتریس را بپرسد و در صورت وجود آن دو ماتریس آنها را با هم جمع کند.
    3- نام دو تا ماتریس را بپرسد و در صورت وجود آن دو را با هم ضرب کند.
    4- نام ماتریس را بپرسد و مشخصات آن را نشان دهد.
    5- نام ماتریس را بپرسد و ببیند که بالا مثلثی است یا نه ؟
    6- نام ماتریس را بپرسد و ببیند که پایین مثلثی است یا نه ؟
    7- لیست تمام ماتریسها و مشخصاتشان را نشان دهد
    8- تمام ماتریس ها را پاک کند و از برنامه خارج شود
    مشکل من در پیاده سازی این است که نمی دانم چه طوری آدرس اولین node را نگه دارم چون از هر جنسی که آن را تعریف می کنم error می گیره لطفا من را راهنمایی کنید.
    در ضمن یادم رفت که بگم باید با استفاده از class ها آن را پیاده سازی نمایم.
    با تشکر
    مریم
    سلام امیدوارم این برنامه به شما کمک کنه


    : خواندن ماتریس اسپارس و چاپ آن
    ۲ : چاپ ماتریس واقعی
    ۳ : جمع و تفریق و ضرب با ماتریسی دیگر





    #include<conio.h>
    #include<iostream.h>
    #define Max 30
    /************************************************** *******/
    class string;
    class Sparse;
    /************************************************** *******/
    class SparseNode
    {
    int row, col;
    float value;
    friend class Sparse;
    };
    /************************************************** *******/
    class Sparse
    {
    int Row, Col, Terms;
    SparseNode Data[Max];
    public:
    void ReadSparse( void );
    void WriteSparse( void );
    void WriteMatrix( void );
    void AddSparse( Sparse a, Sparse b );
    void ManfiSparse();
    void FastTranspose( Sparse b );
    int StoreSum( int sum, int&LastInResult, int r, int c );
    void Sparse :: MulSparse( Sparse a, Sparse b );
    };
    /************************************************** *******/
    void Sparse :: ReadSparse( void )
    {
    clrscr();
    int i = 0;
    cout << "\n\n@ Lotfan Ettelaat Zir Ra Dar Mored Matrise Sparse Vared Konid : \n\n"
    << "$ Tadade Satrha : ";
    cin >> Row;
    cout << "$ Tedade Sotoonha : ";
    cin >> Col;
    do
    {
    cout << "$ Tedade Anasore Gheyre Sefr : ";
    cin >> Terms;
    if( Terms > ( Row * Col ) || Terms < 0 )
    cerr << "\nERROR ! ( In Tedad Ghabele Ghabool Nemibashad )\n\n";
    }
    while( Terms > ( Row * Col ) || Terms < 0 );
    while( i < Terms )
    {
    cout << "\n# Lotfan Shomarehye Satr Va Sotoone Onsore "
    << ( i + 1 )
    << " -om Ra Vared Konid : ";
    cin >> Data[i].row
    >> Data[i].col;
    if( Data[i].row > Row || Data[i].col > Col || Data[i].row < 1 || Data[i].col < 1 )
    cerr << "\nERROR ! ( In Jayegah Dar Moshakhkhasat Matris Nemigonjad )\n";
    else
    {
    cout << "* Lotfan Meghdar Onsor Ra Vared Konid : ";
    cin >> Data[i].value;
    i++;
    }
    }
    clrscr();
    }
    /************************************************** *******/
    void Sparse :: WriteSparse( void )
    {
    int i;
    cout << "\n\n# Moshakhkhasat Matris Be Soorate Zir Ast :"
    << "\n\n~ Tedade Satrha = "
    << Row
    << "\n~ Tedade Sotoonha = "
    << Col
    << "\n~ Tedade Anasore Gheyre Sefr = "
    << Terms
    << "\n\n~ Liste Anasor Gheyre Sefre Matris Be Sharhe Zir Ast :\n\n"
    << "Satr\tSotoon\tMeghdar\n";
    for( i = 0; i < Terms; i++ )
    cout << Data[i].row
    << "\t"
    << Data[i].col
    << "\t"
    << Data[i].value
    << endl;
    getch();
    }
    /************************************************** *******/
    void Sparse :: WriteMatrix( void )
    {
    clrscr();
    int i, j;
    float Matrix[Max][Max] = {0};
    cout << "\n\nMatrix Vaghei :\n\n";
    for( i = 0; i < Terms; i++ )
    Matrix[Data[i].row-1][Data[i].col-1] = Data[i].value;
    for( i = 0; i <= Col; i++ )
    cout << "[" << ( i ) << "]\t";
    for( i = 0; i < Row; i++ )
    {
    cout << "\n\n"
    << "[" << ( i+1 ) << "]";
    for( j = 0; j < Col; j++ )
    {
    cout << "\t"
    << Matrix[i][j];
    }
    }
    getch();
    clrscr();
    }
    /************************************************** *******/
    void Sparse :: AddSparse( Sparse a, Sparse b )
    {
    int i, j, k;
    i = j = k = 0;
    if( a.Row != b.Row || a.Col != b.Col )
    {
    cout << "\n*** ERROR !!! Nemitavan In 2 Matris Ra Ba Ham Jame Kard ***";
    return;
    }
    Row = a.Row;
    Col = a.Col;
    while( i < a.Terms && j < b.Terms )
    {
    if( a.Data[i].row < b.Data[j].row || ( a.Data[i].row == b.Data[j].row && a.Data[i].col < b.Data[j].col ) )
    {
    Data[k].row = a.Data[i].row;
    Data[k].col = a.Data[i].col;
    Data[k++].value = a.Data[i++].value;
    }
    else if( a.Data[i].row > b.Data[j].row || ( a.Data[i].row == b.Data[j].row && a.Data[i].col > b.Data[j].col ) )
    {
    Data[k].row = b.Data[j].row;
    Data[k].col = b.Data[j].col;
    Data[k++].value = b.Data[j++].value;
    }
    else if( a.Data[i].value + b.Data[j].value )
    {
    Data[k].row = a.Data[i].row;
    Data[k].col = a.Data[i].col;
    Data[k++].value = a.Data[i++].value + b.Data[j++].value;
    }
    else
    {
    i++;
    j++;
    }
    }
    while( i < a.Terms )
    {
    Data[k].row = a.Data[i].row;
    Data[k].col = a.Data[i].col;
    Data[k++].value = a.Data[i++].value;
    }
    while( j < b.Terms )
    {
    Data[k].row = b.Data[j].row;
    Data[k].col = b.Data[j].col;
    Data[k++].value = b.Data[j++].value;
    }
    Terms = k;
    }
    /************************************************** *******/
    void Sparse :: ManfiSparse()
    {
    for( int i = 0; i < Terms; i++ )
    Data[i].value *= -1;
    }
    /************************************************** *******/
    void Sparse :: FastTranspose( Sparse a )
    {
    int i, k;
    int RowSize[Max], RowStart[Max];
    Row = a.Col;
    Col = a.Row;
    Terms = a.Terms;
    for( i = 0; i < a.Col; i++ )
    RowSize[i] = 0;
    for( i = 0; i < a.Terms; i++ )
    RowSize[a.Data[i].col-1]++;
    RowStart[0] = 0;
    for( i = 1; i < a.Col; i++ )
    RowStart[i] = RowStart[i-1] + RowSize[i-1];
    for( i = 0; i < a.Terms; i++ )
    {
    k = RowStart[a.Data[i].col-1]++;
    Data[k].row = a.Data[i].col;
    Data[k].col = a.Data[i].row;
    Data[k].value = a.Data[i].value;
    }
    }
    /************************************************** *******/
    int Sparse :: StoreSum( int sum, int&LastInResult, int r, int c )
    {
    if( sum != 0 )
    if( LastInResult < Max-1 )
    {
    LastInResult++;
    Data[LastInResult].row = r;
    Data[LastInResult].col = c;
    Data[LastInResult].value = sum;
    return 0;
    }
    else
    {
    cerr << "\n*** ERROR !!! Tedade Anasore Gheyre Sefr Az Fazaye Arayeh Biroon Mizanad ***\n";
    return 1;
    }
    else
    return 0;
    }
    /************************************************** *******/
    char compare( int x, int y )
    {
    if( x < y )
    return '<';
    else if( x == y )
    return '=';
    return '>';
    }
    /************************************************** *******/
    void Sparse :: MulSparse( Sparse a, Sparse b )
    {
    if( a.Col != b.Row )
    {
    cout << "\n*** ERROR !!! Zarbe 2 Matris Emkan Pazir Nist ***";
    Row = 0;
    Col = 0;
    Terms = 0;
    return;
    }
    if( ( a.Terms == Max ) || ( b.Terms == Max ) )
    {
    cout << "*** ERROR !!! Yek Fazaye Khali Dar Matris 'A' Ya 'B' Lazem Ast ***";
    Row = 0;
    Col = 0;
    Terms = 0;
    return;
    }
    Sparse d;
    d.FastTranspose( b );
    int currRowIndex = 0, LastInResult = -1, currRowBegin = 0, currRowA = a.Data[0].row;
    a.Data[a.Terms].row = a.Row;
    d.Data[b.Terms].row = b.Col;
    d.Data[b.Terms].col = -1;
    int sum = 0;
    while( currRowIndex < a.Terms )
    {
    int currColB = d.Data[0].row;
    int currColIndex = 0;
    while( currColIndex <= b.Terms )
    {
    if( a.Data[currRowIndex].row != currRowA )
    {
    if( StoreSum( sum, LastInResult, currRowA, currColB ) )
    {
    Row = 0;
    Col = 0;
    Terms = 0;
    cout << "\n *** ERROR !!! ***";
    return;
    }
    else
    sum = 0;
    currRowIndex = currRowBegin;
    while ( d.Data[currColIndex].row == currColB )
    currColIndex++;
    currColB = d.Data[currColIndex].row;
    }
    else if( d.Data[currColIndex].row != currColB)
    {
    if( StoreSum( sum, LastInResult, currRowA, currColB ) )
    {
    Row = 0;
    Col = 0;
    Terms = 0;
    cout << "\n *** ERROR !!! ***";
    return;
    }
    else
    sum = 0;
    currRowIndex = currRowBegin;
    currColB = d.Data[currColIndex].row;
    }
    else switch( compare( a.Data[currRowIndex].col, d.Data[currColIndex].col ) )
    {
    case '<' :
    currRowIndex++;
    break;
    case '=' :
    sum += a.Data[currRowIndex].value * d.Data[currColIndex].value;
    currRowIndex++;
    currColIndex++;
    break;
    case '>' :
    currColIndex++;
    }
    }
    while( a.Data[currRowIndex].row == currRowA )
    currRowIndex++;
    currRowBegin = currRowIndex;
    currRowA = a.Data[currRowIndex].row;
    }
    Row = a.Row;
    Col = b.Col;
    Terms = LastInResult + 1;
    }
    /************************************************** *******/
    void Moarrefi( void )
    {
    clrscr();
    cout << "\t\t\t\tBe Name Khoda"
    << "\n\n\nBarname Nevis : Mohammad Hasani Eghtedar"
    << "\n\nShomare Daneshjooti : 83525013"
    << "\n\nReshteye Tahsili : Olume Computer"
    << "\n\nMaghtae Tahsili : Karshenasi"
    << "\n\nSale Tahsili : 1384 - 1385 Nimehye Avval"
    << "\n\nMahale Tahsil : Daneshgahe Dolatiye Qom"
    << "\n\nOstad : Aghaye Sayyed Esmaeili"
    << "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
    getch();
    }
    /************************************************** *******/
    void Meno( void )
    {
    clrscr();
    cout << "\n# Lotfan Alamat Morede Nazar Ra Vared Konid :\n"
    << "\n+ : Jam Ba Matrisi Digar"
    << "\n- : Tafrigh Az Matrisi Digar"
    << "\n* : Zarb Dar Matrisi Digar"
    << "\nP : Chape Matrise Vagheyi"
    << "\nT : Tarane Hadeye Matris";
    }
    /************************************************** *******/
    void main( void )
    {
    Moarrefi();
    Sparse a, b, c;
    a.ReadSparse();
    a.WriteSparse();
    Meno();
    switch( getch() )
    {
    case '+' :
    b.ReadSparse();
    b.WriteSparse();
    c.AddSparse(a,b);
    cout << "\n\nAnswer Is : ";
    c.WriteSparse();
    break;
    case '-' :
    b.ReadSparse();
    b.WriteSparse();
    b.ManfiSparse();
    c.AddSparse(a,b);
    cout << "\n\nAnswer Is : ";
    c.WriteSparse();
    break;
    case '*' :
    b.ReadSparse();
    b.WriteSparse();
    c.MulSparse(a,b);
    clrscr();
    cout << "\n\nAnswer Is : ";
    c.WriteSparse();
    break;
    case 'p' :
    a.WriteMatrix();
    break;
    case 't' :
    c.FastTranspose( a );
    clrscr();
    cout << "\n\nAnswer Is : ";
    c.WriteSparse();
    break;
    }
    }


  4. #4

    نقل قول: پیاده سازی یک ماتریس خلوت

    از این کجاها استفاده میشه کرد؟

  5. #5

    نقل قول: پیاده سازی یک ماتریس خلوت

    salam
    yesoal
    chand ta 0 lazem hast ta yek matris ro matrise khalvat begim

  6. #6
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: پیاده سازی یک ماتریس خلوت

    chand ta 0 lazem hast ta yek matris ro matrise khalvat begim
    فارسی بنویس
    معمولا ماتریس ها قطری که تعداد سطر (یا ستون) بالاتر از چهار باشه
    ماتریس معمولی مقدار فضای که اشغال می کنه برابر
    سطز X ستون X حجم عنصر(مثلا int چهار بایتی)
    ماتریس اسپارس فضایی که اشغال می کنه
    برای هر عنصر مقدار فضای مورد نیاز = 2 X حجم int (یا short ) + حجم عنصر
    و سپس یک عدد >> 3 X حجم نوع عددی
    این دو تا رو برای ماترست حساب می کنی اگه مقدار اسپارس کمتر از معمولی شد میشه بصورت خلوت ذخیره کرد

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

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