2017-02-12 143 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; 
    } 
}