我将有一个以下列方式组成的数据文件。
第一行将是文件中的行数[N]
下一行和每个连续行将具有三个值。
如果值为>0
,则该订单项为三角形。
如果值为二和三的是<0
,那么该订单项就是一个圆圈。
如果只有值3是<0
,那么该订单项就是一个矩形。
我可以编写算法来操作这些项目,一旦我将它们分成圆圈, 矩形和三角形,但问题是我不知道该怎么做。
这是我到目前为止编写的代码。
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
// MAIN
int main(void)
{
int N=0;
ifstream Hinfo;
// ........................................................
Hinfo.open("Holes");
if (Hinfo.fail())
{
cerr << "Error: open input file error" << endl;
exit(-1);
}
else
cout << "Success: input files opened" << endl;
// ........................................................
Hinfo >> N;
float A[N];
float B[N];
float C[N];
float Rec[];
float Cir[];
float Tri[];
// ........................................................
for(int i=0; i<N; i++)
Hinfo >> A[i] >> B[i] >> C[i];
Hinfo.close();
}
我真的不知道接下来要做什么,或者到目前为止我做的是正确的路径 采取。
接下来我想到这就找到了矩形,三角形和圆形。
for (i=0; i<N; i++)
{
if (C[i] < 0)
{
if (B[i] < 0)
A[i] >> B[i] >> C[i] >> Circle[];
else
A[i] >> B[i] >> C[i] >> Rectangle[];
}
else
A[i] >> B[i] >> C[i] >> Triangle[];
}
我可以这样做吗?请帮助,我很难管理所有这些阵列。有没有更简单的方法将所有这些数据分成三角形,圆形和矩形数组?请记住,我是初学者,如此复杂或高级的语法会让我感到困惑 脆弱的n00b心灵
谢谢,卢克。
答案 0 :(得分:0)
执行此操作的一种简单方法是使用三个数组,以及一个存储表示类型的整数的额外类型数组。(注意,您应该使用类型的枚举,但常量也可以使用)
这样,您不需要为三种形状中的每种形状分别使用单独的数组。
float A[N];
float B[N];
float C[N];
int type[N];
const int Triangle = 0;
const int Circle = 1;
const int Rectangle = 2;
然后你可以循环找到类型
for (i=0; i<N; i++)
{
if (C[i] < 0)
{
if (B[i] < 0)
type[i] = Circle;
else
type[i] = Rectangle;
}
else
type[i] = Triangle;
}
然后你可以再次遍历数组:
for (i=0; i<N; i++)
{
if (type[i] == Triangle)
{
// I am a triangle;
}
else if ...
}
当然你甚至不需要第二次循环,但如果你的老师想要它,这将是一种方法。
答案 1 :(得分:0)
我会做的是写一个结构来保存单个数据条目,可能是这样的:
const int TRIANGLE = 1;
const int CIRCLE = 2;
const int RECTANGLE = 3;
struct Entry
{
float points[3];
int type;
};
这样,每次读取一行值时,都可以将它们放入新的Entry中并相应地设置类型。然后,您只需要一个数组或向量来保存条目。或者,您可以为每个条目类型创建一个数组/向量。
std::vector<Entry> Entries;
for(int i=0; i<N; i++)
{
Entry e;
Hinfo >> e.points[0] >> e.points[1] >> e.points[2];
if( e.points[2] > 0 )
e.type = TRIANGLE;
else if( e.points[2]<0 && e.points[1]<0)
e.type = CIRCLE;
else if( e.points[2]<0 && e.points[1]>=0 && e.points[0]>=0)
e.type = RECTANGLE;
Entries.push_back(e);
}
这些方面应该做的事情。