09/02/06 08:39:11
>>325
そのままかけてみたが正常に動作した
gccだと標準入力を促すところまで行くが
直後のsscanfでプログラムが終了してしまう
一応OSはXPです
327:318
09/02/06 08:44:17
>>323
交差する点2つありますよね。両方とも求めるんだと思います。
二分法のアルゴリズムは
Step 1
f (a) < 0 かつf (b) > 0(または, f (a) > 0 かつf (b) < 0)を満たす
ような変数a, b の値を設定し,十分小さい正数ε を設定する.
Step 2
c = (a + b)/2 とし,
f (c) = 0 であれば,【Step 3】に移る.
f (c) > 0 であれば,b をc で置き換える.
f (c) < 0 であれば,a をc で置き換える.
|a-b| < 2ε であれば,【Step 3】に移る.
Step 3
c を解とする.
という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
反復回数がそれを超えたら停止してほしいのですが・・。
328:デフォルトの名無しさん
09/02/06 11:30:38
>>324
sscanf(buf, "%d%lf%lf%lf",&(st[i].number),&(st[i].ascore),&(st[i].bscore),&(st[i].cscore));
で
"%d,%lf,%lf,%lf" に
329:デフォルトの名無しさん
09/02/06 12:48:40
>>327
> 二分法のアルゴリズムは
つまり、1セットの初期値からは、一つの解しか見つからないし・・・
xの式、f(x)=0になるxを探すワケだけど、f(a)とf(b)の符号が逆じゃなきゃいけないんだよね。
区間に二つ解があるということは、つまり、f(1)とf(-1)の符号はおんなじなわけだけど・・・?
> という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
> 反復回数がそれを超えたら停止してほしいのですが・・。
初期値が二つといっているのだから、解の一つごとに初期値をおくように思うが、両方0にしろと言う。
オレの知っているニュートン法ではないようだ。
330:デフォルトの名無しさん
09/02/06 13:28:17
にぶんほう?
331:デフォルトの名無しさん
09/02/06 14:24:29
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): URLリンク(www.logos.ic.i.u-tokyo.ac.jp)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2009年2月10日13:00まで
[5] その他の制限:特になし
ACM国際大学対抗プログラミングコンテスト国内予選2007問題Bです
既出だったらすまん
お頼みもうします
332:デフォルトの名無しさん
09/02/06 14:59:00
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:
333:デフォルトの名無しさん
09/02/06 15:08:21
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:
334:デフォルトの名無しさん
09/02/06 15:15:00
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク)
(1)区間演算ライブラリを作れ。(加減乗除のみでもOK)
(2)Gaussの消去法のプログラムを作り、それを区間演算化せよ
以上ですが、ソースコードのみでもかまいません
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:明日20時まで
[5] その他の制限: 特になし
335:デフォルトの名無しさん
09/02/06 15:25:11
>>334
> 以上ですが、ソースコードのみでもかまいません
ソースコード以外だと、何が付くの?
336:デフォルトの名無しさん
09/02/06 15:41:34
>>335 それだけじゃない
> [3.1] OS: (Windows/Linux/等々) [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
『等』・・・・こいつ相当のマニアか。
開発環境が書ききれないほど。ドンと来い。
> [3.3] 言語: (C/C++/どちらでも可 のいずれか)
pu-w
337:デフォルトの名無しさん
09/02/06 15:51:08
>>332
URLリンク(kansai2channeler.hp.infoseek.co.jp)
338:デフォルトの名無しさん
09/02/06 15:58:57
>>337
どうしようもない時以外に、goto使う奴は
どうしようもない奴だと思うぞ。
elseで全部つなげば解決じゃないですか。
339:デフォルトの名無しさん
09/02/06 16:13:48
>>331
素数を出すアルゴリズムがアレなのでめっちゃ遅いけど。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
340:デフォルトの名無しさん
09/02/06 16:23:22
>>338
>>332
URLリンク(kansai2channeler.hp.infoseek.co.jp)
341:デフォルトの名無しさん
09/02/06 16:24:18
>>338
しーっ・・・
342:338
09/02/06 16:30:32
>>341
これだけは言わせてくれ。>>340ネタ乙。
343:339
09/02/06 16:31:29
問題勘違いした…。
アジア地区予選の問題やってたorz
344:デフォルトの名無しさん
09/02/06 16:40:36
>>333
URLリンク(kansai2channeler.hp.infoseek.co.jp)
345:デフォルトの名無しさん
09/02/06 17:31:56
ちょっと漏れがあったようなので;;
[1] 授業単元:数値解析
[2] 問題文(含コード&リンク)
(1)区間演算ライブラリを作れ。(加減乗除のみでもOK)
(2)Gaussの消去法のプログラムを作り、それを区間演算化せよ
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:どちらでも可
[4] 期限:明日20時まで
[5] その他の制限: 特になし
346:313
09/02/06 20:57:11
>>324
>>328
324さんのプログラムを328さんの言うように修正してみたところ
データを読み込み、表示されるところまではいくのですが全ての数値が0になってしまいます。
どうすればいいでしょうか。。。
347:デフォルトの名無しさん
09/02/06 22:06:23
>>327
ニュートン法で100回も反復するとか時間の無駄だからな
初期値が悪くてもせいぜい10回だ
348:デフォルトの名無しさん
09/02/06 23:45:25
>>331
なんとなく、計算できているような気がする。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
349:デフォルトの名無しさん
09/02/07 04:11:05
>>348
関数とか要らないことに気づいたので、大分、短くなった。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
350:325
09/02/07 04:18:57
>>326
double total(Student st){
// return (st.ascore + st.bscore + st.cscore);
double a = (st.ascore + st.bscore + st.cscore);
return a;
}
>>346
// printf("%d%lf%lf%lf",&(st[i].number),&(st[i].ascore),&(st[i].bscore),&(st[i].cscore));
printf("%d%lf%lf%lf", (st[i].number), (st[i].ascore), (st[i].bscore), (st[i].cscore));
351:デフォルトの名無しさん
09/02/07 04:21:55
>>349
すごい短縮だな。(2階層くらいで関数化したら、もっと打ちやすかったんじゃ)
でも、元ファイルc++だろ? >>331はC指定かかってるよ。
352:デフォルトの名無しさん
09/02/07 04:33:39
>>351
C++ではないよ。-std=c99つけないとコンパイルできないけど。
353:デフォルトの名無しさん
09/02/07 04:48:34
>>352
「-std=c99つければ、gccでもコンパイルできるよ」かな?
354:325
09/02/07 04:54:11
>>326
double a;
do{
while((a=total(st[pl])) > x) pl++;
while((a=total(st[pr])) < x) pr--;
>>346 悪い、間違えた。君の言うとおりだ。
355:325
09/02/07 05:01:10
>>326
double a;
do{
pc = (pl + pr) / 2;
if((a=total(st[pc])) == key)
return pc;
else if((a=total(st[pc])) > key)
356:デフォルトの名無しさん
09/02/07 13:01:57
>>339>>343
>>348>>349
>>351->>353
有難うございます
アジア地区のもやってみたかったので助かりました
なんかテストいけそうな気がする
357:デフォルトの名無しさん
09/02/07 13:17:05
wwwwwwwwwwwwwwwwww
358:デフォルトの名無しさん
09/02/07 13:24:44
>>356
> なんかテストいけそうな気がする
ありえねー・・・
359:325
09/02/07 14:50:36
>>326
gcc -O3 8828.c -o 8828.exe
360:デフォルトの名無しさん
09/02/07 16:34:38
>>356
あるとおもいます。
361:デフォルトの名無しさん
09/02/07 16:48:39
??
362:デフォルトの名無しさん
09/02/07 17:06:55
説明しよう!
>起 >>356 いけそうな気が!
>承 >>358 ありえねー・・
>転 >>360 あると思います。
>結 >>361 ??
??に入る言葉を(ry
363:デフォルトの名無しさん
09/02/07 17:11:40
詩吟?
364:326
09/02/07 18:31:45
>>325
ありがとうございます。
Rankingの表示が出ないんですが簡単に治せますでしょうか。
365:326
09/02/07 18:42:21
return plにしたらできました!ありがとうございます。
366:325
09/02/07 18:55:07
え?return pl; って、何行目?参考までに。
367:326
09/02/07 19:58:10
50行目ですかね。。あれ違いますか><
368:325
09/02/07 20:17:42
Ranking#の値が、合ってれば良いけれど。
> Input A Student Number: 14【Enter】
> Ranking : #269 /*最高得点は1位とせよ.*/
尚こちらでは、>>350 上)の修正で直った。
369:324
09/02/07 20:24:17
こちらでも>>350の上の修正で
正常に動作することが確認できました
ちなみにどうして修正前では
正常に動作しなかったのか
理由は分かりますか?
370:325
09/02/07 20:26:57
わからない。回避方法は、ステップ実行してて見つけた。
371:324
09/02/07 20:32:53
そうですか
お手数おかけしました
ありがとうございました
372:326
09/02/07 21:28:36
URLリンク(kansai2channeler.hp.infoseek.co.jp)
このようにして実行するとRankingがすべて0になるんで、52行目のreturn -1;を
return -pr;に変えたところRankingが表示されました。(14のとき269位)
これで正常動作かなーと思ったんですが
例えば生徒番号1の動作みたところ表示される数値間違ってませんか?
373:デフォルトの名無しさん
09/02/07 21:38:07
return pl;を入れてなくて終了してたのは、
スタック領域のオーバーフローでセグメンテーション違反。
374:デフォルトの名無しさん
09/02/07 21:47:02
>>372
修正したソースを見せて。
375:326
09/02/07 21:52:26
URLリンク(kansai2channeler.hp.infoseek.co.jp)
これです。
376:デフォルトの名無しさん
09/02/07 23:22:19
>>375
mark_sortが変。
クイックソートやりたいんだろうけどできてない。
xを基準にして大小をわけてるけど
xがその境界にきてないから変なことになる。
mark_sortやめてqsort使ったら
377:デフォルトの名無しさん
09/02/07 23:36:39
>>376
こっちでは上手く動くようなのだけど、>>375のソースとの違いってあるかな?
URLリンク(www1.cts.ne.jp)
378:324
09/02/07 23:54:41
>>376
pivotの選び方に欠陥があることは承知しているが
最も単純な方法でクイックソートを作ったつもり
qsortを使わなかったのは問題にクイックソートを
使うよう指定されていたのでアルゴリズムを理解していることを
示す必要があると思ったから
その必要がなかったら確かにqsort関数を使った方が
高速にできると思う
379:デフォルトの名無しさん
09/02/08 00:26:38
>>377
double total(Student st); で3個の数値を合計している所が違う(追加)。
380:デフォルトの名無しさん
09/02/08 01:22:08
>>378 バグ取りの報酬として、cmp_doubleを使わなくては駄目な理由を調べて教えてくれ(取れてなかったらゴメンナサイ…)。
int cmp_double(double x, double y)
{
return x > y ? 1 : x < y ? -1 : 0;
}
void mark_sort(Student *st, int left, int right){
int pl = left;
int pr = right;
double x = total(st[(pl + pr) / 2]);
while(1){
while(cmp_double(total(st[pl]), x) > 0) pl++;
while(cmp_double(total(st[pr]), x) < 0) pr--;
if(pl >= pr){
break;
}
swap(st, pl, pr);
pl++;
pr--;
}
if(left < pl - 1) mark_sort(st, left, pl -1);
if(pr + 1 < right) mark_sort(st, pr + 1, right);
}
>>379
( ´_ゝ`)
381:379
09/02/08 02:08:20
>>380
while(1) はそのままにした。めんどうなので。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
382:379
09/02/08 02:18:25
報酬忘れてた。ヒント:
// while(total(st[pl]) > x) pl++;
while((total(st[pl]) > x) != ((a=total(st[pl])) > x)?printf("%d ",pl):printf(","),
((a=total(st[pl])) > x)) pl++;
383:デフォルトの名無しさん
09/02/08 02:27:13
>>381
一回呼び出し側の領域に入れると問題なしなのか!
384:326
09/02/08 03:09:16
できました!
色々とみなさんありがとうございました。
385:デフォルトの名無しさん
09/02/08 03:25:16
>>382
よく分からんが、ebpレジスタ同士の比較じゃないと上手く動作しないってこと?
386:385
09/02/08 03:35:07
これか……
URLリンク(0xcc.net)
ほとんどバグじゃねーか
387:デフォルトの名無しさん
09/02/08 10:40:59
このサイト前半おかしくね?
53*100=5299.9999999..になることだってあるだろ
388:デフォルトの名無しさん
09/02/08 11:42:07
>x86 特有のちょっとおもしろい現象
389:デフォルトの名無しさん
09/02/08 12:09:34
>>387
もう一度読んできて。
390:デフォルトの名無しさん
09/02/08 13:02:12
>>381
xに従ってplとprを移動しているループは、与えられた
st[left,right]を飛び出す可能性があるがその問題は放置?
391:デフォルトの名無しさん
09/02/08 13:18:07
ショートカットして、>>380 が正しいと?
392:sage
09/02/08 16:25:06
【質問テンプレ】
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):星型5角形(★)の面積を求めるプログラムを作成せよ。ただし、入力は*.txtファイルから行い、入力、計算は関数化すること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:cygwin1.5.25-15
[3.3] 言語:C
[4] 期限: ([2009年2月9日10:00まで]
[5] その他の制限:特にありませんが、動的メモリ確保(malloc関数)の勉強をしていました。
393:デフォルトの名無しさん
09/02/08 16:38:32
392です。
口頭で問題を言われただけなので問題文がなく、自分で書いたため、少し問題文にミスがありましたため、補足させてもらいます。
入力のtxtファイルには、時計回りに5つ(もしくは、6つ[6つ目は開始地点と同じ座標])の座標を入力することが条件となっております。
394:デフォルトの名無しさん
09/02/08 16:43:14
以下の問題についてですが、どうやって解いたらいいのでしょうか?
C言語
(問題)
ファイル xy2data.dat には,カンマで区切られた2つの整数データ(値は0以上5以下)が並んだ行が
何行か格納されている.
各行の最初の整数値をx,次の整数値をyとしてx-y座標上の点(x.y)をファイルの行数個考える.
これらの点と、点(4,4)との距離の2乗の値の度数分布を求め,頻度が3以上となる距離の2乗の値
をその値が小さいものから順にカンマで区切って出力するプログラムを作成せよ.
ファイルは
FILE *in_file;
in_file = fopen("xy2data.dat","r");
としてopenし,このファイルからデータを読み出す時は,
fscanf(in_file,"%d,%d",&x,&y);
として読み出せばよい.(xとyは整数型変数とする)
また,読み出しが終わったら,
fclose(in_file);
としてクローズすること.
395:デフォルトの名無しさん
09/02/08 17:04:39
>>392
星型の条件が分からん。
正確な五芒星なの?
396:デフォルトの名無しさん
09/02/08 17:27:59
正確な五芒星なら最初の2点分だけで面積判る罠
397:デフォルトの名無しさん
09/02/08 17:46:19
座標はこれでおねがいします
URLリンク(maps.google.co.jp)
398:デフォルトの名無しさん
09/02/08 17:49:00
392です。
星型の条件とはどういうことでしょう?><;
頂点5つの座標は
4.00000 0.00000
-3.23607 -2.35114
1.23607 3.80423
1.23607 -3.80423
-3.23607 2.35114
です。
答えになっているでしょうか・・・?
399:デフォルトの名無しさん
09/02/08 17:54:40
>>394 解いた
URLリンク(kansai2channeler.hp.infoseek.co.jp)
400:デフォルトの名無しさん
09/02/08 20:37:04
以下の文で教えて欲しいです。
memcpy(&byteData ,pTimData ,2 ); /* pTimDataからbyteDataへコピー */
byteData = byteData & 0x7c00; /*15bit分のマスクを掛ける。*/
byteData = byteData >> 12; /*12bit移動*/
read(byteData, bmpData, sizeof(short));/*処理後のデータを格納*/
/*次の2byeを格納するためループ。全て格納し終えたらループから抜け出す*/
memcpyでpTimDataからbyteDataへ2byte分切り出した後
論理積でマスクをかけビットシフトしたあと、bmpDataに格納するというものなのですが
このままだと2byte分だけbmpDataに格納して処理を終了してしまいます。
処理後の全pTimDataのデータをbmpDataを入れたいのですが、どのようなループ文を書いたらいいのでしょうか?
URLリンク(kansai2channeler.hp.infoseek.co.jp)
401:デフォルトの名無しさん
09/02/08 20:44:44
>>400
スレちがい。
どこぞ、質問スレへ行け
402:デフォルトの名無しさん
09/02/08 20:57:03
>>401
申し訳ない。
まんま丸投げじゃないと駄目なんですね。
失礼しました。
403:デフォルトの名無しさん
09/02/08 21:01:55
>399さん
記載ありがとうございます。
大変もうしわけありませんが、アップしていただいたURLにアクセスできないので、
本文中に記載していただけないでしょうか?
404:デフォルトの名無しさん
09/02/08 21:21:26
>>398
ごちゃごちゃしてるけど。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
#pragma warning(disable : 4996)の部分は消して使ってね
405:399
09/02/08 21:53:01
URLリンク(kansai2channeler.hp.infoseek.co.jp)
406:デフォルトの名無しさん
09/02/08 22:01:23
392です。
404さんありがとうございます!
ですが、コンパイルできるのですが、実行ができません><;
& gcc ファイル名.c
& a.exe input.txt
でコンパイル&実行をしたのですが、これではだめなのでしょうか?
↓input.txtの中身
4.00000 0.00000
-3.23607 -2.35114
1.23607 3.80423
1.23607 -3.80423
-3.23607 2.35114
407:デフォルトの名無しさん
09/02/08 22:03:19
連投すみません。392です。
実行は
& ./a.exe input.txt
の間違いです。
「./」を書き入れるのを忘れました^^;
408:デフォルトの名無しさん
09/02/08 22:14:55
>>406
プログラムで指定されているファイル名は、in.txtだからねえ・・・
409:デフォルトの名無しさん
09/02/08 22:15:27
int main(){
を
int main(int argc, char* argv){
read_points("in.txt",point);
を
read_points(argv[1],point);
でいくと思う
410:デフォルトの名無しさん
09/02/08 22:23:49
int main(int argc, char* argv[]){
か。ごめん!
411:デフォルトの名無しさん
09/02/08 22:28:49
408さんありがとうございます><助かりました。
412:デフォルトの名無しさん
09/02/08 22:42:10
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows XP
[3.3] 言語: C
[4] 期限: 2月9日12:00まで
よろしくお願いします。
413:デフォルトの名無しさん
09/02/08 22:46:32
>>412
「重複数」の定義は?
414:デフォルトの名無しさん
09/02/08 22:52:00
>>412
クソな課題だな。
int a[x]をmallocで確保してa[ key % x]++して
全部終わったらa[k]が2以上の数を数えてxを掛ける
これの繰り返し?上限は「入力されたうちの最大値+1」か?
415:デフォルトの名無しさん
09/02/08 23:02:27
>>414
それだとx=1が常に最適になるので、本当のクソになる。
a[k]の大きさも加味すべきだろう。
416:デフォルトの名無しさん
09/02/08 23:09:18
>>413>>414
何も言われてないので分からないです。
417:デフォルトの名無しさん
09/02/08 23:59:23
>>412
keyは一意でいいんだよね?
418:デフォルトの名無しさん
09/02/09 00:15:55
>>412
URLリンク(kansai2channeler.hp.infoseek.co.jp)
バケットの要素数count[i]が2以上であるバケットiについて、Σcount[i]!/2を「要素数」とした。count[i]!/2は、バケットから2要素を選ぶ組み合わせ数。
また、バケット数の上限は、(最大のkey)+1とした。
419:418
09/02/09 00:23:02
ごめん、思いっきり勘違いを書いた。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
バケットから2要素を選ぶ組み合わせ数はcount[i]*(count[i]-1)/2だね。
420:デフォルトの名無しさん
09/02/09 02:24:55
[1]C言語中級
[2]問題文:
UNIXなどのオペレーティングシステムで使用されているファイル名称慣用表示を正式表示に変換する。
標準入力から慣用表示を含む表記を正式表記に変換して標準出力に出力すること
先頭文字が.の場合はカレントディレクトリ下のファイル名とすること
例:カレントディレクトリ=/home/test
/usr/bin/ls ===> /usr/bin/ls
/usr/bin/local/sbin/tmp/../localls ==> /usr/bin/local/sbin/localls
/usr/./tmp==>/usr/tmp
./program/source ==>/home/test/program/source
../../home/sample ==>/home/sample
../../../home/sample==>/home/sample
.../test==>/test
./sample/test/...../test==>/test
./bin/../../../.. ==>/
[3]
linux gcc (Windowsでも可)
C言語
[4] ★木曜日の正午までに提出
★標準的な書式(行内マルチステートメント禁止)で250行以内
★再帰呼び出しは使用禁止
★グローバル変数使用禁止
★パス名の長さは制限無しとする
初級コースが満杯なので、中級コースをとって
しまったら、課題レポートが自分には激ムズでした。
自分でやってみたら収拾がつかなくなってしまいました。
期限までわずかに時間はありますが、できれば一両日中に何と
かお願いします。