【问题标题】:Coordinate system with an Ordinate and Abscissa具有纵坐标和横坐标的坐标系
【发布时间】:2017-02-12 10:39:22
【问题描述】:

我目前在为坐标系编写代码时遇到问题。 在我正在做的练习中,我想创建一个带有纵坐标/横坐标和定义的字母(例如点 A)的坐标系 我必须输入 25 个点的信息,并且它必须控制所有具有相同字母的点。它们应该在一个以 (0;0) 坐标开头的圆圈中。如果给出的关于 25 个点的信息不满足设定的条件,则选定的点必须有新的重新输入的信息才能满足条件,而不改变先前点的给定值(符合预期)。它还应该包含具有 2 个正坐标的点的所有信息 这是我制作的代码。如果有人帮助我,我将非常感激。

#include <iostream>
#include <cmath>
#include <stdio.h>

using namespace std;

int main(){
    int dotX[23];//tri masiva
    int dotY[23];
    char dotName[23];
    for (int i = 0; i<23; i++){// Cikal za vavejdane na masivite
        cout << "Abscisa \t" << i + 1 << endl;
        cin >> dotX[i];
        cout << "Ordinata \t" << i + 1 << endl;
        cin >> dotY[i];
        cout << "Ime na tochkata" << endl;
        cin >> dotName[i];

        if (i >= 1){//IF operatora i cikula za obhozhdane na masiva i presmqtane na   distanciite 
            bool flag = true;
            while (flag){
                double distance = sqrt(pow(dotY[i] - dotY[i - 1], 2) + pow(dotX[i] - dotX[i - 1], 2));//Formula za presmqtane na razstoqniqta
                if (distance <= 6)  {
                    char broi;
                    broi = broi++;
                    cout << "abscisa \t" << i + 1 << endl;
                    cin >> dotX[i];
                    cout << "ordinata \t" << i + 1 << endl;
                    cin >> dotY[i];
                }
                else{
                    flag = false;
                }
            }
        }
    }
    float i;
    for (float i = 0; i > 10, i++;){
        float(dotX < 10);
        cout << dotName[i] << endl;
    }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
  • @πάνταῥεῖ 我实际上尝试挖掘类似的东西,所以我可以帮助自己,但不幸的是我找不到它。我在发布之前搜索了帮助中心,但我没有找到任何关于我的坐标系问题的信息——只有如何创建一个。 ://
  • 您应该阅读如何提出一个好问题,以及您可以通过哪些方式改进您的问题。在那之后edit你的问题让它变得更好。
  • @КристианФиделовЧипчев 你能用图表分享你想要实现的目标吗?问题有点不清楚

标签: c++ system coordinate


【解决方案1】:

您的代码存在一些大问题。

首先,for (float i = 0; i &gt; 10, i++;) 的语法是完全错误的。它可以编译,但这只是一个巧合。 for 循环控制结构中的不同命令应该用分号 (;) 分隔,而不是逗号 (,)。正确的代码将是for (float i = 0; i &gt; 10; i++)。顺便说一句,你打错了,我想你的意思是for (float i = 0; i &lt; 10; i++)(否则for循环永远不会运行,因为i被初始化为0并且0 &gt; 10从一开始就是假的)。

其次,您将变量i 初始化两次:一次使用float i;,一次在for 循环中。那不应该编译,尽管在某些编译器中它可以编译。关于如何做有两种选择。第一种选择是在 for 循环之外声明变量,并在 for 循环中不初始化它而只分配它:

float i;
for(i = 0; i < 10; i++){
    //some stuff
}

第二种选择是在 for 循环中简单地声明它,就像在第一个循环中所做的那样:

for(float i = 0; i < 10; i++){
    //some stuff
}

您犯的另一个错误是将i 声明为float,然后尝试访问dotName[i]。无论您放在括号内的内容必须是 int 或类似的类型(unsigned intlong 等)。将float 变量放在这些括号内不会像那样编译。如果你想用float 索引一个数组,你需要告诉编译器你想把它转换成int,像这样:dotName[(int)i]dotName[int(i)]。这称为演员表。但是,在您的情况下,我建议您将 i 声明为 int

另外,float(dotX &lt; 10); 完全错误,我真的不明白你想在那里做什么。我认为您打算做float(dotX[i] &lt; 10);,但这仍然没有任何意义。您将在那里做的是将bool 转换为float,然后对结果不做任何事情。编译并且没有错,但完全没用。正如我所说,我不明白你想在那里做什么。

另外,broi = broi++; 是正确的但没用。 broi++; 就够了。 ++ 运算符将 broi 自身递增 1,然后返回结果。 ++ 操作符在内部所做的基本上是这样的:

int operator++(int &x){
    x = x + 1;
    return x;
}

所以它已经自动增加了变量,而您无需做任何事情。你所做的和这样做是一样的:

broi = broi + 1;
broi = broi;

这里,第一行代表++ 运算符,第二行代表= 运算符。很明显第二行没有用,所以你可以删除它。同样,在您的代码中,您可以删除broi =,只留下broi++;

您还做了一些不推荐的事情,但由于 C++ 标准支持它们,所以工作得很好。

首先,using namespace std; 是不好的做法。建议省略,在cincoutendl前面加上std::。如果您想知道为什么using namespace std; 是不好的做法,那么here 已得到很好的解释。但是,我必须承认我个人仍然使用using namespace std;,因为我认为它更简单。

其次,main函数应该返回0,所以建议在main函数的末尾加上return 0;main 函数的返回值告诉了程序关闭的原因。值 0 表示程序按预期关闭。任何其他值都意味着程序崩溃。 here 提供了每个返回值含义的完整列表。请注意,C++ 支持省略 return 0;,如果省略,大多数编译器会自动添加它,但仍然建议使用它。此外,C 不支持省略 return 0;,在 C 中它将返回内存中发生的任何内容,从而使程序在正常结束时看起来像崩溃了。

另外,#include &lt;stdio.h&gt; 是 C,虽然它可以在 C++ 中工作,但不建议这样做。在 C++ 中,最好使用#include &lt;cstdio&gt;。所有在 C 中以 .h 结尾的标准库都可以通过删除 .h 并在开头添加 c 在 C++ 中使用。 cmath 也是如此:在 C 中为 #include &lt;math.h&gt;,在 C++ 中为 #include &lt;cmath&gt;

因此,您的代码的一个好的版本应该是:

#include <iostream>
#include <cmath>
#include <cstdio>

int main(){
    int dotX[23];   //tri masiva
    int dotY[23];
    char dotName[23];
    for (int i = 0; i < 23; i++){   // Cikal za vavejdane na masivite
        std::cout << "Abscisa \t" << i + 1 << std::endl;
        std::cin >> dotX[i];
        std::cout << "Ordinata \t" << i + 1 << std::endl;
        std::cin >> dotY[i];
        std::cout << "Ime na tochkata" << std::endl;
        std::cin >> dotName[i];

        if (i >= 1){    //IF operatora i cikula za obhozhdane na masiva i presmqtane na distanciite
            bool flag = true;
            while (flag){
                double distance = sqrt(pow(dotY[i] - dotY[i - 1], 2) + pow(dotX[i] - dotX[i - 1], 2));    //Formula za presmqtane na razstoqniqta
                if (distance <= 6)  {
                    char broi;
                    broi++;
                    std::cout << "abscisa \t" << i + 1 << std::endl;
                    std::cin >> dotX[i];
                    std::cout << "ordinata \t" << i + 1 << std::endl;
                    std::cin >> dotY[i];
                }
                else{
                    flag = false;
                }
            }
        }
    }
    for (int i = 0; i < 10; i++){
        float(dotX[i] < 10);    //Note that I don't understand what you're trying to do here, so I just changed it to something that compiles
        std::cout << dotName[i] << std::endl;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多