2017-02-12 18 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は最初からfalseです。

第2に、変数iを2回:float i;で1回、forループで1回初期化しています。それはコンパイルするべきではありませんが、コンパイラによってはコンパイルするべきではありません。実行方法には2つのオプションがあります。最初のオプションは、forループの外で変数を宣言し、ちょうどループのために、それを初期化せずにそれを割り当てることです:

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

二番目のオプションは、あなたが最初に行ったように、単純にループのためにそれを宣言することですループ:

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

あなたが作ったもう一つのミスがfloatとしてiを宣言してからアクセスdotName[i]に試してみることです。角かっこの中に入れたものは、タイプintまたはそれに類するもの(unsigned intlongなど)でなければなりません。これらの括弧の中にfloat変数を入れることは、まるでそれと同様にコンパイルされません。アレイをfloatでインデックスする場合は、またはdotName[int(i)]のように、intに変換することをコンパイラに伝える必要があります。これはキャストと呼ばれます。しかし、あなたの場合、iintと宣言することをおすすめします。

また、float(dotX < 10);は完全に間違っていますが、私は実際にあなたが何をしようとしているのか分かりません。私はあなたがfloat(dotX[i] < 10);をすることを意味したと思うが、それでも意味をなさない。あなたがそこでやっているのは、boolfloatに変換して、結果を何もしないことです。コンパイルして間違ってはいないが、まったく役に立たない。私が言ったように、あなたが何をしたいのか分かりません。

また、broi = broi++;も正確ですが無用です。 broi++;で十分です。 ++演算子は、broiを単独でインクリメントしてから結果を返します。何++オペレータが内部的に行うことは基本的にはこれです:

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

だから、それはすでにあなたが何かをしなくても自動的に変数をインクリメントします。あなたがやったことは、これを行うと同じです:

ここ
broi = broi + 1; 
broi = broi; 

は、最初の行は++オペレータを表し、2行目は=演算子を表します。 2行目は役に立たないので、削除するだけです。同様に、コード内でbroi =を削除して、単純にbroi++;のままにすることができます。

また、推奨されていないものもありましたが、C++標準でサポートされているのでうまく動作します。

まず、using namespace std;は悪い習慣です。それを省略し、cinの前にstd::を追加し、coutendlを追加することをお勧めします。 using namespace std;が悪い習慣である理由を知りたい場合は、とよく分かります。しかし、私は個人的にはusing namespace std;を使っていることを認めなければなりません。

第2に、main関数は0を返すと仮定されているので、main関数の最後にreturn 0;を追加することをお勧めします。 main関数の戻り値は、何がプログラムを終了させたかを示します。値0は、プログラムが想定されたときに終了したことを意味します。他の値は、プログラムがクラッシュしたことを意味します。戻り値の意味の完全なリストはhereです。 C++はreturn 0;を省略することをサポートしており、ほとんどのコンパイラは省略されてもそれを自動的に追加しますが、まだそれを持っていることが推奨されます。また、Cはreturn 0;を省略することをサポートしておらず、メモリ内に何があっても返すので、プログラムが正常に終了したときにクラッシュしたように見えます。

また、#include <stdio.h>はCで、C++でも動作しますが、お勧めできません。 C++では、#include <cstdio>を使用する方が良いでしょう。 C言語で.hで終わるすべての標準ライブラリは、.hを削除し、最初にcを追加することでC++で使用できます。 cmathの場合もそうです: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; 
    } 
}