Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C ตรวจสอบประเภทสามเหลี่ยม (Equilateral, Isosceles, Scalene)

จัดประเภทสามเหลี่ยมจากความยาว 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