2017-02-12 89 views
-2

我目前在为坐标系制作代码时遇到问题。 在我正在做的练习中,我想创建一个带有纵坐标/横坐标和定义字母(例如点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; 
    } 
} 
+1

欢迎堆栈溢出。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

+0

@πάνταῥεῖ我实际上尝试挖掘类似的东西,所以我可以帮助自己,但不幸的是我找不到它。我在发布之前搜索了帮助中心,但我没有找到关于我的坐标系问题的任何信息 - 只有如何创建一个。 :/ –

+0

你应该阅读如何提出一个好问题,以及在哪些方面可以改进你的问题。之后[编辑]你的问题,使其更好。 –

回答

0

你的代码有几个大问题。

首先,语法for (float i = 0; i > 10, i++;)是完全错误的。它编译,但这只是一个巧合。 for循环控制结构中的不同命令应该用分号分隔(;),而不是逗号(,)。正确的代码将是for (float i = 0; i > 10; i++)。顺便说一下,你犯了一个错字,我认为你的意思是for (float i = 0; i < 10; i++)(否则从i初始化为0,而0 > 10从一开始就是错误的,for循环从不运行)。

其次,你正在初始化变量i两次:一次用float i;,一次在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 int,long等)。在这些括号内放置一个float变量不会像这样编译。如果你想用float索引一个数组,你需要告诉编译器你想将它转换为如下所示的intdotName[(int)i]dotName[int(i)]。这被称为演员。不过,就你的情况而言,我建议只是宣布iint

此外,float(dotX < 10);是完全错误的,我不明白你在那里想要做什么。我认为你的意思是做float(dotX[i] < 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;是不好的做法。建议省略它,并在cin,coutendl前加上std::。如果你想知道为什么using namespace std;是不好的做法,很好解释。不过,我必须承认,我个人仍然使用using namespace std;,因为我认为它更简单。

其次,main函数应该返回0,因此建议在main函数的末尾添加return 0;main函数的返回值告诉程序关闭的是什么。值0意味着程序在应该时关闭。任何其他值意味着该程序崩溃。每个返回值意味着可用的完整列表here。请注意,C++支持省略return 0;,如果省略,大多数编译器会自动添加它,但仍建议使用它。此外,C不支持省略return 0;,并且在C中它将返回内存中发生的任何事情,使得它看起来像程序在正常结束时崩溃。

此外,#include <stdio.h>是C,虽然它在C++中工作,但不建议。在C++中,最好使用#include <cstdio>。以C语言结尾为.h的所有标准库都可以在C++中使用,方法是删除.h并在开头添加ccmath也是这种情况:在C中,它将是#include <math.h>,在C++中,它是#include <cmath>

你的代码的一个很好的版本,因此将会:

#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; 
    } 
}