1 名前:デフォルトの名無しさん [2008/02/04(月) 23:32:19 ] あなたが解けない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++の宿題を片付けます 103代目 pc11.2ch.net/test/read.cgi/tech/1200318925/
2 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 23:35:07 ] 2
3 名前:デフォルトの名無しさん [2008/02/05(火) 00:17:37 ] _,,....,,_ _人人人人人人人人人人人人人人人_ -''":::::::::::::`''> ゆっくりしていってね!!! < ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ |::::::;ノ´ ̄\:::::::::::\_,. -‐ァ __ _____ ______ |::::ノ ヽ、ヽr-r'"´ (.__ ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、 _,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7 'r ´ ヽ、ン、 ::::::rー''7コ-‐'"´ ; ', `ヽ/`7 ,'==─- -─==', i r-'ァ'"´/ /! ハ ハ ! iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i | !イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ レリイi (ヒ_] ヒ_ン ).| .|、i .|| `! !/レi' (ヒ_] ヒ_ン レ'i ノ !Y!"" ,___, "" 「 !ノ i | ,' ノ !'" ,___, "' i .レ' L.',. ヽ _ン L」 ノ| .| ( ,ハ ヽ _ン 人! | ||ヽ、 ,イ| ||イ| / ,.ヘ,)、 )>,、 _____, ,.イ ハ レ ル` ー--─ ´ルレ レ´
4 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:40:15 ] [1] 計算機B [2] 正規分布に従う乱数を生成しなさい。 [3] 環境 [3.1] OS: mac [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: [2008年2月7日まで]
5 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:21:26 ] Mersenne Twister Box-Muller transform
6 名前:デフォルトの名無しさん [2008/02/05(火) 06:59:45 ] >>4 #include <stdio.h> unsigned int rnd(){ static unsigned int x=3,y=11,z=13,w=17; unsigned int t; t=(x^(x<<13)); x=y; y=z; z=w; return ( w=(w^(w>>7 ))^(t^(t>>5 )) );} double seiki(){ return -6+ (0.0+rnd()+rnd()+rnd()+rnd()+rnd()+rnd() +rnd()+rnd()+rnd()+rnd()+rnd()+rnd() ) /0xFFFFFFFF;} main(){ int n; for(n=0;n<100;n++)printf("%f\n",seiki()); }
7 名前:デフォルトの名無しさん [2008/02/05(火) 17:53:37 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 1)5科目の合計点を計算して exam_data[i].x[6]に入れ、合計点の高い順に並べ替え 2)各科目の最高点、最低点、平均、標準偏差を計算せよ。標準偏差=sqrt(分散) と定義される。 3)並び替え等の処理 4)結果を file Result_1_23 に書き出せ。 問題文全文 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6000.txt 用いるデータ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5999.txt 解答例 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6001.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:C [4] 期限:[2008年2月6日19:00まで] [5] その他の制限:特になし 丸投げです。よろしくお願いします。
8 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 19:11:00 ] >>1 乙!
9 名前:デフォルトの名無しさん [2008/02/05(火) 22:28:23 ] [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): ビジュアルベーシックのWinAPI(C++)を使用して、テトリスを作る。 矢印キーで移動、SPACEキーで回転。 次に何が出るか、スコア、時間を同時に表示。 (+αとしてスコアを保存し、ランキングも表示できる) [3] 環境 [3.1] OS:Windows xp [3.2] コンパイラ名とバージョン:ビジュアルベーシックプロフェッショナル2003で動作。WinAPI。 [3.3] 言語:C++ [4] 期限: 2008年2月10日(日) [5] その他の制限: 学校の課題なので、初心者に見えるようなプログラムでお願いします。 丸投げですが、かなり急いでます。よろしくお願いします。
10 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:43:48 ] >>9 i,n;char s[165];main(m){read(0,s,s);m=s[1]%2?n=121,44:s[4]%2?n=132,11:(n=66,22);for(;i<44;s[i++]-=s[i]%2*3)s[i+n]|=s[i];write(1,s,m);for(i=0;i<165;m%35&&write(1,s+i,11),i+=11)for(m=n=0;n<10;)m+=s[i+n++];}
11 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 22:45:07 ] >>9 なぜにそんな時間がかかりそうなのを残してるんだorz あと、どの辺まで習ってる? ・WindowProc. ・SetTimer() ・メモリデバイスコンテキスト ・レジストリ or INIファイル ・MFC etc.
12 名前:デフォルトの名無しさん [2008/02/05(火) 23:02:47 ] >>10 すみません。それはこのままデバッグすればいけますか? >>11 WindowProcは習いました。SetTimerも説明は受けました。 メモリデバイスコンテキストも話は聞きました。 しかしMFCの意味が分からないです。 できればwww13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/SPACE_TETRIS.gif みたいなものはできますか?
13 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:05:20 ] ビジュアルベーシックのWinAPI(C++)って何だよ。
14 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:14:50 ] >>12 MFCは知らないなら無視してもいいかと。 画像の表示、キー入力はできるんだろ? 具体的に何がわからないんだ? 現状のまま丸投げするとおそらくさっぱりなコードが返ってくるぞ。
15 名前:デフォルトの名無しさん [2008/02/05(火) 23:17:14 ] >>13 MicrosoftVisualBasic2003のプロフェッショナルを俺の通っている高校で使用していて、 それのWinAPIを使った課題なんです。 なんて説明すればいいのかわからなかったんですが…。
16 名前:デフォルトの名無しさん [2008/02/05(火) 23:21:31 ] >>14 画面表示、キー入力は可能です。 わからないのはテトリスの落ちてくる、テトリミノのランダム化。 テトリミノの形設定。 一列並んだら消える。 上までいったらゲーム終了。 (+αだと、スコアの記録の仕方) というテトリスの基本的部分の構造が全く分からなくて、チャートも書けない状況です。
17 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:25:10 ] テトリスとかぐぐればいくらでもあるよね
18 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:27:20 ] VisualStadioの間違いじゃまいか? もし、VisualBasicでWindowsAPI使ったプログラム(C,C++関係なし)を作れ言われたら、俺わからん。
19 名前:デフォルトの名無しさん [2008/02/05(火) 23:29:31 ] >>17 ここ一週間くらいぐぐってたんですが、 コンパイル通らないんですよね。 あとは、知らない言語とか。 >>18 VisualBasicかもしれない…申し訳ないですが本当に初心者なんです。 WindowsAPIでC++です。
20 名前:デフォルトの名無しさん [2008/02/05(火) 23:31:09 ] >>19 まちがた。VisualStadioかもしれない。でした。
21 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:33:14 ] >>19 VisualBasicはないだろ。変数宣言がdim i as integerがVB、int i;がC(C++)だ。 >>16 途中でもいいならソースアップした方がいい。 >わからないのはテトリスの落ちてくる、テトリミノのランダム化。 乱数つかうだけ >テトリミノの形設定。 const staticとかで宣言するだけ >一列並んだら消える。 >上までいったらゲーム終了。 テトリミノが固定されたときに全ラインにチェックかけるだけ >(+αだと、スコアの記録の仕方) スコアを別ファイルに保存するだけ
22 名前:21 mailto:sage [2008/02/05(火) 23:34:29 ] 日本語でおkになってた。 >途中でもいいならソースアップした方がいい。 中途半端でもいいから現状のソースがあるならアップした方がいい。 typoとかいうレベルじゃねぇorz
23 名前:デフォルトの名無しさん [2008/02/05(火) 23:48:54 ] >>22 手をつける場所が分からず、まだ何もできていない状況ですが。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; //==================================================================== static wXsize , wYsize; RECT rect; char buff[1024]; //====================================================================
24 名前:デフォルトの名無しさん [2008/02/05(火) 23:51:13 ] 今はこんな貼り方しかできなくて、本当申し訳ない。 //=============================== case WM_SIZE: wXsize = LOWORD(lParam); wYsize = HIWORD(lParam); break; //=============================== case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: 描画コードをここに追加してください... TextOut( hdc , 10 , 10 , buff , (int)strlen(buff) ); EndPaint(hWnd, &ps); break; case WM_DESTROY:
25 名前:デフォルトの名無しさん [2008/02/05(火) 23:53:09 ] >>21 >テトリミノが固定されたときに全ラインにチェックかけるだけ 他は言っていることはわかるんですが、このチェック方法がわかりません。
26 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:53:25 ] >>1 にあぷろだ書いてるからそこにもってけw
27 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:56:45 ] >>25 いろんな実装あるだろうけど、たとえばな・・・ フィールドにテトリミノ(の残骸)があるかどうかを確保する変数bool field[6][25]があるとする。 bool check; for ( int y = 0; y < 25; y++ ) { check = true; for ( int x = 0; x < 6; x++){ check &= field[ x ][ y ]; } if ( check ) { // yラインを消す処理+消えたとこより上を下にずらす処理 } }
28 名前:9 [2008/02/05(火) 23:58:15 ] 今あぷろだ何故かつながらないんです。
29 名前:9 [2008/02/06(水) 00:01:55 ] >>27 なるほど。 ありがとうございます。 考え方はわかった気がします。
30 名前:9 [2008/02/06(水) 00:25:28 ] >>21 ほとんど何も出来ていませんが。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6004.txt
31 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:27:43 ] >>7 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6005.txt
32 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:55:19 ] >>31 ありがとうございました。 助かりました。
33 名前:デフォルトの名無しさん [2008/02/06(水) 02:32:38 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 問題文全文 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6006.txt 用いるデータ kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6008.txt 解答例 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6007.txt [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語:C [4] 期限:[2008年2月6日19:00まで] [5] その他の制限:特になし 丸投げで申し訳ないです。よろしくお願いします。
34 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 03:35:15 ] >>33 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6009.txt >>7 よりもこっちが先だと思うんだけど。
35 名前:デフォルトの名無しさん [2008/02/06(水) 04:27:35 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6010.txt [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年2月7日午前10時まで [5] その他の制限:特にありません よろしくお願いします。
36 名前:9 [2008/02/06(水) 10:16:56 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6011.txt 一応テトリス課題です。
37 名前:デフォルトの名無しさん [2008/02/06(水) 11:05:28 ] [1] 授業単元:情報処理演習 [2] 問題文(含コード&リンク):複素数の時粒、虚部の値をファイルから入力し、複素数の四則演算をファイルに出力するプログラムを作成せよ。 ただし演算部分は関数にして実装せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: (gcc [3.3] 言語: C++ [4] 期限:2月6日以内 [5] その他の制限: プログラムの構成は ファイルから読み込み、複素数の四則演算、別のファイルに書き込み です。よろしくお願いします。
38 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:23:43 ] >>37 時粒って何? std::complexを使っていいの?
39 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 12:26:05 ] >>36 APIなのか.Netなのかどっちなのかとw
40 名前:9 [2008/02/06(水) 17:54:24 ] >>39 APIだと思うんですが、教師の言ってる意味が日本語でおk状態です。
41 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:28:50 ] >>34 遅くなってすみません。 本当にありがとうございました。
42 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:11:27 ] [1] 授業単元:計算機入門 [2] 問題文:下記のプログラムの空白部分(□)を記入し,「ポインタを利用したプログラム」(report12.c) を作りなさい 3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン: CPad for Borland [3.3] 言語:C [4] 期限:2008年2月12日午後18時まで [5] その他の制限:string.h は使えない。 プログラム #include <stdio.h> int main(void) { int i; char str[] = "Japan"; int str_length; int data[] = {1, 2, 3, 4, 5, 0}; int *p; /* 文字列の長さ */ str_length = □ /* 文字配列の各要素のアドレスを表示する */ for(i=0; i<str_length; i++) { printf("%p : str[%d] = %c\n", &str[i], i, str[i]); } printf("\n");
43 名前:42の続き [2008/02/06(水) 22:12:07 ] /* 配列の各要素のアドレスをfor文で表示する */ for(i=0; i<5; i++) { printf("%p : data[%d] = %d\n", &data[i], i, data[i]); } printf("\n"); /* 配列の各要素のアドレスをポインタを利用して表示する */ p = &data[0]; while(*p) { printf("%p : %d\n", &data[*p], data[*p]); p++; } return 0; } string.hを使わずに文字列の長さを出す方法がわかりません。 あと、最後のwhile文で表示するところがうまくいきません。 どなたかよろしくお願いします。
44 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:23:10 ] >>42 /* 文字列の長さ */ for(str_length=0; str[str_length]; str_length++) {} /* 配列の各要素のアドレスをポインタを利用して表示する */ p = &data[0]; while(*p) { printf("%p : %d\n", p, *p); p++; }
45 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:39:19 ] >>44 助かりました。 本当にありがとうございました。
46 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:59:52 ] 前スレ埋めようよ
47 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:13:20 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6015.txt [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年2月8日午前10時まで [5] その他の制限:特にありません 非常に困っております。よろしくお願いします。
48 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:20:36 ] >>47 何が問題なんだ? そのコードはちゃんと動くけど。
49 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:21:38 ] >>48 え?プログラムが完成されてるってことですか?ごめんなさい、もう少しよく考えてから出直します
50 名前:前スレ798 mailto:sage [2008/02/07(木) 15:15:32 ] [1] プログラミング論 [2] @ % ./a.out n の時、nまでの順列を生成するプログラムを作る。 1. n = atoi( argv[1] ); で引数を整数に変換 2. for( i = 0; i < n; i++ ) a[i] = i+1; としてa[]を初期化 3. perm()を完成させる。 A % ./a.out x n の時(x,nは整数),x^{n}を計算するプログラムを作る。 x^{n} = x^{m} * x^{m} (n = 2m) x^{n} = x * x^{m} * x^{m} (n = 2m+1) x^{n} = 1 (n=0) を利用して乗算回数の最小化を行うこと。 x^{n}の値と、乗算回数を出力する。 B Ackermann関数 A(0,n) = n+1 A(m,0) = A(m-1,1) (m>0) A(m,n) = A(m-1,A(m,n-1)) (n>0) をするプログラムを作る。 % ./a.out m n ただし、% ./a.out 3 12 での実行時間が0.05sec未満。 →%time ./a.out 3 12 %time ./a.out 4 x は多分動かないのでm<=3で試すこと。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] C [4] 2008年2/12(火) [5] 制限は特にないです 先週はありがとうございました!今週も・・・・よろしくお願いしますm(__)m
51 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:49:34 ] [1] 授業単元:論文の途中で値を出す為に使います [2] 問題文:f(x) = ax^2 + bx +c g(x) = αx^2 + βx + γ h(x) = Ax^2 + Bx + C としたとき、合成関数 f(g(h(x)))=8次式 において、x^8〜x までの係数をそれぞれ求める [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限: できるだけ早いと嬉しいです。並行して自力でもやっていますが、計算ミスが怖いです。 [5] その他の制限:特にありません
52 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:58:08 ] >>6 この rnd() はなんという乱数発生法ですか? あと、どんな乱数でも多数加えると正規分布に近づくことは確かですが、12 回たして6引くというのは(よく知られてはいますが)あまり精度はよくありません。
53 名前:デフォルトの名無しさん [2008/02/07(木) 22:59:29 ] [1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6016.txt [3] 環境 [3.1] OS: Win XP [3.2] コンパイラ名とバージョン: visual studio 2005 [3.3] 言語: C [4] 期限: 2008年2月8日午前7時30分 (できればこの時間までにお願いしたいですが、午前中でもかまいません) [5] その他の制限:急ぎで申し訳ありませんが、困っているのでよろしくおねがいします。
54 名前:デフォルトの名無しさん [2008/02/07(木) 23:32:08 ] [1] 授業単元:プログラミング [2] 問題文 4問です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6017.txt [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual C++ 2005 [3.3] 言語: C [4] 期限: 2月10日 午前0時まで [5] その他の制限:特になし
55 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:11:59 ] >>53 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6018.c
56 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:17:17 ] >>55 39行目くらいの fprintf(outfp, "%s", pstart); を fputs(pstart, outfp); に変えてください (別にどっちでもいいんだけど、統一させないと気持ち悪いから どうも、fprintfを使うのが癖になってるな)
57 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:24:30 ] >>53 便乗でゴミソース。 一度置換した文字列をバッファに確保すべきだろうか? #include <stdio.h> #include <string.h> #define BSIZE 1024 int ismatch(char *str1, char *str2){ while(*str1 == *str2){ if(*str1 == '\0') return 0; if(*str2 == '\0') break; str1++, str2++; } return *str2 == '\0'; } int main(int argc, char *argv[]){ FILE *in, *out; int cnt = 0, len; char buf[BSIZE], *p; if(argc < 4) return fprintf(stderr, "Usage: <FILENAME> <STRING> <STRING> [FILENAME]\n"), 1; if((in = fopen(argv[1], "r")) == NULL) return perror(argv[1]), 1; if(argc < 5) out = stdout; else out = fopen(argv[4], "w"); len = strlen(argv[2]); while(fgets(buf, sizeof(buf), in)) for(p = buf; *p != '\0'; p++) if(ismatch(p, argv[2])) fputs(argv[3], out), p += len - 1, cnt++; else fputc(*p, out); fclose(in); if(argc >= 5) fclose(out); printf("\"%s\"-> \"%s\",(%d)\n", argv[2], argv[3], cnt); return 0; }
58 名前: ◆TQgM1tAAxo [2008/02/08(金) 04:30:06 ] 【質問】 [1] 授業単元:プログラミング [2] 問題文: ウインドウ中でマウスクリックしたときにビットマップキャラクターが クリック場所に動いていくようなアニメーションを作成せよ。このときの OnLButtonUp(UINT nFlags, CPoint point)とOnTimer(UINT nIDEvent) に書くべき記述は? *ちなみにタイマー識別IDはID1とする [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VC++2006 [3.3] 言語: C++ [4] 期限: 2008年2月10日11:59まで] または [無期限] のいずれか) [5] その他の制限: とくになし
59 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 05:32:50 ] const CSize CLIENT_SIZE = {320, 240}; const int DELAY = 3; const int TIMER_ID = 1; CPoint g_tp = {CLIENT_SIZE.x / 2, CLIENT_SIZE.y / 2}; CPoint g_cp = g_tp; int OnButtonUp(UINT nFlags, CPoint point) { //nFlagsって何だっけ? g_tp = point; } int OnTimer(UINT nIDEvent) { if (nIDEvent == TIMER_ID) { g_cp.x += (g_tp.x - g_cp.x) / DELAY; g_cp.y += (g_tp.y - g_cp.y) / DELAY; } } こんな漢字か?
60 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 08:10:23 ] >>55-57 ありがとうございます。助かります。
61 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:59:33 ] >>54 課題1だけど、そのアルゴリズムがバグっているという事実はどうしてくれようか。 #include <stdio.h> static void print(int * a, int num) { int ic; for (ic = 0; ic < num; ++ic) { printf("%d%s", a[ic], ic < num - 1 ? ", " : "\n"); } } static void shift(int * a, int n) { int t = a[n - 1]; int i; for (i = n - 1; i >= 1; --i) { // ←アルゴリズムどおりならint i = n - 2になる a[i] = a[i - 1]; } a[0] = t; } int main() { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; print(a, sizeof(a) / sizeof(*a)); shift(a, sizeof(a) / sizeof(*a)); print(a, sizeof(a) / sizeof(*a)); return 0; }
62 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:55:53 ] >>54 課題2は、n=5のときの値が違うけど気にしない方向で(ぉぃ つーか、これも漸化式が読み間違いを引き起こしやすいんだけど。 #include <stdio.h> #include <math.h> int main() { double p = 2 * sqrt(3); double q = 3; for (int n = 1; n <= 20; ++n) { printf("n = %d: %.15g, %.15g, %.15g\n", n, p, q, (p + q) / 2); double r = 1 / p + 1 / q; p = 2 / r; q = sqrt(p * q); // p(n+1) * q(n) と解釈。p(n) + q(n)に見えなくもない } return 0; }
63 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:19:27 ] >>54 // 課題3-1 #include <stdio.h> int main(void){ int i,a[41] = {0, 1,}; printf("%d:%d\n",0,a[0]); printf("%d:%d\n",1,a[1]); for(i=2;i<=40;i++){ a[i] = a[i-1] + a[i-2]; printf("%d:%d\n",i,a[i]); } return 0; } // 課題3-2 修正版 #include<stdio.h> int fib(int *a, int n){ if(n == 0) return 0; else if (n==1) return 1; else if (a[n]!=-1) return a[n]; else return fib(a, n-1)+fib(a, n-2); } int main(){ int i, a[41] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}; for(i=0;i<=40;i++){ a[i] = fib(a, i); printf("%d:%d\n",i,a[i]); } return 0; }
64 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:51:08 ] >>54 // 課題3-2を、関数内で完結させるように修正してみた。 #include <stdio.h> static int fib(int n) { static int a[] = { 0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; if (n >= sizeof(a) / sizeof(* a) || a[n] == -1) { a[n] = fib(n - 1) + fib(n - 2); } return a[n]; } int main() { for (int n = 0; n <= 40; ++n) { printf("%d:%d\n", n, fib(n)); } return 0; }
65 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 15:54:00 ] >>50 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6020.cpp アッカーマン関数0.05secは無理だった
66 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:24:10 ] >>65 アッカーマン関数は、ack(3, 12)の段階で呼び出し回数が7億を越えるからシンプルな実装じゃその所要時間は無理でしょ。 >54に書かれている、キャッシュする配列を用意する方法でも呼び出し回数は大して減らないから(ハンドリングコストの所為で)遅くなるし。 # フィボナッチ数の場合は、キャッシュすると爆速だけど。 ということで、手元の所要時間を。 ./ackCache 3 7 ack(3, 7):1021 0.01sec ./ackCache 3 8 ack(3, 8):2045 0.04sec ./ackSimple 3 12 ack(3, 12):32765 2.29sec ./ackCache 3 12 ack(3, 12):32765 10.52sec # あー気にいらね
67 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:42:10 ] >>66 呼び出し回数は大して減らないって? Ack(3, 12)なら、81923回の呼び出しで求まるし、一瞬だけど。
68 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:45:17 ] これでかなり高速化できる あまりやりすぎると数式で求めろといわれそうだがwww int ackermann(int m, int n) { if(m==0) return n+1; if(m==1) return n+2; if(m==2) return n*2+3; if(n==0) return ackermann(m-1, 1); return ackermann(m-1, ackermann(m, n-1)); }
69 名前:66 mailto:sage [2008/02/08(金) 16:59:11 ] やっと納得。 m=4, n=1 m=3, n=12 シンプル版 9.9sec 2.4sec キャッシュ版 41.4sec 10.3sec ショートカット版 0.00sec 0.00sec ショートカット版は、mが1のときのアッカーマン関数を解いた結果を導入したもの。 # 解く過程はこれ。 ack(1, 0) ⇒ ack(0, 1) ⇒ 2 ack(1, 1) ⇒ ack(0, ack(1, 0)) ⇒ ack(1, 0) + 1 ⇒ 3 ack(1, 2) ⇒ ack(0, ack(1, 1)) ⇒ ack(1, 1) + 1 ⇒ 4 ack(1, 3) ⇒ ack(0, ack(1, 2)) ⇒ ack(1, 2) + 1 ⇒ 5 : : 以下同様に。 ソースは後で。
70 名前:66 mailto:sage [2008/02/08(金) 17:02:37 ] がーん、ソース貼られてたw しかも、m=2についても解いてあるし。 >>67 >呼び出し回数は大して減らないって? だから、>54の問題にあるようなキャッシュについてですがな。 m=1について解いてしまえば早くなりましたがな。 癪だから以下に。 -- #include <stdio.h> #include <stdlib.h> // #include <stdbool.h> static int ack(unsigned m, unsigned n) { // static int a[4][16]; // bool inRange = m < sizeof(a) / sizeof(* a) && n < sizeof(* a) / sizeof(** a); int val; // if (inRange && a[m][n] != 0) return a[m][n]; if (m == 0) { val = n + 1; } else if (m == 1) { // short cut for ack(1, n) val = n + 2; // ack(1, n) -> ack(0, ack(1, n-1)) -> ack(1, n-1) + 1 } else if (n == 0) { val = ack(m - 1, 1); } else { val = ack(m - 1, ack(m, n - 1)); } // if (inRange) a[m][n] = val; return val; } コメント部分を生かせばキャッシュされるけど、最早どうでもいいなぁw
71 名前:66 mailto:sage [2008/02/08(金) 17:16:12 ] >>68 それがアリなら、これも追加しとこうぜ。 if(m==3) return (1 << (n + 3)) - 3; >>70 いやだから、m = 1やm = 2について解いたりせずキャッシュのみで、 Ack(3, 12)は81923回で導き出せるんだって。
72 名前:66 mailto:sage [2008/02/08(金) 18:10:54 ] やっと合点が。 >>71 アッカーマン関数は、その引き数に自身の結果が使われるからm * n 程度のキャッシュじゃダメだったのね。 取り敢えず、4x40000にしたら無事すんなり終わりましたわさ。 それにしても、mが0、1のときは一次式で2のときは2次式なのに、3でいきなり2の冪か。 m=4について解いたらとんでもない式になりそうですな。
73 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:34:01 ] 元々そういう関数だしな。
74 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:23:16 ] [1] 授業単元:プログラミング [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6015.txt [3] 環境 [3.1] OS:windowsXP [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限:2008年2月11日午前10時まで [5] その他の制限:特にありません 今の状態では、3008年2月のカレンダーしか表示されません。 これを何年何月を入力すれば、その年月のカレンダーが表示されるようにしたいです。 よろしくお願いします。
75 名前: ◆TQgM1tAAxo [2008/02/08(金) 22:24:28 ] >>59 [エラー報告] 58で質問した者です! 即対応していただきありがとうございます。 しかし、その記述をいれてみたところエラーが生じてしまい、またいきづまってしまいました。 そのエラー内容を載せます。 「error C2018:文字'0x81'は認識できません。 error C2018:文字'0x40'は認識できません。 error C2552:'g_tp':初期化子リストによる個別の識別子の初期化に誤りがあります。 error C2039:'x':7CSize'のメンバではありません。」 主に1,2番目と同様のエラーが20個くらい出ています(´・ω・`)なんだかよく分かりません。 一応また質問テンプレ載せておきます。 【質問】 [1] 授業単元:プログラミング [2] 問題文: ウインドウ中でマウスクリックしたときにビットマップキャラクターが クリック場所に動いていくようなアニメーションを作成せよ。このときの OnLButtonUp(UINT nFlags, CPoint point)とOnTimer(UINT nIDEvent) に書くべき記述は? *ちなみにタイマー識別IDはID1とする [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン:VC++6.0 .NET [3.3] 言語: C++ [4] 期限: 2008年2月10日11:59まで [5] その他の制限: とくになし なんどもすいません。
76 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:36:21 ] >>75 全角スペースを使うな
77 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:37:13 ] THEバカス
78 名前: ◆TQgM1tAAxo [2008/02/08(金) 23:00:19 ] >>76 どうもすいません。 全角を消した結果でたエラーを載せます! 「error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。 error C2065: 'CLIENT_SIZE' : 定義されていない識別子です。 error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。 error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。 error C3861: 'CLIENT_SIZE': 識別子は、引数依存の照合を使用しても見つかりません。 error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。 error C2065: 'CLIENT_SIZE' : 定義されていない識別子です。 error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。 error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。 error C3861: 'CLIENT_SIZE': 識別子は、引数依存の照合を使用しても見つかりません。」 ちなみに、すべてCPoint g_tp = {CLIENT_SIZE.x / 2, CLIENT_SIZE.y / 2}; の文でエラーがでています!
79 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:28:18 ] >>78 >>59 はコードの一部だから、あれだけでは動かないよ。 そもそも問題は、「〜アニメーションを作成せよ」なのか 「〜に書くべき記述を答えよ」なのか、どちらだ?
80 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:34:51 ] >>78 まさかとは思うが、>59の一行目をコピーしていないって落ちじゃないよな?
81 名前: ◆TQgM1tAAxo [2008/02/08(金) 23:53:28 ] >>80 1行目を記述してもエラーがでてしまいます(´・ω・`) ちょっとエラー内容がかわったのでまた載せます! 「error C2552: 'CLIENT_SIZE' : 初期化子リストによる個別の識別子の初期化に誤りがあります。 error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。 'CPoint' : ベースを含む型はアグリゲートではありません。 error C2039: 'x' : 'CSize' のメンバではありません。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atltypes.h(26) : 'CSize' の宣言を確認してください。 error C2039: 'y' : 'CSize' のメンバではありません。 c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atltypes.h(26) : 'CSize' の宣言を確認してください。 error C2552: 'CLIENT_SIZE' : 初期化子リストによる個別の識別子の初期化に誤りがあります。 error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。 error C2039: 'x' : 'CSize' のメンバではありません。 error C2039: 'y' : 'CSize' のメンバではありません。」 ちなみに、課題は授業で作ったMFCアニメーションデータを改変し、マウスクリックで キャラクターを自由に移動させるようにしろというものです。 なので、onDrawなどの関数やその他のものはそろっています。 キャラクターを上下左右に動かす方法は分かるのですが、 クリックされた場所に動かすという記述方法が分からなくて困っています(´・ω・`)
82 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:56:29 ] まさかとは思うが、お前馬鹿だろw
83 名前: ◆TQgM1tAAxo [2008/02/09(土) 00:04:35 ] >>82 下にキャラクターが進むときはOnTimerに y+=10;(yはキャラクターのいるy座標値) と記述すればうごくのですが、クリックしたとこにうごかすのがどうしてもできなくて・・(´・ω・`) スムーズに動かず、いっきにクリックした位置に移動してしまったりの失敗の繰り返しです(´・ω・`) どうしたら良いでしょうか? ほんと頭悪くてすいません(´・ω・`)
84 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:04:57 ] >>81 キャラクターをクリックされた場所に動かすという記述方法は分かるのですが、 onDrawなどの関数やその他のものが分からなくて困っています(´・ω・`)
85 名前: ◆TQgM1tAAxo [2008/02/09(土) 00:09:43 ] >>84 どういうことですか?(´・ω・`) どうしたら良いのでしょうか?(´・ω・`)
86 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:13:45 ] 一挙手一投足、全て教わらないとできないなら、最早他人から教えてもらう必要なんてないだろ。
87 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:18:33 ] >>50 BAckermann関数 キャッシュのやつを作ってみたので一応添付 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6022.txt ショートカットを加えると確保領域が少なくすむのは何故なんだろ・・・・
88 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:28:13 ] 昨日59を書いたものだが、まさかこんな事になってるとは… OnLButtonUpとOnTimerに書くべき記述を答えれば良いだけじゃなかったのか DELAYの値をもっと大きくしてみろ もしくは int OnTimer(UINT nIDEvent) { if (TIMER_ID == nIDEvent) { //X軸方向の移動 if (g_cp.x < g_tp.x) {g_cp.x++;} else if (g_cp.x > g_tp.x) {g_cp.x--;} //Y軸方向の移動 if (g_cp.y < g_tp.y) {g_cp.y++;} else if (g_cp.y > g_tp.y) {g_cp.y++;} } } で代替。コピペじゃなくて自分で打つように あと、タイマーイベントの間隔を遅めにしてくれ ちなみに、cp=キャラクターポジション、tp=ターゲットポジションの略ね OnTimerとかってMFCのパーツだよな?使ってないからサッパリ思い出せんw
89 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:46:43 ] >>88 それを>>58 が理解できると思うか? またエラーが出るって言ってくるのがオチだろ。
90 名前: ◆TQgM1tAAxo [2008/02/09(土) 05:43:14 ] >>88 丁寧にありがとうございます!でも、もう一回考えて、ちょっと違う方法ですが自分で解決しました。 どうもありがとうございます >>89 考えたらできたわ
91 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:38:03 ] 最初から考えろ馬鹿。
92 名前:デフォルトの名無しさん [2008/02/09(土) 12:29:51 ] すいません。 教えて下さい。 0x1234を0x123fにするには (28) と (29) を行う。その演算子の 記号は (30) である。 また、上位1バイトを0にし、下位1バイトをそのままに するには、 (31) と (32) を行う。その演算子の記号は (33) である。 ビットを反転するには、 (34) と排他的論理和を行うか、ビット演算子の反転 を使用する。そのビット演算子(反転)の記号は (35) である。 (28)の解答群 ア 0x0000 イ 0x000F ウ 0x1230 エ 0xfff0 オ 0xffff (29)、(32)の解答群 ア 論理和 イ 論理積 ウ 排他的論理和 エ 否定論理和 オ 否定論理積 (30)、(33)、(35)の解答群 ア & イ | ウ ^ エ ~ オ ! (31)の解答群 ア 0x0001 イ 0x000f ウ 0x00ff エ 0xf000 オ 0xff00 (34)の解答群 ア 0x0000 イ 0x0001 ウ 0x1111 エ 0x1010 オ 0xffff
93 名前:デフォルトの名無しさん [2008/02/09(土) 12:30:33 ] キャスト演算子は、式の結果を一時的に指定したデータ型に変更するものである。例 えば、double型の変数aの小数点以下を切り捨てるには、 (36) と記述する。 キャスト演算子は (37) であり、算術演算子より優先順位が (38) ため、int型の変数a、bの除算を実数の精度で計算し、その結果をdouble型の変数c に格納する記述は (39) である。 また、キャスト変換はポインタにも有効であり、int型の配列の内容を1バイトずつ 参照することができる。 なお、次のプログラムの出力結果は処理系によって異なる場合があるが、本問では考 慮しないものとする。 #include <stdio.h> main() { int a[] = {0x01020304, 0x05060708}; int i; char *p; p = (40) ; for (i = 1;i <= 8; i++) printf(゙%x゙,*p++); }
94 名前:デフォルトの名無しさん [2008/02/09(土) 12:31:51 ] (36)の解答群 ア int a イ int (a) ウ (int a) エ (int) a オ a(int) (37)の解答群 ア 単項演算子 イ 関係演算子 ウ 比較演算子 エ 論理演算子 オ 条件演算子 (38)の解答群 ア 高い イ 低い (39)の解答群 ア c = a / b イ (double)c = a / b ウ c = (double)a / b エ c = (double)(a / b) (40)の解答群 ア char a イ char *a ウ (char) a エ (char) *a オ (char *) a
95 名前:デフォルトの名無しさん [2008/02/09(土) 12:32:22 ] 文が見づらくてすいません。m(_ _)m どなたか解答をお願いいたします。
96 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:35:15 ] >>95 ttp://pc11.2ch.net/test/read.cgi/tech/1201083176/808
97 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:58:33 ] すいませんが、>>74 に答えていただけませんか?
98 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:17:07 ] >>97 ・yearとmonthを入力できるようにする。 ・1日の曜日を求める。
99 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:29:41 ] >>98 ありがとうございます。えっと、つまり…どの部分をどう変えればいいんでしょうか…orz
100 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:35:24 ] >>99 int year = 2008; int month = 2; int first_dow = 5; /* 1日は金曜日 */ を変えればいい。 year, monthはそれぞれscanf()か何かで入力すればいいし、first_dowは問題に書いてある通り。 >(課題では,前回のプログラムを使って1日の曜日を計算する) つまり、「前回のプログラム」がないと作れない。
101 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:37:59 ] >>100 の優しさに発情した
102 名前:デフォルトの名無しさん [2008/02/09(土) 13:55:43 ] ありがとうございます。 すいません これもできれば... 問? 関数定義に関する次の記述中の()に入れる適切な字句を解答群の中か ら選べ。なお、同じ解答を複数回使用してもよい。 関数の基本構成は次のようになっている。 記憶クラス 型 関数名(引数の型と名前) { 宣言と文 } 関数の記憶クラスには、その関数をほかのモジュールから参照できる (1) 、 その関数をほかのモジュールから参照できない (2) があり、特に指定しない場 合は (3) になる。 関数の型は、その関数が (4) 文で戻すデータの型である。また、特殊な型と して (5) があり、戻り値をもたないことを示す。型が (6) の戻り値 を使用する場合には、省略することができる。 関数でデータのやりとりをするには引数を用いる。関数の定義側の変数を (7) と呼び、この関数を呼びだす側の引数を (8) と呼ぶ。 (1)〜(3)、(5) (6)の解答群 ア char イ extern ウ int エ static オ void (4)の解答群 ア break イ continue ウ exit エ goto オ return (7) (8)の解答群 ア 定数 イ 仮引数 ウ 元引数 エ 実引数 オ ポインタ変数