关于确定三角形的C ++程序

时间:2011-06-26 21:33:30

标签: c++ code-generation

我需要以下代码帮助我:

  • 声明3个double类型变量,每个变量代表三角形的三个边之一。

  • 提示用户输入第一面的值,然后

  • 将用户输入设置为您创建的表示三角形第一面的变量。

  • 再重复最后两个步骤,对三角形的剩余两边各执行一次。

  • 使用一系列嵌套的if / else语句来确定用户设置的具有边长的三角形是否为EQUILATERAL,ISOSCELES或SCALENE三角形。 [注意:请查看“三角形”上的维基百科页面,了解这三种三角形的定义。]

  • 将生成的三角形类型打印到控制台。

  • 确保三角探测器的运行方式为5次,如上例所示。您可以使用与示例中相同的值。

我目前有:

//lab eleven program code on triangles
#include <iostream.h>

main()
{
    //variables
    float aside, bside, cside;
    //enter side a
    cout<<"enter the length of side a "<<endl;
    cin>>aside;
    //enter side b
    cout<<"enter the length of side b "<<endl;
    cin>>bside;     
    //enter side c
    cout<<"enter the length of side c "<<endl;
    cin>>cside;

// all sides equal
if(aside==bside && bside==cside)                 
   cout << "Equilateral triangle\n";

// at least 2 sides equal
else if(aside==bside || aside==cside || bside==cside)   

   cout << "Isosceles triangle\n";
// no sides equal
else                                
   cout << "Scalene triangle\n";            
}

但我需要ifelse if语句的帮助来确定类型三角形。我们的教授在课堂上没有涉及这个主题。

我们在Windows上使用程序Ch 6.3。

6 个答案:

答案 0 :(得分:2)

if(a==b && b==c)                    // all sides equal
   cout << "Equilateral triangle\n";
else if(a==b || a==c || b==c)       // at least 2 sides equal
   cout << "Isosceles triangle\n";
else                                // no sides equal
   cout << "Scalene triangle\n";

答案 1 :(得分:2)

正如你的教授建议的那样,你应该看看:

http://en.wikipedia.org/wiki/Triangle#Types_of_triangles

您还应该看看:

http://www.teacherschoice.com.au/maths_library/trigonometry/solve_trig_sss.htm

算法:

Solve for all angles, a1, a2, a3 (see the article above)
If you can't find a solution:
    Output "Error: Not a valid triangle"
Else:
    If (a1 == a2) && (a2 == a3):
        Output "EQUILATERAL" and stop
    If (a1 == a2) || (a2 == a3) || (a1 == a3):
        Output "ISOSCELES" and stop
    Output "SCALENE" and stop

另请注意:请注意浮点(float / double)值(例如角度)的“相等性”。如果你正在做这样的比较,你通常应该使用它:

abs(x - y) < epsilon

epsilon是“足够小的值”。

答案 2 :(得分:2)

逻辑完全不同于这些不同类型的三角形的定义,正如教授指出的那样,这些信息很容易从维基百科中获得。它只涉及边长的简单比较;你不必走远角。但我会给你一些“非三角”条件的帮助。不要害怕在这里戴上你的数学帽而去徘徊,对于一个poli sci学生来说,一点点逻辑并不是一件坏事。 : - )

对于双方制作一个正确的三角形,对于每一对(我称之为fg),它们必须加起来大于第三方的长度(我'将其称为h)。如果你正在处理等边三角形,你会自动知道这个条件是否满足(为什么?)。如果你正在处理等腰或斜角三角形,你在技术上只需要检查较小的两边与最大的一边,如果对它们是正确的,那么对于其他两种情况也是如此(为什么?)。但是,检查所有三种情况可能同样方便。

看看为什么这个不平等必须成立:如果双方的总和完全等于第三方的长度,你就会有一个“退化”三角形,其中边fg可以只在h之上!如果他们加起来更少,双方可以连接到h的端点,但在第三点永远不会见面!您可以通过剪切长度的纸条或试纸来自行测试。

要考虑的其他三件事:

  1. 在C ++中,doublefloat不是一回事。一个的精度低于另一个。确保你使用教授要求的那个。
  2. 检查以确保两侧是非负的是一个好主意。你也可以合理地排除0的长度,以消除看起来像线段或点的退化三角形的可能性。
  3. 在比较浮点数时,您应该始终小心考虑严格的相等是否能够满足您的需求。为了检查等边/等腰/斜角度条件,你很好,因为用户直接输入浮点数并且你没有操纵它们,因此你没有机会引入错误。但是当检查“非三角形”条件时,设置一种情况相对容易,在这种情况下,将两边加起来(因为CPU中的浮点算术的变化)会变得非常接近,但不是很接近确切地说,第三方。在这些情况下,如果你想捕捉退化三角形,你通常做的是选择一个“epsilon”值(相对于你正在处理的数字的一些非常小的值),它代表你愿意的最大舍入量。容忍。然后,检查fg之和是否介于h - epsilonh + epsilon之间 - 或换句话说,无论绝对值是多少f + g - h小于或等于epsilon。如果是,您声称f + g = h(尽可能最好)并处理退化案例。

答案 3 :(得分:1)

要完成此计划,您需要具备以下条件:

确保输入有效。在这种情况下,输入必须大于0.您可以使用类似

的循环捕获输入
    while (invar <= 0)
    {
        cout<<"Enter length"<<endl;
        cin>>invar;
        if (invar <= 0)
        {
            cout<<"invalid input"<<endl;
        }
    }

我不确定这是否是正确的c ++语法,我在大约8年内没有使用它。 你可以为所有3个输入执行此操作。我可能会使用3个输入变量和1个返回变量来确定三角形的函数。以下是伪代码

if (a + b <= c) or (a + c <= b) or (b + c <= a)
{
 return "you don't have a triangle."
}
else
{
 if (a == b) or (a == c) or (b == c)
 {
  if (a == b and b == c)
  {
   return "equilateral"
  }
  return "isosceles"
 }
 return "scalene"
}

return -1

答案 4 :(得分:0)

#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<math.h>

int main()
{
float Side1,Side2,Side3;
float Flag1,Flag2,Sum_of_sq1,Sum_of_sq2,Sum_of_sq3;
clrscr();
printf("Enter Three Sides Side1 Side2 Side3 :");
scanf("%f %f %f", &Side1 , &Side2 , &Side3);
Flag1=(Side1==Side2)?(Side2==Side3?1:0):((Side2==Side3)?0:-1);
if(Flag1==0)
  { printf("Triangle is Isoceles\n");
    }
     if (Flag1==1)
      {  printf("Equilateral Triangle");
     }


          Sum_of_sq1=pow(Side1,2)+pow(Side2,2);
          Sum_of_sq2=pow(Side1,2)+pow(Side3,2);
          Sum_of_sq3=pow(Side2,2)+pow(Side3,2);
if (sqrt(Sum_of_sq1)==Side3 ||sqrt(Sum_of_sq2)==Side2 || sqrt(Sum_of_sq3)==Side1)
             printf("The Triangle is Right Angled Triangle");



     getch();
     return(0);

 }

答案 5 :(得分:0)

#include<iostream>
using namespace std;

//create a class
class Triangle {
   //declare three sides for the triangle
   double side1;
   double side2;
   double side3;

public:
//constructor to initialize the data members
Triangle(double s1, double s2, double s3) {
    side1 = s1;
    side2 = s2;
    side3 = s3;
}

void triangleType() {
    //all sides equal
    if((side1 == side2)&&(side2 == side3))
        cout << "It is an Equilateral Triangle" << endl;

    //at least two sides are equal
    else if((side1 == side2) || (side2 == side3) || (side1 == side3))
        cout << "It is an Isosceles Triangle" << endl;

    //all are different
    else
        cout << "It is a Scalene Triangle" << endl;
}
};

int main() {
//local variable
double a_side, b_side, c_side;

//taking the user inputs
cout << "Enter the three sides of a triangle: " << endl;
cin >> a_side >> b_side >> c_side;

Triangle t1(a_side, b_side, c_side); //create an object of Triangle

t1.triangleType(); //call the function

return 0;
}