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

طلب برمجة نظرية فيثاغورث بلغة جافا

بدأه bahaa87 في 2 أكتوبر 2010 · 4 رد · 2,295 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمته تعالى وبركاتو

إخوتي الكرام

لدي وظيفة يجب أن أقدمها لدكتور الجامعة غدا مساءاً

ولكن للاسف حتى الآن لم استطع حلها

فهل من الممكن مساعدتي في ذلك

نص الوظيفة هو

نظرية فيثاغورث Pythagoras

تقول نظرية فيثاغورث إن مجموع مربعي الضلعين القائمين في مثلث قائم الزاوية يساوي مربع الوتر

نريد في هذه الوظيفة أن نبحث عن كافة الأعداد الصحيحة التي تحقق هذه النظرية ضمن مجال ما يحدده المستخدم

المطلوب:

أكتب برنامجاً يقوم بما يلي

1- قراءة عدد صحيح من المستخدم max

2- إيجاد جميع الثلاثيات من الأعداد الصحيحة (a,b,c) التي تقع ضمن المجال [0..max] و تحقق نظرية فيثاغورث كما يلي : a*a + b*b = c*c

الفكرة الخوارزمية:

حلقة تكرارية تحسب مربع a (a*a)

حلقة تكرارية تحسب مربع b (b*b)

حساب جذر المجموع sqrt( (a*a)+ (b*b) ) = fc

إذا ( القيمة الفعلية fc هي قيمة عدد صحيح **) نفّذ

اكتب قيم a, b, c

3- يجب طباعة هذه الثلاثيات على الخرج في ستة أعمدة كما في الشكل التالي:

15082890.jpg

**

fc هو عموماً قيمة كسرية، كي نختبر أن قيمته عدد صحيح نقوم بالاختبار التالي:

abs( fc – floor(fc) ) < eps (1)

eps هي (epsilon ) قيمة صغيرة جداً تقارب الصفر eps=0.00000001

floor(fc) تابع رياضي يعطي الجزء الصحيح من العدد الكسري: مثلاً floor(6.3) تساوي 6

الآن عرفت معنى العلاقة (1) : الجزء الكسري من العدد fc هو تقريباً صفر وبالتالي fc هي قيمة عدد صحيح

التوابع الحسابية: floor, abs, sqrt وتوابع أخرى تستدعى من الصف Math : الجذر التربيعي لـ 4 Math.sqrt( 4 )

لاحظ أنه كان بإمكاننا الاستعاضة عن العلاقة (1) بالعلاقة التالية:

fc == floor(fc) (2)

لكنها تستخدم شرط المساواة بين عددين كسريين. ولا ينصح باستخدام هذا الشرط لأنه في كثير من الأحيان لا يمكننا الحصول على مساواة بين عددين كسريين.

لذلك سنستخدم في مسألتنا العلاقة (1) فقط، ولن يقبل أي حل يستخدم العلاقة (2).

ملاحظات:

1- تُستخدَم أسماء المتحولات كما هو وارد في نص المسألة

2- يلتزم الجميع بالخوارزمية الواردة في نص المسألة ( حلقتان متداخلتان)

3- يمنع استخدام بنى التحكم أو بنى المعطيات غير المعطاة في الدروس السابقة: لا تستخدم (for,switch) و لا بنية الجداول array.

----------------------------

وشكرا جزيلا لكم سلفا

#2

أين محاولتك اخى الكريم؟

حيث ان موضوعك مخالف

ذلك لمخالفته قوانين المشاركات، فقرة طلب حل الواجبات والتمارين.

قواعد طرح المشاركات

/index.php?showtopic=29343

Software Developer
Mahmoudkelany.com


 

#3

أخي الكريم

أولا شكرا لك على ردك

ويشرفني ذلك

وأعتذر كثيرا عن الخطأ الذي حدث معي

فأنا كنت أقصد بنشري للموضوع هو طلب فكرة الحل بشكل واضح والمساعدة فيها

أما عم محاولتي فقد ارفقتها لكم

وشكرا جزيلا سلفا

java.zip

تم تعديل هذه المشاركة بواسطة bahaa87 في 3 أكتوبر 2010 في 02:08

#4

حاول مره اخرى اخى الكريم

كودك لا يعمل

وكمان مفيش فيه حاجه يعنى دى مش محاوله لحاجه

اتمنى ان يساعدك احد يفهم مطلوبك اكثر

بالتوفيق

Software Developer
Mahmoudkelany.com


 

#5

جرب هذا واتمنى ان تستفيد منه,,

	public static void main (String[] args) {
		int max;
		String maxString = JOptionPane.showInputDialog("Enter the number");
		max = Integer.parseInt(maxString);
		int a=1;
		int b=1;

		String tabs="\t";
		System.out.print("a"+tabs);
		System.out.print("b"+tabs);
		System.out.print("c"+tabs);
		System.out.print("a*a"+tabs);
		System.out.print("b*b"+tabs);
		System.out.print("c*c");
		System.out.println("\n--------------------------------------------");

		while (a <= max){
			b=1;
			while (b <= max) {
				int a2=a*a;
				int b2=b*b;
				double fc= Math.sqrt( (a2) + (b2) );
				double eps=0.00000001;

				int fc2=(int)(fc*fc);

				if(Math.abs( (fc - Math.floor(fc)) ) < eps ){
					System.out.print(a+tabs);
					System.out.print(b+tabs);
					System.out.print(fc+tabs);
					System.out.print(a2+tabs);
					System.out.print(b2+tabs);
					System.out.print(fc2+"\n");
				}

				++b;
			}
			++a;
		}							
	}

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

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

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

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

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