الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة ببرمجة كود عاوز اصفر بعض عناصر المصفوفة والحصول على القطر الرئيسي

بدأه zizozoro في 23 مايو 2011 · 2 رد · 2,010 مشاهدة · في C++.Net
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا بالجميع

ان شاء الله تكونوا بصحة وعافية

ربما تكون هذه المرة الاولى ان اطرح موضوع جديدا منذ سنوات

المهم

حاولت مرارا وتكرارا ان اقوم بعملية تصفير لاحدى المصفوفات باستخدام الطريق الرياضية القديمة للحصول على القطر الرئيسي

وهذه الطريقة تسمى The Solution ofSimultaneous Linear Algebraic

Equations and Matrix Inversion

رابط لملف بى دى اف للطريقة

http://www.mediafire.com/?8abrw4pjy6xacj4

فقمت بعمل ذلك يدويا واشتغل معى بالكود التالى

#include <iostream>
using namespace std;
void main(){

double  a[3][4];
	// Enter the Array a[4][4]
	for (int i = 0 ; i <3 ; i++){
		for(int j = 0 ; j < 4 ; j ++){
			cout<< "a["<< i <<"]["<<j<<"]=";
			cin >>a[j];
		}
	}



	//R2 = R1(a2/a1)
	double x = a[1][0]/a[0][0] ; // a2/a1
	a[1][0]=a[1][0]-(a[0][0]*x);
	a[1][1]=a[1][1]-(a[0][1]*x);
	a[1][2]=a[1][2]-(a[0][2]*x);
	a[1][3]=a[1][3]-(a[0][3]*x);

	//R3 = R1(a3/a1)
	x = a[2][0]/a[0][0] ;	// a2/a1
	a[2][0]=a[2][0]-(a[0][0]*x);
	a[2][1]=a[2][1]-(a[0][1]*x);
	a[2][2]=a[2][2]-(a[0][2]*x);
	a[2][3]=a[2][3]-(a[0][3]*x);

	//R1-R2(b1/b2n)
	x = a[0][1]/a[1][1];	//b1/b2n
	a[0][0] = a[0][0] - (a[1][0]*x);
	a[0][1] = a[0][1] - (a[1][1]*x);
	a[0][2] = a[0][2] - (a[1][2]*x);
	a[0][3] = a[0][3] - (a[1][3]*x);

	//R3-R2(b3/b2n)
	x = a[2][1]/a[1][1];	//b3/b2n
	a[2][0] = a[2][0] - (a[1][0]*x);
	a[2][1] = a[2][1] - (a[1][1]*x);
	a[2][2] = a[2][2] - (a[1][2]*x);
	a[2][3] = a[2][3] - (a[1][3]*x);


	x = a[0][2]/a[2][2];	
	a[0][0] = a[0][0] - (a[2][0]*x);
	a[0][1] = a[0][1] - (a[2][1]*x);
	a[0][2] = a[0][2] - (a[2][2]*x);
	a[0][3] = a[0][3] - (a[2][3]*x);

	//
	x = a[1][2]/a[2][2];	//
	a[1][0] = a[1][0] - (a[2][0]*x);
	a[1][1] = a[1][1] - (a[2][1]*x);
	a[1][2] = a[1][2] - (a[2][2]*x);
	a[1][3] = a[1][3] - (a[2][3]*x);



	// print the value of a[4][4]
	for (int i = 0 ; i <3 ; i++){
		for(int j = 0 ; j < 4 ; j ++){
			cout << a[j] <<"\t";
		}
		cout << "\n";
	}
	cout << "x = "<< a[0][3]/a[0][0] <<"\n";
	cout << "y = "<< a[1][3]/a[1][1] <<"\n";
	cout << "z = "<< a[2][3]/a[2][2] <<"\n";

getchar();
}

الناتج

post-153516-095502800 1306114573_thumb.p

وبعد ذلك حاولت استخدام forloop بالاضافة الى if statement ولكن للاسف الناتج غير مماثل

اتمنى ان نجد الحل سويا ان شاء الله تعالى

#include <iostream>
using namespace std;
void main(){

double  a[3][4];

	// Enter the Array a[4][4]
	for (int i = 0 ; i <3 ; i++){
		for(int j = 0 ; j < 4 ; j ++){
			cout<< "a["<< i <<"]["<<j<<"]=";
			cin >>a[j];
		}
	}
	for (int i=0;i<3;i++){
		for(int j=0;j<3;j++){

			if(i==j){
			cout <<"zizo\n";
			}
			else{
				for (int k = 0 ; k < 4; k++ ){

				//a[k] = a[k]-(a[j][k]*(a[j]/a[j][j]));
				a[j][k] = a[j][k]-(a[k]*(a[j]/a));
				}
			}

		}
	}




	// print the value of a[4][4]
	for (int i = 0 ; i <3 ; i++){
		for(int j = 0 ; j < 4 ; j ++){
			cout << a[j] <<"\t";
		}
		cout << "\n";
	}


getchar();
}

الناتج

post-153516-059536500 1306114544_thumb.p

بالتوفيق للجميع

المرفقات
01.png02.png
#2

وجدت الحل

ابحث عن

else{
                                for (int k = 0 ; k < 4; k++ ){

                                //a[k] = a[k]-(a[j][k]*(a[j]/a[j][j]));
                                a[j][k] = a[j][k]-(a[k]*(a[j]/a));
                                }

استبدله ب

 else{
      double zizo = a[j]/a;               
           for (int k = 0 ; k < 4; k++ ){

                                //a[k] = a[k]-(a[j][k]*(a[j]/a[j][j]));
                                a[j][k] = a[j][k]-(a[k]*zizo);
                                }

والان اواجه مشكلة فى كون المصفوفة المربعه ثابته ولا يمكن ان اقوم بوضع طولها من قبل المستخدم

هل هناك حل لتلك الموضوع

وهل يتم استخدام البوينتر كأحد الحلول

ان كانت الاجابة بنعم , فللاسف لم ادرس البوينتر بعد

فلذا اتمنى التوضيح اكثر

بالتوفيق للجميع

#3

ـهلا بك أخي

يفترض أن يكون موضوعك في قسم C & C++ .. كل التوفيق.

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…