C言語なら俺に聞け(入門編)Part 78at TECH
C言語なら俺に聞け(入門編)Part 78 - 暇つぶし2ch400:デフォルトの名無しさん
11/02/11 03:25:42
無駄な入れ替えを省略することは小手先とは言わないw

401:デフォルトの名無しさん
11/02/11 03:29:55
>>398
>ってやれば空の配列に数字を入れながらランダムにできる
人に噛み付く前に、よく考えな
明らかに数字を入れる前にnum[j]を使ってる

402:デフォルトの名無しさん
11/02/11 03:33:37
>>400
それ、十分小手先だよ

403:デフォルトの名無しさん
11/02/11 03:35:15
理解できないバカどもは>>394>>396を乱数の種を同じにして実行してから書き込んでくれw

404:デフォルトの名無しさん
11/02/11 03:38:33
>>403
>>394は初期化前の変数を読み出している
で、その場合、C言語での動作は未定義
小手先に走る前に、基本をもっと身に着けろ

405:デフォルトの名無しさん
11/02/11 03:42:24
初期化されてない変数を使うのは未定義じゃねーだろw

406:デフォルトの名無しさん
11/02/11 03:44:05
>>406
未定義だよ

407:デフォルトの名無しさん
11/02/11 03:46:38
>>406
自己参照構造体乙

408:デフォルトの名無しさん
11/02/11 03:50:11
未初期化変数の値は不定であって、未定義ではない
>>394の場合
j < iの場合ならすでに内容があるし、i==jの場合なら不定の変数を代入してるが同じ場所だし、
直後にi+1を代入してるので問題ない

409:デフォルトの名無しさん
11/02/11 03:51:13
でも糞コードだよね

410:デフォルトの名無しさん
11/02/11 03:53:31
914 :デフォルトの名無しさん:2011/02/06(日) 17:00:59
そんな話は聞いたことないけどしたいならそうすればいいんじゃない?
それより、 i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。

920 :デフォルトの名無しさん:2011/02/06(日) 17:34:11
問題ないように思える人はもう一度Cの規格票をよく読むんだ^^

923 :デフォルトの名無しさん:2011/02/06(日) 17:38:32
…というのも不親切なので答えをいうと
i == 9の部分はtrueの時1になることを想定しているけど
(90-100の階級幅だけ11あるので、ここだけ特別処理にしている)
Cの規格上はtrueは0以外の整数であればなんでもいいことになっているので
実装にっては「90-100」のような表示にならない可能性があるってことなのよ^^;
ここは

printf( "%d-%d %d人\n", i * 10, i == 9 ? 100 : i * 10 + 9, cv[ i ] );

のようにすべきでした。

924 :デフォルトの名無しさん:2011/02/06(日) 17:41:11
って、答えを書いているうちに即レスするんじゃない貴様ら^^

ちなみに、この「trueは0以外の整数」というのは
Cではけっこう重要な落とし穴なので初学者は覚えておくといいよ^^

929 :デフォルトの名無しさん:2011/02/06(日) 17:44:46
あれ?そうだっけ?すまんすまん^^ワラ

935 :デフォルトの名無しさん:2011/02/06(日) 17:49:37
こうして人は成長していくのであった^^;

411:デフォルトの名無しさん
11/02/11 03:53:39
>>408
不定じゃなくて未定義だ
たまたま動いても、コンパイルエラーでも、実行時エラーでも構わない。
つーか、暫く2ch見てなかったけど、
テンプレから初心者用FAQはなくなったのか?

412:デフォルトの名無しさん
11/02/11 03:54:09
>>409
◆QZaw55cn4c乙

413:デフォルトの名無しさん
11/02/11 03:54:57
>>408
値は不定だけど未初期化領域へのアクセスは未定義

414: ◆QZaw55cn4c
11/02/11 04:03:09
>>408
初期化されてない auto 変数の読み出しは、未定義。それによりプログラムが落ちても文句はいえない。
解説はフィンローダさんところがいいでしょう。
URLリンク(www.st.rim.or.jp)

415:デフォルトの名無しさん
11/02/11 04:04:05
>>394はこう書けばいいのかな
for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
if(j != i) num[i] = num[j];
num[j] = i + 1;
}

最初にnum[10] = {0};ってやったほうが楽そうだ

416:デフォルトの名無しさん
11/02/11 04:05:42
>>415
条件分岐で処理速度が落ちるから小手先テクの意味ないじゃん

417:デフォルトの名無しさん
11/02/11 04:10:25
カキコしているランダムに並べ替えは、
限られた範囲の数値が10から20や、-20から-10や、-10から10
てかみたいに、intで表せる任意の(連続)範囲ならどこでもOKなの?

418:デフォルトの名無しさん
11/02/11 04:12:31
>>415
やるなら、こんな感じ。

for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
num[i] = 0;
num[i] = num[j];
num[j] = i + 1;
}

でも、可読性が悪いため、他の人に
「num[i] = 0;」を消されるかも知れないので、お勧めできない。


419:デフォルトの名無しさん
11/02/11 04:13:36
>>414
おい、おまえ、限られた範囲の数値をランダムに並べ替えやってみそ


420:デフォルトの名無しさん
11/02/11 04:14:45
394 :デフォルトの名無しさん:2011/02/11(金) 00:48:34
>>392
for(i = 0; i < 10; i++) {
j = rand() % (i + 1);
num[i] = num[j];
num[j] = i + 1;
}
ってやれば空の配列に数字を入れながらランダムにできる

421:デフォルトの名無しさん
11/02/11 04:15:10
>>417
>>391ならOK

422:デフォルトの名無しさん
11/02/11 04:15:32
空の配列って書いてあるからもしかしたら、0で初期化してあるのかもしれないw

423:デフォルトの名無しさん
11/02/11 04:17:56
J.2 Undefined behavior
1 The behavior is undefined in the following circumstances:
The value of an object with automatic storage duration is used while it is
indeterminate (6.2.4, 6.7.8, 6.8).

424:デフォルトの名無しさん
11/02/11 04:20:06
行列演算ならまだしもただの並び替えなら、俺は読みやすい方を採用するかな

425:デフォルトの名無しさん
11/02/11 04:33:05
>>410
比較演算の結果は0か1になることが保障されてるって突っ込みが抜けてるから
「i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。」が正しいように見えるわな

426:デフォルトの名無しさん
11/02/11 04:33:12
ここで再登場して、変数を宣言と同時に0で初期化しないアホがいるなんてwとか言ってくれたら面白いのに

427:デフォルトの名無しさん
11/02/11 04:37:33
>>425
そこは923で丁寧に説明されてるからおk

428:デフォルトの名無しさん
11/02/11 04:37:35
num[]はグローバル変数ですよ。
初期化する必要なんてありません。

429:デフォルトの名無しさん
11/02/11 04:44:13
Javaの質問ですけどいいですか?

430:デフォルトの名無しさん
11/02/11 04:44:14
◆QZaw55cn4cはこれだけ住人に嫌われているのにのうのうと平気な顔で
出てこれる神経が分からん
アスペも混ざってるな

431:デフォルトの名無しさん
11/02/11 04:47:51
>>429
お前さんスゲーナ

432:デフォルトの名無しさん
11/02/11 04:50:57
小型数列なら配置用の配列を使うかな
static int sr[3][10]={{9,2,5,…}.{4,9,7,…},{0,5,4,…}};
#define F(a,b,c) (b[0]=a[0], b[1]=a[1],…,c=&sr[rand()%3],a[0]=b[*c[0]],…, a[9]=b[*c[9]],a)

int num[10]={0,1,…},tmp[10],(*mxr)[10];
F(num,tmp,mxr);

433:デフォルトの名無しさん
11/02/11 04:56:19
>>432
マクロ長すぎ
素直に関数にして下さい

434:デフォルトの名無しさん
11/02/11 05:07:50
>>432
最高にキモイな!うほ!

435:デフォルトの名無しさん
11/02/11 05:57:44
「鬼は捕らえた娘をイヤーぶちぬいたんあぁ」ってなんですか


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch