إيجاد مساحة المثلث

من موسوعة حسوب
مراجعة 10:54، 26 أكتوبر 2019 بواسطة Mohammed Taher (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

تحسب هذه الخوارزمية مساحة المثلث، وهناك طرق عديدة لحساب المساحة منها:

إيجاد المساحة باستخدام الأضلع المعطاة

مثال:

Input : a = 5, b = 7, c = 8
Output : Area of a triangle is 17.320508


Input : a = 3, b = 4, c = 5
Output : Area of a triangle is 6.000000

يمكن حساب مساحة المثلث باستخدام العلاقة الرياضية التالية:

Area = sqrt(s*(s-a)*(s-b)*(s-c))

تمثل a و b و c أطوال أضلاع المثلث، وs = (a+b+c)/2.

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

  • C++‎:
#include <bits/stdc++.h> 
using namespace std; 

float findArea(float a, float b, float c) 
{ 
	// يجب أن تكون أطوال الأضلاع قيمًا موجبة
	// ويجب أن يكون مجموع طولي أيّ ضلعين أقل من طول الضلع الثالث
	if (a < 0 || b < 0 || c < 0 || 
	(a + b <= c) || a + c <= b || 
					b + c <= a) 
	{ 
		cout << "Not a valid trianglen"; 
		exit(0); 
	} 
	float s = (a + b + c) / 2; 
	return sqrt(s * (s - a) * 
					(s - b) * (s - c)); 
} 

// اختبار الدالة السابقة
int main() 
{ 
	float a = 3.0; 
	float b = 4.0; 
	float c = 5.0; 

	cout << "Area is " << findArea(a, b, c); 
	return 0; 
}
  • بايثون:
# يجب أن تكون أطوال الأضلاع قيمًا موجبة
# ويجب أن يكون مجموع طولي أيّ ضلعين أقل من طول الضلع الثالث
def findArea(a,b,c): 

	if (a < 0 or b < 0 or c < 0 or (a+b <= c) or (a+c <=b) or (b+c <=a) ): 
		print('Not a valid trianglen') 
		return
		
	# حساب نصف المحيط
	s = (a + b + c) / 2
	
	# حساب المساحة
	area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
	print('Area of a traingle is %f' %area) 


# الضلع الأول
a = 3.0
# الضلع الثاني
b = 4.0
# الضلع الثالث
c = 5.0
findArea(a,b,c)
  • جافا:
class Test 
{ 
	static float findArea(float a, float b, float c) 
	{ 
		// يجب أن تكون أطوال الأضلاع قيمًا موجبة
		// ويجب أن يكون مجموع طولي أيّ ضلعين أقل من طول الضلع الثالث 
		if (a < 0 || b < 0 || c <0 || (a+b <= c) || 
			a+c <=b || b+c <=a) 
		{ 
			System.out.println("Not a valid triangle"); 
			System.exit(0); 
		} 
		float s = (a+b+c)/2; 
		return (float)Math.sqrt(s*(s-a)*(s-b)*(s-c)); 
	} 
		
	// اختبار التابع السابق
	public static void main(String[] args) 
	{ 
		float a = 3.0f; 
		float b = 4.0f; 
		float c = 5.0f; 
	
		System.out.println("Area is " + findArea(a, b, c)); 
	} 
}

إيجاد المساحة بواسطة الإحداثيات

إن كانت إحداثيات أركان المثلث متوفّرة، فيمكن تطبيق العلاقة التالية (علاقة رباط الحذاء Shoelace formula) لحساب المساحة:

A = | 1/2 [ (x1y2 + x2y3 + ... + xn-1yn + xny1) - (x2y1 + x3y2 + ... + xnyn-1 + x1yn) ]

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

  • C++‎:
#include <bits/stdc++.h> 
using namespace std; 

// إحداثيات النقطة i ممثلّة بواسطة ([X[i], Y[i])
double polygonArea(double X[], double Y[], int n) 
{ 
	// تهيئة قيمة المساحة 
	double area = 0.0; 

	// حساب قيمة علاقة رباط الحذاء
	int j = n - 1; 
	for (int i = 0; i < n; i++) 
	{ 
		area += (X[j] + X[i]) * (Y[j] - Y[i]); 
		j = i; // j هو الرأس السابق للمتغير i
	} 

	// تعيد الدالة قيمة مطلقة
	return abs(area / 2.0); 
} 

// اختبار الدالة السابقة
int main() 
{ 
	double X[] = {0, 2, 4}; 
	double Y[] = {1, 3, 7}; 

	int n = sizeof(X)/sizeof(X[0]); 

	cout << polygonArea(X, Y, n); 
}
  • بايثون:
# إحداثيات النقطة i ممثلّة بواسطة ([X[i], Y[i]) 
def polygonArea(X,Y, n) : 

	# تهيئة قيمة المساحة 
	area = 0.0
	
	# حساب قيمة علاقة رباط الحذاء 
	j = n - 1
	for i in range( 0, n) : 
		area = area + (X[j] + X[i]) * (Y[j] - Y[i]) 
		j = i # j هو الرأس السابق للمتغير i 
	
	
	# تعيد الدالة قيمة مطلقة
	return abs(area // 2.0) 

	
# اختبار الدالة السابقة
X = [0, 2, 4] 
Y = [1, 3, 7] 

n = len(X) 
print(polygonArea(X, Y, n))
  • جافا:
import java.io.*; 
import java.math.*; 

class GFG { 

	// إحداثيات النقطة i ممثلّة بواسطة ([X[i], Y[i]) 
	static double polygonArea(double X[], double Y[], int n) 
	{ 
		// تهيئة قيمة المساحة 
		double area = 0.0; 
	
		// حساب قيمة علاقة رباط الحذاء 
		int j = n - 1; 
		for (int i = 0; i < n; i++) 
		{ 
			area += (X[j] + X[i]) * (Y[j] - Y[i]); 
			
			// j هو الرأس السابق للمتغير i 
			j = i; 
		} 
	
		// تعيد الدالة قيمة مطلقة
		return Math.abs(area / 2.0); 
	} 
	
	// اختبار التابع السابق
	public static void main (String[] args) 
	{ 
		double X[] = {0, 2, 4}; 
		double Y[] = {1, 3, 7}; 

		int n = X.length; 
		System.out.println(polygonArea(X, Y, n)); 
	} 
}

مصادر