GetRand関数を用いた配列指定の仕方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
keny
記事: 2
登録日時: 9ヶ月前

GetRand関数を用いた配列指定の仕方

#1

投稿記事 by keny » 9ヶ月前

この度質問させていただくのはGetRand関数を用いた配列指定の仕方です。

現在のコードは

コード:

int k[10];
int m[10];
int o[10];

     for(int a=0;a<10;a++)
		{
			k[a]=GetRand(9);
		}


		for(int b=0;b<10;b++)
		{
			for(int c=0;c<10;c++)
			{
				if(k[b]=c);
				{
					m[b]=o[c];
				}
			}
		}
といった感じです。
やりたいことは、kという配列の全てにランダムな数を指定し、そのb番目がcであるならmという配列のb番目にoの配列のc番目の数を指定するということです。
いまのコードだと、kとmの値がランダムではなく固定されてしまいます。

アバター
usao
記事: 1381
登録日時: 5年前

Re: GetRand関数を用いた配列指定の仕方

#2

投稿記事 by usao » 9ヶ月前

GetRand(9)が0から9の値を返すのであれば,
cに関するforについて,
ifの条件を満たすcは1つだけであり,そのcの値はkであるから,
このfor文は,単に

m = o[ k ];

と書けると思う.

また,kの値は単なる乱数であるから,
k[]というバッファに保持する必要も無いように思うので,
aに関するfor文と,k[]なる配列は不要であり,

for( int b=0; b<10; ++b )
{
int kb = GetRand(9);
m = o[ kb ];
}

とすればよいと思う.
kbという一時変数も除外すれば

for( int b=0; b<10; ++b )
{ m = o[ GetRand(9) ]; }

で良いのではないだろうか…と思う.


それはそれとして,
貼られたコードでは15行目を == とすべきではないかと思う.

アバター
みけCAT
記事: 6013
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: GetRand関数を用いた配列指定の仕方

#3

投稿記事 by みけCAT » 9ヶ月前

keny さんが書きました:いまのコードだと、kとmの値がランダムではなく固定されてしまいます。
いまのコードには、
  • 15行目のif文でk[b]とcを比較するのではなく、k[b]にcを代入している
  • 15行目に余計なセミコロンがあるので、16行目~18行目のブロックがif文とは関係なく実行される
という問題がありますね。
オフトピック
また、変数名に全角のアルファベットが用いられており、個人的に気持ち悪いです。
コンパイラによっては対応していないかもしれないし、全角と半角を切り替える手間もかかりそうなのに、
どうしてわざわざ全角のアルファベットを使っているのか興味深いです。
さらに、5行目に無駄に全角スペースが使われており、これもコンパイラによっては対応していないでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

keny
記事: 2
登録日時: 9ヶ月前

Re: GetRand関数を用いた配列指定の仕方

#4

投稿記事 by keny » 9ヶ月前

ありがとうございます。
11行目から下を

for( int b=0; b<10; ++b )
{
int kb = GetRand(9);
m = o[ kb ];
}
と書き換えたところ思い通りになりました。
まだまだ学び始めて未熟なもので、代入などの法則があまり分かっていませんでした。

offtopicに関しまして
ところどころ変数に全角があることと、全角スペースがあるのは掲示板に投稿する際にコピーしてきたコードの変数などを書き換えたため起こってしまったものです。困惑させてしまいすみません。

返信

“C言語何でも質問掲示板” へ戻る