何でアホなことなの?
>>950 はCの文法通りなんだけど。
はじめてみた
これなに?C99?独自拡張?
俺が無知なだけ?
gccだと -ansi -pedantic でもコンパイルできるからANSI(C89)でもOKじゃないかな。
>>950 gccではコンパイルできたけどVC++ではエラーになった
>>955 何いい加減な事言ってるんだ
K&R本のどこにもこんな書き方は認められていないぞ
認められているのはISO/IEC 9899:1999のみだ
C89はアウト
>>958 ああコンパウンド・リテラルね
まんまC99からしか使えない
961 :
955:2009/05/12(火) 10:45:25
>>959 あれ… さっきのファイルをもう一回 -ansi -pedantic でコンパイルしたら警告がでた。
a.c:4: warning: ISO C90 forbids compound literals
さっき何で平気だったんだろうと思ってシェルの履歴を見たら -peduntic になってたよ。
gccが何も言ってこないから気づかなかった。
>>950 Cってこんな書き方出来るんだ。
ってかこれって初心者が覚える書き方じゃないだろw
無しで書くとしたらわざわざ変数一個定義する訳だから、初心者とか関係なく
覚えておいて損はないと思う。
enemy = 4; //3以上の数で初期化
while( enemy > 3 ){
srand ( ( unsigned) time ( NULL ) );
enemy = rand() % 10;
}
乱数を使って0〜2の数値をenemyに格納する時って、こういう書き方が普通なの?
もっと良い書き方あれば教えて欲しい
srand はプログラム起動時に1回書けばよろしい
同じ値でsrand呼ぶとrandが返す値は同じだぞ
ってそれ以前に rand() % 3じゃいかんの?
>>966 あ、そっかw
3で割れば余りは0〜2だもんな。
ゴメン、ボケてた
enemy = rand() % 3;
もしくは
enemy = rand() / (RAND_MAX + 1.0) * 3;
こういう細々とした定石コードを纏めたサイトって無いのかね
どこに定石が…w
定石なんかいらないだろw
その場その場で考えて行けばいいだけで
それとも頭悪いの?
定石というか
struct x {
char a[10];
}
とか
struct x {
int a;
int b;
int c[];
}
こういうのか。
#include <stdio.h>
int main(void)
{
printf("hallo world!\n");
return 0;
}
定石と言ったらこれだろJK
無限ループは
for(;;) で書くか while(1) で書くか…
構文エラー )が;の前にありません。
srand ( ( unsigned ) time ( NULL );
え?なんで?あるじゃん。
一応srandの上も確認するが、バグが見当たらない。
,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;;
{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; …ハハッVC2005め、エラーを出して構って欲しかったのか。
ヾ;;;ハ ノ .::!lリ;;r゙ 全くツンデレだなお前は。
`Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が
,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f 俺にもありました
~''戈ヽ `二´ r'´:::. `!
つっこむか引き抜くかまよう段階
>>974 whileに定数書いたらコンパイラに注意されたことがある
>>964 同じような間違いをなんどか見たことあるけど、
こういう人って入門書とか読まずにリファレンスだけで勉強してるのだろうか。
リファレンスだけで勉強できるだけの素養があれば、srand()を毎回してはいけないことくらいは分かるんじゃね?
素養がないのに、リファレンスだけでやってるから失敗してるとか。
ループ変数はi〜n
それ以外は絶対に使わない
ループ変数のkが出てきた時点でプログラムの構造を根本的に考え直した方がいい
擬似乱数という物を理解してないとsrandの意味は分からんよな
トランプのカードをシャッフルさせようとしています
1番の方法と2番の方法のどちらの方法を選ぶのが良いでしょうか?
#include<stdio.h>
#include<stdlib.h>
void swap(int *a, int *b){
int c;
c=*a;
*a=*b;
*b=c;
}
int main(void){
int i, card[52];
for(i=0;i<52;i++) card[i]=i;
for(i=0;i<52;i++) swap(&card[i], &card[rand()%(i+1)]); // 1番
for(i=0;i<52;i++) card[i]=i;
for(i=0;i<52;i++) swap(&card[i], &card[i+rand()%(52-i)]); // 2番
return 0;
}
>>985 「シャッフル アルゴリズム」でググるといろいろでてくると思う。
どちらも良くない
for(数回)
{
for(i=0;i<52;i++) swap(&card[i], &card[i+rand()%(52)]);
}
が、まだまし
>>985 fisher yatesでぐぐれ
直感的にも正しい(実質ランダムに一枚づつ抽出と同じであることが容易に理解できる)ものだし
ループは一重で済むし
>>987 糞以下のものをだすな
おお
for(数回)
{
for(i=0;i<52;i++) swap(&card[i], &card[rand()%(52)]);
}
訂正や
991 :
985:2009/05/12(火) 22:30:18
>>989 こんな感じでしょうか
for(i=0;i<52;i++) card[i]=i;
for(i=52-1;i>=0;i--) swap(&card[i], &card[rand()%(i+1)]);
ぱっと見は1番に近いですが
アルゴリズムの内容的には2番と一緒になりますね
>>985 for(i=0; i<52; i++) {
j = rand() % (i + 1);
card[i] = card[j];
card[j] = i;
}
で初期化とシャッフルを同時にやるのはどうよ?
990はバカすぎて話になんねーw
for(i = 0; i < X; i++){
n = rand()%52;
for(j = 0; j < n; j++){
swap(&card[j], &card[n+j]);
for(k = n; k < 51; k++ )
swap(&card[k], &card[k+1]);
}
}
>>994 若干偏りのでるアルゴリズムではあるが
実用上は問題ないのでは?
全く偏りの出ない
>>985に対して後からそれより偏るもの出してどうすんだよw
unixコマンドのsortは数百Mのテキストも平気でソートできるけど
どういうアルゴリズムでやっているか概略を知っている方いらっ
しゃいましたらご教授下さい。(オンメモリなのかそうでないか
とか)
ソース読むとか。
sortにはメモリバッファのサイズを指定するオプションがあるので、
メモリが少ない時は少ないなりのアルゴリズムでやってるのかな。
役に立たんレスで済まんね。
次スレで俺の時代が到来
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。