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/
231 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 13:54:02 ] >>227 そもそも>>219 は計算が間違ってるwww
232 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 14:09:51 ] 計算しなければどうということはない
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です 既出だったらすまん お頼みもうします