三角形C ++边计算

我一直在此源代码,但似​​乎没有去的权利。 修改后的源代码将非常感激,或至少是视觉解决方案,以我的错误。

这里是存在以下问题:写一个程序,读取要三角形三个边缘,并且确定该输入是否是有效的。 输入是有效的,如果任何两个边缘的总和大于第三边缘。 以下是本示例程序的运行:输入三个边1,2.5,1 [Enter]键边缘1,2.5和1形成的三角形? 假

以下是我迄今为止的源代码“:

#include <iostream> using namespace std; bool Valid (int tri_a, int tri_b, int tri_c); bool triangle; int main () { int a; int b; int c; cout << "Enter three edges: "; double edge1, edge2, edge3; cin >> edge1 >> edge2 >> edge3; bool isValid = (edge1 + edge2 > edge3) && (edge1 + edge3 > edge2) && (edge3 + edge2 > edge1); cout << " Enter the 1st value: "; cin >> a; cout << " Enter the 2nd value: "; cin >> b; cout << " Enter the 3rd value: "; cin >> c; bool triangle = Valid (a, b, c); { if (triangle == true) cout << "valid" << endl; else cout << "invalid" << endl; } system ("pause"); return 0; }

--------------解决方案-------------

编辑 :这些问题的答案在这里评论开始听起来很疯狂。 正如我所说,在一个三角形,每两个边缘之和必须大于第三1+1>sqrt(2) 1+sqrt(2)>1 sqrt(2)+1>1例如为90度的三角形具有两个1长度的边缘。 逻辑isValid是好的。

这里是从维基百科的文章报价:

三角形的任何两个边的长度的总和,他总是超过第三边的长度,称为三角不等式一个原则。 因为一个三角形的顶点被假定为不共线的,因此不可能有两个边的长度的总和等于所述第三边的长度。


嗯,你没有定义的有效方法。 另外,为什么你在看3个值在一起,然后三个值一个接一个?

这里有一个快速解决方案,看看它是否工作(没有测试过):

#include <iostream>
using namespace std;

int main () {
cout << "Enter three edges: ";
double edge1, edge2, edge3;
cin >> edge1 >> edge2 >> edge3;

bool isValid = (edge1 + edge2 > edge3) &&
(edge1 + edge3 > edge2) && (edge3 + edge2 > edge1);

if (isValid)
cout << "valid" << endl;
else
cout << "invalid" << endl;

system ("pause"); //not sure if this is right, so I left it here.
return 0;
}

阿米尔Rachum提出的解决方案是一个很好的教科书的解决方案。 然而,它有三个实际问题:

  1. 它不验证输入(3个正数字)
  2. 如果(edgeX + edgeY> edgeZ)可能导致溢出。 一个更好的检查将是如果(edgeX> edgeZ-edgeY)(核实该号码正后)。
  3. 如果输入边缘是不同尺度,它可以返回false代替真。 例如:1,1e300,1e300。

这是我的建议解决方案:

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main ()
{
cout << "Enter three edges: ";

string edges;
getline (cin, edges);

stringstream sstream;
sstream << edges.c_str();

double edge1= 0., edge2= 0., edge3= 0.;
string extra= "";
sstream >> edge1 >> edge2 >> edge3 >> extra;

if (edge1>0. && edge2>0. && edge3>0. && extra=="")
{
// eg 1e300-1 == 1e300
bool bValid1= (edge3-edge2 == edge3) ? edge1>=edge3 : edge1 > edge3 - edge2;
bool bValid2= (edge2-edge3 == edge2) ? edge1>=edge2 : edge1 > edge2 - edge3;
bool bValid3= (edge1-edge2 == edge1) ? edge3>=edge1 : edge3 > edge1 - edge2;

bool isValid= bValid1 && bValid2 && bValid3;

if (isValid)
cout << "valid" << endl;
else
cout << "invalid" << endl;
}
else
cout << "invalid input" << endl;

system ("pause");
return 0;
}

分类:C# 时间:2012-01-01 人气:0
本文关键词: C#
分享到:

相关文章

  • 在C#中扩展枚举 2012-01-01

    我想知道我是否可以延长枚举类型在C#来实现我的自定义Enum.GetValues​​(型),并调用它像Enum.GetMyCustomValues​​(类型) 我想实现这样的事情: public static bool IsFlagSet<T>(this T value, T flag) where T : Enum { return (value & flag) != (T)0; } 但它不能这样做......任何变通我能做什么? 干杯 --------------解决方案-----

  • PHP客户端和C#服务器 - 不沟通,由于超时 2012-01-01

    我是相当新的Socket编程,但这里不用什么. 我一直试图做一个C#服务器和PHP客户端之间的一些简单的TCP通信. 不过,我曾在让他们之间的连接没有运气. 我基本上经由PHP socket通信的Web浏览器发送一个桌面应用程序的消息. 不过,我不断收到超时错误. 我的代码如下: 我的C#代码服务器-它只是简单地聆听,并通知我,如果建立连接 static void Main(string[] args) { try { IPAddress localAddress = IPAddress.Par

  • C#如何获得元素的宽度 2012-01-01

    有没有一种方法,我可以做jQuery的的equivilant var myElementWidth = $('.class').width; 在C#和存储它作为一个变量,以备后用. 任何指针将受到欢迎. --------------解决方案------------- 正如一些评论指向,如果位置和大小的客户端,C#情况,服务器端代码永远不会知道一些特定元素的实际尺寸和位置. 但是,如果这是宽为Web应用程序非常重要,也许你可以设置客户端呈现一些异步操作页面只是在此之后的价值. 我要说的是,这样做的

  • 如何关闭*多显示*在C#? 2012-01-01

    有关于"如何关闭监视器在C#"的文章很多,但他们都关掉所有的监视器. 有没有关闭特定监视器任何可能的方式? --------------解决方案------------- 研究一点点导致我在这里: http://www.codeguru.com/forum/showthread.php?p=1011720#post1011720 你知道如何调用一个函数一样,在C#中? - 编辑 貌似这家伙所做的这一切为你: http://www.codeproject.com/KB/dotnet/Di

  • 如何包装无的WinForms的DataGridViewTextBoxCell(C#),空格或换行符长文本? 2012-01-01

    如何包装无空格或换行符长文本DataGridViewTextBoxCell的WinForms的(C#)? private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if ((e.ColumnIndex == 1) && (e.FormattedValue != null)) { SizeF sizeGraph = e.Graphics.MeasureString

  • 基于常数值强制C#编译器错误 2012-01-01

    我有一个C#类中定义的私有const int的. 我想编译失败与错误,如果这个INT模3的值!= 0,我怎样才能做到这一点? --------------解决方案------------- 蒂莫西·扈利几乎得到了它. 它应该是这样的: int compilerError = 1 / (MY_CONST % 3 == 0 ? 1 : 0); 虽然产生编译时错误的#ERROR预处理器指令,也没有办法为它基于对一个const值的存在. 只带编译符号的作品,如"DEBUG",为它的值不能进行分

  • 用C#模仿批处理文件 2012-01-01

    我有一个运行四个命令的批处理文件 vsinstr -coverage hello.exe vsperfcmd /start:coverage /output:run.coverage hello vsperfcmd /shutdown 如何使用C#来运行四个命令? --------------解决方案------------- 运行使用的Process.Start的命令. 例 使用覆盖Process.Start(string fileName, string arguments) Process

  • 无法在F#扩展运营商? 2012-01-01

    module FSharp= let Point2d (x,y)= Point2d(x,y) let Point3d (x,y,z)= Point3d(x,y,z) type NXOpen.Point3d with static member ( * ) (p:Point3d,t:float)= Point3d(pX*t,pY*t,pZ*t) static member ( * ) (t:float,p:Point3d)= Point3d(pX*t,pY*t,pZ*t) static membe

  • 如何通过C#中添加自定义的控制,我们的表格 2012-01-01

    我使用Visual Studio 2008(WPF / C#). 我创建了一个自定义的控制,并将其添加为我的项目的引用. 现在我想动态添加通过代码背后(C#),即自定义控件. 任何人都帮我出的这些. --------------解决方案------------- 这是,你可以通过一些谷歌上搜索发现动辄基本的东西. 不管怎么说参考http://arcanecode.com/2007/09/07/adding-wpf-controls-progrrammatically/这link..it 5可以帮

  • 什么办法让一个BITMAPV5HEADER在C#中的位图对象 2012-01-01

    有没有什么办法让一个BITMAPV5HEADER在C#中的位图对象? 或者只是得到了在他们的价值观? 我需要得到一些ColorSpace中的信息进行位图,并不能看到一个办法做到这一点在C#. --------------解决方案------------- 似乎没有成为一个简单的方法来做到这一点,但hackish的(也可能是非常错误的)方法是将读取原始数据,并将其转换为一个BITMAPV5HEADER结构. 结构体 [StructLayout(LayoutKind.Sequential)] pub

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.314 (s). 10 q(s)