注册 登录
编程论坛 C++教室

这个程序哪的错呢,实在找不出(目的可求N组三角形面积)

梦想天奇 发布于 2011-09-28 18:14, 752 次点击
请高手指点,谢谢啦!
代码如下:
#include <iostream>
#include <math.h>
#include <stdio.h>

using namespace std;

int main()
{
   double a[10000],b[10000],c[10000]; //三角形三边长
   int x1[10000],y1[10000],x2[10000],y2[10000],x3[10000],y3[10000];  //三角形三点坐标
   double p,s;  //s 三角形面积

  double godistance(int x1,int y1,int x2,int y2);

   int n;
   //cin>>n;

  // cout<<"请分别输入三定点的坐标:";
   for (int i=0;i<10000;i++)
   {
     cin>>x1[i]>>y1[i]>>x2[i]>>y2[i]>>x3[i]>>y3[i];
     n++;
     if(((x1[i]==x2[i])&&(y1[i]==y2[i]))||((x1[i]==x3[i])&&(y1[i]==y3[i]))||((x3[i]==x2[i])&&(y3[i]==y2[i]))) break;
     //x1[i]==0)&&(x2[i]==0)&&(x3[i]==0)&&(y1[i]==0)&&(y2[i]==0)&&(y3[i]==0
   }

     for(i=0;i<n-1;i++)
    {
     a[i]=godistance(x1[i],y1[i],x2[i],y2[i]);
     b[i]=godistance(x2[i],y2[i],x3[i],y3[i]);
     c[i]=godistance(x1[i],y1[i],x3[i],y3[i]);

     p=(a[i]+b[i]+c[i])/2;

     s=sqrt(p*(p-a[i])*(p-b[i])*(p-c[i]));

     printf("%0.1f\n",s);
    }

   return 0;
}

double godistance(int x1,int y1,int x2,int y2)
{
    double d;
    d=sqrt((x1-x2)*(x1-x2)-(y1-y2)*(y1-y2));
    return d;
}
5 回复
#2
czsbc2011-09-28 21:03
以前见过的一个求面积的公式。希望对你有用。
程序代码:
#include <stdio.h>
#include <math.h>

int main()
{
    int x1,y1,x2,y2,x3,y3;
    double s;
    printf("input six integer for three points:\n");
    scanf("%d,%d%d,%d%d,%d",&x1,&y1,&x2,&y2,&x3,&y3);
    s=fabs((x1*y2+x2*y3+x3*y1-x1*y3-x3*y2-x2*y1)/2.0);
    printf("The area of this triangle is %.1lf\n",s);
    return 0;
}



 
#3
lkz1987n2011-09-29 00:25
程序代码:
for(i=0;i<n-1;i++)
    {
     a[i]=godistance(x1[i],y1[i],x2[i],y2[i]);
     b[i]=godistance(x2[i],y2[i],x3[i],y3[i]);
     c[i]=godistance(x1[i],y1[i],x3[i],y3[i]);

     p=(a[i]+b[i]+c[i])/2;

     s=sqrt(p*(p-a[i])*(p-b[i])*(p-c[i]));

     printf("%0.1f\n",s);
    }

for(int i=0;我看到这里的i没有声明,无法辨识的标识符,要加上int。你上次声明是局部的,到这里使用还要声明下。
#4
succubus2011-09-30 01:49
一看就是用vc++ 6.0写的代码
#5
我是菜鸟哦2011-09-30 16:13
你的n没有初始化
#6
guilin08222011-10-01 02:48
double godistance(int x1,int y1,int x2,int y2)
{
    double d;
    d=sqrt((x1-x2)*(x1-x2)-(y1-y2)*(y1-y2));
    return d;
}
错了,其中的“d=sqrt((x1-x2)*(x1-x2)-(y1-y2)*(y1-y2));”改成“d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));”

另外,此算法可以简化些,目前你这个算法的确能算很多个。但是,你的输入部分要输9999或者要输相同点才结束。这样一来,出结果慢,也不容易找相印结果,同时,如果不是要算9999个,那么就还要在原来的基础上多输一次有相相同点的性况。本人认为,数组也不用定义10000那么大,定义成变量就可以。只不过。在所有程序中加个do……while循环就可以。

[ 本帖最后由 guilin0822 于 2011-10-1 03:16 编辑 ]
1