[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/13 08:24 / Filesize : 133 KB / Number-of Response : 421
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C/C++の宿題片付けます 122代目



1 名前:デフォルトの名無しさん [2009/01/15(木) 23:21:27 ]
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
【過去ログ検索】        chomework.sakura.ne.jp/
【wiki】               www23.atwiki.jp/homework/

前スレ
C/C++の宿題を片付けます 121代目
pc11.2ch.net/test/read.cgi/tech/1230678123/

313 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 20:23:27 ]
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
データファイル(kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8827.txt) には,1000 人の「学籍番号,科目A,科目B,科目C の各点数」が学籍番号順に並んでいる.
そのデータファイルを元に,キーボードから入力された学籍番号の学生の成績(含:3科目の合計点の順位)を表示するプログラムを作れ.
探索は二分探索を使い,ソートにはクイックソートを使うこと.
合計点が同じになる学生はいないということは既知とせよ.
学籍番号が存在しない場合は,”No data ”と表示するようにせよ.
表示は以下のようにせよ.

Input A Student Number: 14【Enter】

Ranking : #269 /*最高得点は1位とせよ.*/
Subject A : 86
Subject B : 59.1
Subject C : 220.42
Total : 365.52
[3] 環境
 [3.1] OS:Win
 [3.2] gcc
 [3.3] C
[4] 2月6日23:59

おねがいします。

314 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 21:03:57 ]
>>312
#include<stdio.h>
#include<string.h>

int main(void){
int c, i;
char history[4*2]="";

for(i=0;(c=getchar())!=EOF;i++){
history[i%4]=history[(i%4)+4]=c;
printf("%c", c);
if(strncmp(&history[(i+1)%4], "tion", 4)==0) break;
}
return 0;
}

315 名前:305 mailto:sage [2009/02/05(木) 21:07:49 ]
上のプログラムに、入力列としてt、i、o、nの並びが与えられた場合にも入力を終了する機能を追加せよ
例 This is important information for me! の場合 This is important informaと出力
This scene is romantic の場合 This scene is romantic (tionの並びでないのでそのまま出力)

上のプログラムに、入力列としてt、i、o、nの並びが与えられた場合にも入力を終了する機能を追加せよ
例 This is important information for me! の場合 This is important informationと出力
This scene is romantic の場合 This scene is romantic (tionの並びでないのでそのまま出力)

316 名前:305 mailto:sage [2009/02/05(木) 23:50:36 ]
>>314 その手があったか。参ったのでソース貼り付け。
#include<stdio.h>

#define LEN 4
char tion[LEN + 1] = "tion";

int main(void)
{
  int c = '\0', k = 0;

  while ((c = getchar()) != EOF && k < LEN) {
    if (c == tion[0])
      k = 1;
    else if (k > 0) {
      if (c == tion[k])
        k++;
      else
        k = 0;
    }
    putchar(c);
  }
  return 0;
}

317 名前:301 mailto:sage [2009/02/06(金) 00:46:55 ]
皆さんありがとうございました

318 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 02:48:49 ]
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
ニュートン法と二分法の両方を用いて,直線y = x + 1/2 と単位円
x2 + y2 = 1 の交点の座標の近似解(小数点以下第6位まで)を求めよ.
1つのプログラムに書くこと(ニュートン法と二分法に関する箇所はmain
関数から独立させよ)
ニュートン法も二分法もともに何回で収束したかが分かるようせよ.
関数へのポインタは必ず使うこと.
表記は例えば以下のようにすること:

Newton method:
Lower part: count : ????
sol :( ?????, ????? )
Upper part: count : ????
sol :( ?????, ????? )

二分法で用いる初期値は[a,b]= [-1,1]とせよ
ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
収束しない.収束しない場合は,求められないと分かった時点で計算を終了
するように工夫せよ.また,そのときは以下のように表記せよ.
sol : Not converge
収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
[3] 環境
 [3.1] OS: windows
 [3.2]gcc
 [3.3] 言語: C
[4] 2月6日の夜まで

期限がせまっていて申し訳ありませんが自分でできなかったためよろしくおねがいします><

319 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:27:02 ]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *crypt(const char *key, const char *salt);
#define MAXLEN 16
#define TRIPLEN 10
#define PATH "trip.out"
typedef unsigned char uchar;
int get_saltc_old(uchar c){
if(c < '.' || c > 'z') return '.';
if(c >= ':' && c <= '@') return c - ':' + 'A'; // :;<=>?@ - ABCDEFG
if(c >= '[' && c <= '`') return c - '[' + 'a'; // [\]^_` - abcdef
return c;
}
int gen_trip(uchar *o, int n, uchar *w){
uchar sal[3];
uchar *t;
sal[0] = get_saltc_old(n > 1 ? w[1] : 'H');
sal[1] = get_saltc_old(n > 2 ? w[2] : '.');
sal[2] = '\0';
t = crypt(w, sal);
strncpy(o, t + strlen(t) - TRIPLEN, TRIPLEN);
return 0;
}


320 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:34:04 ]
int gen_combination(uchar *o, int n, int m, uchar *pos){
int i;
for(i = 0; i < n; i++) o[i] = pos[i];
for(i = n - 1; i >= 0; i--){
if(pos[i] < m - 1){
pos[i]++;
return 1;
}else{
pos[i] = 0;
}
}
return 0;
}
int gen_word_list(uchar *w, int n, int m, uchar *s){
static uchar *pos = NULL;
int i;
if(!pos){
pos = (uchar *)malloc(sizeof(uchar) * n);
for(i = 0; i < n; i++) pos[i] = 0;
}
if(gen_combination(w, n, m, pos)){
for(i = 0; i < n; i++) w[i] = s[w[i]];
w[n] = '\0';
return 1;
}
if(pos){
free(pos);
pos = NULL;
}
w[0] = '\0';
return 0;
}

321 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:34:39 ]
int sout(char *path, char *s, int f){
FILE *fp;
if(f)
if((fp = fopen(path, "ab+")) != NULL){
fprintf(fp, "%s\n", s);
fclose(fp);
}
fprintf(stdout, "%s\n", s);
return 0;
}
int scantrip(int n, int m, uchar *s, uchar *f){
uchar *w, *t;
char buf[4096];
w = (uchar *)malloc(sizeof(uchar) * n + 1); w[n] = '\0';
t = (uchar *)malloc(sizeof(uchar) * TRIPLEN + 1); t[TRIPLEN] = '\0';
sprintf(buf, "'%s' in len %d", f, n); sout(PATH, buf, 1);
while(gen_word_list(w, n, m, s)){
gen_trip(t, n, w);
int b = n - 2;
if(w[n - 1] == '.' && (w[b] == '.' || w[b] == 'U')){ sprintf(buf, "%4d #%s %s %s", n, w, "----------------------------------------", t); sout(PATH, buf, 0); }
if(strstr(t, f)){ sprintf(buf, "%4d #%s %s", n, w, t); sout(PATH, buf, 1); }
}
if(t) free(t);
if(w) free(w);
return 0;
}



322 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 03:35:06 ]
int main(int ac, char *av[]){
uchar *s="./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
uchar *f="Linux";
int i;
for(i = 1; i < MAXLEN; i++) scantrip(i, strlen(s), s, f);
return 0;
}

323 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 05:07:28 ]
>>318
> 二分法で用いる初期値は[a,b]= [-1,1]とせよ
その間に、解が二つある気がする。

> ニュートン法で用いる初期値は2つとも0とせよ。その際,1つの関数は
> 収束しない.収束しない場合は,求められないと分かった時点で計算を終了
> するように工夫せよ.また,そのときは以下のように表記せよ.
> sol : Not converge
> 収束しない場合は,なぜ収束しないのかをコメントとして書くこと.
オレの知らないニュートン法?

324 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 05:54:45 ]
>>313をやってみたんだけど
gccだと動作がおかしい
VCだと正常に動く
誰か原因を教えてくれ・・・・orz

gcc
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8828.c

VC
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8829.txt

325 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:25:43 ]
8828.c をVCに掛けてみたらどうなる。

326 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 08:39:11 ]
>>325
そのままかけてみたが正常に動作した

gccだと標準入力を促すところまで行くが
直後のsscanfでプログラムが終了してしまう
一応OSはXPです

327 名前:318 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 12:48:40 ]
>>327
> 二分法のアルゴリズムは
つまり、1セットの初期値からは、一つの解しか見つからないし・・・
xの式、f(x)=0になるxを探すワケだけど、f(a)とf(b)の符号が逆じゃなきゃいけないんだよね。
区間に二つ解があるということは、つまり、f(1)とf(-1)の符号はおんなじなわけだけど・・・?

> という感じらしいです。ニュートン法は反復の限界値を決めて(100回くらいに)
> 反復回数がそれを超えたら停止してほしいのですが・・。
初期値が二つといっているのだから、解の一つごとに初期値をおくように思うが、両方0にしろと言う。
オレの知っているニュートン法ではないようだ。

330 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 13:28:17 ]
にぶんほう?

331 名前:デフォルトの名無しさん [2009/02/06(金) 14:24:29 ]
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): www.logos.ic.i.u-tokyo.ac.jp/icpc2007/jp/index.html
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限: 2009年2月10日13:00まで
[5] その他の制限:特になし
ACM国際大学対抗プログラミングコンテスト国内予選2007問題Bです
既出だったらすまん
お頼みもうします



332 名前:デフォルトの名無しさん [2009/02/06(金) 14:59:00 ]
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8831.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:

333 名前:デフォルトの名無しさん [2009/02/06(金) 15:08:21 ]
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8832.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: ([2009年02月07日20:00まで]
[5] その他の制限:

334 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:25:11 ]
>>334
> 以上ですが、ソースコードのみでもかまいません
ソースコード以外だと、何が付くの?

336 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:51:08 ]
>>332
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8833.txt

338 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 15:58:57 ]
>>337
どうしようもない時以外に、goto使う奴は
どうしようもない奴だと思うぞ。

elseで全部つなげば解決じゃないですか。

339 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:13:48 ]
>>331
素数を出すアルゴリズムがアレなのでめっちゃ遅いけど。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8834.c

340 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:23:22 ]
>>338
>>332
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8835.txt

341 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 16:24:18 ]
>>338
しーっ・・・



342 名前:338 mailto:sage [2009/02/06(金) 16:30:32 ]
>>341
これだけは言わせてくれ。>>340ネタ乙。

343 名前:339 mailto:sage [2009/02/06(金) 16:31:29 ]
問題勘違いした…。
アジア地区予選の問題やってたorz

344 名前:デフォルトの名無しさん [2009/02/06(金) 16:40:36 ]
>>333
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8836.txt

345 名前:デフォルトの名無しさん [2009/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 mailto:sage [2009/02/06(金) 20:57:11 ]
>>324
>>328
324さんのプログラムを328さんの言うように修正してみたところ
データを読み込み、表示されるところまではいくのですが全ての数値が0になってしまいます。
どうすればいいでしょうか。。。

347 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 22:06:23 ]
>>327
ニュートン法で100回も反復するとか時間の無駄だからな
初期値が悪くてもせいぜい10回だ

348 名前:デフォルトの名無しさん mailto:sage [2009/02/06(金) 23:45:25 ]
>>331
なんとなく、計算できているような気がする。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8838.c

349 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:11:05 ]
>>348
関数とか要らないことに気づいたので、大分、短くなった。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8839.c

350 名前:325 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:21:55 ]
>>349
すごい短縮だな。(2階層くらいで関数化したら、もっと打ちやすかったんじゃ)
でも、元ファイルc++だろ? >>331はC指定かかってるよ。



352 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:33:39 ]
>>351
C++ではないよ。-std=c99つけないとコンパイルできないけど。

353 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 04:48:34 ]
>>352
「-std=c99つければ、gccでもコンパイルできるよ」かな?

354 名前:325 mailto:sage [2009/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 mailto:sage [2009/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 名前:デフォルトの名無しさん [2009/02/07(土) 13:01:57 ]
>>339>>343
>>348>>349
>>351->>353
有難うございます
アジア地区のもやってみたかったので助かりました
なんかテストいけそうな気がする

357 名前:デフォルトの名無しさん [2009/02/07(土) 13:17:05 ]
wwwwwwwwwwwwwwwwww

358 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 13:24:44 ]
>>356
> なんかテストいけそうな気がする
ありえねー・・・

359 名前:325 mailto:sage [2009/02/07(土) 14:50:36 ]
>>326
gcc -O3 8828.c -o 8828.exe

360 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:34:38 ]
>>356
あるとおもいます。

361 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 16:48:39 ]
??



362 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:06:55 ]
説明しよう!
>起 >>356 いけそうな気が!
>承 >>358 ありえねー・・
>転 >>360 あると思います。
>結 >>361 ??
??に入る言葉を(ry

363 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 17:11:40 ]
詩吟?

364 名前:326 mailto:sage [2009/02/07(土) 18:31:45 ]
>>325
ありがとうございます。
Rankingの表示が出ないんですが簡単に治せますでしょうか。

365 名前:326 mailto:sage [2009/02/07(土) 18:42:21 ]
return plにしたらできました!ありがとうございます。

366 名前:325 mailto:sage [2009/02/07(土) 18:55:07 ]
え?return pl; って、何行目?参考までに。

367 名前:326 mailto:sage [2009/02/07(土) 19:58:10 ]
50行目ですかね。。あれ違いますか><

368 名前:325 mailto:sage [2009/02/07(土) 20:17:42 ]
Ranking#の値が、合ってれば良いけれど。
> Input A Student Number: 14【Enter】
> Ranking : #269 /*最高得点は1位とせよ.*/

尚こちらでは、>>350 上)の修正で直った。

369 名前:324 mailto:sage [2009/02/07(土) 20:24:17 ]
こちらでも>>350の上の修正で
正常に動作することが確認できました

ちなみにどうして修正前では
正常に動作しなかったのか
理由は分かりますか?

370 名前:325 mailto:sage [2009/02/07(土) 20:26:57 ]
わからない。回避方法は、ステップ実行してて見つけた。

371 名前:324 mailto:sage [2009/02/07(土) 20:32:53 ]
そうですか
お手数おかけしました
ありがとうございました



372 名前:326 mailto:sage [2009/02/07(土) 21:28:36 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8842.txt
このようにして実行するとRankingがすべて0になるんで、52行目のreturn -1;を
return -pr;に変えたところRankingが表示されました。(14のとき269位)
これで正常動作かなーと思ったんですが
例えば生徒番号1の動作みたところ表示される数値間違ってませんか?

373 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:38:07 ]
return pl;を入れてなくて終了してたのは、
スタック領域のオーバーフローでセグメンテーション違反。

374 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 21:47:02 ]
>>372
修正したソースを見せて。


375 名前:326 mailto:sage [2009/02/07(土) 21:52:26 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8843.txt
これです。

376 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:22:19 ]
>>375
mark_sortが変。
クイックソートやりたいんだろうけどできてない。
xを基準にして大小をわけてるけど
xがその境界にきてないから変なことになる。

mark_sortやめてqsort使ったら


377 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:36:39 ]
>>376
こっちでは上手く動くようなのだけど、>>375のソースとの違いってあるかな?
www1.cts.ne.jp/~clab/hsample/Sort/Sort9.html

378 名前:324 mailto:sage [2009/02/07(土) 23:54:41 ]
>>376
pivotの選び方に欠陥があることは承知しているが
最も単純な方法でクイックソートを作ったつもり

qsortを使わなかったのは問題にクイックソートを
使うよう指定されていたのでアルゴリズムを理解していることを
示す必要があると思ったから
その必要がなかったら確かにqsort関数を使った方が
高速にできると思う

379 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:26:38 ]
>>377
double total(Student st); で3個の数値を合計している所が違う(追加)。

380 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/02/08(日) 02:08:20 ]
>>380
while(1) はそのままにした。めんどうなので。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8844.txt



382 名前:379 mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 02:27:13 ]
>>381
一回呼び出し側の領域に入れると問題なしなのか!

384 名前:326 mailto:sage [2009/02/08(日) 03:09:16 ]
できました!
色々とみなさんありがとうございました。

385 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 03:25:16 ]
>>382
よく分からんが、ebpレジスタ同士の比較じゃないと上手く動作しないってこと?

386 名前:385 mailto:sage [2009/02/08(日) 03:35:07 ]
これか……
0xcc.net/blog/archives/000164.html
ほとんどバグじゃねーか

387 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 10:40:59 ]
このサイト前半おかしくね?
53*100=5299.9999999..になることだってあるだろ

388 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:42:07 ]
>x86 特有のちょっとおもしろい現象


389 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 12:09:34 ]
>>387
もう一度読んできて。

390 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:02:12 ]
>>381
xに従ってplとprを移動しているループは、与えられた
st[left,right]を飛び出す可能性があるがその問題は放置?

391 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 13:18:07 ]
ショートカットして、>>380 が正しいと?



392 名前:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:38:32 ]
392です。
口頭で問題を言われただけなので問題文がなく、自分で書いたため、少し問題文にミスがありましたため、補足させてもらいます。
入力のtxtファイルには、時計回りに5つ(もしくは、6つ[6つ目は開始地点と同じ座標])の座標を入力することが条件となっております。


394 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:04:39 ]
>>392
星型の条件が分からん。
正確な五芒星なの?

396 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:27:59 ]
正確な五芒星なら最初の2点分だけで面積判る罠

397 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:46:19 ]
座標はこれでおねがいします
maps.google.co.jp/maps?ll=41.796944,140.756643&t=h&z=16


398 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:54:40 ]
>>394 解いた
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8845.txt

400 名前:デフォルトの名無しさん [2009/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を入れたいのですが、どのようなループ文を書いたらいいのでしょうか?

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8847.txt

401 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:44:44 ]
>>400
スレちがい。
どこぞ、質問スレへ行け



402 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 20:57:03 ]
>>401
申し訳ない。
まんま丸投げじゃないと駄目なんですね。
失礼しました。

403 名前:デフォルトの名無しさん [2009/02/08(日) 21:01:55 ]
>399さん

記載ありがとうございます。
大変もうしわけありませんが、アップしていただいたURLにアクセスできないので、
本文中に記載していただけないでしょうか?

404 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 21:21:26 ]
>>398
ごちゃごちゃしてるけど。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8848.txt
#pragma warning(disable : 4996)の部分は消して使ってね

405 名前:399 mailto:sage [2009/02/08(日) 21:53:01 ]
tp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8845.txt

406 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:03:19 ]
連投すみません。392です。
実行は
& ./a.exe input.txt
の間違いです。
「./」を書き入れるのを忘れました^^;

408 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:14:55 ]
>>406
プログラムで指定されているファイル名は、in.txtだからねえ・・・

409 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:15:27 ]
int main(){

int main(int argc, char* argv){

read_points("in.txt",point);

read_points(argv[1],point);
でいくと思う

410 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:23:49 ]
int main(int argc, char* argv[]){
か。ごめん!


411 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:28:49 ]
408さんありがとうございます><助かりました。



412 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:42:10 ]
[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8849.txt
[3] 環境
 [3.1] OS: Windows XP
 [3.3] 言語: C
[4] 期限: 2月9日12:00まで

よろしくお願いします。

413 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:46:32 ]
>>412
「重複数」の定義は?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<133KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef