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/
233 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:18:21 ] [1] 授業単元: アルゴリズムと数値計算 [2] ニュートン法とオイラー法で√2の近似値を計算するプログラムを作れ ただし、計算は50ステップ行い、それぞれの初期値とsqrt(2)との差を表示する事。 初期値は各々が定めてよい [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC2005EE [3.3] 言語:C [4] 期限:09/02/04迄 [5] その他の制限: 文字表示・繰り返し文・条件判断とオイラー法の計算は分かります
234 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:58:41 ] >>233 オイラー法ってこんなか? #include <stdio.h> #include <math.h> double newton(){ double x=1.0; int i; for(i=0;i<50;i++){ x=x-(x*x-2)/(2*x); } return x; } double euler(){ int n=50; double x=1.0,h=(double)(2-1)/n; int i; for(i=0;i<n;i++){ x=x+h/(2*x); } return x; } int main(){ double temp=newton(); printf("sqrt(2):%f,newton:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp); temp=euler(); printf("sqrt(2):%f,euler:%f,差:%f\n",sqrt(2),temp,sqrt(2)-temp); return 0; }
235 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 15:19:50 ] >>227 VBに触れたから呪われたんだな
236 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 16:04:45 ] >>234 ありがとうございます! for文の中身1行で表せるんですね。 初期値表示と(double)(2-1)を2.0-1.0など軽く置き換えて完成しました。
237 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 19:48:11 ] >>193 O(N^2)じゃなくO(NlgN)だ
238 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:41:50 ] だいたい、プログラム入れてみるとxln(x)が定数なしで自己相関関数に一致してるくらいだな。 つまり、O(NlnN)だな。でも、NlogNだと思ってて、N^2だったってよりよくない?
239 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 20:51:59 ] うん。
240 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:18:36 ] [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 角度はラジアン単位(rad),度単位(degree)【°】で表される.さらに 度単位は 32.4°と10進小数表示する場合と 32度24分と度分秒で表示する場合がある.(60秒で1分, 60分で1度) @2つの角度(度単位)を10進小数点2桁 でキーボードから入力し(例 69.21° と 33.73° ) それらを度分秒単位で 表示させるプログラムを作成しなさい. Aさらに度分秒単位で表示された2つの角度の差を求め,度分秒単位で表示しなさい. 計算は度分秒単位のまま引き算すること(60進法の引き算アルゴリズムを作成すること). [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年2月4日 13:00 [5] その他の制限: よろしくお願いします
241 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:25:50 ] キーボードから入力し(例 69.21° と 33.73° ) 2バイト文字か?まずその入力ができるかが問題だ。 Alt+半角で全角打てるけど、(例 69.21 と 33.73)の間違えだと言ってくれ。
242 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 21:37:58 ] >>241 すみません 半角です
243 名前:デフォルトの名無しさん [2009/02/03(火) 22:03:28 ] >>211 のものですが、>>219 をコンパイルしたら 和と差が計算できなかったのですが、どうすれば いいでしょうか? どなたか教えてください。
244 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:18:25 ] A.son *= B.mom; B.son *= A.mom; A.mom=B.mom=(A.mom*B.mom); // 通分(約分せず) GCD = gcd(A.mom,A.son+B.son); printf("和:%d / %d\n",(A.son+B.son)/GCD,A.mom/GCD); GCD = gcd(A.mom,A.son-B.son); printf("差:%d / %d\n",(A.son-B.son)/GCD,A.mom/GCD);
245 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:23:43 ] 分母: mom 分子: son っていうネーミングセンスが素敵だ
246 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:36:37 ] 辞書片手に英語にしまくったら単語の意味を忘れて自分で読めないというのは聞かなくもないけれど、 日本語の一部を切り出して英語にするっていうのは新しい。
247 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:40:47 ] >>240 誤差がぁぁぁ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8809.c
248 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:42:30 ] >>240 #include<stdio.h> #include<math.h> typedef struct { int deg, min, sec; } Degree; void rad2deg(Degree *pdeg, double rad) { pdeg->deg = (int)rad; rad = (fabs(rad) - fabs(pdeg->deg)) * 60; pdeg->min = (int)rad; rad = (rad - pdeg->min) * 60; pdeg->sec = (int)rad; } void print_deg(const Degree *pdeg) { printf("%d度%02d分%02d秒\n", pdeg->deg, pdeg->min, pdeg->sec); } void degsub(Degree *pdiff, const Degree *pdeg1, const Degree *pdeg2) { pdiff->sec = pdeg1->sec - pdeg2->sec; pdiff->min = pdeg1->min - pdeg2->min; pdiff->deg = pdeg1->deg - pdeg2->deg; if (pdiff->sec < 0) { pdiff->sec += 60; pdiff->min --; } if (pdiff->min < 0) { pdiff->min += 60; pdiff->deg --; } } int main() { double rad1, rad2; Degree deg1, deg2, degdiff; printf("radian1="); scanf("%lf", &rad1); printf("radian2="); scanf("%lf", &rad2); rad2deg(°1, rad1); printf("degree1="); print_deg(°1); rad2deg(°2, rad2); printf("degree2="); print_deg(°2); degsub(°diff, °1, °2); printf("degree1-degree2="); print_deg(°diff); return 0; }
249 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:55:09 ] >>240 の人気に嫉妬 #include <stdio.h> #include <math.h> struct ds_t { int d; int m; int s;}; struct ds_t dec2ds(double dd){ struct ds_t ds; ds.d = floor(dd); ds.m = floor(60*(dd - ds.d) + 0.5/60); ds.s = floor(3600*(dd - ds.d) - 60*ds.m + 0.5); return ds; } void print_ds(struct ds_t *ds){ printf("%d.%d\'%d\"\n", ds->d, ds->m, ds->s); } struct ds_t sub_ds(struct ds_t *ds1, struct ds_t *ds2){ struct ds_t ds3; ds3.d = ds1->d - ds2->d; ds3.m = ds1->m - ds2->m; ds3.s = ds1->s - ds2->s; if(ds3.s < 0) ds3.s += 60, ds3.m--; if(ds3.m < 0) ds3.m += 60, ds3.d--; return ds3; } int main(void){ double dd1, dd2; struct ds_t ds1, ds2, ds3; scanf("%lf%lf", &dd1, &dd2); ds1 = dec2ds(dd1); ds2 = dec2ds(dd2); print_ds(&ds1); print_ds(&ds2); ds3 = sub_ds(&ds1, &ds2); return 0; }
250 名前:248 mailto:sage [2009/02/03(火) 22:57:35 ] degsubの符号の扱いが全然だめだった。>>248 は取り下げます。
251 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 22:58:00 ] >>243 そのコードはクズだ。捨てろ。
252 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:00:11 ] [1] 授業単元:ループ [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8810.txt [3] 環境 [3.1] OS:WindowsXP [3.2]コンパイラ名とバージョン:C++ Compiler 5.5/Turbo Debugger [3.3] 言語:C [4] 期限:一ヶ月以内 [5] その他の制限:2重ループを使うらしいですが使わなくてもいいそうです。
253 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:01:15 ] >>244 そこで上書きして残りの積と商をどうするツモリだ。
254 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:03:53 ] >>253 分母と分子に同じ数掛けてるから大丈夫
255 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:16:22 ] そうだよね。>>253 は2/4拍子と3/6拍子の違いが分かってらっしゃる。 #include<stdio.h> int main(){ int i,j,tmp,data[5+1]; for(i=0;i<10;i++){ printf("%d人目",i); scanf("%d",&tmp); data[tmp]++; } for(i=1;i<=5;i++){ printf("\n%d",i); for(j=0;j<data[i];j++) printf("*"); } return 0; }
256 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:16:46 ] どなたか>>134 をお願いいたします。ググってもわかりません。。。
257 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:21:21 ] >>256 一番上に書く名前が分かりません>< マジレスはお断りしておきます
258 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:23:35 ] >>247 degree[i][1] = (int)((input[i] - (int)input[i]) * 10) * 6; degree[i][2] = (int)((input[i] * 10 - (int)(input[i] * 10)) * 10) * 6; この計算式は何なのか、後でAAで提出するように。
259 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:23:40 ] 5秒で答えにたどり着いたけど 134は馬鹿なの?死ぬの?
260 名前:240 mailto:sage [2009/02/03(火) 23:28:32 ] >>247-249 ありがとうございました
261 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:34:09 ] >>256 フローチャートは詳しくないが日本語にそれらしく訳してくと 開始 ファイルをfpiに読み込む ファイルの先頭からデータ数をnへ代入 ループ iをn回 配列xのi番目にi番目のデータを代入 ループ iをn-1回 (中身jループ) /* */ ループ jをi+1からnまで /* */ /* */ 分岐 x[i]>x[j] --YES--> x[i]とx[j]を交換 -->jループへ /* */ /* */ --NO-->jループへ ループ iをn回 iとx[i]を表示 終了
262 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:50:17 ] >>134 オフィスを入れてなかった。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8811.zip
263 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 23:55:15 ] >>262 力作乙 だが、extention error だ 名前と実体が異なっている
264 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:01:47 ] >>263 そんな突っ込みは想定していない。 OpenOfficeの操作覚えようかな……。
265 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:25:25 ] >>252 #include <stdio.h> int main(void) { int a[10], c[5], i, j; for (i = 0; i < 9; ++i) scanf("%d,", &a[i]); scanf("%d", &a[9]); for (i = 0; i < 5; ++i) c[i] = 0; for (i = 0; i < 10; ++i) c[a[i] - 1]++; for (i = 0; i < 5; ++i) { printf("%d", 5 - i); for (j = 0; j < c[4 - i]; ++j) printf("*"); printf("\n"); } return 0; }
266 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 00:56:37 ] >>172 コンソールアプリでいいんだよね? 言語はCとC++どっち?
267 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 02:13:27 ] >>266 >[5] その他の制限: まだ基礎段階なので、なるべく簡単なプログラムがいいです。 画像の取り込みとかはせずに、文章で表示すればいいらしいです。 Visual c++がよくわからないので、よろしくお願いします C++のWindowアプリケーションを望んでいるようには見えない。 求めてるのは”なるべく簡単”でしょ。
268 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 14:27:20 ] [1] 授業単元: プロムラミング演習2 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8813.txt [3.1] OS: Windows [3.3] 言語:C言語 [4] 期限:2月5日まで [5] その他の制限:すみません自力ではわかりません.ご指導お願いします
269 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 14:46:26 ] void bitpart(int x) { char str[33]=""; for(b=31;b>=0;b--){ sprintf(str,"%s%d",(x>>b)&1); return str; } > jprintf(bit pattern=%s\n",bitpart(x,bit)); なんかちがう
270 名前:897です mailto:sage [2009/02/04(水) 14:51:10 ] すみません... 打ち間違いでした printf("bit pattern =%s\n", bitpart(x,bit)); です.すみません
271 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 14:51:44 ] >>268 char*bitpart(int x,char *bit) { int b; bit[32] = '\0'; for(b=31;b>=0;b--){ sprintf(&bit[31-b],"%d",(x>>b)&1); } return bit; }
272 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 15:00:15 ] >>271 早い返事ありがとうございます 助かりました
273 名前:897 mailto:sage [2009/02/04(水) 17:01:19 ] [1] 授業単元: C言語 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8814.txt [3.1] OS: Windows [3.3] 言語:C言語 [4] 期限:2月5日まで [5] その他:お願いします
274 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 17:17:20 ] >>273 void insert(int num, struct node *p) { struct node *n; while (p->next != NULL && p->next->key < num) { p = p->next; } n = (struct node *)malloc(sizeof *n); n->key = num; n->next = p->next; p->next = n; }
275 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 17:27:54 ] >>274 ありがとうございます!! なんとかいけそうです
276 名前:デフォルトの名無しさん [2009/02/04(水) 17:46:14 ] [1] 授業単元: C言語 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8815.txt [3] 環境 [3.1] OS: Windows Vista [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: ([2009年02月05日12:00まで] [5] その他の制限: よろしくお願いします。
277 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:01:53 ] >>276 #include <stdio.h> int main(void) { int kinshu[10] = { 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1 }; int i, j, c, n; printf("金額を入力してください: "); scanf("%d", &n); for (i = 0; i < 10; ++i) { for (c = 0; n / kinshu[i]; ++c) n -= kinshu[i]; printf("%5d円: %d枚\n", kinshu[i], c); } return 0; }
278 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:10:45 ] > for (c = 0; n / kinshu[i]; ++c) n -= kinshu[i]; c=n/kinshu[i]; n-= c*kinsyu[i];
279 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:37:30 ] [1] 授業単元:数値解析 [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8817.txt [3] 環境 [3.1] OS: Windows XP [3.3] 言語: C [4] 期限: 2009年02月05日まで 問題多いですがよろしくお願いします。
280 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:38:16 ] [1] 授業単元: C言語 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8816.txt [3.3] 言語:C言語 [4] 期限:2月5日まで [5] その他: 違うところで同様の質問をして,いろいろヒントをもらった のですが,いまいちわかりません.その時こちらを紹介されたので, どうかお願いします
281 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 18:52:39 ] >>280 int pop(void) { struct node *n = TOP.next; if (n == NULL) { fprintf(stderr, "no stack\n"); return 0; } else { int num = n->key; TOP.next = n->next; free(n); return num; } } int main(void) { TOP.next = NULL; push(21); push(42); printf("%d\n", pop()); printf("%d\n", pop()); return 0; }
282 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:29:50 ] >>279 どんだけ丸投げだよ。
283 名前:デフォルトの名無しさん mailto:sage [2009/02/04(水) 19:37:05 ] 丸投げスレなんだから当然だろ? ってこれは・・・w
284 名前:280 mailto:sage [2009/02/04(水) 19:46:00 ] >>281 ありがとうございます 助かりました!!
285 名前:Rm [2009/02/05(木) 00:09:41 ] [1] 計算システム(C言語) [2] N×Nの行列A,Bに大して、次のようなプログラムを作成せよ。 ・A+B、A−B、A×Bを出力するプログラム ・Aの逆行列を出力するプログラム(ピボット選択法) ただし ・Nはdefineで4と定義する。 ・A,Bそれぞれの成分データはdouble型配列に保存する。 ・行列A,Bの各成分のデータは時間に依存した種から与えられる疑似関数により自動生成する。 mathweb.sc.niigata-u.ac.jp/~yamada/system/wed/kadai.htm 実際ほかの課題もわかりません。1は出来ましたが。 [3] 環境 [3.1] OS:Windows [3.2] gcc [3.3] 言語: C [4] 期限: 5日 よろしくお願いいたします。
286 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 00:52:15 ] >>273 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8819.txt
287 名前:280 です mailto:sage [2009/02/05(木) 02:14:54 ] >>281 さんの方から解答をいただいたのですが main関数の所がいまいちわかりません できたらもう一度お願いします.
288 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:24:30 ] >>287 わかりませんもなにも見たまんまpushしてpopしてるだけだと思うが もう一度といわれてもこれ以外書きようがないと思うべ? どこがどうわからないか考え直してきなさい
289 名前:280 です mailto:sage [2009/02/05(木) 02:39:14 ] push(21); push(42); これがよくわかりません コンパイルしてもこれしかでないのですが・・・ mainは、任意個数の数字を入力させてそれをpushし、 EOFになったら逆にpopで値を取り出して画面に表示する みたいな感じにしたいのですが・・
290 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 02:57:53 ] >>289 >pushとpopが正常に動作をしているか確かめられるプログラムを作成してください といわれて>>289 の下半分の内容を読み取れなんてエスパーじゃない限り無理 int main(void) { TOP.next = NULL; int d; while(scanf("%d", &d)!=EOF) push(d); while(TOP.next) printf("%d\n", pop()); return 0; }
291 名前:280 です mailto:sage [2009/02/05(木) 03:03:11 ] >>290 言葉足らずですみません 夜遅くわざわざありがとうございます
292 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:06:14 ] 十分テストコードになってると思うんだけどな。
293 名前:デフォルトの名無しさん [2009/02/05(木) 03:23:22 ] while(1) { wakeup; static int day; int time = wakeuptime(); while(1) { 2ch; if(time == Daytime()) { lunch; }; if(time == nighttime()) { supper; }; if( time == sleeptime();) { break; } time++; } day++; sleep; } こんな毎日、無限ループって怖いよな;;
294 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 03:48:10 ] >>285 和、差、積のやつ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8821.c
295 名前:285 [2009/02/05(木) 04:09:48 ] >>294 ありがとうございます。よろしければ逆行列プログラムもお願いします。
296 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 04:54:22 ] >>295 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8822.c
297 名前:285 [2009/02/05(木) 05:24:02 ] >>296 このような時間帯にわざわざありがとうございます。 おかげ様で助かりました。
298 名前:279 mailto:sage [2009/02/05(木) 06:58:42 ] >>282 >>283 確かにこれはひどいですよね… 1問でもいいのでお願いしたいです。 一応自分でもやっていますが、数学が苦手なもので…
299 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 12:42:16 ] >>167 です。 自己解決したので取り下げます。スレ汚し失礼しました。
300 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 13:13:46 ] 1] 授業単元: C言語 [2] 問題文: kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8823.txt [3.1] OS: Windows [3.3] 言語:C言語 [4] 期限:2月6日まで [5] その他:お願いします
301 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 14:25:46 ] [1] 授業単元:C言語プログラミング [2] 問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8824.txt [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:明日まで [5] その他の制限:与えられたプログラムを改造(付け足し)する
302 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:16:54 ] >>301 #include <stdio.h> int main(void) { int i, j, c; char seq[] = "tion"; i = 0; while ((c = getchar()) != EOF) { if (c == seq[i]) { i++; if (i == sizeof(seq) - 1) { break; } } else { for (j = 0; j < i; j++) { putchar(seq[j]); } i = 0; putchar(c); } } return 0; }
303 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:18:39 ] 300 の問題って リダイレクトじゃだめなのか?
304 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:26:50 ] >>300 #define INPUT_FILE_NAME "foo.in" #define OUTPUT_FILE_NAME "bar.out" int main(void) { struct student A[Nmax]; double avg=0; int i; FILE *fin, *fout; fin = fopen(INPUT_FILE_NAME, "r"); if (fin == NULL) { perror(INPUT_FILE_NAME); return 1; } for( i=0; i<Nmax; i++){ fscanf (fin, "%d %d %d %s", &A[i].sc1,&A[i].sc2,&A[i].sc3,A[i].name); } fclose(fin); fout = fopen(OUTPUT_FILE_NAME, "w"); if (fout == NULL) { perror(OUTPUT_FILE_NAME); return 1; } fprintf(fout, "Score Name\n"); fprintf(fout, "-------------------------------------------\n"); for(i = 0;i <Nmax; i++){ A[i].total =(A[i].sc1+A[i].sc2)*0.4+A[i].sc3; A[i].res =(A[i].total>=60)?"A": "F"; avg += A[i].total; fprintf(fout, "%6.1f %s %s\n", A[i].total,A[i].res, A[i].name); } fprintf(fout, "---------------------------------------------\n"); fprintf(fout, "%6.1f (Avg)\n",avg/Nmax); fclose(fout); return 0; }
305 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:09:19 ] >>302 "ttion" >>301 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8825.txt
306 名前: ◆g8eVFLrbyk [2009/02/05(木) 16:49:09 ] [1] 授業単元:C++言語プログラミング [2] 問題文:www.s.kyushu-u.ac.jp/~z6st02in/repo2008z/repo2008kprob.html 問題2と3をおねがいします。 [3] 環境 [3.1] OS:windows [3.2] コンパイラ名とバージョン: [3.3] 言語:C++言語 [4] 期限:明日まで [5] その他の制限:与えられたプログラムを改造(付け足し)する
307 名前:suzuki mailto:sage [2009/02/05(木) 16:59:16 ] 君は不可だ! 調査した上で厳正に処理するから首を洗っとれ
308 名前:302 mailto:sage [2009/02/05(木) 17:09:27 ] >>305 あ、ホントだ。俺の間違ってたね。
309 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 17:27:29 ] スレチですいません。 今日面接でプログラミングの手書きのテストをやってきました。 テスト終わって家に帰ってから効率のいいコードの書き方を思い出しました。 テスト中は時間のことが気になって思い出せずとりあえず動くコードで書きました。 テストの場合は白紙や書き途中で提出するくらいなら、 とりあえず動くコードで書いておけば特に問題はないですよね?
310 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 17:30:05 ] 宿題やテストの採点思想次第だわな
311 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 19:25:48 ] >>309 「動かないよりマシ」って言って欲しいんだろうけど、 採点者が何を見ているか次第なんじゃね? Fizz-Buzz問題って日本でも実施してるのかな? ナベアツ問題は、このスレでも何度か回答されてるよね。 プログラマーなら「FizzBuzz問題」解けるよな? pc11.2ch.net/test/read.cgi/prog/1209467166/ Fizz Buzz(ウィキペディア) ja.wikipedia.org/wiki/Fizz_Buzz どうしてプログラマに・・・プログラムが書けないのか? www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
312 名前:301 mailto:sage [2009/02/05(木) 20:15:18 ] >>305 すみません。問題が間違ってました 正しくはkansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8826.txt でした
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 「重複数」の定義は?
414 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 22:52:00 ] >>412 クソな課題だな。 int a[x]をmallocで確保してa[ key % x]++して 全部終わったらa[k]が2以上の数を数えてxを掛ける これの繰り返し?上限は「入力されたうちの最大値+1」か?
415 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:02:27 ] >>414 それだとx=1が常に最適になるので、本当のクソになる。 a[k]の大きさも加味すべきだろう。
416 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:09:18 ] >>413 >>414 何も言われてないので分からないです。
417 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 23:59:23 ] >>412 keyは一意でいいんだよね?
418 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 00:15:55 ] >>412 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8850.txt バケットの要素数count[i]が2以上であるバケットiについて、Σcount[i]!/2を「要素数」とした。count[i]!/2は、バケットから2要素を選ぶ組み合わせ数。 また、バケット数の上限は、(最大のkey)+1とした。
419 名前:418 mailto:sage [2009/02/09(月) 00:23:02 ] ごめん、思いっきり勘違いを書いた。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8851.txt バケットから2要素を選ぶ組み合わせ数はcount[i]*(count[i]-1)/2だね。
420 名前:デフォルトの名無しさん mailto:sage [2009/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行以内 ★再帰呼び出しは使用禁止 ★グローバル変数使用禁止 ★パス名の長さは制限無しとする 初級コースが満杯なので、中級コースをとって しまったら、課題レポートが自分には激ムズでした。 自分でやってみたら収拾がつかなくなってしまいました。 期限までわずかに時間はありますが、できれば一両日中に何と かお願いします。