2017-06-08 17 views
1

私はプログラミングが比較的新しいので、ループを利用する関数を書くときに問題が発生しました。ループ外の変数を使用すると、ループ内で値が変化する

配列データは、51X2の倍精度セットで構成されています。これらはすべて、初期forループ、変数、およびb変数を通じてプログラムで使用されます。 XとY変数は両方とも配列の最小値に設定されます。

例としてaおよびX変数を使用すると、X値はaと比較され、aを超えるまでインクリメントされます。ループ反復回数は、c変数によって追跡されます。このc変数は、グラフ配列で使用されます。同じ手順がb変数とy変数に対して行われます。このプロセスは、Sのすべての値に対して繰り返され、データ配列からすべてのデータポイントを分析します。

問題は、cdの変数がループ内の変更に対して変化しないということです。変数は初期化された値から変更されません。私はcd変数がforループの反復回数に関連して変わることを可能にする解決策を見いだそうとしています。

関連機能コードは以下に見られることができます。

void Data_Plot(double Data[51][2], char Graph[44][56]) 
{ 
    int N = 50; 
    int S,q,r; 
    int c = 0; 
    int d = 0; 
    double a = Data[S][0]; 
    double b = Data[S][1]; 
    double X = Data[0][0]; 
    double Y = Data[0][1]; 
    for (S=0;S<N;S++) 
    { 
     for(X;X<a;X+=0.1428571429) 
     { 
      c++; 
     } 
     for(Y;Y<b;Y+=2) 
     { 
      d++; 
     } 

     Graph[c][d] = '*'; 
    } 

私は私のコードは非常に最適化されていないと厄介であることを承知していますが、私はこの1つを終えた後、私は将来のプロジェクトでこれらの問題を修正することができます。

編集:私はこれをcdに設定しようとしましたが、NULLにしておきます。変数の初期化に関係なく、同じ結果が発生しました。

+1

ダブルA 'でそれにアクセスするときは、' S'を初期化していない=データ[S] [0]; ' – arminb

+1

'あなたが持っているので、あなたが 'B'を 'A'を初期化したときにS'が初期化されていません未定義の動作 - 何かが起きる可能性があり、問題ありません。また、外側のループの 'S == 1 '反復(およびその後のすべての反復)では、' X'はすでに大きすぎます。 'data [0] [0]'に戻すことは決してありません。 –

+0

私はSを初期化しましたが、頭が上がってくれてありがとうが、コードは同じように機能します。 –

答えて

2

abforループ中に変更するSに依存しているため、ループ内でこれらの変数を移動する必要があります。

void Data_Plot(double Data[51][2], char Graph[44][56]) 
{ 
    int N = 50; 
    int S,q,r; 
    int c = 0; 
    int d = 0; 
    double X = Data[0][0]; 
    double Y = Data[0][1]; 
    for (S=0;S<N;S++) 
    { 
     double a = Data[S][0]; 
     for(X;X<a;X+=0.1428571429) 
     { 
      c++; 
     } 

     double b = Data[S][1]; 
     for(Y;Y<b;Y+=2) 
     { 
      d++; 
     } 

     Graph[c][d] = '*'; 
    } 
+0

これはまさに私が必要としていた答えでした。ありがとう!彼らがSに依存している場合は、ループ内の変数が必要になることは私には起こりませんでした。非常に感謝しています。 –

+0

'X'と' Y'は反復ごとにリセットする必要はありません。少なくとも、問題の「for(X; ...)」と「for(Y; ...)」表記は独特です。 –

+0

@JonathanLeffler良い点。おそらく 'c'と' d'は毎回 '0'に戻す必要があります。私は彼が何をグラフにしているのか本当に理解していない。 – Barmar

関連する問題