در خواست برنامه به زبان ++c(دترمینان)

در اين بخش مي‌توانيد در مباحث مربوط به زبانهاي بر پايه C به بحث بپردازيد

مدیران انجمن: athlon64x2, abbas.m.k, شوراي نظارت

ارسال پست
Rookie Poster
Rookie Poster
پست: 29
تاریخ عضویت: چهار شنبه 23 اسفند 1385, 12:28 am

در خواست برنامه به زبان ++c(دترمینان)

پست توسط sohrab1414 » پنج شنبه 26 آذر 1388, 12:51 pm

سلام خدمت دوستان
من سورس برنامه ای به زبان ++c می خواستم که بتونه دترمینان پارامتری(شامل 3*3 و
2*2)رو حل کنه و یک ماتریس پارامتری رو در در ماتریس عددی ضرب کنه.
ممنون میشم اگر کمک کنین.خیلی احتیاج دارم

تصویرتصویرتصویرتصویرتصویرتصویرتصویر

Captain II
Captain II
نمایه کاربر
پست: 246
تاریخ عضویت: یک شنبه 9 فروردین 1388, 9:11 am
سپاس‌های ارسالی: 780 بار
سپاس‌های دریافتی: 791 بار
تماس:

Re: در خواست برنامه به زبان ++c(دترمینان)

پست توسط arashtabaie » پنج شنبه 26 آذر 1388, 2:54 pm

به علت اینکه برای محاسبه ی دترمینان ماتریس های بزرگتر باید از فرمول بازگشتی استفاده کرد که خیلی محاسبات پیچیده ای داره و در نتیجه order(پیچیدگی زمانی) کدتون رو میبره بالا اینجا از راه حل ساده تر کد کردن فرمول دترمینان برای ماتریس مربعی درجه دو و سه استفاده کردم.
برنامه برای محاسبه دترمینان:

 [BLOCKQUOTE]
int DetMatrix(int **matrix, int Type)
{
int counter = 0;
try //yek error e mohtamel inja eshtebah pas kardane
{

if(Type == 2)
return DetMatrix2*2(matrix)

else if(Type == 3)
return ( matrix[0][0] * DetMatrix2*2({{matrix[1][1],matrix[1][2]},{matrix[2][1],matrix[2][2]}}) -
matrix[0][1] * DetMatrix2*2({{matrix[1][0],matrix[1][2]},{matrix[2][0],matrix[2][2]}}) +
matrix[0][2] * DetMatrix2*2({{matrix[1][0],matrix[1][1]},{matrix[2][0],matrix[2][1]}}));

}
catch
{
return ; // an error has occured
}

}

  DetMatrix2*2(int**matrix)
{
return (matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);




 : تایپ یک int است که باید بر اساس ماتریستون یک مقدار 2 یا 3 بهش پاس کنید.
بعد از else if بر اساس فرمول محاسبه دترمینان تابع ماتریس دو در دو مرتبا با مقادیر مناسب کال میشه.

پ.ن.: من این کد رو همینجا نوشتم و جایی چک یا دیباگش نکردم. در حقیقت شما میتونید به عنوان یک سودو کد ازش استفاده کنید. البته اگه خیلی خوش شانس باشید با یکمی دیباگ کردن راه می افته. [/BLOCKQUOTE] 

Rookie Poster
Rookie Poster
پست: 29
تاریخ عضویت: چهار شنبه 23 اسفند 1385, 12:28 am

Re: در خواست برنامه به زبان ++c(دترمینان)

پست توسط sohrab1414 » یک شنبه 29 آذر 1388, 8:14 pm

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

تصویرتصویرتصویر

Captain II
Captain II
نمایه کاربر
پست: 246
تاریخ عضویت: یک شنبه 9 فروردین 1388, 9:11 am
سپاس‌های ارسالی: 780 بار
سپاس‌های دریافتی: 791 بار
تماس:

Re: در خواست برنامه به زبان ++c(دترمینان)

پست توسط arashtabaie » چهار شنبه 2 دی 1388, 5:26 pm

  ++g این کد رو کامپایل میکنه: 

کد: انتخاب همه

#include <cstdlib>
#include <iostream>
#include"conio.h"

using namespace std;

int DetMatrix2(int**);
int DetMatrix(int **, int);


int main(int argc, char *argv[])
{
    int[][] matrix = {{1,1},{2,2}};
   
    cout<< DetMatrix( matrix, 2) << endl;
   
    getch();
   
    return 0;//success
}




    int DetMatrix(int **matrix, int Type)
    {
      
      int counter = 0;
      try   //yek error e mohtamel inja eshtebah pas kardane
      {

         
        if(Type == 2)
          return DetMatrix2(matrix);

        else if(Type == 3)
           return ( matrix[0][0] * DetMatrix2({{matrix[1][1],matrix[1][2]},{matrix[2][1],matrix[2][2]}}) -
                matrix[0][1] * DetMatrix2({{matrix[1][0],matrix[1][2]},{matrix[2][0],matrix[2][2]}}) +
                matrix[0][2] * DetMatrix2({{matrix[1][0],matrix[1][1]},{matrix[2][0],matrix[2][1]}}));
       
      }
      catch
      {
          return 0; // an error has occured, ye adade gharardadi bara khodet inja bezar!!!!!!!
      }

    }
   

    int DetMatrix2(int**matrix)
    {
       return (matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);

    }



  کد بالا کامپایل نشد مشکل از کامپایلرتونه که سینتکس رو کامل نمیشناسه!!! کد زیر رو به جای بالایی استفاده کنید:

 

کد: انتخاب همه

#include <cstdlib>
#include <iostream>
#include"conio.h"

using namespace std;

int DetMatrix2(int**);
int DetMatrix(int **, int);


int main(int argc, char *argv[])
{
    int** matrix;
    for(int counter = 0; counter < 3; counter++)
    {
        matrix[counter] = new int[3];
        for(int counter2 = 0; counter2 < 3; counter2++){
             if(counter == counter2)
               matrix[counter][counter2] = 1;
             else
               matrix[counter][counter2] = 0;
        }
    }


    cout<< DetMatrix( matrix, 3) << endl;
   
    getch();
   
    return 0;//success
}




    int DetMatrix(int **matrix, int Type)
    {
      
      int counter = 0;
      
         
        if(Type == 2)
          return DetMatrix2(matrix);

        else if(Type == 3)
        {
           int** mat1 = new int*[2];
           mat1[0] = new int[2];
           mat1[1] = new int[2];
           mat1[0][0] = matrix[1][1];
           mat1[0][1] = matrix[1][2];
           mat1[1][0] = matrix[2][1];
           mat1[1][1] = matrix[2][2];
          
           int** mat2 = new int*[2];
           mat2[0] = new int[2];
           mat2[1] = new int[2];
           mat2[0][0] = matrix[1][0];
           mat2[0][1] = matrix[1][2];
           mat2[1][0] = matrix[2][0];
           mat2[1][1] = matrix[2][2];
          
           int** mat3 = new int*[2];
           mat3[0] = new int[2];
           mat3[1] = new int[2];
           mat3[0][0] = matrix[1][0];
           mat3[0][1] = matrix[1][1];
           mat3[1][0] = matrix[2][0];
           mat3[1][1] = matrix[2][1];
          
           return ( matrix[0][0] * DetMatrix2(mat1) -
                matrix[0][1] * DetMatrix2(mat2) +
                matrix[0][2] * DetMatrix2(mat3));
        }
      

    }
   

    int DetMatrix2(int** matrix)
    {
       return (matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);

    }


    قطعه کد دومی، یک ماتریس قطری 3*3 پاس میشه که مقدار دترمینانش برابر یک هستش، کد رو تو کامپایلر تحت ویندوز dev-cpp تست کردم درست جواب داد. اگه با کامپایلر دیگه ای دارید کار میکنید اگه مشکلی داشت باید احتمالا یکم تغییرش بدید!

Rookie Poster
Rookie Poster
پست: 29
تاریخ عضویت: چهار شنبه 23 اسفند 1385, 12:28 am

Re: در خواست برنامه به زبان ++c(دترمینان)

پست توسط sohrab1414 » پنج شنبه 3 دی 1388, 7:11 pm

ممنون ازتون.ولی یه سوال از خدمتتون داشتم :
چه جوری میشه فهمید از چه کامپایلری استفاده می کنم و یا ورژنش چیه و شما از چه کامپایلری استفاده می کنید؟
و اگر بخوام تغییرش بدم چجوری میشه؟
:-x :-x :-x

Captain II
Captain II
نمایه کاربر
پست: 246
تاریخ عضویت: یک شنبه 9 فروردین 1388, 9:11 am
سپاس‌های ارسالی: 780 بار
سپاس‌های دریافتی: 791 بار
تماس:

Re: در خواست برنامه به زبان ++c(دترمینان)

پست توسط arashtabaie » پنج شنبه 3 دی 1388, 10:43 pm

خوب، ببینید، c یک syntax استاندارد داره که اونو همه ی کامپایلر ها میشناسن!
همین کد نوشته شدتونو با هر کامپایلری کامپایل کنید میشه کامپایلرتون دیگه!!!!

ارسال پست

بازگشت به “C Base Programming”