501 :
デフォルトの名無しさん :
2010/05/24(月) 20:18:44 >>498 ゆえにと言われても。
円周率≒3.1415926535897932384626433832795
ゆえに、円周率を10進数で表すと0が現れない。
とか?
>>501 総当りの結果に対してその反応ですか。
逆に、もっと試行回数を増やせばそのうちならされるのではないかという考え?
504 :
デフォルトの名無しさん :2010/05/24(月) 20:21:42
>>501 総当りで統計をとって、偏りがあることが明白になり、また偏りのない手法もみつかっているのに、その反応ですか?
バグ取りしただけで鬼の首を取ったように喜んでる奴
というと
>>503 ぐらいか。
あとはバグに気付かず、指摘に対して馬鹿だアホだとわめいてるのが、、複数いたの?もしかして。
508 :
デフォルトの名無しさん :2010/05/24(月) 20:30:54
ところで、 int x = rand()%i; だと0除算が起こるんじゃないの?
逃げたなww
一般的なアルゴリズムでもコピペしろってことですね
偏りに気付きにくいバグの方が困るといえば困るけど、まぁ、どっちもどっちだろこれ
>>506 いや、これは雑感なんですが、デスマーチプロジェクトの終盤になると、バグをみつけた人間がやたらと偉くなって評価が高くなり、
多少のバグがあるにせよ、こつこつとロジックを積み上げてきた人間を踏み潰してしまうことが多々あるんですよ。
そういう実例を目の当たりにしているので
>>506 にちょっと共感しています。
>>491 ,
>>495 崩れてはいけません。
マ板でやれ
けんかすんなよまったく
>>486 をコビペしてやってみたらs[2]に0が入るんだけどなんで?
518 :
デフォルトの名無しさん :2010/05/24(月) 21:33:38
>>516 ああ、終端文字も入っちゃうね。
これで。
char s[] = "12345678";
for(int i = 0; i < sizeof(s)-1; i++){
int x = rand()%(sizeof(s)-1-i)+i;
char c = s[x];
s[x] = s[i];
s[i] = c;
}
俺は本番稼働前にバグ見つけて袋叩きにあったが。 俺のところがブラックなだけかな。
それはテストを誰がやってるかによるな
524 :
デフォルトの名無しさん :2010/05/25(火) 00:08:56
普通はfor(i =0;i<unko;i++)なのに for(i=0;<i> って書いてる人が居たんだ 何この表記
バグ
528 :
デフォルトの名無しさん :2010/05/25(火) 01:02:50
座標における(x,y)がy>1、y<x-1にあるとき、真として1を出すプログラムって どうするんですか? printf("%d\n",1<y<x-1);でいいんですか?
いいよ
>>528 そのまんま (y > 1) && (y < x - 1) だろ。
そのコードだと (1 < y) < x - 1 になってしまう。
531 :
デフォルトの名無しさん :2010/05/25(火) 01:18:35
答えてくれてありがとうございます&&使うんですねやっぱり・・ あのーもうひとつすいません。グラフ範囲はy>√2かつy<x-1でした。 √使うとコンパイルエラーでるんですが・・・
正しく書けばエラーが出るはずがない
534 :
464 :2010/05/25(火) 01:27:00
みなさんありがとうございます 今起きたら、たくさんレスがついててビックリしました 勉強になりました
535 :
デフォルトの名無しさん :2010/05/25(火) 01:30:42
>>533 すげぇwwその機能ww
ありがとうw
まじで助かった。
√は使えないんだね。
3桁の整数を桁ごとに切り出して他の変数に格納するにはどうすればいいですか? int num=123; から int a[0]=1; int a[1]=2; int a[2]=3; というような具合です
539 :
デフォルトの名無しさん :2010/05/25(火) 02:11:37
あぁくそ・・・また問題発生。コンパイルは成功だが・・ #include <stdio.h> int main(void){ float x; scanf("%e", &x); printf("%d\n", x >= pow(3,1/2)); return 0; } これでxにpow(3,1/2)入れたら偽だった・・何故だ >=ってあるから等しいときも含まれるので真だろ。何故だ・・・
>>539 scanf() で式の解釈〜計算などはできない。あと、戻り値チェックしとけ。
>539 1/2 -> 0 -> 0. (int)/(int) -> (int) -> (double)
それじゃ通じないでしょ。通じさせる気がないんだろうけど。
王様、馬鹿には通じない文です
1/2 が 0.5 だという誤解。 1/2 は 0 です。スレ見てないけど。
545 :
デフォルトの名無しさん :2010/05/25(火) 02:54:57
>>540 >>541 さんレスありがとうございます。
しかし一体どういうことでしょうか?floatがまずいのかな?
どうしてもx≧√3において√3の場合真と出したいんだが。
あと戻り値チェックとはなんでしょう?
まずいのは入門書も読んでないレベルの頭です
547 :
544 :2010/05/25(火) 02:58:41
まだ、1/2 が 0.5 だと思ってるのか、それが間違ってる。
>>545 問題点
(1) float, doubleのような浮動小数同士の等値比較はできないと覚えておくこと。
必ず誤差が発生するため。
どうしてもやりたい場合は、差が0.01以下などの条件に置き換える。
例: fabs(x - pow(3.0, 0.5)) <= 0.01
(2) scanf()での入力は、少数値で入れること。(例:1.7320508)
scanf()は数式を解析しない。
--ここから--
#include <stdio.h>
#include <math.h>
int main(void){
double x;
scanf("%lf", &x);
printf("%d\n", x >= pow(3.0,0.5));
return 0;
}
--ここまで--
>>545 いったいキーボードから何を入力したのですか?
550 :
デフォルトの名無しさん :2010/05/25(火) 03:13:51
>>543 >>544 >>546 >>547 レスありがとうございます。
そもそもxに代入するとき分数やpow自体代入できません。
scanfにおいてx,y二つ代入するとき、xにpowや分数を代入すると
yを代入できないまま終わります。これだと√3という境界を
含むように√3を代入できなければ困るのですが・・・・・
誰か分かりますか?
>>539 pow(3, 1/2);
ではなくて、
pow(3, 0.5);
とか
pow(3, 1.0 / 2.0);
とかく。理由は入門書をみてくだしゃあ。
>>550 では、キーボードからどういうふうに入力するのを想定しているのですか?
553 :
544 :2010/05/25(火) 03:19:40
>>540 後半はいいこと書いてるけど、前半はマクラ言葉だから意味は無い。視力0.5て書いとけ一応。
540 :デフォルトの名無しさん :2010/05/25(火) 02:20:51
>>539 scanf() で式の解釈〜計算などはできない。あと、戻り値チェックしとけ。
2次元配列の2つの要素を交換していき a[3][3]={ {2,3,7} , {4,6,1}, {5,8,0} } を a[3][3]={ {1,2,3} , {4,5,6} , {7,8,0} } にソートするプログラムを作りたいのですがどのようにすれば作れますか? 具体的には、まず1と2を交換して、3と2を交換して、7と2を交換して・・・という方法です
なんでわざわざ2次元か、1次元配列でいいのでは?
556 :
554 :2010/05/25(火) 03:54:05
>>555 そうですね・・・
1次元配列でもいいです
二次元を一次元に並べなおしてから、また二次元に戻すで、いいにか?
>>464 「手書きで、紙に鉛筆で書いて求めるなら、どうやってやるかなぁ?」 と考えたら、
たぶん最初に、使っていい数を
1、2、3、4、5、6、7、8
って書いて、
適当に一個選んで、その数字を消して
1、2、3、 、5、6、7、8
その消したところに、最後の数字を持ってきて
1、2、3、8、5、6、7
ってのを何度も繰り返して、だんだん短くしてって
1、6、7、8
最後まで全部使い切ったら終わり。と。
45231678
その手書きの時の考え方を、そのままプログラムにすればいいと思った。
http://codepad.org/sTJSPHtB
>>557 2次元変換しなくても大丈夫です
1次元配列だけで
よろしくお願いします
よろしく
おねがい
致します
ので
どうか
ーーーーーーーーーーーーーーーーーーー 宿題は宿題スレで
お願いします
「キューソート」で検索 qsort
0が最終的にあそこに収まるっていうところで、これは普通の代数学ではないのかもしれないよ
>>568 >>540 だろ。
1.0/2.0 = 0.5
1/2 = 0 ... 1
1./2 ?
1/2. ?
573 :
デフォルトの名無しさん :2010/05/25(火) 05:30:32
>>552 みなさんありがとうございます。そうですね
>>552 それが真理ですね・・・√はプログラム上では
無限に少数位が続くから、√3の収束値求めるの無理ですよね。
3の0乗計算してるって
575 :
554 :2010/05/25(火) 06:40:25
できました、みなさんありがとうございます int nu[]={2,8,5,1,7,6,3}; int nu_tmp=0; for(int i=0;i<8;i++){ if(nu[i]!=i+1){ nu_tmp=nu[i]; for(int j=0;j<8;j++){ if(nu[j]==i+1){ nu[j]=nu_tmp; } } nu[i]=i+1; } }
>>575 ループ回数とか、実行結果とか。
なんか、いろいろ怪しい感じがするけど、大丈夫か?
>>576 汚いかもしれません・・・
でも、ちゃんと動いてるので
>>577 気になる点。
(1)配列nu で定義されている要素は7個(nu[0]〜nu[6])だが、forループ内でnu[7]を参照してる。
→nu[7](8個目)は未定義なので、定義した方がよくない?
(2)実行後、配列nuの要素を表示させてみると 1,2,3,4,5,6,7 が入っている。
→定義済みの値(8)が消え、未定義の値(4)が入っている。※論理バグの可能性。
>>578 int nu[]={2,8,5,1,7,6,3};
じゃなくて
int nu[]={2,8,5,1,7,6,3,4};
でした・・・
見てくれてありがとうございます
自力でやる質問者は珍しい
回答者側にまわるのも時間の問題。
582 :
デフォルトの名無しさん :2010/05/25(火) 15:40:41
インデントテスト main() { printf("Hello Wold!!\n"); return 0; }
583 :
デフォルトの名無しさん :2010/05/25(火) 16:36:23
int main(void) { printf("Hello Wold!!\n"); }
int f=0; //board int board_x1 = 70+ZAHYOU_2P_X*f; int board_y1 = 100; int board_x2 = board_x1+BLOCK_YOKO*7; int board_y2 = board_y1+BLOCK_TATE*10; for(f=0; f<2; f++){ //boardの表示 DrawBox(board_x1,board_y1,board_x2,board_y2,black,false); } forループの中で使用するboard_x1に加算されたfを反映させるにはどうしたらいいですか? 素直に DrawBox の中で board_x1+ZAHYOU_2P_X*f と書くしかないのでしょうか。
forループの中で使用するboard_x1 に 加算されたf を反映させる →加算されたfとは何に加算されたのか? forループの中で使用する board_x1に加算されたf を反映させる →反映させるとは何に反映させるのか?
587 :
デフォルトの名無しさん :2010/05/25(火) 18:16:17
すいませんswitch文の中にswitch文書く方法教えてください。 簡単な例で教えてください。大きな枝分かれが3、そこから 枝分かれが5だと。全部で15通りですよね? switch文で簡単なプログラムをかくとき caseの数は15個なのか、8個で済むのかどうなんでしょうか? 簡単な例でお願いします
int a,b; switch(a){ case 1: switch(b){ case 1:break; case 2:break; case 3:break; case 4:break; default:break; }break; case 2: switch(b){ case 1:break; case 2:break; case 3:break; case 4:break; default:break; }break; default: switch(b){ case 1:break; case 2:break; case 3:break; case 4:break; default:break; }break; }
関数ポインタの配列でやれば一行
591 :
デフォルトの名無しさん :2010/05/25(火) 18:28:42
>>588 え??
8個じゃないんですか?
じゃぁ10×10×10のときは
caseを1000書くんですか??!?
そうですよ
593 :
デフォルトの名無しさん :2010/05/25(火) 18:31:00
全ての場合をかくならswitch多数使う意味なく、switch何て 1つで十分じゃないですか?
>>593 条件を一つのまとめられて、かつ、swtchを使いたいなら、それでいいんじゃないの
>>586 fが0と1の時とで1p側と2p側をそれぞれ描画させるため、f=0に1を足す感じです。
それでforループの中のfが0から1になったら board_x1 = 70+ZAHYOU_2P_X*f; を更新させたいんですが・・・。
>>593 お前みたいのはbreak書き忘れそうだからif文だけ使え
>>596 こうだろうね。
//board
int board_y1 = 100;
int board_x2 = board_x1+BLOCK_YOKO*7;
int board_y2 = board_y1+BLOCK_TATE*10;
for(int f=0; f<2; f++){
//boardの表示
int board_x1 = 70+ZAHYOU_2P_X*f;
DrawBox(board_x1,board_y1,board_x2,board_y2,black,false);
}
>>598 ありがとうございました。
forの中で更新すればいいんですね。
int board_x1 = 70+ZAHYOU_2P_X*f;
int board_y1 = 100;
int board_x2 = board_x1+BLOCK_YOKO*7;
int board_y2 = board_y1+BLOCK_TATE*10;
for(f=0; f<2; f++){
board_x1 +=ZAHYOU_2P_X*f;
board_x2 +=ZAHYOU_2P_X*f; //これがないと何故かboard_x2が更新されない
//hako
DrawBox(board_x1,board_y1,board_x2,board_y2,Color,false);
}
これでなんとかボードの座標を書きこむ場所を一箇所にまとめられそうです。