前提・実現したいこと
以下の部分で示す内容を処理結果に反映させたい
発生している問題・エラーメッセージ
if文で分岐を設けたところ設ける前に処理結果に表示されていた内容が表示されなくなった。
該当のソースコード
if文分岐挿入前のソースコード
while(NODE[0].data[0]
1 for (M = 0; M < NODEMAX; M++) { 2 ram = (double)rand() / RAND_MAX; 3 if (ram <= 0.25) { 4 if (NODE[M].x != X_MAX) { 5 NODE[M].x += 1; 6 } 7 } 8 else if (ram <= 0.5) { 9 if (NODE[M].x != 0) { 10 NODE[M].x -= 1; 11 } 12 } 13 else if (ram <= 0.75) { 14 if (NODE[M].y != Y_MAX) { 15 NODE[M].y += 1; 16 } 17 } 18 else { 19 if (NODE[M].y != 0) { 20 NODE[M].y -= 1; 21 } 22 } 23 24 while (T < NODEMAX) { 25 for (A = T + 1; A < NODEMAX; A++) { 26 if (abs(NODE[T].x - NODE[A].x) <= DISTANCE && abs(NODE[T].y - NODE[A].y) <= DISTANCE) { //ノード同士の距離を比較 27 for (int S = 0; S < NODEMAX; S++) { 28 if (NODE[T].data[S] != NODE[A].data[S]) { //お互いにデータを比較し、どちらかがデータを持っていて、どちらかがデータを持っていない状態のとき 29 if (NODE[T].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 30 NODE[T].data[S] = 2; 31 } 32 else if (NODE[A].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 33 NODE[A].data[S] = 2; 34 } 35 } 36 } 37 } 38 } 39 T ++; 40 } 41 42 T = 0; 43 44 for (int V = 0; V < NODEMAX; V++) { //新しく受け取ったデータを次のクールタイムで処理できるようにデータを2から1にする。 45 for (int X = 0; X < NODEMAX; X++) { 46 if (NODE[V].data[X] == 2) { 47 NODE[V].data[X] = 1; 48 } 49 } 50 } 51 } 52 53 time += 1; 54 printf("回数%d\n", time); 55 56 } 57 58``` 59挿入後のソースコード 60```while (NODE[0].data[0] == 0) { 61 for (M = 0; M < NODEMAX; M++) { 62 ram = (double)rand() / RAND_MAX; 63 if (ram <= 0.25) { 64 if (NODE[M].x != X_MAX) { 65 NODE[M].x += 1; 66 } 67 } 68 else if (ram <= 0.5) { 69 if (NODE[M].x != 0) { 70 NODE[M].x -= 1; 71 } 72 } 73 else if (ram <= 0.75) { 74 if (NODE[M].y != Y_MAX) { 75 NODE[M].y += 1; 76 } 77 } 78 else { 79 if (NODE[M].y != 0) { 80 NODE[M].y -= 1; 81 } 82 } 83 84 while (T < NODEMAX) { 85 for (A = T + 1; A < NODEMAX; A++) { 86 if (NODE[T].CT == 0 && NODE[A].CT == 0) { 87 printf("ノード%dのCT%d,ノード%dのCT%d", T, NODE[T].CT, A, NODE[A].CT); 88 if (abs(NODE[T].x - NODE[A].x) <= DISTANCE && abs(NODE[T].y - NODE[A].y) <= DISTANCE) { //ノード同士の距離を比較 89 for (int S = 0; S < NODEMAX; S++) { 90 if (NODE[T].data[S] != NODE[A].data[S]) { //お互いにデータを比較し、どちらかがデータを持っていて、どちらかがデータを持っていない状態のとき 91 if (NODE[T].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 92 NODE[T].data[S] = 2; 93 } 94 else if (NODE[A].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 95 NODE[A].data[S] = 2; 96 } 97 } 98 } 99 100 NODE[T].CT ++; 101 NODE[A].CT ++; 102 103 } 104 } 105 else if (NODE[T].CT != CT_MAX && NODE[A].CT != CT_MAX) { 106 NODE[T].CT++; 107 NODE[A].CT++; 108 } 109 else if (NODE[T].CT == CT_MAX && NODE[A].CT != CT_MAX) { 110 NODE[T].CT = 0; 111 NODE[A].CT++; 112 } 113 else if (NODE[T].CT != CT_MAX && NODE[A].CT == CT_MAX) { 114 NODE[T].CT ++; 115 NODE[A].CT = 0; 116 } 117 else { 118 NODE[T].CT = 0; 119 NODE[A].CT = 0; 120 } 121 T++; 122 } 123 } 124 125 T = 0; 126 127 for (int V = 0; V < NODEMAX; V++) { //新しく受け取ったデータを次のクールタイムで処理できるようにデータを2から1にする。 128 for (int X = 0; X < NODEMAX; X++) { 129 if (NODE[V].data[X] == 2) { 130 NODE[V].data[X] = 1; 131 } 132 } 133 } 134 } 135 136 time += 1; 137 printf("回数%d\n", time); 138 139 } 140``` 141 142 143### 補足情報(FW/ツールのバージョンなど) 144Visual Studio 2022
何をするコードなのかさっぱり分かりませんが、パッと見たところ、T++; の位置が変わってる (for の外か中か) のが気になりますね…。
追加したのは
if (NODE[T].CT == 0 && NODE[A].CT == 0) { ... }
ですか?
直後にある printf("ノード%dのCT%d,ノード%dのCT%d", T, NODE[T].CT, A, NODE[A].CT);
をその if ( ... ) の直前に移動したとき、NODE[T].CT, NODE[T].CT は妥当な値(どちらも0) となっていますか?
処理を変えたのなら結果が変わって当然でしょう? その質問の文章では「何」が問題なのかわかりません。
(単に「ごちゃごちゃ」になっているのを落ち着いてほどくだけの話だと思いますが...)
↑まぁ、現時点では「デバッグの丸投げ」と受け取られてもしゃーないですわね。
> 「デバッグの丸投げ」と受け取られてもしゃーない
それ以外の何の可能性があるのでしょう? (ってそれは質問者さんが説明するべきことでしょうけれど)
回答1件
あなたの回答
tips
プレビュー