واضح آرشیو وب فارسی:سایت ریسک: Saeed 13861st May 2007, 09:27 AMاينم برنامه ماتريس معكوس شايد براي كسي مفيد باشه خودم نوشتم اگه يه موقع اشكال داشت ببخشيد ضمنا كليك راست كرده و از قسمت Encoding گزينه left to right document را بزنيد. /*Matrix Reverse */ #include <math.h> #include <iomanip.h> #include <stdlib.h> #include <iostream.h> #include <conio.h> int p=1; float det(int i1,int j1,int i4,int j4,int n,float x[10][10]); int hams(int i1,int j1,int n,float x[10][10]); int main() { float x[10][10],det1,y[2][2]; int n,r=1; cout<<"Enter n for Matrix n*n: "; cin>>n; if(n==1) cout<<"there is not matrix."; else { cout<<" Enter "<<n*n<<" number. "; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>x[i][j]; det1=det(1,1,n,n,n,x); cout<<"Determinan x is : "<<det1<<endl; cout<<" Matrix Reverse Is :"<<endl; if(n==2) { y[1][1]=x[2][2]; y[2][2]=x[1][1]; y[1][2]=-x[1][2]; y[2][1]=-x[2][1]; for(i=1;i<=2;i++) for(int j=1;j<=2;j++) { cout<<setw(8)<<setprecision(2)<<y[i][j]/det1; if(j==2) cout<<endl;}} else { for(i=1;i<=n;i++) for(int j=1;j<=n;j++) { cout<<setw(8)<<setprecision(2)<<(hams(j,i,n,x)/det1)*r; r*=-1; if(j==n) cout<<endl;}} } return 0;} /*in ghesmat determinane x ra hesab mikonad */ float det(int i1,int j1,int i4,int j4,int n,float x[10][10]) { if(n==2) {int i2,i3,j2,j3; i2=i1; j2=j4; i3=i4; j3=j1; return x[i1][j1]*x[i4][j4]-x[i2][j2]*x[i3][j3];} float sum=0; for(int k=j1;k<=j4;k++) { if(k==j1) sum+=p*x[i1][k]*det(i1+1,j1+1,i4,j4,i4-i1,x); else if(k==j4) sum+=p*x[i1][k]*det(i1+1,j1,i4,j4-1,i4-i1,x); else sum+=p*x[i1][k]*det(i1+1,j1,i4,j4,i4-i1,x); p*=-1; } return sum; } /* in ghesmat hamsaze x ra hesab mikonad */ int hams(int i1,int j1,int n,float x[10][10]) { float z[10][10]; int k=1,l=1,s; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i!=i1 && j!=j1) { z[k][l]=x[i][j]; if(l==n-1) {++k; l=0;} ++l; } } s=det(1,1,n-1,n-1,n-1,z); return s;} والسلام farzad_jh200129th May 2007, 11:10 AMسلام دوست عزيز ميشه يه لطفي كني تابع حساب دترمينان و معكوس را يك كمي نحوه عملشو توضيح بدهي قبلاٌ ازت متشكرم من برنامه شما را چندين بار مرور كردم ولي هنوز نتونستم اين دو تابع را براي خودم شرح دهم قبلا از شما متشكرم Saeed 138611th June 2007, 07:05 AMبرنامه اي كه دترمينان رو حساب ميكنه /*Determinan Matrix*/ #include <math.h> #include <iomanip.h> #include <stdlib.h> #include <iostream.h> #include <conio.h> int p=1; float det(int i1,int j1,int i4,int j4,int n,float x[10][10]); int main() { clrscr(); float x[10][10]; int n; cout<<"Enter n for Matrix n*n: "; cin>>n; cout<<" Enter "<<n*n<<" number. "; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>x[i][j]; cout<<det(1,1,n,n,n,x); return 0;} float det(int i1,int j1,int i4,int j4,int n,float x[10][10]) { if(n==2) {int i2,i3,j2,j3; i2=i1; j2=j4; i3=i4; j3=j1; return x[i1][j1]*x[i4][j4]-x[i2][j2]*x[i3][j3];} float sum=0; for(int k=j1;k<=j4;k++) { if(k==j1) sum+=p*x[i1][k]*det(i1+1,j1+1,i4,j4,i4-i1,x); else if(k==j4) sum+=p*x[i1][k]*det(i1+1,j1,i4,j4-1,i4-i1,x); else sum+=p*x[i1][k]*det(i1+1,j1,i4,j4,i4-i1,x); p*=-1; } return sum; } Saeed 138611th June 2007, 07:19 AMدترمينان به اين ترتيب عمل ميكنه كه ابتدا آرايه ها و نيازها رو خود تابع دريافت ميكنه. در خود تابع از سطر اول عدد اول رو انتخاب و در دترمينان ماتريس بغير از سطر اول و ستون اول ضرب ميكنه عدد انتخاب شده سه حالت داره كه يا عدد اول سطر يا عدد آخر سطر يا عدد غير از آنها كه براي هركدام مقدار ورودي تابع فرق ميكنه و به همين ترتيب عدد دوم سطر و سوم و... تاوقتي كه ماتريس 2*2 بدست مياد براي حساب كردنه ماتريس معكوس ما به دترمينان و ماتريس همسازه نياز داريم كه ماتريس همسازه نيز در تابع جداگانه با نامdet و hams آمده است اميدوارم توضيح مفيد باشه ولي اگه خواستيد بگيد تا با تمام جزئيات شرح دهم farzad_jh200111th June 2007, 08:31 AMسلام سعيد جان خيلي از شما متشكرم من دتر مينان 2*2 يا 3*3 رو ميتونم درك كنم و حتي برنامه هم براش نوشتم ولي تابع برنامه شما دركش برام مشكله اگه ممكنه با جزئياتش برام يك توضيح مختصر بده قبلا ازت خيلي ممنمونم Saeed 138611th June 2007, 08:35 PMآقا فرزاد خدمت شما ! i1 : مشخصه سطر اول ماتريس j1 : مشخصه ستون اول ماتريس i4 : مشخصه سطر آخر ماتريس j4 : مشخصه ستون آخر ماتريس k : شمارنده حلقه for به تعداد مرتبه ماتريس ( تعداد ستونهاي ماتريس) p : براي تغيير دادن علامت ستون زوج ماتريس . براي بدست آوردن دترمينان يكي در ميان در منفي ضرب ميشوند. اگر مرتبه ماتريس (n) بزرگتر از 2 يعني 3يا4 يا... باشد اعداد سطر اول را در دترمينان حاصل از حذف سطر و ستون همان عدد ضرب ميكند. مثلا عدد اول سطر اول (x[i1][k] ) را برداشته و آن را در دترمينان حاصل از خذف سطر اول و ستون اول ضرب ميكند. عددي كه برداشته ميشود 3 حالت دارد 1- اولين عدد سطر 2- آخرين عدد سطر 3- اعداد بين اول و آخر سطر براي اولي ما بايد سطر اول و ستون اول را حذف كنيم --- i1+1 سطر دوم را جايگزين سطر اول ميكند. و j1+1 ستون دوم را جايگزين اول ميكند . سطر و ستون آخر خودشان و i4-i1 همان n جديد يعني مرتبه ماتريس منهاي يك. براي دومي بايد سطر اول و ستون آخر را حذف كنيم .---i1+1 سطر دوم جايگزين سطر اول . --- j1 ستون اولي خودش . --- j4 سطر آخري خودش ---j4-1 ستون آخر حذف و ستون قبلي جايگزين آن ميشود. براي سومي سطر و ستون اول و آخر تغيير نميكند فقط مرتبه ماتريس يكي كم ميشود . اين روند ادامه پيدا ميكند تا وقتي كه مرتبه ماتريس به 2 برسد كه دتر مينان آن را به صورت دستي حساب كردم يعني جايي كه نوشته شده if (n = = 2 ) پيشنهاد ميكنم به صورت دستي روي كاغذ با نوشتن مشخصه ها و تغييرات آنها امتحان كني تا بهتر متوجه بشي. اميدوارم توضيح مفيد بوده باشه. اگه خوب توضيح ندادم ببخشيد. کاربران ثبت نام کرده قادر به مشاهده لینک می باشند negar6024th October 2007, 03:00 PMبه نام خدا سلام و عرض ادب من یک پشته و صف میخوام توی سی پلاس پلاس بنویسم.... کسی میتونه کمکم کنه؟ برنامه نویسی رو با سیستم تازه شروع کردم...واقعا مشکل دارم....ممنون میشم یا علی یا حق سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2963]