C言語なら俺に聞け(入門編)Part 64

このエントリーをはてなブックマークに追加
501デフォルトの名無しさん
>>498
ゆえにと言われても。

円周率≒3.1415926535897932384626433832795
ゆえに、円周率を10進数で表すと0が現れない。

とか?
502デフォルトの名無しさん:2010/05/24(月) 20:20:48
>>501
総当りの結果に対してその反応ですか。
逆に、もっと試行回数を増やせばそのうちならされるのではないかという考え?
503デフォルトの名無しさん:2010/05/24(月) 20:21:35
>>501
ちょwwwあたまわるいwww
504デフォルトの名無しさん:2010/05/24(月) 20:21:42
ああ、そういうことね。
じゃあ、>>486で。
505デフォルトの名無しさん:2010/05/24(月) 20:23:21
>>501
総当りで統計をとって、偏りがあることが明白になり、また偏りのない手法もみつかっているのに、その反応ですか?
506デフォルトの名無しさん:2010/05/24(月) 20:26:21
バグ取りしただけで鬼の首を取ったように喜んでる奴
507デフォルトの名無しさん:2010/05/24(月) 20:29:22
というと>>503ぐらいか。
あとはバグに気付かず、指摘に対して馬鹿だアホだとわめいてるのが、、複数いたの?もしかして。
508デフォルトの名無しさん:2010/05/24(月) 20:30:54
ところで、

int x = rand()%i;

だと0除算が起こるんじゃないの?
509デフォルトの名無しさん:2010/05/24(月) 20:34:45
逃げたなww
510デフォルトの名無しさん:2010/05/24(月) 20:35:30
一般的なアルゴリズムでもコピペしろってことですね
511デフォルトの名無しさん:2010/05/24(月) 20:37:41
偏りに気付きにくいバグの方が困るといえば困るけど、まぁ、どっちもどっちだろこれ
512478≠498, 499:2010/05/24(月) 20:38:08
>>506
いや、これは雑感なんですが、デスマーチプロジェクトの終盤になると、バグをみつけた人間がやたらと偉くなって評価が高くなり、
多少のバグがあるにせよ、こつこつとロジックを積み上げてきた人間を踏み潰してしまうことが多々あるんですよ。
そういう実例を目の当たりにしているので >>506 にちょっと共感しています。

>>491, >>495
崩れてはいけません。
513デフォルトの名無しさん:2010/05/24(月) 20:41:46
マ板でやれ
514デフォルトの名無しさん:2010/05/24(月) 20:42:42
けんかすんなよまったく
515デフォルトの名無しさん:2010/05/24(月) 20:52:51
>>512
>>499は俺だけど、別にいいや。
516デフォルトの名無しさん:2010/05/24(月) 21:01:09
>>486をコビペしてやってみたらs[2]に0が入るんだけどなんで?
517デフォルトの名無しさん:2010/05/24(月) 21:16:54
>>515
すみません。ちょっと誤解をまねく書き方でしたね。私は >>499>>498 のようなしっかりした論拠をもっていない、ただの >>478 という意味でした。
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;
}
519デフォルトの名無しさん:2010/05/24(月) 21:33:53
>>509
ばーーーか。
520デフォルトの名無しさん:2010/05/24(月) 21:59:25
>>512のレスが最大の収穫。
521デフォルトの名無しさん:2010/05/24(月) 22:35:04
俺は本番稼働前にバグ見つけて袋叩きにあったが。
俺のところがブラックなだけかな。
522デフォルトの名無しさん:2010/05/24(月) 22:39:32
それはテストを誰がやってるかによるな
523デフォルトの名無しさん:2010/05/24(月) 23:28:31
>>518
ありがとうございました
524デフォルトの名無しさん:2010/05/25(火) 00:08:56
普通はfor(i =0;i<unko;i++)なのに
for(i=0;<i> って書いてる人が居たんだ
何この表記
525デフォルトの名無しさん:2010/05/25(火) 00:10:33
バグ
526デフォルトの名無しさん:2010/05/25(火) 00:13:20
>>524
河童の顔文字
527デフォルトの名無しさん:2010/05/25(火) 00:14:08
>>524
manko
528デフォルトの名無しさん:2010/05/25(火) 01:02:50
座標における(x,y)がy>1、y<x-1にあるとき、真として1を出すプログラムって
どうするんですか?
printf("%d\n",1<y<x-1);でいいんですか?
529デフォルトの名無しさん:2010/05/25(火) 01:06:20
いいよ
530デフォルトの名無しさん:2010/05/25(火) 01:08:47
>>528
そのまんま (y > 1) && (y < x - 1) だろ。
そのコードだと (1 < y) < x - 1 になってしまう。
531デフォルトの名無しさん:2010/05/25(火) 01:18:35
答えてくれてありがとうございます&&使うんですねやっぱり・・
あのーもうひとつすいません。グラフ範囲はy>√2かつy<x-1でした。
√使うとコンパイルエラーでるんですが・・・
532デフォルトの名無しさん:2010/05/25(火) 01:19:45
正しく書けばエラーが出るはずがない
533デフォルトの名無しさん:2010/05/25(火) 01:20:34
534464:2010/05/25(火) 01:27:00
みなさんありがとうございます
今起きたら、たくさんレスがついててビックリしました
勉強になりました
535デフォルトの名無しさん:2010/05/25(火) 01:30:42
>>533
すげぇwwその機能ww
ありがとうw

まじで助かった。
√は使えないんだね。
536デフォルトの名無しさん:2010/05/25(火) 01:44:13
3桁の整数を桁ごとに切り出して他の変数に格納するにはどうすればいいですか?
int num=123;
から
int a[0]=1;
int a[1]=2;
int a[2]=3;
というような具合です
537デフォルトの名無しさん:2010/05/25(火) 01:45:34
>>536 / 10 % 10
538デフォルトの名無しさん:2010/05/25(火) 02:00:14
>>537
さんくす
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)入れたら偽だった・・何故だ
>=ってあるから等しいときも含まれるので真だろ。何故だ・・・
540デフォルトの名無しさん:2010/05/25(火) 02:20:51
>>539
scanf() で式の解釈〜計算などはできない。あと、戻り値チェックしとけ。
541デフォルトの名無しさん:2010/05/25(火) 02:22:12
>539
1/2 -> 0 -> 0.
(int)/(int) -> (int) -> (double)
542デフォルトの名無しさん:2010/05/25(火) 02:34:34
それじゃ通じないでしょ。通じさせる気がないんだろうけど。
543デフォルトの名無しさん:2010/05/25(火) 02:38:19
王様、馬鹿には通じない文です
544デフォルトの名無しさん:2010/05/25(火) 02:47:50
1/2 が 0.5 だという誤解。 1/2 は 0 です。スレ見てないけど。
545デフォルトの名無しさん:2010/05/25(火) 02:54:57
>>540>>541さんレスありがとうございます。
しかし一体どういうことでしょうか?floatがまずいのかな?
どうしてもx≧√3において√3の場合真と出したいんだが。
あと戻り値チェックとはなんでしょう?
546デフォルトの名無しさん:2010/05/25(火) 02:57:50
まずいのは入門書も読んでないレベルの頭です
547544:2010/05/25(火) 02:58:41
まだ、1/2 が 0.5 だと思ってるのか、それが間違ってる。
548デフォルトの名無しさん:2010/05/25(火) 03:11:34
>>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;
}
--ここまで--
549デフォルトの名無しさん:2010/05/25(火) 03:12:13
>>545
いったいキーボードから何を入力したのですか?
550デフォルトの名無しさん:2010/05/25(火) 03:13:51
>>543>>544>>546>>547レスありがとうございます。
そもそもxに代入するとき分数やpow自体代入できません。
scanfにおいてx,y二つ代入するとき、xにpowや分数を代入すると
yを代入できないまま終わります。これだと√3という境界を
含むように√3を代入できなければ困るのですが・・・・・
誰か分かりますか?
551デフォルトの名無しさん:2010/05/25(火) 03:16:43
>>539
pow(3, 1/2);
ではなくて、
pow(3, 0.5);
とか
pow(3, 1.0 / 2.0);
とかく。理由は入門書をみてくだしゃあ。
552デフォルトの名無しさん:2010/05/25(火) 03:18:11
>>550
では、キーボードからどういうふうに入力するのを想定しているのですか?
553544:2010/05/25(火) 03:19:40
>>540 後半はいいこと書いてるけど、前半はマクラ言葉だから意味は無い。視力0.5て書いとけ一応。
540 :デフォルトの名無しさん :2010/05/25(火) 02:20:51
>>539
scanf() で式の解釈〜計算などはできない。あと、戻り値チェックしとけ。
554デフォルトの名無しさん:2010/05/25(火) 03:48:59
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を交換して・・・という方法です
555デフォルトの名無しさん:2010/05/25(火) 03:52:41
なんでわざわざ2次元か、1次元配列でいいのでは?
556554:2010/05/25(火) 03:54:05
>>555
そうですね・・・
1次元配列でもいいです
557デフォルトの名無しさん:2010/05/25(火) 03:57:41
二次元を一次元に並べなおしてから、また二次元に戻すで、いいにか?
558デフォルトの名無しさん:2010/05/25(火) 03:57:45
>>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
559デフォルトの名無しさん:2010/05/25(火) 03:59:34
>>557
2次元変換しなくても大丈夫です
1次元配列だけで

よろしくお願いします
560デフォルトの名無しさん:2010/05/25(火) 04:00:55
よろしく
561デフォルトの名無しさん:2010/05/25(火) 04:01:29
おねがい
562デフォルトの名無しさん:2010/05/25(火) 04:02:44
致します
563デフォルトの名無しさん:2010/05/25(火) 04:06:36
ので
564デフォルトの名無しさん:2010/05/25(火) 04:07:16
どうか
565デフォルトの名無しさん:2010/05/25(火) 04:08:54
ーーーーーーーーーーーーーーーーーーー
宿題は宿題スレで
566デフォルトの名無しさん:2010/05/25(火) 04:12:27
お願いします
567デフォルトの名無しさん:2010/05/25(火) 04:22:24
「キューソート」で検索 qsort
568デフォルトの名無しさん:2010/05/25(火) 04:25:41
0が最終的にあそこに収まるっていうところで、これは普通の代数学ではないのかもしれないよ
569デフォルトの名無しさん:2010/05/25(火) 04:29:52
>>568
>>540 だろ。
1.0/2.0 = 0.5
1/2 = 0 ... 1
1./2 ?
1/2. ?
570デフォルトの名無しさん:2010/05/25(火) 04:54:54
>>554
ただのソートじゃない?
571デフォルトの名無しさん:2010/05/25(火) 05:04:51
ちがうよ。>>554のソート後の話。
572デフォルトの名無しさん:2010/05/25(火) 05:21:24
>>554
確かに0が最後だとめんどくさい
573デフォルトの名無しさん:2010/05/25(火) 05:30:32
>>552
みなさんありがとうございます。そうですね
>>552それが真理ですね・・・√はプログラム上では
無限に少数位が続くから、√3の収束値求めるの無理ですよね。
574デフォルトの名無しさん:2010/05/25(火) 05:43:01
3の0乗計算してるって
575554: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;

}
}
576デフォルトの名無しさん:2010/05/25(火) 06:51:55
>>575
ループ回数とか、実行結果とか。
なんか、いろいろ怪しい感じがするけど、大丈夫か?
577デフォルトの名無しさん:2010/05/25(火) 07:02:12
>>576
汚いかもしれません・・・
でも、ちゃんと動いてるので
578デフォルトの名無しさん:2010/05/25(火) 07:24:07
>>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)が入っている。※論理バグの可能性。
579デフォルトの名無しさん:2010/05/25(火) 07:27:56
>>578
int nu[]={2,8,5,1,7,6,3};
じゃなくて
int nu[]={2,8,5,1,7,6,3,4};
でした・・・
見てくれてありがとうございます
580デフォルトの名無しさん:2010/05/25(火) 11:47:55
自力でやる質問者は珍しい
581デフォルトの名無しさん:2010/05/25(火) 12:33:00
回答者側にまわるのも時間の問題。
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");
}
584デフォルトの名無しさん:2010/05/25(火) 17:01:29
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 と書くしかないのでしょうか。

585デフォルトの名無しさん:2010/05/25(火) 17:01:45
>>581
同意してやる。
586デフォルトの名無しさん:2010/05/25(火) 18:02:38
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個で済むのかどうなんでしょうか?
簡単な例でお願いします
588デフォルトの名無しさん:2010/05/25(火) 18:18:24
>>587
15個だな。書くのは面倒だが。
589デフォルトの名無しさん:2010/05/25(火) 18:23:10
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;
}
590デフォルトの名無しさん:2010/05/25(火) 18:28:12
関数ポインタの配列でやれば一行
591デフォルトの名無しさん:2010/05/25(火) 18:28:42
>>588
え??
8個じゃないんですか?
じゃぁ10×10×10のときは
caseを1000書くんですか??!?
592デフォルトの名無しさん:2010/05/25(火) 18:29:23
そうですよ
593デフォルトの名無しさん:2010/05/25(火) 18:31:00
全ての場合をかくならswitch多数使う意味なく、switch何て
1つで十分じゃないですか?
594デフォルトの名無しさん:2010/05/25(火) 18:32:01
>>591
caseは729個でいいよ。
595デフォルトの名無しさん:2010/05/25(火) 18:34:49
>>593
条件を一つのまとめられて、かつ、swtchを使いたいなら、それでいいんじゃないの
596デフォルトの名無しさん:2010/05/25(火) 18:35:09
>>586
fが0と1の時とで1p側と2p側をそれぞれ描画させるため、f=0に1を足す感じです。

それでforループの中のfが0から1になったら board_x1 = 70+ZAHYOU_2P_X*f; を更新させたいんですが・・・。
597デフォルトの名無しさん:2010/05/25(火) 18:35:47
>>593
お前みたいのはbreak書き忘れそうだからif文だけ使え
598デフォルトの名無しさん:2010/05/25(火) 18:43:59
>>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);
}
599デフォルトの名無しさん:2010/05/25(火) 18:57:05
>>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);
}

これでなんとかボードの座標を書きこむ場所を一箇所にまとめられそうです。
600デフォルトの名無しさん:2010/05/25(火) 19:00:48
>>597
かす