จัดประเภทสามเหลี่ยมจากความยาว 3 ด้าน:
- Equilateral (สมด้าน) - 3 ด้านเท่ากัน
- Isosceles (สมฐาน) - 2 ด้านเท่ากัน
- Scalene (ไม่สมมาตร) - 3 ด้านต่างกันหมด
อัลกอริทึม
if(side1 == side2 && side2 == side3)
→ Equilateral
else if(side1 == side2 || side2 == side3 || side3 == side1)
→ Isosceles
else
→ Scalene
ตัวอย่างโปรแกรม
#include <stdio.h>
int main() {
int side1, side2, side3;
printf("Enter three sides of triangle: ");
scanf("%d %d %d", &side1, &side2, &side3);
// ตรวจสอบ Triangle Inequality Theorem
if(side1 + side2 <= side3 ||
side2 + side3 <= side1 ||
side3 + side1 <= side2) {
printf("Invalid triangle sides!\n");
return 1;
}
if(side1 == side2 && side2 == side3)
printf("Equilateral Triangle (สมด้าน)\n");
else if(side1 == side2 || side2 == side3 || side3 == side1)
printf("Isosceles Triangle (สมฐาน)\n");
else
printf("Scalene Triangle (ไม่สมมาตร)\n");
return 0;
}
ผลลัพธ์
Run 1: Enter three sides: 3 4 6 Scalene Triangle (ไม่สมมาตร) Run 2: Enter three sides: 2 2 5 Invalid triangle sides! (2+2 ≯ 5) Run 3: Enter three sides: 5 5 5 Equilateral Triangle (สมด้าน) Run 4: Enter three sides: 5 5 8 Isosceles Triangle (สมฐาน)
ขยายความ: Triangle Inequality Theorem
เงื่อนไขเป็นสามเหลี่ยมได้: ผลรวม 2 ด้านใดๆ > ด้านที่ 3
- a + b > c
- b + c > a
- c + a > b
ขยาย: จัดประเภทตามมุม (Angle Classification)
// ใช้ Pythagorean Theorem
// c = ด้านยาวที่สุด
if(a*a + b*b == c*c) → Right Triangle (มุมฉาก)
else if(a*a + b*b > c*c) → Acute Triangle (มุม銳)
else → Obtuse Triangle (มุมทอง)
โปรแกรมรวม: จัดประเภททั้ง ด้าน และ มุม
#include <stdio.h>
#include <stdlib.h>
void sortSides(int *a, int *b, int *c) {
// เรียง a <= b <= c
if(*a > *b) { int t=*a; *a=*b; *b=t; }
if(*b > *c) { int t=*b; *b=*c; *c=t; }
if(*a > *b) { int t=*a; *a=*b; *b=t; }
}
int main() {
int a, b, c;
printf("Enter three sides: ");
scanf("%d %d %d", &a, &b, &c);
if(a <= 0 || b <= 0 || c <= 0) {
printf("Sides must be positive\n");
return 1;
}
sortSides(&a, &b, &c); // a <= b <= c
if(a + b <= c) {
printf("Invalid triangle\n");
return 1;
}
// By Sides
if(a == b && b == c)
printf("Type by sides: Equilateral\n");
else if(a == b || b == c)
printf("Type by sides: Isosceles\n");
else
printf("Type by sides: Scalene\n");
// By Angles
long sq_a = a*a, sq_b = b*b, sq_c = c*c;
if(sq_a + sq_b == sq_c)
printf("Type by angles: Right Triangle\n");
else if(sq_a + sq_b > sq_c)
printf("Type by angles: Acute Triangle\n");
else
printf("Type by angles: Obtuse Triangle\n");
return 0;
}
ผลลัพธ์
Enter three sides: 3 4 5 Type by sides: Scalene Type by angles: Right Triangle Enter three sides: 5 5 5 Type by sides: Equilateral Type by angles: Acute Triangle